xref: /plugin/dw2pdf/syntax/exportlink.php (revision 27ec7ad0b9cf59fb8f6790fbc9367ba794223a37)
1<?php
2/**
3 * DokuWiki Plugin dw2pdf (Syntax Component)
4 *
5 * For marking changes in page orientation.
6 *
7 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
8 * @author     Sam Wilson <sam@samwilson.id.au>
9 */
10/* Must be run within Dokuwiki */
11if(!defined('DOKU_INC')) die();
12
13/**
14 * Syntax for page specific directions for mpdf library
15 */
16class syntax_plugin_dw2pdf_exportlink extends DokuWiki_Syntax_Plugin {
17
18    /**
19     * Syntax Type
20     *
21     * Needs to return one of the mode types defined in $PARSER_MODES in parser.php
22     *
23     * @return string
24     */
25    public function getType() {
26        return 'substition';
27    }
28
29    /**
30     * Sort for applying this mode
31     *
32     * @return int
33     */
34    public function getSort() {
35        return 41;
36    }
37
38    /**
39     * @param string $mode
40     */
41    public function connectTo($mode) {
42        $this->Lexer->addSpecialPattern('~~PDFNS>(?:.*?)\|(?:.*?)~~', $mode, 'plugin_dw2pdf_exportlink');
43    }
44
45    /**
46     * Handler to prepare matched data for the rendering process
47     *
48     * @param   string       $match   The text matched by the patterns
49     * @param   int          $state   The lexer state for the match
50     * @param   int          $pos     The character position of the matched text
51     * @param   Doku_Handler $handler The Doku_Handler object
52     * @return  bool|array Return an array with all data you want to use in render, false don't add an instruction
53     */
54    public function handle($match, $state, $pos, Doku_Handler $handler) {
55        global $ID;
56        $ns = substr($match,8,strpos($match,'|')-8);
57        $id = $ns . ':start';
58        $title = substr($match,strpos($match,'|')+1,-2);
59        $resolver = new PageResolver($ID);
60        $page = $resolver->resolveId($id);
61        $ns = getNS($page);
62        $link = '?do=export_pdfns&book_ns=' . $ns . '&book_title=' . $title;
63
64        // check if there is an ampersand in the title
65        $amp = strpos($title,'&');
66        if ($amp !== false) {
67            $title = substr($title,0,$amp);
68        }
69
70        return array('link' => $link, 'title' => sprintf($this->getLang('export_ns'),$ns,$title),$state, $pos);
71    }
72
73    /**
74     * Handles the actual output creation.
75     *
76     * @param string        $mode     output format being rendered
77     * @param Doku_Renderer $renderer the current renderer object
78     * @param array         $data     data created by handler()
79     * @return  boolean                 rendered correctly? (however, returned value is not used at the moment)
80     */
81    public function render($mode, Doku_Renderer $renderer, $data) {
82        if($mode == 'xhtml' && !is_a($renderer,'renderer_plugin_dw2pdf')) {
83            $renderer->internallink($data['link'],$data['title']);
84            return true;
85        }
86        return false;
87    }
88
89}
90