1<?php
2/**
3 * DokuWiki plugin PageTitle Breadcrumb; Syntax component
4 * Render hierarchical breadcrumbs in the page using "Short Title"
5 *
6 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
7 * @author     Satoshi Sahara <sahara.satoshi@gmail.com>
8 */
9class syntax_plugin_pagetitle_breadcrumb extends DokuWiki_Syntax_Plugin
10{
11    /** syntax type */
12    public function getType()
13    {
14        return 'substition';
15    }
16
17    /** paragraph type */
18    public function getPType()
19    {
20        return 'normal';
21    }
22
23    /**
24     * Connect pattern to lexer, implement Doku_Parser_Mode_Interface
25     */
26    protected $mode, $pattern;
27
28    /** sort number used to determine priority of this mode */
29    public function getSort()
30    {
31        return 990;
32    }
33
34    public function preConnect()
35    {
36        // syntax mode, drop 'syntax_' from class name
37        $this->mode = substr(__CLASS__, 7);
38
39        //syntax patterns
40        $this->pattern[5] = '~~\$Breadcrumb\([^\n~]*\)~~';
41    }
42
43    public function connectTo($mode)
44    {
45        $this->Lexer->addSpecialPattern($this->pattern[5], $mode, $this->mode);
46    }
47
48    /**
49     * Handle the match
50     */
51    public function handle($match, $state, $pos, Doku_Handler $handler)
52    {
53        $id = trim(substr($match, 13, -3));
54        return $data = [$id];
55    }
56
57    /**
58     * Create output
59     */
60    public function render($format, Doku_Renderer $renderer, $data)
61    {
62        global $ID;
63        static $helper;
64
65        $id = cleanID($data[0]) ?: $ID;
66
67        switch ($format) {
68            case 'xhtml':
69                // load helper object
70                isset($helper) || $helper = $this->loadHelper($this->getPluginName());
71
72                $renderer->doc .= $helper->html_youarehere(1, $id);
73                return true;
74            default:
75                return false;
76        }
77    }
78
79}
80