Changeset 60585 in spip-zone for _plugins_/coloration_code


Ignore:
Timestamp:
Apr 23, 2012, 8:49:43 PM (8 years ago)
Author:
marcimat@…
Message:

1) correction des sauts de lignes qui étaient mangés ! Ce n'est pas geshi, mais une regexp un rien gourmande avant l'appel de geshi qui s'appliquait à toutes les lignes au lieu de tout le code.

2) un nouveau colorieur :

On tente un nouveau colorieur un peu spécial pour spip. <cadre class='spip3'> pour le tester.

Ce colorieur utilise le décompilateur de SPIP pour reformater le code en ajoutant les éléments de coloration pour GESHI lui-même.
Avantage : On peut être très précis dans la coloration, et trouver les [ et ( ou ) et ] des balises mêmes imbriqués de façon tordue. Le seul endroit pas très précis est les critères de balises qui ne semblent pas phrasés dans l'AST, ou du moins pas avec le phraseur à ce niveau.

Inconvénient (et il est assez embêtant) : le code est reformaté. Le code est reproduit à partir de l'AST (arbre d'analyse du code d'un squelette) de SPIP, mais il est du coup pas forcément fidèle à ce qui y était. Par exemple :

  • les sauts de lignes entre critères de boucle disparaissent
  • les espaces ou non entre arguments séparés par des virgules sont unifiés {env,ajax, id_article} devient {env, ajax, id_article} (on pourrait choisir sans espace, mais on perd l'info source de savoir s'il y en avait un, plusieurs ou pas)
  • on perd la casse de la table de la boucle (ARTICLES) devient (articles)
  • <INCLURE qui accepte (fichier) ou {fond=fichier} ne sortira qu'un seul des 2 propositions (là c'est (fichier) dans ce que j'ai mis dans le code)
  • et certainements d'autres choses que je n'ai pas encore vues.
