xref: /plugin/combo/syntax/xmlprotectedtag.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeauuse ComboStrap\DateTag;
5*04fd306cSNickeauuse ComboStrap\PipelineTag;
6*04fd306cSNickeauuse ComboStrap\PluginUtility;
7*04fd306cSNickeauuse ComboStrap\PrismTags;
8*04fd306cSNickeauuse ComboStrap\Tag\MermaidTag;
9*04fd306cSNickeauuse ComboStrap\XmlTagProcessing;
10*04fd306cSNickeau
11*04fd306cSNickeau
12*04fd306cSNickeau/**
13*04fd306cSNickeau *
14*04fd306cSNickeau *
15*04fd306cSNickeau */
16*04fd306cSNickeauclass syntax_plugin_combo_xmlprotectedtag extends DokuWiki_Syntax_Plugin
17*04fd306cSNickeau{
18*04fd306cSNickeau
19*04fd306cSNickeau
20*04fd306cSNickeau    private function getTags(): array
21*04fd306cSNickeau    {
22*04fd306cSNickeau        $tags = self::TAGS;
23*04fd306cSNickeau        if ($this->getConf(PrismTags::CONF_FILE_ENABLE)) {
24*04fd306cSNickeau            $tags[] = PrismTags::FILE_TAG;
25*04fd306cSNickeau        }
26*04fd306cSNickeau        return $tags;
27*04fd306cSNickeau    }
28*04fd306cSNickeau
29*04fd306cSNickeau    function getType(): string
30*04fd306cSNickeau    {
31*04fd306cSNickeau        /**
32*04fd306cSNickeau         * You can't write in a code block
33*04fd306cSNickeau         */
34*04fd306cSNickeau        return 'protected';
35*04fd306cSNickeau    }
36*04fd306cSNickeau
37*04fd306cSNickeau    /**
38*04fd306cSNickeau     * How DokuWiki will add P element
39*04fd306cSNickeau     *
40*04fd306cSNickeau     *  * 'normal' - The plugin can be used inside paragraphs
41*04fd306cSNickeau     *  * 'block'  - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs
42*04fd306cSNickeau     *  * 'stack'  - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs
43*04fd306cSNickeau     *
44*04fd306cSNickeau     * @see DokuWiki_Syntax_Plugin::getPType()
45*04fd306cSNickeau     */
46*04fd306cSNickeau    function getPType(): string
47*04fd306cSNickeau    {
48*04fd306cSNickeau        return 'block';
49*04fd306cSNickeau    }
50*04fd306cSNickeau
51*04fd306cSNickeau    /**
52*04fd306cSNickeau     * @return array
53*04fd306cSNickeau     * Allow which kind of plugin inside
54*04fd306cSNickeau     *
55*04fd306cSNickeau     * No one of array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs')
56*04fd306cSNickeau     * because we manage self the content and we call self the parser
57*04fd306cSNickeau     *
58*04fd306cSNickeau     * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php
59*04fd306cSNickeau     */
60*04fd306cSNickeau    function getAllowedTypes(): array
61*04fd306cSNickeau    {
62*04fd306cSNickeau        return array();
63*04fd306cSNickeau    }
64*04fd306cSNickeau
65*04fd306cSNickeau    function getSort(): int
66*04fd306cSNickeau    {
67*04fd306cSNickeau        /**
68*04fd306cSNickeau         * Should be less than the code syntax plugin
69*04fd306cSNickeau         * which is 200
70*04fd306cSNickeau         **/
71*04fd306cSNickeau        return 199;
72*04fd306cSNickeau    }
73*04fd306cSNickeau
74*04fd306cSNickeau    const TAGS = [
75*04fd306cSNickeau        PrismTags::CONSOLE_TAG,
76*04fd306cSNickeau        PipelineTag::TAG, // protected inline deprecated
77*04fd306cSNickeau        DateTag::TAG, // protected inline deprecated
78*04fd306cSNickeau        MermaidTag::MARKUP_SEQUENCE_DIAGRAM,
79*04fd306cSNickeau        MermaidTag::MARKUP_CLASS_DIAGRAM,
80*04fd306cSNickeau        MermaidTag::MARKUP_FLOWCHART,
81*04fd306cSNickeau        MermaidTag::MARKUP_GANTT,
82*04fd306cSNickeau        MermaidTag::MARKUP_ERD,
83*04fd306cSNickeau        MermaidTag::MARKUP_JOURNEY,
84*04fd306cSNickeau        MermaidTag::MARKUP_PIECHART,
85*04fd306cSNickeau        MermaidTag::MARKUP_STATE_DIAGRAM,
86*04fd306cSNickeau    ];
87*04fd306cSNickeau
88*04fd306cSNickeau    function connectTo($mode)
89*04fd306cSNickeau    {
90*04fd306cSNickeau
91*04fd306cSNickeau
92*04fd306cSNickeau        foreach ($this->getTags() as $tag) {
93*04fd306cSNickeau            $pattern = XmlTagProcessing::getContainerTagPattern($tag);
94*04fd306cSNickeau            $this->Lexer->addEntryPattern($pattern, $mode, PluginUtility::getModeFromTag($this->getPluginComponent()));
95*04fd306cSNickeau        }
96*04fd306cSNickeau
97*04fd306cSNickeau
98*04fd306cSNickeau    }
99*04fd306cSNickeau
100*04fd306cSNickeau
101*04fd306cSNickeau    function postConnect()
102*04fd306cSNickeau    {
103*04fd306cSNickeau        foreach ($this->getTags() as $tag) {
104*04fd306cSNickeau            $this->Lexer->addExitPattern('</' . $tag . '>', PluginUtility::getModeFromTag($this->getPluginComponent()));
105*04fd306cSNickeau        }
106*04fd306cSNickeau    }
107*04fd306cSNickeau
108*04fd306cSNickeau    /**
109*04fd306cSNickeau     *
110*04fd306cSNickeau     * The handle function goal is to parse the matched syntax through the pattern function
111*04fd306cSNickeau     * and to return the result for use in the renderer
112*04fd306cSNickeau     * This result is always cached until the page is modified.
113*04fd306cSNickeau     * @param string $match
114*04fd306cSNickeau     * @param int $state
115*04fd306cSNickeau     * @param int $pos - byte position in the original source file
116*04fd306cSNickeau     * @param Doku_Handler $handler
117*04fd306cSNickeau     * @return array|bool
118*04fd306cSNickeau     * @see DokuWiki_Syntax_Plugin::handle()
119*04fd306cSNickeau     *
120*04fd306cSNickeau     */
121*04fd306cSNickeau    function handle($match, $state, $pos, Doku_Handler $handler)
122*04fd306cSNickeau    {
123*04fd306cSNickeau
124*04fd306cSNickeau        return XmlTagProcessing::handleStatic($match, $state, $pos, $handler, $this);
125*04fd306cSNickeau
126*04fd306cSNickeau    }
127*04fd306cSNickeau
128*04fd306cSNickeau    /**
129*04fd306cSNickeau     * Render the output
130*04fd306cSNickeau     * @param string $format
131*04fd306cSNickeau     * @param Doku_Renderer $renderer
132*04fd306cSNickeau     * @param array $data - what the function handle() return'ed
133*04fd306cSNickeau     * @return boolean - rendered correctly? (however, returned value is not used at the moment)
134*04fd306cSNickeau     * @see DokuWiki_Syntax_Plugin::render()
135*04fd306cSNickeau     *
136*04fd306cSNickeau     */
137*04fd306cSNickeau    function render($format, Doku_Renderer $renderer, $data): bool
138*04fd306cSNickeau    {
139*04fd306cSNickeau        return XmlTagProcessing::renderStatic($format, $renderer, $data, $this);
140*04fd306cSNickeau    }
141*04fd306cSNickeau
142*04fd306cSNickeau
143*04fd306cSNickeau}
144*04fd306cSNickeau
145