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 { 45*e9e1a493SJaap de Haan if ($state == DOKU_LEXER_UNMATCHED) { 46*e9e1a493SJaap de Haan $match = base64_encode($match); 47fc2e1131SJaap de Haan } 48*e9e1a493SJaap de Haan return array($match, $state, $pos); 49fc2e1131SJaap de Haan } 50fc2e1131SJaap de Haan 51fc2e1131SJaap de Haan public function render($mode, Doku_Renderer $renderer, $data) 52fc2e1131SJaap de Haan { 53fc2e1131SJaap de Haan // $data is returned by handle() 54fc2e1131SJaap de Haan if ($mode == 'xhtml' || $mode == 'odt') { 55*e9e1a493SJaap de Haan list($match, $state, $pos) = $data; 56fc2e1131SJaap de Haan switch ($state) { 57fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 58fc2e1131SJaap de Haan preg_match('/<bpmnio type="(\w+)">/', $match, $type); 59fc2e1131SJaap de Haan $type = $type[1] ?? 'bpmn'; 60fc2e1131SJaap de Haan $bpmnid = uniqid('__' . $type . '_js_'); 61*e9e1a493SJaap de Haan $renderer->doc .= '<div class="plugin-bpmnio" id="' . $bpmnid . '">'; 62*e9e1a493SJaap de Haan $renderer->doc .= '<textarea class="bpmn_js_data" style="visibility:hidden;">'; 63fc2e1131SJaap de Haan break; 64fc2e1131SJaap de Haan 65fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 66fc2e1131SJaap de Haan $renderer->doc .= trim($match); 67fc2e1131SJaap de Haan break; 68fc2e1131SJaap de Haan case DOKU_LEXER_EXIT: 69fc2e1131SJaap de Haan $renderer->doc .= '</textarea>'; 70*e9e1a493SJaap de Haan $renderer->doc .= '<div class="bpmn_js_container">'; 71fc2e1131SJaap de Haan $renderer->doc .= '</div>'; 72*e9e1a493SJaap de Haan $renderer->doc .= '</div>'; 73fc2e1131SJaap de Haan break; 74fc2e1131SJaap de Haan } 75fc2e1131SJaap de Haan return true; 76fc2e1131SJaap de Haan } 77fc2e1131SJaap de Haan return false; 78fc2e1131SJaap de Haan } 79fc2e1131SJaap de Haan} 80