1fc2e1131SJaap de Haan<?php 2fc2e1131SJaap de Haan 3fc2e1131SJaap de Haan/** 4fc2e1131SJaap de Haan * @license See LICENSE file 5fc2e1131SJaap de Haan */ 6fc2e1131SJaap de Haan 7fc2e1131SJaap de Haan// See help: https://www.dokuwiki.org/devel:syntax_plugins 8fc2e1131SJaap de Haan 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> 19242f4056SJaap de Haan 20242f4056SJaap de Haan 21fc2e1131SJaap de Haanclass syntax_plugin_bpmnio_bpmnio extends DokuWiki_Syntax_Plugin 22fc2e1131SJaap de Haan{ 23ae85f1faSJaap de Haan public string $type = ''; // 'bpmn' or 'dmn' 24f0ae282cSJaap de Haan 25fc2e1131SJaap de Haan public function getPType() 26fc2e1131SJaap de Haan { 27fc2e1131SJaap de Haan return 'block'; 28fc2e1131SJaap de Haan } 29fc2e1131SJaap de Haan 30fc2e1131SJaap de Haan public function getType() 31fc2e1131SJaap de Haan { 32fc2e1131SJaap de Haan return 'protected'; 33fc2e1131SJaap de Haan } 34fc2e1131SJaap de Haan 35fc2e1131SJaap de Haan public function getSort() 36fc2e1131SJaap de Haan { 37fc2e1131SJaap de Haan return 0; 38fc2e1131SJaap de Haan } 39fc2e1131SJaap de Haan 40fc2e1131SJaap de Haan public function connectTo($mode) 41fc2e1131SJaap de Haan { 42fc2e1131SJaap de Haan $this->Lexer->addEntryPattern('<bpmnio.*?>(?=.*?</bpmnio>)', $mode, 'plugin_bpmnio_bpmnio'); 43fc2e1131SJaap de Haan } 44fc2e1131SJaap de Haan 45fc2e1131SJaap de Haan public function postConnect() 46fc2e1131SJaap de Haan { 47fc2e1131SJaap de Haan $this->Lexer->addExitPattern('</bpmnio>', 'plugin_bpmnio_bpmnio'); 48fc2e1131SJaap de Haan } 49fc2e1131SJaap de Haan 50fc2e1131SJaap de Haan public function handle($match, $state, $pos, Doku_Handler $handler) 51fc2e1131SJaap de Haan { 52f0ae282cSJaap de Haan switch ($state) { 53f0ae282cSJaap de Haan case DOKU_LEXER_ENTER: 54f0ae282cSJaap de Haan $matched = ''; 55f0ae282cSJaap de Haan preg_match('/<bpmnio type="(\w+)">/', $match, $matched); 56ae85f1faSJaap de Haan $this->type = $matched[1] ?? 'bpmn'; 57ae85f1faSJaap de Haan return array($state, $this->type, '', $pos, ''); 58f0ae282cSJaap de Haan 59f0ae282cSJaap de Haan case DOKU_LEXER_UNMATCHED: 60c4f02a6eSJaap de Haan $posStart = $pos; 61c4f02a6eSJaap de Haan $posEnd = $pos + strlen($match); 62242f4056SJaap de Haan $match = base64_encode($match); 63ae85f1faSJaap de Haan return array($state, $this->type, $match, $posStart, $posEnd); 64f0ae282cSJaap de Haan 65f0ae282cSJaap de Haan case DOKU_LEXER_EXIT: 66ae85f1faSJaap de Haan $this->type = ''; 67f0ae282cSJaap de Haan return array($state, '', '', '', ''); 68fc2e1131SJaap de Haan } 69f0ae282cSJaap de Haan return array(); 70fc2e1131SJaap de Haan } 71fc2e1131SJaap de Haan 72fc2e1131SJaap de Haan public function render($mode, Doku_Renderer $renderer, $data) 73fc2e1131SJaap de Haan { 74f0ae282cSJaap de Haan list($state, $type, $match, $posStart, $posEnd) = $data; 7534515d89SJaap de Haan 7634515d89SJaap de Haan if (is_a($renderer, 'renderer_plugin_dw2pdf')) { 7734515d89SJaap de Haan if ($state == DOKU_LEXER_EXIT) { 7834515d89SJaap de Haan $renderer->doc .= <<<HTML 7934515d89SJaap de Haan <div class="plugin-bpmnio"> 80*962d7b81SJaap de Haan <a href="https://github.com/Color-Of-Code/dokuwiki-plugin-bpmnio/issues/4"> 81*962d7b81SJaap de Haan DW2PDF support missing: Help wanted 82*962d7b81SJaap de Haan </a> 8334515d89SJaap de Haan </div> 8434515d89SJaap de Haan HTML; 8534515d89SJaap de Haan } 8634515d89SJaap de Haan return true; 8734515d89SJaap de Haan } 8834515d89SJaap de Haan 8934515d89SJaap de Haan if ($mode == 'xhtml' || $mode == 'odt') { 90fc2e1131SJaap de Haan switch ($state) { 91fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 92ae85f1faSJaap de Haan $bpmnid = "__{$type}_js_{$posStart}"; 938428abe8SJaap de Haan $renderer->doc .= <<<HTML 948428abe8SJaap de Haan <div class="plugin-bpmnio" id="{$bpmnid}"> 958428abe8SJaap de Haan HTML; 96fc2e1131SJaap de Haan break; 97fc2e1131SJaap de Haan 98fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 998428abe8SJaap de Haan $renderer->doc .= <<<HTML 100f0ae282cSJaap de Haan <div class="{$type}_js_data"> 101c4f02a6eSJaap de Haan {$match} 1028428abe8SJaap de Haan </div> 1038428abe8SJaap de Haan HTML; 104c4f02a6eSJaap de Haan 105*962d7b81SJaap de Haan $target = "plugin_bpmnio_{$type}"; 106*962d7b81SJaap de Haan $sectionEditData = ['target' => $target]; 107*962d7b81SJaap de Haan $class = $renderer->startSectionEdit($posStart, $sectionEditData); 108c4f02a6eSJaap de Haan $renderer->doc .= <<<HTML 109f0ae282cSJaap de Haan <div class="{$type}_js_canvas {$class}"> 110f0ae282cSJaap de Haan <div class="{$type}_js_container"></div> 111c4f02a6eSJaap de Haan </div> 112c4f02a6eSJaap de Haan HTML; 113*962d7b81SJaap de Haan $renderer->finishSectionEdit($posEnd); 114c4f02a6eSJaap de Haan break; 115c4f02a6eSJaap de Haan 116c4f02a6eSJaap de Haan case DOKU_LEXER_EXIT: 117f0ae282cSJaap de Haan $renderer->doc .= <<<HTML 118f0ae282cSJaap de Haan </div> 119f0ae282cSJaap de Haan HTML; 120fc2e1131SJaap de Haan break; 121fc2e1131SJaap de Haan } 122fc2e1131SJaap de Haan return true; 123fc2e1131SJaap de Haan } 124fc2e1131SJaap de Haan return false; 125fc2e1131SJaap de Haan } 126fc2e1131SJaap de Haan} 127