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 12f62ea8a1Sandiif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 13f62ea8a1Sandirequire_once(DOKU_PLUGIN.'syntax.php'); 14f62ea8a1Sandi 15f62ea8a1Sandi/** 16f62ea8a1Sandi * All DokuWiki plugins to extend the parser/rendering mechanism 17f62ea8a1Sandi * need to inherit from this class 18f62ea8a1Sandi */ 19f62ea8a1Sandiclass syntax_plugin_info extends DokuWiki_Syntax_Plugin { 20f62ea8a1Sandi 21f62ea8a1Sandi /** 22896a5c22Sandi * return some info 23896a5c22Sandi */ 24896a5c22Sandi function getInfo(){ 25896a5c22Sandi return array( 26896a5c22Sandi 'author' => 'Andreas Gohr', 27896a5c22Sandi 'email' => 'andi@splitbrain.org', 28*5f5f3ddcSAndreas Gohr 'date' => '2008-09-12', 29896a5c22Sandi 'name' => 'Info Plugin', 30896a5c22Sandi 'desc' => 'Displays information about various DokuWiki internals', 31f46c9e83SAnika Henke 'url' => 'http://dokuwiki.org/plugin:info', 32896a5c22Sandi ); 33896a5c22Sandi } 34896a5c22Sandi 35896a5c22Sandi /** 36f62ea8a1Sandi * What kind of syntax are we? 37f62ea8a1Sandi */ 38f62ea8a1Sandi function getType(){ 39f62ea8a1Sandi return 'substition'; 40f62ea8a1Sandi } 41f62ea8a1Sandi 42f62ea8a1Sandi /** 43896a5c22Sandi * What about paragraphs? 44896a5c22Sandi */ 45896a5c22Sandi function getPType(){ 46896a5c22Sandi return 'block'; 47896a5c22Sandi } 48896a5c22Sandi 49896a5c22Sandi /** 50f62ea8a1Sandi * Where to sort in? 51f62ea8a1Sandi */ 52f62ea8a1Sandi function getSort(){ 53f62ea8a1Sandi return 155; 54f62ea8a1Sandi } 55f62ea8a1Sandi 56f62ea8a1Sandi 57f62ea8a1Sandi /** 58f62ea8a1Sandi * Connect pattern to lexer 59f62ea8a1Sandi */ 60f62ea8a1Sandi function connectTo($mode) { 61f62ea8a1Sandi $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info'); 62f62ea8a1Sandi } 63f62ea8a1Sandi 64f62ea8a1Sandi 65f62ea8a1Sandi /** 66f62ea8a1Sandi * Handle the match 67f62ea8a1Sandi */ 68f62ea8a1Sandi function handle($match, $state, $pos, &$handler){ 69f62ea8a1Sandi $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end 70f62ea8a1Sandi return array(strtolower($match)); 71f62ea8a1Sandi } 72f62ea8a1Sandi 73f62ea8a1Sandi /** 74f62ea8a1Sandi * Create output 75f62ea8a1Sandi */ 76706882dcSchris function render($format, &$renderer, $data) { 77f4e5a570Schris if($format == 'xhtml'){ 78f62ea8a1Sandi //handle various info stuff 79f62ea8a1Sandi switch ($data[0]){ 80896a5c22Sandi case 'version': 81f62ea8a1Sandi $renderer->doc .= getVersion(); 82f62ea8a1Sandi break; 83896a5c22Sandi case 'syntaxmodes': 84f62ea8a1Sandi $renderer->doc .= $this->_syntaxmodes_xhtml(); 85f62ea8a1Sandi break; 86896a5c22Sandi case 'syntaxtypes': 87f62ea8a1Sandi $renderer->doc .= $this->_syntaxtypes_xhtml(); 88f62ea8a1Sandi break; 89896a5c22Sandi case 'syntaxplugins': 90c06c1c7aSEsther Brunner $this->_plugins_xhtml('syntax', $renderer); 91c06c1c7aSEsther Brunner break; 92c06c1c7aSEsther Brunner case 'adminplugins': 93c06c1c7aSEsther Brunner $this->_plugins_xhtml('admin', $renderer); 94c06c1c7aSEsther Brunner break; 95c06c1c7aSEsther Brunner case 'actionplugins': 96c06c1c7aSEsther Brunner $this->_plugins_xhtml('action', $renderer); 97c06c1c7aSEsther Brunner break; 98c06c1c7aSEsther Brunner case 'rendererplugins': 99c06c1c7aSEsther Brunner $this->_plugins_xhtml('renderer', $renderer); 100c06c1c7aSEsther Brunner break; 101c06c1c7aSEsther Brunner case 'helperplugins': 102c06c1c7aSEsther Brunner $this->_plugins_xhtml('helper', $renderer); 103c06c1c7aSEsther Brunner break; 104c06c1c7aSEsther Brunner case 'helpermethods': 105c06c1c7aSEsther Brunner $this->_helpermethods_xhtml($renderer); 106896a5c22Sandi break; 107f62ea8a1Sandi default: 108f62ea8a1Sandi $renderer->doc .= "no info about ".htmlspecialchars($data[0]); 109f62ea8a1Sandi } 110f62ea8a1Sandi return true; 111f62ea8a1Sandi } 112f62ea8a1Sandi return false; 113f62ea8a1Sandi } 114f62ea8a1Sandi 115f62ea8a1Sandi /** 116c06c1c7aSEsther Brunner * list all installed plugins 117896a5c22Sandi * 118896a5c22Sandi * uses some of the original renderer methods 119896a5c22Sandi */ 120c06c1c7aSEsther Brunner function _plugins_xhtml($type, &$renderer){ 121896a5c22Sandi global $lang; 122896a5c22Sandi $renderer->doc .= '<ul>'; 123896a5c22Sandi 124c06c1c7aSEsther Brunner $plugins = plugin_list($type); 125*5f5f3ddcSAndreas Gohr $plginfo = array(); 126*5f5f3ddcSAndreas Gohr 127*5f5f3ddcSAndreas Gohr // remove subparts 128896a5c22Sandi foreach($plugins as $p){ 129c06c1c7aSEsther Brunner if (!$po =& plugin_load($type,$p)) continue; 130*5f5f3ddcSAndreas Gohr list($name,$part) = explode('_',$p,2); 131*5f5f3ddcSAndreas Gohr $plginfo[$name] = $po->getInfo(); 132*5f5f3ddcSAndreas Gohr } 133896a5c22Sandi 134*5f5f3ddcSAndreas Gohr // list them 135*5f5f3ddcSAndreas Gohr foreach($plginfo as $info){ 1360c6b58a8SAndreas Gohr $renderer->doc .= '<li><div class="li">'; 137896a5c22Sandi $renderer->externallink($info['url'],$info['name']); 138896a5c22Sandi $renderer->doc .= ' '; 13996331712SAnika Henke $renderer->doc .= '<em>'.$info['date'].'</em>'; 140896a5c22Sandi $renderer->doc .= ' '; 141896a5c22Sandi $renderer->doc .= $lang['by']; 142896a5c22Sandi $renderer->doc .= ' '; 143896a5c22Sandi $renderer->emaillink($info['email'],$info['author']); 144896a5c22Sandi $renderer->doc .= '<br />'; 145c06c1c7aSEsther Brunner $renderer->doc .= strtr(hsc($info['desc']),array("\n"=>"<br />")); 1460c6b58a8SAndreas Gohr $renderer->doc .= '</div></li>'; 1474f32716eSAndreas Gohr unset($po); 148896a5c22Sandi } 149896a5c22Sandi 150896a5c22Sandi $renderer->doc .= '</ul>'; 151896a5c22Sandi } 152896a5c22Sandi 153896a5c22Sandi /** 154c06c1c7aSEsther Brunner * list all installed plugins 155c06c1c7aSEsther Brunner * 156c06c1c7aSEsther Brunner * uses some of the original renderer methods 157c06c1c7aSEsther Brunner */ 158c06c1c7aSEsther Brunner function _helpermethods_xhtml(&$renderer){ 159c06c1c7aSEsther Brunner global $lang; 160c06c1c7aSEsther Brunner 161c06c1c7aSEsther Brunner $plugins = plugin_list('helper'); 162c06c1c7aSEsther Brunner foreach($plugins as $p){ 163c06c1c7aSEsther Brunner if (!$po =& plugin_load('helper',$p)) continue; 164c06c1c7aSEsther Brunner 165c06c1c7aSEsther Brunner if (!method_exists($po, 'getMethods')) continue; 166c06c1c7aSEsther Brunner $methods = $po->getMethods(); 167c06c1c7aSEsther Brunner $info = $po->getInfo(); 168c06c1c7aSEsther Brunner 169c06c1c7aSEsther Brunner $hid = $this->_addToTOC($info['name'], 2, $renderer); 170c06c1c7aSEsther Brunner $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>'; 171c06c1c7aSEsther Brunner $doc .= '<div class="level2">'; 172c06c1c7aSEsther Brunner $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>'; 173c06c1c7aSEsther Brunner $doc .= '<pre class="code">$'.$p." =& plugin_load('helper', '".$p."');</pre>"; 174c06c1c7aSEsther Brunner $doc .= '</div>'; 175c06c1c7aSEsther Brunner foreach ($methods as $method){ 176c06c1c7aSEsther Brunner $title = '$'.$p.'->'.$method['name'].'()'; 177c06c1c7aSEsther Brunner $hid = $this->_addToTOC($title, 3, $renderer); 178c06c1c7aSEsther Brunner $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>'; 179c06c1c7aSEsther Brunner $doc .= '<div class="level3">'; 180c06c1c7aSEsther Brunner $doc .= '<table class="inline"><tbody>'; 181c06c1c7aSEsther Brunner $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc']. 182c06c1c7aSEsther Brunner '</td></tr>'; 183c06c1c7aSEsther Brunner if ($method['params']){ 184c06c1c7aSEsther Brunner $c = count($method['params']); 185c06c1c7aSEsther Brunner $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>'; 186c06c1c7aSEsther Brunner $params = array(); 187c06c1c7aSEsther Brunner foreach ($method['params'] as $desc => $type){ 188c06c1c7aSEsther Brunner $params[] = hsc($desc).'</td><td>'.hsc($type); 189c06c1c7aSEsther Brunner } 190c06c1c7aSEsther Brunner $doc .= join($params, '</td></tr><tr><td>').'</td></tr>'; 191c06c1c7aSEsther Brunner } 192c06c1c7aSEsther Brunner if ($method['return']){ 193c06c1c7aSEsther Brunner $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])). 194c06c1c7aSEsther Brunner '</td><td>'.hsc(current($method['return'])).'</td></tr>'; 195c06c1c7aSEsther Brunner } 196c06c1c7aSEsther Brunner $doc .= '</tbody></table>'; 197c06c1c7aSEsther Brunner $doc .= '</div>'; 198c06c1c7aSEsther Brunner } 199c06c1c7aSEsther Brunner unset($po); 200c06c1c7aSEsther Brunner 201c06c1c7aSEsther Brunner $renderer->doc .= $doc; 202c06c1c7aSEsther Brunner } 203c06c1c7aSEsther Brunner } 204c06c1c7aSEsther Brunner 205c06c1c7aSEsther Brunner /** 206f62ea8a1Sandi * lists all known syntax types and their registered modes 207f62ea8a1Sandi */ 208f62ea8a1Sandi function _syntaxtypes_xhtml(){ 209f62ea8a1Sandi global $PARSER_MODES; 210f62ea8a1Sandi $doc = ''; 211f62ea8a1Sandi 212f62ea8a1Sandi $doc .= '<table class="inline"><tbody>'; 213f62ea8a1Sandi foreach($PARSER_MODES as $mode => $modes){ 214f62ea8a1Sandi $doc .= '<tr>'; 215f62ea8a1Sandi $doc .= '<td class="leftalign">'; 216f62ea8a1Sandi $doc .= $mode; 217f62ea8a1Sandi $doc .= '</td>'; 218f62ea8a1Sandi $doc .= '<td class="leftalign">'; 219f62ea8a1Sandi $doc .= join(', ',$modes); 220f62ea8a1Sandi $doc .= '</td>'; 221f62ea8a1Sandi $doc .= '</tr>'; 222f62ea8a1Sandi } 223f62ea8a1Sandi $doc .= '</tbody></table>'; 224f62ea8a1Sandi return $doc; 225f62ea8a1Sandi } 226f62ea8a1Sandi 227f62ea8a1Sandi /** 228f62ea8a1Sandi * lists all known syntax modes and their sorting value 229f62ea8a1Sandi */ 230f62ea8a1Sandi function _syntaxmodes_xhtml(){ 231f62ea8a1Sandi $modes = p_get_parsermodes(); 232f62ea8a1Sandi $doc = ''; 233f62ea8a1Sandi 234f62ea8a1Sandi foreach ($modes as $mode){ 235f62ea8a1Sandi $doc .= $mode['mode'].' ('.$mode['sort'].'), '; 236f62ea8a1Sandi } 237f62ea8a1Sandi return $doc; 238f62ea8a1Sandi } 239c06c1c7aSEsther Brunner 240c06c1c7aSEsther Brunner /** 241c06c1c7aSEsther Brunner * Adds a TOC item 242c06c1c7aSEsther Brunner */ 243c06c1c7aSEsther Brunner function _addToTOC($text, $level, &$renderer){ 244c06c1c7aSEsther Brunner global $conf; 245c06c1c7aSEsther Brunner 246c06c1c7aSEsther Brunner if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){ 247c06c1c7aSEsther Brunner $hid = $renderer->_headerToLink($text, 'true'); 248c06c1c7aSEsther Brunner $renderer->toc[] = array( 249c06c1c7aSEsther Brunner 'hid' => $hid, 250c06c1c7aSEsther Brunner 'title' => $text, 251c06c1c7aSEsther Brunner 'type' => 'ul', 252c06c1c7aSEsther Brunner 'level' => $level - $conf['toptoclevel'] + 1 253c06c1c7aSEsther Brunner ); 254c06c1c7aSEsther Brunner } 255c06c1c7aSEsther Brunner return $hid; 256c06c1c7aSEsther Brunner } 257f62ea8a1Sandi} 258f62ea8a1Sandi 259f62ea8a1Sandi//Setup VIM: ex: et ts=4 enc=utf-8 : 260