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