begin process at 2010 02 10 00:49:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > PHPCODE INDENTER

PHPCODE INDENTER


 Information sur la source

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :indenter, indentation, forme Niveau :Débutant Date de création :04/03/2008 Date de mise à jour :05/03/2008 15:27:12 Vu / téléchargé :3 950 / 103

Auteur : amezghal

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

avec cette classe vous pouvez mettre en forme(indenter) n'importe quel script php, pour que ça soit lisible :)
pour l'utiliser c'est très simple :)
pour utiliser cette classe :
<?php
require 'indenter.class.php';
$test=new indenter;
$test->indent('','mon_fichier.php');
?>
apres avoir créé une instance de la classe "indenter" vous appelez la méthodes "indent()" qui accepte deux paramètres la directoire et le nom du fichier à indenter

merci  

Source

  • <?php
  • /**
  • * @author: AMEZGHAL abdelilah <amezghal@msn.com>
  • */
  • class Indenter {
  • public function __construct(){
  • }
  • private $is_string1 = false;
  • private $is_string2 = false;
  • private $is_comment1 = false;
  • private $is_comment2 = false;
  • public function valid(){
  • return (
  • $this->is_string1 == false && $this->is_string2 == false &&
  • $this->is_comment1 == false && $this->is_comment2 == false
  • );
  • }
  • public function indent($dir, $file){
  • $string=trim(file_get_contents($dir.$file));
  • if(substr($string,0,5)=='<?php'){
  • $string=substr($string,5,strlen($string)-7);
  • }else{
  • $string=substr($string,2,strlen($string)-4);
  • }
  • $out = "<?php\n";
  • $arc = 0;
  • $semilicon = false;
  • $space = true;
  • $tab='';
  • $is_condition = false;
  • $update=true;
  • for($i = 0; $i < strlen( $string ); $i++) {
  • $char = substr($string, $i, 1);
  • switch($char) {
  • case '"':
  • if($this->is_comment1 == false && $this->is_comment2 == false) {
  • if($this->is_string1) {
  • if(substr($string,$i-1,1)!='\\') {
  • $this->is_string1=false;
  • }
  • }else{
  • if($this->is_string2==false){
  • $this->is_string1=true;
  • }
  • }
  • }
  • $out .= $char;
  • break;
  • case '\'':
  • if($this->is_comment1 == false && $this->is_comment2 == false) {
  • if($this->is_string2) {
  • if(substr($string,$i-1,1)!='\\'){
  • $this->is_string2=false;
  • }
  • }else{
  • if($this->is_string1==false){
  • $this->is_string2=true;
  • }
  • }
  • }
  • $out .= $char;
  • break;
  • case '/':
  • if($this->is_string1 == false && $this->is_string2 == false) {
  • if(substr($string, $i-1, 1)=='/'){
  • $this->is_comment1=true;
  • $semilicon=false;
  • }
  • if($this->is_comment2){
  • if(substr($string, $i-1, 1)=='*'){
  • $this->is_comment2=false;
  • $out .= $char."\n".$tab;
  • $update=false;
  • }
  • }
  • }
  • if($update) {
  • $out .= $char;
  • }else{
  • $update = true;
  • }
  • break;
  • case '*':
  • if($this->valid()) {
  • if(substr($string,$i-1,1)=='/'){
  • $this->is_comment2=true;
  • $out = substr($out,0,strlen($out)-1);
  • $out .=$tab.'/*';
  • }
  • }else{
  • $out .= $char;
  • }
  • break;
  • case '(':
  • if($this->valid()) {
  • $arc++;
  • if($is_condition==false) {
  • $is_condition=true;
  • }
  • }
  • $out .= $char;
  • break;
  • case ')':
  • if($this->valid()) {
  • $arc--;
  • if($arc==0){
  • $is_condition=false;
  • }
  • }
  • $out .= $char;
  • break;
  • case ';':
  • if($this->valid()) {
  • if($is_condition){
  • $out .= $char.' ';
  • $space = false;
  • }else{
  • $semilicon = true;
  • $out .= $char;
  • }
  • }else{
  • $out .= $char;
  • }
  • break;
  • case '{':
  • if($this->valid()) {
  • $out .= "\n" . $tab . $char . "\n";
  • $tab .= "\t";
  • $out .= $tab;
  • }else{
  • $out .= $char;
  • }
  • break;
  • case '}':
  • if($this->valid()) {
  • $tab = substr($tab, 0, strlen($tab)-1);
  • $out .="\n".$tab.$char."\n";
  • }else{
  • $out .= $char;
  • }
  • break;
  • case ':':
  • if($this->valid()) {
  • $out .= $char."\n".$tab;
  • }
  • break;
  • case "\n":
  • if($this->is_comment1){
  • $out .= $char.$tab;;
  • $this->is_comment1=false;
  • }elseif($this->is_comment2){
  • $out .= $char.$tab;
  • }
  • break;
  • case "\r":
  • case "\t":
  • if($this->is_string1==true || $this->is_string2==true) {
  • $out .= $char;
  • }
  • break;
  • case ' ':
  • if($this->valid()) {
  • if($space) {
  • $out .= $char;
  • $space = false;
  • }
  • }else{
  • $out .= $char;
  • }
  • break;
  • default:
  • $space=true;
  • if($semilicon) {
  • $out .= "\n".$tab.$char;
  • $semilicon = false;
  • } else {
  • $out .= $char;
  • }
  • }
  • }
  • $out."\n?>";
  • file_put_contents($dir.'back_'.$file, $out);
  • }
  • }
  • ?>
