xref: /template/strap/syntax/brand.php (revision 007225e5fb2d3f64edaccd3bd447ca26effb9d68)
1*007225e5Sgerardnico<?php
2*007225e5Sgerardnico
3*007225e5Sgerardnico// implementation of
4*007225e5Sgerardnico// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite
5*007225e5Sgerardnico
6*007225e5Sgerardnico// must be run within Dokuwiki
7*007225e5Sgerardnicouse ComboStrap\PluginUtility;
8*007225e5Sgerardnico
9*007225e5Sgerardnicoif(!defined('DOKU_INC')) die();
10*007225e5Sgerardnico
11*007225e5Sgerardnico
12*007225e5Sgerardnicoclass syntax_plugin_combo_brand extends DokuWiki_Syntax_Plugin {
13*007225e5Sgerardnico
14*007225e5Sgerardnico    /**
15*007225e5Sgerardnico     * Syntax Type.
16*007225e5Sgerardnico     *
17*007225e5Sgerardnico     * Needs to return one of the mode types defined in $PARSER_MODES in parser.php
18*007225e5Sgerardnico     * @see DokuWiki_Syntax_Plugin::getType()
19*007225e5Sgerardnico     */
20*007225e5Sgerardnico    function getType() {
21*007225e5Sgerardnico        return 'formatting';
22*007225e5Sgerardnico    }
23*007225e5Sgerardnico
24*007225e5Sgerardnico    /**
25*007225e5Sgerardnico     * How Dokuwiki will add P element
26*007225e5Sgerardnico     *
27*007225e5Sgerardnico     *  * 'normal' - The plugin can be used inside paragraphs
28*007225e5Sgerardnico     *  * 'block'  - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs
29*007225e5Sgerardnico     *  * 'stack'  - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs
30*007225e5Sgerardnico     *
31*007225e5Sgerardnico     * @see DokuWiki_Syntax_Plugin::getPType()
32*007225e5Sgerardnico     */
33*007225e5Sgerardnico    function getPType() {
34*007225e5Sgerardnico        return 'normal';
35*007225e5Sgerardnico    }
36*007225e5Sgerardnico
37*007225e5Sgerardnico    /**
38*007225e5Sgerardnico     * @return array
39*007225e5Sgerardnico     * Allow which kind of plugin inside
40*007225e5Sgerardnico     *
41*007225e5Sgerardnico     * array('container', 'baseonly', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs')
42*007225e5Sgerardnico     *
43*007225e5Sgerardnico     */
44*007225e5Sgerardnico    function getAllowedTypes() {
45*007225e5Sgerardnico        return array('container', 'baseonly', 'formatting', 'substition', 'protected', 'disabled');
46*007225e5Sgerardnico    }
47*007225e5Sgerardnico
48*007225e5Sgerardnico    function getSort() {
49*007225e5Sgerardnico        return 201;
50*007225e5Sgerardnico    }
51*007225e5Sgerardnico
52*007225e5Sgerardnico
53*007225e5Sgerardnico    /**
54*007225e5Sgerardnico     * Create a pattern that will called this plugin
55*007225e5Sgerardnico     *
56*007225e5Sgerardnico     * @see Doku_Parser_Mode::connectTo()
57*007225e5Sgerardnico     * @param string $mode
58*007225e5Sgerardnico     */
59*007225e5Sgerardnico    function connectTo($mode) {
60*007225e5Sgerardnico
61*007225e5Sgerardnico        $pattern = PluginUtility::getContainerTagPattern(self::getTag());
62*007225e5Sgerardnico        $this->Lexer->addEntryPattern($pattern, $mode, 'plugin_' . PluginUtility::PLUGIN_BASE_NAME . '_' . $this->getPluginComponent());
63*007225e5Sgerardnico
64*007225e5Sgerardnico    }
65*007225e5Sgerardnico
66*007225e5Sgerardnico    function postConnect() {
67*007225e5Sgerardnico
68*007225e5Sgerardnico        $this->Lexer->addExitPattern('</' . self::getTag() . '>', 'plugin_' . PluginUtility::PLUGIN_BASE_NAME . '_' . $this->getPluginComponent());
69*007225e5Sgerardnico
70*007225e5Sgerardnico    }
71*007225e5Sgerardnico
72*007225e5Sgerardnico    function handle($match, $state, $pos, Doku_Handler $handler) {
73*007225e5Sgerardnico
74*007225e5Sgerardnico        switch ($state) {
75*007225e5Sgerardnico
76*007225e5Sgerardnico            case DOKU_LEXER_ENTER :
77*007225e5Sgerardnico                $match = substr($match, strlen($this->getPluginComponent()) + 1, -1);
78*007225e5Sgerardnico                $parameters = PluginUtility::parse2HTMLAttributes($match);
79*007225e5Sgerardnico                return array($state, $parameters);
80*007225e5Sgerardnico
81*007225e5Sgerardnico            case DOKU_LEXER_UNMATCHED :
82*007225e5Sgerardnico                return array ($state, $match);
83*007225e5Sgerardnico
84*007225e5Sgerardnico            case DOKU_LEXER_EXIT :
85*007225e5Sgerardnico
86*007225e5Sgerardnico                // Important otherwise we don't get an exit in the render
87*007225e5Sgerardnico                return array($state, '');
88*007225e5Sgerardnico
89*007225e5Sgerardnico
90*007225e5Sgerardnico        }
91*007225e5Sgerardnico        return array();
92*007225e5Sgerardnico
93*007225e5Sgerardnico    }
94*007225e5Sgerardnico
95*007225e5Sgerardnico    /**
96*007225e5Sgerardnico     * Render the output
97*007225e5Sgerardnico     * @param string $format
98*007225e5Sgerardnico     * @param Doku_Renderer $renderer
99*007225e5Sgerardnico     * @param array $data - what the function handle() return'ed
100*007225e5Sgerardnico     * @return boolean - rendered correctly? (however, returned value is not used at the moment)
101*007225e5Sgerardnico     * @see DokuWiki_Syntax_Plugin::render()
102*007225e5Sgerardnico     *
103*007225e5Sgerardnico     *
104*007225e5Sgerardnico     */
105*007225e5Sgerardnico    function render($format, Doku_Renderer $renderer, $data){
106*007225e5Sgerardnico
107*007225e5Sgerardnico        if ($format == 'xhtml') {
108*007225e5Sgerardnico
109*007225e5Sgerardnico            /** @var Doku_Renderer_xhtml $renderer */
110*007225e5Sgerardnico            list($state, $parameters) = $data;
111*007225e5Sgerardnico            switch ($state) {
112*007225e5Sgerardnico                case DOKU_LEXER_ENTER :
113*007225e5Sgerardnico                    $renderer->doc .= '<a href="'.wl().'" accesskey="h"';
114*007225e5Sgerardnico
115*007225e5Sgerardnico                    $title = ' title="';
116*007225e5Sgerardnico                    if (array_key_exists("title", $parameters)) {
117*007225e5Sgerardnico                        $title .= $parameters["title"];
118*007225e5Sgerardnico                    } else {
119*007225e5Sgerardnico                        global $conf;
120*007225e5Sgerardnico                        $title .= $conf['title'];
121*007225e5Sgerardnico                    }
122*007225e5Sgerardnico                    $title .='"';
123*007225e5Sgerardnico                    $renderer->doc .= $title;
124*007225e5Sgerardnico
125*007225e5Sgerardnico                    $renderer->doc .= ' class="navbar-brand';
126*007225e5Sgerardnico                    if (array_key_exists("class", $parameters)) {
127*007225e5Sgerardnico                        $renderer->doc .= ' '.hsc($parameters["class"]);
128*007225e5Sgerardnico                    }
129*007225e5Sgerardnico                    $renderer->doc .= '"';
130*007225e5Sgerardnico                    if (array_key_exists("style", $parameters)) {
131*007225e5Sgerardnico                        $renderer->doc .= ' style="'.hsc($parameters["style"]).'"';
132*007225e5Sgerardnico                    }
133*007225e5Sgerardnico                    $renderer->doc .= '>';
134*007225e5Sgerardnico                    break;
135*007225e5Sgerardnico
136*007225e5Sgerardnico                case DOKU_LEXER_UNMATCHED :
137*007225e5Sgerardnico                    // What about:
138*007225e5Sgerardnico                    //   * the title of the website ? $conf['title']
139*007225e5Sgerardnico                    //   * the logo ? $logo = tpl_getMediaFile(array(':wiki:logo.png', ':logo.png', 'images/logo.png'), false, $logoSize);
140*007225e5Sgerardnico                    $renderer->doc .= $renderer->_xmlEntities($parameters);
141*007225e5Sgerardnico                    break;
142*007225e5Sgerardnico
143*007225e5Sgerardnico                case DOKU_LEXER_EXIT :
144*007225e5Sgerardnico                    $renderer->doc .= '</a>';
145*007225e5Sgerardnico                    break;
146*007225e5Sgerardnico            }
147*007225e5Sgerardnico            return true;
148*007225e5Sgerardnico        }
149*007225e5Sgerardnico
150*007225e5Sgerardnico        // unsupported $mode
151*007225e5Sgerardnico        return false;
152*007225e5Sgerardnico    }
153*007225e5Sgerardnico
154*007225e5Sgerardnico    public static function getTag()
155*007225e5Sgerardnico    {
156*007225e5Sgerardnico        list(/* $t */, /* $p */, /* $n */, $c) = explode('_', get_called_class(), 4);
157*007225e5Sgerardnico        return (isset($c) ? $c : '');
158*007225e5Sgerardnico    }
159*007225e5Sgerardnico
160*007225e5Sgerardnico}
161*007225e5Sgerardnico
162