18d8f8b26SAnna Dabrowska<?php 28d8f8b26SAnna Dabrowska 38d8f8b26SAnna Dabrowskanamespace dokuwiki\plugin\diagrams\parser; 48d8f8b26SAnna Dabrowska 50ec94f66SAndreas Gohruse dokuwiki\plugin\prosemirror\parser\Node; 68d8f8b26SAnna Dabrowska 7*c949f2b3SAndreas Gohr/** 8*c949f2b3SAndreas Gohr * Represents an embedded diagram 9*c949f2b3SAndreas Gohr * 10*c949f2b3SAndreas Gohr * Note: for mediafile diagrams the image node is reused 11*c949f2b3SAndreas Gohr */ 120ec94f66SAndreas Gohrclass DiagramsNode extends Node 138d8f8b26SAnna Dabrowska{ 140ec94f66SAndreas Gohr /** 150ec94f66SAndreas Gohr * @var Node 160ec94f66SAndreas Gohr */ 170ec94f66SAndreas Gohr protected $parent; 180ec94f66SAndreas Gohr 190ec94f66SAndreas Gohr /** 200ec94f66SAndreas Gohr * @var mixed 210ec94f66SAndreas Gohr */ 220ec94f66SAndreas Gohr protected $data; 230ec94f66SAndreas Gohr 24*c949f2b3SAndreas Gohr /** @inheritdoc */ 250ec94f66SAndreas Gohr public function __construct($data, Node $parent) 260ec94f66SAndreas Gohr { 270ec94f66SAndreas Gohr $this->parent = &$parent; 280ec94f66SAndreas Gohr $this->data = $data; 290ec94f66SAndreas Gohr } 300ec94f66SAndreas Gohr 31*c949f2b3SAndreas Gohr /** @inheritdoc */ 320ec94f66SAndreas Gohr public function toSyntax() 330ec94f66SAndreas Gohr { 340ec94f66SAndreas Gohr $openingTag = '<diagram'; 350ec94f66SAndreas Gohr if (!empty($this->data['attrs']['align'])) { 360ec94f66SAndreas Gohr $openingTag .= ' ' . $this->data['attrs']['align']; 370ec94f66SAndreas Gohr } 380ec94f66SAndreas Gohr $openingTag .= '>'; 390ec94f66SAndreas Gohr 403d6886fdSAndreas Gohr $svg = $this->data['attrs']['url']; 410ec94f66SAndreas Gohr if (substr($svg, 0, 26) !== 'data:image/svg+xml;base64,') { 420ec94f66SAndreas Gohr throw new \Exception('bad data uri "' . substr($svg, 0, 26) . '"'); 430ec94f66SAndreas Gohr } 440ec94f66SAndreas Gohr $svg = base64_decode(substr($svg, 26)); 450ec94f66SAndreas Gohr return $openingTag . $svg . "</diagram>"; 460ec94f66SAndreas Gohr } 478d8f8b26SAnna Dabrowska} 48