<?php
/**
* @author: AMEZGHAL abdelilah <amezghal@msn.com>
*/
class Indenter {

	public function __construct(){
	}
	
	private $is_string1 = false;
	private $is_string2 = false;
	private $is_comment1 = false;
	private $is_comment2 = false;
	public function valid(){
		return  (
				$this->is_string1 == false && $this->is_string2 == false &&
				$this->is_comment1 == false && $this->is_comment2 == false
				);
	}
	public function indent($dir, $file){
		$string=trim(file_get_contents($dir.$file));
		if(substr($string,0,5)=='<?php'){
			$string=substr($string,5,strlen($string)-7);
		}else{
			$string=substr($string,2,strlen($string)-4);
		}
		$out = "<?php\n";
		$arc = 0;
		$semilicon = false;
		$space = true;
		$tab='';
		$is_condition = false;
		$update=true;
		for($i = 0; $i < strlen( $string ); $i++) {
			$char = substr($string, $i, 1);
			switch($char) {
				case '"':
					if($this->is_comment1 == false && $this->is_comment2 == false) {
						if($this->is_string1) {
							if(substr($string,$i-1,1)!='\\') {
								$this->is_string1=false;
							}
						}else{
							if($this->is_string2==false){
								$this->is_string1=true;
							}
						}
					}
					$out .= $char;
					break;

				case '\'':
					if($this->is_comment1 == false && $this->is_comment2 == false) {
						if($this->is_string2) {
							if(substr($string,$i-1,1)!='\\'){
								$this->is_string2=false;
							}
						}else{
							if($this->is_string1==false){
								$this->is_string2=true;
							}
						}
					}
					$out .= $char;
					break;

				case '/':
					if($this->is_string1 == false && $this->is_string2 == false) {
						if(substr($string, $i-1, 1)=='/'){
							$this->is_comment1=true;
							$semilicon=false;
						}
						if($this->is_comment2){
							if(substr($string, $i-1, 1)=='*'){
								$this->is_comment2=false;
								$out .= $char."\n".$tab;
								$update=false;
							}
						}
					}
					if($update) {
						$out .= $char;
					}else{
						$update = true;
					}
					break;

				case '*':
					if($this->valid()) {
						if(substr($string,$i-1,1)=='/'){
							$this->is_comment2=true;
							$out = substr($out,0,strlen($out)-1);
							$out .=$tab.'/*';
						}
					}else{
						$out .= $char;
					}
					break;
				case '(':
					if($this->valid()) {
						$arc++;
						if($is_condition==false) {
							$is_condition=true;
						}
					}
					$out .= $char;
					break;

				case ')':
					if($this->valid()) {
						$arc--;
						if($arc==0){
							$is_condition=false;
						}
					}
					$out .= $char;
					break;

				case ';':
					if($this->valid()) {
						if($is_condition){
							$out .= $char.' ';
							$space = false;
						}else{
							$semilicon = true;
							$out .= $char;
						}
					}else{
						$out .= $char;
					}
					break;

				case '{':
					if($this->valid()) {
						$out .= "\n" . $tab . $char . "\n";
						$tab .= "\t";
						$out .= $tab;
					}else{
						$out .= $char;
					}
					break;

				case '}':
					if($this->valid()) {
						$tab = substr($tab, 0, strlen($tab)-1);
						$out .="\n".$tab.$char."\n";
					}else{
						$out .= $char;
					}
					break;
				case ':':
					if($this->valid()) {
						$out .= $char."\n".$tab;
					}
					break;
				case "\n":
					if($this->is_comment1){
						$out .= $char.$tab;;
						$this->is_comment1=false;
					}elseif($this->is_comment2){
						$out .= $char.$tab;
					}
					break;
				case "\r":
				case "\t":
					if($this->is_string1==true || $this->is_string2==true) {
						$out .= $char;
					}
					break;

				case ' ':
					if($this->valid()) {
						if($space) {
							$out .= $char;
							$space = false;
						}
					}else{
						$out .= $char;
					}
					break;

				default:
					$space=true;
					if($semilicon) {
						$out .= "\n".$tab.$char;
						$semilicon = false;
					} else {
						$out .= $char;
					}
			}

		}
		$out."\n?>";
		file_put_contents($dir.'back_'.$file, $out);
	}
}
?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 mars 2008 15:27:12 :
ptite maj

 Sources du même auteur

