File: /home/awaldron/public_html/archive/demo/functions/_content.php
<?php
function format_body($body,$stripslashes=1) {
if ($stripslashes) $body = stripslashes($body);
$body = format_body_first_pass($body);
// handle codeblocks
$code_tags = TRUE;
while ($code_tags) {
$parsed_str = $orig_str = find_innermost("[code]","[/code]",$body);
if ($orig_str === FALSE) $code_tags = FALSE;
else {
$parsed_str = str_replace("<br>","..break..",$parsed_str);
$parsed_str = str_replace(" ","..space..",$parsed_str);
$parsed_str = str_replace("[code]\n","[code]",$parsed_str);
$parsed_str = str_replace("\n[/code]","[/code]",$parsed_str);
$parsed_str = htmlspecialchars($parsed_str,ENT_QUOTES);
$incode = $parsed_str2 = substr($parsed_str,6,-7);
$parsed_str2 = str_replace("[","[",$parsed_str2);
$parsed_str2 = str_replace("]","]",$parsed_str2);
$parsed_str2 = str_replace("\\","\",$parsed_str2);
$parsed_str = str_replace($incode,$parsed_str2,$parsed_str);
$parsed_str = preg_replace("/\[code\](.*?)\[\/code\]/si", "<center><div id=\"code\" style=\"width:90%;font:10px Courier;text-align:left;\">\\1</div></center>", $parsed_str);
$parsed_str = str_replace("..break..","<br>",$parsed_str);
$parsed_str = str_replace("..space.."," ",$parsed_str);
$body = str_replace($orig_str,$parsed_str,$body);
}
}
// Change backslashes to forward slashes
//$body = str_replace("\\","/",$body);
// handle quotes
$quote_tags = TRUE;
while ($quote_tags) {
$parsed_str = $orig_str = find_innermost("[quote","[/quote]",$body);
if ($orig_str === FALSE) $quote_tags = FALSE;
else {
$parsed_str = str_replace("[quote]\n<br>","[quote]\n",$parsed_str);
$parsed_str = str_replace("\n<br>[/quote]","[/quote]\n",$parsed_str);
$parsed_str = preg_replace("/\[quote\](.*?)\[\/quote\]/si", "<center><div style=\"width:90%;text-align:left;\"><b>Quote:</b><br><div id=\"quote\">\\1</div></div></center>", $parsed_str);
$parsed_str = preg_replace("/\[quote=(.*?)\](.*?)\[\/quote\]/si", "<center><div style=\"width:90%;text-align:left;\"><b>\\1 wrote:</b><br><div id=\"quote\">\\2</div></div></center>", $parsed_str);
$body = str_replace($orig_str,$parsed_str,$body);
}
}
// handle numbered lists
$nl_tags = TRUE;
while ($nl_tags) {
$parsed_str = $orig_str = find_innermost("[nl]","[/nl]",$body);
if ($orig_str === FALSE) $nl_tags = FALSE;
else {
$parsed_str = str_replace("C++","C++",$parsed_str);
$parsed_str = str_replace("<br>+","+",$parsed_str);
$parsed_str = str_replace("+","<li>",$parsed_str);
$parsed_str = str_replace("[nl]","<ol>",$parsed_str);
$parsed_str = str_replace("[/nl]","</ol>",$parsed_str);
$body = str_replace($orig_str,$parsed_str,$body);
}
}
// handle bulleted lists
$bl_tags = TRUE;
while ($bl_tags) {
$parsed_str = $orig_str = find_innermost("[bl]","[/bl]",$body);
if ($orig_str === FALSE) $bl_tags = FALSE;
else {
$parsed_str = str_replace("C++","C++",$parsed_str);
$parsed_str = str_replace("<br>+","+",$parsed_str);
$parsed_str = str_replace("+","<li>",$parsed_str);
$parsed_str = str_replace("[bl]","<ul>",$parsed_str);
$parsed_str = str_replace("[/bl]","</ul>",$parsed_str);
$body = str_replace($orig_str,$parsed_str,$body);
}
}
// extract and parse tables
$tctr = 0;
$tables = TRUE;
while ($tables) {
$parsed_str = $orig_str = find_innermost("<table","</table>",$body);
if ($orig_str === FALSE) $tables = FALSE;
else {
$parsed_str = preg_replace("/\n<br>\s*<table/si","\n<table",$parsed_str);
$parsed_str = preg_replace("/\n<br>\s*<tr/si","\n<tr",$parsed_str);
$parsed_str = preg_replace("/\n<br>\s*<th/si","\n<th",$parsed_str);
$parsed_str = preg_replace("/\n<br>\s*<td/si","\n<td",$parsed_str);
$parsed_str = preg_replace("/\n<br>\s*<\/table/si","\n</table",$parsed_str);
$parsed_str = preg_replace("/\n<br>\s*<\/tr/si","\n</tr",$parsed_str);
$parsed_str = preg_replace("/\n<br>\s*<\/th/si","\n</th",$parsed_str);
$parsed_str = preg_replace("/\n<br>\s*<\/td/si","\n</td",$parsed_str);
$tbl[$tctr] = $parsed_str;
$body = str_replace($orig_str,"|-|TABLE".$tctr."|-|",$body);
$tctr++;
}
}
// Re-insert tables
for ($i=(count($tbl)-1); $i >= 0; $i--) {
$body = str_replace("|-|TABLE".$i."|-|",$tbl[$i],$body);
}
return $body;
}
function find_innermost($s_tag,$e_tag,$str) {
// Find first occurance of END TAG
$e_tag_pos = strpos($str,$e_tag) + strlen($e_tag);
if ($e_tag_pos === FALSE) return FALSE;
// Cut off everything after END TAG position
$str = substr($str,0,$e_tag_pos);
// Find last occurance of START TAG
$s_tag_pos = strrpos_fix($str,$s_tag);
if ($s_tag_pos === FALSE) return FALSE;
// Cut off everything prior to START TAG position
$str = substr($str,$s_tag_pos);
return $str;
}
function strrpos_fix($haystack,$needle) {
if (strpos($haystack,$needle) === FALSE) return FALSE;
while($ret = strrpos($haystack,$needle)) {
if (strncmp(substr($haystack,$ret,strlen($needle)),$needle,strlen($needle)) == 0 ) return $ret;
$haystack = substr($haystack,0,$ret -1 );
}
return $ret;
}
function format_body_first_pass($body) {
$domain = DOMAIN;
// Replace old [li] tags
$body = eregi_replace("\[li\]","<li>",$body);
$body = eregi_replace("\[/li\]","",$body);
// Replace simple formatting
$body = eregi_replace("\[b\]","<b>",$body);
$body = eregi_replace("\[/b\]","</b>",$body);
$body = eregi_replace("\[u\]","<u>",$body);
$body = eregi_replace("\[/u\]","</u>",$body);
$body = eregi_replace("\[i\]","<i>",$body);
$body = eregi_replace("\[/i\]","</i>",$body);
$body = eregi_replace("\[center\]","<center>",$body);
$body = eregi_replace("\[/center\]","</center>",$body);
// Replace Smilies
$body = str_replace(":biggrin:","<img src=\"/gui/smiles/icon_biggrin.gif\">",$body);
$body = str_replace(":smile:","<img src=\"/gui/smiles/icon_smile.gif\">",$body);
$body = str_replace(":sad:","<img src=\"/gui/smiles/icon_sad.gif\">",$body);
$body = str_replace(":surprised:","<img src=\"/gui/smiles/icon_surprised.gif\">",$body);
$body = str_replace(":shock:","<img src=\"/gui/smiles/icon_eek.gif\">",$body);
$body = str_replace(":confused:","<img src=\"/gui/smiles/icon_confused.gif\">",$body);
$body = str_replace(":shades:","<img src=\"/gui/smiles/icon_cool.gif\">",$body);
$body = str_replace(":lol:","<img src=\"/gui/smiles/icon_lol.gif\">",$body);
$body = str_replace(":mad:","<img src=\"/gui/smiles/icon_mad.gif\">",$body);
$body = str_replace(":razz:","<img src=\"/gui/smiles/icon_razz.gif\">",$body);
$body = str_replace(":oops:","<img src=\"/gui/smiles/icon_redface.gif\">",$body);
$body = str_replace(":cry:","<img src=\"/gui/smiles/icon_cry.gif\">",$body);
$body = str_replace(":evil:","<img src=\"/gui/smiles/icon_evil.gif\">",$body);
$body = str_replace(":twisted:","<img src=\"/gui/smiles/icon_twisted.gif\">",$body);
$body = str_replace(":roll:","<img src=\"/gui/smiles/icon_rolleyes.gif\">",$body);
$body = str_replace(":wink:","<img src=\"/gui/smiles/icon_wink.gif\">",$body);
$body = str_replace(":exclaim:","<img src=\"/gui/smiles/icon_exclaim.gif\">",$body);
$body = str_replace(":question:","<img src=\"/gui/smiles/icon_question.gif\">",$body);
$body = str_replace(":idea:","<img src=\"/gui/smiles/icon_idea.gif\">",$body);
$body = str_replace(":arrow:","<img src=\"/gui/smiles/icon_arrow.gif\">",$body);
// Replace Font Colors
$body = str_replace("[color=red]","<span style=\"color:#FF0000\">",$body);
$body = str_replace("[color=darkred]","<span style=\"color:#8B0000\">",$body);
$body = str_replace("[color=orange]","<span style=\"color:#FF8000\">",$body);
$body = str_replace("[color=brown]","<span style=\"color:#643505\">",$body);
$body = str_replace("[color=green]","<span style=\"color:#009900\">",$body);
$body = str_replace("[color=olive]","<span style=\"color:#808000\">",$body);
$body = str_replace("[color=blue]","<span style=\"color:#0000FF\">",$body);
$body = str_replace("[color=darkblue]","<span style=\"color:#".COLOR_TBAR."\">",$body);
$body = str_replace("[color=indigo]","<span style=\"color:#4B0082\">",$body);
$body = str_replace("[color=violet]","<span style=\"color:#EE82EE\">",$body);
$body = str_replace("[color=black]","<span style=\"color:#000000\">",$body);
$body = str_replace("[color=white]","<span style=\"color:#FFFFFF\">",$body);
$body = preg_replace("/\[color=(.*?)\]/si", "<span style=\"color:\\1\">", $body);
$body = str_replace("[/color]","</span>",$body);
// Replace Font Sizes
$body = preg_replace("/\[size=(.*?)\]/si", "<span style=\"font-size:\\1px\">", $body);
$body = str_replace("[/size]","</span>",$body);
// Do no allow scripts
$body = preg_replace("/<script(.*?)<\/script>/si", "", $body);
// Replace Images
$body = preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\"\\1\" border=\"0\">", $body);
$body = preg_replace("/\[img=r\](.*?)\[\/img\]/si", "<img src=\"\\1\" border=\"0\" align=\"right\" style=\"margin-left:8px;margin-bottom:5px;\">", $body);
$body = preg_replace("/\[img=l\](.*?)\[\/img\]/si", "<img src=\"\\1\" border=\"0\" align=\"left\" style=\"margin-right:8px;margin-bottom:5px;\">", $body);
// Any email address : No New Target
$body = preg_replace("/\[url\]([^\[]*?)@([^\[]*?)\[\/url\]/si", "<a href=\"mailto:\\1@\\2\">\\1@\\2</a>", $body);
// Any email address (that user has specified as so) : No New Target
$body = eregi_replace("\\[url=mailto:([^\\[]*)\]([^\\[]*)\\[/url\\]","<a href=\"mailto:\\1\">\\2</a>",$body);
// An Email Address with different text : No New Target
$body = eregi_replace("\\[url=([^\\[]*)@([^\\[]*)\]([^\\[]*)\\[/url\\]","<a href=\"mailto:\\1@\\2\">\\3</a>",$body);
// Any file or document : New Target
$body = preg_replace("/\[url\]([^\[]*?)(doc|dot|pdf|xls|xlt|ppt|txt)\[\/url\]/si", "<a href=\"\\1\\2\" target=\"new\">\\1\\2</a>", $body);
$body = preg_replace("/\[url=([^\[]*)(doc|dot|pdf|xls|xlt|ppt|txt)\]([^\[]*)\[\/url\]/","<a href=\"\\1\\2\" target=\"new\">\\3</a>",$body);
// Any Local URL : No New Target
$body = preg_replace("/\[url\]\/([^\[]*?)\[\/url\]/si", "<a href=\"/\\1\">/\\1</a>", $body);
$body = preg_replace("/\[url=\/([^\]]*)\]([^\[]*)\[\/url\]/im","<a href=\"/\\1\">\\2</a>",$body);
// Any .internal URL : No New Target
$body = preg_replace("/\[url\]([^\[]*?)".$domain."([^@]*?)\[\/url\]/si", "<a href=\"\\1".$domain."\\2\">\\1".$domain."\\2</a>", $body);
$body = preg_replace("/\[url=([^\[]*)".$domain."([^\[]*)\]([^\[]*)\[\/url\]/si","<a href=\"\\1".$domain."\\2\">\\3</a>",$body);
// Any Other URL : New Target
$body = preg_replace("/\[url\]([^\[]*?)\[\/url\]/si", "<a href=\"\\1\" target=\"new\">\\1</a>", $body);
$body = preg_replace("/\[url=([^\[]*)\]([^\[]*)\[\/url\]/si","<a href=\"\\1\" target=\"new\">\\2</a>",$body);
// FILE Tag
$body = preg_replace("/\[file\]([^\[]*?)\[\/file\]/si", "<a href=\"http://appserver.internal/\\1\" target=\"file\">http://appserver.internal/\\1</a>", $body);
$body = preg_replace("/\[file=([^\[]*)\]([^\[]*)\[\/file\]/si","<a href=\"http://appserver.internal/\\1\" target=\"file\">\\2</a>",$body);
// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
// xxxx can only be alpha characters.
// yyyy is anything up to the first space, newline, comma, double quote or <
$body = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $body);
$body = preg_replace("#(^|[\n ])([\w]+?:\\\\[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $body);
// Replace \n with breaks
$body = str_replace("\n","\n<br>",$body);
return $body;
}
?>