summaryrefslogtreecommitdiff
path: root/forum/utils/parser.php
diff options
context:
space:
mode:
Diffstat (limited to 'forum/utils/parser.php')
-rw-r--r--forum/utils/parser.php126
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;
+}
+
+?>