Page 1 sur 4

PBSyntax - Mise en forme du code

Publié : sam. 19/sept./2009 14:21
par Le Soldat Inconnu
Salut,

Je viens de mettre à jour mon petit outil pour mettre en forme le code. Vous le trouverez sur mon site http://www.lsi-dev.com

Pour ceux qui ne connaissent pas, ce petit outil remet propre un code au niveau de l'indentation et des espaces.

Par exemple

Code : Tout sélectionner

;Calcul
X=4+Y*2
If Truc>=X
X-            Machin
EndIf
devient

Code : Tout sélectionner

; Calcul
X = 4 + Y * 2
If Truc >= X
  X - Machin
EndIf
++

------------------
Dernière version du programme ici :
http://www.lsi-dev.com/index.php?mod=do ... rid&id=163

Image

Code source :
http://partage.lsi-dev.com/PB/PBSyntax%20-%20Code.zip

Re: PBSyntax - Mise en forme du code

Publié : sam. 19/sept./2009 18:34
par Anonyme2
J'ai longtemps utilisé ton prog mais ça coinçait et ça n'évoluait pas comme j'en avais besoin, je me suis tourné vers l'excellent outils codecaddy de blueznl, que j'ai paramétré aux petits oignons, il est parfait (pour formater le code) pour mon besoin et en plus il fait des sauvegardes automatiques qui m'ont déjà bien aidées :roll:

Ne m'en veux pas :D

Re: PBSyntax - Mise en forme du code

Publié : sam. 19/sept./2009 23:03
par venom
Ah ouai c'est bon sa mer i soldat il est trop bien cet utilitaire





@++

Re: PBSyntax - Mise en forme du code

Publié : dim. 20/sept./2009 16:04
par Flype
Plutôt cool, merci soldat.

Ce serait par contre plus productif si c'était interfaçable avec les commandes des outils de l'IDE.
Il faut 'juste' un mode invisible avec lecture de la ligne de commande.

Pour traiter le fichier ouvert dans l'IDE :
pbsyntax.exe FILE="%FILE" TEMPFILE="%TEMPFILE"


ou encore,

Pour traiter la sélection du source dans l'IDE
pbsyntax.exe SELECTION=%SELECTION

%SELECTION --> LINESTARTxCOLUMNSTARTxLINEENDxCOLUMNEND --> Ex: 15x1x18x5

Re: PBSyntax - Mise en forme du code

Publié : dim. 20/sept./2009 18:45
par Le Soldat Inconnu
Ça marche très bien en le mettant en outils dans PureBasic ou jaPBe mais uniquement avec %FILE

uniquement sur une sélection, ça doit pouvoir ce faire, mais, la j'ai pas envie, j'ai passer pas mal de temps sur des bidouilles, j'aimerai reprendre mon projet principal du moment :)

Donc je verrais plus tard

Re: PBSyntax - Mise en forme du code

Publié : dim. 31/janv./2010 22:26
par Le Soldat Inconnu
Mise à jour du programme.

Re: PBSyntax - Mise en forme du code

Publié : mer. 15/juin/2011 23:59
par Le Soldat Inconnu
Je suis en train de le refaire complètement.

J'ai plusieurs bug assez complexe et le meilleur moyen de les résoudre, c'est de repartir de zéro. Cette version est trop complexe, on dois pouvoir faire plus simple.

Donc voici le code de l'ancienne version, si ça vous intéresse. Il faut télécharger le programme sur mon site pour avoir les fichiers nécessaire à la compilation du code.

Code : Tout sélectionner

;- Fichier
#fichier0 = 0
#fichier1 = 1
#fichier2 = 2
Global adresse$, Tab.l, Tab_Reelle.l, Onglet.l, txt$, language.s, PbTab.l, PbLanguage.l, PbPref.s, FichierBak

