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 public function getPType() 18fc2e1131SJaap de Haan { 19fc2e1131SJaap de Haan return 'block'; 20fc2e1131SJaap de Haan } 21fc2e1131SJaap de Haan 22fc2e1131SJaap de Haan public function getType() 23fc2e1131SJaap de Haan { 24fc2e1131SJaap de Haan return 'protected'; 25fc2e1131SJaap de Haan } 26fc2e1131SJaap de Haan 27fc2e1131SJaap de Haan public function getSort() 28fc2e1131SJaap de Haan { 29fc2e1131SJaap de Haan return 0; 30fc2e1131SJaap de Haan } 31fc2e1131SJaap de Haan 32fc2e1131SJaap de Haan public function connectTo($mode) 33fc2e1131SJaap de Haan { 34fc2e1131SJaap de Haan $this->Lexer->addEntryPattern('<bpmnio.*?>(?=.*?</bpmnio>)', $mode, 'plugin_bpmnio_bpmnio'); 35fc2e1131SJaap de Haan } 36fc2e1131SJaap de Haan 37fc2e1131SJaap de Haan public function postConnect() 38fc2e1131SJaap de Haan { 39fc2e1131SJaap de Haan $this->Lexer->addExitPattern('</bpmnio>', 'plugin_bpmnio_bpmnio'); 40fc2e1131SJaap de Haan } 41fc2e1131SJaap de Haan 42fc2e1131SJaap de Haan public function handle($match, $state, $pos, Doku_Handler $handler) 43fc2e1131SJaap de Haan { 44*c4f02a6eSJaap de Haan $posStart = $pos; 45*c4f02a6eSJaap de Haan $posEnd = $pos + strlen($match); 46*c4f02a6eSJaap de Haan 47e9e1a493SJaap de Haan if ($state == DOKU_LEXER_UNMATCHED) { 48*c4f02a6eSJaap de Haan $match = base64_encode(trim($match)); 49fc2e1131SJaap de Haan } 50*c4f02a6eSJaap de Haan return array($match, $state, $posStart, $posEnd); 51fc2e1131SJaap de Haan } 52fc2e1131SJaap de Haan 53fc2e1131SJaap de Haan public function render($mode, Doku_Renderer $renderer, $data) 54fc2e1131SJaap de Haan { 55*c4f02a6eSJaap de Haan list($match, $state, $posStart, $posEnd) = $data; 5634515d89SJaap de Haan 5734515d89SJaap de Haan if (is_a($renderer, 'renderer_plugin_dw2pdf')) { 5834515d89SJaap de Haan if ($state == DOKU_LEXER_EXIT) { 5934515d89SJaap de Haan $renderer->doc .= <<<HTML 6034515d89SJaap de Haan <div class="plugin-bpmnio"> 6134515d89SJaap de Haan <a href="https://github.com/Color-Of-Code/dokuwiki-plugin-bpmnio/issues/4">DW2PDF support missing: Help wanted</a> 6234515d89SJaap de Haan </div> 6334515d89SJaap de Haan HTML; 6434515d89SJaap de Haan } 6534515d89SJaap de Haan return true; 6634515d89SJaap de Haan } 6734515d89SJaap de Haan 6834515d89SJaap de Haan if ($mode == 'xhtml' || $mode == 'odt') { 69fc2e1131SJaap de Haan switch ($state) { 70fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 71fc2e1131SJaap de Haan preg_match('/<bpmnio type="(\w+)">/', $match, $type); 72fc2e1131SJaap de Haan $type = $type[1] ?? 'bpmn'; 73fc2e1131SJaap de Haan $bpmnid = uniqid('__' . $type . '_js_'); 748428abe8SJaap de Haan $renderer->doc .= <<<HTML 758428abe8SJaap de Haan <div class="plugin-bpmnio" id="{$bpmnid}"> 768428abe8SJaap de Haan HTML; 77fc2e1131SJaap de Haan break; 78fc2e1131SJaap de Haan 79fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 808428abe8SJaap de Haan $renderer->doc .= <<<HTML 81*c4f02a6eSJaap de Haan <div class="bpmn_js_data"> 82*c4f02a6eSJaap de Haan {$match} 838428abe8SJaap de Haan </div> 848428abe8SJaap de Haan HTML; 85*c4f02a6eSJaap de Haan 86*c4f02a6eSJaap de Haan $class = $this->_startSectionEdit($renderer, $posStart); 87*c4f02a6eSJaap de Haan $renderer->doc .= <<<HTML 88*c4f02a6eSJaap de Haan <div class="bpmn_js_canvas {$class}"> 89*c4f02a6eSJaap de Haan <div class="bpmn_js_container {$class}"></div> 90*c4f02a6eSJaap de Haan </div> 91*c4f02a6eSJaap de Haan HTML; 92*c4f02a6eSJaap de Haan $this->_finishSectionEdit($renderer, $posEnd); 93*c4f02a6eSJaap de Haan break; 94*c4f02a6eSJaap de Haan 95*c4f02a6eSJaap de Haan case DOKU_LEXER_EXIT: 96*c4f02a6eSJaap de Haan $renderer->doc .= '</div>'; 97fc2e1131SJaap de Haan break; 98fc2e1131SJaap de Haan } 99fc2e1131SJaap de Haan return true; 100fc2e1131SJaap de Haan } 101fc2e1131SJaap de Haan return false; 102fc2e1131SJaap de Haan } 103*c4f02a6eSJaap de Haan 104*c4f02a6eSJaap de Haan private function _startSectionEdit(Doku_Renderer $renderer, $pos) 105*c4f02a6eSJaap de Haan { 106*c4f02a6eSJaap de Haan $sectionEditData = ['target' => 'plugin_bpmnio']; 107*c4f02a6eSJaap de Haan if (!defined('SEC_EDIT_PATTERN')) { 108*c4f02a6eSJaap de Haan // backwards-compatibility for Frusterick Manners (2017-02-19) 109*c4f02a6eSJaap de Haan $sectionEditData = 'plugin_bpmnio'; 110*c4f02a6eSJaap de Haan } 111*c4f02a6eSJaap de Haan return $renderer->startSectionEdit($pos, $sectionEditData); 112*c4f02a6eSJaap de Haan } 113*c4f02a6eSJaap de Haan 114*c4f02a6eSJaap de Haan private function _finishSectionEdit(Doku_Renderer $renderer, $pos) 115*c4f02a6eSJaap de Haan { 116*c4f02a6eSJaap de Haan $renderer->finishSectionEdit($pos); 117*c4f02a6eSJaap de Haan } 118fc2e1131SJaap de Haan} 119