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