Changeset 82524 in spip-zone


Ignore:
Timestamp:
May 17, 2014, 10:24:41 AM (5 years ago)
Author:
cedric@…
Message:

utilisation du pipeline pre_echappe_html_propre pour simplifier et accelerer les traitement : on peut directement echapper <md> avant que SPIP ne fasse ses propres echappements, et on peut ensuite desechapper les seuls <md>, au lieu de devoir tout echapper d'un coup, tout desechapper puis re-echapper les blocs de code de SPIP

Location:
_plugins_/markdown/branches/v0.12.0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/markdown/branches/v0.12.0/markdown_options.php

    r82523 r82524  
    2121// echappement normal pour SPIP, que l'on refait ici
    2222define('_PROTEGE_BLOCS_SPIP', ',<(html|code|cadre|frame|script)(\s[^>]*)?>(.*)</\1>,UimsS');
     23
     24function markdown_pre_echappe_html_propre($texte){
     25        // lever un flag pour dire que ce pipeline est bien OK
     26        if (!defined('_pre_echappe_html_propre_ok'))
     27                define('_pre_echappe_html_propre_ok',true);
     28
     29        // echapper les blocs <md>...</md> car on ne veut pas toucher au <html>, <code>, <script> qui sont dedans !
     30        $texte = echappe_html($texte,"mdblocs",false,',<(md)(\s[^>]*)?>(.*)</\1>,UimsS');
     31
     32        return $texte;
     33}
    2334
    2435/**
     
    143154        // si pas de base64 dans le texte, rien a faire
    144155        if (strpos($texte,"base64")!==false) {
    145                 // on des-echappe : on recupere tout a l'identique
    146                 // sauf le code du markdown echappe
    147                 $texte = echappe_retour($texte);
    148                 // on reechappe les blocs html
    149                 // dans le code SPIP uniquement
    150                 // sans transformation cette fois, puisque deja faite
    151                 if (strpos($texte,"<md>")===false){
    152                         $texte = echappe_html($texte,'',true,_PROTEGE_BLOCS_SPIP);
     156                // si on est passe par le pipeline _pre_echappe_html_propre_ok
     157                // il suffit de desechapper les blocs <md> (mais dont on a echappe le code)
     158                if (defined('_pre_echappe_html_propre_ok')){
     159                        $texte = echappe_retour($texte,'mdblocs');
    153160                }
    154161                else {
    155                         $splits = preg_split(",(<md>.*</md>),Uims",$texte,-1,PREG_SPLIT_DELIM_CAPTURE);
    156                         foreach($splits as $k=>$s){
    157                                 if (strlen($s) AND strncmp($s,"<md>",4)!==0)
    158                                         $splits[$k] = echappe_html($s,'',true,_PROTEGE_BLOCS_SPIP);
     162                        // sinon un peu plus complique :
     163                        // on des-echappe : on recupere tout a l'identique
     164                        // sauf le code du markdown echappe
     165                        $texte = echappe_retour($texte);
     166                        // on reechappe les blocs html
     167                        // dans le code SPIP uniquement
     168                        // sans transformation cette fois, puisque deja faite
     169                        if (strpos($texte,"<md>")===false){
     170                                $texte = echappe_html($texte,'',true,_PROTEGE_BLOCS_SPIP);
    159171                        }
    160                         $texte = implode('',$splits);
     172                        else {
     173                                $splits = preg_split(",(<md>.*</md>),Uims",$texte,-1,PREG_SPLIT_DELIM_CAPTURE);
     174                                foreach($splits as $k=>$s){
     175                                        if (strlen($s) AND strncmp($s,"<md>",4)!==0)
     176                                                $splits[$k] = echappe_html($s,'',true,_PROTEGE_BLOCS_SPIP);
     177                                }
     178                                $texte = implode('',$splits);
     179                        }
     180
    161181                }
    162182        }
  • _plugins_/markdown/branches/v0.12.0/paquet.xml

    r82523 r82524  
    22        prefix="markdown"
    33        categorie="edition"
    4         version="0.9.0"
     4        version="0.9.1"
    55        etat="experimental"
    66        compatibilite="[3.0.0;3.0.*]"
     
    1515        <licence>GNU/GPL</licence>
    1616
     17        <pipeline nom="pre_echappe_html_propre" />
    1718        <pipeline nom="pre_liens" />
    1819        <pipeline nom="pre_typo" />
Note: See TracChangeset for help on using the changeset viewer.