","",
"","",
"","",
"
",
"","",
"","",
"","
",
"","
",
"","
",
"","
");
$post = bbCleaner($post);
/* Convert all the basic BBCodes */
$post = str_ireplace($bbcode,$html,$post);
/* Now for the more complicated BBCode conversion */
$post = runBBScan($post);
$post = str_replace("\n","
",$post);
/* Finally, process smilies */
if($isOsimo){ $post = processSmilies($post); }
return $post;
}
/* No-BBCode Scan
* Scans the post and makes sure that
* everything in-between [nocode][/nocode]
* does not get interpreted as bbcode
*/
function runNoBBScan($post,$offset=0)
{
$type = "nocode";
$tag = "[$type]";
$pos = stripos($post,$tag,$offset);
if($pos!==false)
{
$offset = $pos+strlen($tag);
$pos2 = stripos($post,"[/$type]",$offset);
if($pos2!==false)
{
$data = substr($post,$offset,($pos2-$offset));
$offset = $pos2 + strlen("[/$type]");
}
$edited = str_replace("[","[",$data);
$edited = str_replace("]","]",$edited);
$post = substr_replace($post,$edited,$pos,(($pos2+strlen("[/$type]"))-$pos));
return runNoBBScan($post,$offset);
}
return $post;
}
/*
* BBCode cleaner
* Checks to make sure all tags are closed.
* Not too fancy, but avoids html errors
*/
function bbCleaner($post)
{
$bbcode = array(
"b",
"i",
"u",
"list",
"*",
"code",
"right",
"left",
"center"
);
foreach($bbcode as $tag)
{
/* Replace all tags with lower-case versions */
$post = str_ireplace("[$tag]","[$tag]",$post);
$post = str_ireplace("[/$tag]","[/$tag]",$post);
/* Count number of open tags */
$open = substr_count($post,strtolower("[$tag]"));
//$open += substr_count($post,strtoupper("[$tag]"));
/* Count number of closed tags */
$closed = substr_count($post,strtolower("[/$tag]"));
//$closed += substr_count($post,strtoupper("[/$tag]"));
/* Case 1: More open than closed */
if($open>$closed)
{
for($i=0;$i<($open-$closed);$i++)
{
$post .= "[/$tag]";
}
}
/* Case 2: More closed than open */
elseif($closed>$open)
{
for($i=0;$i<($closed-$open);$i++)
{
$post = "[$tag]".$post;
}
}
}
return $post;
}
function runBBScan($post)
{
$post = fancyBB($post,'email');
$post = fancyBB($post,'url');
$post = fancyBB($post,'size');
$post = fancyBB($post,'font');
$post = fancyBB($post,'color');
$post = fancyBB($post,'img');
$post = fancyBB($post,'spoiler');
$post = fancyBB($post,'quote');
$post = fancyBB($post,'align');
$post = fancyBB($post,'cell');
$post = fancyBB($post,'table');
return $post;
}
function fancyBB($post,$type,$offset=0)
{
$tag = "[$type]";
$pos = stripos($post,$tag,$offset);
if($pos!==false)
{
$offset = $pos+strlen($tag);
$pos2 = stripos($post,"[/$type]",$offset);
if($pos2!==false)
{
$data = substr($post,$offset,($pos2-$offset));
$offset = $pos2 + strlen("[/$type]");
}
}
else
{
/* check for tag with attribute */
$_tag = "[$type=";
$_pos = stripos($post,$_tag,$offset);
if($_pos!==false)
{
/* Attr found, get value */
$offset = $_pos+strlen($_tag);
$_pos2 = strpos($post,']',$offset);
if($_pos2!==false)
{
/* Got attr value */
$data1 = substr($post,$offset,($_pos2-$offset));
$offset = $_pos2+1;
$_pos3 = stripos($post,"[/$type]",$offset);
if($_pos3!==false)
{
$data2 = substr($post,$offset,($_pos3-$offset));
$offset = $_pos3 + strlen("[/$type]");
$attr = true;
}
}
}
else
{
return $post;
}
}
if($type=='email')
{
if($attr)
{
$search = "[email=".$data1."]".$data2."[/email]";
if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); }
$replace = "$data2";
}
else
{
$search = "[email]".$data."[/email]";
$replace = "$data";
}
$post = str_ireplace($search,$replace,$post);
}
if($type=='url')
{
if($attr)
{
$search = "[url=".$data1."]".$data2."[/url]";
if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); }
if(strpos($data1,"mailto:")===false)
{
$data1 = urlFilter($data1);
}
$data2 = runBBScan($data2);
$replace = "$data2";
}
else
{
$search = "[url]".$data."[/url]";
$data = urlFilter($data);
$replace = "$data";
}
$post = str_ireplace($search,$replace,$post);
}
if($type=='img')
{
$search = "[img]".$data."[/img]";
$data = urlFilter($data);
$replace = "
";
$post = str_ireplace($search,$replace,$post);
}
if($type=='size')
{
$search = "[size=".$data1."]".$data2."[/size]";
$data2 = runBBScan($data2);
if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); }
if(strpos($data1,"px")!==false){ $replace = "{$data2}"; }
else { $replace = "{$data2}"; }
$post = str_ireplace($search,$replace,$post);
}
if($type=='font')
{
$search = "[font=".$data1."]".$data2."[/font]";
$data2 = runBBScan($data2);
if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); }
$replace = "{$data2}";
$post = str_ireplace($search,$replace,$post);
}
if($type=='color')
{
$search = "[color=".$data1."]".$data2."[/color]";
$data2 = runBBScan($data2);
if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); }
$replace = "{$data2}";
$post = str_ireplace($search,$replace,$post);
}
if($type=='spoiler')
{
$search = "[spoiler]".$data."[/spoiler]";
$data = runBBScan($data);
$replace = "{$data}";
$post = str_ireplace($search,$replace,$post);
}
if($type=='quote')
{
if($attr)
{
$search = "[quote=".$data1."]".$data2."[/quote]";
$data2 = runBBScan($data2);
$replace = "Quote: original post by {$data1}
".trim($data2)."
";
$post = str_ireplace($search,$replace,$post);
}
else
{
$search = "[quote]".$data."[/quote]";
$data = runBBScan($data);
$replace = "Quote:
".trim($data)."
";
$post = str_ireplace($search,$replace,$post);
}
}
if($type=='align')
{
$search = "[align=".$data1."]".$data2."[/align]";
$data2 = runBBScan($data2);
$replace = "".$data2."
";
$post = str_ireplace($search,$replace,$post);
}
if($type=='table')
{
if($attr){
$search = "[table=".$data1."]".$data2."[/table]";
$data2 = str_replace("\n","",$data2);
$data2 = runBBScan($data2);
$table_attr = parseTableAttr($data1);
$replace = "";
$post = str_ireplace($search,$replace,$post);
}
else{
$search = "[table]".$data."[/table]";
$data = str_replace("\n","",$data);
$data = runBBScan($data);
$replace = "";
$post = str_ireplace($search,$replace,$post);
}
}
if($type=='cell')
{
if($attr){
$search = "[cell=".$data1."]".$data2."[/cell]";
$data2 = runBBScan($data2);
$cell_attr = parseTableCellAttr($data1);
$data2 = str_replace("\n","
",$data2);
$replace = "".$data2." | ";
$post = str_ireplace($search,$replace,$post);
}
else{
$search = "[cell]".$data."[/cell]";
$data = runBBScan($data);
$data = str_replace("\n","
",$data);
$replace = "".$data." | ";
$post = str_ireplace($search,$replace,$post);
}
}
if($offset";
$j++;
}
$post = str_replace($_SESSION['osimo']['smilies']['code'],$replace,$post);
}
return $post;
}
?>