[
'pattern' => '/\[h1\](.*?)\[\/h1\]/s',
'replace' => '
$1
',
'content' => '$1'
],
'h2' => [
'pattern' => '/\[h2\](.*?)\[\/h2\]/s',
'replace' => '$1
',
'content' => '$1'
],
'h3' => [
'pattern' => '/\[h3\](.*?)\[\/h3\]/s',
'replace' => '$1
',
'content' => '$1'
],
'h4' => [
'pattern' => '/\[h4\](.*?)\[\/h4\]/s',
'replace' => '$1
',
'content' => '$1'
],
'h5' => [
'pattern' => '/\[h5\](.*?)\[\/h5\]/s',
'replace' => '$1
',
'content' => '$1'
],
'h6' => [
'pattern' => '/\[h6\](.*?)\[\/h6\]/s',
'replace' => '$1
',
'content' => '$1'
],
'bold' => [
'pattern' => '/\[b\](.*?)\[\/b\]/s',
'replace' => '$1',
'content' => '$1'
],
'italic' => [
'pattern' => '/\[i\](.*?)\[\/i\]/s',
'replace' => '$1',
'content' => '$1'
],
'underline' => [
'pattern' => '/\[u\](.*?)\[\/u\]/s',
'replace' => '$1',
'content' => '$1'
],
'strikethrough' => [
'pattern' => '/\[s\](.*?)\[\/s\]/s',
'replace' => '$1',
'content' => '$1'
],
'quote' => [
'pattern' => '/\[quote\](.*?)\[\/quote\]/s',
'replace' => '$1
',
'content' => '$1'
],
'link' => [
'pattern' => '/\[url\](.*?)\[\/url\]/s',
'replace' => '$1',
'content' => '$1'
],
'namedlink' => [
'pattern' => '/\[url\=(.*?)\](.*?)\[\/url\]/s',
'replace' => '$2',
'content' => '$2'
],
'image' => [
'pattern' => '/\[img\](.*?)\[\/img\]/s',
'replace' => '
',
'content' => '$1'
],
'orderedlistnumerical' => [
'pattern' => '/\[list=1\](.*?)\[\/list\]/s',
'replace' => '$1
',
'content' => '$1'
],
'orderedlistalpha' => [
'pattern' => '/\[list=a\](.*?)\[\/list\]/s',
'replace' => '$1
',
'content' => '$1'
],
'unorderedlist' => [
'pattern' => '/\[list\](.*?)\[\/list\]/s',
'replace' => '',
'content' => '$1'
],
'listitem' => [
'pattern' => '/\[\*\](.*)/',
'replace' => '$1',
'content' => '$1'
],
'code' => [
'pattern' => '/\[code\](.*?)\[\/code\]/s',
'replace' => '$1',
'content' => '$1'
],
'youtube' => [
'pattern' => '/\[youtube\](.*?)\[\/youtube\]/s',
'replace' => '',
'content' => '$1'
],
'sub' => [
'pattern' => '/\[sub\](.*?)\[\/sub\]/s',
'replace' => '$1',
'content' => '$1'
],
'sup' => [
'pattern' => '/\[sup\](.*?)\[\/sup\]/s',
'replace' => '$1',
'content' => '$1'
],
'small' => [
'pattern' => '/\[small\](.*?)\[\/small\]/s',
'replace' => '$1',
'content' => '$1'
],
'table' => [
'pattern' => '/\[table\](.*?)\[\/table\]/s',
'replace' => '',
'content' => '$1',
],
'table-row' => [
'pattern' => '/\[tr\](.*?)\[\/tr\]/s',
'replace' => '$1
',
'content' => '$1',
],
'table-data' => [
'pattern' => '/\[td\](.*?)\[\/td\]/s',
'replace' => '$1 | ',
'content' => '$1',
],
];
private function searchAndReplace(string $pattern, string $replace, string $source): string {
while (preg_match($pattern, $source)) {
$source = preg_replace($pattern, $replace, $source);
}
return $source;
}
public function stripTags(string $source): string {
foreach ($this->parsers as $name => $parser) {
$source = $this->searchAndReplace($parser['pattern'] . 'i', $parser['content'], $source);
}
return $source;
}
public function parse(string $source, $caseInsensitive = null): string {
$caseInsensitive = $caseInsensitive === self::CASE_INSENSITIVE ? true : false;
foreach ($this->parsers as $name => $parser) {
$pattern = ($caseInsensitive) ? $parser['pattern'] . 'i' : $parser['pattern'];
$source = $this->searchAndReplace($pattern, $parser['replace'], $source);
}
return $source;
}
}