1<?php 2 3use dokuwiki\Extension\SyntaxPlugin; 4use dokuwiki\Parsing\Handler; 5 6/** 7 * BBCode plugin: allows BBCode markup familiar from forum software 8 * 9 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 10 * @author Luis Machuca Bezzaza <luis.machuca@gulix.cl> 11 */ 12class syntax_plugin_bbcode_versalitas extends SyntaxPlugin 13{ 14 /** @inheritdoc */ 15 public function getType() 16 { 17 return 'formatting'; 18 } 19 /** @inheritdoc */ 20 public function getAllowedTypes() 21 { 22 return ['formatting', 'substition', 'disabled']; 23 } 24 /** @inheritdoc */ 25 public function getSort() 26 { 27 return 105; 28 } 29 /** @inheritdoc */ 30 public function connectTo($mode) 31 { 32 $this->Lexer->addEntryPattern('\[c\](?=.*?\x5B/c\x5D)', $mode, 'plugin_bbcode_versalitas'); 33 } 34 /** @inheritdoc */ 35 public function postConnect() 36 { 37 $this->Lexer->addExitPattern('\[/c\]', 'plugin_bbcode_versalitas'); 38 } 39 40 /** @inheritdoc */ 41 public function handle($match, $state, $pos, Handler $handler) 42 { 43 switch ($state) { 44 case DOKU_LEXER_ENTER: 45 $match = substr($match, 3, -1); 46 return [$state, $match]; 47 48 case DOKU_LEXER_UNMATCHED: 49 return [$state, $match]; 50 51 case DOKU_LEXER_EXIT: 52 return [$state, '']; 53 } 54 return []; 55 } 56 57 /** @inheritdoc */ 58 public function render($format, Doku_Renderer $renderer, $data) 59 { 60 if ($format == 'xhtml') { 61 [$state, $match] = $data; 62 switch ($state) { 63 case DOKU_LEXER_ENTER: 64 $renderer->doc .= '<span style="font-variant:small-caps;">'; 65 break; 66 67 case DOKU_LEXER_UNMATCHED: 68 $renderer->doc .= $renderer->_xmlEntities($match); 69 break; 70 71 case DOKU_LEXER_EXIT: 72 $renderer->doc .= '</span>'; 73 break; 74 } 75 return true; 76 } 77 return false; 78 } 79} 80