<?php
$str = <<<TAB
going to
write some
[table]
[thead]
[td]test[/td]
[td]test[/td]
[td]moo[/td]
[td]a[/td]
[/thead]
[tr]
[td]test[/td]
[td]moo[/td]
[/tr]
[tr]
[td]test[/td]
[td]test[/td]
[td]moo[/td]
[td]a[/td]
[/tr]
[/table]
text
here
TAB;
function markupDoc($post){
//tables
while(($post2 = preg_replace("/\[td]((?:(?!\[td\]).)+?)\[\/td\]/s", '<td>\\1</td>', $post)) !== $post){ $post=$post2;
}
while(($post2 = preg_replace("/\[tr]((?:(?!\[tr\]).)+?)\[\/tr\]/s", "<tr>\\1</tr>", $post)) !== $post){ $post=$post2;
}
while(($post2 = preg_replace("/\[thead]((?:(?!\[thead\]).)+?)\[\/thead\]/s", '<thead>\\1</thead>', $post)) !== $post){ $post=$post2;
}
while(($post2 = preg_replace("/\[table]((?:(?!\[table\]).)+?)\[\/table\]/s", '<table class="table table-striped table-bordered">\\1</table>', $post)) !== $post){ $post=$post2;
}
return $post;
}
function parsePost($post)
{
$table_end = mb_strpos($post, '[/table]', $table_start);
$output .= markupDoc
(mb_substr($post, $table_start, $table_end - $table_start)); return $output;
}
echo parsePost($str);
?>
PD9waHAKJHN0ciA9IDw8PFRBQgpnb2luZyB0bwp3cml0ZSBzb21lClt0YWJsZV0KICAgIFt0aGVhZF0KICAgICAgICBbdGRddGVzdFsvdGRdCiAgICAgICAgW3RkXXRlc3RbL3RkXQogICAgICAgIFt0ZF1tb29bL3RkXQogICAgICAgIFt0ZF1hWy90ZF0KICAgIFsvdGhlYWRdCiAgICBbdHJdCiAgICAgICAgW3RkXXRlc3RbL3RkXQogICAgICAgIFt0ZF1tb29bL3RkXQogICAgWy90cl0KICAgIFt0cl0KICAgICAgICBbdGRddGVzdFsvdGRdCiAgICAgICAgW3RkXXRlc3RbL3RkXQogICAgICAgIFt0ZF1tb29bL3RkXQogICAgICAgIFt0ZF1hWy90ZF0KICAgIFsvdHJdClsvdGFibGVdCnRleHQKaGVyZQpUQUI7CgpmdW5jdGlvbiBtYXJrdXBEb2MoJHBvc3QpewogICAgLy90YWJsZXMKICAgIHdoaWxlKCgkcG9zdDIgPSBwcmVnX3JlcGxhY2UoIi9cW3RkXSgoPzooPyFcW3RkXF0pLikrPylcW1wvdGRcXS9zIiwgJzx0ZD5cXDE8L3RkPicsICRwb3N0KSkgIT09ICRwb3N0KXsKICAgICAgICAkcG9zdD0kcG9zdDI7CiAgICB9CiAgICB3aGlsZSgoJHBvc3QyID0gcHJlZ19yZXBsYWNlKCIvXFt0cl0oKD86KD8hXFt0clxdKS4pKz8pXFtcL3RyXF0vcyIsICI8dHI+XFwxPC90cj4iLCAkcG9zdCkpICE9PSAkcG9zdCl7CiAgICAgICAgJHBvc3Q9JHBvc3QyOwogICAgfQogICAgd2hpbGUoKCRwb3N0MiA9IHByZWdfcmVwbGFjZSgiL1xbdGhlYWRdKCg/Oig/IVxbdGhlYWRcXSkuKSs/KVxbXC90aGVhZFxdL3MiLCAnPHRoZWFkPlxcMTwvdGhlYWQ+JywgJHBvc3QpKSAhPT0gJHBvc3QpewogICAgICAgICRwb3N0PSRwb3N0MjsKICAgIH0KICAgIHdoaWxlKCgkcG9zdDIgPSBwcmVnX3JlcGxhY2UoIi9cW3RhYmxlXSgoPzooPyFcW3RhYmxlXF0pLikrPylcW1wvdGFibGVcXS9zIiwgJzx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZCI+XFwxPC90YWJsZT4nLCAkcG9zdCkpICE9PSAkcG9zdCl7CiAgICAgICAgJHBvc3Q9JHBvc3QyOwogICAgfSAgIAogICAgcmV0dXJuICRwb3N0Owp9CgpmdW5jdGlvbiBwYXJzZVBvc3QoJHBvc3QpCnsKICAgICR0YWJsZV9zdGFydCA9IG1iX3N0cnBvcygkcG9zdCwgJ1t0YWJsZV0nKTsKICAgICR0YWJsZV9lbmQgPSBtYl9zdHJwb3MoJHBvc3QsICdbL3RhYmxlXScsICR0YWJsZV9zdGFydCk7CiAgICAkdGFibGVfZW5kICs9IG1iX3N0cmxlbignWy90YWJsZV0nKTsKCiAgICAkb3V0cHV0ID0gbmwyYnIobWJfc3Vic3RyKCRwb3N0LCAwLCAkdGFibGVfc3RhcnQpKTsKICAgICRvdXRwdXQgLj0gbWFya3VwRG9jKG1iX3N1YnN0cigkcG9zdCwgJHRhYmxlX3N0YXJ0LCAkdGFibGVfZW5kIC0gJHRhYmxlX3N0YXJ0KSk7CiAgICAkb3V0cHV0IC49IG5sMmJyKG1iX3N1YnN0cigkcG9zdCwgJHRhYmxlX2VuZCkpOwogICAgcmV0dXJuICRvdXRwdXQ7Cn0KCmVjaG8gcGFyc2VQb3N0KCRzdHIpOwoKPz4K