xref: /plugin/diagrams/parser/DiagramsNode.php (revision 3d6886fdda1da3668e853a389b1500cbdfc63619)
18d8f8b26SAnna Dabrowska<?php
28d8f8b26SAnna Dabrowska
38d8f8b26SAnna Dabrowskanamespace dokuwiki\plugin\diagrams\parser;
48d8f8b26SAnna Dabrowska
50ec94f66SAndreas Gohruse dokuwiki\plugin\prosemirror\parser\Node;
68d8f8b26SAnna Dabrowska
70ec94f66SAndreas Gohrclass DiagramsNode extends Node
88d8f8b26SAnna Dabrowska{
90ec94f66SAndreas Gohr    /**
100ec94f66SAndreas Gohr     * @var Node
110ec94f66SAndreas Gohr     */
120ec94f66SAndreas Gohr    protected $parent;
130ec94f66SAndreas Gohr
140ec94f66SAndreas Gohr    /**
150ec94f66SAndreas Gohr     * @var mixed
160ec94f66SAndreas Gohr     */
170ec94f66SAndreas Gohr    protected $data;
180ec94f66SAndreas Gohr
190ec94f66SAndreas Gohr    public function __construct($data, Node $parent)
200ec94f66SAndreas Gohr    {
210ec94f66SAndreas Gohr        $this->parent = &$parent;
220ec94f66SAndreas Gohr        $this->data = $data;
230ec94f66SAndreas Gohr    }
240ec94f66SAndreas Gohr
250ec94f66SAndreas Gohr
260ec94f66SAndreas Gohr    public function toSyntax()
270ec94f66SAndreas Gohr    {
280ec94f66SAndreas Gohr        $openingTag = '<diagram';
290ec94f66SAndreas Gohr        if (!empty($this->data['attrs']['align'])) {
300ec94f66SAndreas Gohr            $openingTag .= ' ' . $this->data['attrs']['align'];
310ec94f66SAndreas Gohr        }
320ec94f66SAndreas Gohr        $openingTag .= '>';
330ec94f66SAndreas Gohr
34*3d6886fdSAndreas Gohr        $svg = $this->data['attrs']['url'];
350ec94f66SAndreas Gohr        if (substr($svg, 0, 26) !== 'data:image/svg+xml;base64,') {
360ec94f66SAndreas Gohr            throw new \Exception('bad data uri "'.substr($svg, 0, 26).'"');
370ec94f66SAndreas Gohr        }
380ec94f66SAndreas Gohr        $svg = base64_decode(substr($svg, 26));
390ec94f66SAndreas Gohr        return $openingTag . $svg . "</diagram>";
400ec94f66SAndreas Gohr    }
410ec94f66SAndreas Gohr
420ec94f66SAndreas Gohr
438d8f8b26SAnna Dabrowska}
44