137748cd8SNickeau<?php 237748cd8SNickeau 337748cd8SNickeau 437748cd8SNickeau// must be run within Dokuwiki 537748cd8SNickeauuse ComboStrap\PluginUtility; 6*4cadd4f8SNickeauuse ComboStrap\PageEdit; 737748cd8SNickeau 837748cd8SNickeauif (!defined('DOKU_INC')) die(); 937748cd8SNickeau 1037748cd8SNickeau/** 1137748cd8SNickeau * Class syntax_plugin_combo_itext 1237748cd8SNickeau * Setting text attributes on words 1337748cd8SNickeau * 1437748cd8SNickeau */ 1537748cd8SNickeauclass syntax_plugin_combo_comment extends DokuWiki_Syntax_Plugin 1637748cd8SNickeau{ 1737748cd8SNickeau 1837748cd8SNickeau const TAG = "comment"; 1937748cd8SNickeau 2037748cd8SNickeau /** 2137748cd8SNickeau * If yes, the comment are in the rendering 2237748cd8SNickeau */ 2337748cd8SNickeau const CONF_OUTPUT_COMMENT = "outputComment"; 2437748cd8SNickeau const CANONICAL = "comment"; 2537748cd8SNickeau 26*4cadd4f8SNickeau private static function shouldPrint($content): bool 27*4cadd4f8SNickeau { 28*4cadd4f8SNickeau /** 29*4cadd4f8SNickeau * {@link PluginUtility::startSection()} } 30*4cadd4f8SNickeau * section edit added at {@link action_plugin_combo_headingpostprocessing} 31*4cadd4f8SNickeau * if there is no heading at all 32*4cadd4f8SNickeau */ 33*4cadd4f8SNickeau $normalizedContent = trim($content); 34*4cadd4f8SNickeau if (strpos($normalizedContent, PageEdit::SEC_EDIT_PREFIX)===0){ 35*4cadd4f8SNickeau return true; 36*4cadd4f8SNickeau } 37*4cadd4f8SNickeau $confValue = PluginUtility::getConfValue(self::CONF_OUTPUT_COMMENT, 0); 38*4cadd4f8SNickeau if ($confValue === 1) { 39*4cadd4f8SNickeau return true; 40*4cadd4f8SNickeau } 41*4cadd4f8SNickeau return false; 42*4cadd4f8SNickeau } 43*4cadd4f8SNickeau 4437748cd8SNickeau /** 4537748cd8SNickeau * Syntax Type. 4637748cd8SNickeau * 4737748cd8SNickeau * Needs to return one of the mode types defined in {@link $PARSER_MODES} in parser.php 4837748cd8SNickeau * @see DokuWiki_Syntax_Plugin::getType() 4937748cd8SNickeau */ 5037748cd8SNickeau function getType() 5137748cd8SNickeau { 5237748cd8SNickeau return 'formatting'; 5337748cd8SNickeau } 5437748cd8SNickeau 5537748cd8SNickeau /** 5637748cd8SNickeau * How Dokuwiki will add P element 5737748cd8SNickeau * 5837748cd8SNickeau * * 'normal' - The plugin can be used inside paragraphs 5937748cd8SNickeau * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 6037748cd8SNickeau * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 6137748cd8SNickeau * 6237748cd8SNickeau * @see DokuWiki_Syntax_Plugin::getPType() 6337748cd8SNickeau */ 6437748cd8SNickeau function getPType() 6537748cd8SNickeau { 6637748cd8SNickeau return 'normal'; 6737748cd8SNickeau } 6837748cd8SNickeau 6937748cd8SNickeau /** 7037748cd8SNickeau * @return array 7137748cd8SNickeau * Allow which kind of plugin inside 7237748cd8SNickeau * 7337748cd8SNickeau * No one of array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs') 7437748cd8SNickeau * because we manage self the content and we call self the parser 7537748cd8SNickeau * 7637748cd8SNickeau * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php 7737748cd8SNickeau */ 7837748cd8SNickeau function getAllowedTypes() 7937748cd8SNickeau { 8037748cd8SNickeau return array(); 8137748cd8SNickeau } 8237748cd8SNickeau 8337748cd8SNickeau 8437748cd8SNickeau function getSort() 8537748cd8SNickeau { 8637748cd8SNickeau return 201; 8737748cd8SNickeau } 8837748cd8SNickeau 8937748cd8SNickeau 9037748cd8SNickeau function connectTo($mode) 9137748cd8SNickeau { 9237748cd8SNickeau 9337748cd8SNickeau 9437748cd8SNickeau $this->Lexer->addEntryPattern("<!--", $mode, PluginUtility::getModeFromTag($this->getPluginComponent())); 9537748cd8SNickeau 9637748cd8SNickeau } 9737748cd8SNickeau 9837748cd8SNickeau 9937748cd8SNickeau function postConnect() 10037748cd8SNickeau { 10137748cd8SNickeau 10237748cd8SNickeau $this->Lexer->addExitPattern("-->", PluginUtility::getModeFromTag($this->getPluginComponent())); 10337748cd8SNickeau 10437748cd8SNickeau 10537748cd8SNickeau } 10637748cd8SNickeau 10737748cd8SNickeau function handle($match, $state, $pos, Doku_Handler $handler) 10837748cd8SNickeau { 10937748cd8SNickeau 11037748cd8SNickeau switch ($state) { 11137748cd8SNickeau 11237748cd8SNickeau case DOKU_LEXER_ENTER : 11337748cd8SNickeau case DOKU_LEXER_EXIT : 11437748cd8SNickeau return array( 11537748cd8SNickeau PluginUtility::STATE => $state 11637748cd8SNickeau ); 11737748cd8SNickeau 11837748cd8SNickeau case DOKU_LEXER_UNMATCHED : 11937748cd8SNickeau return PluginUtility::handleAndReturnUnmatchedData(self::TAG, $match, $handler); 12037748cd8SNickeau 12137748cd8SNickeau } 12237748cd8SNickeau return array(); 12337748cd8SNickeau 12437748cd8SNickeau } 12537748cd8SNickeau 12637748cd8SNickeau /** 12737748cd8SNickeau * Render the output 12837748cd8SNickeau * @param string $format 12937748cd8SNickeau * @param Doku_Renderer $renderer 13037748cd8SNickeau * @param array $data - what the function handle() return'ed 13137748cd8SNickeau * @return boolean - rendered correctly? (however, returned value is not used at the moment) 13237748cd8SNickeau * @see DokuWiki_Syntax_Plugin::render() 13337748cd8SNickeau * 13437748cd8SNickeau * 13537748cd8SNickeau */ 136*4cadd4f8SNickeau function render($format, Doku_Renderer $renderer, $data): bool 13737748cd8SNickeau { 138*4cadd4f8SNickeau 139*4cadd4f8SNickeau $print = self::shouldPrint($data[PluginUtility::PAYLOAD]); 140*4cadd4f8SNickeau 141*4cadd4f8SNickeau if ($format === "xhtml" && $print) { 14237748cd8SNickeau if ($data[PluginUtility::STATE] === DOKU_LEXER_UNMATCHED) { 14337748cd8SNickeau $renderer->doc .= "<!--" . PluginUtility::renderUnmatched($data) . "-->"; 14437748cd8SNickeau } 14537748cd8SNickeau } 14637748cd8SNickeau // unsupported $mode 14737748cd8SNickeau return false; 14837748cd8SNickeau 14937748cd8SNickeau } 15037748cd8SNickeau 15137748cd8SNickeau 15237748cd8SNickeau} 15337748cd8SNickeau 154