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 } 48*8428abe8SJaap 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 { 53fc2e1131SJaap de Haan if ($mode == 'xhtml' || $mode == 'odt') { 54*8428abe8SJaap de Haan list($match, $state) = $data; 55fc2e1131SJaap de Haan switch ($state) { 56fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 57fc2e1131SJaap de Haan preg_match('/<bpmnio type="(\w+)">/', $match, $type); 58fc2e1131SJaap de Haan $type = $type[1] ?? 'bpmn'; 59fc2e1131SJaap de Haan $bpmnid = uniqid('__' . $type . '_js_'); 60*8428abe8SJaap de Haan $renderer->doc .= <<<HTML 61*8428abe8SJaap de Haan <div class="plugin-bpmnio" id="{$bpmnid}"> 62*8428abe8SJaap de Haan <textarea class="bpmn_js_data"> 63*8428abe8SJaap de Haan HTML; 64fc2e1131SJaap de Haan break; 65fc2e1131SJaap de Haan 66fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 67fc2e1131SJaap de Haan $renderer->doc .= trim($match); 68fc2e1131SJaap de Haan break; 69fc2e1131SJaap de Haan case DOKU_LEXER_EXIT: 70*8428abe8SJaap de Haan $renderer->doc .= <<<HTML 71*8428abe8SJaap de Haan </textarea> 72*8428abe8SJaap de Haan <div class="bpmn_js_container"></div> 73*8428abe8SJaap de Haan </div> 74*8428abe8SJaap de Haan HTML; 75fc2e1131SJaap de Haan break; 76fc2e1131SJaap de Haan } 77fc2e1131SJaap de Haan return true; 78fc2e1131SJaap de Haan } 79fc2e1131SJaap de Haan return false; 80fc2e1131SJaap de Haan } 81fc2e1131SJaap de Haan} 82