Lexer->addSpecialPattern( '\{\{linkheading>[^}]+\}\}', $mode, 'plugin_linkheading' ); } /** * Parse plugin syntax. * * Supported forms: * * {{linkheading>target|Heading}} * {{linkheading>4|target|Heading}} * * @inheritDoc */ public function handle($match, $state, $pos, Doku_Handler $handler) { $content = substr($match, 14, -2); $parts = explode('|', $content); if ( count($parts) >= 3 && preg_match('/^[1-6]$/', trim($parts[0])) ) { $level = (int) trim(array_shift($parts)); $target = trim(array_shift($parts)); $title = trim(implode('|', $parts)); } else { $level = 2; $target = trim(array_shift($parts)); $title = trim(implode('|', $parts)); } if ($title === '') { $title = $target; } return [ 'level' => $level, 'target' => $target, 'title' => $title, ]; } /** * Render linked heading. * * @inheritDoc */ public function render($mode, Doku_Renderer $renderer, $data) { $level = max(1, min(6, (int) $data['level'])); $target = $data['target']; $title = $data['title']; if ($mode === 'xhtml') { $renderer->doc .= ''; $renderer->internallink($target, $title); $renderer->doc .= ''; return true; } if ($mode === 'metadata') { $renderer->internallink($target, $title); return true; } return false; } }