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