xref: /plugin/dw2pdf/syntax/exportlink.php (revision 852931daed0aa7c73fc4da5d421d2c117decf509)
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