1<?php
2/**
3 * @license    http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html
4 * @author     Francois Merciol <dokuplugin@merciol.fr>
5 *
6 * INSEE city: code database
7 */
8
9if (!defined ('DOKU_INC'))
10    define ('DOKU_INC', realpath (__DIR__.'/../../../').'/');
11if (!defined ('DOKU_PLUGIN'))
12    define ('DOKU_PLUGIN', DOKU_INC.'lib/plugins/');
13require_once(DOKU_PLUGIN.'syntax.php');
14
15// ============================================================
16class syntax_plugin_inseecity extends DokuWiki_Syntax_Plugin {
17
18    // ============================================================
19    function getType () { return 'substition'; }
20    function getPType () { return 'block'; }
21    function getSort () { return 299; }
22    function connectTo ($mode) {
23        $this->Lexer->addSpecialPattern ('\{\{inseecity[^}]*\}\}', $mode, 'plugin_inseecity');
24    }
25
26    // ============================================================
27    function handle ($match, $state, $pos, Doku_Handler $handler) {
28        switch ($state) {
29        case DOKU_LEXER_SPECIAL :
30            return array ($state, trim (substr ($match, 11, -2))); // "{{inseecity" => 11 "}}" => 2
31        }
32        return false;
33    }
34
35    // ============================================================
36    function render ($mode, Doku_Renderer $renderer, $indata) {
37        $dumy = "";
38        if (empty($indata))
39            return false;
40        if ($mode != 'xhtml')
41            return false;
42        list ($instr, $data) = $indata;
43        switch ($instr) {
44        case DOKU_LEXER_SPECIAL :
45            $args = " ".$data." ";
46            if (preg_match_all ("#(\"[^\"]*\")* help (\"[^\"]*\")*#", strtolower ($args), $dumy) > 0) {
47                $renderer->doc .= $this->inseeHelp ();
48                return true;
49            }
50            if (preg_match_all ("#(\"[^\"]*\")* test (\"[^\"]*\")*#", strtolower ($args), $dumy) > 0) {
51                $renderer->doc .= $this->inseeTest ();
52                return true;
53            }
54            // XXX ???
55        }
56        return true;
57    }
58
59    // ============================================================
60    function inseeHelp () {
61        $url = "http://admin.parlenet.org/plugins/insee/";
62        return
63            '<h1>Help INSEE</h1>'.NL.
64            '<ul>'.NL.
65            ' <li><b>{{inseecity</b> help <b>}}</b></li>'.NL.
66            ' <li><b>{{inseecity</b> test <b>}}</b></li>'.NL.
67            '</ul>'.NL.
68            '<p><a class="urlextern" rel="nofollow" title="'.$url.'" href="'.$url.'">'.$url.'</a></p>'.NL;
69    }
70
71    // ============================================================
72    function inseeTest () {
73        return
74            '<div>'.NL.
75            ' test <form class="insee">'.NL.
76            '  <input type="text" name="city" />'.NL.
77            ' </form>'.NL.
78            '</div>'.NL;
79    }
80
81    // ============================================================
82}
83