[PHP] Colorateur/Indentateur de code PHP
Ezable
Messages postés
3
Statut
Membre
-
Bernard -
Bernard -
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)
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
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
A voir également:
- [PHP] Colorateur/Indentateur de code PHP
- Code ascii - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- Code activation windows 10 - Guide
- Scanner qr code pc - Guide
3 réponses
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
pour les 2 autres points, il faudra que j'ai le temps de me pencher sur le code
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 ;)
Merci ;)