1fc2e1131SJaap de Haan<?php 2fc2e1131SJaap de Haan 3*a494ddccSgithub-actions[bot]use dokuwiki\Extension\SyntaxPlugin; 4*a494ddccSgithub-actions[bot] 5fc2e1131SJaap de Haan/** 6fc2e1131SJaap de Haan * @license See LICENSE file 7fc2e1131SJaap de Haan */ 8fc2e1131SJaap de Haan// See help: https://www.dokuwiki.org/devel:syntax_plugins 9242f4056SJaap de Haan// The HTML structure generated by this syntax plugin is: 10242f4056SJaap de Haan// 11242f4056SJaap de Haan// <div class="plugin-bpmnio" id="__(bpmn|dmn)_js_<hash>"> 12242f4056SJaap de Haan// <div class="bpmn_js_data"> 13242f4056SJaap de Haan// ... base64 encoded xml 14242f4056SJaap de Haan// </div> 15242f4056SJaap de Haan// <div class="bpmn_js_canvas {$class}"> 16242f4056SJaap de Haan// <div class="bpmn_js_container">... rendered herein</div> 17242f4056SJaap de Haan// </div> 18242f4056SJaap de Haan// </div> 19*a494ddccSgithub-actions[bot]class syntax_plugin_bpmnio_bpmnio extends SyntaxPlugin 20fc2e1131SJaap de Haan{ 21ae85f1faSJaap de Haan public string $type = ''; // 'bpmn' or 'dmn' 22f0ae282cSJaap de Haan 23fc2e1131SJaap de Haan public function getPType() 24fc2e1131SJaap de Haan { 25fc2e1131SJaap de Haan return 'block'; 26fc2e1131SJaap de Haan } 27fc2e1131SJaap de Haan 28fc2e1131SJaap de Haan public function getType() 29fc2e1131SJaap de Haan { 30fc2e1131SJaap de Haan return 'protected'; 31fc2e1131SJaap de Haan } 32fc2e1131SJaap de Haan 33fc2e1131SJaap de Haan public function getSort() 34fc2e1131SJaap de Haan { 35fc2e1131SJaap de Haan return 0; 36fc2e1131SJaap de Haan } 37fc2e1131SJaap de Haan 38fc2e1131SJaap de Haan public function connectTo($mode) 39fc2e1131SJaap de Haan { 40fc2e1131SJaap de Haan $this->Lexer->addEntryPattern('<bpmnio.*?>(?=.*?</bpmnio>)', $mode, 'plugin_bpmnio_bpmnio'); 41fc2e1131SJaap de Haan } 42fc2e1131SJaap de Haan 43fc2e1131SJaap de Haan public function postConnect() 44fc2e1131SJaap de Haan { 45fc2e1131SJaap de Haan $this->Lexer->addExitPattern('</bpmnio>', 'plugin_bpmnio_bpmnio'); 46fc2e1131SJaap de Haan } 47fc2e1131SJaap de Haan 48fc2e1131SJaap de Haan public function handle($match, $state, $pos, Doku_Handler $handler) 49fc2e1131SJaap de Haan { 50f0ae282cSJaap de Haan switch ($state) { 51f0ae282cSJaap de Haan case DOKU_LEXER_ENTER: 52f0ae282cSJaap de Haan $matched = ''; 53f0ae282cSJaap de Haan preg_match('/<bpmnio type="(\w+)">/', $match, $matched); 54ae85f1faSJaap de Haan $this->type = $matched[1] ?? 'bpmn'; 55*a494ddccSgithub-actions[bot] return [$state, $this->type, '', $pos, '']; 56f0ae282cSJaap de Haan 57f0ae282cSJaap de Haan case DOKU_LEXER_UNMATCHED: 58c4f02a6eSJaap de Haan $posStart = $pos; 59c4f02a6eSJaap de Haan $posEnd = $pos + strlen($match); 60242f4056SJaap de Haan $match = base64_encode($match); 61*a494ddccSgithub-actions[bot] return [$state, $this->type, $match, $posStart, $posEnd]; 62f0ae282cSJaap de Haan 63f0ae282cSJaap de Haan case DOKU_LEXER_EXIT: 64ae85f1faSJaap de Haan $this->type = ''; 65*a494ddccSgithub-actions[bot] return [$state, '', '', '', '']; 66fc2e1131SJaap de Haan } 67*a494ddccSgithub-actions[bot] return []; 68fc2e1131SJaap de Haan } 69fc2e1131SJaap de Haan 70fc2e1131SJaap de Haan public function render($mode, Doku_Renderer $renderer, $data) 71fc2e1131SJaap de Haan { 72*a494ddccSgithub-actions[bot] [$state, $type, $match, $posStart, $posEnd] = $data; 7334515d89SJaap de Haan 7434515d89SJaap de Haan if (is_a($renderer, 'renderer_plugin_dw2pdf')) { 7534515d89SJaap de Haan if ($state == DOKU_LEXER_EXIT) { 7634515d89SJaap de Haan $renderer->doc .= <<<HTML 7734515d89SJaap de Haan <div class="plugin-bpmnio"> 78962d7b81SJaap de Haan <a href="https://github.com/Color-Of-Code/dokuwiki-plugin-bpmnio/issues/4"> 79962d7b81SJaap de Haan DW2PDF support missing: Help wanted 80962d7b81SJaap de Haan </a> 8134515d89SJaap de Haan </div> 8234515d89SJaap de Haan HTML; 8334515d89SJaap de Haan } 8434515d89SJaap de Haan return true; 8534515d89SJaap de Haan } 8634515d89SJaap de Haan 8734515d89SJaap de Haan if ($mode == 'xhtml' || $mode == 'odt') { 88fc2e1131SJaap de Haan switch ($state) { 89fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 90ae85f1faSJaap de Haan $bpmnid = "__{$type}_js_{$posStart}"; 918428abe8SJaap de Haan $renderer->doc .= <<<HTML 928428abe8SJaap de Haan <div class="plugin-bpmnio" id="{$bpmnid}"> 938428abe8SJaap de Haan HTML; 94fc2e1131SJaap de Haan break; 95fc2e1131SJaap de Haan 96fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 978428abe8SJaap de Haan $renderer->doc .= <<<HTML 98f0ae282cSJaap de Haan <div class="{$type}_js_data"> 99c4f02a6eSJaap de Haan {$match} 1008428abe8SJaap de Haan </div> 1018428abe8SJaap de Haan HTML; 102c4f02a6eSJaap de Haan 103962d7b81SJaap de Haan $target = "plugin_bpmnio_{$type}"; 104962d7b81SJaap de Haan $sectionEditData = ['target' => $target]; 105962d7b81SJaap de Haan $class = $renderer->startSectionEdit($posStart, $sectionEditData); 106c4f02a6eSJaap de Haan $renderer->doc .= <<<HTML 107f0ae282cSJaap de Haan <div class="{$type}_js_canvas {$class}"> 108f0ae282cSJaap de Haan <div class="{$type}_js_container"></div> 109c4f02a6eSJaap de Haan </div> 110c4f02a6eSJaap de Haan HTML; 111962d7b81SJaap de Haan $renderer->finishSectionEdit($posEnd); 112c4f02a6eSJaap de Haan break; 113c4f02a6eSJaap de Haan 114c4f02a6eSJaap de Haan case DOKU_LEXER_EXIT: 115f0ae282cSJaap de Haan $renderer->doc .= <<<HTML 116f0ae282cSJaap de Haan </div> 117f0ae282cSJaap de Haan HTML; 118fc2e1131SJaap de Haan break; 119fc2e1131SJaap de Haan } 120fc2e1131SJaap de Haan return true; 121fc2e1131SJaap de Haan } 122fc2e1131SJaap de Haan return false; 123fc2e1131SJaap de Haan } 124fc2e1131SJaap de Haan} 125