1 <?php
2 /**
3  * DokuWiki plugin PageTitle YouAreHere; Syntax component
4  * Hierarchical breadcrumbs
5  *
6  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
7  * @author     Satoshi Sahara <sahara.satoshi@gmail.com>
8  */
9 class syntax_plugin_pagetitle_youarehere 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 'block';
21     }
22 
23     /**
24      * Connect pattern to lexer
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] = '<!-- ?YOU_ARE_HERE ?-->';
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         global $ID;
54         return $data = [$state, $match, $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         list($state, $match, $id) = $data;
66 
67         // skip calls that belong to different pages (eg. title of included page)
68         if ($id !== $ID) return false;
69 
70         if ($format == 'metadata') {
71             $renderer->meta['plugin']['pagetitle']['youarehere'] =+ 1;
72 
73         } elseif ($format == 'xhtml') {
74             // load helper object
75             isset($helper) || $helper = $this->loadHelper($this->getPluginName());
76 
77             $renderer->doc .= DOKU_LF.$match.DOKU_LF; // html comment
78             $renderer->doc .= '<div class="youarehere">';
79             $renderer->doc .= $helper->html_youarehere(1); // start_depth = 1
80             $renderer->doc .= '</div>'.DOKU_LF;
81         }
82         return true;
83     }
84 
85 }
86