Changeset 60666 in spip-zone for _plugins_/coloration_code/trunk/inc


Ignore:
Timestamp:
Apr 25, 2012, 10:11:18 PM (8 years ago)
Author:
marcimat@…
Message:

Les expressions régulières, c'est d'un complexe !

Alors, au programme du colorieur SPIP par défaut

  • on corrige la recherche de critères de boucle lorsqu'ils ont les accolades à l'intérieur
  • on permet de colorer différemment les critères et les paramètres de balises ou filtres, et cela en echappant les accolades des critères le temps de chercher les paramètres. On ajoute pour ce faire un petit hack dans Geshi pour indiquer que l'on peut utiliser une fonction de callback différente de la sienne. Cette fonction doit retourner un code préparé comme geshi attend, évidemment.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/coloration_code/trunk/inc/spip_geshi.php

    r60585 r60666  
    88include_spip('geshi/geshi');
    99
     10// a la sauce GESHI
     11define('SPIP_GESHI_REGEXP_FUNCTION', 99);
     12
     13
     14
    1015class SPIP_GeSHi extends GeSHi {
    1116
    12     /**
    13     * Cette surcharge implemente simplement
    14     * une nouvelle cle dans $language_data
    15     * intitulee 'SPIP_GESHI_COLOR_FUNCTION' permettant d'appeler une fonction
    16     * existante avec le code source a colorier, utilise dans la declaration geshi/spip3.php
    17     *
    18     * Cette fonction doit retourner le code avec les instructions
    19     * en plus de geshi pour colorier, qui sont des choses comme :
    20     * <| class="br0">contenu|>
    21     */
    22     function parse_non_string_part($stuff_to_parse) {
     17        /**
     18        * Cette surcharge implemente simplement
     19        * une nouvelle cle dans $language_data
     20        * intitulee 'SPIP_GESHI_COLOR_FUNCTION' permettant d'appeler une fonction
     21        * existante avec le code source a colorier, utilise dans la declaration geshi/spip3.php
     22        *
     23        * Cette fonction doit retourner le code avec les instructions
     24        * en plus de geshi pour colorier, qui sont des choses comme :
     25        * <| class="br0">contenu|>
     26        */
     27        function parse_non_string_part($stuff_to_parse) {
    2328
    24         // Fonction de coloration definie
    25         // doit s'occuper de retourner des <| et d'echapper les textes (hsc)
    26         if (isset($this->language_data['SPIP_GESHI_COLOR_FUNCTION']) and $this->language_data['SPIP_GESHI_COLOR_FUNCTION']) {
    27             $parse = $this->language_data['SPIP_GESHI_COLOR_FUNCTION'];
    28             $stuff_to_parse = $parse($stuff_to_parse);
    29             # on reprend le minimum syndical de parse_non_string_part()
    30             # en esperant que ca suffise pour ce qu'on a a faire.
    31             # Ca semble que c'est ok.
    32             $stuff_to_parse = str_replace('<|', '<span', $stuff_to_parse);
    33             $stuff_to_parse = str_replace ( '|>', '</span>', $stuff_to_parse );
    34             return $stuff_to_parse;
    35         }
     29                // Fonction de coloration definie
     30                // doit s'occuper de retourner des <| et d'echapper les textes (hsc)
     31                if (isset($this->language_data['SPIP_GESHI_COLOR_FUNCTION']) and $this->language_data['SPIP_GESHI_COLOR_FUNCTION']) {
     32                        $parse = $this->language_data['SPIP_GESHI_COLOR_FUNCTION'];
     33                        $stuff_to_parse = $parse($stuff_to_parse);
     34                        # on reprend le minimum syndical de parse_non_string_part()
     35                        # en esperant que ca suffise pour ce qu'on a a faire.
     36                        # Ca semble que c'est ok.
     37                        $stuff_to_parse = str_replace('<|', '<span', $stuff_to_parse);
     38                        $stuff_to_parse = str_replace ( '|>', '</span>', $stuff_to_parse );
     39                        return $stuff_to_parse;
     40                }
    3641
    37         return parent::parse_non_string_part($stuff_to_parse);
    38     }
     42                return parent::parse_non_string_part($stuff_to_parse);
     43        }
    3944
    40    
     45
     46        /**
     47         * Cette surcharge implemente simplement
     48         * une nouvelle cle dans le tableau de declaration d'une REGEXP
     49         * permettant de passer une fonction via la cle SPIP_GESHI_REGEXP_FUNCTION.
     50         * Cette fonction, si presente, sera appelee avec
     51         * le resultat du match de la regexp, a la place des traitements
     52         * habituels de GESHI, et doit alors retourner le code attendu par GESHI,
     53         * a savoir quelque chose comme : "avant <|!REG3XP31!>contenu|> apres"
     54         *
     55         * Cette possibilite est utilise dans geshi/spip2.php
     56         */
     57        function handle_multiline_regexps($matches) {
     58                $key = $this->_hmr_key;
     59                if (    isset($this->language_data['REGEXPS'][$key][SPIP_GESHI_REGEXP_FUNCTION])
     60                  and $func = $this->language_data['REGEXPS'][$key][SPIP_GESHI_REGEXP_FUNCTION]) {
     61                        return $func($matches, $this);
     62                }
     63
     64                return parent::handle_multiline_regexps($matches);
     65        }
    4166}
    4267
Note: See TracChangeset for help on using the changeset viewer.