Code
Dernière modification : -
// 2007/07/30 20:40 / 90.1.187.152
Changement de la balise de { vers { { pour ne pas avoir de collision avec les fonctions
j'ai une 1ere version qui marche \o/ → 2.19+4b2
L'idée est d'extraire le code de la page avant le traitement des regex. Comme cela on évite que les autres balises soient interprétées.
Ensuite, on les re-insère à la fin. Cela se fait donc en deux parties.
Attention dans le code suivant, il faut retirer les espaces entre les {
$CONTENT = preg_replace("/\(.)/Umsie", "'&#'.ord('\\1').';'", $CONTENT);
}}
}}
Changement de la balise de { vers { { pour ne pas avoir de collision avec les fonctions
j'ai une 1ere version qui marche \o/ → 2.19+4b2
L'idée est d'extraire le code de la page avant le traitement des regex. Comme cela on évite que les autres balises soient interprétées.
Ensuite, on les re-insère à la fin. Cela se fait donc en deux parties.
Attention dans le code suivant, il faut retirer les espaces entre les {
}}
Pour une balise de code efficace
Changement de la balise de { vers { { pour ne pas avoir de collision avec les fonctions
j'ai une 1ere version qui marche \o/ → 2.19+4b2
Fonctionnement et code source
L'idée est d'extraire le code de la page avant le traitement des regex. Comme cela on évite que les autres balises soient interprétées.
Ensuite, on les re-insère à la fin. Cela se fait donc en deux parties.
Attention dans le code suivant, il faut retirer les espaces entre les {
- On remplace le texte contenu entre les balises { { et } } par le token CODE (ligne 203 en TW2.21) :
$CONTENT = preg_replace("/\/Umsi", "\", $CONTENT);
$nbcode = preg_match_all("/{ {(.+)} }/Ums",$CONTENT,$matches_code);
$CONTENT = preg_replace("/{ {(.+)} }/Ums","<code><pre>{{CODE
</pre></code>",$CONTENT);$CONTENT = preg_replace("/\(.)/Umsie", "'&#'.ord('\\1').';'", $CONTENT);
}}
- Puis à la fin, on remplace ce token par le texte préalablement extrait (ligne 259 en TW2.21) :
$CONTENT = html_entity_decode($CONTENT);
function matchcode($m) {global $matches_code;static $idxcode=0; return $matches_code[1][$idxcode++];}
if ($nbcode > 0)
$CONTENT = preg_replace_callback(array_fill(0,$nbcode,"/{ {CODE} }/"),"matchcode",$CONTENT);
}
Problèmes
- Il faut éviter { { CODE } } sans espace dans le texte
- L'imbrication ne marche pas (comme vu ci-dessus) :
pour du code :
{{ print "hello";
}}
- De temps en temps, des sauts de lignes sont insérés à l'ajout dans la page
- peut-être un pb de CR/LF dans le fichier source
Pour une balise de code efficace
Changement de la balise de { vers { { pour ne pas avoir de collision avec les fonctions
j'ai une 1ere version qui marche \o/ → 2.19+4b2
Fonctionnement et code source
L'idée est d'extraire le code de la page avant le traitement des regex. Comme cela on évite que les autres balises soient interprétées.
Ensuite, on les re-insère à la fin. Cela se fait donc en deux parties.
Attention dans le code suivant, il faut retirer les espaces entre les {
- On remplace le texte contenu entre les balises { { et } } par le token CODE (ligne 203 en TW2.21) :
$CONTENT = preg_replace("/\/Umsi", "\", $CONTENT);
$nbcode = preg_match_all("/{ {(.+)} }/Ums",$CONTENT,$matches_code);
$CONTENT = preg_replace("/{ {(.+)} }/Ums","<code><pre>{ {CODE} }</pre></code>",$CONTENT);
$CONTENT = preg_replace("/\^(.)/Umsie", "'&#'.ord('\\1').';'", $CONTENT);
- Puis à la fin, on remplace ce token par le texte préalablement extrait (ligne 259 en TW2.21) :
$CONTENT = html_entity_decode($CONTENT);
function matchcode($m) {global $matches_code;static $idxcode=0; return $matches_code[1][$idxcode++];}
if ($nbcode > 0)
$CONTENT = preg_replace_callback(array_fill(0,$nbcode,"/{ {CODE} }/"),"matchcode",$CONTENT);
}
Problèmes
- Il faut éviter { { CODE } } sans espace dans le texte
- L'imbrication ne marche pas (comme vu ci-dessus) :
pour du code :
{{ print "hello";
}}
- De temps en temps, des sauts de lignes sont insérés à l'ajout dans la page
- peut-être un pb de CR/LF dans le fichier source