1*fc2e1131SJaap de Haan<?php 2*fc2e1131SJaap de Haan 3*fc2e1131SJaap de Haan/** 4*fc2e1131SJaap de Haan * @license See LICENSE file 5*fc2e1131SJaap de Haan * @author Jaap de Haan <jaap.dehaan@color-of-code.de> 6*fc2e1131SJaap de Haan */ 7*fc2e1131SJaap de Haan 8*fc2e1131SJaap de Haan// must be run within DokuWiki 9*fc2e1131SJaap de Haanif (!defined('DOKU_INC')) { 10*fc2e1131SJaap de Haan die(); 11*fc2e1131SJaap de Haan} 12*fc2e1131SJaap de Haan 13*fc2e1131SJaap de Haan// See help: https://www.dokuwiki.org/devel:syntax_plugins 14*fc2e1131SJaap de Haan 15*fc2e1131SJaap de Haanclass syntax_plugin_bpmnio_bpmnio extends DokuWiki_Syntax_Plugin 16*fc2e1131SJaap de Haan{ 17*fc2e1131SJaap de Haan 18*fc2e1131SJaap de Haan public function getPType() 19*fc2e1131SJaap de Haan { 20*fc2e1131SJaap de Haan return 'block'; 21*fc2e1131SJaap de Haan } 22*fc2e1131SJaap de Haan 23*fc2e1131SJaap de Haan public function getType() 24*fc2e1131SJaap de Haan { 25*fc2e1131SJaap de Haan return 'protected'; 26*fc2e1131SJaap de Haan } 27*fc2e1131SJaap de Haan 28*fc2e1131SJaap de Haan public function getSort() 29*fc2e1131SJaap de Haan { 30*fc2e1131SJaap de Haan return 0; 31*fc2e1131SJaap de Haan } 32*fc2e1131SJaap de Haan 33*fc2e1131SJaap de Haan public function connectTo($mode) 34*fc2e1131SJaap de Haan { 35*fc2e1131SJaap de Haan $this->Lexer->addEntryPattern('<bpmnio.*?>(?=.*?</bpmnio>)', $mode, 'plugin_bpmnio_bpmnio'); 36*fc2e1131SJaap de Haan } 37*fc2e1131SJaap de Haan 38*fc2e1131SJaap de Haan public function postConnect() 39*fc2e1131SJaap de Haan { 40*fc2e1131SJaap de Haan $this->Lexer->addExitPattern('</bpmnio>', 'plugin_bpmnio_bpmnio'); 41*fc2e1131SJaap de Haan } 42*fc2e1131SJaap de Haan 43*fc2e1131SJaap de Haan public function handle($match, $state, $pos, Doku_Handler $handler) 44*fc2e1131SJaap de Haan { 45*fc2e1131SJaap de Haan switch ($state) { 46*fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 47*fc2e1131SJaap de Haan return array($state, $match, $pos); 48*fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 49*fc2e1131SJaap de Haan $data = base64_encode($match); 50*fc2e1131SJaap de Haan return array($state, $data, $pos); 51*fc2e1131SJaap de Haan case DOKU_LEXER_EXIT: 52*fc2e1131SJaap de Haan return array($state, $match, $pos); 53*fc2e1131SJaap de Haan } 54*fc2e1131SJaap de Haan return array(); 55*fc2e1131SJaap de Haan } 56*fc2e1131SJaap de Haan 57*fc2e1131SJaap de Haan public function render($mode, Doku_Renderer $renderer, $data) 58*fc2e1131SJaap de Haan { 59*fc2e1131SJaap de Haan // $data is returned by handle() 60*fc2e1131SJaap de Haan if ($mode == 'xhtml' || $mode == 'odt') { 61*fc2e1131SJaap de Haan list($state, $match, $pos) = $data; 62*fc2e1131SJaap de Haan // $renderer->doc .= '<textarea class="bpmn_js_data">' . $match . '</textarea>'; 63*fc2e1131SJaap de Haan switch ($state) { 64*fc2e1131SJaap de Haan case DOKU_LEXER_ENTER: 65*fc2e1131SJaap de Haan preg_match('/<bpmnio type="(\w+)">/', $match, $type); 66*fc2e1131SJaap de Haan $type = $type[1] ?? 'bpmn'; 67*fc2e1131SJaap de Haan $bpmnid = uniqid('__' . $type . '_js_'); 68*fc2e1131SJaap de Haan $sectionEditData = ['target' => 'plugin_bpmnio_bpmnio']; 69*fc2e1131SJaap de Haan if (!defined('SEC_EDIT_PATTERN')) { 70*fc2e1131SJaap de Haan // backwards-compatibility for Frusterick Manners (2017-02-19) 71*fc2e1131SJaap de Haan $sectionEditData = 'plugin_bpmnio_bpmnio'; 72*fc2e1131SJaap de Haan } 73*fc2e1131SJaap de Haan $class = $renderer->startSectionEdit($data[$pos], $sectionEditData); 74*fc2e1131SJaap de Haan 75*fc2e1131SJaap de Haan $renderer->doc .= '<div class="' . $class . '">'; 76*fc2e1131SJaap de Haan $renderer->doc .= '<textarea class="bpmn_js_data" id="' . $bpmnid . '" style="visibility:hidden;">'; 77*fc2e1131SJaap de Haan break; 78*fc2e1131SJaap de Haan 79*fc2e1131SJaap de Haan case DOKU_LEXER_UNMATCHED: 80*fc2e1131SJaap de Haan $renderer->doc .= trim($match); 81*fc2e1131SJaap de Haan break; 82*fc2e1131SJaap de Haan case DOKU_LEXER_EXIT: 83*fc2e1131SJaap de Haan $renderer->doc .= '</textarea>'; 84*fc2e1131SJaap de Haan $renderer->doc .= '</div>'; 85*fc2e1131SJaap de Haan $renderer->finishSectionEdit($pos); 86*fc2e1131SJaap de Haan break; 87*fc2e1131SJaap de Haan } 88*fc2e1131SJaap de Haan return true; 89*fc2e1131SJaap de Haan } 90*fc2e1131SJaap de Haan return false; 91*fc2e1131SJaap de Haan } 92*fc2e1131SJaap de Haan} 93