xref: /template/strap/syntax/xmlblockemptytag.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeaurequire_once(__DIR__ . '/../vendor/autoload.php');
5*04fd306cSNickeau
6*04fd306cSNickeauuse ComboStrap\BreadcrumbTag;
7*04fd306cSNickeauuse ComboStrap\HrTag;
8*04fd306cSNickeauuse ComboStrap\PluginUtility;
9*04fd306cSNickeauuse ComboStrap\XmlTagProcessing;
10*04fd306cSNickeau
11*04fd306cSNickeau
12*04fd306cSNickeau/**
13*04fd306cSNickeau * The empty pattern / void element
14*04fd306cSNickeau * (inline)
15*04fd306cSNickeau */
16*04fd306cSNickeauclass syntax_plugin_combo_xmlblockemptytag extends DokuWiki_Syntax_Plugin
17*04fd306cSNickeau{
18*04fd306cSNickeau
19*04fd306cSNickeau    // should be the same than the last name of the class name
20*04fd306cSNickeau    const TAG = "xmlblockemptytag";
21*04fd306cSNickeau
22*04fd306cSNickeau    private static function getEmptyBlockTag(): array
23*04fd306cSNickeau    {
24*04fd306cSNickeau        return [HrTag::TAG];
25*04fd306cSNickeau    }
26*04fd306cSNickeau
27*04fd306cSNickeau    function getType(): string
28*04fd306cSNickeau    {
29*04fd306cSNickeau        return 'substition';
30*04fd306cSNickeau    }
31*04fd306cSNickeau
32*04fd306cSNickeau    /**
33*04fd306cSNickeau     * How Dokuwiki will add P element
34*04fd306cSNickeau     *
35*04fd306cSNickeau     *  * 'normal' - Inline
36*04fd306cSNickeau     *  * 'block' - Block (dokuwiki does not create p inside)
37*04fd306cSNickeau     *  * 'stack' - Block (dokuwiki creates p inside)
38*04fd306cSNickeau     *
39*04fd306cSNickeau     * @see DokuWiki_Syntax_Plugin::getPType()
40*04fd306cSNickeau     */
41*04fd306cSNickeau    function getPType(): string
42*04fd306cSNickeau    {
43*04fd306cSNickeau        /**
44*04fd306cSNickeau         * Empty tag may be also block (ie Navigational {@link BreadcrumbTag} for instance
45*04fd306cSNickeau         */
46*04fd306cSNickeau        return 'block';
47*04fd306cSNickeau    }
48*04fd306cSNickeau
49*04fd306cSNickeau    function getAllowedTypes(): array
50*04fd306cSNickeau    {
51*04fd306cSNickeau        return array();
52*04fd306cSNickeau    }
53*04fd306cSNickeau
54*04fd306cSNickeau    function getSort(): int
55*04fd306cSNickeau    {
56*04fd306cSNickeau        // should be before all container tag
57*04fd306cSNickeau        return 200;
58*04fd306cSNickeau    }
59*04fd306cSNickeau
60*04fd306cSNickeau
61*04fd306cSNickeau    function connectTo($mode)
62*04fd306cSNickeau    {
63*04fd306cSNickeau
64*04fd306cSNickeau        foreach(self::getEmptyBlockTag() as $tag) {
65*04fd306cSNickeau            $pattern = PluginUtility::getEmptyTagPattern($tag);
66*04fd306cSNickeau            $this->Lexer->addSpecialPattern($pattern, $mode, PluginUtility::getModeFromTag($this->getPluginComponent()));
67*04fd306cSNickeau        }
68*04fd306cSNickeau
69*04fd306cSNickeau    }
70*04fd306cSNickeau
71*04fd306cSNickeau    function handle($match, $state, $pos, Doku_Handler $handler): array
72*04fd306cSNickeau    {
73*04fd306cSNickeau        return XmlTagProcessing::handleStaticEmptyTag($match, $state, $pos, $handler, $this);
74*04fd306cSNickeau    }
75*04fd306cSNickeau
76*04fd306cSNickeau    /**
77*04fd306cSNickeau     * Render the output
78*04fd306cSNickeau     * @param string $format
79*04fd306cSNickeau     * @param Doku_Renderer $renderer
80*04fd306cSNickeau     * @param array $data - what the function handle() return'ed
81*04fd306cSNickeau     * @return boolean - rendered correctly? (however, returned value is not used at the moment)
82*04fd306cSNickeau     * @see DokuWiki_Syntax_Plugin::render()
83*04fd306cSNickeau     */
84*04fd306cSNickeau    function render($format, Doku_Renderer $renderer, $data): bool
85*04fd306cSNickeau    {
86*04fd306cSNickeau
87*04fd306cSNickeau        return XmlTagProcessing::renderStaticEmptyTag($format, $renderer, $data, $this);
88*04fd306cSNickeau    }
89*04fd306cSNickeau
90*04fd306cSNickeau
91*04fd306cSNickeau}
92*04fd306cSNickeau
93