xref: /plugin/ireadit/syntax/ireadit.php (revision fcd65f6a2875c28f10ba00bd91f6818b584e1443)
1ce9be9e9SSzymon Olewniczak<?php
2ce9be9e9SSzymon Olewniczak// must be run within DokuWiki
3ce9be9e9SSzymon Olewniczakif (!defined('DOKU_INC')) die();
4ce9be9e9SSzymon Olewniczak
5ce9be9e9SSzymon Olewniczak/**
6ce9be9e9SSzymon Olewniczak * All DokuWiki plugins to extend the parser/rendering mechanism
7ce9be9e9SSzymon Olewniczak * need to inherit from this class
8ce9be9e9SSzymon Olewniczak */
9ce9be9e9SSzymon Olewniczakclass syntax_plugin_ireadit_ireadit extends DokuWiki_Syntax_Plugin
10ce9be9e9SSzymon Olewniczak{
11ce9be9e9SSzymon Olewniczak    function getPType()
12ce9be9e9SSzymon Olewniczak    {
13ce9be9e9SSzymon Olewniczak        return 'block';
14ce9be9e9SSzymon Olewniczak    }
15ce9be9e9SSzymon Olewniczak
16ce9be9e9SSzymon Olewniczak    function getType()
17ce9be9e9SSzymon Olewniczak    {
18ce9be9e9SSzymon Olewniczak        return 'substition';
19ce9be9e9SSzymon Olewniczak    }
20ce9be9e9SSzymon Olewniczak
21ce9be9e9SSzymon Olewniczak    function getSort()
22ce9be9e9SSzymon Olewniczak    {
23ce9be9e9SSzymon Olewniczak        return 99;
24ce9be9e9SSzymon Olewniczak    }
25ce9be9e9SSzymon Olewniczak
26ce9be9e9SSzymon Olewniczak    function connectTo($mode)
27ce9be9e9SSzymon Olewniczak    {
28ce9be9e9SSzymon Olewniczak        $this->Lexer->addSpecialPattern('~~IREADIT.*?~~', $mode, 'plugin_ireadit_ireadit');
29ce9be9e9SSzymon Olewniczak    }
30ce9be9e9SSzymon Olewniczak
31ce9be9e9SSzymon Olewniczak    function handle($match, $state, $pos, Doku_Handler $handler)
32ce9be9e9SSzymon Olewniczak    {
33ce9be9e9SSzymon Olewniczak        $match = trim(substr($match, strlen('~~IREADIT'), -2));
34ce9be9e9SSzymon Olewniczak        $splits = preg_split('/[\s:]+/', $match, -1, PREG_SPLIT_NO_EMPTY);
35ce9be9e9SSzymon Olewniczak
36ce9be9e9SSzymon Olewniczak        $users = [];
37ce9be9e9SSzymon Olewniczak        $groups = [];
38ce9be9e9SSzymon Olewniczak        foreach ($splits as $split) {
39ce9be9e9SSzymon Olewniczak            if ($split[0] == '@') {
40ce9be9e9SSzymon Olewniczak                $group = substr($split, 1);
41ce9be9e9SSzymon Olewniczak                $groups[] = $group;
42ce9be9e9SSzymon Olewniczak            } else {
43ce9be9e9SSzymon Olewniczak                $users[] = $split;
44ce9be9e9SSzymon Olewniczak            }
45ce9be9e9SSzymon Olewniczak        }
46ce9be9e9SSzymon Olewniczak        return ['users' => $users, 'groups' => $groups];
47ce9be9e9SSzymon Olewniczak    }
48ce9be9e9SSzymon Olewniczak
49ce9be9e9SSzymon Olewniczak    /**
50ce9be9e9SSzymon Olewniczak     * Render xhtml output or metadata
51ce9be9e9SSzymon Olewniczak     *
52ce9be9e9SSzymon Olewniczak     * @param string        $mode     Renderer mode (supported modes: xhtml)
53ce9be9e9SSzymon Olewniczak     * @param Doku_Renderer $renderer The renderer
54ce9be9e9SSzymon Olewniczak     * @param array         $data     The data from the handler() function
55ce9be9e9SSzymon Olewniczak     *
56ce9be9e9SSzymon Olewniczak     * @return bool If rendering was successful.
57ce9be9e9SSzymon Olewniczak     */
58ce9be9e9SSzymon Olewniczak
59ce9be9e9SSzymon Olewniczak    public function render($mode, Doku_Renderer $renderer, $data)
60ce9be9e9SSzymon Olewniczak    {
61ce9be9e9SSzymon Olewniczak        if (!$data) {
62ce9be9e9SSzymon Olewniczak            return false;
63ce9be9e9SSzymon Olewniczak        }
64ce9be9e9SSzymon Olewniczak
65ce9be9e9SSzymon Olewniczak        $method = "render_$mode";
66ce9be9e9SSzymon Olewniczak        if (method_exists($this, $method)) {
67ce9be9e9SSzymon Olewniczak            call_user_func([$this, $method], $renderer, $data);
68ce9be9e9SSzymon Olewniczak            return true;
69ce9be9e9SSzymon Olewniczak        }
70ce9be9e9SSzymon Olewniczak        return false;
71ce9be9e9SSzymon Olewniczak    }
72ce9be9e9SSzymon Olewniczak
73ce9be9e9SSzymon Olewniczak    /**
74ce9be9e9SSzymon Olewniczak     * Render metadata
75ce9be9e9SSzymon Olewniczak     *
76ce9be9e9SSzymon Olewniczak     * @param Doku_Renderer $renderer The renderer
77ce9be9e9SSzymon Olewniczak     * @param array         $data     The data from the handler() function
78ce9be9e9SSzymon Olewniczak     */
79ce9be9e9SSzymon Olewniczak    public function render_metadata(Doku_Renderer $renderer, $data)
80ce9be9e9SSzymon Olewniczak    {
81*fcd65f6aSSzymon Olewniczak        // add version number to avoid conflict with historical metadata
82*fcd65f6aSSzymon Olewniczak        $renderer->meta['plugin_ireadit=0.2'] = $data;
83ce9be9e9SSzymon Olewniczak    }
84ce9be9e9SSzymon Olewniczak}
85