je vous mets ici un code tout bête qui permet d'indenter le code PHP des fichiers d'un site. Je l'ai utilisé sur PWSPHP, le CMS de mon futur site.
le code est commenté donc bon amusement

Code : Tout sélectionner
Global DossierSite.s
NewList Ligne.s()
Procedure Analyse(Fichier.s, Deboguage)
;{ on charge
DansTexte = 0
ClearList(Ligne())
If ReadFile(0, Fichier)
Repeat
Txt.s = ReadString()
AddElement(Ligne())
Ligne() = Txt
Until Eof(0)
CloseFile(0)
EndIf
;}
;- Analyse
Tab = 0
ForEach Ligne() ; pour chaque ligne
Ligne() = Trim(ReplaceString(Ligne(), Chr(9), " ")) ; On retire les espaces et les tabulations
Tab_D = CountString(Ligne(), "{") ; On compte le nombre de { , indentation en plus
Tab_G = CountString(Ligne(), "}") ; On compte le nombre de } , indentation en moins
If Tab_D > 0 And Tab_G > 0 ; si j'ai des { et des } sur la même ligne
If FindString(Ligne(), "}", 1) < FindString(Ligne(), "{", 1) ; si le premier est un }
; un { annule un } sauf le premier } que l'on ne peut pas annuler
; c'est pour les codes de ce type qu'on ne retire pas le premier }
; if (x==0) {
; Blabla
; } else {
; Blabla
; }
If Tab_D > Tab_G
Tab_D - Tab_G + 1
Tab_G = 1
Else
Tab_G - Tab_D + 1
Tab_D = 1
EndIf
Else ; sinon, le premier est un {
; un { annule un }
If Tab_D > Tab_G
Tab_D - Tab_G
Tab_G = 0
Else
Tab_G - Tab_D
Tab_D = 0
EndIf
EndIf
EndIf
If Tab_G Or Tab_D ; déboguage
Debug Ligne()
Debug Tab_G
Debug Tab_D
EndIf
Tab - Tab_G ; on retire des tabulations en fonction du nombre de }
; On retire avant d'ajouter les tabulations au texte
If Fin = 0 Or Left(Ligne(), 1) <> "'" ; si la ligne ne commence pas par ' et que la ligne précédente ne finit pas par '
; On ajoute les tabulations
For n = 1 To Tab
Ligne() = Chr(9) + Ligne()
Next
EndIf
If Right(Ligne(), 1) = "'" ; si la ligne finit par '
Fin = 1
Else
Fin = 0
EndIf
Tab + Tab_D ; on ajoute des tabulations en fonction du nombre de {
; On ajoute après avoir ajouter les tabulations au texte
Next
;{ on enregistre
If Deboguage = 0
If CreateFile(0, Fichier)
ForEach Ligne()
WriteStringN(Ligne())
Next
CloseFile(0)
EndIf
Else
If CreateFile(0, "test2.php")
ForEach Ligne()
WriteStringN(Ligne())
Next
CloseFile(0)
EndIf
EndIf
;}
EndProcedure
Procedure Dossier(Num, Dossier.s)
If ExamineDirectory(Num, Dossier, "*.*")
Repeat
FileType = NextDirectoryEntry()
If FileType = 1
Fichier.s = DirectoryEntryName()
If LCase(GetExtensionPart(Fichier)) = "php"
Analyse(Dossier + Fichier, 0)
AddGadgetItem(0, -1, RemoveString(Dossier, DossierSite) + Fichier)
SetGadgetState(0, CountGadgetItems(0) - 1)
UpdateWindow_(WindowID())
EndIf
ElseIf FileType = 2
Fichier.s = DirectoryEntryName()
If Fichier <> "." And Fichier <> ".."
Dossier(Num + 1, Dossier + Fichier + "\")
UseDirectory(Num)
EndIf
EndIf
While WindowEvent()
Wend
Until FileType = 0
EndIf
EndProcedure
Procedure.s GetProgramDirectory2() ; Récupère le dossier d'exécution
Protected Dossier.s
Dossier = Space(255)
GetCurrentDirectory_(255, @Dossier)
If Right(Dossier, 1) <> "\" ; si l'adresse ne finit pas par "\"
Dossier = Dossier + "\" ; on rajoute le "\"
EndIf
ProcedureReturn Dossier
EndProcedure
;/ Debut
; mettre 0 dans le test ci-dessous pour tester le programme sur un fichier "Test.php" placé dans le même du programme
; le résultat sera sauvé dans "Test2.php"
CompilerIf 1
OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "PHP")
CreateGadgetList(WindowID())
StringGadget(2, 0, 0, 270, 20, "", #PB_String_ReadOnly | #PB_String_BorderLess)
ButtonGadget(3, 270, 0, 30, 20, "...")
GadgetToolTip(3, "Choisir le dossier à traiter")
ListViewGadget(0, 0, 20, 300, 260)
ButtonGadget(1, 0, 280, 300, 20, "Lancer la mise en forme du code")
UpdateWindow_(WindowID())
DossierSite.s = PathRequester("Choissisez le dossier contenant votre site", GetProgramDirectory2())
SetGadgetText(2, DossierSite)
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
Select EventGadgetID()
Case 1
If FileSize(DossierSite) = -2
ClearGadgetItemList(0)
Dossier(0, DossierSite)
MessageRequester("PHP", "Fin du traitement." + Chr(10) + Chr(10) + "Logiciel réalisé sous PureBasic par LSI Développements (Le Soldat Inconnu)", 0)
Else
MessageRequester("Erreur", "Vous devez choisir un dossier")
EndIf
Case 3
If DossierSite = "" : DossierSite = GetProgramDirectory2() : EndIf
DossierSite.s = PathRequester("Choissisez le dossier contenant votre site", DossierSite)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
CompilerElse
Analyse("test.php", 1)
CompilerEndIf