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> 7c06c1c7aSEsther Brunner * @author Esther Brunner <wikidesign@gmail.com> 8f62ea8a1Sandi */ 9e04f1f16Schris// must be run within Dokuwiki 10e04f1f16Schrisif(!defined('DOKU_INC')) die(); 11f62ea8a1Sandi 12f62ea8a1Sandi/** 13f62ea8a1Sandi * All DokuWiki plugins to extend the parser/rendering mechanism 14f62ea8a1Sandi * need to inherit from this class 15f62ea8a1Sandi */ 16f62ea8a1Sandiclass syntax_plugin_info extends DokuWiki_Syntax_Plugin { 17f62ea8a1Sandi 18f62ea8a1Sandi /** 19f62ea8a1Sandi * What kind of syntax are we? 20f62ea8a1Sandi */ 21f62ea8a1Sandi function getType(){ 22f62ea8a1Sandi return 'substition'; 23f62ea8a1Sandi } 24f62ea8a1Sandi 25f62ea8a1Sandi /** 26896a5c22Sandi * What about paragraphs? 27896a5c22Sandi */ 28896a5c22Sandi function getPType(){ 29896a5c22Sandi return 'block'; 30896a5c22Sandi } 31896a5c22Sandi 32896a5c22Sandi /** 33f62ea8a1Sandi * Where to sort in? 34f62ea8a1Sandi */ 35f62ea8a1Sandi function getSort(){ 36f62ea8a1Sandi return 155; 37f62ea8a1Sandi } 38f62ea8a1Sandi 39f62ea8a1Sandi 40f62ea8a1Sandi /** 41f62ea8a1Sandi * Connect pattern to lexer 42f62ea8a1Sandi */ 43f62ea8a1Sandi function connectTo($mode) { 44f62ea8a1Sandi $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info'); 45f62ea8a1Sandi } 46f62ea8a1Sandi 47f62ea8a1Sandi 48f62ea8a1Sandi /** 49f62ea8a1Sandi * Handle the match 50f62ea8a1Sandi */ 513cd4fc17SChristopher Smith function handle($match, $state, $pos, Doku_Handler $handler){ 52f62ea8a1Sandi $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end 53f62ea8a1Sandi return array(strtolower($match)); 54f62ea8a1Sandi } 55f62ea8a1Sandi 56f62ea8a1Sandi /** 57f62ea8a1Sandi * Create output 58f62ea8a1Sandi */ 593cd4fc17SChristopher Smith function render($format, Doku_Renderer $renderer, $data) { 60f4e5a570Schris if($format == 'xhtml'){ 6174ed54d4SGerrit Uitslag /** @var Doku_Renderer_xhtml $renderer */ 62f62ea8a1Sandi //handle various info stuff 63f62ea8a1Sandi switch ($data[0]){ 64896a5c22Sandi case 'syntaxmodes': 65f62ea8a1Sandi $renderer->doc .= $this->_syntaxmodes_xhtml(); 66f62ea8a1Sandi break; 67896a5c22Sandi case 'syntaxtypes': 68f62ea8a1Sandi $renderer->doc .= $this->_syntaxtypes_xhtml(); 69f62ea8a1Sandi break; 70896a5c22Sandi case 'syntaxplugins': 71c06c1c7aSEsther Brunner $this->_plugins_xhtml('syntax', $renderer); 72c06c1c7aSEsther Brunner break; 73c06c1c7aSEsther Brunner case 'adminplugins': 74c06c1c7aSEsther Brunner $this->_plugins_xhtml('admin', $renderer); 75c06c1c7aSEsther Brunner break; 76c06c1c7aSEsther Brunner case 'actionplugins': 77c06c1c7aSEsther Brunner $this->_plugins_xhtml('action', $renderer); 78c06c1c7aSEsther Brunner break; 79c06c1c7aSEsther Brunner case 'rendererplugins': 80c06c1c7aSEsther Brunner $this->_plugins_xhtml('renderer', $renderer); 81c06c1c7aSEsther Brunner break; 82c06c1c7aSEsther Brunner case 'helperplugins': 83c06c1c7aSEsther Brunner $this->_plugins_xhtml('helper', $renderer); 84c06c1c7aSEsther Brunner break; 85603a6381SKlap-in case 'authplugins': 86603a6381SKlap-in $this->_plugins_xhtml('auth', $renderer); 87603a6381SKlap-in break; 88603a6381SKlap-in case 'remoteplugins': 89603a6381SKlap-in $this->_plugins_xhtml('remote', $renderer); 90603a6381SKlap-in break; 91c06c1c7aSEsther Brunner case 'helpermethods': 92c06c1c7aSEsther Brunner $this->_helpermethods_xhtml($renderer); 93896a5c22Sandi break; 94f62ea8a1Sandi default: 95f62ea8a1Sandi $renderer->doc .= "no info about ".htmlspecialchars($data[0]); 96f62ea8a1Sandi } 97f62ea8a1Sandi return true; 98f62ea8a1Sandi } 99f62ea8a1Sandi return false; 100f62ea8a1Sandi } 101f62ea8a1Sandi 102f62ea8a1Sandi /** 103c06c1c7aSEsther Brunner * list all installed plugins 104896a5c22Sandi * 105896a5c22Sandi * uses some of the original renderer methods 106896a5c22Sandi */ 107e07886c0SMichael Hamann function _plugins_xhtml($type, Doku_Renderer &$renderer){ 108896a5c22Sandi global $lang; 109896a5c22Sandi $renderer->doc .= '<ul>'; 110896a5c22Sandi 111c06c1c7aSEsther Brunner $plugins = plugin_list($type); 1125f5f3ddcSAndreas Gohr $plginfo = array(); 1135f5f3ddcSAndreas Gohr 1145f5f3ddcSAndreas Gohr // remove subparts 115896a5c22Sandi foreach($plugins as $p){ 1169b3b9e8eSGerrit Uitslag if (!$po = plugin_load($type,$p)) continue; 1175f5f3ddcSAndreas Gohr list($name,$part) = explode('_',$p,2); 1185f5f3ddcSAndreas Gohr $plginfo[$name] = $po->getInfo(); 1195f5f3ddcSAndreas Gohr } 120896a5c22Sandi 1215f5f3ddcSAndreas Gohr // list them 1225f5f3ddcSAndreas Gohr foreach($plginfo as $info){ 1230c6b58a8SAndreas Gohr $renderer->doc .= '<li><div class="li">'; 124896a5c22Sandi $renderer->externallink($info['url'],$info['name']); 125896a5c22Sandi $renderer->doc .= ' '; 12696331712SAnika Henke $renderer->doc .= '<em>'.$info['date'].'</em>'; 127896a5c22Sandi $renderer->doc .= ' '; 128896a5c22Sandi $renderer->doc .= $lang['by']; 129896a5c22Sandi $renderer->doc .= ' '; 130896a5c22Sandi $renderer->emaillink($info['email'],$info['author']); 131896a5c22Sandi $renderer->doc .= '<br />'; 132c06c1c7aSEsther Brunner $renderer->doc .= strtr(hsc($info['desc']),array("\n"=>"<br />")); 1330c6b58a8SAndreas Gohr $renderer->doc .= '</div></li>'; 1344f32716eSAndreas Gohr unset($po); 135896a5c22Sandi } 136896a5c22Sandi 137896a5c22Sandi $renderer->doc .= '</ul>'; 138896a5c22Sandi } 139896a5c22Sandi 140896a5c22Sandi /** 141c06c1c7aSEsther Brunner * list all installed plugins 142c06c1c7aSEsther Brunner * 143c06c1c7aSEsther Brunner * uses some of the original renderer methods 144c06c1c7aSEsther Brunner */ 145e07886c0SMichael Hamann function _helpermethods_xhtml(Doku_Renderer &$renderer){ 146c06c1c7aSEsther Brunner $plugins = plugin_list('helper'); 147c06c1c7aSEsther Brunner foreach($plugins as $p){ 1489b3b9e8eSGerrit Uitslag if (!$po = plugin_load('helper',$p)) continue; 149c06c1c7aSEsther Brunner 150c06c1c7aSEsther Brunner if (!method_exists($po, 'getMethods')) continue; 151c06c1c7aSEsther Brunner $methods = $po->getMethods(); 152c06c1c7aSEsther Brunner $info = $po->getInfo(); 153c06c1c7aSEsther Brunner 154c06c1c7aSEsther Brunner $hid = $this->_addToTOC($info['name'], 2, $renderer); 155c06c1c7aSEsther Brunner $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>'; 156c06c1c7aSEsther Brunner $doc .= '<div class="level2">'; 157c06c1c7aSEsther Brunner $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>'; 1589b3b9e8eSGerrit Uitslag $doc .= '<pre class="code">$'.$p." = plugin_load('helper', '".$p."');</pre>"; 159c06c1c7aSEsther Brunner $doc .= '</div>'; 160c06c1c7aSEsther Brunner foreach ($methods as $method){ 161c06c1c7aSEsther Brunner $title = '$'.$p.'->'.$method['name'].'()'; 162c06c1c7aSEsther Brunner $hid = $this->_addToTOC($title, 3, $renderer); 163c06c1c7aSEsther Brunner $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>'; 164c06c1c7aSEsther Brunner $doc .= '<div class="level3">'; 165c7b28ffdSAnika Henke $doc .= '<div class="table"><table class="inline"><tbody>'; 166c06c1c7aSEsther Brunner $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc']. 167c06c1c7aSEsther Brunner '</td></tr>'; 168c06c1c7aSEsther Brunner if ($method['params']){ 169c06c1c7aSEsther Brunner $c = count($method['params']); 170c06c1c7aSEsther Brunner $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>'; 171c06c1c7aSEsther Brunner $params = array(); 172c06c1c7aSEsther Brunner foreach ($method['params'] as $desc => $type){ 173c06c1c7aSEsther Brunner $params[] = hsc($desc).'</td><td>'.hsc($type); 174c06c1c7aSEsther Brunner } 175c06c1c7aSEsther Brunner $doc .= join($params, '</td></tr><tr><td>').'</td></tr>'; 176c06c1c7aSEsther Brunner } 177c06c1c7aSEsther Brunner if ($method['return']){ 178c06c1c7aSEsther Brunner $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])). 179c06c1c7aSEsther Brunner '</td><td>'.hsc(current($method['return'])).'</td></tr>'; 180c06c1c7aSEsther Brunner } 181c7b28ffdSAnika Henke $doc .= '</tbody></table></div>'; 182c06c1c7aSEsther Brunner $doc .= '</div>'; 183c06c1c7aSEsther Brunner } 184c06c1c7aSEsther Brunner unset($po); 185c06c1c7aSEsther Brunner 186c06c1c7aSEsther Brunner $renderer->doc .= $doc; 187c06c1c7aSEsther Brunner } 188c06c1c7aSEsther Brunner } 189c06c1c7aSEsther Brunner 190c06c1c7aSEsther Brunner /** 191f62ea8a1Sandi * lists all known syntax types and their registered modes 192f62ea8a1Sandi */ 193f62ea8a1Sandi function _syntaxtypes_xhtml(){ 194f62ea8a1Sandi global $PARSER_MODES; 195f62ea8a1Sandi $doc = ''; 196f62ea8a1Sandi 197c7b28ffdSAnika Henke $doc .= '<div class="table"><table class="inline"><tbody>'; 198f62ea8a1Sandi foreach($PARSER_MODES as $mode => $modes){ 199f62ea8a1Sandi $doc .= '<tr>'; 200f62ea8a1Sandi $doc .= '<td class="leftalign">'; 201f62ea8a1Sandi $doc .= $mode; 202f62ea8a1Sandi $doc .= '</td>'; 203f62ea8a1Sandi $doc .= '<td class="leftalign">'; 204f62ea8a1Sandi $doc .= join(', ',$modes); 205f62ea8a1Sandi $doc .= '</td>'; 206f62ea8a1Sandi $doc .= '</tr>'; 207f62ea8a1Sandi } 208c7b28ffdSAnika Henke $doc .= '</tbody></table></div>'; 209f62ea8a1Sandi return $doc; 210f62ea8a1Sandi } 211f62ea8a1Sandi 212f62ea8a1Sandi /** 213f62ea8a1Sandi * lists all known syntax modes and their sorting value 214f62ea8a1Sandi */ 215f62ea8a1Sandi function _syntaxmodes_xhtml(){ 216f62ea8a1Sandi $modes = p_get_parsermodes(); 217f62ea8a1Sandi 218a27c9d6fSGerrit Uitslag $compactmodes = array(); 219f62ea8a1Sandi foreach($modes as $mode){ 220a27c9d6fSGerrit Uitslag $compactmodes[$mode['sort']][] = $mode['mode']; 221f62ea8a1Sandi } 222a27c9d6fSGerrit Uitslag $doc = ''; 223a27c9d6fSGerrit Uitslag $doc .= '<div class="table"><table class="inline"><tbody>'; 224a27c9d6fSGerrit Uitslag 225a27c9d6fSGerrit Uitslag foreach($compactmodes as $sort => $modes){ 226a27c9d6fSGerrit Uitslag $rowspan = ''; 227a27c9d6fSGerrit Uitslag if(count($modes) > 1) { 228a27c9d6fSGerrit Uitslag $rowspan = ' rowspan="'.count($modes).'"'; 229a27c9d6fSGerrit Uitslag } 230a27c9d6fSGerrit Uitslag 231a27c9d6fSGerrit Uitslag foreach($modes as $index => $mode) { 232a27c9d6fSGerrit Uitslag $doc .= '<tr>'; 233a27c9d6fSGerrit Uitslag $doc .= '<td class="leftalign">'; 234a27c9d6fSGerrit Uitslag $doc .= $mode; 235a27c9d6fSGerrit Uitslag $doc .= '</td>'; 236a27c9d6fSGerrit Uitslag 237a27c9d6fSGerrit Uitslag if($index === 0) { 238a27c9d6fSGerrit Uitslag $doc .= '<td class="rightalign" '.$rowspan.'>'; 239a27c9d6fSGerrit Uitslag $doc .= $sort; 240a27c9d6fSGerrit Uitslag $doc .= '</td>'; 241a27c9d6fSGerrit Uitslag } 242a27c9d6fSGerrit Uitslag $doc .= '</tr>'; 243a27c9d6fSGerrit Uitslag } 244a27c9d6fSGerrit Uitslag } 245a27c9d6fSGerrit Uitslag 246a27c9d6fSGerrit Uitslag $doc .= '</tbody></table></div>'; 247f62ea8a1Sandi return $doc; 248f62ea8a1Sandi } 249c06c1c7aSEsther Brunner 250c06c1c7aSEsther Brunner /** 251c06c1c7aSEsther Brunner * Adds a TOC item 252c06c1c7aSEsther Brunner */ 253e07886c0SMichael Hamann function _addToTOC($text, $level, Doku_Renderer &$renderer){ 254c06c1c7aSEsther Brunner global $conf; 255c06c1c7aSEsther Brunner 256c06c1c7aSEsther Brunner if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){ 257e07886c0SMichael Hamann /** @var $renderer Doku_Renderer_xhtml */ 258*e0c26282SGerrit Uitslag $hid = $renderer->_headerToLink($text, true); 259c06c1c7aSEsther Brunner $renderer->toc[] = array( 260c06c1c7aSEsther Brunner 'hid' => $hid, 261c06c1c7aSEsther Brunner 'title' => $text, 262c06c1c7aSEsther Brunner 'type' => 'ul', 263c06c1c7aSEsther Brunner 'level' => $level - $conf['toptoclevel'] + 1 264c06c1c7aSEsther Brunner ); 265c06c1c7aSEsther Brunner } 266c06c1c7aSEsther Brunner return $hid; 267c06c1c7aSEsther Brunner } 268f62ea8a1Sandi} 269f62ea8a1Sandi 270e3776c06SMichael Hamann//Setup VIM: ex: et ts=4 : 271