diff options
Diffstat (limited to 'forum/utils/parser.php')
-rw-r--r-- | forum/utils/parser.php | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/forum/utils/parser.php b/forum/utils/parser.php new file mode 100644 index 0000000..3c33a9b --- /dev/null +++ b/forum/utils/parser.php @@ -0,0 +1,126 @@ +<?php +include_once($UTIL_DIR . "/convert.php"); +include_once($UTIL_DIR . "/smileys.php"); + +function parse($input, $indent = "") +{ + global $testing; + // Remove all tags from input (convert to xml) + $output = convert_xml($input); + + // Replace newlines with '\n' and indent code. + $nls = array("\n\r", "\n\c", "\n"); + $nls = str_replace($nls, "\n" . $indent, $indent . $output); + $output = $nls; + + // Put in the smileys + global $smileys; + foreach($smileys as $smiley) { + $smile = $smiley[0]; + $smile = str_replace($smile, "<img alt=\"\" src=\"gfx/smileys/" . $smiley[1] . "\"></img>", $output); + $output = $smile; + } + + // Replace URLs with <a></a> tags + $urls = ""; + while(($start = strpos($output, "http://"))) { + $pre = substr($output, 0, $start); + $url = substr($output, $start); + $end1 = strpos($url, " "); + $end2 = strpos($url, "\n"); + if($end1 == 0) { + if($end2 == 0) $end = strlen($url); + else $end = $end2; + } else { + if($end2 == 0) $end = $end1; + else if($end1 < $end2) $end = $end1; + else $end = $end2; + } + $url = substr($url, 0, $end); + $post = substr($output, $start + $end); + if(strstr($url, ".jpg") || strstr($url, ".gif") || strstr($url, ".png")) { + $urls .= $pre . "<a href=\"" . $url . "\"><img alt=\"" . $url . "\" style=\"border: solid red 1px;\" src=\"imagecache.php?filename=" . urlencode($url) . "\"/></a>"; + } else { + $urls .= $pre . "<a href=\"" . $url . "\">" . $url . "</a>"; + } + $output = $post; + } + $urls .= $output; + $output = $urls; + + // Replace [quote title=...]...[/quote] + $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]") ); + + $header = substr($url, 0, strpos($url, "]") + 1); + $body = substr($url, strpos($url, "]") + 1); + + $header = str_replace(array("title"), "", $header); + $header = str_replace(array("="), "<div class=\"title\">", $header); + $header = str_replace(array("[quote"), "<div class=\"quote\">", $header); + $header = str_replace(array("]"), " </div>", $header); + + $urls .= $pre . $header . $body . "</div>"; + $output = $post; + } + $urls .= $output; + $output = $urls; + + // + // Hack to make quotes two levels deep. + // + // Replace [quote title=...]...[/quote] + $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]") ); + + $header = substr($url, 0, strpos($url, "]") + 1); + $body = substr($url, strpos($url, "]") + 1); + + $header = str_replace(array("title"), "", $header); + $header = str_replace(array("="), "<div class=\"title\">", $header); + $header = str_replace(array("[quote"), "<div class=\"quote\">", $header); + $header = str_replace(array("]"), " </div>", $header); + + $urls .= $pre . $header . $body . "</div>"; + $output = $post; + } + $urls .= $output; + $output = $urls; + + // <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; + + // Replace newlines with <br/> tags + $nls = array("\n"); + $nls = str_replace($nls, "<br/>\n", $output); + $output = $nls; + + return $output; +} + +?> |