*/ class syntax_plugin_wrap_span extends DokuWiki_Syntax_Plugin { protected $special_pattern = '\r\n]*?/>'; protected $entry_pattern = '(?=.*?)'; protected $exit_pattern = ''; function getType(){ return 'formatting';} function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } function getPType(){ return 'normal';} function getSort(){ return 195; } // override default accepts() method to allow nesting - ie, to get the plugin accepts its own entry syntax function accepts($mode) { if ($mode == substr(get_class($this), 7)) return true; return parent::accepts($mode); } /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addSpecialPattern($this->special_pattern,$mode,'plugin_wrap_'.$this->getPluginComponent()); $this->Lexer->addEntryPattern($this->entry_pattern,$mode,'plugin_wrap_'.$this->getPluginComponent()); } function postConnect() { $this->Lexer->addExitPattern($this->exit_pattern, 'plugin_wrap_'.$this->getPluginComponent()); } /** * Handle the match */ function handle($match, $state, $pos, Doku_Handler $handler){ switch ($state) { case DOKU_LEXER_ENTER: case DOKU_LEXER_SPECIAL: $data = strtolower(trim(substr($match,strpos($match,' '),-1)," \t\n/")); return array($state, $data); case DOKU_LEXER_UNMATCHED : $handler->addCall('cdata', array($match), $pos); return false; case DOKU_LEXER_EXIT : return array($state, ''); } return false; } /** * Create output */ function render($format, Doku_Renderer $renderer, $indata) { static $type_stack = array (); if (empty($indata)) return false; list($state, $data) = $indata; if($format == 'xhtml'){ switch ($state) { case DOKU_LEXER_ENTER: case DOKU_LEXER_SPECIAL: $wrap = $this->loadHelper('wrap'); $attr = $wrap->buildAttributes($data); $renderer->doc .= ''; if ($state == DOKU_LEXER_SPECIAL) $renderer->doc .= ''; break; case DOKU_LEXER_EXIT: $renderer->doc .= ''; break; } return true; } if($format == 'odt'){ switch ($state) { case DOKU_LEXER_ENTER: $wrap = plugin_load('helper', 'wrap'); array_push ($type_stack, $wrap->renderODTElementOpen($renderer, 'span', $data)); break; case DOKU_LEXER_EXIT: $element = array_pop ($type_stack); $wrap = plugin_load('helper', 'wrap'); $wrap->renderODTElementClose ($renderer, $element); break; } return true; } return false; } }