]> git.mxchange.org Git - friendica.git/commitdiff
Added support to [noparse], [nobb] and [pre] as bbcode escape tags.
authorAbinoam P. Marques Jr <abinoam@gmail.com>
Sun, 12 Feb 2012 22:35:29 +0000 (14:35 -0800)
committerAbinoam P. Marques Jr <abinoam@gmail.com>
Sun, 12 Feb 2012 22:35:29 +0000 (14:35 -0800)
include/bbcode.php

index 7133a1a34d256206856a58f16070a2285d6d02d6..3534a7315fafc9385bc71beea105d59c42785e81 100755 (executable)
@@ -24,13 +24,40 @@ function tryoembed($match){
        
 }
 
+// [noparse][i]italic[/i][/noparse] turns into 
+// [noparse][ i ]italic[ /i ][/noparse], 
+// to hide them from parser.
+
+function bb_spacefy($st) {
+  $whole_match = $st[0];
+  $captured = $st[1];
+  $spacefied = preg_replace("/\[(.*?)\]/", "[ $1 ]", $captured);
+  $new_str = str_replace($captured, $spacefied, $whole_match);
+  return $new_str;
+}
+
+// The previously spacefied [noparse][ i ]italic[ /i ][/noparse], 
+// now turns back and the [noparse] tags are trimed
+// returning [i]italic[/i]
 
+function bb_unspacefy_and_trim($st) {
+  $whole_match = $st[0];
+  $captured = $st[1];
+  $unspacefied = preg_replace("/\[ (.*?)\ ]/", "[$1]", $captured);
+  return $unspacefied;
+}
 
        // BBcode 2 HTML was written by WAY2WEB.net
        // extended to work with Mistpark/Friendica - Mike Macgirvin
 
 function bbcode($Text,$preserve_nl = false) {
 
+       // Hide all [noparse] contained bbtags spacefying them
+
+       $Text = preg_replace_callback("/\[noparse\](.*?)\[\/noparse\]/ism", 'bb_spacefy',$Text);
+       $Text = preg_replace_callback("/\[nobb\](.*?)\[\/nobb\]/ism", 'bb_spacefy',$Text);
+       $Text = preg_replace_callback("/\[pre\](.*?)\[\/pre\]/ism", 'bb_spacefy',$Text);
+
 
        // Extract a single private image which uses data url's since preg has issues with 
        // large data sizes. Stash it away while we do bbcode conversion, and then put it back 
@@ -227,6 +254,13 @@ upper-alpha;">$2</ul>' ,$Text);
                $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/ism",'',$Text);
        }
 
+       // Unhide all [noparse] contained bbtags unspacefying them 
+       // and triming the [noparse] tag.
+
+       $Text = preg_replace_callback("/\[noparse\](.*?)\[\/noparse\]/ism", 'bb_unspacefy_and_trim',$Text);
+       $Text = preg_replace_callback("/\[nobb\](.*?)\[\/nobb\]/ism", 'bb_unspacefy_and_trim',$Text);
+       $Text = preg_replace_callback("/\[pre\](.*?)\[\/pre\]/ism", 'bb_unspacefy_and_trim',$Text);
+
        // fix any escaped ampersands that may have been converted into links
        $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text);
        if(strlen($saved_image))