xref: /plugin/diagrams/parser/DiagramsNode.php (revision 0ec94f66261066d45d3a211f0fade04069b99b28)
18d8f8b26SAnna Dabrowska<?php
28d8f8b26SAnna Dabrowska
38d8f8b26SAnna Dabrowskanamespace dokuwiki\plugin\diagrams\parser;
48d8f8b26SAnna Dabrowska
5*0ec94f66SAndreas Gohruse dokuwiki\plugin\prosemirror\parser\Node;
68d8f8b26SAnna Dabrowska
7*0ec94f66SAndreas Gohrclass DiagramsNode extends Node
88d8f8b26SAnna Dabrowska{
9*0ec94f66SAndreas Gohr    /**
10*0ec94f66SAndreas Gohr     * @var Node
11*0ec94f66SAndreas Gohr     */
12*0ec94f66SAndreas Gohr    protected $parent;
13*0ec94f66SAndreas Gohr
14*0ec94f66SAndreas Gohr    /**
15*0ec94f66SAndreas Gohr     * @var mixed
16*0ec94f66SAndreas Gohr     */
17*0ec94f66SAndreas Gohr    protected $data;
18*0ec94f66SAndreas Gohr
19*0ec94f66SAndreas Gohr    public function __construct($data, Node $parent)
20*0ec94f66SAndreas Gohr    {
21*0ec94f66SAndreas Gohr        $this->parent = &$parent;
22*0ec94f66SAndreas Gohr        $this->data = $data;
23*0ec94f66SAndreas Gohr    }
24*0ec94f66SAndreas Gohr
25*0ec94f66SAndreas Gohr
26*0ec94f66SAndreas Gohr    public function toSyntax()
27*0ec94f66SAndreas Gohr    {
28*0ec94f66SAndreas Gohr        $openingTag = '<diagram';
29*0ec94f66SAndreas Gohr        if (!empty($this->data['attrs']['align'])) {
30*0ec94f66SAndreas Gohr            $openingTag .= ' ' . $this->data['attrs']['align'];
31*0ec94f66SAndreas Gohr        }
32*0ec94f66SAndreas Gohr        $openingTag .= '>';
33*0ec94f66SAndreas Gohr
34*0ec94f66SAndreas Gohr        $svg = $this->data['attrs']['data'];
35*0ec94f66SAndreas Gohr        if (substr($svg, 0, 26) !== 'data:image/svg+xml;base64,') {
36*0ec94f66SAndreas Gohr            throw new \Exception('bad data uri "'.substr($svg, 0, 26).'"');
37*0ec94f66SAndreas Gohr        }
38*0ec94f66SAndreas Gohr        $svg = base64_decode(substr($svg, 26));
39*0ec94f66SAndreas Gohr        return $openingTag . $svg . "</diagram>";
40*0ec94f66SAndreas Gohr    }
41*0ec94f66SAndreas Gohr
42*0ec94f66SAndreas Gohr
438d8f8b26SAnna Dabrowska}
44