Source avec Zip Source avec une capture MYRSSREADER :: APPLICATION WEB2
Source avec Zip Source avec une capture FORMULAIRE D'ENREGISTREMENT(AJAX+CODE SECURITÉ+STYLÉ)
Source avec Zip Source avec une capture TRACEUR DES FONCTIONS
Source avec Zip EVALUER LES EXPRESSIONS MATHÉMATIQUES COMPLEXES
CONNAITRE SI LE FICHIER UPLOADER N'EST PAS UN FICHIER PHP

 Sources de la même categorie

Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan
Source avec Zip POO - FACTORY CLASS par Waredan
POO - SINGLETON CLASS par Waredan
POO - PARAMETERHOLDER CLASS par Waredan

Commentaires et avis

Commentaire de Mizuka le 04/03/2008 15:53:55

Bonjour,

L'idée est sympathique,

Critiques :
_ Des commentaires seraient les bienvenues;
_ Une documentation également;
_ Des noms de variables plus explicites;

Après, j'suis pas motivé pour lire quand j'dois déchiffrer le fonctionnement,

Cordialement,

Commentaire de jlf5808 le 05/03/2008 10:57:11

Bonjour,
En quelques lignes.
Quelle est la procedure pour en forme mon nouveau programme PHP.
que je viens de terminer.
Je voudrais avoir  une methode pour mettre en forme tous les codes.php que j'ai pour les  relire facilement  .
Salutations.

Commentaire de amezghal le 05/03/2008 15:35:08

salut et merci
@Mizuka:
le fonctionnement est très simple, une boucle sur tous les char du script puis un switch suivant les cas, par exemple si c'est un '{' ça nécessite un retour a la ligne puis une tabulation pour ce qui suis ';' retour à la ligne....ainsi de suite  
je crois que mes var sont explicites! sinon
$is_string1; pas une chaine du type "string"
$is_string2: pas une chaine du type 'string'
deux type de commentaire //comment et /*comment */
voilà :)

