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 */ 8*e04f1f16Schris// must be run within Dokuwiki 9*e04f1f16Schrisif(!defined('DOKU_INC')) die(); 10f62ea8a1Sandi 11f62ea8a1Sandiif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 12f62ea8a1Sandirequire_once(DOKU_PLUGIN.'syntax.php'); 13f62ea8a1Sandi 14f62ea8a1Sandi/** 15f62ea8a1Sandi * All DokuWiki plugins to extend the parser/rendering mechanism 16f62ea8a1Sandi * need to inherit from this class 17f62ea8a1Sandi */ 18f62ea8a1Sandiclass syntax_plugin_info extends DokuWiki_Syntax_Plugin { 19f62ea8a1Sandi 20f62ea8a1Sandi /** 21896a5c22Sandi * return some info 22896a5c22Sandi */ 23896a5c22Sandi function getInfo(){ 24896a5c22Sandi return array( 25896a5c22Sandi 'author' => 'Andreas Gohr', 26896a5c22Sandi 'email' => 'andi@splitbrain.org', 274f32716eSAndreas Gohr 'date' => '2005-08-03', 28896a5c22Sandi 'name' => 'Info Plugin', 29896a5c22Sandi 'desc' => 'Displays information about various DokuWiki internals', 30896a5c22Sandi 'url' => 'http://wiki.splitbrain.org/plugin:info', 31896a5c22Sandi ); 32896a5c22Sandi } 33896a5c22Sandi 34896a5c22Sandi /** 35f62ea8a1Sandi * What kind of syntax are we? 36f62ea8a1Sandi */ 37f62ea8a1Sandi function getType(){ 38f62ea8a1Sandi return 'substition'; 39f62ea8a1Sandi } 40f62ea8a1Sandi 41f62ea8a1Sandi /** 42896a5c22Sandi * What about paragraphs? 43896a5c22Sandi */ 44896a5c22Sandi function getPType(){ 45896a5c22Sandi return 'block'; 46896a5c22Sandi } 47896a5c22Sandi 48896a5c22Sandi /** 49f62ea8a1Sandi * Where to sort in? 50f62ea8a1Sandi */ 51f62ea8a1Sandi function getSort(){ 52f62ea8a1Sandi return 155; 53f62ea8a1Sandi } 54f62ea8a1Sandi 55f62ea8a1Sandi 56f62ea8a1Sandi /** 57f62ea8a1Sandi * Connect pattern to lexer 58f62ea8a1Sandi */ 59f62ea8a1Sandi function connectTo($mode) { 60f62ea8a1Sandi $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info'); 61f62ea8a1Sandi } 62f62ea8a1Sandi 63f62ea8a1Sandi 64f62ea8a1Sandi /** 65f62ea8a1Sandi * Handle the match 66f62ea8a1Sandi */ 67f62ea8a1Sandi function handle($match, $state, $pos, &$handler){ 68f62ea8a1Sandi $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end 69f62ea8a1Sandi return array(strtolower($match)); 70f62ea8a1Sandi } 71f62ea8a1Sandi 72f62ea8a1Sandi /** 73f62ea8a1Sandi * Create output 74f62ea8a1Sandi */ 75706882dcSchris function render($format, &$renderer, $data) { 76f4e5a570Schris if($format == 'xhtml'){ 77f62ea8a1Sandi //handle various info stuff 78f62ea8a1Sandi switch ($data[0]){ 79896a5c22Sandi case 'version': 80f62ea8a1Sandi $renderer->doc .= getVersion(); 81f62ea8a1Sandi break; 82896a5c22Sandi case 'syntaxmodes': 83f62ea8a1Sandi $renderer->doc .= $this->_syntaxmodes_xhtml(); 84f62ea8a1Sandi break; 85896a5c22Sandi case 'syntaxtypes': 86f62ea8a1Sandi $renderer->doc .= $this->_syntaxtypes_xhtml(); 87f62ea8a1Sandi break; 88896a5c22Sandi case 'syntaxplugins': 89896a5c22Sandi $this->_syntaxplugins_xhtml($renderer); 90896a5c22Sandi break; 91f62ea8a1Sandi default: 92f62ea8a1Sandi $renderer->doc .= "no info about ".htmlspecialchars($data[0]); 93f62ea8a1Sandi } 94f62ea8a1Sandi return true; 95f62ea8a1Sandi } 96f62ea8a1Sandi return false; 97f62ea8a1Sandi } 98f62ea8a1Sandi 99f62ea8a1Sandi /** 100896a5c22Sandi * list all installed syntax plugins 101896a5c22Sandi * 102896a5c22Sandi * uses some of the original renderer methods 103896a5c22Sandi */ 104896a5c22Sandi function _syntaxplugins_xhtml(& $renderer){ 105896a5c22Sandi global $lang; 106896a5c22Sandi $renderer->doc .= '<ul>'; 107896a5c22Sandi 108896a5c22Sandi $plugins = plugin_list('syntax'); 109896a5c22Sandi foreach($plugins as $p){ 110c90b2fb1Schris if (!$po =& plugin_load('syntax',$p)) continue; 111896a5c22Sandi $info = $po->getInfo(); 112896a5c22Sandi 1130c6b58a8SAndreas Gohr $renderer->doc .= '<li><div class="li">'; 114896a5c22Sandi $renderer->externallink($info['url'],$info['name']); 115896a5c22Sandi $renderer->doc .= ' '; 11696331712SAnika Henke $renderer->doc .= '<em>'.$info['date'].'</em>'; 117896a5c22Sandi $renderer->doc .= ' '; 118896a5c22Sandi $renderer->doc .= $lang['by']; 119896a5c22Sandi $renderer->doc .= ' '; 120896a5c22Sandi $renderer->emaillink($info['email'],$info['author']); 121896a5c22Sandi $renderer->doc .= '<br />'; 1220cb422a2Schris $renderer->doc .= strtr(htmlspecialchars($info['desc']),array("\n"=>"<br />")); 1230c6b58a8SAndreas Gohr $renderer->doc .= '</div></li>'; 1244f32716eSAndreas Gohr unset($po); 125896a5c22Sandi } 126896a5c22Sandi 127896a5c22Sandi $renderer->doc .= '</ul>'; 128896a5c22Sandi } 129896a5c22Sandi 130896a5c22Sandi /** 131f62ea8a1Sandi * lists all known syntax types and their registered modes 132f62ea8a1Sandi */ 133f62ea8a1Sandi function _syntaxtypes_xhtml(){ 134f62ea8a1Sandi global $PARSER_MODES; 135f62ea8a1Sandi $doc = ''; 136f62ea8a1Sandi 137f62ea8a1Sandi $doc .= '<table class="inline"><tbody>'; 138f62ea8a1Sandi foreach($PARSER_MODES as $mode => $modes){ 139f62ea8a1Sandi $doc .= '<tr>'; 140f62ea8a1Sandi $doc .= '<td class="leftalign">'; 141f62ea8a1Sandi $doc .= $mode; 142f62ea8a1Sandi $doc .= '</td>'; 143f62ea8a1Sandi $doc .= '<td class="leftalign">'; 144f62ea8a1Sandi $doc .= join(', ',$modes); 145f62ea8a1Sandi $doc .= '</td>'; 146f62ea8a1Sandi $doc .= '</tr>'; 147f62ea8a1Sandi } 148f62ea8a1Sandi $doc .= '</tbody></table>'; 149f62ea8a1Sandi return $doc; 150f62ea8a1Sandi } 151f62ea8a1Sandi 152f62ea8a1Sandi /** 153f62ea8a1Sandi * lists all known syntax modes and their sorting value 154f62ea8a1Sandi */ 155f62ea8a1Sandi function _syntaxmodes_xhtml(){ 156f62ea8a1Sandi $modes = p_get_parsermodes(); 157f62ea8a1Sandi $doc = ''; 158f62ea8a1Sandi 159f62ea8a1Sandi foreach ($modes as $mode){ 160f62ea8a1Sandi $doc .= $mode['mode'].' ('.$mode['sort'].'), '; 161f62ea8a1Sandi } 162f62ea8a1Sandi return $doc; 163f62ea8a1Sandi } 164f62ea8a1Sandi} 165f62ea8a1Sandi 166f62ea8a1Sandi//Setup VIM: ex: et ts=4 enc=utf-8 : 167