diff options
Diffstat (limited to 'forum/utils/parser.php')
-rw-r--r-- | forum/utils/parser.php | 93 |
1 files changed, 37 insertions, 56 deletions
diff --git a/forum/utils/parser.php b/forum/utils/parser.php index e857c7e..b5a80b7 100644 --- a/forum/utils/parser.php +++ b/forum/utils/parser.php @@ -7,6 +7,7 @@ include_once($UTIL_DIR . "/smileys.php"); // strtr // ereg_replace // str_replace +// error_reporting // function parse($input, $indent = "") @@ -28,23 +29,32 @@ function parse($input, $indent = "") $output = $smile; } - // Insert images - $output = preg_replace("/http:\/\/(.*\.jpg|\.gif|\.png|\.jpeg)/s", "IMAGE$1EGAMI", $output); + // Find a unique symbols for image start and end markers + $imgstartsymbol = "A"; + $imgstartmarker = $imgstartsymbol; + while(strpos($output, $imgstartmarker)) $imgstartmarker .= $imgstartsymbol; + + $imgendsymbol = "B"; + $imgendmarker = $imgendsymbol; + while(strpos($output, $imgendmarker)) $imgendmarker .= $imgendsymbol; + + // Find and mark image URLs (so that they don't get converted into normal <a/> links) + $output = preg_replace("/http:\/\/(.*\.jpg|\.gif|\.png|\.jpeg)/", $imgstartmarker."$1".$imgendmarker, $output); // Replace URLs with <a></a> tags $output = preg_replace("/http:\/\/(.*?)([\n ])/s", "<a href=\"http://$1\">$1</a>$2", $output); - // Finish inserting images - $output = preg_replace("/IMAGE(.*?)EGAMI/s", "<img alt=\"$1\" src=\"imagecache.php?filename=$1\"/>", $output); + // Convert marked images to img tags and links + $output = preg_replace("/".$imgstartmarker."(.*?)".$imgendmarker."/s", "<a href=\"http://$1\"><img alt=\"$1\" src=\"?mode=imagecache&uri=http://$1\"/></a>", $output); // Replace [quote title=...]...[/quote] - $urls = ""; + $urls = ""; while(($start = strpos($output, "[quote"))) { - $pre = substr($output, 0, $start); - $url = substr($output, $start); - $end = strpos($url, "[/quote]") + strlen("[/quote]"); - $url = substr($url, 0, $end - strlen("[/quote]")); - $post = substr($output, $start + $end + strlen("[/quote]") ); + $pre = substr($output, 0, $start); + $url = substr($output, $start); + $end = strpos($url, "[/quote]") + strlen("[/quote]"); + $url = substr($url, 0, $end - strlen("[/quote]")); + $post = substr($output, $start + $end + strlen("[/quote]") ); $header = substr($url, 0, strpos($url, "]") + 1); $body = substr($url, strpos($url, "]") + 1); @@ -54,17 +64,17 @@ function parse($input, $indent = "") $header = str_replace(array("[quote"), "<div class=\"quote\">", $header); $header = str_replace(array("]"), " </div>", $header); - $urls .= $pre . $header . $body . "</div>"; - $output = $post; + $urls .= $pre . $header . $body . "</div>"; + $output = $post; } - $urls .= $output; - $output = $urls; + $urls .= $output; + $output = $urls; // // Hack to make quotes two levels deep. // // Replace [quote title=...]...[/quote] - $urls = ""; + $urls = ""; while(($start = strpos($output, "[quote"))) { $pre = substr($output, 0, $start); $url = substr($output, $start); @@ -83,48 +93,19 @@ function parse($input, $indent = "") $urls .= $pre . $header . $body . "</div>"; $output = $post; } - $urls .= $output; - $output = $urls; - - $search = array( - '/\[b\](.*?)\[\/b\]/is', - '/\[i\](.*?)\[\/i\]/is', - '/\[u\](.*?)\[\/u\]/is', - '/\[img\](.*?)\[\/img\]/is', - '/\[url\](.*?)\[\/url\]/is', - '/\[url\=(.*?)\](.*?)\[\/url\]/is' - ); - - $replace = array( - '<strong>$1</strong>', - '<em>$1</em>', - '<u>$1</u>', - '<img src="$1" />', - '<a href="$1">$1</a>', - '<a href="$1">$2</a>' - ); - - $output = preg_replace ($search, $replace, $output); - /* - // <b></b> - $b = array("[b]", "[B]"); - $b = str_replace($b, "<strong>", $output); - $output = $b; - - $b = array("[/b]", "[/B]"); - $b = str_replace($b, "</strong>", $output); - $output = $b; - - // <i></i> - $i = array("[i]", "[I]"); - $i = str_replace($i, "<em>", $output); - $output = $i; - - $i = array("[/i]", "[/i]"); - $i = str_replace($i, "</em>", $output); - $output = $i; - */ + $urls .= $output; + $output = $urls; + + $search = array('/\[b\](.*?)\[\/b\]/is', + '/\[i\](.*?)\[\/i\]/is', + '/\[u\](.*?)\[\/u\]/is'); + + $replace = array('<strong>$1</strong>', + '<em>$1</em>', + '<u>$1</u>'); + $output = preg_replace ($search, $replace, $output); + // Replace newlines with <br/> tags $nls = array("\n"); $nls = str_replace($nls, "<br/>\n", $output); |