diff --git a/zukero/userbbcode/event/main_listener.php b/zukero/userbbcode/event/main_listener.php index 032599e..d2200ff 100644 --- a/zukero/userbbcode/event/main_listener.php +++ b/zukero/userbbcode/event/main_listener.php @@ -26,6 +26,7 @@ static public function getSubscribedEvents() { return array( 'core.text_formatter_s9e_configure_after' => 'configure_usernamebbcode', + 'core.text_formatter_s9e_parser_setup' => 'configure_parser', 'core.text_formatter_s9e_render_after' => 'prepare_render_usernamebbcode', ); } @@ -47,6 +48,23 @@ public function __construct(\phpbb\user_loader $user_loader, \phpbb\template\tem $this->language = $language; } + public function configure_parser($event) + { + $parser = $event['parser']->get_parser(); + $parser->registerParser( + 'ZukeroUserbbcode', + function ($text, $matches) use ($parser) + { + foreach ($matches as $match) + { + list($str, $pos) = $match[0]; + $this->add_user_tag($parser, $pos, $str); + } + }, + '/@(?:"[^"]+"|[^"\\s]+)/' + ); + } + public function configure_usernamebbcode($event) { $this->language->add_lang('common', 'zukero/userbbcode'); @@ -96,4 +114,11 @@ public function prepare_render_usernamebbcode($event) $event['html'] = $tags[1]; } + protected function add_user_tag($parser, $pos, $str) + { + $start_len = ($str[1] === '"') ? 2 : 1; + $end_len = ($str[1] === '"') ? 1 : 0; + + $parser->addTagPair('USER', $pos, $start_len, $pos + strlen($str) - $end_len, $end_len); + } }