137748cd8SNickeau<?php 237748cd8SNickeau 337748cd8SNickeau 437748cd8SNickeau// must be run within Dokuwiki 504fd306cSNickeauuse ComboStrap\EditButtonManager; 637748cd8SNickeauuse ComboStrap\PluginUtility; 704fd306cSNickeauuse ComboStrap\EditButton; 804fd306cSNickeauuse ComboStrap\Site; 904fd306cSNickeauuse ComboStrap\SiteConfig; 1037748cd8SNickeau 1137748cd8SNickeauif (!defined('DOKU_INC')) die(); 1237748cd8SNickeau 1337748cd8SNickeau/** 1437748cd8SNickeau * Class syntax_plugin_combo_itext 1537748cd8SNickeau * Setting text attributes on words 1637748cd8SNickeau * 1737748cd8SNickeau */ 1837748cd8SNickeauclass syntax_plugin_combo_comment extends DokuWiki_Syntax_Plugin 1937748cd8SNickeau{ 2037748cd8SNickeau 2137748cd8SNickeau const TAG = "comment"; 2237748cd8SNickeau 2337748cd8SNickeau /** 2437748cd8SNickeau * If yes, the comment are in the rendering 2537748cd8SNickeau */ 2637748cd8SNickeau const CONF_OUTPUT_COMMENT = "outputComment"; 2737748cd8SNickeau const CANONICAL = "comment"; 2837748cd8SNickeau 294cadd4f8SNickeau private static function shouldPrint($content): bool 304cadd4f8SNickeau { 314cadd4f8SNickeau /** 3204fd306cSNickeau * {@link EditButtonManager::createAndAddEditButtonToStack()} } 3304fd306cSNickeau * section edit added at {@link action_plugin_combo_instructionspostprocessing} 344cadd4f8SNickeau * if there is no heading at all 354cadd4f8SNickeau */ 364cadd4f8SNickeau $normalizedContent = trim($content); 3704fd306cSNickeau if (strpos($normalizedContent, EditButton::EDIT_BUTTON_PREFIX) === 0) { 384cadd4f8SNickeau return true; 394cadd4f8SNickeau } 4004fd306cSNickeau $confValue = SiteConfig::getConfValue(self::CONF_OUTPUT_COMMENT, 0); 414cadd4f8SNickeau if ($confValue === 1) { 424cadd4f8SNickeau return true; 434cadd4f8SNickeau } 444cadd4f8SNickeau return false; 454cadd4f8SNickeau } 464cadd4f8SNickeau 4737748cd8SNickeau /** 4837748cd8SNickeau * Syntax Type. 4937748cd8SNickeau * 5037748cd8SNickeau * Needs to return one of the mode types defined in {@link $PARSER_MODES} in parser.php 5137748cd8SNickeau * @see DokuWiki_Syntax_Plugin::getType() 5237748cd8SNickeau */ 5337748cd8SNickeau function getType() 5437748cd8SNickeau { 5537748cd8SNickeau return 'formatting'; 5637748cd8SNickeau } 5737748cd8SNickeau 5837748cd8SNickeau /** 5937748cd8SNickeau * How Dokuwiki will add P element 6037748cd8SNickeau * 6137748cd8SNickeau * * 'normal' - The plugin can be used inside paragraphs 6237748cd8SNickeau * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 6337748cd8SNickeau * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 6437748cd8SNickeau * 6537748cd8SNickeau * @see DokuWiki_Syntax_Plugin::getPType() 6637748cd8SNickeau */ 6737748cd8SNickeau function getPType() 6837748cd8SNickeau { 6937748cd8SNickeau return 'normal'; 7037748cd8SNickeau } 7137748cd8SNickeau 7237748cd8SNickeau /** 7337748cd8SNickeau * @return array 7437748cd8SNickeau * Allow which kind of plugin inside 7537748cd8SNickeau * 7637748cd8SNickeau * No one of array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs') 7737748cd8SNickeau * because we manage self the content and we call self the parser 7837748cd8SNickeau * 7937748cd8SNickeau * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php 8037748cd8SNickeau */ 8137748cd8SNickeau function getAllowedTypes() 8237748cd8SNickeau { 8337748cd8SNickeau return array(); 8437748cd8SNickeau } 8537748cd8SNickeau 8637748cd8SNickeau 8737748cd8SNickeau function getSort() 8837748cd8SNickeau { 8937748cd8SNickeau return 201; 9037748cd8SNickeau } 9137748cd8SNickeau 9237748cd8SNickeau 9337748cd8SNickeau function connectTo($mode) 9437748cd8SNickeau { 9537748cd8SNickeau 9637748cd8SNickeau 9737748cd8SNickeau $this->Lexer->addEntryPattern("<!--", $mode, PluginUtility::getModeFromTag($this->getPluginComponent())); 9837748cd8SNickeau 9937748cd8SNickeau } 10037748cd8SNickeau 10137748cd8SNickeau 10237748cd8SNickeau function postConnect() 10337748cd8SNickeau { 10437748cd8SNickeau 10537748cd8SNickeau $this->Lexer->addExitPattern("-->", PluginUtility::getModeFromTag($this->getPluginComponent())); 10637748cd8SNickeau 10737748cd8SNickeau 10837748cd8SNickeau } 10937748cd8SNickeau 11037748cd8SNickeau function handle($match, $state, $pos, Doku_Handler $handler) 11137748cd8SNickeau { 11237748cd8SNickeau 11337748cd8SNickeau switch ($state) { 11437748cd8SNickeau 11537748cd8SNickeau case DOKU_LEXER_ENTER : 11637748cd8SNickeau case DOKU_LEXER_EXIT : 11737748cd8SNickeau return array( 11837748cd8SNickeau PluginUtility::STATE => $state 11937748cd8SNickeau ); 12037748cd8SNickeau 12137748cd8SNickeau case DOKU_LEXER_UNMATCHED : 12237748cd8SNickeau return PluginUtility::handleAndReturnUnmatchedData(self::TAG, $match, $handler); 12337748cd8SNickeau 12437748cd8SNickeau } 12537748cd8SNickeau return array(); 12637748cd8SNickeau 12737748cd8SNickeau } 12837748cd8SNickeau 12937748cd8SNickeau /** 13037748cd8SNickeau * Render the output 13137748cd8SNickeau * @param string $format 13237748cd8SNickeau * @param Doku_Renderer $renderer 13337748cd8SNickeau * @param array $data - what the function handle() return'ed 13437748cd8SNickeau * @return boolean - rendered correctly? (however, returned value is not used at the moment) 13537748cd8SNickeau * @see DokuWiki_Syntax_Plugin::render() 13637748cd8SNickeau * 13737748cd8SNickeau * 13837748cd8SNickeau */ 1394cadd4f8SNickeau function render($format, Doku_Renderer $renderer, $data): bool 14037748cd8SNickeau { 1414cadd4f8SNickeau 142*70bbd7f1Sgerardnico $content = $data[PluginUtility::PAYLOAD] ?? null; 143*70bbd7f1Sgerardnico $print = self::shouldPrint($content); 1444cadd4f8SNickeau 1454cadd4f8SNickeau if ($format === "xhtml" && $print) { 14637748cd8SNickeau if ($data[PluginUtility::STATE] === DOKU_LEXER_UNMATCHED) { 14737748cd8SNickeau $renderer->doc .= "<!--" . PluginUtility::renderUnmatched($data) . "-->"; 14837748cd8SNickeau } 14937748cd8SNickeau } 15037748cd8SNickeau // unsupported $mode 15137748cd8SNickeau return false; 15237748cd8SNickeau 15337748cd8SNickeau } 15437748cd8SNickeau 15537748cd8SNickeau 15637748cd8SNickeau} 15737748cd8SNickeau 158