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