*/ // must be run within Dokuwiki //if(!defined('DOKU_INC')) die(); if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); // class syntax_plugin_dwspecialist extends DokuWiki_Syntax_Plugin { function syntax_plugin_dwspecialist() { } /* not longer needed for DokuWiki 2009-12-25 “Lemming” and later function getInfo(){ return array( 'author' => 'Dietrich Wittenberg', 'email' => 'info.wittenberg@online.de', 'date' => '2012-07-01', 'name' => 'plugin dwspecialist', 'desc' => 'includes an unordered list used as a menu', 'url' => 'http://dokuwiki.org/plugin:dwspecialist', ); } */ function getType(){ return 'substition'; } function getAllowedTypes() { return array('disabled'); } function getPType(){ return 'block'; } function getSort(){ return 160; } function connectTo($mode) { $this->Lexer->addEntryPattern('(?=.*?)', $mode, 'plugin_dwspecialist' ); // the entry of $this->Lexer->addPattern('\n {2,}/*?[ ]*[^\n<]*]*>', 'plugin_dwspecialist' ); // {\n * BlaBla } $this->Lexer->addPattern('\n {2,}/*?[ ]*]*>', 'plugin_dwspecialist' ); // {\n * } $this->Lexer->addPattern('\n[ ]*]*>', 'plugin_dwspecialist' ); // {\n } $this->Lexer->addPattern('[^\n<]]*>', 'plugin_dwspecialist' ); // {BlaBla } } //$this->Lexer->addSpecialPattern('',$mode,'plugin_dwlistmenu'); function postConnect() { $this->Lexer->addExitPattern('', 'plugin_dwspecialist');} // the exit of /** * Handle the match */ function handle($match, $state, $pos, &$handler){ switch ($state) { case DOKU_LEXER_ENTER: break; case DOKU_LEXER_UNMATCHED: return array($state, $match); break; case DOKU_LEXER_MATCHED: if (preg_match('#(\n)( {2,}[/*]?)([ ]*[^\n<]*)]*)>#', $match, $result)) { } elseif (preg_match('#(\n)( {2,}[/*]?)([ ]*)]*)>#', $match, $result)) { } elseif (preg_match('#(\n)([ ]*)()]*)>#', $match, $result)) { } elseif (preg_match('#()()([^\n<])]*)>#', $match, $result)) { } return array($state, $result); break; case DOKU_LEXER_EXIT: return array($state, ''); break; case DOKU_LEXER_SPECIAL : return array($state, $match); break; } return array(); } function _render_special($actions, $crlf, $listoffset, $prolog) { global $conf; global $lang; global $INFO; global $ID; global $REV; $id = getID(); $rev = $conf['REV']; $line=""; foreach ($actions as $action) { switch ($action) { case "export_pdf": $act=array( 'params' => array('do' => $action, 'rev' => $rev), 'type' => $action); $name="Export PDF"; $line.=$crlf.$listoffset.$prolog."[[".$id."?".http_build_query ($act['params'])."|".$name."]]"; break; case "edit": case "history": case "recent": case "login": case "profile": case "index": case "admin": case "top": case "back": case "backlink": case "subscribe": case "subscription": $act=tpl_get_action($action); //$act['params']['do']; is now defined if ($act) { $name=(key_exists('btn_'.$act['type'], $lang)) ? $lang['btn_'.$act['type']] : $action; //$act['params']['id']=$ID; $act['params']['rev']=$rev; //$act['params']['sectoc']=getSecurityToken(); $line.=$crlf.$listoffset.$prolog."[[".$id."?".http_build_query ($act['params'])."|".$name."]]"; } else { $line.=$crlf.$listoffset.$prolog.$action; } break; case "topbar": if ($this->getConf('topbarname')) { $topbar=$this->getConf('topbarname'); $line.=$crlf.$listoffset.$prolog."[[".$topbar."|Navigationsleiste]]"; } break; case "breadcrumbs": if(!$conf['breadcrumbs']) { // special is empty } else { $i=1; $special= array_reverse(breadcrumbs()); // array([plf:plf] => 'Projektleitfaden', ...) foreach ($special as $id => $name) { $wikilinks[]="[[".$id."|".(($i<10)?"0":"").$i.": ".$name."]]"; $i++; } $line.=$crlf.$listoffset.$prolog.implode($crlf.$listoffset, $wikilinks); } break; default: // action not defined $line.=$crlf.$listoffset.$prolog.$action; break; } // switch } return $line; } /** * Create output */ function render($mode, &$renderer, $data) { //global $this->dwspecialist_content; if($mode == 'xhtml'){ list($state,$match) = $data; switch ($state) { case DOKU_LEXER_ENTER: $this->dwspecialist_content=""; break; case DOKU_LEXER_UNMATCHED: $this->dwspecialist_content.=$match; //$renderer->_xmlEntities($match); break; case DOKU_LEXER_MATCHED: // not in handle because $INFO is not initialized list($matchall, $crlf, $listoffset, $prolog, $parameter)=$match; if ($matchall != "") { // any match $parameters=explode("&", $parameter); $wikitext=""; foreach ($parameters as $action) { $action=trim($action); switch ($action) { case "page_tools": $wikitext.=$this->_render_special(array($action), $crlf, $listoffset, $prolog); $actions=array("edit", "revert", "revisions", "backlink", "subscribe"); $wikitext.=$this->_render_special($actions, $crlf, " ".$listoffset, $prolog); break; case "site_tools": $wikitext.=$this->_render_special(array($action), $crlf, $listoffset, $prolog); $actions=array("recent", "media", "index"); $wikitext.=$this->_render_special($actions, $crlf, " ".$listoffset, $prolog); break; case "user_tools": $wikitext.=$this->_render_special(array($action), $crlf, $listoffset, $prolog); $actions=array("login", "register", "profile", "admin"); $wikitext.=$this->_render_special($actions, $crlf, " ".$listoffset, $prolog); break; default: $wikitext.=$this->_render_special(array($action), $crlf, $listoffset, $prolog); break; } // switch } // foreach } // !($match=="") //return array($state, $match); $this->dwspecialist_content.=$wikitext; //$renderer->_xmlEntities($match); break; case DOKU_LEXER_EXIT: $renderer->info['cache'] = false; $renderer->doc .= p_render($mode, p_get_instructions($this->dwspecialist_content), $info); $this->dwspecialist_content=""; break; } return true; } return false; } } //Setup VIM: ex: et ts=4 enc=utf-8 :