1*8a822cc1SAndreas Gohr<?php 2*8a822cc1SAndreas Gohr 3*8a822cc1SAndreas Gohr/** 4*8a822cc1SAndreas Gohr * Class syntax_plugin_diagrams 5*8a822cc1SAndreas Gohr */ 6*8a822cc1SAndreas Gohrclass syntax_plugin_diagrams_embed extends DokuWiki_Syntax_Plugin { 7*8a822cc1SAndreas Gohr 8*8a822cc1SAndreas Gohr /** 9*8a822cc1SAndreas Gohr * @inheritdoc 10*8a822cc1SAndreas Gohr */ 11*8a822cc1SAndreas Gohr public function getType() 12*8a822cc1SAndreas Gohr { 13*8a822cc1SAndreas Gohr return 'substition'; 14*8a822cc1SAndreas Gohr } 15*8a822cc1SAndreas Gohr 16*8a822cc1SAndreas Gohr /** 17*8a822cc1SAndreas Gohr * @inheritdoc 18*8a822cc1SAndreas Gohr */ 19*8a822cc1SAndreas Gohr public function getSort() 20*8a822cc1SAndreas Gohr { 21*8a822cc1SAndreas Gohr return 319; 22*8a822cc1SAndreas Gohr } 23*8a822cc1SAndreas Gohr 24*8a822cc1SAndreas Gohr /** 25*8a822cc1SAndreas Gohr * @inheritdoc 26*8a822cc1SAndreas Gohr */ 27*8a822cc1SAndreas Gohr public function connectTo($mode) 28*8a822cc1SAndreas Gohr { 29*8a822cc1SAndreas Gohr $this->Lexer->addSpecialPattern('\{\{[^\}]+(?:\.svg)[^\}]*?\}\}',$mode,'plugin_diagrams_embed'); 30*8a822cc1SAndreas Gohr } 31*8a822cc1SAndreas Gohr 32*8a822cc1SAndreas Gohr /** 33*8a822cc1SAndreas Gohr * Parse SVG syntax into media data 34*8a822cc1SAndreas Gohr * 35*8a822cc1SAndreas Gohr * @param string $match 36*8a822cc1SAndreas Gohr * @param int $state 37*8a822cc1SAndreas Gohr * @param int $pos 38*8a822cc1SAndreas Gohr * @param Doku_Handler $handler 39*8a822cc1SAndreas Gohr * @return array|bool 40*8a822cc1SAndreas Gohr */ 41*8a822cc1SAndreas Gohr public function handle($match, $state, $pos, Doku_Handler $handler) 42*8a822cc1SAndreas Gohr { 43*8a822cc1SAndreas Gohr return Doku_Handler_Parse_Media($match); 44*8a822cc1SAndreas Gohr } 45*8a822cc1SAndreas Gohr 46*8a822cc1SAndreas Gohr /** 47*8a822cc1SAndreas Gohr * Render the diagram SVG as <object> instead of <img> to allow links, 48*8a822cc1SAndreas Gohr * except when rendering to a PDF 49*8a822cc1SAndreas Gohr * 50*8a822cc1SAndreas Gohr * @param string $format 51*8a822cc1SAndreas Gohr * @param Doku_Renderer $renderer 52*8a822cc1SAndreas Gohr * @param array $data 53*8a822cc1SAndreas Gohr * @return bool 54*8a822cc1SAndreas Gohr */ 55*8a822cc1SAndreas Gohr public function render($format, Doku_Renderer $renderer, $data) 56*8a822cc1SAndreas Gohr { 57*8a822cc1SAndreas Gohr if ($format !== 'xhtml') return false; 58*8a822cc1SAndreas Gohr 59*8a822cc1SAndreas Gohr if(is_a($renderer, 'renderer_plugin_dw2pdf')) { 60*8a822cc1SAndreas Gohr $imageAttributes = array( 61*8a822cc1SAndreas Gohr 'class' => 'media', 62*8a822cc1SAndreas Gohr 'src' => ml($data['src']), 63*8a822cc1SAndreas Gohr 'width' => $data['width'], 64*8a822cc1SAndreas Gohr 'height' => $data['height'], 65*8a822cc1SAndreas Gohr 'align' => $data['align'], 66*8a822cc1SAndreas Gohr 'title' => $data['title'] 67*8a822cc1SAndreas Gohr ); 68*8a822cc1SAndreas Gohr $renderer->doc .= '<img '. buildAttributes($imageAttributes) . '/>'; 69*8a822cc1SAndreas Gohr } else { 70*8a822cc1SAndreas Gohr $width = $data['width'] ? 'width="' . $data['width'] . '"' : ''; 71*8a822cc1SAndreas Gohr $height = $data['height'] ? 'height="' . $data['height'] . '"' : ''; 72*8a822cc1SAndreas Gohr $tag = '<object data="%s&cache=nocache" type="image/svg+xml" class="diagrams-svg media%s" %s %s></object>'; 73*8a822cc1SAndreas Gohr $renderer->doc .= sprintf($tag, ml($data['src']), $data['align'], $width, $height); 74*8a822cc1SAndreas Gohr } 75*8a822cc1SAndreas Gohr 76*8a822cc1SAndreas Gohr return true; 77*8a822cc1SAndreas Gohr } 78*8a822cc1SAndreas Gohr} 79