Location:
_plugins_/coloration_code/trunk
Files:
4 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/coloration_code/trunk/coloration_code_fonctions.php

    r60305 r60585  
    5858        if ($cadre == 'cadre')
    5959                $englobant = 'div';
    60                
     60
    6161        // Supprime le premier et le dernier retour chariot
    62         $code = preg_replace("/^(\r\n|\n|\r)/m", "", $code);
    63         $code = preg_replace("/(\r\n|\n|\r)$/m", "", $code);
     62        $code = preg_replace("/^(\r\n|\n|\r)*/", "", $code);
     63        $code = preg_replace("/(\r\n|\n|\r)*$/", "", $code);
    6464
    6565        $params = explode(' ', $language);
     
    6868        if ($language=='spip') $language = PLUGIN_COLORATION_CODE_COLORIEUR_SPIP;
    6969       
    70         include_spip('geshi/geshi');
     70        include_spip('inc/spip_geshi');
    7171        //
    7272        // Create a GeSHi object
    7373        //
    74         $geshi = new GeSHi($code, $language);
     74        $geshi = new SPIP_GeSHi($code, $language);
    7575        if ($geshi->error()) {
    7676                return false;
  • _plugins_/coloration_code/trunk/geshi/geshi.php

    r60569 r60585  
    30663066                    }
    30673067                }
     3068
    30683069                // Parse the last bit
    30693070                $result .= $this->parse_non_string_part($stuff_to_parse);
  • _plugins_/coloration_code/trunk/geshi/geshi/spip2.php

    r60564 r60585  
    11<?php
    22/*************************************************************************************
    3  * xml.php
     3 * spip.php
    44 * -------
    5  * Author: Nigel McNie (oracle.shinoda@gmail.com)
     5 * Author: Collectif SPIP
    66 * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
    77 * Release Version: 1.0.7.6
    88 * CVS Revision Version: $Revision: 1.10 $
    9  * Date Started: 2004/09/01
    10  * Last Modified: $Date: 2005/12/30 04:52:10 $
    11  *
    12  * XML language file for GeSHi. Based on the idea/file by Christian Weiske
    13  *
    14  * CHANGES
    15  * -------
    16  * 2005/12/28 (1.0.2)
    17  *   -  Removed escape character for strings
    18  * 2004/11/27 (1.0.1)
    19  *   -  Added support for multiple object splitters
    20  * 2004/10/27 (1.0.0)
    21  *   -  First Release
    22  *
    23  * TODO (updated 2004/11/27)
    24  * -------------------------
    25  * * Check regexps work and correctly highlight XML stuff and nothing else
    26  *
     9 *
    2710 *************************************************************************************
    2811 *
     
    5336
    5437// criteres | arguments : {critere > 0} {critere = #ENV{truc}}
    55 @define('REG_CRITERES', '\{(\s*(?:([^\{\}]+)|(?R))*\s*)\}');
     38@define('REG_CRITERES', '\{(\s*(?:([^{}]+)|(?R))*\s*)\}');
     39// la meme chose sans etre capturant
     40#@define('REG_CRITERES_TOUT', '\{(?:\s*(?:(?:[^{}]+)|(?R))*\s*)\}');
     41@define('REG_CRITERES_TOUT', '\{(?:\s*(?:(?>[^{}]+)|(?R))*\s*)\}');
    5642
    5743// Remplacements de Regexp par GESHI
     
    10389// |filtre |class::methode
    10490@define('REG_NOM_FILTRE', '(<PIPE>[a-z_=!<>?][a-z0-9_=]*(::[a-z0-9_]*)?)');
     91// la meme chose, mais sans etre capturant.
     92@define('REG_NOM_FILTRE_TOUT', '(?:<PIPE>[a-z_=!<>?][a-z0-9_=]*(?:::[a-z0-9_]*)?)');
    10593
    10694// #BALISE
    10795@define('REG_BALISE','(\#)(' . REG_NOM_BOUCLE . ':)?([A-Z0-9_]+)([*]{0,2})');
     96// la meme chose, mais sans etre capturant.
     97@define('REG_BALISE_TOUT','(?:\#)(?:' . REG_NOM_BOUCLE . ':)?(?:[A-Z0-9_]+)(?:[*]{0,2})');
     98
    10899
    109100// /!\ pas encore au point
    110 @define('REG_BALISE_COMPLET_START', '((\[)[^\[]*(\())'); // [ ... (
    111 @define('REG_BALISE_COMPLET_STOP',  '((\))[^\]]*(\]))'); // ) ... ]
     101@define('REG_BALISE_AVANT', '[^\[]*');
     102@define('REG_BALISE_APRES', '[^\]]*');
     103@define('REG_BALISE_COMPLET_START', '(\[)(' . REG_BALISE_AVANT . ')(\()'); // [ ... (
     104@define('REG_BALISE_COMPLET_STOP',  '(\))(' . REG_BALISE_APRES . ')(\])'); // ) ... ]
     105// Attention a ne pas avoir plus de 9 parentheses capturantes car on ne peut pas ecrire \\10
    112106@define('REG_BALISE_COMPLET',
    113           REG_BALISE_COMPLET_START // [ ... (
    114         . '(' . REG_BALISE . ')' // #BALISE
    115         . '(?:' . REG_NOM_FILTRE . '?' . REG_CRITERES . '?)*' // {arguments} |filtre{criteres}
    116         . REG_BALISE_COMPLET_STOP); // ) ... ]
     107          REG_BALISE_COMPLET_START . '(' // [ ... (
     108        . '(?:' . REG_BALISE_TOUT . ')' // #BALISE
     109        . '(?:(?:' . REG_NOM_FILTRE_TOUT . '?' . REG_CRITERES_TOUT . '?)*)' // {arguments} |filtre{criteres}
     110        . ')' . REG_BALISE_COMPLET_STOP ); // ) ... ]
    117111
    118112
     
    164158                        40 => 'color: #74B900;', // critere de boucle ou de balise
    165159                        50 => 'color: #E1861A;', // filtres de balise
     160
     161                        99 => 'color: #FF001E; font-weight:bold;', // [ ( et ) ]
    166162                        )
    167163                ),
     
    175171                99 => array(
    176172                        GESHI_SEARCH => REG_BALISE_COMPLET,
    177                         GESHI_REPLACE => '',
    178                         GESHI_MODIFIERS => '',
    179                         GESHI_BEFORE => '',
    180                         GESHI_AFTER => ''
    181                         ),
    182 */
     173                        GESHI_REPLACE => '\\1',
     174                        GESHI_MODIFIERS => '',
     175                        GESHI_BEFORE => '',
     176                        GESHI_AFTER => '\\2\\3\\4\\5\\6\\7'
     177                        ),*/
     178
    183179                // Balise (#nom:TITRE**) (les etoiles)
    184180                0 => array(
     
    210206                // il encadre ses trouvailles de <|!REG3XPn!>contenu|>
    211207                // tel que <|!REG3XP10!>(ARTICLES)|>
    212                
     208
    213209                // 1) fin de boucle <BOUCLEx(TABLE).../> ( /> )
    214210                10 => array(
Note: See TracChangeset for help on using the changeset viewer.