18d8f8b26SAnna Dabrowska<?php 28d8f8b26SAnna Dabrowska 38d8f8b26SAnna Dabrowskanamespace dokuwiki\plugin\diagrams\parser; 48d8f8b26SAnna Dabrowska 50ec94f66SAndreas Gohruse dokuwiki\plugin\prosemirror\parser\Node; 68d8f8b26SAnna Dabrowska 7c949f2b3SAndreas Gohr/** 8c949f2b3SAndreas Gohr * Represents an embedded diagram 9c949f2b3SAndreas Gohr * 10c949f2b3SAndreas Gohr * Note: for mediafile diagrams the image node is reused 11c949f2b3SAndreas 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 24c949f2b3SAndreas 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 31c949f2b3SAndreas 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 } 38*44b3af04SAnna Dabrowska if (!empty($this->data['attrs']['width']) && !empty($this->data['attrs']['height'])) { 39*44b3af04SAnna Dabrowska $openingTag .= ' ' . $this->data['attrs']['width'] . 'x' . $this->data['attrs']['height']; 40*44b3af04SAnna Dabrowska } 41*44b3af04SAnna Dabrowska if (!empty($this->data['attrs']['title'])) { 42*44b3af04SAnna Dabrowska $openingTag .= ' |' . $this->data['attrs']['title']; 43*44b3af04SAnna Dabrowska } 440ec94f66SAndreas Gohr $openingTag .= '>'; 450ec94f66SAndreas Gohr 463d6886fdSAndreas Gohr $svg = $this->data['attrs']['url']; 470ec94f66SAndreas Gohr if (substr($svg, 0, 26) !== 'data:image/svg+xml;base64,') { 480ec94f66SAndreas Gohr throw new \Exception('bad data uri "' . substr($svg, 0, 26) . '"'); 490ec94f66SAndreas Gohr } 500ec94f66SAndreas Gohr $svg = base64_decode(substr($svg, 26)); 510ec94f66SAndreas Gohr return $openingTag . $svg . "</diagram>"; 520ec94f66SAndreas Gohr } 538d8f8b26SAnna Dabrowska} 54