1fc2e1131SJaap de Haan<?php 2fc2e1131SJaap de Haan 3fc2e1131SJaap de Haan/** 4fc2e1131SJaap de Haan * @license See LICENSE file 5fc2e1131SJaap de Haan * @author Jaap de Haan <jaap.dehaan@color-of-code.de> 6fc2e1131SJaap de Haan */ 7fc2e1131SJaap de Haan 8fc2e1131SJaap de Haan// must be run within DokuWiki 9fc2e1131SJaap de Haanif (!defined('DOKU_INC')) { 10fc2e1131SJaap de Haan die(); 11fc2e1131SJaap de Haan} 12fc2e1131SJaap de Haan 13fc2e1131SJaap de Haan// See help: https://www.dokuwiki.org/devel:syntax_plugins 14fc2e1131SJaap de Haan 15fc2e1131SJaap de Haanclass syntax_plugin_bpmnio_bpmnio extends DokuWiki_Syntax_Plugin 16fc2e1131SJaap de Haan{ 17fc2e1131SJaap de Haan 18fc2e1131SJaap de Haan public function getPType() 19fc2e1131SJaap de Haan { 20fc2e1131SJaap de Haan return 'block'; 21fc2e1131SJaap de Haan } 22fc2e1131SJaap de Haan 23fc2e1131SJaap de Haan public function getType() 24fc2e1131SJaap de Haan { 25fc2e1131SJaap de Haan return 'protected'; 26fc2e1131SJaap de Haan } 27fc2e1131SJaap de Haan 28fc2e1131SJaap de Haan public function getSort() 29fc2e1131SJaap de Haan { 30fc2e1131SJaap de Haan return 0; 31fc2e1131SJaap de Haan } 32fc2e1131SJaap de Haan 33fc2e1131SJaap de Haan public function connectTo($mode) 34fc2e1131SJaap de Haan { 35fc2e1131SJaap de Haan $this->Lexer->addEntryPattern('<bpmnio.*?>(?=.*?</bpmnio>)', $mode, 'plugin_bpmnio_bpmnio'); 36fc2e1131SJaap de Haan } 37fc2e1131SJaap de Haan 38fc2e1131SJaap de Haan public function postConnect() 39fc2e1131SJaap de Haan { 40fc2e1131SJaap de Haan $this->Lexer->addExitPattern('</bpmnio>', 'plugin_bpmnio_bpmnio'); 41fc2e1131SJaap de Haan } 42fc2e1131SJaap de Haan 43fc2e1131SJaap de Haan public function handle($match, $state, $pos, Doku_Handler $handler) 44fc2e1131SJaap de Haan { 45e9e1a493SJaap de Haan if ($state == DOKU_LEXER_UNMATCHED) { 46e9e1a493SJaap de Haan $match = base64_encode($match); 47fc2e1131SJaap de Haan } 488428abe8SJaap de Haan return array($match, $state); 49fc2e1131SJaap de Haan } 50fc2e1131SJaap de Haan 51fc2e1131SJaap de Haan public function render($mode, Doku_Renderer $renderer, $data) 52fc2e1131SJaap de Haan { 538428abe8SJaap de Haan list($match, $state) = $data; 54*34515d89SJaap de Haan 55*34515d89SJaap de Haan if (is_a($renderer, 'renderer_plugin_dw2pdf')) { 56*34515d89SJaap de Haan if ($state == DOKU_LEXER_EXIT) { 57*34515d89SJaap de Haan $renderer->doc .= <<<HTML 58*34515d89SJaap de Haan <div class="plugin-bpmnio"> 59*34515d89SJaap de Haan <a href="https://github.com/Color-Of-Code/dokuwiki-plugin-bpmnio/issues/4">DW2PDF support missing: Help wanted</a> 60*34515d89SJaap de Haan </div> 61*34515d89SJaap de Haan HTML; 62*34515d89SJaap de Haan } 63*34515d89SJaap de Haan return true; 64*34515d89SJaap de Haan } 65*34515d89SJaap de Haan 66*34515d89SJaap de Haan if ($mode == 'xhtml' || $mode == 'odt') { 67fc2e1131SJaap de Haan switch ($state) { 68fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 69fc2e1131SJaap de Haan preg_match('/<bpmnio type="(\w+)">/', $match, $type); 70fc2e1131SJaap de Haan $type = $type[1] ?? 'bpmn'; 71fc2e1131SJaap de Haan $bpmnid = uniqid('__' . $type . '_js_'); 728428abe8SJaap de Haan $renderer->doc .= <<<HTML 738428abe8SJaap de Haan <div class="plugin-bpmnio" id="{$bpmnid}"> 748428abe8SJaap de Haan <textarea class="bpmn_js_data"> 758428abe8SJaap de Haan HTML; 76fc2e1131SJaap de Haan break; 77fc2e1131SJaap de Haan 78fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 79fc2e1131SJaap de Haan $renderer->doc .= trim($match); 80fc2e1131SJaap de Haan break; 81fc2e1131SJaap de Haan case DOKU_LEXER_EXIT: 828428abe8SJaap de Haan $renderer->doc .= <<<HTML 838428abe8SJaap de Haan </textarea> 848428abe8SJaap de Haan <div class="bpmn_js_container"></div> 858428abe8SJaap de Haan </div> 868428abe8SJaap de Haan HTML; 87fc2e1131SJaap de Haan break; 88fc2e1131SJaap de Haan } 89fc2e1131SJaap de Haan return true; 90fc2e1131SJaap de Haan } 91fc2e1131SJaap de Haan return false; 92fc2e1131SJaap de Haan } 93fc2e1131SJaap de Haan} 94