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 */ 9957f36a6SAndreas Gohrclass syntax_plugin_info extends DokuWiki_Syntax_Plugin 10957f36a6SAndreas Gohr{ 11f62ea8a1Sandi 12f62ea8a1Sandi /** 13f62ea8a1Sandi * What kind of syntax are we? 14f62ea8a1Sandi */ 15957f36a6SAndreas Gohr public function getType() 16957f36a6SAndreas Gohr { 17f62ea8a1Sandi return 'substition'; 18f62ea8a1Sandi } 19f62ea8a1Sandi 20f62ea8a1Sandi /** 21896a5c22Sandi * What about paragraphs? 22896a5c22Sandi */ 23957f36a6SAndreas Gohr public function getPType() 24957f36a6SAndreas Gohr { 25896a5c22Sandi return 'block'; 26896a5c22Sandi } 27896a5c22Sandi 28896a5c22Sandi /** 29f62ea8a1Sandi * Where to sort in? 30f62ea8a1Sandi */ 31957f36a6SAndreas Gohr public function getSort() 32957f36a6SAndreas Gohr { 33f62ea8a1Sandi return 155; 34f62ea8a1Sandi } 35f62ea8a1Sandi 36f62ea8a1Sandi 37f62ea8a1Sandi /** 38f62ea8a1Sandi * Connect pattern to lexer 39f62ea8a1Sandi */ 40957f36a6SAndreas Gohr public function connectTo($mode) 41957f36a6SAndreas Gohr { 42f62ea8a1Sandi $this->Lexer->addSpecialPattern('~~INFO:\w+~~', $mode, 'plugin_info'); 43f62ea8a1Sandi } 44f62ea8a1Sandi 45f62ea8a1Sandi /** 46f62ea8a1Sandi * Handle the match 47253d4b48SGerrit Uitslag * 48253d4b48SGerrit Uitslag * @param string $match The text matched by the patterns 49253d4b48SGerrit Uitslag * @param int $state The lexer state for the match 50253d4b48SGerrit Uitslag * @param int $pos The character position of the matched text 51253d4b48SGerrit Uitslag * @param Doku_Handler $handler The Doku_Handler object 52253d4b48SGerrit Uitslag * @return array Return an array with all data you want to use in render 53f62ea8a1Sandi */ 54957f36a6SAndreas Gohr public function handle($match, $state, $pos, Doku_Handler $handler) 55957f36a6SAndreas Gohr { 56f62ea8a1Sandi $match = substr($match, 7, -2); //strip ~~INFO: from start and ~~ from end 57f62ea8a1Sandi return array(strtolower($match)); 58f62ea8a1Sandi } 59f62ea8a1Sandi 60f62ea8a1Sandi /** 61f62ea8a1Sandi * Create output 62253d4b48SGerrit Uitslag * 63253d4b48SGerrit Uitslag * @param string $format string output format being rendered 64253d4b48SGerrit Uitslag * @param Doku_Renderer $renderer the current renderer object 65253d4b48SGerrit Uitslag * @param array $data data created by handler() 66253d4b48SGerrit Uitslag * @return boolean rendered correctly? 67f62ea8a1Sandi */ 68957f36a6SAndreas Gohr public function render($format, Doku_Renderer $renderer, $data) 69957f36a6SAndreas Gohr { 70f4e5a570Schris if ($format == 'xhtml') { 7174ed54d4SGerrit Uitslag /** @var Doku_Renderer_xhtml $renderer */ 72f62ea8a1Sandi //handle various info stuff 73f62ea8a1Sandi switch ($data[0]) { 74896a5c22Sandi case 'syntaxmodes': 75957f36a6SAndreas Gohr $renderer->doc .= $this->renderSyntaxModes(); 76f62ea8a1Sandi break; 77896a5c22Sandi case 'syntaxtypes': 78957f36a6SAndreas Gohr $renderer->doc .= $this->renderSyntaxTypes(); 79f62ea8a1Sandi break; 80896a5c22Sandi case 'syntaxplugins': 81957f36a6SAndreas Gohr $this->renderPlugins('syntax', $renderer); 82c06c1c7aSEsther Brunner break; 83c06c1c7aSEsther Brunner case 'adminplugins': 84957f36a6SAndreas Gohr $this->renderPlugins('admin', $renderer); 85c06c1c7aSEsther Brunner break; 86c06c1c7aSEsther Brunner case 'actionplugins': 87957f36a6SAndreas Gohr $this->renderPlugins('action', $renderer); 88c06c1c7aSEsther Brunner break; 89c06c1c7aSEsther Brunner case 'rendererplugins': 90957f36a6SAndreas Gohr $this->renderPlugins('renderer', $renderer); 91c06c1c7aSEsther Brunner break; 92c06c1c7aSEsther Brunner case 'helperplugins': 93957f36a6SAndreas Gohr $this->renderPlugins('helper', $renderer); 94c06c1c7aSEsther Brunner break; 95603a6381SKlap-in case 'authplugins': 96957f36a6SAndreas Gohr $this->renderPlugins('auth', $renderer); 97603a6381SKlap-in break; 98603a6381SKlap-in case 'remoteplugins': 99957f36a6SAndreas Gohr $this->renderPlugins('remote', $renderer); 100603a6381SKlap-in break; 101c06c1c7aSEsther Brunner case 'helpermethods': 102957f36a6SAndreas Gohr $this->renderHelperMethods($renderer); 103896a5c22Sandi break; 104*7210c855SAndreas Gohr case 'datetime': 105*7210c855SAndreas Gohr $renderer->doc .= date('r'); 106*7210c855SAndreas Gohr 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 119253d4b48SGerrit Uitslag * 120253d4b48SGerrit Uitslag * @param string $type 121253d4b48SGerrit Uitslag * @param Doku_Renderer_xhtml $renderer 122896a5c22Sandi */ 123957f36a6SAndreas Gohr protected function renderPlugins($type, Doku_Renderer_xhtml $renderer) 124957f36a6SAndreas Gohr { 125896a5c22Sandi global $lang; 126896a5c22Sandi $renderer->doc .= '<ul>'; 127896a5c22Sandi 128c06c1c7aSEsther Brunner $plugins = plugin_list($type); 1295f5f3ddcSAndreas Gohr $plginfo = array(); 1305f5f3ddcSAndreas Gohr 1315f5f3ddcSAndreas Gohr // remove subparts 132896a5c22Sandi foreach ($plugins as $p) { 1339b3b9e8eSGerrit Uitslag if (!$po = plugin_load($type, $p)) continue; 134253d4b48SGerrit Uitslag list($name,/* $part */) = explode('_', $p, 2); 1355f5f3ddcSAndreas Gohr $plginfo[$name] = $po->getInfo(); 1365f5f3ddcSAndreas Gohr } 137896a5c22Sandi 1385f5f3ddcSAndreas Gohr // list them 1395f5f3ddcSAndreas Gohr foreach ($plginfo as $info) { 1400c6b58a8SAndreas Gohr $renderer->doc .= '<li><div class="li">'; 141896a5c22Sandi $renderer->externallink($info['url'], $info['name']); 142896a5c22Sandi $renderer->doc .= ' '; 14396331712SAnika Henke $renderer->doc .= '<em>'.$info['date'].'</em>'; 144896a5c22Sandi $renderer->doc .= ' '; 145896a5c22Sandi $renderer->doc .= $lang['by']; 146896a5c22Sandi $renderer->doc .= ' '; 147896a5c22Sandi $renderer->emaillink($info['email'], $info['author']); 148896a5c22Sandi $renderer->doc .= '<br />'; 149c06c1c7aSEsther Brunner $renderer->doc .= strtr(hsc($info['desc']), array("\n"=>"<br />")); 1500c6b58a8SAndreas Gohr $renderer->doc .= '</div></li>'; 1514f32716eSAndreas Gohr unset($po); 152896a5c22Sandi } 153896a5c22Sandi 154896a5c22Sandi $renderer->doc .= '</ul>'; 155896a5c22Sandi } 156896a5c22Sandi 157896a5c22Sandi /** 158c06c1c7aSEsther Brunner * list all installed plugins 159c06c1c7aSEsther Brunner * 160c06c1c7aSEsther Brunner * uses some of the original renderer methods 161253d4b48SGerrit Uitslag * 162253d4b48SGerrit Uitslag * @param Doku_Renderer_xhtml $renderer 163c06c1c7aSEsther Brunner */ 164957f36a6SAndreas Gohr protected function renderHelperMethods(Doku_Renderer_xhtml $renderer) 165957f36a6SAndreas Gohr { 166c06c1c7aSEsther Brunner $plugins = plugin_list('helper'); 167c06c1c7aSEsther Brunner foreach ($plugins as $p) { 1689b3b9e8eSGerrit Uitslag if (!$po = plugin_load('helper', $p)) continue; 169c06c1c7aSEsther Brunner 170c06c1c7aSEsther Brunner if (!method_exists($po, 'getMethods')) continue; 171c06c1c7aSEsther Brunner $methods = $po->getMethods(); 172c06c1c7aSEsther Brunner $info = $po->getInfo(); 173c06c1c7aSEsther Brunner 174957f36a6SAndreas Gohr $hid = $this->addToToc($info['name'], 2, $renderer); 175c06c1c7aSEsther Brunner $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>'; 176c06c1c7aSEsther Brunner $doc .= '<div class="level2">'; 177c06c1c7aSEsther Brunner $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>'; 1789b3b9e8eSGerrit Uitslag $doc .= '<pre class="code">$'.$p." = plugin_load('helper', '".$p."');</pre>"; 179c06c1c7aSEsther Brunner $doc .= '</div>'; 180c06c1c7aSEsther Brunner foreach ($methods as $method) { 181c06c1c7aSEsther Brunner $title = '$'.$p.'->'.$method['name'].'()'; 182957f36a6SAndreas Gohr $hid = $this->addToToc($title, 3, $renderer); 183c06c1c7aSEsther Brunner $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>'; 184c06c1c7aSEsther Brunner $doc .= '<div class="level3">'; 185c7b28ffdSAnika Henke $doc .= '<div class="table"><table class="inline"><tbody>'; 186c06c1c7aSEsther Brunner $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc']. 187c06c1c7aSEsther Brunner '</td></tr>'; 188c06c1c7aSEsther Brunner if ($method['params']) { 189c06c1c7aSEsther Brunner $c = count($method['params']); 190c06c1c7aSEsther Brunner $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>'; 191c06c1c7aSEsther Brunner $params = array(); 192c06c1c7aSEsther Brunner foreach ($method['params'] as $desc => $type) { 193c06c1c7aSEsther Brunner $params[] = hsc($desc).'</td><td>'.hsc($type); 194c06c1c7aSEsther Brunner } 1955312cb0bSSyntaxseed $doc .= join('</td></tr><tr><td>', $params).'</td></tr>'; 196c06c1c7aSEsther Brunner } 197c06c1c7aSEsther Brunner if ($method['return']) { 198c06c1c7aSEsther Brunner $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])). 199c06c1c7aSEsther Brunner '</td><td>'.hsc(current($method['return'])).'</td></tr>'; 200c06c1c7aSEsther Brunner } 201c7b28ffdSAnika Henke $doc .= '</tbody></table></div>'; 202c06c1c7aSEsther Brunner $doc .= '</div>'; 203c06c1c7aSEsther Brunner } 204c06c1c7aSEsther Brunner unset($po); 205c06c1c7aSEsther Brunner 206c06c1c7aSEsther Brunner $renderer->doc .= $doc; 207c06c1c7aSEsther Brunner } 208c06c1c7aSEsther Brunner } 209c06c1c7aSEsther Brunner 210c06c1c7aSEsther Brunner /** 211f62ea8a1Sandi * lists all known syntax types and their registered modes 212253d4b48SGerrit Uitslag * 213253d4b48SGerrit Uitslag * @return string 214f62ea8a1Sandi */ 215957f36a6SAndreas Gohr protected function renderSyntaxTypes() 216957f36a6SAndreas Gohr { 217f62ea8a1Sandi global $PARSER_MODES; 218f62ea8a1Sandi $doc = ''; 219f62ea8a1Sandi 220c7b28ffdSAnika Henke $doc .= '<div class="table"><table class="inline"><tbody>'; 221f62ea8a1Sandi foreach ($PARSER_MODES as $mode => $modes) { 222f62ea8a1Sandi $doc .= '<tr>'; 223f62ea8a1Sandi $doc .= '<td class="leftalign">'; 224f62ea8a1Sandi $doc .= $mode; 225f62ea8a1Sandi $doc .= '</td>'; 226f62ea8a1Sandi $doc .= '<td class="leftalign">'; 227f62ea8a1Sandi $doc .= join(', ', $modes); 228f62ea8a1Sandi $doc .= '</td>'; 229f62ea8a1Sandi $doc .= '</tr>'; 230f62ea8a1Sandi } 231c7b28ffdSAnika Henke $doc .= '</tbody></table></div>'; 232f62ea8a1Sandi return $doc; 233f62ea8a1Sandi } 234f62ea8a1Sandi 235f62ea8a1Sandi /** 236f62ea8a1Sandi * lists all known syntax modes and their sorting value 237253d4b48SGerrit Uitslag * 238253d4b48SGerrit Uitslag * @return string 239f62ea8a1Sandi */ 240957f36a6SAndreas Gohr protected function renderSyntaxModes() 241957f36a6SAndreas Gohr { 242f62ea8a1Sandi $modes = p_get_parsermodes(); 243f62ea8a1Sandi 244a27c9d6fSGerrit Uitslag $compactmodes = array(); 245f62ea8a1Sandi foreach ($modes as $mode) { 246a27c9d6fSGerrit Uitslag $compactmodes[$mode['sort']][] = $mode['mode']; 247f62ea8a1Sandi } 248a27c9d6fSGerrit Uitslag $doc = ''; 249a27c9d6fSGerrit Uitslag $doc .= '<div class="table"><table class="inline"><tbody>'; 250a27c9d6fSGerrit Uitslag 251a27c9d6fSGerrit Uitslag foreach ($compactmodes as $sort => $modes) { 252a27c9d6fSGerrit Uitslag $rowspan = ''; 253a27c9d6fSGerrit Uitslag if (count($modes) > 1) { 254a27c9d6fSGerrit Uitslag $rowspan = ' rowspan="'.count($modes).'"'; 255a27c9d6fSGerrit Uitslag } 256a27c9d6fSGerrit Uitslag 257a27c9d6fSGerrit Uitslag foreach ($modes as $index => $mode) { 258a27c9d6fSGerrit Uitslag $doc .= '<tr>'; 259a27c9d6fSGerrit Uitslag $doc .= '<td class="leftalign">'; 260a27c9d6fSGerrit Uitslag $doc .= $mode; 261a27c9d6fSGerrit Uitslag $doc .= '</td>'; 262a27c9d6fSGerrit Uitslag 263a27c9d6fSGerrit Uitslag if ($index === 0) { 264a27c9d6fSGerrit Uitslag $doc .= '<td class="rightalign" '.$rowspan.'>'; 265a27c9d6fSGerrit Uitslag $doc .= $sort; 266a27c9d6fSGerrit Uitslag $doc .= '</td>'; 267a27c9d6fSGerrit Uitslag } 268a27c9d6fSGerrit Uitslag $doc .= '</tr>'; 269a27c9d6fSGerrit Uitslag } 270a27c9d6fSGerrit Uitslag } 271a27c9d6fSGerrit Uitslag 272a27c9d6fSGerrit Uitslag $doc .= '</tbody></table></div>'; 273f62ea8a1Sandi return $doc; 274f62ea8a1Sandi } 275c06c1c7aSEsther Brunner 276c06c1c7aSEsther Brunner /** 277c06c1c7aSEsther Brunner * Adds a TOC item 27859bc3b48SGerrit Uitslag * 27959bc3b48SGerrit Uitslag * @param string $text 28059bc3b48SGerrit Uitslag * @param int $level 28159bc3b48SGerrit Uitslag * @param Doku_Renderer_xhtml $renderer 28259bc3b48SGerrit Uitslag * @return string 283c06c1c7aSEsther Brunner */ 284957f36a6SAndreas Gohr protected function addToToc($text, $level, Doku_Renderer_xhtml $renderer) 285957f36a6SAndreas Gohr { 286c06c1c7aSEsther Brunner global $conf; 287c06c1c7aSEsther Brunner 28859bc3b48SGerrit Uitslag $hid = ''; 289c06c1c7aSEsther Brunner if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])) { 290e0c26282SGerrit Uitslag $hid = $renderer->_headerToLink($text, true); 291c06c1c7aSEsther Brunner $renderer->toc[] = array( 292c06c1c7aSEsther Brunner 'hid' => $hid, 293c06c1c7aSEsther Brunner 'title' => $text, 294c06c1c7aSEsther Brunner 'type' => 'ul', 295c06c1c7aSEsther Brunner 'level' => $level - $conf['toptoclevel'] + 1 296c06c1c7aSEsther Brunner ); 297c06c1c7aSEsther Brunner } 298c06c1c7aSEsther Brunner return $hid; 299c06c1c7aSEsther Brunner } 300f62ea8a1Sandi} 301f62ea8a1Sandi 302e3776c06SMichael Hamann//Setup VIM: ex: et ts=4 : 303