Lexer->addSpecialPattern($pattern, $mode, 'plugin_' . webcomponent::PLUGIN_NAME . '_' . $this->getPluginComponent()); } public function postConnect() { // None } /** * * The handle function goal is to parse the matched syntax through the pattern function * and to return the result for use in the renderer * This result is always cached until the page is modified. * @see DokuWiki_Syntax_Plugin::handle() * @see Doku_Handler::header() to see the original Dokuwiki code * * @param string $match * @param int $state * @param int $pos * @param Doku_Handler $handler * @return array|bool * * */ function handle($match, $state, $pos, Doku_Handler $handler) { switch ($state) { case DOKU_LEXER_SPECIAL : // Must return $text, $level, $pos // get level and title $title = trim($match); $level = strspn($title, self::getHeadingCharacter()); if ($level < 1) $level = 1; $title = trim($title, self::getHeadingCharacter()); $title = trim($title); /* seems to manage the renderer call */ if ($handler->status['section']) $handler->_addCall('section_close', array(), $pos); $handler->_addCall('header', array($title, $level, $pos), $pos); $handler->_addCall('section_open', array($level), $pos); $handler->status['section'] = true; return array($state, array($title, $level, $pos)); } return array(); } /** * Call the underlying dokuwiki renderer * * @see DokuWiki_Syntax_Plugin::render() for the interface method * @see Doku_Renderer_xhtml::header() for the original method * * @param string $mode * @param Doku_Renderer $renderer * @param array $data - what the function handle() return'ed * @return bool */ function render($mode, Doku_Renderer $renderer, $data) { /** @var Doku_Renderer_xhtml $renderer */ // list($state, $parameters) = $data; // switch ($state) { // // case DOKU_LEXER_SPECIAL : // list($title, $level, $pos) = $parameters; // $renderer->header($title, $level, $pos); // break; // // } // return true; } public static function getHeadingCharacter() { return '#'; } }