1e998e2c7SMichael Große<?php 2e998e2c7SMichael Große/** 3e998e2c7SMichael Große * DokuWiki Plugin dw2pdf (Syntax Component) 4e998e2c7SMichael Große * 5e998e2c7SMichael Große * For marking changes in page orientation. 6e998e2c7SMichael Große * 7e998e2c7SMichael Große * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 8e998e2c7SMichael Große * @author Sam Wilson <sam@samwilson.id.au> 9e998e2c7SMichael Große */ 10*1d0088a0SGerrit Uitslag 11*1d0088a0SGerrit Uitslaguse dokuwiki\File\PageResolver; 12e998e2c7SMichael Große 13e998e2c7SMichael Große/** 14e998e2c7SMichael Große * Syntax for page specific directions for mpdf library 15e998e2c7SMichael Große */ 16*1d0088a0SGerrit Uitslagclass syntax_plugin_dw2pdf_exportlink extends DokuWiki_Syntax_Plugin 17*1d0088a0SGerrit Uitslag{ 18e998e2c7SMichael Große 19e998e2c7SMichael Große /** 20e998e2c7SMichael Große * Syntax Type 21e998e2c7SMichael Große * 22e998e2c7SMichael Große * Needs to return one of the mode types defined in $PARSER_MODES in parser.php 23e998e2c7SMichael Große * 24e998e2c7SMichael Große * @return string 25e998e2c7SMichael Große */ 26*1d0088a0SGerrit Uitslag public function getType() 27*1d0088a0SGerrit Uitslag { 28e998e2c7SMichael Große return 'substition'; 29e998e2c7SMichael Große } 30e998e2c7SMichael Große 31e998e2c7SMichael Große /** 32e998e2c7SMichael Große * Sort for applying this mode 33e998e2c7SMichael Große * 34e998e2c7SMichael Große * @return int 35e998e2c7SMichael Große */ 36*1d0088a0SGerrit Uitslag public function getSort() 37*1d0088a0SGerrit Uitslag { 38e998e2c7SMichael Große return 41; 39e998e2c7SMichael Große } 40e998e2c7SMichael Große 41e998e2c7SMichael Große /** 42e998e2c7SMichael Große * @param string $mode 43e998e2c7SMichael Große */ 44*1d0088a0SGerrit Uitslag public function connectTo($mode) 45*1d0088a0SGerrit Uitslag { 463c71948fSMichael Große $this->Lexer->addSpecialPattern('~~PDFNS>(?:.*?)\|(?:.*?)~~', $mode, 'plugin_dw2pdf_exportlink'); 47e998e2c7SMichael Große } 48e998e2c7SMichael Große 49e998e2c7SMichael Große /** 50e998e2c7SMichael Große * Handler to prepare matched data for the rendering process 51e998e2c7SMichael Große * 52e998e2c7SMichael Große * @param string $match The text matched by the patterns 53e998e2c7SMichael Große * @param int $state The lexer state for the match 54e998e2c7SMichael Große * @param int $pos The character position of the matched text 55e998e2c7SMichael Große * @param Doku_Handler $handler The Doku_Handler object 56*1d0088a0SGerrit Uitslag * @return array Return an array with all data you want to use in render, false don't add an instruction 57e998e2c7SMichael Große */ 58*1d0088a0SGerrit Uitslag public function handle($match, $state, $pos, Doku_Handler $handler) 59*1d0088a0SGerrit Uitslag { 603c71948fSMichael Große global $ID; 61e998e2c7SMichael Große $ns = substr($match, 8, strpos($match, '|') - 8); 623c71948fSMichael Große $id = $ns . ':start'; 6327ec7ad0SGerrit Uitslag $resolver = new PageResolver($ID); 6427ec7ad0SGerrit Uitslag $page = $resolver->resolveId($id); 6527ec7ad0SGerrit Uitslag $ns = getNS($page); 66*1d0088a0SGerrit Uitslag $title = substr($match, strpos($match, '|') + 1, -2); 67555ef6f2SMichael Große $link = '?do=export_pdfns&book_ns=' . $ns . '&book_title=' . $title; 68743904e5SPhil Hopper 69743904e5SPhil Hopper // check if there is an ampersand in the title 70743904e5SPhil Hopper $amp = strpos($title, '&'); 71743904e5SPhil Hopper if ($amp !== false) { 72743904e5SPhil Hopper $title = substr($title, 0, $amp); 73743904e5SPhil Hopper } 74743904e5SPhil Hopper 75*1d0088a0SGerrit Uitslag return [ 76*1d0088a0SGerrit Uitslag 'link' => $link, 77*1d0088a0SGerrit Uitslag 'title' => sprintf($this->getLang('export_ns'), $ns, $title), 78*1d0088a0SGerrit Uitslag $state, 79*1d0088a0SGerrit Uitslag $pos 80*1d0088a0SGerrit Uitslag ]; 81e998e2c7SMichael Große } 82e998e2c7SMichael Große 83e998e2c7SMichael Große /** 84e998e2c7SMichael Große * Handles the actual output creation. 85e998e2c7SMichael Große * 86*1d0088a0SGerrit Uitslag * @param string $format output format being rendered 87e998e2c7SMichael Große * @param Doku_Renderer $renderer the current renderer object 88e998e2c7SMichael Große * @param array $data data created by handler() 89e998e2c7SMichael Große * @return boolean rendered correctly? (however, returned value is not used at the moment) 90e998e2c7SMichael Große */ 91*1d0088a0SGerrit Uitslag public function render($format, Doku_Renderer $renderer, $data) 92*1d0088a0SGerrit Uitslag { 93*1d0088a0SGerrit Uitslag if ($format == 'xhtml' && !is_a($renderer, 'renderer_plugin_dw2pdf')) { 943c71948fSMichael Große $renderer->internallink($data['link'], $data['title']); 95e998e2c7SMichael Große return true; 96e998e2c7SMichael Große } 97e998e2c7SMichael Große return false; 98e998e2c7SMichael Große } 99e998e2c7SMichael Große 100e998e2c7SMichael Große} 101