J'ai donc réfléchis et entrepris de refait ce qui venais d'être fait dans le but de produire un code agréable à lire dans les flux avec le même résultat visuel. Et tant qu'à faire simple à écrire pour le blog.

Pour ceux qui utilise le mode wiki pour écrire leur post ce n'est pas la peine de poursuivre, la modification impose que l'on écrive soit même ses balises <pre>.

Pourquoi écrire :

[xml]<pre>[php]@?php .... php?@</pre>

Alors qu'un code ressemblant respectivement à ceci serait tellement plus élégant :

[xml]<pre class="colorize_php">[php] .... [/php]</pre>

Qu'en pensez vous ?

J'ai donc refais la même manipulation que pour le post précédent pour le fichier ecrire/tools/syntaxhl/geshi/php.php en remplaçant toute mes entrée @?php et php?@ par [php] et [/php]. Voilà qui sera lisible, plus facile à écrire et compréhensible facilement dans un flux.

Ne nous arrêtons pas en si bon chemin. Pour faire simple j'ai changer la fonction highlight dans le fichier ecrire/tools/syntaxhl/functions.php par celle-ci:

[php]
function highlight($text)
{
// Including the GeSHi library.
include_once(dirname(__FILE__).'/geshi.php');
// Generate list of supported languages.
$language_list = array('');
if (!@$dh = opendir(dirname(__FILE__).'/geshi')) {
return $text; // Could not find rules files.
}
while (($file = readdir($dh)) !== false) {
if (filetype(dirname(__FILE__).'/geshi/'.$file) == 'file') {
$language_list[] = preg_replace('/([a-z]+)\.php/i', '\\1', $file);
}
}
closedir($dh);
// Getting the number of different PHP snipset to parse in $text
$matches = array();
$match_count = preg_match_all('#<pre class="colorize_([a-z]*)">(.*?)</pre>#si', $text, $matches);
// For each match, parse.
for ($i = 0; $i < $match_count; $i++) {
// Checking requested language.
$language = $matches[1][$i];
if (!array_search($language, $language_list) || !$language) {
return $text; // Language not supported.
}
// Initialization.
$before_replace = $matches[2][$i];
$after_replace = $matches[2][$i];
$str_to_match = '<pre class="colorize_'.$language.'">'.$before_replace .'</pre>';
// Converting HTML encoded characters back...
// We can't use html_entity_decode() because it's only available in PHP >= 4.3.0
$after_replace = str_replace('<', '<', $after_replace);
$after_replace = str_replace('>', '>', $after_replace);
$after_replace = str_replace('&', '&', $after_replace);
$after_replace = str_replace('"', '"', $after_replace);
// Using the GeSHi library to parse the code.
$geshi =& new GeSHi($after_replace, $language);
$geshi->enable_strict_mode();
$geshi->set_url_for_keyword_group(3, '');
$after_replace = $geshi->parse_code();
// Replacement.
$replacement = $after_replace;
$text = str_replace($str_to_match, $replacement, $text);
}
return $text;
}

Le tour est joué ! C'est valable pour les autres langages aussi.

C'est tout de même plus digne d'un bon programmeur et plus respectueux de nos lecteurs !