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