@jlf5808
relis la description j'ai expliqué comment faire :)

Commentaire de BaFM le 10/03/2008 10:35:52

Bonjour,

Votre code ne gère pas la syntaxe HereDoc supportée par php.

Une méthode plus propre est d'utiliser lexer et parser pour régénérer le code indenté en gérant complètement la grammaire du langage, ce qui évite de tomber dans des cas limites.

Commentaire de Eregon le 10/03/2008 18:13:01 5/10

Moi je dit vive l'indent personnel^^
Car il y a toujours des exceptions, genre des conditions qu'on veux à peine mentionner et qu'on met sur une ligne, un texte que l'on met directement contre le bord(toujours le cas en heredoc), un saut à la ligne pour repérer des CR ou LF, une arborescence où l'on veut l'élément racine contre la marge, ...

Mais sinon ça doit surement être un bon exercice de parsing :p
Bon codage
P.S.:'deux paramètres la directoire et le nom du fichier' -> '2 paramètres : le dossier et le fichier' ;) (pourquoi séparer ces paramètres?)

Commentaire de amezghal le 10/03/2008 19:05:07

salut, et merci =),
en fait j'avais pas fais attention au cas de heredoc..donc merci pour la remarque,(bug fix dans la prochaine maj :D)

@BaFm, si tu connais un lexer qui produit du code pour php je serais pronneur...(car je connais que ceux qui produisent du code pour C, C++, C#, java),

merci :)


Commentaire de BaFM le 10/03/2008 20:04:52

Le Lexer (analyseur lexical) il ne produit pas de code, il produit un flux de jetons qui sont utilisés par un Parser (analyseur syntaxique) qui produit un arbre AST. C'est cet arbre que tu retransformera en chaîne pour le formatage.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Convertir une Date au format Timestamp [ par Touf ] Salut !J'ai un petit pb : j'accède à une Date stockée dans une bdd mysql sous la forme (timestamp) "YmdHis" : 20020608105031J'aimerais l'afficher sous comment afficher sous forme de tableau [ par Xime ] bonjourvoila j'aimerais savoir comment afficher mes données que je recupere de ma base de données sous forme de tableau (la taille sera en fonction du Mise en Forme HTML [ par CouB ] Je m'explique :J'ai un script qui doit me permettre de mettre a jour du text et des images sur une page php.Les données sont saisies via un formulaire conversion de date [ par Joez ] voila je récupère la date de mysql sous la forme 2002-01-02 10:43:32 et je voudrais afficher cette date sous la forme Lundi 02 janvier 2002 à 10h4 du MultiPlayer dans l'aire [ par Nestor ] SalutJe voudrais me faire sous forme de tableau un listing d'adresse ip, du ping, date, heure.....pour mon site mais je sauré jamais faire cela en php lecteur de donnée dans iframe [ par SupTOny2000 ] Bonsoir à tous Depuis une semaine je cherche des infos concernant un méchant formulaire avec mise forme et tout! (en référence je peux cité le formula Extraires les URLs de fichiers sous forme CSV [ par spectroman ] J'aurai besoin d'un script en PHP qui parse une page (HTML) pour en extraire les liens et leurs noms dans un fichier texte...sous la forme :nomdulien1 exporter mysql vers excel sous forme de tableau [ par delaide ] bonjour! je cherche un script qui permet d'exporter les données mysql vers un fichier excel sous forme de tableau.j'ai déjà trouvé 1 (XLS MAGIQUE) mai Mise en forme de texte dans GD 1.6/2.0 [ par bartart ] Bonjour, je voulais savoir si quelqu'un connaissait une astuce pour mettre du texte en gras et/ou en italique sur un imagestring dans la bibliothèque mise en forme phpbb [ par mozrat ] Bonjour,je cherche à insérer phpbb dans mon site :je m'explique, j'aimerais avoir la page du forum sous la forme :&lt;table&gt;&lt;tr&gt;&lt;td&gt;inc


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales