1 <?php
2 /**
3  * prespan Plugin: for output of text spans with preserved spaces
4  * Syntax:     <prespan>text</prespan> or ![text]!
5  *
6  * @author     LarsDW223
7  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
8  */
9 
10 if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
11 if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
12 require_once(DOKU_PLUGIN.'syntax.php');
13 
14 /**
15  * All DokuWiki plugins to extend the parser/rendering mechanism
16  * need to inherit from this class
17  */
18 class syntax_plugin_prespan extends DokuWiki_Syntax_Plugin {
19 
20     /**
21      * What kind of syntax are we?
22      */
23     function getType(){
24         return 'formatting';
25     }
26 
27     /**
28      * What about paragraphs? (optional)
29      */
30    function getPType(){
31        return 'normal';
32    }
33 
34     /**
35      * Where to sort in?
36      */
37     function getSort(){
38         return 195;
39     }
40 
41     /**
42      * Return allowed nested types.
43      */
44     function getAllowedTypes(){
45         return array('formatting', 'substition', 'disabled');
46     }
47 
48     /**
49      * Connect pattern to lexer
50      */
51     function connectTo($mode) {
52         $this->Lexer->addEntryPattern('<prespan>(?=.*</prespan>)', $mode, 'plugin_prespan');
53         $this->Lexer->addEntryPattern('\!\[(?=.*\]\!)', $mode, 'plugin_prespan');
54     }
55 
56     function postConnect() {
57         $this->Lexer->addExitPattern('</prespan>', 'plugin_prespan');
58         $this->Lexer->addExitPattern('\]\!', 'plugin_prespan');
59     }
60 
61     /**
62      * Handle the match
63      */
64     function handle($match, $state, $pos, Doku_Handler $handler) {
65         switch ($state) {
66           case DOKU_LEXER_ENTER :
67             break;
68           case DOKU_LEXER_MATCHED :
69             break;
70           case DOKU_LEXER_UNMATCHED :
71             break;
72           case DOKU_LEXER_EXIT :
73             break;
74           case DOKU_LEXER_SPECIAL :
75             break;
76         }
77         return array($match, $state);
78     }
79 
80     /**
81      * Create output
82      */
83     function render($mode, Doku_Renderer $renderer, $data) {
84         if($mode == 'xhtml'){
85             if ($data[1] == DOKU_LEXER_ENTER){
86                 $renderer->doc .= '<span class="prespan">';
87             } else if ($data[1] == DOKU_LEXER_UNMATCHED){
88                 $renderer->doc .= $renderer->_xmlEntities($data[0]);
89             } else if ($data[1] == DOKU_LEXER_EXIT){
90                 $renderer->doc .= '</span>';
91             }
92             return true;
93         }
94         return false;
95     }
96 }
97 
98 //Setup VIM: ex: et ts=4 enc=utf-8 :
99