source: spip-zone/_plugins_/coloration_code/trunk/inc/spip_geshi.php @ 102955

Last change on this file since 102955 was 102955, checked in by erational@…, 3 years ago

On ajoute aussi la CSS personnalisée dans l'espace public
Un peu de PSR aussi

File size: 3.6 KB
Line 
1<?php
2
3/**
4 * Surcharge de la classe GESHI 1.0.8
5 *
6**/
7
8if (!defined('_ECRIRE_INC_VERSION')) {
9        return;
10}
11
12include_spip('geshi/geshi');
13
14// a la sauce GESHI
15define('SPIP_GESHI_REGEXP_FUNCTION', 99);
16
17
18
19class SPIP_GeSHi extends GeSHi {
20
21        // fonction de traitement de certaines regexp spip
22        var $_hmr_func = '';
23
24        /**
25         * Cette surcharge implemente simplement
26         * une nouvelle cle dans $language_data
27         * intitulee 'SPIP_GESHI_COLOR_FUNCTION' permettant d'appeler une fonction
28         * existante avec le code source a colorier, utilise dans la declaration geshi/spip3.php
29         *
30         * Cette fonction doit retourner le code avec les instructions
31         * en plus de geshi pour colorier, qui sont des choses comme :
32         * <| class="br0">contenu|>
33         */
34        function parse_non_string_part($stuff_to_parse) {
35
36                // Fonction de coloration definie
37                // doit s'occuper de retourner des <| et d'echapper les textes (hsc)
38                if (isset($this->language_data['SPIP_GESHI_COLOR_FUNCTION']) and $this->language_data['SPIP_GESHI_COLOR_FUNCTION']) {
39                        $parse = $this->language_data['SPIP_GESHI_COLOR_FUNCTION'];
40                        $stuff_to_parse = $parse($stuff_to_parse);
41                        # on reprend le minimum syndical de parse_non_string_part()
42                        # en esperant que ca suffise pour ce qu'on a a faire.
43                        # Ca semble que c'est ok.
44                        $stuff_to_parse = str_replace('<|', '<span', $stuff_to_parse);
45                        $stuff_to_parse = str_replace ( '|>', '</span>', $stuff_to_parse );
46                        return $stuff_to_parse;
47                }
48
49                return parent::parse_non_string_part($stuff_to_parse);
50        }
51
52
53        /**
54         * Cette surcharge implemente simplement
55         * une nouvelle cle dans le tableau de declaration d'une REGEXP
56         * permettant de passer une fonction via la cle SPIP_GESHI_REGEXP_FUNCTION.
57         * Cette fonction, si presente, sera appelee avec
58         * le resultat du match de la regexp, a la place des traitements
59         * habituels de GESHI, et doit alors retourner le code attendu par GESHI,
60         * a savoir quelque chose comme : "avant <|!REG3XP31!>contenu|> apres"
61         *
62         * Cette possibilite est utilise dans geshi/spip2.php
63         */
64        function handle_multiline_regexps($matches) {
65                $key = $this->_hmr_key;
66                if (  is_array($this->language_data['REGEXPS'][$key])
67                  and isset($this->language_data['REGEXPS'][$key][SPIP_GESHI_REGEXP_FUNCTION])
68                  and $func = $this->language_data['REGEXPS'][$key][SPIP_GESHI_REGEXP_FUNCTION]) {
69
70                        if (function_exists($func)) {
71                                return $func($matches, $this);
72                        }
73                        spip_log("$func inexistante dans this->language_data['REGEXPS'][$key]=" . var_export($this->language_data['REGEXPS'][$key],true), "geshi" . _LOG_ERREUR);
74                }
75
76                return parent::handle_multiline_regexps($matches);
77        }
78
79
80        /**
81         * Cette surcharge d'une surcharge de Geshi
82         * implemente pour le non multiligne la meme chose que
83         * pour handle_multiline_regexps() du dessus
84         *
85        **/
86        function handle_singleline_regexps($stuff_to_parse, $regexp, $key) {
87
88                if (  is_array($regexp)
89                  and isset($regexp[SPIP_GESHI_REGEXP_FUNCTION])
90                  and $func = $regexp[SPIP_GESHI_REGEXP_FUNCTION]
91                  and function_exists($func)) {
92
93                        $this->_hmr_key  = $key;
94                        $this->_hmr_func = $func;
95
96                        $stuff_to_parse = preg_replace_callback(
97                                '/' . $regexp[GESHI_SEARCH] . '/' . $regexp[GESHI_MODIFIERS],
98                                array($this, 'handle_singleline_regexps_bis'),
99                                $stuff_to_parse);
100
101                        $this->_hmr_func = '';
102
103                        return $stuff_to_parse;
104                }
105
106                return parent::handle_singleline_regexps($stuff_to_parse, $regexp, $key);
107        }
108
109
110
111        /**
112         * Renvoyer sur la fonction du colorieur SPIP demandee
113         *
114        **/
115        function handle_singleline_regexps_bis($matches) {
116                $func = $this->_hmr_func;
117                if (!$func or !function_exists($func)) {
118                        return '';
119                }
120                return $func($matches, $this);
121        }
122
123}
124
Note: See TracBrowser for help on using the repository browser.