#NbTxt = 35
Global Dim Txt.s(#NbTxt)
Global Dim liste_langue.s(20)

;- Liste des mots clés
Global Dim Mot_D.s(1000)
Global Dim Tab_D.l(1000)
Global Dim Mot_G.s(1000)
Global Dim Tab_G.l(1000)
Global Nb_Mot_D, Nb_Mot_G

;- Recents
Global Dim recent.s(4, 2)

;- Window Constants
#Window_principale = 0
#Window_aide = 1
#Window_langue = 2

;- MenuBar Constants
#Menu_bar_0 = 0
#Ouvrir = 1
#Recent1 = 2
#Recent2 = 3
#Recent3 = 4
#Recent4 = 5
#Concepteur = 6
#MENU_Langue = 8
#Ouvrir_dossier = 9

;- Gadget Constants
#Progression = 0
#Progression_Texte = 1
#Gadget_2 = 2
#Fichier_Frame = 3
#Fichier_Texte = 4
#DossierDemarrage_Texte = 5
#DossierDemarrage_Choisir = 6
#DossierDemarrage = 7
#Panel = 8
#Gadget_9 = 9
#Gadget_10 = 10
#Gadget_11 = 11
#Gadget_13 = 12
#Gadget_12 = 13
#Gadget_14 = 14
#Gadget_15 = 15
#Pref_Tab_Texte = 16
#Pref_Tab = 17
#PrefPB_Texte = 18
#PrefPB_Langue = 19
#PrefPB_Tab = 20
#Fichier_BAK = 21
#Langue = 22
#Pref_Tab_VraiTabulation = 23

Procedure ActiveOption()
	DisableMenuItem(#Menu_bar_0, #MENU_Langue, PbLanguage)
	DisableGadget(#Pref_Tab_Texte, PbTab)
	DisableGadget(#Pref_Tab, PbTab)
	DisableGadget(#Pref_Tab_VraiTabulation, PbTab)
	If GetGadgetState(#Panel) = 1
		SetGadgetState(#Panel, 1)
	EndIf
EndProcedure

Procedure Open_Window()
	#Fenetre_H = 180
	#Fenetre_L = 300
	#Fenetre_B = 4
	If OpenWindow(#Window_principale, 0, 0, #Fenetre_L, #Fenetre_H, "PBSyntax", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
		StickyWindow(#Window_principale, 1)
		DragAcceptFiles_(WindowID(#Window_principale), #True)
		
		If CreateMenu(#Menu_bar_0, WindowID(#Window_principale))
			MenuTitle(Txt(14))
			MenuItem(#Ouvrir, Txt(15))
			MenuItem(#Ouvrir_dossier, Txt(17))
			MenuBar()
			OpenSubMenu(Txt(16))
				MenuItem(#Recent1, "1 " + recent(1, 1))
				MenuItem(#Recent2, "2 " + recent(2, 1))
				MenuItem(#Recent3, "3 " + recent(3, 1))
				MenuItem(#Recent4, "4 " + recent(4, 1))
			CloseSubMenu()
			MenuTitle("?")
			MenuItem(#Concepteur, Txt(18))
			MenuBar()
			MenuItem(#MENU_Langue, "Select language...")
		EndIf
		
		
		;- Panel
		PanelGadget(#Panel, 0, 0, #Fenetre_L, #Fenetre_H - MenuHeight())
			
			AddGadgetItem(#Panel, -1, Txt(19))
			
			x = #Fenetre_B
			y = #Fenetre_B
			Largeur = GetGadgetAttribute(#Panel, #PB_Panel_ItemWidth) - 2 * #Fenetre_B
			
			Frame3DGadget(#Fichier_Frame, x, y, Largeur - 48, 48, Txt(14))
			ButtonGadget(#Gadget_2, x + Largeur - 48, y, 48, 48, Txt(15))
			y + 16
			TextGadget(#Fichier_Texte, x + 16, y, Largeur - 48 - 16 * 2, 16, "", #PB_Text_Center)
			y + 32 + 16
			TextGadget(#Progression_Texte, x, y, Largeur, 16, "", #PB_Text_Center)
			y + 16
			ProgressBarGadget(#Progression, x, y, Largeur, 24, 0, 100)
			y + 24 + 4
			CheckBoxGadget(#Fichier_BAK, x, y, Largeur, 16, Txt(34))
			SetGadgetState(#Fichier_BAK, FichierBak)
			
			
			; Options
			AddGadgetItem(#Panel, -1, Txt(20))
			
			x = #Fenetre_B
			y = #Fenetre_B
			Largeur = GetGadgetAttribute(#Panel, #PB_Panel_ItemWidth) - 2 * #Fenetre_B
			
			TextGadget(#DossierDemarrage_Texte, x, y, Largeur, 16, Txt(21))
			y + 16
			StringGadget(#DossierDemarrage, x, y, Largeur - 48, 24, adresse$)
			ButtonGadget(#DossierDemarrage_Choisir, x + Largeur - 48, y, 48, 24, "...")
			y + 24 + 8
			
			TextGadget(#PrefPB_Texte, x, y, Largeur, 16, Txt(23))
			y + 16
			CheckBoxGadget(#PrefPB_Langue, x, y, Largeur / 2, 16, Txt(24))
			SetGadgetState(#PrefPB_Langue, PbLanguage)
			CheckBoxGadget(#PrefPB_Tab, x + Largeur / 2, y, Largeur / 2, 16, Txt(25))
			SetGadgetState(#PrefPB_Tab, PbTab)
			y + 16 + 8
			TextGadget(#Pref_Tab_Texte, x, y, Largeur, 16, Txt(22))
			y + 16
			SpinGadget(#Pref_Tab, x, y, 48, 24, 0, 10)
			SetGadgetState(#Pref_Tab, Tab)
			SetGadgetText(#Pref_Tab, Str(Tab))
			CheckBoxGadget(#Pref_Tab_VraiTabulation, x + Largeur / 2, y, Largeur / 2, 24, Txt(35))
			SetGadgetState(#Pref_Tab_VraiTabulation, Tab_Reelle)
			
			
		CloseGadgetList()
		
		SetGadgetState(#Panel, Onglet)
		
		ActiveOption()
		
	EndIf
EndProcedure

Procedure Texte(Ligne.s, Index.l)
	Mot.s = ""
	For n = 1 To Index - 1
		Mot = Mot + StringField(Ligne, n, " ") + " "
	Next
	Ligne = Mot + StringField(StringField(StringField(Ligne, Index, " "), 1, "("), 1, ".")
	
	n = 0
	NbEspace = 0
	Texte = 0
	Repeat
		n + 1
		Carac.s = Mid(Ligne, n, 1)
		If Carac = " "
			NbEspace + 1
		ElseIf Carac = Chr(34)
			Texte = 1 - Texte
		EndIf
	Until n > Len(Ligne)
	ProcedureReturn Texte
EndProcedure

Procedure Analyse(Fichier.s)
	Protected Gauche.s, Droite.s, Caractere.s, Extension.s
	
	Extension = LCase (GetExtensionPart(Fichier))
	If Extension = "pb" Or Extension = "pbi" Or Extension = "pbfl"
		If FichierBak
			CopyFile(Fichier, Fichier + ".bak")
		EndIf
		If RenameFile(Fichier, Fichier + ".pbsyntax")
			
			SetGadgetText(#Fichier_Texte, GetFilePart(Fichier))
			
			If OpenFile(#fichier1, Fichier)
				If ReadFile(#fichier0, Fichier + ".pbsyntax")
					
					;- phase 1
					Taille = FileSize(Fichier + ".pbsyntax")
					SetGadgetText(#Progression_Texte, Txt(27) + "1 / 2")
					
					Repeat
						
						Ligne.s = ReadString(#fichier0)
						Ligne = ReplaceString(Ligne, Chr(9), " ")
						Ligne = Trim(Ligne)
						
						p = 0
						Repeat
							p = p + 1
							Longueur = Len(Ligne)
							Caractere = Mid(Ligne, p, 1)
							Gauche = Trim(Left(Ligne, p - 1))
							Droite = Trim(Right(Ligne, Longueur - p))
							
							If Caractere = " " ; On élémine tous les espaces doubles
								Ligne = Gauche + Caractere + Droite
							ElseIf Caractere = "("
								CP1.s = Right(Gauche, 1)
								CP2.s = Right(Gauche, 2)
								CP3.s = Right(Gauche, 3)
								CP4.s = Right(Gauche, 4)
								CP5.s = Right(Gauche, 5)
								CP6.s = Right(Gauche, 6)
								CP7.s = Right(Gauche, 7)
								CP16.s = Right(Gauche, 16)
								If CP1 = "+" Or CP1 = "-" Or CP1 = "*" Or CP1 = "/" Or CP1 = "," Or CP1 = "=" Or CP1 = "&" Or CP7 = " Select" Or CP5 = " Case" Or CP3 = " If" Or CP3 = " Or" Or CP4 = " And" Or CP4 = " Not" Or CP4 = " Xor" Or CP6 = " Debug" Or CP3 = " To" Or CP5 = " Step" Or CP6 = " Until" Or CP6 = " While" Or CP7 = " ElseIf" Or CP16 = " ProcedureReturn"
									Ligne = Gauche + " " + Caractere + Droite
								Else
									Ligne = Gauche + Caractere + Droite
								EndIf
							ElseIf Caractere = ")"
								Ligne = Gauche + Caractere + " " + Droite
							ElseIf Caractere = "\"
								Ligne = Gauche + Caractere + Droite
							ElseIf Caractere = "|" Or Caractere = "!" Or Caractere = "&"
								Ligne = Gauche + " " + Caractere + " " + Droite
								
							ElseIf Caractere = ":"
								If Droite <> ""
									Ligne = Gauche + " " + Caractere + " " + Droite
								Else
									Ligne = Gauche + Caractere + Droite
								EndIf
								
							ElseIf Caractere = "~" Or Caractere = "@" Or Caractere = "%"
								CP1.s = Right(Gauche, 1)
								If CP1 = "(" Or CP1 = "["
									Ligne = Gauche + Caractere + Droite
								Else
									Ligne = Gauche + " " + Caractere + Droite
								EndIf
								
							ElseIf Caractere = "+" Or Caractere = "/" Or Caractere = "*" Or Caractere = "-"
								CP1.s = Right(Gauche, 1)
								CP2.s = Right(Gauche, 2)
								CP3.s = Right(Gauche, 3)
								CP4.s = Right(Gauche, 4)
								CP5.s = Right(Gauche, 5)
								CP6.s = Right(Gauche, 6)
								CP9.s = Right(Gauche, 9)
								CP15.s = Right(Gauche, 15)
								If CP1 = "," Or CP1 = "=" Or CP1 = ">" Or CP1 = "<" Or CP1 = "+" Or CP1 = "-" Or CP1 = "/" Or CP1 = "*" Or CP1 = "!" Or CP1 = "~" Or CP1 = "|" Or CP1 = ":" Or CP1 = "&" Or CP6 = "Select" Or CP4 = "Case" Or CP4 = "With" Or CP2 = "If" Or CP3 = " Or" Or CP4 = " And" Or CP4 = " Not" Or CP4 = " Xor" Or CP5 = "Debug" Or CP3 = " To" Or CP4 = "Step" Or CP5 = "Until" Or CP5 = "While" Or CP6 = "ElseIf" Or CP9 = "Protected" Or CP6 = "Shared" Or CP6 = "Global" Or CP6 = "Static" Or CP15 = "ProcedureReturn"
									Caractere = " " + Caractere
								ElseIf CP1 <> "(" And CP1 <> "" And CP1 <> "@" And CP1 <> "["
									Caractere = " " + Caractere + " "
								EndIf
								Ligne = Gauche + Caractere + Droite
								
							ElseIf Caractere = ","
								Ligne = Gauche + Caractere + " " + Droite
								
							ElseIf Caractere = "=" Or Caractere = ">" Or Caractere = "<"
								CP1 = Right(Gauche, 1)
								If CP1 = ">" Or CP1 = "<"
									Caractere = Caractere + " "
								Else
									Caractere = " " + Caractere + " "
								EndIf
								Ligne = Gauche + Caractere + Droite
								
							ElseIf Caractere = Chr(34)
								Repeat
									p = p + 1
									Caractere = Mid(Ligne, p, 1)
								Until Caractere = Chr(34)
								
							ElseIf Caractere = "'"
								Repeat
									p = p + 1
									Caractere = Mid(Ligne, p, 1)
								Until Caractere = "'"
								
							ElseIf Caractere = ";"
								If Gauche <> ""
									Caractere = " " + Caractere
								EndIf
								Caractere_Suivant1.s = Left(Droite, 1)
								Caractere_Suivant2.s = Left(Droite, 2)
								Caractere_Suivant3.s = Left(Droite, 3)
								If Caractere_Suivant2 = "- " Or Caractere_Suivant2 = "{ " Or Caractere_Suivant3 = "{- " Or Caractere_Suivant2 = "} " Or Caractere_Suivant3 = "}- " Or Caractere_Suivant2 = "/ "Or Caractere_Suivant2 = "[ " Or Caractere_Suivant2 = "] "
									Ligne = Gauche + Caractere + Droite
								ElseIf Caractere_Suivant2 = "{-"
									Ligne = Gauche + Caractere + "{- " + Right(Droite, Len(Droite) - 2)
								ElseIf Caractere_Suivant2 = "}-"
									Ligne = Gauche + Caractere + "}- " + Right(Droite, Len(Droite) - 2)
								ElseIf Caractere_Suivant1 = "-" Or Caractere_Suivant1 = "{" Or Caractere_Suivant1 = "}" Or Caractere_Suivant1 = "/" Or Caractere_Suivant1 = "[" Or Caractere_Suivant1 = "]"
									Ligne = Gauche + Caractere + Caractere_Suivant1 + " " + Right(Droite, Len(Droite) - 1)
								Else
									Ligne = Gauche + Caractere + " " + Droite
								EndIf
								p = Longueur
								
							EndIf
							
						Until p >= Longueur
						
						If Eof(#Fichier0)
							WriteString(#Fichier1, Ligne)
						Else
							WriteStringN(#Fichier1, Ligne)
						EndIf
						
						SetGadgetState(#Progression, Round(100 * Loc(#Fichier0) / Taille, 1))
					Until Eof(#Fichier0)
					
					CloseFile(#Fichier0)
					CloseFile(#Fichier1)
					DeleteFile(Fichier + ".pbsyntax")
					
					;- phase 2
					; MessageRequester("","OK",0)
					
					RenameFile(Fichier, Fichier + ".pbsyntax")
					OpenFile(#Fichier1, Fichier)
					ReadFile(#Fichier0, Fichier + ".pbsyntax")
					
					NbEspace = 0
					Taille = FileSize(Fichier + ".pbsyntax")
					SetGadgetText(#Progression_Texte, txt(28) + "2 / 2")
					
					Repeat
						
						Ligne = Trim(ReadString(#fichier0)) ; On lit la ligne du texte
						
						If Left(Ligne, 1) <> ";" ; Si la ligne n'est pas une ligne de commentaire
							
							; On regarde le premier mot de la ligne
							MotComplet.s = StringField(Ligne, 1, " ")
							Mot.s = StringField(MotComplet, 1, "(")
							Mot = LCase (StringField(Mot, 1, "."))
							Debug "'" + Mot + "'  > 1er mot : Tab -"
							
							For n = 0 To Nb_Mot_G
								If Mot = Mot_G(n)
									NbEspace = NbEspace + Tab_G(n)
									Debug "Tabulation " + Str(Tab_G(n))
								EndIf
							Next
							
						EndIf
						
						;{- Enregistremement de la ligne
						If NbEspace <= 0 ; en cas de problème avec la mise en forme, par exemple un endif sans if
							Espace$ = ""
						ElseIf Tab_Reelle
							Espace$ = RSet("", NbEspace, Chr(9))
						Else
							Espace$ = Space(NbEspace * Tab)
						EndIf
						If Eof(#fichier0)
							WriteString(#fichier1, Ligne)
						Else
							WriteStringN(#fichier1, Espace$ + Ligne)
						EndIf
						;}
						
						If Left(Ligne, 1) <> ";"
							Index = 0
							Repeat
								
								Index = Index + 1
								MotComplet = StringField(Ligne, Index, " ")
								Mot = StringField(MotComplet, 1, "(")
								Mot = LCase (StringField(Mot, 1, "."))
								Debug "'" + Mot + "'  > Mot : Tab +"
								
								If Texte(Ligne, Index) = 0
									For n = 0 To Nb_Mot_D
										If Mot = Mot_D(n)
											NbEspace = NbEspace + Tab_D(n)
											Debug "Tabulation " + Str(Tab_D(n))
										EndIf
									Next
								EndIf
								
							Until MotComplet = "" Or Mot = ";" Or Mot = ";-" Or Mot = ";{" Or Mot = ";}" Or Mot = ";{-" Or Mot = ";/" Or Mot = ";[" Or Mot = ";]"
							
							Index = 1
							Repeat
								Index = Index + 1
								MotComplet = StringField(Ligne, Index, " ")
								Mot = StringField(MotComplet, 1, "(")
								Mot = LCase (StringField(Mot, 1, "."))
								Debug "'" + Mot + "'  > Mot suivant : Tab -"
								
								If Texte(Ligne, Index) = 0
									For n = 0 To Nb_Mot_G
										If Mot = Mot_G(n)
											NbEspace = NbEspace + Tab_G(n)
											Debug "Tabulation " + Str(Tab_G(n))
										EndIf
									Next
								EndIf
								
							Until MotComplet = "" Or Mot = ";" Or Mot = ";-" Or Mot = ";{" Or Mot = ";}" Or Mot = ";{-" Or Mot = ";/" Or Mot = ";[" Or Mot = ";]"
							
						EndIf
						
						SetGadgetState(#Progression, Round(100 * Loc(#fichier0) / Taille, 1))
					Until Eof(#fichier0)
					
					CloseFile(#fichier0)
					CloseFile(#fichier1)
					DeleteFile(Fichier + ".pbsyntax")
					SetGadgetText(#Progression_Texte, Txt(29))
					
				Else
					MessageRequester(Txt(30), Txt(31) + Fichier, 0)
				EndIf
			EndIf
		Else
			MessageRequester(Txt(30), Txt(31) + Fichier, 0)
		EndIf
	EndIf
EndProcedure

Procedure FichiersRecents(Fichier.s)
	If LCase (GetExtensionPart(Fichier)) = "pb"
		For i = 1 To 3
			For ii = 1 To 2
				recent(5 - i, ii) = recent(4 - i, ii)
			Next
		Next
		
		recent(1, 1) = GetFilePart(Fichier)
		recent(1, 2) = Fichier
		
		FreeMenu(#Menu_bar_0)
		If CreateMenu(#Menu_bar_0, WindowID(#Window_principale))
			MenuTitle(Txt(14))
			MenuItem(#Ouvrir, Txt(15))
			MenuItem(#Ouvrir_dossier, Txt(17))
			MenuBar()
			OpenSubMenu(Txt(16))
				MenuItem(#Recent1, "1 " + recent(1, 1))
				MenuItem(#Recent2, "2 " + recent(2, 1))
				MenuItem(#Recent3, "3 " + recent(3, 1))
				MenuItem(#Recent4, "4 " + recent(4, 1))
			CloseSubMenu()
			MenuTitle("?")
			MenuItem(#Concepteur, Txt(18))
			MenuBar()
			MenuItem(#MENU_Langue, "Select language...")
		EndIf
	EndIf
EndProcedure

Procedure Traitement_Dossier(Dossier.s, n.l)
	If Right(Dossier, 1) <> "\"
		Dossier = Dossier + "\"
	EndIf
	If ExamineDirectory(n, Dossier, "*.*")
		Repeat
			FileType = NextDirectoryEntry(n)
			If FileType = 1
				Nom.s = DirectoryEntryName(n)
				If LCase (GetExtensionPart(Nom)) = "pb"
					Analyse(Dossier + Nom)
				EndIf
			ElseIf FileType = 2
				Nom.s = DirectoryEntryName(n)
				If Nom <> "." And Nom <> ".."
					Traitement_Dossier(Dossier + Nom, n + 1)
				EndIf
			EndIf
		Until FileType = 0
	EndIf
EndProcedure

Procedure Traitement(choix)
	
	Select choix
		Case 0
			Fichier.s = OpenFileRequester(Txt(26) + "Purebasic *.pb", adresse$, Txt(26) + "Purebasic|*.pb;*.pbi;*.pbfl", 0, #PB_Requester_MultiSelection)
			Repeat
				If Fichier <> ""
					FichiersRecents(Fichier)
					Analyse(Fichier)
				EndIf
				Fichier = NextSelectedFileName()
			Until Fichier = ""
			
		Case -1
			Fichier = txt$
			FichiersRecents(Fichier)
			Analyse(Fichier)
			
		Case -2
			dropped.l = EventwParam()
			num.l = DragQueryFile_(dropped, -1, "", 0)
			For Index = 0 To num - 1
				Size.l = DragQueryFile_(dropped, Index, 0, 0)
				Fichier.s = Space(Size)
				DragQueryFile_(dropped, Index, Fichier, Size + 1)
				If FileSize(Fichier) >= 0
					FichiersRecents(Fichier)
					Analyse(Fichier)
				ElseIf FileSize(Fichier) = -2
					Traitement_Dossier(Fichier, 1)
				EndIf
			Next
			DragFinish_(dropped)
			
		Case -3
			Fichier.s = PathRequester(Txt(9), adresse$)
			If Fichier <> ""
				Traitement_Dossier(Fichier, 1)
			EndIf
			
			
			
		Default
			Fichier.s = recent(choix, 2)
			nom$ = recent(choix, 1)
			Analyse(Fichier)
	EndSelect
	
EndProcedure

Procedure Charge_Langue()
	If FileSize("PBSyntax\" + language + "\Language.ini") < 0
		language = "English"
	EndIf
	If OpenPreferences("PBSyntax\" + language + "\Language.ini")
		For n = 0 To #NbTxt
			Txt(n) = ReadPreferenceString("Txt " + Str(n), "")
		Next
	EndIf
EndProcedure

Procedure Charger()
	
	OpenPreferences("PBSyntax\PBSyntax.inf")
	PreferenceGroup("Général")
	adresse$ = ReadPreferenceString("Dossier de démarrage", "c:\program files\purebasic\")
	Tab = ReadPreferenceLong("Tabulation", 2)
	Tab_Reelle = ReadPreferenceLong("Tabulation réelle", 0)
	language = ReadPreferenceString("Langue", "English")
	PreferenceGroup("Options")
	PbTab = ReadPreferenceLong("Lecture de la tabulation de PB", 1)
	PbLanguage = ReadPreferenceLong("Lecture de la langue de PB", 1)
	PbPref = ReadPreferenceString("Adresse de PureBasics.prefs", GetSpecialFolderLocation(#CSIDL_APPDATA) + "PureBasic\PureBasic.prefs")
	FichierBak = ReadPreferenceLong("Création d'un Bak", 1)
	PreferenceGroup("Documents récents")
	For i = 1 To 4
		recent(i, 1) = ReadPreferenceString("Nom du fichier " + Str(i), "")
		recent(i, 2) = ReadPreferenceString("Adresse du fichier " + Str(i), "")
	Next
	ClosePreferences()
	
	OpenPreferences(PbPref)
	PreferenceGroup("Global")
	If PbTab
		Tab = ReadPreferenceLong("TabLength", 2)
		Tab_Reelle = ReadPreferenceLong("RealTab", 0)
	EndIf
	If PbLanguage
		language = ReadPreferenceString("CurrentLanguage", "English")
	EndIf
	ClosePreferences()
	
	Charge_Langue()
	
	If FileSize(PbPref) = -1
		PbPref = GetSpecialFolderLocation(#CSIDL_APPDATA) + "PureBasic\PureBasic.prefs"
	EndIf
	
	If FileSize(PbPref) = -1
		Repeat
			MessageRequester("PBSyntax", Txt(32), 16)
			PbPref = OpenFileRequester("PBSyntax", "c:\", "PureBasic.prefs|PureBasic.prefs", 1)
			If PbPref = ""
				End
			EndIf
		Until FileSize(PbPref) > 0
	EndIf
	
	; chargement des mots clé
	If OpenFile(0, "PBSyntax\Liste +.txt")
		Nb_Mot_D = -1
		Repeat
			Nb_Mot_D + 1
			Texte.s = ReadString(0)
			Mot_D(Nb_Mot_D) = StringField(Texte, 1, Chr(9))
			Tab_D(Nb_Mot_D) = Val(StringField(Texte, 2, Chr(9)))
			; Debug Mot_D(Nb_Mot_D) + " = " + Str(Tab_D(Nb_Mot_D))
		Until Eof(0)
		CloseFile(0)
	EndIf
	
	If OpenFile(0, "PBSyntax\Liste -.txt")
		Nb_Mot_G = -1
		Repeat
			Nb_Mot_G + 1
			Texte.s = ReadString(0)
			Mot_G(Nb_Mot_G) = StringField(Texte, 1, Chr(9))
			Tab_G(Nb_Mot_G) = Val(StringField(Texte, 2, Chr(9)))
			; Debug Mot_G(Nb_Mot_G) + " = " + Str(Tab_G(Nb_Mot_G))
		Until Eof(0)
		CloseFile(0)
	EndIf
	
EndProcedure

Procedure Sauver()
	
	If CreatePreferences("PBSyntax\PBSyntax.inf")
		PreferenceComment(" PBSyntax")
		PreferenceComment(" Version 4.0")
		PreferenceComment(" Développeur : LSI (BOUGUIN Régis)")
		PreferenceComment("")
		PreferenceGroup("Général")
		WritePreferenceString("Dossier de démarrage", adresse$)
		WritePreferenceLong("Tabulation", Tab)
		WritePreferenceLong("Tabulation réelle", Tab_Reelle)
		WritePreferenceString("Langue", language)
		PreferenceComment("")
		PreferenceGroup("Options")
		WritePreferenceLong("Lecture de la tabulation de PB", PbTab)
		WritePreferenceLong("Lecture de la langue de PB", PbLanguage)
		WritePreferenceString("Adresse de PureBasics.prefs", PbPref)
		WritePreferenceLong("Création d'un Bak", FichierBak)
		PreferenceComment("")
		PreferenceGroup("Documents récents")
		For i = 1 To 4
			WritePreferenceString("Nom du fichier " + Str(i), recent(i, 1))
			WritePreferenceString("Adresse du fichier " + Str(i), recent(i, 2))
		Next
		ClosePreferences()
	EndIf
	
EndProcedure






;- Debut du programme

Debut:

Charger()
Open_Window()

txt$ = ProgramParameter()
If txt$ <> ""
	Repeat
		txt2$ = ProgramParameter()
		If txt2$ <> ""
			txt$ = txt$ + " " + txt2$
		EndIf
	Until txt2$ = ""
	Traitement(-1)
	Sauver()
	End
EndIf

Repeat
	Event = WaitWindowEvent()
	
	If Event = #PB_Event_Menu
		Select EventMenu()
			Case #Ouvrir
				Traitement(0)
			Case #Ouvrir_dossier
				Traitement(-3)
			Case #Recent1
				Traitement(1)
			Case #Recent2
				Traitement(2)
			Case #Recent3
				Traitement(3)
			Case #Recent4
				Traitement(4)
			Case #Concepteur
				MessageRequester("Concepteur", "Le Soldat Inconnu" + Chr(10) + "Forum français PureBasic", 0)
			Case #MENU_Langue
				Goto choix_langue
		EndSelect
	EndIf
	
	If Event = #PB_Event_Gadget
		Select EventGadget()
			Case #Panel
				Onglet = GetGadgetState(#Panel)
			Case #Gadget_2
				Traitement(0)
			Case #DossierDemarrage_Choisir
				txt$ = PathRequester(Txt(33), adresse$)
				If txt$ <> ""
					adresse$ = txt$
					SetGadgetText(#DossierDemarrage, adresse$)
				EndIf
			Case #DossierDemarrage
				adresse$ = GetGadgetText(#DossierDemarrage)
			Case #Pref_Tab
				Tab = GetGadgetState(#Pref_Tab)
				If GetGadgetText(#Pref_Tab) <> Str(Tab)
					SetGadgetText(#Pref_Tab, Str(Tab))
				EndIf
			Case #PrefPB_Langue
				PbLanguage = GetGadgetState(#PrefPB_Langue)
				ActiveOption()
				If PbLanguage = 0
					Goto choix_langue
				Else
					Sauver()
					CloseWindow(#Window_principale)
					Goto debut
				EndIf
			Case #PrefPB_Tab
				PbTab = GetGadgetState(#PrefPB_Tab)
				If PbTab = 0
					ActiveOption()
				Else
					Sauver()
					CloseWindow(#Window_principale)
					Goto debut
				EndIf
				
			Case #Pref_Tab_VraiTabulation
				Tab_Reelle = GetGadgetState(#Pref_Tab_VraiTabulation)
			Case #Fichier_BAK
				FichierBak = GetGadgetState(#Fichier_BAK)
		EndSelect
	EndIf
	
	If Event = #WM_DROPFILES
		Traitement(-2)
	EndIf
	
Until Event = #PB_Event_CloseWindow

Sauver()

End


choix_langue:
Sauver()
CloseWindow(#Window_principale)

If OpenWindow(#Window_langue, 0, 0, 300, 30, "Select your language", #PB_Window_ScreenCentered)
	If CreateGadgetList(WindowID(#Window_langue))
		ComboBoxGadget(#Langue, 5, 5, 290, 20)
	EndIf
	
	liste_langue(0) = "Deutsch"
	liste_langue(1) = "Dutch"
	liste_langue(2) = "English"
	liste_langue(3) = "Francais"
	liste_langue(4) = "Italian"
	liste_langue(5) = "Portuguese"
	liste_langue(6) = "Spanish"
	
	pos = -1
	For n = 0 To 6
		If FileSize("PBSyntax\" + liste_langue(n) + "\Language.ini") >= 0
			pos = pos + 1
			liste_langue(pos) = liste_langue(n)
			AddGadgetItem(#Langue, -1, liste_langue(n))
		EndIf
	Next
	
	language = ""
	Repeat
		Event = WaitWindowEvent()
		If Event = #PB_Event_Gadget
			Select EventGadget() ; boutons, zone de texte, ...
				Case #Langue
					pos = GetGadgetState(#Langue)
					; Debug pos
					If pos >= 0
						language = liste_langue(pos)
						; Debug language
					EndIf
			EndSelect
		EndIf
		
	Until language <> ""
	
	CloseWindow(#Window_langue)
	Sauver()
EndIf

Goto debut

Re: PBSyntax - Mise en forme du code

Publié : jeu. 16/juin/2011 8:50
par Kwai chang caine
Merci Soldat
Tes codes sont beaux, ton avatar est beau, ton site que je viens de revisiter est classe et beau, ......p'tetre meme que toi aussi t'es beau........ :mrgreen:

Re: PBSyntax - Mise en forme du code

Publié : jeu. 16/juin/2011 13:54
par dayvid
Kcc 8O

Bin va-y, demande le en mariage t'en que on y est :lol:
Aller je te soutiens !, va-y je te dis :lol:

Re: PBSyntax - Mise en forme du code

Publié : ven. 17/juin/2011 8:25
par Le Soldat Inconnu
Bon, la nouvelle version est tellement plus simple que l'ancienne que je m'impressionne moi même :mrgreen:

Je ponds une interface, teste sur mes plus gros programmes (ce qui devrait permettre un bon débogage) et je poste.


@KCC
Oui, je suis beau ! (je ne vais pas dire le contraire de toute façon :mrgreen: )

Re: PBSyntax - Mise en forme du code

Publié : ven. 17/juin/2011 9:43
par Kwai chang caine
Oui, je suis beau ! (je ne vais pas dire le contraire de toute façon )
:lol:
la nouvelle version est tellement plus simple que l'ancienne
Ce qui est rigolo dans la prog, c'est que quand on regarde de plus pres un vieux code, on jurerais que c'est pas nous qui l'avons codé, tellement c'est mauvais 8O
Je me demande, si la programmation ne décele pas la pluripersonalité qui regne en nous :mrgreen:

Re: PBSyntax - Mise en forme du code

Publié : ven. 17/juin/2011 13:10
par Guimauve
Kwai chang caine a écrit : Ce qui est rigolo dans la prog, c'est que quand on regarde de plus pres un vieux code, on jurerais que c'est pas nous qui l'avons codé, tellement c'est mauvais 8O
Je me demande, si la programmation ne décele pas la pluripersonalité qui regne en nous :mrgreen:
Non, ce n'est pas ça ! Le phénomène s'explique de façon très simple en fait.

À chaque ligne de code fonctionnelle, on progresse sur le plan de la programmation. En résumé, après avoir créé un programme on est meilleur que lorsque l'on a commencé.

C'est pour ça que mon logiciel "Dev-Type" (générateur de commande automatique) n'est pas encore prêt pour la simple et bonne raison que le code de la version précédente était tellement complexe et difficile à modifier que faire un petit ajout pour prendre en compte les tableaux, les listes chaînée et les maps dans les structures était tout bonnement impossible à faire. J'ai donc été contraint de ré-écrire 80% du générateur de code. Et au passage j'en ai profité pour le simplifier au maximum en combinant certaines procédures similaires ensembles et en virant les instructions inutiles.

Ce qu'il me reste à faire c'est la partie pour les tableaux statiques à dimension multiple genre :

Code : Tout sélectionner

#MATRIX_LINE_MAX = 4
#MATRIX_ROW_MAX = 4

Structure Vector
  
  Vec_Element.d[#MATRIX_ROW_MAX]
  
EndStructure 

Structure Matrix
  
  Mat_Element.Vector[#MATRIX_LINE_MAX]
  
EndStructure 
Je ne donne pas de date sur quand j'aurai terminé de programmer tout ça, patience donc.

A+
Guimauve

Re: PBSyntax - Mise en forme du code

Publié : sam. 18/juin/2011 20:09
par Kwai chang caine
À chaque ligne de code fonctionnelle, on progresse sur le plan de la programmation. En résumé, après avoir créé un programme on est meilleur que lorsque l'on a commencé.
Oh que c'est vrai !!!
Remarque c'est comme dans la vie....on se couche toujours moins bete que l'on se leve :roll:
Quoi que...ça marche pas toujours sur tout le monde :lol: :lol:
Je ne donne pas de date sur quand j'aurai terminé de programmer tout ça, patience donc.
J'avais lu ton projet, comme dab pas tout compris :oops:
Mais ça avait l'air un super truc, comme beaucoup de ce que tu codes (Mode lèche botte OFF) 8)
Je serais curieux de voir ça des que ce sera prés :wink:

Re: PBSyntax - Mise en forme du code

Publié : mer. 29/juin/2011 19:10
par Le Soldat Inconnu
ça a bien avancé, cette seconde version. Encore quelques tests et je poste une version pour lui faire subir vos essais cruels et sanguinaires. (surtout les essais de KCC, si ça marche pour lui, c'est bon partout :mrgreen: )

Re: PBSyntax - Mise en forme du code

Publié : mer. 29/juin/2011 21:05
par Kwai chang caine
:lol: :lol:
Le premier essai cruel, c'est deja que je comprenne comment lancer le code
Apres c'est que je comprenne comment faire marcher le programme
Puis que j'ai la bonne config pour qu'il tourne, entre mes vieilles machines avec des OS prehistoriques
Et au final, que je fasse pas une connerie que le programmeur a pas prévu :mrgreen:

Mais si tu veux le nec plus ultra, j'ai le top du top pour les tests
Ma femme !!!
Elle est completement etanche a l'informatique elle tape toujours sur la seule touche que j'ai pas bloqué :?

Alors tu vois..si tu veux....j'te la prete...quelques secondes suffisent :lol:
Remarque elle me dit tout le temps à moi aussi que quelques secondes suffisent :mrgreen: :oops:

Quoi qu'il en soit pour toi, et tes supers codes...je serais toujours la comme BETA testeur personnel :mrgreen: