xref: /dokuwiki/lib/plugins/info/syntax.php (revision f62ea8a1d1cf10eddeae777b11420624e111b7ea)
1*f62ea8a1Sandi<?php
2*f62ea8a1Sandi/**
3*f62ea8a1Sandi * Info Plugin: Displays information about various DokuWiki internals
4*f62ea8a1Sandi *
5*f62ea8a1Sandi * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6*f62ea8a1Sandi * @author     Andreas Gohr <andi@splitbrain.org>
7*f62ea8a1Sandi */
8*f62ea8a1Sandi
9*f62ea8a1Sandiif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
10*f62ea8a1Sandiif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
11*f62ea8a1Sandirequire_once(DOKU_PLUGIN.'syntax.php');
12*f62ea8a1Sandi
13*f62ea8a1Sandi/**
14*f62ea8a1Sandi * All DokuWiki plugins to extend the parser/rendering mechanism
15*f62ea8a1Sandi * need to inherit from this class
16*f62ea8a1Sandi */
17*f62ea8a1Sandiclass syntax_plugin_info extends DokuWiki_Syntax_Plugin {
18*f62ea8a1Sandi
19*f62ea8a1Sandi    /**
20*f62ea8a1Sandi     * What kind of syntax are we?
21*f62ea8a1Sandi     */
22*f62ea8a1Sandi    function getType(){
23*f62ea8a1Sandi        return 'substition';
24*f62ea8a1Sandi    }
25*f62ea8a1Sandi
26*f62ea8a1Sandi    /**
27*f62ea8a1Sandi     * Where to sort in?
28*f62ea8a1Sandi     */
29*f62ea8a1Sandi    function getSort(){
30*f62ea8a1Sandi        return 155;
31*f62ea8a1Sandi    }
32*f62ea8a1Sandi
33*f62ea8a1Sandi
34*f62ea8a1Sandi    /**
35*f62ea8a1Sandi     * Connect pattern to lexer
36*f62ea8a1Sandi     */
37*f62ea8a1Sandi    function connectTo($mode) {
38*f62ea8a1Sandi        $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info');
39*f62ea8a1Sandi    }
40*f62ea8a1Sandi
41*f62ea8a1Sandi
42*f62ea8a1Sandi    /**
43*f62ea8a1Sandi     * Handle the match
44*f62ea8a1Sandi     */
45*f62ea8a1Sandi    function handle($match, $state, $pos, &$handler){
46*f62ea8a1Sandi        $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end
47*f62ea8a1Sandi        return array(strtolower($match));
48*f62ea8a1Sandi    }
49*f62ea8a1Sandi
50*f62ea8a1Sandi    /**
51*f62ea8a1Sandi     * Create output
52*f62ea8a1Sandi     */
53*f62ea8a1Sandi    function render($mode, &$renderer, $data) {
54*f62ea8a1Sandi        if($mode == 'xhtml'){
55*f62ea8a1Sandi            //handle various info stuff
56*f62ea8a1Sandi            switch ($data[0]){
57*f62ea8a1Sandi                case 'version';
58*f62ea8a1Sandi                    $renderer->doc .= getVersion();
59*f62ea8a1Sandi                    break;
60*f62ea8a1Sandi                case 'syntaxmodes';
61*f62ea8a1Sandi                    $renderer->doc .= $this->_syntaxmodes_xhtml();
62*f62ea8a1Sandi                    break;
63*f62ea8a1Sandi                case 'syntaxtypes';
64*f62ea8a1Sandi                    $renderer->doc .= $this->_syntaxtypes_xhtml();
65*f62ea8a1Sandi                    break;
66*f62ea8a1Sandi                default:
67*f62ea8a1Sandi                    $renderer->doc .= "no info about ".htmlspecialchars($data[0]);
68*f62ea8a1Sandi            }
69*f62ea8a1Sandi            return true;
70*f62ea8a1Sandi        }
71*f62ea8a1Sandi        return false;
72*f62ea8a1Sandi    }
73*f62ea8a1Sandi
74*f62ea8a1Sandi    /**
75*f62ea8a1Sandi     * lists all known syntax types and their registered modes
76*f62ea8a1Sandi     */
77*f62ea8a1Sandi    function _syntaxtypes_xhtml(){
78*f62ea8a1Sandi        global $PARSER_MODES;
79*f62ea8a1Sandi        $doc  = '';
80*f62ea8a1Sandi
81*f62ea8a1Sandi        $doc .= '<table class="inline"><tbody>';
82*f62ea8a1Sandi        foreach($PARSER_MODES as $mode => $modes){
83*f62ea8a1Sandi            $doc .= '<tr>';
84*f62ea8a1Sandi            $doc .= '<td class="leftalign">';
85*f62ea8a1Sandi            $doc .= $mode;
86*f62ea8a1Sandi            $doc .= '</td>';
87*f62ea8a1Sandi            $doc .= '<td class="leftalign">';
88*f62ea8a1Sandi            $doc .= join(', ',$modes);
89*f62ea8a1Sandi            $doc .= '</td>';
90*f62ea8a1Sandi            $doc .= '</tr>';
91*f62ea8a1Sandi        }
92*f62ea8a1Sandi        $doc .= '</tbody></table>';
93*f62ea8a1Sandi        return $doc;
94*f62ea8a1Sandi    }
95*f62ea8a1Sandi
96*f62ea8a1Sandi    /**
97*f62ea8a1Sandi     * lists all known syntax modes and their sorting value
98*f62ea8a1Sandi     */
99*f62ea8a1Sandi    function _syntaxmodes_xhtml(){
100*f62ea8a1Sandi        $modes = p_get_parsermodes();
101*f62ea8a1Sandi        $doc  = '';
102*f62ea8a1Sandi
103*f62ea8a1Sandi        foreach ($modes as $mode){
104*f62ea8a1Sandi            $doc .= $mode['mode'].' ('.$mode['sort'].'), ';
105*f62ea8a1Sandi        }
106*f62ea8a1Sandi        return $doc;
107*f62ea8a1Sandi    }
108*f62ea8a1Sandi}
109*f62ea8a1Sandi
110*f62ea8a1Sandi//Setup VIM: ex: et ts=4 enc=utf-8 :
111