1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau 4*04fd306cSNickeauuse ComboStrap\DateTag; 5*04fd306cSNickeauuse ComboStrap\PipelineTag; 6*04fd306cSNickeauuse ComboStrap\PluginUtility; 7*04fd306cSNickeauuse ComboStrap\PrismTags; 8*04fd306cSNickeauuse ComboStrap\Tag\MermaidTag; 9*04fd306cSNickeauuse ComboStrap\XmlTagProcessing; 10*04fd306cSNickeau 11*04fd306cSNickeau 12*04fd306cSNickeau/** 13*04fd306cSNickeau * 14*04fd306cSNickeau * 15*04fd306cSNickeau */ 16*04fd306cSNickeauclass syntax_plugin_combo_xmlprotectedtag extends DokuWiki_Syntax_Plugin 17*04fd306cSNickeau{ 18*04fd306cSNickeau 19*04fd306cSNickeau 20*04fd306cSNickeau private function getTags(): array 21*04fd306cSNickeau { 22*04fd306cSNickeau $tags = self::TAGS; 23*04fd306cSNickeau if ($this->getConf(PrismTags::CONF_FILE_ENABLE)) { 24*04fd306cSNickeau $tags[] = PrismTags::FILE_TAG; 25*04fd306cSNickeau } 26*04fd306cSNickeau return $tags; 27*04fd306cSNickeau } 28*04fd306cSNickeau 29*04fd306cSNickeau function getType(): string 30*04fd306cSNickeau { 31*04fd306cSNickeau /** 32*04fd306cSNickeau * You can't write in a code block 33*04fd306cSNickeau */ 34*04fd306cSNickeau return 'protected'; 35*04fd306cSNickeau } 36*04fd306cSNickeau 37*04fd306cSNickeau /** 38*04fd306cSNickeau * How DokuWiki will add P element 39*04fd306cSNickeau * 40*04fd306cSNickeau * * 'normal' - The plugin can be used inside paragraphs 41*04fd306cSNickeau * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 42*04fd306cSNickeau * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 43*04fd306cSNickeau * 44*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::getPType() 45*04fd306cSNickeau */ 46*04fd306cSNickeau function getPType(): string 47*04fd306cSNickeau { 48*04fd306cSNickeau return 'block'; 49*04fd306cSNickeau } 50*04fd306cSNickeau 51*04fd306cSNickeau /** 52*04fd306cSNickeau * @return array 53*04fd306cSNickeau * Allow which kind of plugin inside 54*04fd306cSNickeau * 55*04fd306cSNickeau * No one of array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs') 56*04fd306cSNickeau * because we manage self the content and we call self the parser 57*04fd306cSNickeau * 58*04fd306cSNickeau * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php 59*04fd306cSNickeau */ 60*04fd306cSNickeau function getAllowedTypes(): array 61*04fd306cSNickeau { 62*04fd306cSNickeau return array(); 63*04fd306cSNickeau } 64*04fd306cSNickeau 65*04fd306cSNickeau function getSort(): int 66*04fd306cSNickeau { 67*04fd306cSNickeau /** 68*04fd306cSNickeau * Should be less than the code syntax plugin 69*04fd306cSNickeau * which is 200 70*04fd306cSNickeau **/ 71*04fd306cSNickeau return 199; 72*04fd306cSNickeau } 73*04fd306cSNickeau 74*04fd306cSNickeau const TAGS = [ 75*04fd306cSNickeau PrismTags::CONSOLE_TAG, 76*04fd306cSNickeau PipelineTag::TAG, // protected inline deprecated 77*04fd306cSNickeau DateTag::TAG, // protected inline deprecated 78*04fd306cSNickeau MermaidTag::MARKUP_SEQUENCE_DIAGRAM, 79*04fd306cSNickeau MermaidTag::MARKUP_CLASS_DIAGRAM, 80*04fd306cSNickeau MermaidTag::MARKUP_FLOWCHART, 81*04fd306cSNickeau MermaidTag::MARKUP_GANTT, 82*04fd306cSNickeau MermaidTag::MARKUP_ERD, 83*04fd306cSNickeau MermaidTag::MARKUP_JOURNEY, 84*04fd306cSNickeau MermaidTag::MARKUP_PIECHART, 85*04fd306cSNickeau MermaidTag::MARKUP_STATE_DIAGRAM, 86*04fd306cSNickeau ]; 87*04fd306cSNickeau 88*04fd306cSNickeau function connectTo($mode) 89*04fd306cSNickeau { 90*04fd306cSNickeau 91*04fd306cSNickeau 92*04fd306cSNickeau foreach ($this->getTags() as $tag) { 93*04fd306cSNickeau $pattern = XmlTagProcessing::getContainerTagPattern($tag); 94*04fd306cSNickeau $this->Lexer->addEntryPattern($pattern, $mode, PluginUtility::getModeFromTag($this->getPluginComponent())); 95*04fd306cSNickeau } 96*04fd306cSNickeau 97*04fd306cSNickeau 98*04fd306cSNickeau } 99*04fd306cSNickeau 100*04fd306cSNickeau 101*04fd306cSNickeau function postConnect() 102*04fd306cSNickeau { 103*04fd306cSNickeau foreach ($this->getTags() as $tag) { 104*04fd306cSNickeau $this->Lexer->addExitPattern('</' . $tag . '>', PluginUtility::getModeFromTag($this->getPluginComponent())); 105*04fd306cSNickeau } 106*04fd306cSNickeau } 107*04fd306cSNickeau 108*04fd306cSNickeau /** 109*04fd306cSNickeau * 110*04fd306cSNickeau * The handle function goal is to parse the matched syntax through the pattern function 111*04fd306cSNickeau * and to return the result for use in the renderer 112*04fd306cSNickeau * This result is always cached until the page is modified. 113*04fd306cSNickeau * @param string $match 114*04fd306cSNickeau * @param int $state 115*04fd306cSNickeau * @param int $pos - byte position in the original source file 116*04fd306cSNickeau * @param Doku_Handler $handler 117*04fd306cSNickeau * @return array|bool 118*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::handle() 119*04fd306cSNickeau * 120*04fd306cSNickeau */ 121*04fd306cSNickeau function handle($match, $state, $pos, Doku_Handler $handler) 122*04fd306cSNickeau { 123*04fd306cSNickeau 124*04fd306cSNickeau return XmlTagProcessing::handleStatic($match, $state, $pos, $handler, $this); 125*04fd306cSNickeau 126*04fd306cSNickeau } 127*04fd306cSNickeau 128*04fd306cSNickeau /** 129*04fd306cSNickeau * Render the output 130*04fd306cSNickeau * @param string $format 131*04fd306cSNickeau * @param Doku_Renderer $renderer 132*04fd306cSNickeau * @param array $data - what the function handle() return'ed 133*04fd306cSNickeau * @return boolean - rendered correctly? (however, returned value is not used at the moment) 134*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::render() 135*04fd306cSNickeau * 136*04fd306cSNickeau */ 137*04fd306cSNickeau function render($format, Doku_Renderer $renderer, $data): bool 138*04fd306cSNickeau { 139*04fd306cSNickeau return XmlTagProcessing::renderStatic($format, $renderer, $data, $this); 140*04fd306cSNickeau } 141*04fd306cSNickeau 142*04fd306cSNickeau 143*04fd306cSNickeau} 144*04fd306cSNickeau 145