1e998e2c7SMichael Große<?php 2*852931daSAndreas Gohr 3e998e2c7SMichael Große/** 4e998e2c7SMichael Große * DokuWiki Plugin dw2pdf (Syntax Component) 5e998e2c7SMichael Große * 6e998e2c7SMichael Große * For marking changes in page orientation. 7e998e2c7SMichael Große * 8e998e2c7SMichael Große * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 9e998e2c7SMichael Große * @author Sam Wilson <sam@samwilson.id.au> 10e998e2c7SMichael Große */ 111d0088a0SGerrit Uitslag 12*852931daSAndreas Gohruse dokuwiki\Extension\SyntaxPlugin; 131d0088a0SGerrit Uitslaguse dokuwiki\File\PageResolver; 14e998e2c7SMichael Große 15e998e2c7SMichael Große/** 16e998e2c7SMichael Große * Syntax for page specific directions for mpdf library 17e998e2c7SMichael Große */ 18*852931daSAndreas Gohrclass syntax_plugin_dw2pdf_exportlink extends SyntaxPlugin 191d0088a0SGerrit Uitslag{ 20e998e2c7SMichael Große /** 21e998e2c7SMichael Große * Syntax Type 22e998e2c7SMichael Große * 23e998e2c7SMichael Große * Needs to return one of the mode types defined in $PARSER_MODES in parser.php 24e998e2c7SMichael Große * 25e998e2c7SMichael Große * @return string 26e998e2c7SMichael Große */ 271d0088a0SGerrit Uitslag public function getType() 281d0088a0SGerrit Uitslag { 29e998e2c7SMichael Große return 'substition'; 30e998e2c7SMichael Große } 31e998e2c7SMichael Große 32e998e2c7SMichael Große /** 33e998e2c7SMichael Große * Sort for applying this mode 34e998e2c7SMichael Große * 35e998e2c7SMichael Große * @return int 36e998e2c7SMichael Große */ 371d0088a0SGerrit Uitslag public function getSort() 381d0088a0SGerrit Uitslag { 39e998e2c7SMichael Große return 41; 40e998e2c7SMichael Große } 41e998e2c7SMichael Große 42e998e2c7SMichael Große /** 43e998e2c7SMichael Große * @param string $mode 44e998e2c7SMichael Große */ 451d0088a0SGerrit Uitslag public function connectTo($mode) 461d0088a0SGerrit Uitslag { 473c71948fSMichael Große $this->Lexer->addSpecialPattern('~~PDFNS>(?:.*?)\|(?:.*?)~~', $mode, 'plugin_dw2pdf_exportlink'); 48e998e2c7SMichael Große } 49e998e2c7SMichael Große 50e998e2c7SMichael Große /** 51e998e2c7SMichael Große * Handler to prepare matched data for the rendering process 52e998e2c7SMichael Große * 53e998e2c7SMichael Große * @param string $match The text matched by the patterns 54e998e2c7SMichael Große * @param int $state The lexer state for the match 55e998e2c7SMichael Große * @param int $pos The character position of the matched text 56e998e2c7SMichael Große * @param Doku_Handler $handler The Doku_Handler object 571d0088a0SGerrit Uitslag * @return array Return an array with all data you want to use in render, false don't add an instruction 58e998e2c7SMichael Große */ 591d0088a0SGerrit Uitslag public function handle($match, $state, $pos, Doku_Handler $handler) 601d0088a0SGerrit Uitslag { 613c71948fSMichael Große global $ID; 62e998e2c7SMichael Große $ns = substr($match, 8, strpos($match, '|') - 8); 633c71948fSMichael Große $id = $ns . ':start'; 6427ec7ad0SGerrit Uitslag $resolver = new PageResolver($ID); 6527ec7ad0SGerrit Uitslag $page = $resolver->resolveId($id); 6627ec7ad0SGerrit Uitslag $ns = getNS($page); 671d0088a0SGerrit Uitslag $title = substr($match, strpos($match, '|') + 1, -2); 68555ef6f2SMichael Große $link = '?do=export_pdfns&book_ns=' . $ns . '&book_title=' . $title; 69743904e5SPhil Hopper 70743904e5SPhil Hopper // check if there is an ampersand in the title 71743904e5SPhil Hopper $amp = strpos($title, '&'); 72743904e5SPhil Hopper if ($amp !== false) { 73743904e5SPhil Hopper $title = substr($title, 0, $amp); 74743904e5SPhil Hopper } 75743904e5SPhil Hopper 761d0088a0SGerrit Uitslag return [ 771d0088a0SGerrit Uitslag 'link' => $link, 781d0088a0SGerrit Uitslag 'title' => sprintf($this->getLang('export_ns'), $ns, $title), 791d0088a0SGerrit Uitslag $state, 801d0088a0SGerrit Uitslag $pos 811d0088a0SGerrit Uitslag ]; 82e998e2c7SMichael Große } 83e998e2c7SMichael Große 84e998e2c7SMichael Große /** 85e998e2c7SMichael Große * Handles the actual output creation. 86e998e2c7SMichael Große * 871d0088a0SGerrit Uitslag * @param string $format output format being rendered 88e998e2c7SMichael Große * @param Doku_Renderer $renderer the current renderer object 89e998e2c7SMichael Große * @param array $data data created by handler() 90e998e2c7SMichael Große * @return boolean rendered correctly? (however, returned value is not used at the moment) 91e998e2c7SMichael Große */ 921d0088a0SGerrit Uitslag public function render($format, Doku_Renderer $renderer, $data) 931d0088a0SGerrit Uitslag { 941d0088a0SGerrit Uitslag if ($format == 'xhtml' && !is_a($renderer, 'renderer_plugin_dw2pdf')) { 953c71948fSMichael Große $renderer->internallink($data['link'], $data['title']); 96e998e2c7SMichael Große return true; 97e998e2c7SMichael Große } 98e998e2c7SMichael Große return false; 99e998e2c7SMichael Große } 100e998e2c7SMichael Große} 101