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