*/ class syntax_plugin_abstract extends DokuWiki_Syntax_Plugin { function getType() { return 'container'; } function getPType() { return 'normal'; } function getSort() { return 200; } function getAllowedTypes() { return array('container', 'formatting', 'substition', 'disabled','protected'); } function connectTo($mode) { $this->Lexer->addEntryPattern(']*>(?=.*)',$mode,'plugin_abstract'); } function postConnect() { $this->Lexer->addExitPattern('','plugin_abstract'); } /** * Handle the match */ function handle($match, $state, $pos, Doku_Handler $handler){ switch ($state) { case DOKU_LEXER_ENTER : $flags = substr($match, 9, -1); $flags = $this->parseFlags($flags); return [$state,$flags]; break; case DOKU_LEXER_UNMATCHED : return [$state, $match]; break; case DOKU_LEXER_EXIT : return [$state, '']; break; } return array(); } function render($mode, Doku_Renderer $renderer, $data) { if ($mode == 'metadata') { list($state, $match) = $data; switch ($state) { case DOKU_LEXER_ENTER : //reset the output $renderer->doc = ''; break; case DOKU_LEXER_UNMATCHED : $renderer->doc .= hsc($match); break; case DOKU_LEXER_EXIT : // cut off too long abstracts $renderer->doc = trim($renderer->doc); if (strlen($renderer->doc) > 500) $renderer->doc = utf8_substr($renderer->doc, 0, 500).'…'; $renderer->meta['description']['abstract'] = $renderer->doc; //$renderer->doc .= '#####ABSTRACEND#####'; break; } return true; } else if($mode == 'xhtml'){ list($state, $match) = $data; switch ($state) { case DOKU_LEXER_ENTER : if($match['hide']) $renderer->doc .= ''; else $renderer->doc .= ''; break; case DOKU_LEXER_UNMATCHED : $renderer->doc .= hsc($match); break; case DOKU_LEXER_EXIT : $renderer->doc .= ''; break; } } return false; } /* * parseFlags checks for tagfilter flags and returns them as true/false * @param $flags array * @return array tagfilter flags */ function parseFlags($flags){ $flags = explode('&',trim($flags)); $conf = [ 'hide' => false, ]; foreach($flags as $k=>$flag) { list($flag,$value) = explode('=',$flag,2); switch($flag) { case 'hide': $conf['hide'] = true; break; } } return $conf; } }