Rechercher : dans
Par :

[PHP] Colorateur/Indentateur de code PHP

Dernière réponse le 7 jun 2008 à 17:49:57 Ezable, le 8 mar 2007 à 17:59:57 
 Signaler ce message aux modérateurs

Bonjour à tous,

J'essaie de faire un colorateur/indentateur syntaxique de code PHP performant pour mon site ou pour autre chose.
Je l'ai pratiquement fini, mais j'ai quelques problèmes !

Voici tout d'abord le script qui je pense est assez mal codé, mais qui marche ! :D
Le script colore et indende le code.
(J'ai commenté le texte pour faciliter la lecture)

<style>
.code_php
{
font:8px
}
.cadre_php
{
border:1px dotted #444411;
margin-left:20px;
margin-right:20px;
margin-top:0px;
margin-bottom:20px;
padding:5px;
font-family: "Courier New", Courier, mono; font-size: 8pt;
background:#F0F0F0;
}
.titre_php
{
margin-left:20px;
margin-right:20px;
margin-top:20px;
margin-bottom:0px;
padding:5px;
font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt;
}
</style>
<h1>Essai du colorateur<h1>
<?php
if(!empty($_POST['code']))
{
    $code = nl2br($_POST['code']);
    // Fonction pour colorer le code php
    function colorateur_indentateur_php($kli) 
    {
        $kli[1] = str_replace("<br />", "", $kli[1]);
        // Coloration du code
        $kli[1] = highlight_string($kli[1], true);
        $kli[1] = str_replace(array('<font ', '</font>'), array('<span ', '</span>'), $kli[1]);
        $kli[1] = preg_replace('#color="(.*?)"#', 'style="color: \\1"', $kli[1]);
        // Découpage de la chaîne
        $morceaux = explode("<br />", $kli[1]);
        $morceau_num = array();
        // Variable de comptage
        $i = 1;
        // Création du code avec le numéro des lignes
        foreach($morceaux as $morceau)
        {
             if($i < 10) 
             {
                   $i = "0".$i;
              }
              if($i == 1)
              {
                    $morceau = str_replace("<code>", "", $morceau);
                    $morceau_num[] = "<code class=\"code_php\"><span style=\"color:#000000;\">$i|</span>  $morceau <br />";
              }
              else
              {
                    $morceau_num[] = "<span style=\"color:#000000;\">$i|</span>  $morceau <br />";
               }
               $i++;
         }
         // Reconstitution de la chaîne
         $code = implode($morceau_num);
                
         // Fonction pour indenter le code
         function indentateur_php($kli)
         {
                // Découpe la chaîne
               $morceaux = explode("<br />", $kli[1]);
               $morceau_num = array();
               // Variables de comptage
               $nb = count($morceaux);
               $nb = $nb - 1;
               $i = 0;
               // Création du code avec l'indentation
                foreach($morceaux as $morceau)
                {
                       if($nb == $i)
                      {
                             $morceau_num[] = $morceau;
                       }
                       else
                       {
                              $morceau = str_replace("</span> ", "</span>      ", $morceau);
                              $morceau_num[] = $morceau.'<br />';
                        }
                        $i++;
                 }
                 return '{'.implode($morceau_num).'}';
         }
                
          // Indentation du code
         $code = preg_replace_callback('#\{(.+)\}#Uis','indentateur_php',$code);
         $code = preg_replace('#(\[)#Uis','<span style="color: rgb(0, 0, 187);">[</span>',$code);
         $code = preg_replace('#(\])#Uis','<span style="color: rgb(0, 0, 187);">]</span>',$code);
                
         return '<div class="titre_php">[ <b><acronym title="PHP: Hypertext Preprocessor">PHP</acronym></b> Code ]</div><div class="cadre_php">'.$code.'</div>';
}

$code = preg_replace_callback('#\[php\]((.)+)\[/php\]#Uis','colorateur_indentateur_php',$code);
echo '<b>Voici le code :</b><hr /><br />'.$code.'<br /><hr/>';
}
?>
<b>Tapez votre code :</b>
<form action="essai.php" method="post" name="code">
<p><textarea name="code" cols="100" rows="15">
<? if(!empty($_POST['code'])) { echo $_POST['code']; } ?></textarea></p>
<p><input type="submit" name="Submit" value="Colorer le code"></p>
</form>


Voici donc mon script ! :lol:

Je voudrais savoir plusieurs choses si des gens peuvent m'aider :

Question 1 :
Si vous l'essayez, vous verrez que la coloration marche, mais que l'indentation ne marche pas très bien ! :( J'ai trouvé le problème, c'est que dès que PHP arrive sur un } il arrête l'indentation, alors que cette accolade n'était pas la fermeture de la principale. En gros il fait ça :

ouvre une accolade
{
(espace)(espace)il indente, on ouvre encore
(espace)(espace){
(espace)(espace)(espace)(espace)il indente encore, mais si on referme, il redescend complètement
}
}

Mais je n'arrive pas à régler le problème et je ne vois pas comment le regler !

Question 2 :
J'ai essayé aussi de faire en sorte que l'on puisse cliquer sur les fonctions pour qu'elles envoient à la documentation PHP, mais je n'ai pas réussi ! :euh: Si quelqu'un pouvait m'éclairer la dessus, ça m'aiderait beaucoup !

Question 3 :
J'aimerais bien aussi savoir comment aléger mon code, car à mon avis il est très lourd, donc si vous pouviez me donner certaines explications.

--------------------------------------------

Merci beaucoup ! :D
Bonne soirée.

Blaze/Ezable

Meilleures réponses pour « [PHP] Colorateur/Indentateur de code PHP » dans :
[Webmaster] Afficher facilement le code php/xhtml de vos pages Voir Si vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
Javascript - Coloration syntaxique dans vos pages web VoirSi vous avez un site web contenant des exemples de code (php, javascript, C#, Delphi, Python...), il peut être intéressant d'avoir une coloration syntaxique. C'est parfois pénible à réaliser, mais il existe une librairie Javascript qui permet de...
[Webmaster] Choisir un bon éditeur, les éditeurs à éviter VoirIntroduction I Les éditeurs à éviter I.1 Frontpage I.2 Word I.3 Publisher II Les éditeurs recommandés II.1 Editeurs WYSIWYG II.1.1 Dreamweaver II.1.2 Web Expert II.1.3 Nvu / Kompozer II.1.4 Amaya II.2 Editeurs en mode code
Implantation du code Php VoirL'interprétation du code par le serveur Un script PHP est un simple fichier texte contenant des instructions écrites à l'aide de caractères ASCII 7 bits (des caractères non accentués) incluses dans un code HTML à l'aide de balises spéciales et...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...

1

bbar, le 8 mar 2007 à 20:31:15

Salut, pour ton point 1, utilise un compteur que tu incrémentes à chaque fois que tu rencontres une accolade ouvrante et que tu décrémentes à chaque accolade fermante. Tu affiches en début de ligne autant d'espaces que la valeur de ton compteur.
pour les 2 autres points, il faudra que j'ai le temps de me pencher sur le code

Répondre à bbar

2

Ezable, le 8 mar 2007 à 23:00:11

Je vais essayé de numéroté les indentations comme tu m'a dit j'ai dejà mon idée de ce que je vais faire ça a l'air pas mal !

Merci ;)

Répondre à Ezable

3

hamzafes, le 9 mar 2007 à 10:01:51

Salam,

Utilisez plutôt ça :

$code = preg_replace('!({)!', '$1<blockquote>', $code);
$code = preg_replace('!(})!', '</blockquote>$1', $code);


Ce code insert la balise "<blockquote>" après toute accolade ouvrante, et "</blockquote>" avant toute accolade fermante, et ça marche très bien.


LLah mo3ine

Répondre à hamzafes

4

Ezable, le 9 mar 2007 à 19:46:07

Ah yes pas bête, je me suis compliqué la vie en fait !

Merci je vais essayer je reposte après. ;)

Répondre à Ezable

5

Anonyme, le 3 jun 2008 à 20:27:27

C'est dommage, plus d'un ans après tu n'as pas posté ton code...

Répondre à Anonyme

6

 Bernard, le 7 jun 2008 à 17:49:57

Oui très dommage, je cherche un code de ce genre aussi!! merci de nous tenir au courant si tu le veux bien ? ;)

Répondre à Bernard
Collection CommentÇaMarche.net