1*04fd306cSNickeau<?php 2*04fd306cSNickeau/** 3*04fd306cSNickeau * DokuWiki Syntax Plugin Combostrap. 4*04fd306cSNickeau * 5*04fd306cSNickeau */ 6*04fd306cSNickeau 7*04fd306cSNickeauuse ComboStrap\ButtonTag; 8*04fd306cSNickeauuse ComboStrap\DateTag; 9*04fd306cSNickeauuse ComboStrap\DropDownTag; 10*04fd306cSNickeauuse ComboStrap\IconTag; 11*04fd306cSNickeauuse ComboStrap\NoteTag; 12*04fd306cSNickeauuse ComboStrap\PermalinkTag; 13*04fd306cSNickeauuse ComboStrap\PipelineTag; 14*04fd306cSNickeauuse ComboStrap\PluginUtility; 15*04fd306cSNickeauuse ComboStrap\Tag\FollowTag; 16*04fd306cSNickeauuse ComboStrap\Tag\ShareTag; 17*04fd306cSNickeauuse ComboStrap\XmlTagProcessing; 18*04fd306cSNickeau 19*04fd306cSNickeau 20*04fd306cSNickeaurequire_once(__DIR__ . '/../vendor/autoload.php'); 21*04fd306cSNickeau 22*04fd306cSNickeau 23*04fd306cSNickeau/** 24*04fd306cSNickeau * All DokuWiki plugins to extend the parser/rendering mechanism 25*04fd306cSNickeau * need to inherit from this class 26*04fd306cSNickeau * 27*04fd306cSNickeau * The name of the class must follow a pattern (don't change it) 28*04fd306cSNickeau * ie: 29*04fd306cSNickeau * syntax_plugin_PluginName_ComponentName 30*04fd306cSNickeau * 31*04fd306cSNickeau * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 32*04fd306cSNickeau * !!!!!!!!!!! The component name must be the name of the php file !!! 33*04fd306cSNickeau * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 34*04fd306cSNickeau * 35*04fd306cSNickeau */ 36*04fd306cSNickeauclass syntax_plugin_combo_xmlinlinetag extends DokuWiki_Syntax_Plugin 37*04fd306cSNickeau{ 38*04fd306cSNickeau 39*04fd306cSNickeau /** 40*04fd306cSNickeau * @return array inline non-protected 41*04fd306cSNickeau */ 42*04fd306cSNickeau private static function getInlineTags(): array 43*04fd306cSNickeau { 44*04fd306cSNickeau $array = ButtonTag::getTags(); 45*04fd306cSNickeau $array[] = DropDownTag::TAG; 46*04fd306cSNickeau $array[] = NoteTag::TAG_INOTE; 47*04fd306cSNickeau $array[] = PermalinkTag::TAG; 48*04fd306cSNickeau $array[] = DateTag::TAG; 49*04fd306cSNickeau $array[] = IconTag::TAG; 50*04fd306cSNickeau $array[] = PipelineTag::TAG; 51*04fd306cSNickeau $array[] = FollowTag::MARKUP; 52*04fd306cSNickeau $array[] = ShareTag::MARKUP; 53*04fd306cSNickeau return $array; 54*04fd306cSNickeau } 55*04fd306cSNickeau 56*04fd306cSNickeau 57*04fd306cSNickeau /** 58*04fd306cSNickeau * Syntax Type. 59*04fd306cSNickeau * 60*04fd306cSNickeau * Needs to return one of the mode types defined in $PARSER_MODES in parser.php 61*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::getType() 62*04fd306cSNickeau */ 63*04fd306cSNickeau function getType(): string 64*04fd306cSNickeau { 65*04fd306cSNickeau return 'formatting'; 66*04fd306cSNickeau } 67*04fd306cSNickeau 68*04fd306cSNickeau /** 69*04fd306cSNickeau * @return array 70*04fd306cSNickeau * Allow which kind of plugin inside 71*04fd306cSNickeau * 72*04fd306cSNickeau * No one of array('container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs') 73*04fd306cSNickeau * because we manage self the content and we call self the parser 74*04fd306cSNickeau */ 75*04fd306cSNickeau public function getAllowedTypes(): array 76*04fd306cSNickeau { 77*04fd306cSNickeau return array('container', 'formatting', 'substition', 'protected', 'disabled'); 78*04fd306cSNickeau } 79*04fd306cSNickeau 80*04fd306cSNickeau public function accepts($mode): bool 81*04fd306cSNickeau { 82*04fd306cSNickeau 83*04fd306cSNickeau return syntax_plugin_combo_preformatted::disablePreformatted($mode); 84*04fd306cSNickeau 85*04fd306cSNickeau } 86*04fd306cSNickeau 87*04fd306cSNickeau /** 88*04fd306cSNickeau * How Dokuwiki will add P element 89*04fd306cSNickeau * 90*04fd306cSNickeau * * 'normal' - The plugin can be used inside paragraphs 91*04fd306cSNickeau * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 92*04fd306cSNickeau * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 93*04fd306cSNickeau * 94*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::getPType() 95*04fd306cSNickeau */ 96*04fd306cSNickeau function getPType(): string 97*04fd306cSNickeau { 98*04fd306cSNickeau return 'normal'; 99*04fd306cSNickeau } 100*04fd306cSNickeau 101*04fd306cSNickeau /** 102*04fd306cSNickeau * @see Doku_Parser_Mode::getSort() 103*04fd306cSNickeau * the mode with the lowest sort number will win out 104*04fd306cSNickeau * the lowest in the tree must have the lowest sort number 105*04fd306cSNickeau * No idea why it must be low but inside a teaser, it will work 106*04fd306cSNickeau * https://www.dokuwiki.org/devel:parser#order_of_adding_modes_important 107*04fd306cSNickeau */ 108*04fd306cSNickeau function getSort(): int 109*04fd306cSNickeau { 110*04fd306cSNickeau return 10; 111*04fd306cSNickeau } 112*04fd306cSNickeau 113*04fd306cSNickeau /** 114*04fd306cSNickeau * Create a pattern that will called this plugin 115*04fd306cSNickeau * 116*04fd306cSNickeau * @param string $mode 117*04fd306cSNickeau * @see Doku_Parser_Mode::connectTo() 118*04fd306cSNickeau */ 119*04fd306cSNickeau function connectTo($mode) 120*04fd306cSNickeau { 121*04fd306cSNickeau 122*04fd306cSNickeau foreach (self::getInlineTags() as $tag) { 123*04fd306cSNickeau 124*04fd306cSNickeau $pattern = XmlTagProcessing::getContainerTagPattern($tag); 125*04fd306cSNickeau $this->Lexer->addEntryPattern($pattern, $mode, 'plugin_' . PluginUtility::PLUGIN_BASE_NAME . '_' . $this->getPluginComponent()); 126*04fd306cSNickeau 127*04fd306cSNickeau } 128*04fd306cSNickeau 129*04fd306cSNickeau } 130*04fd306cSNickeau 131*04fd306cSNickeau public function postConnect() 132*04fd306cSNickeau { 133*04fd306cSNickeau 134*04fd306cSNickeau foreach (self::getInlineTags() as $tag) { 135*04fd306cSNickeau $this->Lexer->addExitPattern('</' . $tag . '>', 'plugin_' . PluginUtility::PLUGIN_BASE_NAME . '_' . $this->getPluginComponent()); 136*04fd306cSNickeau } 137*04fd306cSNickeau 138*04fd306cSNickeau } 139*04fd306cSNickeau 140*04fd306cSNickeau /** 141*04fd306cSNickeau * 142*04fd306cSNickeau * The handle function goal is to parse the matched syntax through the pattern function 143*04fd306cSNickeau * and to return the result for use in the renderer 144*04fd306cSNickeau * This result is always cached until the page is modified. 145*04fd306cSNickeau * @param string $match 146*04fd306cSNickeau * @param int $state 147*04fd306cSNickeau * @param int $pos 148*04fd306cSNickeau * @param Doku_Handler $handler 149*04fd306cSNickeau * @return array|bool 150*04fd306cSNickeau * @throws Exception 151*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::handle() 152*04fd306cSNickeau * 153*04fd306cSNickeau */ 154*04fd306cSNickeau function handle($match, $state, $pos, Doku_Handler $handler) 155*04fd306cSNickeau { 156*04fd306cSNickeau 157*04fd306cSNickeau return XmlTagProcessing::handleStatic($match, $state, $pos, $handler, $this); 158*04fd306cSNickeau 159*04fd306cSNickeau } 160*04fd306cSNickeau 161*04fd306cSNickeau /** 162*04fd306cSNickeau * Render the output 163*04fd306cSNickeau * @param string $format 164*04fd306cSNickeau * @param Doku_Renderer $renderer 165*04fd306cSNickeau * @param array $data - what the function handle() return'ed 166*04fd306cSNickeau * @return boolean - rendered correctly? (however, returned value is not used at the moment) 167*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::render() 168*04fd306cSNickeau * 169*04fd306cSNickeau * 170*04fd306cSNickeau */ 171*04fd306cSNickeau function render($format, Doku_Renderer $renderer, $data): bool 172*04fd306cSNickeau { 173*04fd306cSNickeau 174*04fd306cSNickeau return XmlTagProcessing::renderStatic($format, $renderer, $data, $this); 175*04fd306cSNickeau 176*04fd306cSNickeau } 177*04fd306cSNickeau 178*04fd306cSNickeau 179*04fd306cSNickeau} 180