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 Esther Brunner <esther@kaffeehaus.ch> 11 */ 12class syntax_plugin_bbcode_ulist extends SyntaxPlugin 13{ 14 /** @inheritdoc */ 15 public function getType() 16 { 17 return 'container'; 18 } 19 /** @inheritdoc */ 20 public function getPType() 21 { 22 return 'block'; 23 } 24 /** @inheritdoc */ 25 public function getAllowedTypes() 26 { 27 return ['formatting', 'substition', 'disabled', 'protected']; 28 } 29 /** @inheritdoc */ 30 public function getSort() 31 { 32 return 105; 33 } 34 /** @inheritdoc */ 35 public function connectTo($mode) 36 { 37 $this->Lexer->addEntryPattern('\[list\]\s*?\[\*\](?=.*?\x5B/list\x5D)', $mode, 'plugin_bbcode_ulist'); 38 } 39 /** @inheritdoc */ 40 public function postConnect() 41 { 42 $this->Lexer->addExitPattern('\[/list\]', 'plugin_bbcode_ulist'); 43 } 44 45 /** @inheritdoc */ 46 public function handle($match, $state, $pos, Handler $handler) 47 { 48 switch ($state) { 49 case DOKU_LEXER_ENTER: 50 case DOKU_LEXER_EXIT: 51 return [$state, '']; 52 case DOKU_LEXER_UNMATCHED: 53 return [$state, $match]; 54 } 55 return []; 56 } 57 58 /** @inheritdoc */ 59 public function render($format, Doku_Renderer $renderer, $data) 60 { 61 if ($format == 'xhtml') { 62 [$state, $match] = $data; 63 switch ($state) { 64 case DOKU_LEXER_ENTER: 65 $renderer->doc .= '<ul><li class="level1"><div class="li">'; 66 break; 67 68 case DOKU_LEXER_UNMATCHED: 69 $match = $renderer->_xmlEntities($match); 70 $renderer->doc .= str_replace('[*]', '</div></li><li class="level1"><div class="li">', $match); 71 break; 72 73 case DOKU_LEXER_EXIT: 74 $renderer->doc .= '</div></li></ul>'; 75 break; 76 } 77 return true; 78 } 79 return false; 80 } 81} 82