PBSyntax - Mise en forme du code
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: PBSyntax - Mise en forme du code
C'est ici :
http://www.lsi-dev.com/index.php?mod=do ... rid&id=163
Pour info :
- On peut utiliser le glisser déposer pour ajouter des fichiers à traiter
- On peut mettre le programme en outil de PB, faut donner en param le nom du fichier et recharger le code après le traitement.
http://www.lsi-dev.com/index.php?mod=do ... rid&id=163
Pour info :
- On peut utiliser le glisser déposer pour ajouter des fichiers à traiter
- On peut mettre le programme en outil de PB, faut donner en param le nom du fichier et recharger le code après le traitement.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: PBSyntax - Mise en forme du code
Tu va pas y croire, je suis arrivé à l'utiliser
Par contre, j'ai comme habitude de faire des paragraphes pour separer les divers parties de mes codes
Et ton programme, a cadré à gauche mon mot "constantes" comme tous les autres qui sont dans ce cas
Remplacé par
Autrement bravo, propre, simple, efficace....SOLDAT INCONNU quoi 

Par contre, j'ai comme habitude de faire des paragraphes pour separer les divers parties de mes codes
Et ton programme, a cadré à gauche mon mot "constantes" comme tous les autres qui sont dans ce cas
Code : Tout sélectionner
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; CONSTANTES
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Code : Tout sélectionner
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; CONSTANTES
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Re: PBSyntax - Mise en forme du code
je croyais que ça fonctionnait en plugin, mais c'est pas le cas et c'est bien dommage.
Sinon il faut que je te dise que ton site à une très mauvaise réputation auprès de WOT, WOT est une extension pour chrome et firefox qui permet d'évaluer et de connaitre l'avis des autres navigateurs sur le sérieux d'un site.
Cela vient apparemment des exe que tu distribues et qui sont considérés comme des malwares etc..., je sais que tu connais le problème.
Sinon il faut que je te dise que ton site à une très mauvaise réputation auprès de WOT, WOT est une extension pour chrome et firefox qui permet d'évaluer et de connaitre l'avis des autres navigateurs sur le sérieux d'un site.
Cela vient apparemment des exe que tu distribues et qui sont considérés comme des malwares etc..., je sais que tu connais le problème.
Re: PBSyntax - Mise en forme du code
Je viens de voter sur WOT pour remonter un peu la cote du site.
Ce problème de faux positif est vraiment embêtant !
Ce problème de faux positif est vraiment embêtant !
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: PBSyntax - Mise en forme du code
c'est uniquement du aux fausses détection pour le WOT.
@Nico, tu entends quoi par plugin ?
@Nico, tu entends quoi par plugin ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: PBSyntax - Mise en forme du code
Un outil pour l'IDE de Purebasic
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: PBSyntax - Mise en forme du code
Ben ça fonctionne, moi, je l'utilise sous jaPBe avec le paramètre %FILE%
Sous PureBasic, avec %FILE en ligne de commande, cocher "attendre la fin de l’exécution" et cocher "recharger le code dans l'onglet courant". Fonctionne également, je viens de faire l'essai.
Sous PureBasic, avec %FILE en ligne de commande, cocher "attendre la fin de l’exécution" et cocher "recharger le code dans l'onglet courant". Fonctionne également, je viens de faire l'essai.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: PBSyntax - Mise en forme du code
ah ok, vu qu'il y avait pas de fichier readme avec, j'ai supposé que non.
Tu l'avais peut être expliqué dans le topic mais j'ai du zappé, impeccable alors.
Tu l'avais peut être expliqué dans le topic mais j'ai du zappé, impeccable alors.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: PBSyntax - Mise en forme du code
oui, z'avais expliqué 
C'est en test pour le moment. J'ai trouvé un petit bug si on ne définis pas le dossier de travail, et un autre pour les fichiers comportant des espaces envoyés en ligne de commande
J'ai mis le programme à jour
Si vous en trouvez d'autres. KCC, ton soucis n'est pas un bug puisque c'est voulu comme ça.
Je pense que je vais ajouter une fenêtre de configuration de la mise en forme pour :
- Activer la mise en forme des commentaires
- Ajout d'espace avant et après les opérateurs
- Ajout d'espace après les ","
- Ajout d'espace après "(" et avant ")"
Et faut que je regarde si je peux utiliser simplement le compilateur pour tester si un code est toujours compilable après mise en forme, et générer une erreur sinon.
A au fait, le point fort de cette version, c'est ceci :
Une gestion complète des CompilerIf et CompilerSelect
Vous pouvez également éditer le contenu des fichiers *.txt pour personnaliser la mise en forme, il faut que j'ajoute des lignes de commentaires dedans pour expliquer

C'est en test pour le moment. J'ai trouvé un petit bug si on ne définis pas le dossier de travail, et un autre pour les fichiers comportant des espaces envoyés en ligne de commande
J'ai mis le programme à jour
Si vous en trouvez d'autres. KCC, ton soucis n'est pas un bug puisque c'est voulu comme ça.
Je pense que je vais ajouter une fenêtre de configuration de la mise en forme pour :
- Activer la mise en forme des commentaires
- Ajout d'espace avant et après les opérateurs
- Ajout d'espace après les ","
- Ajout d'espace après "(" et avant ")"
Et faut que je regarde si je peux utiliser simplement le compilateur pour tester si un code est toujours compilable après mise en forme, et générer une erreur sinon.
A au fait, le point fort de cette version, c'est ceci :
Code : Tout sélectionner
CompilerIf #truc
If a * *pointeur <> c
CompilerElse
If -a * *pointeur >= c
CompilerEndIf
c = @adresse + B + *pointeur
EndIf
CompilerSelect #machin
CompilerCase 1
If a + B < 0
If bidule
CompilerCase 2
If a - B > 0
If bidule <> 3
CompilerEndSelect
oulala.s = "htre"
EndIf
EndIf
Vous pouvez également éditer le contenu des fichiers *.txt pour personnaliser la mise en forme, il faut que j'ajoute des lignes de commentaires dedans pour expliquer
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: PBSyntax - Mise en forme du code
Dic donc LSI, tu avence sacrément bien a ce que je voie
Que tu es fort
Tu voudrait pas me filer un ch'ti coup de main dans mon projet
Ya pas grand chose a faire, juste corriger deux trois truc et
améliorer quelque commandes, en plus je rame un peut

Que tu es fort

Tu voudrait pas me filer un ch'ti coup de main dans mon projet

Ya pas grand chose a faire, juste corriger deux trois truc et
améliorer quelque commandes, en plus je rame un peut

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: PBSyntax - Mise en forme du code
Nouvelle version en ligne, j'ai ajouter les options de formatage.
il faut supprimer tous les fichiers PBSyntax créés pour les mettre à jour, merci.
Il me reste à zieuter pour le compilateur
J'espère que c'est pas trop complexe, l'affaire
@ Dayvid : Charité bien ordonné commence par soi même, j'ai plein de projet à finir pour le moment (mon Agenda, Groupe Exploreur, mon logiciel de Sauvegarde et des soucis de fausse détection de virus à gérer pour mes programmes)
il faut supprimer tous les fichiers PBSyntax créés pour les mettre à jour, merci.
Il me reste à zieuter pour le compilateur

