array('type' => BBCODE_TYPE_ROOT),
							'code' => array(
								'type' => BBCODE_TYPE_OPTARG,
								'open_tag' => '
',
								'close_tag' => '
',
								'default_arg' => '{CONTENT}'
							),
							'ul' => array(
								'type' => BBCODE_TYPE_NOARG,
								'open_tag' => '',
								'childs' => 'li'
							),
							'li' => array(
								'type' => BBCODE_TYPE_NOARG,
								'open_tag' => '',
								'close_tag' => '',
								'parent' => 'ul',
								'childs' => 'url'
							),
							'url' => array(
								'type' => BBCODE_TYPE_OPTARG,
								'open_tag' => '',
								'close_tag' => '',
								'default_arg' => '{CONTENT}',
								'parent' => 'p,li'
							)
						)
					);
					$text = nl2br(bbcode_parse($ctx, htmlspecialchars($text)));
					if (preg_match_all('#\]*\>(.*?)\
#s', $text, $matches) && !empty($matches[1])) {
						foreach($matches[1] as $string) {
							$text = str_replace($string, str_replace('
', '', $string), $text);
						}
					}
					if (preg_match_all('#\#s', $text, $matches) && !empty($matches[1])) {
						foreach($matches[1] as $string) {
							$text = str_replace($string, str_replace('
', '', $string), $text);
						}
					}
					$text = preg_replace(
						array('#(
(\r?\n?))*(
(\r?\n?))*#', '#(
(\r?\n?))*
(
(\r?\n?))*#', '#(
(\r?\n?)){2,}#'),
						array('\2
\2', '
\2
\2', '
\2'),
						$text
					);
					return $text;
				},
				array('is_safe' => array('html'))
			)
		);
	}
}