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