Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Un colorateur syntaxique en pratique !

Vous pouvez trouver une approche simplifiée d'un colorateur dans la page concernant la fonction preg_replace_callback();     >>> preg_replace_callback

Bon alors on y va, je vous présente le colorateur syntaxique utilisé sur expreg.
Il est légèrement modifié et ne présente pas la conversion en lien vers la doc pour les fonctions PHP utilisées.

<?php
function color_expreg($code) {

    $comments='#FF8000';
    $defaut='#0000BB';
    $motcle='#007700';
    $chaine='#DD0000';

    $tablo = preg_split('`(<code>.*</code>)`Uis', $code, -1, PREG_SPLIT_DELIM_CAPTURE );
    
    foreach($tablo as $val)
    {
        if(preg_match('`<code>.*?</code>`Uis', $val))
            {
            $val=str_replace(array('<code>','</code>'),array('',''),$val);
           
            $str = highlight_string($val, TRUE);
   
            $ret = '<div class="colorise">'.$str.'</div>';
            // créez dans votre CSS une classe colorise ou une autre de votre choix
            
           $in = array(
            '`</?code>`i',
            '`<font color="' . ini_get('highlight.html')    . '">(.+)</font>`si',
            '`<font color="' . ini_get('highlight.comment') . '">(.+?)</font>`si',
            '`<font color="' . ini_get('highlight.default') . '">(.+?)</font>`si',
            '`<font color="' . ini_get('highlight.keyword') . '">(.+?)</font>`si',
            '`<font color="' . ini_get('highlight.string')  . '">(.+?)</font>`si',
            '` `si'
            );
            
            $out = array(
            '',
            '$1',
            '<span style="color:'.$comments.'">$1</span>',
            '<span style="color:'.$defaut.'">$1</span>',
            '<span style="color:'.$motcle.'">$1</span>',
            '<span style="color:'.$chaine.'">$1</span>',
            ' '
            );
            
            $sortie[] = preg_replace($in, $out, $ret);
        }
        else
        {
            $in = array(
            '`&lt;/(u|b|i)&gt;`',
            '`&lt;((http|https|ftp)://.*?)&gt;`i',
            '`&lt;b *&gt;([^&lt;]+)`si',
            '`&lt;i *&gt;([^&lt;]+)`si',
            '`&lt;u *&gt;([^&lt;]+)`si',
            '`&gt;&gt;\s?(.*?)&lt;&lt;`si'
            );
            
            $out = array(
            '</span>',
            '<a href="$1" target="_blank"><b>$1</b></a>',
            '<span class="bb">$1',
            '<span class="ii">$1',
            '<span class="uu">$1',
            '<br /><div class="citation"><span class="u">Je cite :</span>
            <br /><br /><span class="i">$1</span></div>');
            // créez dans votre CSS une classe bb, ii, uu, citation ou autres
            // en modifiant légèrement vous pouvez également
            // utiliser le balisage standardisé strong, em, etc...
           
            $sortie[] = preg_replace($in, $out, nl2br(htmlentities($val)));
        }
    }
    
    return implode('', $sortie);    
}
?>

Pour l'appeler, il suffit de faire : echo color_expreg(stripslashes($_POST['code']));
Il est bien évident que ce colorateur est adaptable à vos config perso. Suffit de le modifier là où il faut.
Si vous utilisez le fumeux BBcode, je vous laissse le soin de remplacer les balises <code> par les vôtres.


ADAM Benjamin 2008 | Admin