1<?php 2 3 4use ComboStrap\HeaderUtility; 5use ComboStrap\PluginUtility; 6use ComboStrap\StringUtility; 7use ComboStrap\Tag; 8use ComboStrap\TagAttributes; 9 10require_once(__DIR__ . '/../class/HeaderUtility.php'); 11 12if (!defined('DOKU_INC')) die(); 13 14 15class syntax_plugin_combo_header extends DokuWiki_Syntax_Plugin 16{ 17 18 19 const TAG = "header"; 20 21 function getType() 22 { 23 return 'formatting'; 24 } 25 26 /** 27 * How Dokuwiki will add P element 28 * 29 * * 'normal' - The plugin can be used inside paragraphs (inline) 30 * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 31 * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 32 * 33 * @see DokuWiki_Syntax_Plugin::getPType() 34 */ 35 function getPType() 36 { 37 return 'block'; 38 } 39 40 function getAllowedTypes() 41 { 42 return array('substition', 'formatting', 'disabled'); 43 } 44 45 function getSort() 46 { 47 return 201; 48 } 49 50 51 function connectTo($mode) 52 { 53 54 $this->Lexer->addEntryPattern(PluginUtility::getContainerTagPattern(HeaderUtility::HEADER), $mode, PluginUtility::getModeForComponent($this->getPluginComponent())); 55 } 56 57 public function postConnect() 58 { 59 $this->Lexer->addExitPattern('</' . HeaderUtility::HEADER . '>', PluginUtility::getModeForComponent($this->getPluginComponent())); 60 } 61 62 function handle($match, $state, $pos, Doku_Handler $handler) 63 { 64 65 switch ($state) { 66 67 case DOKU_LEXER_ENTER: 68 $tagAttributes = PluginUtility::getTagAttributes($match); 69 $tag = new Tag(HeaderUtility::HEADER, $tagAttributes, $state, $handler); 70 $parent = $tag->getParent(); 71 $parentName = ""; 72 if ($parent != null) { 73 $parentName = $parent->getName(); 74 } 75 return array( 76 PluginUtility::STATE => $state, 77 PluginUtility::ATTRIBUTES => $tagAttributes, 78 PluginUtility::CONTEXT => $parentName 79 ); 80 81 case DOKU_LEXER_UNMATCHED : 82 return array( 83 PluginUtility::STATE => $state, 84 PluginUtility::PAYLOAD => $match); 85 86 case DOKU_LEXER_EXIT : 87 return array( 88 PluginUtility::STATE => $state 89 ); 90 91 92 } 93 return array(); 94 95 } 96 97 /** 98 * Render the output 99 * @param string $format 100 * @param Doku_Renderer $renderer 101 * @param array $data - what the function handle() return'ed 102 * @return boolean - rendered correctly? (however, returned value is not used at the moment) 103 * @see DokuWiki_Syntax_Plugin::render() 104 * 105 * 106 */ 107 function render($format, Doku_Renderer $renderer, $data) 108 { 109 110 if ($format == 'xhtml') { 111 112 /** @var Doku_Renderer_xhtml $renderer */ 113 $state = $data[PluginUtility::STATE]; 114 switch ($state) { 115 116 case DOKU_LEXER_ENTER: 117 $parent = $data[PluginUtility::CONTEXT]; 118 switch ($parent) { 119 case syntax_plugin_combo_blockquote::TAG: 120 case syntax_plugin_combo_card::TAG: 121 default: 122 $tagAttributes = TagAttributes::createFromCallStackArray($data[PluginUtility::ATTRIBUTES]); 123 $tagAttributes->addClassName("card-header"); 124 $renderer->doc .= $tagAttributes->toHtmlEnterTag("div"); 125 break; 126 } 127 break; 128 129 case DOKU_LEXER_UNMATCHED : 130 $renderer->doc .= PluginUtility::renderUnmatched($data); 131 break; 132 133 case DOKU_LEXER_EXIT: 134 $renderer->doc .= "</div>". DOKU_LF; 135 break; 136 137 138 } 139 } 140 // unsupported $mode 141 return false; 142 } 143 144 145} 146 147