xref: /dokuwiki/lib/plugins/info/syntax.php (revision f46c9e83ac3d4e9350bdc37645a5e337c24b1cac)
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',
28c06c1c7aSEsther Brunner            'date'   => '2006-12-09',
29896a5c22Sandi            'name'   => 'Info Plugin',
30896a5c22Sandi            'desc'   => 'Displays information about various DokuWiki internals',
31*f46c9e83SAnika 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);
125896a5c22Sandi        foreach($plugins as $p){
126c06c1c7aSEsther Brunner            if (!$po =& plugin_load($type,$p)) continue;
127896a5c22Sandi            $info = $po->getInfo();
128896a5c22Sandi
1290c6b58a8SAndreas Gohr            $renderer->doc .= '<li><div class="li">';
130896a5c22Sandi            $renderer->externallink($info['url'],$info['name']);
131896a5c22Sandi            $renderer->doc .= ' ';
13296331712SAnika Henke            $renderer->doc .= '<em>'.$info['date'].'</em>';
133896a5c22Sandi            $renderer->doc .= ' ';
134896a5c22Sandi            $renderer->doc .= $lang['by'];
135896a5c22Sandi            $renderer->doc .= ' ';
136896a5c22Sandi            $renderer->emaillink($info['email'],$info['author']);
137896a5c22Sandi            $renderer->doc .= '<br />';
138c06c1c7aSEsther Brunner            $renderer->doc .= strtr(hsc($info['desc']),array("\n"=>"<br />"));
1390c6b58a8SAndreas Gohr            $renderer->doc .= '</div></li>';
1404f32716eSAndreas Gohr            unset($po);
141896a5c22Sandi        }
142896a5c22Sandi
143896a5c22Sandi        $renderer->doc .= '</ul>';
144896a5c22Sandi    }
145896a5c22Sandi
146896a5c22Sandi    /**
147c06c1c7aSEsther Brunner     * list all installed plugins
148c06c1c7aSEsther Brunner     *
149c06c1c7aSEsther Brunner     * uses some of the original renderer methods
150c06c1c7aSEsther Brunner     */
151c06c1c7aSEsther Brunner    function _helpermethods_xhtml(&$renderer){
152c06c1c7aSEsther Brunner        global $lang;
153c06c1c7aSEsther Brunner
154c06c1c7aSEsther Brunner        $plugins = plugin_list('helper');
155c06c1c7aSEsther Brunner        foreach($plugins as $p){
156c06c1c7aSEsther Brunner            if (!$po =& plugin_load('helper',$p)) continue;
157c06c1c7aSEsther Brunner
158c06c1c7aSEsther Brunner            if (!method_exists($po, 'getMethods')) continue;
159c06c1c7aSEsther Brunner            $methods = $po->getMethods();
160c06c1c7aSEsther Brunner            $info = $po->getInfo();
161c06c1c7aSEsther Brunner
162c06c1c7aSEsther Brunner            $hid = $this->_addToTOC($info['name'], 2, $renderer);
163c06c1c7aSEsther Brunner            $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>';
164c06c1c7aSEsther Brunner            $doc .= '<div class="level2">';
165c06c1c7aSEsther Brunner            $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>';
166c06c1c7aSEsther Brunner            $doc .= '<pre class="code">$'.$p." =& plugin_load('helper', '".$p."');</pre>";
167c06c1c7aSEsther Brunner            $doc .= '</div>';
168c06c1c7aSEsther Brunner            foreach ($methods as $method){
169c06c1c7aSEsther Brunner                $title = '$'.$p.'->'.$method['name'].'()';
170c06c1c7aSEsther Brunner                $hid = $this->_addToTOC($title, 3, $renderer);
171c06c1c7aSEsther Brunner                $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>';
172c06c1c7aSEsther Brunner                $doc .= '<div class="level3">';
173c06c1c7aSEsther Brunner                $doc .= '<table class="inline"><tbody>';
174c06c1c7aSEsther Brunner                $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc'].
175c06c1c7aSEsther Brunner                    '</td></tr>';
176c06c1c7aSEsther Brunner                if ($method['params']){
177c06c1c7aSEsther Brunner                    $c = count($method['params']);
178c06c1c7aSEsther Brunner                    $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>';
179c06c1c7aSEsther Brunner                    $params = array();
180c06c1c7aSEsther Brunner                    foreach ($method['params'] as $desc => $type){
181c06c1c7aSEsther Brunner                        $params[] = hsc($desc).'</td><td>'.hsc($type);
182c06c1c7aSEsther Brunner                    }
183c06c1c7aSEsther Brunner                    $doc .= join($params, '</td></tr><tr><td>').'</td></tr>';
184c06c1c7aSEsther Brunner                }
185c06c1c7aSEsther Brunner                if ($method['return']){
186c06c1c7aSEsther Brunner                    $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])).
187c06c1c7aSEsther Brunner                        '</td><td>'.hsc(current($method['return'])).'</td></tr>';
188c06c1c7aSEsther Brunner                }
189c06c1c7aSEsther Brunner                $doc .= '</tbody></table>';
190c06c1c7aSEsther Brunner                $doc .= '</div>';
191c06c1c7aSEsther Brunner            }
192c06c1c7aSEsther Brunner            unset($po);
193c06c1c7aSEsther Brunner
194c06c1c7aSEsther Brunner            $renderer->doc .= $doc;
195c06c1c7aSEsther Brunner        }
196c06c1c7aSEsther Brunner    }
197c06c1c7aSEsther Brunner
198c06c1c7aSEsther Brunner    /**
199f62ea8a1Sandi     * lists all known syntax types and their registered modes
200f62ea8a1Sandi     */
201f62ea8a1Sandi    function _syntaxtypes_xhtml(){
202f62ea8a1Sandi        global $PARSER_MODES;
203f62ea8a1Sandi        $doc  = '';
204f62ea8a1Sandi
205f62ea8a1Sandi        $doc .= '<table class="inline"><tbody>';
206f62ea8a1Sandi        foreach($PARSER_MODES as $mode => $modes){
207f62ea8a1Sandi            $doc .= '<tr>';
208f62ea8a1Sandi            $doc .= '<td class="leftalign">';
209f62ea8a1Sandi            $doc .= $mode;
210f62ea8a1Sandi            $doc .= '</td>';
211f62ea8a1Sandi            $doc .= '<td class="leftalign">';
212f62ea8a1Sandi            $doc .= join(', ',$modes);
213f62ea8a1Sandi            $doc .= '</td>';
214f62ea8a1Sandi            $doc .= '</tr>';
215f62ea8a1Sandi        }
216f62ea8a1Sandi        $doc .= '</tbody></table>';
217f62ea8a1Sandi        return $doc;
218f62ea8a1Sandi    }
219f62ea8a1Sandi
220f62ea8a1Sandi    /**
221f62ea8a1Sandi     * lists all known syntax modes and their sorting value
222f62ea8a1Sandi     */
223f62ea8a1Sandi    function _syntaxmodes_xhtml(){
224f62ea8a1Sandi        $modes = p_get_parsermodes();
225f62ea8a1Sandi        $doc  = '';
226f62ea8a1Sandi
227f62ea8a1Sandi        foreach ($modes as $mode){
228f62ea8a1Sandi            $doc .= $mode['mode'].' ('.$mode['sort'].'), ';
229f62ea8a1Sandi        }
230f62ea8a1Sandi        return $doc;
231f62ea8a1Sandi    }
232c06c1c7aSEsther Brunner
233c06c1c7aSEsther Brunner    /**
234c06c1c7aSEsther Brunner     * Adds a TOC item
235c06c1c7aSEsther Brunner     */
236c06c1c7aSEsther Brunner    function _addToTOC($text, $level, &$renderer){
237c06c1c7aSEsther Brunner        global $conf;
238c06c1c7aSEsther Brunner
239c06c1c7aSEsther Brunner        if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){
240c06c1c7aSEsther Brunner            $hid  = $renderer->_headerToLink($text, 'true');
241c06c1c7aSEsther Brunner            $renderer->toc[] = array(
242c06c1c7aSEsther Brunner                'hid'   => $hid,
243c06c1c7aSEsther Brunner                'title' => $text,
244c06c1c7aSEsther Brunner                'type'  => 'ul',
245c06c1c7aSEsther Brunner                'level' => $level - $conf['toptoclevel'] + 1
246c06c1c7aSEsther Brunner            );
247c06c1c7aSEsther Brunner        }
248c06c1c7aSEsther Brunner        return $hid;
249c06c1c7aSEsther Brunner    }
250f62ea8a1Sandi}
251f62ea8a1Sandi
252f62ea8a1Sandi//Setup VIM: ex: et ts=4 enc=utf-8 :
253