@ Dayvid : Charité bien ordonné commence par soi même, j'ai plein de projet à finir pour le moment (mon Agenda, Groupe Exploreur, mon logiciel de Sauvegarde et des soucis de fausse détection de virus à gérer pour mes programmes)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: PBSyntax - Mise en forme du code
Ouais, je m'en doutais bien 

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: PBSyntax - Mise en forme du code
J'ai apporté quelque correction sur la dernière version :
- Gestion des [ et ]
- Reconnaissance des @*Variable
Voir sur mon site.
Et comme promis, le code du logiciel :
Attention il faut télécharger le programme d'abord sur mon site et le lancer. Le programme va alors décompresser des fichiers *.txt qui sont nécessaires à l'éxécution du code.
le lien du programme avec image et fichier texte :
http://partage.lsi-dev.com/PB/PBSyntax%20-%20Code.zip
- Gestion des [ et ]
- Reconnaissance des @*Variable
Voir sur mon site.
Et comme promis, le code du logiciel :
Attention il faut télécharger le programme d'abord sur mon site et le lancer. Le programme va alors décompresser des fichiers *.txt qui sont nécessaires à l'éxécution du code.
le lien du programme avec image et fichier texte :
http://partage.lsi-dev.com/PB/PBSyntax%20-%20Code.zip
Code : Tout sélectionner
; Mettre à 1 pour écrire le fichier mis en forme
#Ecriture = 1
Structure IndentationInfo
Keyword.s
Function.b
Indentation.l
EndStructure
Structure CompilerInfo
Keyword.s
Type.b
EndStructure
Structure CompilerIndentationInfo
Type.b
Indentation.l
EndStructure
Structure LigneInfo
List Mot.s()
List Texte.s()
List Carac.s()
Commentaire.s
Indentation.l
EndStructure
Structure OptionInfo
Backup.l
Tab.s
EndStructure
Enumeration
#Type_Autre = 0
#Type_Operateur = 1
#Type_MotClef = 2
#Type_Variable = 4
EndEnumeration
Enumeration 1
#Compiler_Start
#Compiler_Middle
#Compiler_End
#Compiler_After
EndEnumeration
Global NewList Keyword.s()
Global NewList Operator.s()
Global NewList Variable.s()
Global NewList IndentationP.IndentationInfo()
Global NewList IndentationN.IndentationInfo()
Global NewList Compiler.CompilerInfo()
Global NewList CompilerIndentation.CompilerIndentationInfo()
#FiltrePB = "pb"
#FiltrePBI = "pbi"
#Erreur_Temps_Maximum = 30 ; en seconde
Structure TraitementInfo
Fichier.s
Dossier.s
Filtre.s
Recurence.b
EndStructure
Global NewList ListeTraitement.TraitementInfo()
Enumeration
#Liste_Titre
#Liste_Fichier
#Liste_Dossier
#Liste_Dossier_Fenetre
#Liste_Dossier_Titre
#Liste_Dossier_Texte
#Liste_Dossier_SousDossier
#Liste_Dossier_FiltrePB
#Liste_Dossier_FiltrePBI
#Liste_Dossier_FiltreAutre
#Liste_Dossier_FiltreAutre_Texte
#Liste_Dossier_Selection
#Liste_Dossier_Valider
#Liste_Supprimer
#Liste
#Traitement_Titre
#Traitement_Lancer
#Traitement_Annuler
#Traitement_Texte
#Option_Titre
#Option_Indentation
#Option_CopieSauvegarde
EndEnumeration
Global Option.OptionInfo, Quitter, Parametre_Lancement, Traitement_Arret
SetCurrentDirectory(ProgramFiledirectory())
;{ Chargement des données
If FileSize("PBSyntax - Keywords.txt") = -1
If CreateFile(0, "PBSyntax - Keywords.txt")
WriteData(0, ?Keywords, ?Operators - ?Keywords)
CloseFile(0)
EndIf
EndIf
If ReadFile(0, "PBSyntax - Keywords.txt")
Repeat
AddElement(Keyword())
Keyword() = LCase(Trim(ReadString(0)))
If Keyword() And Left(Keyword(), 1) <> ";"
Keyword() = RSet(Str(Len(Keyword())), 4, "0") + Keyword()
Else
DeleteElement(Keyword())
EndIf
Until Eof(0)
; Triage du texte le plus long au plus court
SortList(Keyword(), #PB_Sort_Descending | #PB_Sort_NoCase)
ForEach Keyword()
Keyword() = Right(Keyword(), Len(Keyword()) - 4)
Next
CloseFile(0)
Else
MessageRequester("Erreur", "Chargement du fichier 'PBSyntax - Keywords.txt' impossible")
End
EndIf
If FileSize("PBSyntax - Operators.txt") = -1
If CreateFile(0, "PBSyntax - Operators.txt")
WriteData(0, ?Operators, ?Variables - ?Operators)
CloseFile(0)
EndIf
EndIf
If ReadFile(0, "PBSyntax - Operators.txt")
Repeat
AddElement(Operator())
Operator() = LCase(Trim(ReadString(0)))
If Operator() And Left(Operator(), 1) <> ";"
Operator() = RSet(Str(Len(Operator())), 4, "0") + Operator()
Else
DeleteElement(Operator())
EndIf
Until Eof(0)
; Triage du texte le plus long au plus court
SortList(Operator(), #PB_Sort_Descending | #PB_Sort_NoCase)
ForEach Operator()
Operator() = Right(Operator(), Len(Operator()) - 4)
Next
CloseFile(0)
Else
MessageRequester("Erreur", "Chargement du fichier 'PBSyntax - Operators.txt' impossible")
End
EndIf
If FileSize("PBSyntax - Variables.txt") = -1
If CreateFile(0, "PBSyntax - Variables.txt")
WriteData(0, ?Variables, ?IndentationP - ?Variables)
CloseFile(0)
EndIf
EndIf
If ReadFile(0, "PBSyntax - Variables.txt")
Repeat
AddElement(Variable())
Variable() = LCase(Trim(ReadString(0)))
If Variable() And Left(Variable(), 1) <> ";"
Variable() = RSet(Str(Len(Variable())), 4, "0") + Variable()
Else
DeleteElement(Variable())
EndIf
Until Eof(0)
; Triage du texte le plus long au plus court
SortList(Variable(), #PB_Sort_Descending | #PB_Sort_NoCase)
ForEach Variable()
Variable() = Right(Variable(), Len(Variable()) - 4)
Next
CloseFile(0)
Else
MessageRequester("Erreur", "Chargement du fichier 'PBSyntax - Variables.txt' impossible")
End
EndIf
If FileSize("PBSyntax - Compiler.txt") = -1
If CreateFile(0, "PBSyntax - Compiler.txt")
WriteData(0, ?Compiler, ?Keywords - ?Compiler)
CloseFile(0)
EndIf
EndIf
If OpenPreferences("PBSyntax - Compiler.txt")
If ExaminePreferenceKeys()
While NextPreferenceKey()
AddElement(Compiler())
Compiler()\Keyword = LCase(PreferenceKeyName())
Select LCase(PreferenceKeyValue())
Case "start"
Compiler()\Type = #Compiler_Start
Case "middle"
Compiler()\Type = #Compiler_Middle
Case "end"
Compiler()\Type = #Compiler_End
EndSelect
Wend
EndIf
ClosePreferences()
Else
MessageRequester("Erreur", "Chargement du fichier 'PBSyntax - Compiler.txt' impossible")
End
EndIf
If FileSize("PBSyntax - Indentation +.txt") = -1
If CreateFile(0, "PBSyntax - Indentation +.txt")
WriteData(0, ?IndentationP, ?IndentationN - ?IndentationP)
CloseFile(0)
EndIf
EndIf
If OpenPreferences("PBSyntax - Indentation +.txt")
If ExaminePreferenceKeys()
While NextPreferenceKey()
AddElement(IndentationP())
IndentationP()\Keyword = LCase(PreferenceKeyName())
If Right(IndentationP()\Keyword, 1) = "("
IndentationP()\Function = 1
IndentationP()\Keyword = Left(IndentationP()\Keyword, Len(IndentationP()\Keyword) - 1)
EndIf
IndentationP()\Indentation = Val(PreferenceKeyValue())
Wend
EndIf
ClosePreferences()
Else
MessageRequester("Erreur", "Chargement du fichier 'PBSyntax - Indentation +.txt' impossible")
End
EndIf
If FileSize("PBSyntax - Indentation -.txt") = -1
If CreateFile(0, "PBSyntax - Indentation -.txt")
WriteData(0, ?IndentationN, ?TxtIncludeBinary_End - ?IndentationN)
CloseFile(0)
EndIf
EndIf
If OpenPreferences("PBSyntax - Indentation -.txt")
If ExaminePreferenceKeys()
While NextPreferenceKey()
AddElement(IndentationN())
IndentationN()\Keyword = LCase(PreferenceKeyName())
If Right(IndentationN()\Keyword, 1) = "("
IndentationN()\Function = 1
IndentationN()\Keyword = Left(IndentationN()\Keyword, Len(IndentationN()\Keyword) - 1)
EndIf
IndentationN()\Indentation = Val(PreferenceKeyValue())
Wend
EndIf
ClosePreferences()
Else
MessageRequester("Erreur", "Chargement du fichier 'PBSyntax - Indentation -.txt' impossible")
End
EndIf
;}
;{ Chargement de l'interface
UsePNGImageDecoder()
Global Icone_Fichier_16, Icone_Dossier_16
Icone_Annuler = CatchImage(#PB_Any, ?Icone_Annuler)
Icone_Dossier = CatchImage(#PB_Any, ?Icone_Dossier)
Icone_Dossier_16 = CatchImage(#PB_Any, ?Icone_Dossier_16)
Icone_Fichier = CatchImage(#PB_Any, ?Icone_Fichier)
Icone_Fichier_16 = CatchImage(#PB_Any, ?Icone_Fichier_16)
Icone_Information = CatchImage(#PB_Any, ?Icone_Information)
Icone_Lancer = CatchImage(#PB_Any, ?Icone_Lancer)
Icone_Liste = CatchImage(#PB_Any, ?Icone_Liste)
Icone_Traitement = CatchImage(#PB_Any, ?Icone_Traitement)
;}
Procedure Traitement_Affichage(Fichier.s, Lecture.f, Indentation.f, Formatage.f, Erreur.l, Erreur_Temps.l, AffichageForce.b)
Static Temps.q
Protected Texte.s
Temps_Actuel = ElapsedMilliseconds()
If Temps_Actuel - Temps > 100 Or AffichageForce
Temps = Temps_Actuel
Texte = Chr(34) + GetFilePart(Fichier) + Chr(34)
If Lecture > 0 And (Erreur = 0 Or Lecture = 1)
Texte + Chr(10) + "Lecture : " + Str(Lecture * 100) + "%"
EndIf
If Indentation > 0 And (Erreur = 0 Or Indentation = 1)
Texte + Chr(10) + "Indentation : " + Str(Indentation * 100) + "%"
EndIf
If Formatage > 0 And (Erreur = 0 Or Formatage = 1)
Texte + Chr(10) + "Formatage : " + Str(Formatage * 100) + "%"
EndIf
If Erreur <> 0
Select Erreur
Case -100
Texte + Chr(10) + "Traitement du fichier annulé."
Case -2
Texte + Chr(10) + "Le code ne peut plus être compiler."
Case -1
Texte + Chr(10) + "Problème d'indentation non nulle à la fin du code."
Default
Texte + Chr(10) + "Problème d'indentation négative à la ligne " + Str(Erreur) + "."
EndSelect
If Erreur > -100
Texte + Chr(10) + "Vous avez " + Str(#Erreur_Temps_Maximum - Erreur_Temps) + "s pour annuler le traitement du fichier."
EndIf
EndIf
SetGadgetText(#Traitement_Texte, Texte)
EndIf
EndProcedure
Procedure Gestion_Indentation(Indentation_Valeur, *Indentation.IndentationInfo, Evolution) ; Gère l'évolution de l'indentation et les cas particuliers causés par les fonctions du type CompilerIf
ForEach Compiler()
If *Indentation\Keyword = Compiler()\Keyword
Type = Compiler()\Type
Break
EndIf
Next
If Evolution < 0
If Type = #Compiler_Middle And ListIndex(CompilerIndentation()) >= 0
Indentation_Valeur = CompilerIndentation()\Indentation
; Debug "Compiler milieu -"
; Debug CompilerIndentation()\Indentation
EndIf
If Type = #Compiler_End And ListIndex(CompilerIndentation()) >= 0
Indentation_Evolution = Indentation_Valeur - CompilerIndentation()\Indentation
Indentation_Valeur = CompilerIndentation()\Indentation
; Debug "Compiler fin"
; Debug CompilerIndentation()\Indentation
CompilerIndentation()\Type = #Compiler_After
CompilerIndentation()\Indentation + *Indentation\Indentation + Indentation_Evolution
EndIf
EndIf
If Evolution > 0
If Type = #Compiler_Middle And ListIndex(CompilerIndentation()) >= 0
CompilerIndentation()\Indentation = Indentation_Valeur + *Indentation\Indentation
; Debug "Compiler milieu +"
; Debug CompilerIndentation()\Indentation
EndIf
If Type = #Compiler_Start
AddElement(CompilerIndentation())
CompilerIndentation()\Type = Type
CompilerIndentation()\Indentation = Indentation_Valeur + *Indentation\Indentation
; Debug "Compiler départ"
; Debug CompilerIndentation()\Indentation
EndIf
EndIf
Indentation_Valeur + *Indentation\Indentation
ProcedureReturn Indentation_Valeur
EndProcedure
Procedure Traitement(Fichier.s)
Protected Format, Erreur, Position, Ligne.s, Mot.s, MotPrecedent1.s, MotPrecedent2.s, Compteur, Indentation, Depart, LastElement, Type, Type_MotPrecedent1, Type_MotPrecedent2
Protected Progression_Formatage.f, Progression_Indentation.f, Progression_Lecture.f
Protected NewList Ligne.LigneInfo()
If ReadFile(0, Fichier)
Format = ReadStringFormat(0)
Taille.q = Lof(0)
Repeat
Ligne.s = ReadString(0, Format)
;- Découpage de la ligne en mot
AddElement(Ligne())
; Extraction du commentaire, sans le ';'
Position = 0
Repeat
Position = FindString(Ligne, ";", Position + 1)
If Position > 0 And CountString(Left(Ligne, Position), Chr(34)) & %1 = 0 ; Si ';' trouvé et nombre de " avant le ';' paire donc le ';' n'est pas dans un texte
Ligne()\Commentaire = Trim(Right(Ligne, Len(Ligne) - Position))
Ligne = Left(Ligne, Position - 1)
EndIf
Until Position = 0 Or Ligne()\Commentaire
; Extraction des textes, les textes sont remplacer par des balises '§'
Position = 0
Repeat
Position = FindString(Ligne, Chr(34), Position + 1)
If Position > 0
PositionFinale = FindString(Ligne, Chr(34), Position + 1)
If PositionFinale > 0
AddElement(Ligne()\Texte())
Ligne()\Texte() = Mid(Ligne, Position, PositionFinale - Position + 1)
Ligne = Left(Ligne, Position - 1) + "§" + RSet(Str(ListIndex(Ligne()\Texte())), 4, "0") + Right(Ligne, Len(Ligne) - PositionFinale)
EndIf
EndIf
Until Position = 0
; Extraction des caractères, les caractères sont remplacer par des balises '¤'
Position = 0
Repeat
Position = FindString(Ligne, "'", Position + 1)
If Position > 0
PositionFinale = FindString(Ligne, "'", Position + 1)
If PositionFinale > 0
AddElement(Ligne()\Carac())
Ligne()\Carac() = Mid(Ligne, Position, PositionFinale - Position + 1)
Ligne = Left(Ligne, Position - 1) + "¤" + RSet(Str(ListIndex(Ligne()\Carac())), 4, "0") + Right(Ligne, Len(Ligne) - PositionFinale)
EndIf
EndIf
Until Position = 0
; Découpage des mots
; Ajoute des espaces dans la ligne pour permettre le découpage
Ligne = ReplaceString(Ligne, Chr(9), " ")
Ligne = ReplaceString(Ligne, "(", " ( ")
Ligne = ReplaceString(Ligne, ")", " ) ")
Ligne = ReplaceString(Ligne, "[", " [ ")
Ligne = ReplaceString(Ligne, "]", " ] ")
Ligne = ReplaceString(Ligne, ",", " , ")
Ligne = ReplaceString(Ligne, ":", " : ") ; Cas particulier du ':'
Position = 1
Repeat
ForEach Operator()
If Mid(Ligne, Position, Len(Operator())) = Operator()
Ligne = Left(Ligne, Position - 1) + " " + Operator() + " " + Right(Ligne, Len(Ligne) - Position - Len(Operator()) + 1)
Position + Len(Operator()) + 1
EndIf
Next
Position + 1
Until Position > Len(Ligne)
; Découpe la ligne en mot
Compteur = CountString(Ligne, " ") + 1
For Index = 1 To Compteur
Mot.s = StringField(Ligne, Index, " ")
If Mot
AddElement(Ligne()\Mot())
Ligne()\Mot() = Mot
EndIf
Next
Progression_Lecture = Loc(0) / Taille
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, 0, 0, 0)
If Quitter
ProcedureReturn
EndIf
Until Eof(0)
CloseFile(0)
Progression_Lecture = 1
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, 0, 0, 1)
;- Analyse de l'indentation
Indentation = 0
ForEach Ligne()
; Avant de commencer la ligne
ForEach Ligne()\Mot()
Depart = ListIndex(Ligne()\Mot())
Mot = StringField(LCase(Ligne()\Mot()), 1, ".")
ForEach IndentationN()
If Mot = IndentationN()\Keyword ; Si le mot correspond à un mot de l'indentation
If IndentationN()\Function = 0 ; Le mot clé n'est pas une fonction
Indentation = Gestion_Indentation(Indentation, @IndentationN(), -1)
; Debug "avant - " + IndentationN()\Keyword + " = " + Ligne()\Mot()
ElseIf NextElement(Ligne()\Mot()) ; Sinon, on vérifie que le mot suivant est une '('
If Ligne()\Mot() = "("
Indentation = Gestion_Indentation(Indentation, @IndentationN(), -1)
; Debug "avant - " + IndentationN()\Keyword
EndIf
PreviousElement(Ligne()\Mot())
EndIf
Break
EndIf
Next
ForEach IndentationP()
If Mot = IndentationP()\Keyword ; Si le mot correspond à un mot de l'indentation
If IndentationP()\Function = 0 ; Le mot clé n'est pas une fonction
; Debug "avant arrêt " + IndentationP()\Keyword + " = " + Ligne()\Mot()
Break 2
ElseIf NextElement(Ligne()\Mot()) ; Sinon, on vérifie que le mot suivant est une '('
If Ligne()\Mot() = "("
; Debug "avant arrêt " + IndentationP()\Keyword
Break 2
EndIf
PreviousElement(Ligne()\Mot())
EndIf
Break
EndIf
Next
Next
; Indentation de la ligne
If Indentation < 0 ; Si l'indentation devient négative
Ligne()\Indentation = 0
If Erreur = 0
Erreur = ListIndex(Ligne()) + 1 ; On génére une erreur avec le numéro de la première ligne qui pose problème
EndIf
Else
Ligne()\Indentation = Indentation
EndIf
; Après la ligne
ForEach Ligne()\Mot()
Mot = StringField(LCase(Ligne()\Mot()), 1, ".")
If ListIndex(Ligne()\Mot()) > Depart
ForEach IndentationN()
If Mot = IndentationN()\Keyword ; Si le mot correspond à un mot de l'indentation
If IndentationN()\Function = 0 ; Le mot clé n'est pas une fonction
Indentation = Gestion_Indentation(Indentation, @IndentationN(), -1)
; Debug "après - " + IndentationN()\Keyword + " = " + Ligne()\Mot()
ElseIf NextElement(Ligne()\Mot()) ; Sinon, on vérifie que le mot suivant est une '('
If Ligne()\Mot() = "("
Indentation = Gestion_Indentation(Indentation, @IndentationN(), -1)
; Debug "après - " + IndentationN()\Keyword
EndIf
PreviousElement(Ligne()\Mot())
EndIf
Break
EndIf
Next
EndIf
If ListIndex(Ligne()\Mot()) >= Depart
ForEach IndentationP()
If Mot = IndentationP()\Keyword ; Si le mot correspond à un mot de l'indentation
If IndentationP()\Function = 0 ; Le mot clé n'est pas une fonction
Indentation = Gestion_Indentation(Indentation, @IndentationP(), 1)
; Debug "après + " + IndentationP()\Keyword + " = " + Ligne()\Mot()
ElseIf NextElement(Ligne()\Mot()) ; Sinon, on vérifie que le mot suivant est une '('
If Ligne()\Mot() = "("
Indentation = Gestion_Indentation(Indentation, @IndentationP(), 1)
; Debug "après + " + IndentationP()\Keyword
EndIf
PreviousElement(Ligne()\Mot())
EndIf
Break
EndIf
Next
EndIf
Next
; Après un mot clef de type CompilerIf
If ListIndex(CompilerIndentation()) >= 0 And CompilerIndentation()\Type = #Compiler_After
Indentation = CompilerIndentation()\Indentation
; Debug "Compiler après"
; Debug CompilerIndentation()\Indentation
DeleteElement(CompilerIndentation())
EndIf
Progression_Indentation = ListIndex(Ligne()) / ListSize(Ligne())
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, 0, 0, 0)
If Quitter
ProcedureReturn
EndIf
Next
If Indentation > 0 ; Si à la fin du traitement, l'indentation n'est pas nulle, on génère une erreur.
Erreur = -1
EndIf
Progression_Indentation = 1
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, 0, 0, 1)
;- Ecriture du nouveau fichier
If Erreur = 0
CompilerIf #Ecriture
If CreateFile(0, "PBSyntax.temp")
WriteStringFormat(0, Format)
CompilerEndIf
;- Recompilation des lignes
LastElement = ListSize(Ligne()) - 1 ; Position du dernier élément
ForEach Ligne() ; Pour chaque ligne
Ligne.s = ""
; Indentation
For Index = 1 To Ligne()\Indentation
Ligne + Option\Tab
Next
; Initialisation
Type = 0
Type_MotPrecedent1 = 0
Type_MotPrecedent2 = 0
Mot = ""
MotPrecedent1.s = ""
MotPrecedent2.s = ""
; Création de la ligne
ForEach Ligne()\Mot()
Espace.s = " "
MotPrecedent2 = MotPrecedent1
MotPrecedent1 = Mot
Mot = StringField(LCase(Ligne()\Mot()), 1, ".")
; Type du mot
Type_MotPrecedent2 = Type_MotPrecedent1
Type_MotPrecedent1 = Type
Type = #Type_Autre
ForEach Keyword()
If Mot = Keyword()
Type = Type | #Type_MotClef
Break
EndIf
Next
ForEach Operator()
If Mot = Operator()
Type = Type | #Type_Operateur
Break
EndIf
Next
ForEach Variable()
If Mot = Variable()
Type = Type | #Type_Variable
Break
EndIf
Next
; Analyse des mots pour savoir si il ne faut pas mettre d'espace
If MotPrecedent1 = ""
Espace = ""
ElseIf Mot = ","
Espace = ""
ElseIf Mot = "["
Espace = ""
ElseIf Mot = "(" And ((Type_MotPrecedent1 & #Type_Operateur = 0 And Type_MotPrecedent1 & #Type_MotClef = 0) Or MotPrecedent1 = "(" Or MotPrecedent1 = "[")
Espace = ""
ElseIf MotPrecedent1 = "(" Or MotPrecedent1 = "["
Espace = ""
ElseIf Mot = ")" Or Mot = "]"
Espace = ""
ElseIf MotPrecedent1 = ")" And Type & #Type_Operateur = 0 And Type & #Type_MotClef = 0
Espace = ""
ElseIf Type_MotPrecedent1 & #Type_Operateur And Type_MotPrecedent1 & #Type_Variable And (Type_MotPrecedent2 & #Type_Operateur Or Type_MotPrecedent2 & #Type_Variable Or Type_MotPrecedent2 & #Type_MotClef Or MotPrecedent2 = "" Or MotPrecedent2 = "(" Or MotPrecedent2 = "," Or MotPrecedent2 = "[")
Espace = ""
ElseIf Type_MotPrecedent1 = #Type_Variable
Espace = ""
EndIf
If Left(Mot, 1) = "§" ; Remplace les balises '§' par les textes
SelectElement(Ligne()\Texte(), Val(Right(Mot, 4)))
Ligne + Espace + Ligne()\Texte()
ElseIf Left(Mot, 1) = "¤" ; Remplace les balises '¤' par les caractères
SelectElement(Ligne()\Carac(), Val(Right(Mot, 4)))
Ligne + Espace + Ligne()\Carac()
Else
Ligne + Espace + Ligne()\Mot()
EndIf
Next
; Mise en forme du commentaire
If Ligne()\Commentaire
;{ Traitement
If Left(Ligne()\Commentaire, 1) = "-"
Ligne()\Commentaire = "- " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 1))
ElseIf Left(Ligne()\Commentaire, 1) = "\"
Ligne()\Commentaire = "\ " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 1))
ElseIf Left(Ligne()\Commentaire, 2) = "{-"
Ligne()\Commentaire = "{- " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 2))
ElseIf Left(Ligne()\Commentaire, 2) = "{\"
Ligne()\Commentaire = "{\ " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 2))
ElseIf Left(Ligne()\Commentaire, 1) = "{"
Ligne()\Commentaire = "{ " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 1))
ElseIf Left(Ligne()\Commentaire, 1) = "}"
Ligne()\Commentaire = "} " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 1))
ElseIf Left(Ligne()\Commentaire, 1) = "[-"
Ligne()\Commentaire = "[- " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 2))
ElseIf Left(Ligne()\Commentaire, 1) = "[\"
Ligne()\Commentaire = "[\ " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 2))
ElseIf Left(Ligne()\Commentaire, 1) = "["
Ligne()\Commentaire = "[ " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 1))
ElseIf Left(Ligne()\Commentaire, 1) = "]"
Ligne()\Commentaire = "] " + Trim(Right(Ligne()\Commentaire, Len(Ligne()\Commentaire) - 1))
Else
Ligne()\Commentaire = " " + Ligne()\Commentaire
EndIf
;}
; Ajout du Commentaire
If ListSize(Ligne()\Mot()) > 0
Ligne + " ;" + Ligne()\Commentaire
Else
Ligne + ";" + Ligne()\Commentaire
EndIf
EndIf
CompilerIf #Ecriture
If ListIndex(Ligne()) < LastElement
WriteStringN(0, Ligne, Format)
Else
WriteString(0, Ligne, Format)
EndIf
CompilerEndIf
Debug Str(Ligne()\Indentation) + " " + Ligne
Progression_Formatage = ListIndex(Ligne()) / ListSize(Ligne())
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, 0, 0, 0)
If Quitter
ProcedureReturn
EndIf
Next
CompilerIf #Ecriture
CloseFile(0)
EndIf
CompilerEndIf
EndIf
Progression_Formatage = 1
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, 0, 0, 1)
If Erreur <> 0
HideGadget(#Traitement_Lancer, 1)
HideGadget(#Traitement_Annuler, 0)
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, Erreur, 0, 1)
For Index = 1 To #Erreur_Temps_Maximum
Delay(1000)
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, Erreur, Index, 1)
If Traitement_Arret
Erreur = -100
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, Erreur, Index, 1)
Delay(4000)
Break
EndIf
Next
HideGadget(#Traitement_Annuler, 1)
HideGadget(#Traitement_Lancer, 0)
EndIf
Traitement_Affichage(Fichier, Progression_Lecture, Progression_Indentation, Progression_Formatage, 0, 0, 1)
CompilerIf #Ecriture
If Option\Backup And FileSize(Fichier + ".bak") >= 0
DeleteFile(Fichier + ".bak")
EndIf
If Quitter = 0 And Traitement_Arret = 0 And (Option\Backup = 0 Or RenameFile(Fichier, Fichier + ".bak"))
DeleteFile(Fichier)
RenameFile("PBSyntax.temp", Fichier)
RemoveGadgetItem(#Liste, ListIndex(ListeTraitement()))
DeleteElement(ListeTraitement())
EndIf
CompilerElse
If Quitter = 0 And Traitement_Arret = 0
RemoveGadgetItem(#Liste, ListIndex(ListeTraitement()))
DeleteElement(ListeTraitement())
EndIf
CompilerEndIf
EndIf
Traitement_Arret = 0
EndProcedure
Global Tache
Procedure Tache_AnalyseDossier(Dossier.s, Filtre.s, Recurence, Index = 0)
If Right(Dossier, 1) <> "\"
Dossier + "\"
EndIf
If ExamineDirectory(Index, Dossier, "")
While NextDirectoryEntry(Index)
If Quitter
Break
EndIf
If DirectoryEntryType(Index) = #PB_DirectoryEntry_File
Fichier.s = DirectoryEntryName(Index)
Extension.s = LCase(GetExtensionPart(Fichier))
If FindString(";" + Filtre + ";", ";" + Extension + ";", 0)
Traitement(Dossier + Fichier)
EndIf
Else
SousDossier.s = DirectoryEntryName(Index)
If SousDossier <> "." And SousDossier <> ".."
Tache_AnalyseDossier(Dossier + SousDossier, Filtre, Recurence, Index + 1)
EndIf
EndIf
Wend
FinishDirectory(Index)
EndIf
EndProcedure
Procedure Tache_Thread(Parametre)
ForEach ListeTraitement()
If ListeTraitement()\Fichier
Traitement(ListeTraitement()\Fichier)
Else
Tache_AnalyseDossier(ListeTraitement()\Dossier, ListeTraitement()\Filtre, ListeTraitement()\Recurence)
EndIf
If Quitter
Break
EndIf
Next
SetGadgetText(#Traitement_Texte, "Traitement terminé")
DisableGadget(#Liste, 0)
DisableGadget(#Liste_Fichier, 0)
DisableGadget(#Liste_Dossier, 0)
DisableGadget(#Traitement_Lancer, 0)
DisableGadget(#Option_Indentation, 0)
DisableGadget(#Option_CopieSauvegarde, 0)
If Parametre_Lancement
Quitter = 1
EndIf
EndProcedure
Procedure Tache()
DisableGadget(#Liste, 1)
DisableGadget(#Liste_Fichier, 1)
DisableGadget(#Liste_Dossier, 1)
DisableGadget(#Traitement_Lancer, 1)
DisableGadget(#Option_Indentation, 1)
DisableGadget(#Option_CopieSauvegarde, 1)
Tache = CreateThread(@Tache_Thread(), 0)
EndProcedure
Procedure Liste_Ajouter(Fichier.s, Dossier.s, Filtre.s, Recurence.b = 0)
Protected Texte.s
If Fichier Or (Dossier And Filtre)
LastElement(ListeTraitement())
AddElement(ListeTraitement())
ListeTraitement()\Fichier = Fichier
If Dossier And Right(Dossier, 1) <> "\"
Dossier + "\"
EndIf
ListeTraitement()\Dossier = Dossier
ListeTraitement()\Filtre = Filtre
ListeTraitement()\Recurence = Recurence
If Fichier
Texte = GetFilePart(Fichier)
Icone = Icone_Fichier_16
Else
Texte = StringField(Dossier, CountString(Dossier, "\"), "\") + "\ *." + ReplaceString(Filtre, ";", "; *.")
Icone = Icone_Dossier_16
EndIf
AddGadgetItem(#Liste, -1, Texte, ImageID(Icone))
EndIf
EndProcedure
Procedure Liste_Supprimer()
For Index = 0 To CountGadgetItems(#Liste) - 1
If GetGadgetItemState(#Liste, Index) & #PB_ListIcon_Selected
SelectElement(ListeTraitement(), Index)
DeleteElement(ListeTraitement())
RemoveGadgetItem(#Liste, Index)
Index - 1
EndIf
Next
EndProcedure
Procedure Option_Charge()
OpenPreferences("PBSyntax.ini")
Option\Tab = ReadPreferenceString("Tab", "")
If Option\Tab = ""
Option\Tab = Chr(9)
SetGadgetState(#Option_Indentation, 0)
Else
Option\Tab = ReplaceString(Option\Tab, "_", " ")
SetGadgetState(#Option_Indentation, Len(Option\Tab))
EndIf
Option\Backup = ReadPreferenceLong("Backup", 1)
SetGadgetState(#Option_CopieSauvegarde, Option\Backup)
ClosePreferences()
EndProcedure
Procedure Option_Sauve()
If CreatePreferences("PBSyntax.ini")
If Option\Tab = Chr(9)
WritePreferenceString("Tab", "")
Else
WritePreferenceString("Tab", ReplaceString(Option\Tab, " ", "_"))
EndIf
WritePreferenceLong("Backup", Option\Backup)
ClosePreferences()
EndIf
EndProcedure
SetCurrentDirectory(ProgramFiledirectory())
;{- Interface
Procedure Titre(Gadget, Image, Icone, Icone_Dimension, Texte.s, Police)
StartDrawing(ImageOutput(Image))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, OutputWidth(), OutputHeight(), 0)
DrawingMode(#PB_2DDrawing_Gradient | #PB_2DDrawing_AlphaBlend)
GradientColor(0, $60A0A0A0)
GradientColor(0.3, $80A0A0A0)
GradientColor(1, $00FFFFFF)
LinearGradient(0, 0, 0.3 * 1.5 * OutputHeight() * OutputHeight() / OutputWidth(), OutputHeight())
Box(0, 0, OutputWidth(), OutputHeight())
DrawingMode(#PB_2DDrawing_Transparent | #PB_2DDrawing_AlphaBlend)
DrawingFont(FontID(Police))
DrawText(OutputHeight(), (OutputHeight() - TextHeight(Texte)) / 2, " " + Texte, $FF000000)
DrawAlphaImage(ImageID(Icone), (OutputHeight() - Icone_Dimension) / 2, (OutputHeight() - Icone_Dimension) / 2)
DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_AlphaBlend)
Line(0, 0, OutputWidth(), 1, $30000000)
StopDrawing()
SetGadgetState(Gadget, ImageID(Image))
EndProcedure
#Fenetre_B = 4
#Fenetre_L = 300
#Fenetre_H = 36 + 80 + #Fenetre_B + 36 + 120 + #Fenetre_B + 36 + 24 + 32
Police_Normal = LoadFont(#PB_Any, "Verdana", 8, #PB_Font_HighQuality)
Police_Titre = LoadFont(#PB_Any, "Verdana", 10, #PB_Font_HighQuality)
SetGadgetFont(#PB_Default, FontID(Police_Normal))
If OpenWindow(0, 0, 0, #Fenetre_L + 2 * #Fenetre_B, #Fenetre_H + 2 * #Fenetre_B, "PBSyntax", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_SystemMenu) = 0
End
EndIf
x = #Fenetre_B
y = #Fenetre_B
CreateImage(#Liste_Titre, #Fenetre_L, 36, 32)
ImageGadget(#Liste_Titre, x, y, #Fenetre_L, 36, ImageID(#Liste_Titre))
Titre(#Liste_Titre, #Liste_Titre, Icone_Liste, 32, "Liste de traitement", Police_Titre)
y + 36
ListIconGadget(#Liste, x, y, #Fenetre_L - 40, 80, "Fichier(s) ou dossier(s) à traiter", #Fenetre_L - 40 - 32, #PB_ListIcon_MultiSelect | #PB_ListIcon_FullRowSelect)
ButtonImageGadget(#Liste_Fichier, x + #Fenetre_L - 40, y, 40, 40, ImageID(Icone_Fichier))
GadgetToolTip(#Liste_Fichier, "Ajouter un ou plusieurs fichiers")
y + 40
ButtonImageGadget(#Liste_Dossier, x + #Fenetre_L - 40, y, 40, 40, ImageID(Icone_Dossier))
GadgetToolTip(#Liste_Dossier, "Ajouter un dossier")
y + 40 + #Fenetre_B
CreateImage(#Traitement_Titre, #Fenetre_L, 36, 32)
ImageGadget(#Traitement_Titre, x, y, #Fenetre_L, 36, ImageID(#Traitement_Titre))
Titre(#Traitement_Titre, #Traitement_Titre, Icone_Traitement, 32, "Traitement", Police_Titre)
y + 36
EditorGadget(#Traitement_Texte, x, y, #Fenetre_L - 40, 120, #PB_Editor_ReadOnly)
SendMessage_(GadgetID(#Traitement_Texte), #EM_SETTARGETDEVICE, #Null, 0) ; Retour à la ligne
ButtonImageGadget(#Traitement_Lancer, x + #Fenetre_L - 40, y, 40, 40, ImageID(Icone_Lancer))
GadgetToolTip(#Traitement_Lancer, "Lancer le traitement")
ButtonImageGadget(#Traitement_Annuler, x + #Fenetre_L - 40, y, 40, 40, ImageID(Icone_Annuler))
GadgetToolTip(#Traitement_Annuler, "Annuler le traitement")
HideGadget(#Traitement_Annuler, 1)
y + 120 + #Fenetre_B
CreateImage(#Option_Titre, #Fenetre_L, 36, 32)
ImageGadget(#Option_Titre, x, y, #Fenetre_L, 36, ImageID(#Option_Titre))
Titre(#Option_Titre, #Option_Titre, Icone_Information, 32, "Options", Police_Titre)
y + 36
ComboBoxGadget(#Option_Indentation, x, y, #Fenetre_L - 40, 24)
AddGadgetItem(#Option_Indentation, -1, "Indentation : Vrai tabulation")
AddGadgetItem(#Option_Indentation, -1, "Indentation : " + "1" + " espace")
For Index = 2 To 10
AddGadgetItem(#Option_Indentation, -1, "Indentation : " + Str(Index) + " espaces")
Next
y + 24
CheckBoxGadget(#Option_CopieSauvegarde, x, y, #Fenetre_L - 40, 32, "Faire une copie de sauvegarde avant le traitement d'un fichier", #PB_Button_MultiLine)
; ComboBoxGadget(#Option_CopieSauvegarde, x, y, #Fenetre_L - 40, 24)
; AddGadgetItem(#Option_CopieSauvegarde, -1, "Aucune copie de sauvegarde")
; AddGadgetItem(#Option_CopieSauvegarde, -1, "Faire une copie de sauvegarde")
; AddGadgetItem(#Option_CopieSauvegarde, -1, "Faire une copie de sauvegarde uniquement si une erreur est détectée durant le traitement")
AddKeyboardShortcut(0, #PB_Shortcut_Delete, #Liste_Supprimer)
EnableGadgetDrop(#Liste, #PB_Drop_Files, #PB_Drag_Move)
#FenetreDossier_B = 4
#FenetreDossier_L = 250
#FenetreDossier_H = 36 + 40 + 32 + #Fenetre_B + 24 + 24 + 24 + #Fenetre_B + 24
Police_Normal = LoadFont(#PB_Any, "Verdana", 8, #PB_Font_HighQuality)
Police_Titre = LoadFont(#PB_Any, "Verdana", 10, #PB_Font_HighQuality)
SetGadgetFont(#PB_Default, FontID(Police_Normal))
If OpenWindow(#Liste_Dossier_Fenetre, 0, 0, #FenetreDossier_L + 2 * #Fenetre_B, #FenetreDossier_H + 2 * #Fenetre_B, "PBSyntax", #PB_Window_Invisible | #PB_Window_WindowCentered | #PB_Window_SystemMenu, WindowID(0)) = 0
End
EndIf
x = #Fenetre_B
y = #Fenetre_B
CreateImage(#Liste_Dossier_Titre, #FenetreDossier_L, 36, 32)
ImageGadget(#Liste_Dossier_Titre, x, y, #FenetreDossier_L, 36, ImageID(#Liste_Dossier_Titre))
Titre(#Liste_Dossier_Titre, #Liste_Dossier_Titre, Icone_Liste, 32, "Ouvrir un dossier", Police_Titre)
y + 36
EditorGadget(#Liste_Dossier_Texte, x, y, #FenetreDossier_L - 40, 40, #PB_Editor_ReadOnly)
ButtonImageGadget(#Liste_Dossier_Selection, x + #FenetreDossier_L - 40, y, 40, 40, ImageID(Icone_Dossier))
GadgetToolTip(#Liste_Dossier_Selection, "Sélection du dossier")
y + 40
CheckBoxGadget(#Liste_Dossier_SousDossier, x, y, #FenetreDossier_L - 40, 32, "Rechercher également les fichiers dans les sous-dossiers", #PB_Button_MultiLine)
y + 32 + #Fenetre_B
CheckBoxGadget(#Liste_Dossier_FiltrePB, x, y, #FenetreDossier_L - 40, 24, "Traiter tous les fichiers 'pb'", #PB_Button_MultiLine)
y + 24
CheckBoxGadget(#Liste_Dossier_FiltrePBI, x, y, #FenetreDossier_L - 40, 24, "Traiter tous les fichiers 'pbi'", #PB_Button_MultiLine)
y + 24
CheckBoxGadget(#Liste_Dossier_FiltreAutre, x, y, #FenetreDossier_L - 40, 24, "Traiter tous les fichiers :", #PB_Button_MultiLine)
StringGadget(#Liste_Dossier_FiltreAutre_Texte, x + #FenetreDossier_L - 40, y, 40, 24, "")
y + 24 + #Fenetre_B
ButtonGadget(#Liste_Dossier_Valider, x, y, #FenetreDossier_L, 24, "Valider")
;}
Option_Charge()
;{ Paramètre de lancement
Fichier.s = ""
For Index = 1 To CountProgramParameters()
If Fichier
Fichier + " "
EndIf
Fichier + ProgramParameter()
Next
If Fichier
If FileSize(Fichier) = -2
Liste_Ajouter("", Fichier, #FiltrePB + ";" + #FiltrePBI)
Else
Liste_Ajouter(Fichier, "", "")
EndIf
Parametre_Lancement = 1
Tache()
EndIf
;}
Repeat
Event = WaitWindowEvent(50)
Select EventWindow()
Case 0
Select Event
Case #PB_Event_CloseWindow
Quitter = 1
Case #PB_Event_Gadget
Select EventGadget()
Case #Liste
Position = GetGadgetState(#Liste)
If Position >= 0 And IsThread(Tache) = 0
SelectElement(ListeTraitement(), Position)
EndIf
Case #Liste_Dossier_Valider
Fichier.s = PathRequester("Ajouter un dossier", GetPathPart(Fichier))
If Fichier
Filtre.s = ""
If GetGadgetState(#Liste_Dossier_FiltrePB)
Filtre + #FiltrePB
EndIf
If GetGadgetState(#Liste_Dossier_FiltrePBI)
If Filtre
Filtre + ";"
EndIf
Filtre + #FiltrePBI
EndIf
If GetGadgetState(#Liste_Dossier_FiltreAutre)
If Filtre
Filtre + ";"
EndIf
Filtre + LCase(GetGadgetText(#Liste_Dossier_FiltreAutre_Texte))
EndIf
Liste_Ajouter("", Fichier, Filtre)
EndIf
Case #Liste_Fichier
Fichier = OpenFileRequester("Ajouter un fichier", Fichier, "Code PureBasic|*.pb;*.pbi|Tous les fichiers|*.*", 0, #PB_Requester_MultiSelection)
While Fichier
Liste_Ajouter(Fichier, "", "")
Fichier = NextSelectedFileName()
Wend
Case #Liste_Dossier
DisableGadget(#Liste_Dossier, 1)
SetGadgetText(#Liste_Dossier_Texte, "")
SetGadgetState(#Liste_Dossier_SousDossier, 0)
SetGadgetState(#Liste_Dossier_FiltrePB, 1)
SetGadgetState(#Liste_Dossier_FiltrePBI, 1)
SetGadgetState(#Liste_Dossier_FiltreAutre, 0)
SetGadgetText(#Liste_Dossier_FiltreAutre_Texte, "")
DisableGadget(#Liste_Dossier_FiltreAutre_Texte, 1)
HideWindow(#Liste_Dossier_Fenetre, 0)
Fichier.s = PathRequester("Ouvrir un dossier", GetPathPart(Fichier))
If Fichier
SetGadgetText(#Liste_Dossier_Texte, Fichier)
EndIf
Case #Traitement_Lancer
Tache()
Case #Traitement_Annuler
Traitement_Arret = 1
Case #Option_CopieSauvegarde
Option\Backup = GetGadgetState(#Option_CopieSauvegarde)
Case #Option_Indentation
Select GetGadgetState(#Option_Indentation)
Case 0
Option\Tab = Chr(9)
Default
Option\Tab = Space(GetGadgetState(#Option_Indentation))
EndSelect
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #Liste_Supprimer
If IsThread(Tache) = 0
Liste_Supprimer()
EndIf
EndSelect
Case #PB_Event_GadgetDrop
Select EventGadget()
Case #Liste
Fichiers.s = EventDropFiles()
Count = CountString(Fichiers, Chr(10)) + 1
For Index = 1 To Count
Fichier.s = StringField(Fichiers, Index, Chr(10))
If FileSize(Fichier) >= 0
Liste_Ajouter(Fichier, "", "")
Else
Liste_Ajouter("", Fichier, #FiltrePB + ";" + #FiltrePBI)
EndIf
Next
EndSelect
EndSelect
Case #Liste_Dossier_Fenetre
Select Event
Case #PB_Event_CloseWindow
HideWindow(#Liste_Dossier_Fenetre, 1)
DisableGadget(#Liste_Dossier, 0)
Case #PB_Event_Gadget
Select EventGadget()
Case #Liste_Dossier_Selection
Fichier.s = PathRequester("Ouvrir un dossier", GetPathPart(Fichier))
If Fichier
SetGadgetText(#Liste_Dossier_Texte, Fichier)
EndIf
Case #Liste_Dossier_FiltreAutre
DisableGadget(#Liste_Dossier_FiltreAutre_Texte, 1 - GetGadgetState(#Liste_Dossier_FiltreAutre))
Case #Liste_Dossier_Valider
HideWindow(#Liste_Dossier_Fenetre, 1)
DisableGadget(#Liste_Dossier, 0)
Filtre.s = ""
If GetGadgetState(#Liste_Dossier_FiltrePB)
Filtre + #FiltrePB
EndIf
If GetGadgetState(#Liste_Dossier_FiltrePBI)
If Filtre
Filtre + ";"
EndIf
Filtre + #FiltrePBI
EndIf
If GetGadgetState(#Liste_Dossier_FiltreAutre)
If Filtre
Filtre + ";"
EndIf
Filtre + GetGadgetText(#Liste_Dossier_FiltreAutre_Texte)
EndIf
Liste_Ajouter("", GetGadgetText(#Liste_Dossier_Texte), Filtre, GetGadgetState(#Liste_Dossier_SousDossier))
EndSelect
EndSelect
EndSelect
Until Quitter And IsThread(Tache) = 0
Option_Sauve()
DataSection
TxtIncludeBinary_Begin:
Compiler:
IncludeBinary "PBSyntax - Compiler.txt"
Keywords:
IncludeBinary "PBSyntax - Keywords.txt"
Operators:
IncludeBinary "PBSyntax - Operators.txt"
Variables:
IncludeBinary "PBSyntax - Variables.txt"
IndentationP:
IncludeBinary "PBSyntax - Indentation +.txt"
IndentationN:
IncludeBinary "PBSyntax - Indentation -.txt"
TxtIncludeBinary_End:
Icone_Annuler:
IncludeBinary "Interface\Annuler.png"
Icone_Dossier:
IncludeBinary "Interface\Dossier.png"
Icone_Dossier_16:
IncludeBinary "Interface\Dossier 16.png"
Icone_Fichier:
IncludeBinary "Interface\Fichier.png"
Icone_Fichier_16:
IncludeBinary "Interface\Fichier 16.png"
Icone_Information:
IncludeBinary "Interface\Information.png"
Icone_Lancer:
IncludeBinary "Interface\Lancer.png"
Icone_Liste:
IncludeBinary "Interface\Liste.png"
Icone_Traitement:
IncludeBinary "Interface\Traitement.png"
EndDataSection
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: PBSyntax - Mise en forme du code
Suite du message précédent :
Pour les courageux, les fichiers textes nécessaires sont :
"PBSyntax - Compiler.txt"
"PBSyntax - Indentation -.txt"
"PBSyntax - Indentation +.txt"
"PBSyntax - Keywords.txt"
"PBSyntax - Operators.txt"
"PBSyntax - Variables.txt"
Pour les courageux, les fichiers textes nécessaires sont :
"PBSyntax - Compiler.txt"
Code : Tout sélectionner
; Mot-clé du compilateur permettant d'activer ou non une partie de code.
; Il faut indiquer si le mot-clé est une balise de début avec "start", une balise intermédiaire avec "middle" ou une balise de fin avec "end".
; Exemples :
; CompilerIf est un mot-clé à marquer avec "start".
; CompilerElse est un mot-clé à marquer avec "middle".
; CompilerEndIf est un mot-clé à marquer avec "end".
compilerif = start
compilerelse = middle
compilerelseif = middle
compilerendif = end
compilerselect = start
compilercase = middle
compilerdefault = middle
compilerendselect = end
Code : Tout sélectionner
; Avant chaque mot-clé de cette liste, on ajoute la valeur à l'indentation de la ligne.
; Exemple
; Avant EndIf, on ajoute -1 à l'indentation pour placer EndIf avec une indentation de moins que la ligne précédente.
else = -1
elseif = -1
endif = -1
case = -1
default = -1
endselect = -2
endprocedure = -1
endmacro = -1
forever = -1
next = -1
until = -1
wend = -1
includebinary = 1
data = 1
enddatasection = -1
endenumeration = -1
endinterface = -1
endstructure = -1
endwith = -1
stopdrawing( = -1
closegadgetlist( = -1
stop3d( = -1
closesubmenu( = -1
compilerendif = -1
compilerelse = -1
compilerelseif = -1
compilercase = -1
compilerdefault = -1
compilerendselect = -2
Code : Tout sélectionner
; Après chaque mot-clé de cette liste, on ajoute la valeur à l'indentation de la ligne.
; Exemple :
; Après If, on ajoute 1 à l'indentation pour obtenir une indentation de plus sur la ligne suivante.
select = 2
case = 1
default = 1
if = 1
else = 1
elseif = 1
for = 1
foreach = 1
procedure = 1
proceduredll = 1
macro = 1
repeat = 1
while = 1
with = 1
datasection = 1
data = -1
includebinary = -1
enumeration = 1
structure = 1
interface = 1
startdrawing( = 1
containergadget( = 1
panelgadget( = 1
scrollareagadget( = 1
opengadgetlist( = 1
start3d( = 1
opensubmenu( = 1
compilerif = 1
compilerelse = 1
compilerelseif = 1
compilerselect = 2
compilercase = 1
compilerdefault = 1
Code : Tout sélectionner
; Liste des mot-clés PureBasic
if
else
elseif
endif
select
case
default
endselect
procedure
proceduredll
endprocedure
procedurereturn
while
wend
repeat
until
forever
for
foreach
to
step
next
macro
endmacro
import
endimport
prototype
enumeration
endenumeration
structure
endstructure
interface
endinterface
datasection
data
includebinary
enddatasection
Restore
read
xincludefile
includefile
includepath
with
endwith
global
shared
protected
static
define
declare
newlist
newmap
dim
redim
or
and
:
Code : Tout sélectionner
; Liste des opérateurs PureBasic
+
-
*
/
^
&
|
!
%
<<
>>
=
<
>
<=
>=
<>
Code : Tout sélectionner
; Liste des indicateurs pouvant être utilisés en début de variable, donc sans espace avec la variable qui suit.
; Exemples :
; Un pointeur *Pointer, le * doit être écrit sans ajouter d'espace avant Pointer.
; Une valeur négative -7, le - doit être écrit sans ajouter d'espace avant 7.
-
*
~
@
\
%
$
?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: PBSyntax - Mise en forme du code
Merci Soldat pour le partage 
Manque les png mais on devrait s'en sortir sans
Encore merci

Manque les png mais on devrait s'en sortir sans
Encore merci