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
Voir TestCode pour une petite démo.

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 {

$nbcode = preg_match_all("/{ {(.+)} }/Ums",$CONTENT,$matches_code);
$CONTENT = preg_replace("/{ {(.+)} }/Ums","<code><pre>{ {CODE} }</pre></code>",$CONTENT);

avant la ligne :
$CONTENT = preg_replace("/\^(.)/Umsie", "'&#'.ord('\\1').';'", $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);

après la ligne
$CONTENT = html_entity_decode($CONTENT);


//$CONTENT = preg_replace("/{(.+)}/Ue", "'<pre><code>' . preg_replace('#<br />#', '', '\\1') . '</code></pre>'", $CONTENT);


Problèmes


é è ô à

pour du code :
{{ print "hello"; 

}}