|
What this is
Other links
The source code/* * $Id: PHPIndentPEAR.java,v 1.1 2003/02/14 01:05:29 gfx Exp $ * * PHP Plugin for Jext * * Copyright (C) 2002 Nicolas Thouvenin * touv at yahoo dot fr * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ import org.jext.*; public class PHPIndentPEAR extends PHPParser { private int TAILLE_PILE = 20; // Nombre maximun de bloc de parenthese imbriquée private static int lastIndent = 0; private boolean nullblock = false; // On est dans block inutile ( commentaire ou chaine de caractères) private boolean amettre = true; // On ajoute le caractere courant au buffer de sortie private boolean addspace = false; // On ajoute un blanc aprés le carctere courant private boolean addnewline = false; // On ajoute un retour à la ligne avant un block { private int indentBis = 0; // On compte les sous blocs private static int lastIndentBis = 0; // On mémorise le précédent nombre de sous blocs private int[] pileIndentBis= new int[TAILLE_PILE]; // Pile mémorisant l'emplacement de la premiere parenthése private StringBuffer uneLigne; PHPIndentPEAR(String s) { super(s); //P_AVANT(); } public StringBuffer newbuf; public int INDENT_SIZE = 2; public int indent = 0; public void setIndentSize(int i) { this.INDENT_SIZE = i; } public String get() { return this.newbuf.toString(); } private void parseLigne() { String laligne = this.uneLigne.toString().trim(); //System.out.println("Type["+String.valueOf(getType())+"] Ligne["+this.uneLigne.toString()+"]\n"); // On vient de commencer donc on ajoute rien if (newbuf.length() > 0) { this.newbuf.append('\n'); } if (laligne.length() > 0 && laligne.charAt(0) == '*') { // Un commentaire PHPDOC commence forcement par * if (testType(T_COM3)) { // On est bien dans commentaire PHPDOC, donc un met un petit blanc this.newbuf.append(' '); } else { // On aligne l'étoile de fin de commentaire avec l'etoile de début this.newbuf.append(' '); } } // On indent des blocs de code if (this.lastIndent < indent) { this.newbuf.append(PHPIndent.createIndent(this.lastIndent,INDENT_SIZE)); } else { this.newbuf.append(PHPIndent.createIndent(indent,INDENT_SIZE)); } // On aligne le contenu des parenthéses if (this.indentBis > 0) { if (this.lastIndentBis == this.indentBis) { for (int i = 1; i <= this.indentBis; i++) { this.newbuf.append(PHPIndent.createAlign(pileIndentBis[i])); } } else { for (int i = 1; i <= this.lastIndentBis; i++) { this.newbuf.append(PHPIndent.createAlign(pileIndentBis[i])); } } } else if (this.indentBis < 0) { this.indentBis = 0; } // On ajoute la ligne que l'on vient de traiter this.newbuf.append(laligne); // Sauvegarde les compteurs d'indentation this.lastIndent = indent; this.lastIndentBis = this.indentBis; // On n'a pas trouvé la déclaration d'une fonction ou d'une classe addnewline = false; this.uneLigne = new StringBuffer(); } public void indent() { parse(); } protected void P_AVANT() { this.uneLigne = new StringBuffer(); this.newbuf = new StringBuffer(); } protected void P_DEBUT() { this.amettre = true; this.addspace = false; } protected void P_FIN_LIGNE() { if (testType(T_PHP)) { this.amettre = false; parseLigne(); } } protected void P_DEBUT_BLOC_CODE() { if (this.addnewline) { // Si on vient de déclarer une fonction ou d'une classe on saute une ligne parseLigne(); } else { // Sinon on met juste un espace devant this.uneLigne.append(' '); } // On compte indent++; } protected void P_FIN_BLOC_CODE() { // On Décompte indent--; } protected void P_DEBUT_BLOC_CONDITION() { this.indentBis++; if (this.indentBis < TAILLE_PILE) { pileIndentBis[this.indentBis] = this.uneLigne.length() + 1; } else this.indentBis--; } protected void P_FIN_BLOC_CONDITION() { this.indentBis--; } protected void P_SEPARATEUR() { // un espace derriere this.addspace = true; // On n'a pas trouvé la décaration d'une fonction ou d'une classe this.addnewline = false; } protected void P_ESPACE() { if (testType(T_PHP) ) { this.amettre = false; } } protected void P_DEBUT_PHP() { this.addspace = true; } protected void P_KEYWORD_A() { this.addnewline = true; this.addspace = true; } protected void P_KEYWORD_B() { this.addspace = true; } protected void P_KEYWORD_C() { this.addspace = true; } protected void P_KEYWORD_D() { // Nous sommes sur un opérateur un seul espace devant // si et seulement si il n'y en a déjà pas int tmpint; if ( (tmpint = this.uneLigne.length() - 1) > 0 && this.uneLigne.charAt(tmpint) != ' ') { this.uneLigne.append(' '); } // et un seul derrière this.addspace = true; } protected void P_FIN() { if (testType(T_PHP) && this.amettre ) { this.uneLigne.append(getStrLu()); if (this.addspace) { this.uneLigne.append(' '); } } } protected void P_APRES() { parseLigne(); } } |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.