Changeset 60563 in spip-zone for _plugins_/coloration_code


Ignore:
Timestamp:
Apr 22, 2012, 7:06:20 PM (8 years ago)
Author:
marcimat@…
Message:

Améliorer la détection des déclarations de boucles SPIP notamment lors d'une écriture des critères sur plusieurs lignes.

On est capable également de trouver les critères de boucles, mais les paramètres de balises surchargent leur couleur. (Commenter le 40. pour voir la couleur des critères de boucles).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/coloration_code/trunk/geshi/geshi/spip2.php

    r60537 r60563  
    4545 ************************************************************************************/
    4646
    47 @define('REG_NOM_BOUCLE', '[a-zA-Z0-9_]*');
    48 @define('REG_BOUCLE','(<\/?\/?B(OUCLE)?' . REG_NOM_BOUCLE . ')(\([^)]*\))?\s*({.*})?\s*(>)');
     47
     48// nom de la boucle x dans <BOUCLEx>
     49@define('REG_NOM_BOUCLE', '[a-zA-Z0-9_]+');
     50
     51// table d'une boucle (TABLE) ou (connect:TABLE)
     52@define('REG_NOM_TABLE_BOUCLE', '\([^)]*\)');
     53
     54// criteres | arguments : {critere > 0} {critere = #ENV{truc}}
     55// reste un bug sur : {#ENV{truc}, #TITO}
     56@define('REG_CRITERES', '\{(\s*(?:([^\{\}]+)|(?R))*\s*)\}');
     57
     58// Remplacements de Regexp par GESHI
     59// A chaque fois dans le tableau REGEXPS que geshi trouve quelque chose,
     60// il l'encadre de <|!REG3EXPn!>contenu|>
     61// ou n est la cle de regexp et contenu ce qui est dans "geshi_replace"
     62@define('REG_REMPLACEMENTS_GESHI_START', '<\|!REG3XP[0-9]+!>');
     63@define('REG_REMPLACEMENTS_GESHI_END', '\|>');
     64@define('REG_REMPLACEMENTS_GESHI', REG_REMPLACEMENTS_GESHI_START . '.*' . REG_REMPLACEMENTS_GESHI_END);
     65
     66// <Bx> </Bx> <//Bx> </BOUCLEx>
     67@define('REG_BOUCLE_SIMPLE','(&lt;\/?\/?B(OUCLE)?' . REG_NOM_BOUCLE . '\s*&gt;)');
     68
     69// Calcul des <BOUCLEx(){} />. C'est complexe
     70// 1) trouver la fin   />
     71@define('REG_FIN_BOUCLE', '\/?&gt;');
     72@define('REG_FIN_BOUCLE_TROUVE', REG_REMPLACEMENTS_GESHI_START . REG_FIN_BOUCLE . REG_REMPLACEMENTS_GESHI_END);
     73// 2) trouver le debut <BOUCLEx
     74@define('REG_DEBUT_BOUCLE', '&lt;BOUCLE' . REG_NOM_BOUCLE);
     75@define('REG_DEBUT_BOUCLE_TROUVE', REG_REMPLACEMENTS_GESHI_START . REG_DEBUT_BOUCLE . REG_REMPLACEMENTS_GESHI_END);
     76// 3) trouver la table (TABLE)
     77@define('REG_TABLE_BOUCLE_TROUVE', REG_REMPLACEMENTS_GESHI_START . REG_NOM_TABLE_BOUCLE . REG_REMPLACEMENTS_GESHI_END);
     78// 4) trouver les criteres
     79
     80// 1) <BOUCLEx(TABLE){criteres} /> ( la fin /> )
     81@define('REG_BOUCLE_FIN', '((?:' . REG_DEBUT_BOUCLE . ')(?:' . REG_NOM_TABLE_BOUCLE . ')'
     82        // criteres + fin de boucle
     83        . '(?:(?:\s*' . REG_CRITERES . '\s*)*))(' . REG_FIN_BOUCLE . ')');
     84
     85// 2) <BOUCLEx(TABLE){criteres} @@/>@@ ( le debut <BOUCLEx )
     86@define('REG_BOUCLE_DEBUT','(' . REG_DEBUT_BOUCLE . ')((?:' . REG_NOM_TABLE_BOUCLE . ')'
     87        // criteres + fin de boucle
     88        . '(?:(?:\s*' . REG_CRITERES . '\s*)*)(?:' . REG_FIN_BOUCLE_TROUVE . '))');
     89
     90// 3) @@<BOUCLEx@@ (TABLE){criteres} @@/>@@ ( la table (TABLE) )
     91@define('REG_BOUCLE_TABLE','(' . REG_DEBUT_BOUCLE_TROUVE . ')(' . REG_NOM_TABLE_BOUCLE . ')'
     92        // criteres + fin de boucle
     93        . '((?:(?:\s*' . REG_CRITERES . '\s*)*)(?:' . REG_FIN_BOUCLE_TROUVE . '))');
     94
     95// 4) @@<BOUCLEx@@ @@(TABLE)@@ {criteres} @@/>@@ ( des criteres {criteres} )
     96@define('REG_BOUCLE_CRITERES','((?:' . REG_DEBUT_BOUCLE_TROUVE . ')(?:' . REG_TABLE_BOUCLE_TROUVE . '))'
     97        // criteres + fin de boucle
     98        . '((?:\s*' . REG_CRITERES . '\s*)*)(' . REG_FIN_BOUCLE_TROUVE . ')');
     99
     100
     101// <INCLURE
    49102@define('REG_INCLURE','(&lt;INCLU(D|R)E)(\([^)]*\))?(.*)?(&gt;)');
     103
     104// |filtre |class::methode
     105@define('REG_NOM_FILTRE', '(<PIPE>[a-z_=!<>?][a-z0-9_=]*(::[a-z0-9_]*)?)');
     106
     107// #BALISE
    50108@define('REG_BALISE','(\#)(' . REG_NOM_BOUCLE . ':)?([A-Z0-9_]+)([*]{0,2})');
    51 @define('REG_NOM_FILTRE', '(<PIPE>[a-z_=!<>?][a-z0-9_=]*(::[a-z0-9_]*)?)');
     109
     110// /!\ pas encore au point
     111@define('REG_BALISE_COMPLET_START', '((\[)[^\[]*(\())'); // [ ... (
     112@define('REG_BALISE_COMPLET_STOP',  '((\))[^\]]*(\]))'); // ) ... ]
     113@define('REG_BALISE_COMPLET',
     114          REG_BALISE_COMPLET_START // [ ... (
     115        . '(' . REG_BALISE . ')' // #BALISE
     116        . '(?:' . REG_NOM_FILTRE . '?' . REG_CRITERES . '?)*' // {arguments} |filtre{criteres}
     117        . REG_BALISE_COMPLET_STOP); // ) ... ]
    52118
    53119
     
    59125        'QUOTEMARKS' => array(),
    60126        'ESCAPE_CHAR' => '',
    61         'KEYWORDS' => array(
    62                 ),
    63         'SYMBOLS' => array(
    64                 ),
     127        'KEYWORDS' => array(),
     128        'SYMBOLS' => array(),
    65129        'CASE_SENSITIVE' => array(
    66130                GESHI_COMMENTS => false,
    67131                ),
    68132        'STYLES' => array(
    69                 'KEYWORDS' => array(
    70                         ),
     133                'KEYWORDS' => array(),
    71134                'COMMENTS' => array(
    72135                        'MULTI' => 'color: #808080; font-style: italic;'
     
    75138                        0 => 'color: #000099; font-weight: bold;'
    76139                        ),
    77                 'BRACKETS' => array(
    78                         ),
    79                 'STRINGS' => array(
    80                         ),
    81                 'NUMBERS' => array(
    82                         ),
    83                 'METHODS' => array(
    84                         ),
    85                 'SYMBOLS' => array(
    86                         ),
    87         'SCRIPT' => array(
    88 
    89             ),
     140                'BRACKETS' => array(),
     141                'STRINGS' => array(),
     142                'NUMBERS' => array(),
     143                'METHODS' => array(),
     144                'SYMBOLS' => array(),
     145                'SCRIPT' => array(),
    90146                'REGEXPS' => array(
    91147                        0 => 'color: #E1861A;', // balise (#nom:TITRE**) ** (meme couleur que 50:filtre)
     
    93149                        2 => 'color: #e72;', // balise (#nom:TITRE) nom:
    94150
    95                         10 => 'color: #527EE0;', // tables boucle
    96             11 => 'color: #222;', // debut boucle
    97             12 => 'color: #745E4B;', // criteres boucles
    98             13 => 'color: #222;', // fin boucle
    99                                                
    100            
    101                        
     151                        10 => 'color: #1DA3DD;', // fin boucle
     152                        11 => 'color: #1DA3DD;', // debut boucle
     153                        12 => 'color: #527EE0;', // tables boucle
     154                        13 => 'color: #984CFF;', // criteres boucles
     155                        15 => 'color: #1DA3DD;', // boucle simple <Bx> </Bx> ...
     156
    102157                        20 => 'color: #527EE0;', // inclure entre parenthese
    103158                        21 => 'color: #222', // inclure debut
     
    112167                        )
    113168                ),
    114         'URLS' => array(
    115                 ),
     169        'URLS' => array(),
    116170        'OOLANG' => false,
    117         'OBJECT_SPLITTERS' => array(
    118                 ),
     171        'OBJECT_SPLITTERS' => array(),
    119172
    120173        'REGEXPS' => array(
    121                 // Balise (#nom:TITRE**)
     174/*
     175                // Balise complexe avec [ ( et ) ] si on peut
     176                99 => array(
     177                        GESHI_SEARCH => REG_BALISE_COMPLET,
     178                        GESHI_REPLACE => '',
     179                        GESHI_MODIFIERS => '',
     180                        GESHI_BEFORE => '',
     181                        GESHI_AFTER => ''
     182                        ),
     183*/
     184                // Balise (#nom:TITRE**) (les etoiles)
    122185                0 => array(
    123186                        GESHI_SEARCH => REG_BALISE,
     
    127190                        GESHI_AFTER => ''
    128191                        ),
    129                 // Balise (#nom:TITRE)
     192                // Balise (#nom:TITRE) (l'ensemble hors etoiles)
    130193                1 => array(
    131194                        GESHI_SEARCH => REG_BALISE,
     
    135198                        GESHI_AFTER => ''
    136199                        ),
    137                 // Balise (nom:)
     200                // Balise (nom:) (le connecteur nom:)
    138201                2 => array(
    139202                        GESHI_SEARCH => REG_BALISE,
     
    144207                        ),
    145208
    146                 // table de la boucle
     209
     210                // Au fur et a mesure que GESHI trouve des regexp
     211                // il encadre ses trouvailles de <|!REG3XPn!>contenu|>
     212                // tel que <|!REG3XP10!>(ARTICLES)|>
     213               
     214                // 1) fin de boucle <BOUCLEx(TABLE).../> ( /> )
    147215                10 => array(
    148                         GESHI_SEARCH => REG_BOUCLE,
    149                         GESHI_REPLACE => '\\3',
    150                         GESHI_MODIFIERS => '',
    151                         GESHI_BEFORE => '\\1',
    152                         GESHI_AFTER => '\\4\\5'
    153                         ),             
    154                 // debut de boucle
     216                        GESHI_SEARCH => REG_BOUCLE_FIN,
     217                        GESHI_REPLACE => '\\4',
     218                        GESHI_MODIFIERS => '',
     219                        GESHI_BEFORE => '\\1',
     220                        GESHI_AFTER => ''
     221                        ),
     222
     223                // 2) debut de boucle <BOUCLEx(TABLE).../> ( <BOUCLEx )
    155224                11 => array(
    156                         GESHI_SEARCH => REG_BOUCLE,
    157                         GESHI_REPLACE => '\\1',
    158                         GESHI_MODIFIERS => '',
    159                         GESHI_BEFORE => '',
    160                         GESHI_AFTER => '\\3\\4\\5'
    161                         ),     
    162                 // criteres de boucle
     225                        GESHI_SEARCH => REG_BOUCLE_DEBUT,
     226                        GESHI_REPLACE => '\\1',
     227                        GESHI_MODIFIERS => '',
     228                        GESHI_BEFORE => '',
     229                        GESHI_AFTER => '\\2'
     230                        ),
     231
     232                // 3) table de la boucle <BOUCLEx(TABLE).../> ( (TABLE) )
    163233                12 => array(
    164                         GESHI_SEARCH => REG_BOUCLE,
    165                         GESHI_REPLACE => '\\4',
    166                         GESHI_MODIFIERS => '',
    167                         GESHI_BEFORE => '\\1\\3',
     234                        GESHI_SEARCH => REG_BOUCLE_TABLE,
     235                        GESHI_REPLACE => '\\2',
     236                        GESHI_MODIFIERS => '',
     237                        GESHI_BEFORE => '\\1',
     238                        GESHI_AFTER => '\\3'
     239                        ),
     240
     241                // criteres de boucle <BOUCLEx(TABLE).../> ( {criteres} )
     242                13 => array(
     243                        GESHI_SEARCH => REG_BOUCLE_CRITERES,
     244                        GESHI_REPLACE => '\\2',
     245                        GESHI_MODIFIERS => '',
     246                        GESHI_BEFORE => '\\1',
    168247                        GESHI_AFTER => '\\5'
    169248                        ),
    170                 // fin de boucle
    171                 13 => array(
    172                         GESHI_SEARCH => REG_BOUCLE,
    173                         GESHI_REPLACE => '\\5',
    174                         GESHI_MODIFIERS => '',
    175                         GESHI_BEFORE => '\\1\\3\\4',
    176                         GESHI_AFTER => ''
    177                         ),
     249
     250
     251
     252                // boucle simple <Bx>
     253                15 => array(
     254                        GESHI_SEARCH => REG_BOUCLE_SIMPLE,
     255                        GESHI_REPLACE => '\\1',
     256                        GESHI_MODIFIERS => '',
     257                        GESHI_BEFORE => '',
     258                        GESHI_AFTER => ''
     259                        ),
     260
    178261
    179262
     
    185268                        GESHI_BEFORE => '\\1',
    186269                        GESHI_AFTER => '\\4\\5'
    187                         ),                     
     270                        ),
    188271                // inclure (debut)
    189272                21 => array(
     
    210293                        GESHI_AFTER => ''
    211294                        ),
    212                                                                
     295
    213296                // idiome
    214297                30 => array(
     
    218301                        GESHI_BEFORE => '',
    219302                        GESHI_AFTER => ''
    220                         ),     
     303                        ),
    221304                // multi
    222305                31 => array(
     
    228311                        ),
    229312
    230                 // critere de boucle ou de filtre
     313                // parametres de filtre, balise
    231314                40 => array(
    232                         GESHI_SEARCH => '(\{(\s*(?:([^{}]+)|(?R))*)\s*\}?)',
    233                         GESHI_REPLACE => '\\1',
    234                         GESHI_MODIFIERS => '',
    235                         GESHI_BEFORE => '',
    236                         GESHI_AFTER => ''
    237                         ),
    238                                                
     315                        GESHI_SEARCH => '(' . REG_CRITERES . '?)',
     316                        GESHI_REPLACE => '\\1',
     317                        GESHI_MODIFIERS => '',
     318                        GESHI_BEFORE => '',
     319                        GESHI_AFTER => ''
     320                        ),
     321
     322
    239323                // filtre
    240324                50 => array(
     
    244328                        GESHI_BEFORE => '',
    245329                        GESHI_AFTER => ''
    246                         ),                     
     330                        ),
    247331                ),
    248332       
Note: See TracChangeset for help on using the changeset viewer.