- public function getFilters() {
- return array(
- new TwigFilter(
- 'bb2html',
- function($text) {
- $ctx = bbcode_create(
- array(
- '' => array('type' => BBCODE_TYPE_ROOT),
- 'code' => array(
- 'type' => BBCODE_TYPE_OPTARG,
- 'open_tag' => '<pre class="{PARAM}">',
- 'close_tag' => '</pre>',
- 'default_arg' => '{CONTENT}'
- ),
- 'ul' => array(
- 'type' => BBCODE_TYPE_NOARG,
- 'open_tag' => '<ul>',
- 'close_tag' => '</ul>',
- 'childs' => 'li'
- ),
- 'li' => array(
- 'type' => BBCODE_TYPE_NOARG,
- 'open_tag' => '<li>',
- 'close_tag' => '</li>',
- 'parent' => 'ul',
- 'childs' => 'url'
- ),
- 'url' => array(
- 'type' => BBCODE_TYPE_OPTARG,
- 'open_tag' => '<a href="{PARAM}">',
- 'close_tag' => '</a>',
- 'default_arg' => '{CONTENT}',
- 'parent' => 'p,li'
- )
- )
- );
- $text = nl2br(bbcode_parse($ctx, htmlspecialchars($text)));
- if (preg_match_all('#\<pre[^>]*\>(.*?)\</pre\>#s', $text, $matches) && !empty($matches[1])) {
- foreach($matches[1] as $string) {
- $text = str_replace($string, str_replace('<br />', '', $string), $text);
- }
- }
- if (preg_match_all('#\<ul[^>]*\>(.*?)\</ul\>#s', $text, $matches) && !empty($matches[1])) {
- foreach($matches[1] as $string) {
- $text = str_replace($string, str_replace('<br />', '', $string), $text);
- }
- }
- $text = preg_replace(
- array('#(<br />(\r?\n?))*<pre#s', '#</pre>(<br />(\r?\n?))*#', '#(<br />(\r?\n?))*<ul#s', '#</ul>(<br />(\r?\n?))*#', '#(<br />(\r?\n?)){2,}#'),
- array('</p>\2<pre', '</pre>\2<p>', '</p>\2<ul', '</ul>\2<p>', '</p>\2<p>'),
- $text
- );
- return $text;
- },
- array('is_safe' => array('html'))
- )
- );