J'ai réalisé ce petit programme d'intentation, il a la particularité de pouvoir être ajouté aux outils de l'éditeur PureBasic Standard quelque soit la version et de s'executer pendant que l'éditeur est ouvert.
Il loin d'être parfait, mais il ne tient qu'à vous de l'amélioer à votre convenance.
Code : Tout sélectionner
;*********************************************************************************************
;* Il est Possible de passer en Paramètre le nombre de Blanc correspondant à l'indentation ! *
;* La valeur par défaut (Tab) est de "2" mais ne demande qu'à être modifiée *
;*********************************************************************************************
Global Res.l, Deb.l, Fin.l , Hwnd, Handle.l, LineIndent.s, ProgText.s,Txt.s, Prog.s, RC.s, Blanc.l, Cde.s, Pos.l, Fin.l, DejaCom.b
If Txt=""
Tab=2
Else
Tab= Val(Txt)
EndIf
RC = Chr(13)+Chr(10)
Blanc=0
Dejacom = 0
DejaElse = 0
;*******************************************************
; Recherche de la Fenêtre contenat le texte à Indenter *
;*******************************************************
Hwnd = FindWindow_( 0, 0 )
While Hwnd <> 0
Txt = Space(256)
GetWindowText_(Hwnd, Txt, 256)
If FindString(UCase(Txt),"PUREBASIC - ",1) = 1 And FindString(UCase(Txt),"DEBUG",1) =0
Handle=Hwnd
EndIf
Hwnd = GetWindow_(Hwnd, #GW_HWNDNEXT)
Wend
;*****************************************************
;* Activationn de la Fenêtre de Programme à Indenter *
;* Copie du Texte du Programme dans le pResse papier *
;* Puis du contenu du pResse papier dans ProgText *
;*****************************************************
SetFocus_(Handle)
Res = Keybd_Event_(17,0,0,0)+ Keybd_Event_(65,0,0,0)+ Keybd_Event_(67,0,0,0)+Keybd_Event_(17,0,2,0)
Delay(20)
ProgText=GetClipboardText()+RC+RC
;**************************
;* Sauvegarde de sécurité *
;**************************
If CreateFile(#1,"c:\sauvegarde.bak")
WriteString(Progtext)
CloseFile(#1)
EndIf
;*****************************************
;* Mise en Forme du texte et Indentation *
;*****************************************
Prog=""
Deb = 1
Fin = FindString(ProgText,RC,Deb)
While fin + 2 < Len(ProgText)
LineIndent = Trim(Mid(ProgText,deb,fin-deb))
If LineIndent > ""
Pos.l = FindString(LineIndent," ",1)
If Pos = 0
Cde = LineIndent
Else
Cde=Left(LineIndent,Pos-1)
EndIf
Cde=UCase(Cde)
If FindString("*ENDIF*ENDPROCEDURE*ENDSELECT*ELSE*CASE*WEND*NEXT*UNTIL*DEFAULT*ELSEIF*","*"+Cde+"*",1)>0 : Blanc - Tab :EndIf
If Blanc < 0 : blanc=0: EndIf
If Left(Cde,1)=";"
If DejaCom = 0 : DejaCom =1 : Prog + RC : EndIf
Prog + LineIndent +RC
Else
If dejaCom=1 : Prog + RC : EndIf
DejaCom=0
Prog + Space(Blanc) + LineIndent +RC
EndIf
If FindString("*IF*FOREACH*REPEAT*WHILE*FOR*SELECT*ELSE*CASE*DEFAULT*ELSEIF*","*"+Cde+"*",1)>0
If FindString(UCase(LineIndent),"UNTIL",1)=0 And FindString(UCase(LineIndent),"ENDIF",1)=0
Blanc + Tab
EndIf
EndIf
EndIf
deb = fin+2
fin = FindString(ProgText,RC,deb)
Wend
;*********************************************************
;* Remplacement du programme Actuel par le texte indenté *
;*********************************************************
SetClipboardText(prog)
SetFocus_(Handle)
Res = Keybd_Event_(17,0,0,0)+ Keybd_Event_(65,0,0,0)+Keybd_Event_(86,0,0,0)+Keybd_Event_(36,0,0,0)
Delay(20)
Res = Keybd_Event_(17,0,2,0)
;********** Fin du Programme ***************
Denis