xref: /plugin/bpmnio/syntax/bpmnio.php (revision e9e1a493e68dc5cb4119e6c779e79064beae5117)
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