1f62ea8a1Sandi<?php 2f62ea8a1Sandi/** 3f62ea8a1Sandi * Info Plugin: Displays information about various DokuWiki internals 4f62ea8a1Sandi * 5f62ea8a1Sandi * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6f62ea8a1Sandi * @author Andreas Gohr <andi@splitbrain.org> 7f62ea8a1Sandi */ 8f62ea8a1Sandi 9f62ea8a1Sandiif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); 10f62ea8a1Sandiif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 11f62ea8a1Sandirequire_once(DOKU_PLUGIN.'syntax.php'); 12f62ea8a1Sandi 13f62ea8a1Sandi/** 14f62ea8a1Sandi * All DokuWiki plugins to extend the parser/rendering mechanism 15f62ea8a1Sandi * need to inherit from this class 16f62ea8a1Sandi */ 17f62ea8a1Sandiclass syntax_plugin_info extends DokuWiki_Syntax_Plugin { 18f62ea8a1Sandi 19f62ea8a1Sandi /** 20*896a5c22Sandi * return some info 21*896a5c22Sandi */ 22*896a5c22Sandi function getInfo(){ 23*896a5c22Sandi return array( 24*896a5c22Sandi 'author' => 'Andreas Gohr', 25*896a5c22Sandi 'email' => 'andi@splitbrain.org', 26*896a5c22Sandi 'date' => '2005-06-26', 27*896a5c22Sandi 'name' => 'Info Plugin', 28*896a5c22Sandi 'desc' => 'Displays information about various DokuWiki internals', 29*896a5c22Sandi 'url' => 'http://wiki.splitbrain.org/plugin:info', 30*896a5c22Sandi ); 31*896a5c22Sandi } 32*896a5c22Sandi 33*896a5c22Sandi /** 34f62ea8a1Sandi * What kind of syntax are we? 35f62ea8a1Sandi */ 36f62ea8a1Sandi function getType(){ 37f62ea8a1Sandi return 'substition'; 38f62ea8a1Sandi } 39f62ea8a1Sandi 40f62ea8a1Sandi /** 41*896a5c22Sandi * What about paragraphs? 42*896a5c22Sandi */ 43*896a5c22Sandi function getPType(){ 44*896a5c22Sandi return 'block'; 45*896a5c22Sandi } 46*896a5c22Sandi 47*896a5c22Sandi /** 48f62ea8a1Sandi * Where to sort in? 49f62ea8a1Sandi */ 50f62ea8a1Sandi function getSort(){ 51f62ea8a1Sandi return 155; 52f62ea8a1Sandi } 53f62ea8a1Sandi 54f62ea8a1Sandi 55f62ea8a1Sandi /** 56f62ea8a1Sandi * Connect pattern to lexer 57f62ea8a1Sandi */ 58f62ea8a1Sandi function connectTo($mode) { 59f62ea8a1Sandi $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info'); 60f62ea8a1Sandi } 61f62ea8a1Sandi 62f62ea8a1Sandi 63f62ea8a1Sandi /** 64f62ea8a1Sandi * Handle the match 65f62ea8a1Sandi */ 66f62ea8a1Sandi function handle($match, $state, $pos, &$handler){ 67f62ea8a1Sandi $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end 68f62ea8a1Sandi return array(strtolower($match)); 69f62ea8a1Sandi } 70f62ea8a1Sandi 71f62ea8a1Sandi /** 72f62ea8a1Sandi * Create output 73f62ea8a1Sandi */ 74f62ea8a1Sandi function render($mode, &$renderer, $data) { 75f62ea8a1Sandi if($mode == 'xhtml'){ 76f62ea8a1Sandi //handle various info stuff 77f62ea8a1Sandi switch ($data[0]){ 78*896a5c22Sandi case 'version': 79f62ea8a1Sandi $renderer->doc .= getVersion(); 80f62ea8a1Sandi break; 81*896a5c22Sandi case 'syntaxmodes': 82f62ea8a1Sandi $renderer->doc .= $this->_syntaxmodes_xhtml(); 83f62ea8a1Sandi break; 84*896a5c22Sandi case 'syntaxtypes': 85f62ea8a1Sandi $renderer->doc .= $this->_syntaxtypes_xhtml(); 86f62ea8a1Sandi break; 87*896a5c22Sandi case 'syntaxplugins': 88*896a5c22Sandi $this->_syntaxplugins_xhtml($renderer); 89*896a5c22Sandi break; 90f62ea8a1Sandi default: 91f62ea8a1Sandi $renderer->doc .= "no info about ".htmlspecialchars($data[0]); 92f62ea8a1Sandi } 93f62ea8a1Sandi return true; 94f62ea8a1Sandi } 95f62ea8a1Sandi return false; 96f62ea8a1Sandi } 97f62ea8a1Sandi 98f62ea8a1Sandi /** 99*896a5c22Sandi * list all installed syntax plugins 100*896a5c22Sandi * 101*896a5c22Sandi * uses some of the original renderer methods 102*896a5c22Sandi */ 103*896a5c22Sandi function _syntaxplugins_xhtml(& $renderer){ 104*896a5c22Sandi global $lang; 105*896a5c22Sandi $renderer->doc .= '<ul>'; 106*896a5c22Sandi 107*896a5c22Sandi $plugins = plugin_list('syntax'); 108*896a5c22Sandi foreach($plugins as $p){ 109*896a5c22Sandi if(plugin_load('syntax',$p,$po)){ 110*896a5c22Sandi $info = $po->getInfo(); 111*896a5c22Sandi 112*896a5c22Sandi $renderer->doc .= '<li>'; 113*896a5c22Sandi $renderer->externallink($info['url'],$info['name']); 114*896a5c22Sandi $renderer->doc .= ' '; 115*896a5c22Sandi $renderer->doc .= '<i>'.$info['date'].'</i>'; 116*896a5c22Sandi $renderer->doc .= ' '; 117*896a5c22Sandi $renderer->doc .= $lang['by']; 118*896a5c22Sandi $renderer->doc .= ' '; 119*896a5c22Sandi $renderer->emaillink($info['email'],$info['author']); 120*896a5c22Sandi $renderer->doc .= '<br />'; 121*896a5c22Sandi $renderer->doc .= htmlspecialchars($info['desc']); 122*896a5c22Sandi $renderer->doc .= '</li>'; 123*896a5c22Sandi } 124*896a5c22Sandi } 125*896a5c22Sandi 126*896a5c22Sandi $renderer->doc .= '</ul>'; 127*896a5c22Sandi } 128*896a5c22Sandi 129*896a5c22Sandi /** 130f62ea8a1Sandi * lists all known syntax types and their registered modes 131f62ea8a1Sandi */ 132f62ea8a1Sandi function _syntaxtypes_xhtml(){ 133f62ea8a1Sandi global $PARSER_MODES; 134f62ea8a1Sandi $doc = ''; 135f62ea8a1Sandi 136f62ea8a1Sandi $doc .= '<table class="inline"><tbody>'; 137f62ea8a1Sandi foreach($PARSER_MODES as $mode => $modes){ 138f62ea8a1Sandi $doc .= '<tr>'; 139f62ea8a1Sandi $doc .= '<td class="leftalign">'; 140f62ea8a1Sandi $doc .= $mode; 141f62ea8a1Sandi $doc .= '</td>'; 142f62ea8a1Sandi $doc .= '<td class="leftalign">'; 143f62ea8a1Sandi $doc .= join(', ',$modes); 144f62ea8a1Sandi $doc .= '</td>'; 145f62ea8a1Sandi $doc .= '</tr>'; 146f62ea8a1Sandi } 147f62ea8a1Sandi $doc .= '</tbody></table>'; 148f62ea8a1Sandi return $doc; 149f62ea8a1Sandi } 150f62ea8a1Sandi 151f62ea8a1Sandi /** 152f62ea8a1Sandi * lists all known syntax modes and their sorting value 153f62ea8a1Sandi */ 154f62ea8a1Sandi function _syntaxmodes_xhtml(){ 155f62ea8a1Sandi $modes = p_get_parsermodes(); 156f62ea8a1Sandi $doc = ''; 157f62ea8a1Sandi 158f62ea8a1Sandi foreach ($modes as $mode){ 159f62ea8a1Sandi $doc .= $mode['mode'].' ('.$mode['sort'].'), '; 160f62ea8a1Sandi } 161f62ea8a1Sandi return $doc; 162f62ea8a1Sandi } 163f62ea8a1Sandi} 164f62ea8a1Sandi 165f62ea8a1Sandi//Setup VIM: ex: et ts=4 enc=utf-8 : 166