1531e725cSNickeau<?php 2531e725cSNickeau 3531e725cSNickeau 4531e725cSNickeau// must be run within Dokuwiki 5531e725cSNickeauuse ComboStrap\PluginUtility; 6531e725cSNickeauuse ComboStrap\TagAttributes; 7*04fd306cSNickeauuse ComboStrap\XmlTagProcessing; 8531e725cSNickeau 9531e725cSNickeauif (!defined('DOKU_INC')) die(); 10531e725cSNickeau 11531e725cSNickeau/** 12531e725cSNickeau * Class syntax_plugin_combo_itext 13531e725cSNickeau * Setting text attributes on words 14531e725cSNickeau * 15531e725cSNickeau */ 16531e725cSNickeauclass syntax_plugin_combo_itext extends DokuWiki_Syntax_Plugin 17531e725cSNickeau{ 18531e725cSNickeau 19531e725cSNickeau const TAG = "itext"; 20531e725cSNickeau 21531e725cSNickeau /** 22531e725cSNickeau * Syntax Type. 23531e725cSNickeau * 24531e725cSNickeau * Needs to return one of the mode types defined in {@link $PARSER_MODES} in parser.php 25531e725cSNickeau * @see DokuWiki_Syntax_Plugin::getType() 26531e725cSNickeau */ 27531e725cSNickeau function getType() 28531e725cSNickeau { 29531e725cSNickeau return 'formatting'; 30531e725cSNickeau } 31531e725cSNickeau 32531e725cSNickeau /** 33531e725cSNickeau * How Dokuwiki will add P element 34531e725cSNickeau * 35531e725cSNickeau * * 'normal' - The plugin can be used inside paragraphs 36531e725cSNickeau * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 37531e725cSNickeau * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 38531e725cSNickeau * 39531e725cSNickeau * @see DokuWiki_Syntax_Plugin::getPType() 40531e725cSNickeau */ 41531e725cSNickeau function getPType() 42531e725cSNickeau { 43531e725cSNickeau return 'normal'; 44531e725cSNickeau } 45531e725cSNickeau 46531e725cSNickeau /** 47531e725cSNickeau * @return array 48531e725cSNickeau * Allow which kind of plugin inside 49531e725cSNickeau * 50531e725cSNickeau * No one of array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs') 51531e725cSNickeau * because we manage self the content and we call self the parser 52531e725cSNickeau * 53531e725cSNickeau * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php 54531e725cSNickeau */ 55531e725cSNickeau function getAllowedTypes() 56531e725cSNickeau { 5726a7e0f8Sgerardnico return array('formatting', 'substition', 'protected'); 58531e725cSNickeau } 59531e725cSNickeau 60531e725cSNickeau 61531e725cSNickeau function getSort() 62531e725cSNickeau { 63531e725cSNickeau return 201; 64531e725cSNickeau } 65531e725cSNickeau 66531e725cSNickeau 67531e725cSNickeau function connectTo($mode) 68531e725cSNickeau { 69531e725cSNickeau 70531e725cSNickeau 71*04fd306cSNickeau $pattern = XmlTagProcessing::getContainerTagPattern(self::TAG); 729337a630SNickeau $this->Lexer->addEntryPattern($pattern, $mode, PluginUtility::getModeFromTag($this->getPluginComponent())); 73531e725cSNickeau 74531e725cSNickeau } 75531e725cSNickeau 76531e725cSNickeau 77531e725cSNickeau function postConnect() 78531e725cSNickeau { 79531e725cSNickeau 809337a630SNickeau $this->Lexer->addExitPattern('</' . self::TAG . '>', PluginUtility::getModeFromTag($this->getPluginComponent())); 81531e725cSNickeau 82531e725cSNickeau 83531e725cSNickeau } 84531e725cSNickeau 85531e725cSNickeau function handle($match, $state, $pos, Doku_Handler $handler) 86531e725cSNickeau { 87531e725cSNickeau 88531e725cSNickeau switch ($state) { 89531e725cSNickeau 90531e725cSNickeau case DOKU_LEXER_ENTER : 91*04fd306cSNickeau $knownTypes = []; 92*04fd306cSNickeau $defaultAttributes = []; 93*04fd306cSNickeau $attributes = TagAttributes::createFromTagMatch($match, $defaultAttributes, $knownTypes); 94531e725cSNickeau 95531e725cSNickeau $callStackArray = $attributes->toCallStackArray(); 96531e725cSNickeau 97531e725cSNickeau return array( 98531e725cSNickeau PluginUtility::STATE => $state, 99531e725cSNickeau PluginUtility::ATTRIBUTES => $callStackArray 100531e725cSNickeau ); 101531e725cSNickeau 102531e725cSNickeau case DOKU_LEXER_UNMATCHED : 103531e725cSNickeau return PluginUtility::handleAndReturnUnmatchedData(self::TAG, $match, $handler); 104531e725cSNickeau 105531e725cSNickeau case DOKU_LEXER_EXIT : 106531e725cSNickeau 107531e725cSNickeau return array(PluginUtility::STATE => $state); 108531e725cSNickeau 109531e725cSNickeau 110531e725cSNickeau } 111531e725cSNickeau return array(); 112531e725cSNickeau 113531e725cSNickeau } 114531e725cSNickeau 115531e725cSNickeau /** 116531e725cSNickeau * Render the output 117531e725cSNickeau * @param string $format 118531e725cSNickeau * @param Doku_Renderer $renderer 119531e725cSNickeau * @param array $data - what the function handle() return'ed 120531e725cSNickeau * @return boolean - rendered correctly? (however, returned value is not used at the moment) 121531e725cSNickeau * @see DokuWiki_Syntax_Plugin::render() 122531e725cSNickeau * 123531e725cSNickeau * 124531e725cSNickeau */ 125*04fd306cSNickeau function render($format, Doku_Renderer $renderer, $data): bool 126531e725cSNickeau { 127531e725cSNickeau if ($format == 'xhtml') { 128531e725cSNickeau 129531e725cSNickeau /** @var Doku_Renderer_xhtml $renderer */ 130531e725cSNickeau $state = $data[PluginUtility::STATE]; 131531e725cSNickeau switch ($state) { 132531e725cSNickeau case DOKU_LEXER_ENTER : 133531e725cSNickeau $tagAttributes = TagAttributes::createFromCallStackArray($data[PluginUtility::ATTRIBUTES]); 134*04fd306cSNickeau $toHtmlEnterTag = $tagAttributes->toHtmlEnterTag("span"); 135*04fd306cSNickeau $renderer->doc .= $toHtmlEnterTag; 136531e725cSNickeau break; 137531e725cSNickeau case DOKU_LEXER_UNMATCHED : 138531e725cSNickeau $renderer->doc .= PluginUtility::renderUnmatched($data); 139531e725cSNickeau break; 140531e725cSNickeau case DOKU_LEXER_EXIT : 141531e725cSNickeau $renderer->doc .= "</span>"; 142531e725cSNickeau break; 143531e725cSNickeau } 144531e725cSNickeau return true; 145531e725cSNickeau } 146531e725cSNickeau 147531e725cSNickeau // unsupported $mode 148531e725cSNickeau return false; 149531e725cSNickeau } 150531e725cSNickeau 151531e725cSNickeau 152531e725cSNickeau} 153531e725cSNickeau 154