xref: /dokuwiki/lib/plugins/info/syntax.php (revision 896a5c22ad2bfe6b07b70324ed639fbaf9a20869)
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 */
8f62ea8a1Sandi
9f62ea8a1Sandiif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
10f62ea8a1Sandiif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
11f62ea8a1Sandirequire_once(DOKU_PLUGIN.'syntax.php');
12f62ea8a1Sandi
13f62ea8a1Sandi/**
14f62ea8a1Sandi * All DokuWiki plugins to extend the parser/rendering mechanism
15f62ea8a1Sandi * need to inherit from this class
16f62ea8a1Sandi */
17f62ea8a1Sandiclass syntax_plugin_info extends DokuWiki_Syntax_Plugin {
18f62ea8a1Sandi
19f62ea8a1Sandi    /**
20*896a5c22Sandi     * return some info
21*896a5c22Sandi     */
22*896a5c22Sandi    function getInfo(){
23*896a5c22Sandi        return array(
24*896a5c22Sandi            'author' => 'Andreas Gohr',
25*896a5c22Sandi            'email'  => 'andi@splitbrain.org',
26*896a5c22Sandi            'date'   => '2005-06-26',
27*896a5c22Sandi            'name'   => 'Info Plugin',
28*896a5c22Sandi            'desc'   => 'Displays information about various DokuWiki internals',
29*896a5c22Sandi            'url'    => 'http://wiki.splitbrain.org/plugin:info',
30*896a5c22Sandi        );
31*896a5c22Sandi    }
32*896a5c22Sandi
33*896a5c22Sandi    /**
34f62ea8a1Sandi     * What kind of syntax are we?
35f62ea8a1Sandi     */
36f62ea8a1Sandi    function getType(){
37f62ea8a1Sandi        return 'substition';
38f62ea8a1Sandi    }
39f62ea8a1Sandi
40f62ea8a1Sandi    /**
41*896a5c22Sandi     * What about paragraphs?
42*896a5c22Sandi     */
43*896a5c22Sandi    function getPType(){
44*896a5c22Sandi        return 'block';
45*896a5c22Sandi    }
46*896a5c22Sandi
47*896a5c22Sandi    /**
48f62ea8a1Sandi     * Where to sort in?
49f62ea8a1Sandi     */
50f62ea8a1Sandi    function getSort(){
51f62ea8a1Sandi        return 155;
52f62ea8a1Sandi    }
53f62ea8a1Sandi
54f62ea8a1Sandi
55f62ea8a1Sandi    /**
56f62ea8a1Sandi     * Connect pattern to lexer
57f62ea8a1Sandi     */
58f62ea8a1Sandi    function connectTo($mode) {
59f62ea8a1Sandi        $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info');
60f62ea8a1Sandi    }
61f62ea8a1Sandi
62f62ea8a1Sandi
63f62ea8a1Sandi    /**
64f62ea8a1Sandi     * Handle the match
65f62ea8a1Sandi     */
66f62ea8a1Sandi    function handle($match, $state, $pos, &$handler){
67f62ea8a1Sandi        $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end
68f62ea8a1Sandi        return array(strtolower($match));
69f62ea8a1Sandi    }
70f62ea8a1Sandi
71f62ea8a1Sandi    /**
72f62ea8a1Sandi     * Create output
73f62ea8a1Sandi     */
74f62ea8a1Sandi    function render($mode, &$renderer, $data) {
75f62ea8a1Sandi        if($mode == 'xhtml'){
76f62ea8a1Sandi            //handle various info stuff
77f62ea8a1Sandi            switch ($data[0]){
78*896a5c22Sandi                case 'version':
79f62ea8a1Sandi                    $renderer->doc .= getVersion();
80f62ea8a1Sandi                    break;
81*896a5c22Sandi                case 'syntaxmodes':
82f62ea8a1Sandi                    $renderer->doc .= $this->_syntaxmodes_xhtml();
83f62ea8a1Sandi                    break;
84*896a5c22Sandi                case 'syntaxtypes':
85f62ea8a1Sandi                    $renderer->doc .= $this->_syntaxtypes_xhtml();
86f62ea8a1Sandi                    break;
87*896a5c22Sandi                case 'syntaxplugins':
88*896a5c22Sandi                    $this->_syntaxplugins_xhtml($renderer);
89*896a5c22Sandi                    break;
90f62ea8a1Sandi                default:
91f62ea8a1Sandi                    $renderer->doc .= "no info about ".htmlspecialchars($data[0]);
92f62ea8a1Sandi            }
93f62ea8a1Sandi            return true;
94f62ea8a1Sandi        }
95f62ea8a1Sandi        return false;
96f62ea8a1Sandi    }
97f62ea8a1Sandi
98f62ea8a1Sandi    /**
99*896a5c22Sandi     * list all installed syntax plugins
100*896a5c22Sandi     *
101*896a5c22Sandi     * uses some of the original renderer methods
102*896a5c22Sandi     */
103*896a5c22Sandi    function _syntaxplugins_xhtml(& $renderer){
104*896a5c22Sandi        global $lang;
105*896a5c22Sandi        $renderer->doc .= '<ul>';
106*896a5c22Sandi
107*896a5c22Sandi        $plugins = plugin_list('syntax');
108*896a5c22Sandi        foreach($plugins as $p){
109*896a5c22Sandi            if(plugin_load('syntax',$p,$po)){
110*896a5c22Sandi                $info = $po->getInfo();
111*896a5c22Sandi
112*896a5c22Sandi                $renderer->doc .= '<li>';
113*896a5c22Sandi                $renderer->externallink($info['url'],$info['name']);
114*896a5c22Sandi                $renderer->doc .= ' ';
115*896a5c22Sandi                $renderer->doc .= '<i>'.$info['date'].'</i>';
116*896a5c22Sandi                $renderer->doc .= ' ';
117*896a5c22Sandi                $renderer->doc .= $lang['by'];
118*896a5c22Sandi                $renderer->doc .= ' ';
119*896a5c22Sandi                $renderer->emaillink($info['email'],$info['author']);
120*896a5c22Sandi                $renderer->doc .= '<br />';
121*896a5c22Sandi                $renderer->doc .= htmlspecialchars($info['desc']);
122*896a5c22Sandi                $renderer->doc .= '</li>';
123*896a5c22Sandi            }
124*896a5c22Sandi        }
125*896a5c22Sandi
126*896a5c22Sandi        $renderer->doc .= '</ul>';
127*896a5c22Sandi    }
128*896a5c22Sandi
129*896a5c22Sandi    /**
130f62ea8a1Sandi     * lists all known syntax types and their registered modes
131f62ea8a1Sandi     */
132f62ea8a1Sandi    function _syntaxtypes_xhtml(){
133f62ea8a1Sandi        global $PARSER_MODES;
134f62ea8a1Sandi        $doc  = '';
135f62ea8a1Sandi
136f62ea8a1Sandi        $doc .= '<table class="inline"><tbody>';
137f62ea8a1Sandi        foreach($PARSER_MODES as $mode => $modes){
138f62ea8a1Sandi            $doc .= '<tr>';
139f62ea8a1Sandi            $doc .= '<td class="leftalign">';
140f62ea8a1Sandi            $doc .= $mode;
141f62ea8a1Sandi            $doc .= '</td>';
142f62ea8a1Sandi            $doc .= '<td class="leftalign">';
143f62ea8a1Sandi            $doc .= join(', ',$modes);
144f62ea8a1Sandi            $doc .= '</td>';
145f62ea8a1Sandi            $doc .= '</tr>';
146f62ea8a1Sandi        }
147f62ea8a1Sandi        $doc .= '</tbody></table>';
148f62ea8a1Sandi        return $doc;
149f62ea8a1Sandi    }
150f62ea8a1Sandi
151f62ea8a1Sandi    /**
152f62ea8a1Sandi     * lists all known syntax modes and their sorting value
153f62ea8a1Sandi     */
154f62ea8a1Sandi    function _syntaxmodes_xhtml(){
155f62ea8a1Sandi        $modes = p_get_parsermodes();
156f62ea8a1Sandi        $doc  = '';
157f62ea8a1Sandi
158f62ea8a1Sandi        foreach ($modes as $mode){
159f62ea8a1Sandi            $doc .= $mode['mode'].' ('.$mode['sort'].'), ';
160f62ea8a1Sandi        }
161f62ea8a1Sandi        return $doc;
162f62ea8a1Sandi    }
163f62ea8a1Sandi}
164f62ea8a1Sandi
165f62ea8a1Sandi//Setup VIM: ex: et ts=4 enc=utf-8 :
166