xref: /plugin/combo/syntax/comment.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeau
4*37748cd8SNickeau// must be run within Dokuwiki
5*37748cd8SNickeauuse ComboStrap\PluginUtility;
6*37748cd8SNickeau
7*37748cd8SNickeauif (!defined('DOKU_INC')) die();
8*37748cd8SNickeau
9*37748cd8SNickeau/**
10*37748cd8SNickeau * Class syntax_plugin_combo_itext
11*37748cd8SNickeau * Setting text attributes on words
12*37748cd8SNickeau *
13*37748cd8SNickeau */
14*37748cd8SNickeauclass syntax_plugin_combo_comment extends DokuWiki_Syntax_Plugin
15*37748cd8SNickeau{
16*37748cd8SNickeau
17*37748cd8SNickeau    const TAG = "comment";
18*37748cd8SNickeau
19*37748cd8SNickeau    /**
20*37748cd8SNickeau     * If yes, the comment are in the rendering
21*37748cd8SNickeau     */
22*37748cd8SNickeau    const CONF_OUTPUT_COMMENT = "outputComment";
23*37748cd8SNickeau    const CANONICAL = "comment";
24*37748cd8SNickeau
25*37748cd8SNickeau    /**
26*37748cd8SNickeau     * Syntax Type.
27*37748cd8SNickeau     *
28*37748cd8SNickeau     * Needs to return one of the mode types defined in {@link $PARSER_MODES} in parser.php
29*37748cd8SNickeau     * @see DokuWiki_Syntax_Plugin::getType()
30*37748cd8SNickeau     */
31*37748cd8SNickeau    function getType()
32*37748cd8SNickeau    {
33*37748cd8SNickeau        return 'formatting';
34*37748cd8SNickeau    }
35*37748cd8SNickeau
36*37748cd8SNickeau    /**
37*37748cd8SNickeau     * How Dokuwiki will add P element
38*37748cd8SNickeau     *
39*37748cd8SNickeau     *  * 'normal' - The plugin can be used inside paragraphs
40*37748cd8SNickeau     *  * 'block'  - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs
41*37748cd8SNickeau     *  * 'stack'  - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs
42*37748cd8SNickeau     *
43*37748cd8SNickeau     * @see DokuWiki_Syntax_Plugin::getPType()
44*37748cd8SNickeau     */
45*37748cd8SNickeau    function getPType()
46*37748cd8SNickeau    {
47*37748cd8SNickeau        return 'normal';
48*37748cd8SNickeau    }
49*37748cd8SNickeau
50*37748cd8SNickeau    /**
51*37748cd8SNickeau     * @return array
52*37748cd8SNickeau     * Allow which kind of plugin inside
53*37748cd8SNickeau     *
54*37748cd8SNickeau     * No one of array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs')
55*37748cd8SNickeau     * because we manage self the content and we call self the parser
56*37748cd8SNickeau     *
57*37748cd8SNickeau     * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php
58*37748cd8SNickeau     */
59*37748cd8SNickeau    function getAllowedTypes()
60*37748cd8SNickeau    {
61*37748cd8SNickeau        return array();
62*37748cd8SNickeau    }
63*37748cd8SNickeau
64*37748cd8SNickeau
65*37748cd8SNickeau    function getSort()
66*37748cd8SNickeau    {
67*37748cd8SNickeau        return 201;
68*37748cd8SNickeau    }
69*37748cd8SNickeau
70*37748cd8SNickeau
71*37748cd8SNickeau    function connectTo($mode)
72*37748cd8SNickeau    {
73*37748cd8SNickeau
74*37748cd8SNickeau
75*37748cd8SNickeau        $this->Lexer->addEntryPattern("<!--", $mode, PluginUtility::getModeFromTag($this->getPluginComponent()));
76*37748cd8SNickeau
77*37748cd8SNickeau    }
78*37748cd8SNickeau
79*37748cd8SNickeau
80*37748cd8SNickeau    function postConnect()
81*37748cd8SNickeau    {
82*37748cd8SNickeau
83*37748cd8SNickeau        $this->Lexer->addExitPattern("-->", PluginUtility::getModeFromTag($this->getPluginComponent()));
84*37748cd8SNickeau
85*37748cd8SNickeau
86*37748cd8SNickeau    }
87*37748cd8SNickeau
88*37748cd8SNickeau    function handle($match, $state, $pos, Doku_Handler $handler)
89*37748cd8SNickeau    {
90*37748cd8SNickeau
91*37748cd8SNickeau        switch ($state) {
92*37748cd8SNickeau
93*37748cd8SNickeau            case DOKU_LEXER_ENTER :
94*37748cd8SNickeau            case DOKU_LEXER_EXIT :
95*37748cd8SNickeau                return array(
96*37748cd8SNickeau                    PluginUtility::STATE => $state
97*37748cd8SNickeau                );
98*37748cd8SNickeau
99*37748cd8SNickeau            case DOKU_LEXER_UNMATCHED :
100*37748cd8SNickeau                return PluginUtility::handleAndReturnUnmatchedData(self::TAG, $match, $handler);
101*37748cd8SNickeau
102*37748cd8SNickeau        }
103*37748cd8SNickeau        return array();
104*37748cd8SNickeau
105*37748cd8SNickeau    }
106*37748cd8SNickeau
107*37748cd8SNickeau    /**
108*37748cd8SNickeau     * Render the output
109*37748cd8SNickeau     * @param string $format
110*37748cd8SNickeau     * @param Doku_Renderer $renderer
111*37748cd8SNickeau     * @param array $data - what the function handle() return'ed
112*37748cd8SNickeau     * @return boolean - rendered correctly? (however, returned value is not used at the moment)
113*37748cd8SNickeau     * @see DokuWiki_Syntax_Plugin::render()
114*37748cd8SNickeau     *
115*37748cd8SNickeau     *
116*37748cd8SNickeau     */
117*37748cd8SNickeau    function render($format, Doku_Renderer $renderer, $data)
118*37748cd8SNickeau    {
119*37748cd8SNickeau        if(PluginUtility::getConfValue(self::CONF_OUTPUT_COMMENT,0)) {
120*37748cd8SNickeau            if ($format === "xhtml") {
121*37748cd8SNickeau                if ($data[PluginUtility::STATE] === DOKU_LEXER_UNMATCHED) {
122*37748cd8SNickeau                    $renderer->doc .= "<!-- " . PluginUtility::renderUnmatched($data) . "-->";
123*37748cd8SNickeau                }
124*37748cd8SNickeau            }
125*37748cd8SNickeau        }
126*37748cd8SNickeau        // unsupported $mode
127*37748cd8SNickeau        return false;
128*37748cd8SNickeau
129*37748cd8SNickeau    }
130*37748cd8SNickeau
131*37748cd8SNickeau
132*37748cd8SNickeau}
133*37748cd8SNickeau
134