PBDOC
Publié : mer. 01/févr./2006 22:44
But : Réaliser la documentation du programme en même temps qu'on programme. ( idée reprise de JavaDoc )
Ce programme renvoie 3 éléments.
1° Documentation :
Toute ligne hors procédure avec ;- n'importe où (apparaît en gris dans JapBe)
Si on veut exclure la ligne rajouter *** n'importe où
Visuel() ;- --> Renverra : Visuel()
Visuel() ;- Affichage du visuel --> Renverra : Visuel() ;- Affichage du visuel
2° Procédures :
Procedure Test() ; procédure de test
; Entrée rien
; Sortie rien
Messagerequester ("","")
; Documentation en plus
EndProcedure
Renverra :
Procedure Test() ; procédure de test
Entrée rien
Sortie rien
3° Constantes :
Toutes les constantes n'importe où, dans et hors procédures
-------------------------------------------------------------------------
Voici le Code
et voici un code pour tester :
Ce programme renvoie 3 éléments.
1° Documentation :
Toute ligne hors procédure avec ;- n'importe où (apparaît en gris dans JapBe)
Si on veut exclure la ligne rajouter *** n'importe où
Visuel() ;- --> Renverra : Visuel()
Visuel() ;- Affichage du visuel --> Renverra : Visuel() ;- Affichage du visuel
2° Procédures :
Procedure Test() ; procédure de test
; Entrée rien
; Sortie rien
Messagerequester ("","")
; Documentation en plus
EndProcedure
Renverra :
Procedure Test() ; procédure de test
Entrée rien
Sortie rien
3° Constantes :
Toutes les constantes n'importe où, dans et hors procédures
-------------------------------------------------------------------------
Voici le Code
Code : Tout sélectionner
;/ AutoDoc Droopy Décembre 2005
;{/ Constantes
#Separateur=#CR$
#TabulationDocProcedure=" "
#IdentifiantDocumentation=";-"
#IdentifiantExclusionDocumentation="***"
;}
Procedure Constante(Ligne.s) ; Renvoie 1 si la ligne est une constante
Ligne=LTrim(Ligne)
If Left(Ligne,1)="#" ;/ C'est une constante
Debug "-----> Est une constante"
ProcedureReturn 1
EndIf
EndProcedure
Procedure DocProc(Ligne.s) ; Renvoie 1 si la ligne est une documentation de procédure
Ligne=LTrim(Ligne)
If Left(Ligne,1)=";" ;/ Cette ligne est une documentation
Debug "-----> Est une documentation de procédure"
ProcedureReturn 1
EndIf
EndProcedure
Procedure DocProg(Ligne.s) ; Renvoie 1 si la ligne est une documentation du programme
Ligne=LTrim(Ligne)
If FindString(Ligne,#IdentifiantDocumentation,1)>0 And FindString(Ligne,#IdentifiantExclusionDocumentation,1)=0
Debug "-----> Est une documentation du programme"
ProcedureReturn 1
EndIf
EndProcedure
Procedure DebutProcedure(Ligne.s) ; Renvoie 1 si Ligne est un début de procédure
Ligne=LTrim(Ligne)
If Left(LTrim(Ligne),9)="Procedure" ;/ C'est le début d'une procédure
Debug "-----> Est un début de procédure"
ProcedureReturn 1
EndIf
EndProcedure
Procedure FinProcedure(Ligne.s) ; Renvoie 1 si Ligne est une fin de procédure
Ligne=LTrim(Ligne)
If Left(LTrim(Ligne),12)="EndProcedure" ;/ C'est la fin d'une procédure
Debug "-----> Est une Fin de procédure"
ProcedureReturn 1
EndIf
EndProcedure
Procedure.s NettoyageLigneDocProc(Ligne.s) ; Supprime et renvoie ; ;- ;/ au début de la ligne
Ligne=LTrim(Ligne)
If Left(Ligne,2)=";-"
Ligne=Right(Ligne,Len(Ligne)-2)
Ligne=LTrim(Ligne)
ProcedureReturn Ligne
EndIf
If Left(Ligne,2)=";/"
Ligne=Right(Ligne,Len(Ligne)-2)
Ligne=LTrim(Ligne)
ProcedureReturn Ligne
EndIf
If Left(Ligne,1)=";"
Ligne=Right(Ligne,Len(Ligne)-1)
Ligne=LTrim(Ligne)
ProcedureReturn Ligne
EndIf
ProcedureReturn Ligne
EndProcedure
Procedure.s NettoyageLigneDocProg(Ligne.s) ; Nettoie une ligne de documentation de programme
Ligne=LTrim(RTrim(Ligne))
Debug "**** Ligne en entrée "+Ligne
;/ Recherche ou est ;-
Ptr=FindString(Ligne,#IdentifiantDocumentation,1)
Debug "**** Pointeur " +Str(Ptr)
;/ Temp = Texte après ;-
Temp.s=Right(Ligne,Len(Ligne)-Ptr-Len(#IdentifiantDocumentation))
Temp=LTrim(RTrim(Temp))
Debug "**** Temp "+Temp
;/ Si aucun texte après ;- on enlève ;-
If Temp=""
Ligne=Left(Ligne,Ptr-((Len(#IdentifiantDocumentation)-1)))
EndIf
Debug "**** Ligne en sortie "+Ligne
;/ Renvoie la ligne donnée
;/ Nettoie le début de la ligne ( ;- )
ProcedureReturn NettoyageLigneDocProc(Ligne)
EndProcedure
Procedure PBDoc(File.s) ; Lecture du fichier et génération de la doc dans des variables globales
;/ Variables Globales pour stocker la doc
Global PBDoc_Procedures.s,PBDoc_Documentation.s,PBDoc_Constantes.s
;/ Ouvre le fichier et quitte si inexistant
FileId=ReadFile(#PB_Any,File)
If FileSize(File)=<1
CloseFile(FileId)
ProcedureReturn
EndIf
;/ On utilise ces variables :
DansProc=0 ; = 0 hors procédure / 1 = dans procédure
FinDocProc=0 ; = 1 si on est à la fin de la doc de la procédure
;- Boucle de lecture
While ~Eof(FileId)
Ligne.s=ReadString()
Debug Ligne
;/ Si c'est une constante on l'ajoute et on reboucle
If Constante(Ligne)
PBDoc_Constantes+Ligne+#Separateur
EndIf
;- On est dans une procédure
If DansProc
If FinDocProc
;/ On ne fait rien car on est à déjà lu la documentation de la procédure
Else
;/ On a pas encore lu toute la documentation de la procédure
If DocProc(Ligne)
;/ La ligne est une documentation --> Ajout et reboucle
PBDoc_Procedures+#TabulationDocProcedure+NettoyageLigneDocProc(Ligne)+#Separateur
Else
;/ La ligne n'est pas une documentation --> Fin de doc de procédure
FinDocProc=1
EndIf
EndIf
;/ Si c'est la fin d'une procédure on définit le flag 'DansProc' et on reboucle
If FinProcedure(Ligne)
DansProc=0
FinDocProc=0
;/ + Saute de ligne pour séparer deux fonctions
PBDoc_Procedures+#Separateur
EndIf
;- On est hors Procédure
Else
;/ Si c'est le début d'une procédure on l'ajoute + définit le flag 'DansProc' et on reboucle
If DebutProcedure(Ligne)
PBDoc_Procedures+Ligne+#Separateur
DansProc=1
EndIf
;/ Si c'est une Documentation du programme on l'ajoute et on reboucle
If DocProg(Ligne)
PBDoc_Documentation+NettoyageLigneDocProg(Ligne)+#Separateur
EndIf
EndIf
Wend
;/ Ferme le fichier proprement
CloseFile(FileId)
EndProcedure
;/ Test
File.s="d:\test.pb"
PBDoc(File)
Temp.s="Documentation :"+#CR$+"--------------------"+#CR$
Temp+PBDoc_Documentation+#CR$
Temp+"Procédures :"+#CR$+"---------------"+#CR$
Temp+PBDoc_Procedures+#CR$
Temp+"Constantes :"+#CR$+"----------------"+#CR$
Temp+PBDoc_Constantes
MessageRequester(File,Temp)
Code : Tout sélectionner
;/ Code permettant de tester AutoDoc.pb
;{/ Constantes
Enumeration
#String1
EndEnumeration
;}
;{/ Procedures
Procedure AffichageVisuel() ; Créé la fenêtre principale et les gadgets
;- Entrée : Rien
;/ Sortie : Rien
; Juste un commentaire en plus
OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"")
CreateGadgetList(WindowID(0))
;- Remarque dans une procédure
;/ Remarque dans une procédure
; Remarque dans une procédure
StringGadget(0,8, 10,306,20,"")
EndProcedure
ProcedureDLL AffichageDuTexte(Text.s) ; Affiche le Texte dans le Gadget 'String'
;/ Entrée : Text.s
SetGadgetText(#String1,Text)
;- Remarque dans une procédure
;/ Remarque dans une procédure
; Remarque dans une procédure
EndProcedure
;}
;- Démarrage du programme
AffichageVisuel() ;-
AffichageDuTexte("TOTO") ;-
WaitUntilWindowIsClosed() ;- On atttends que l'utilisateur ferme la fenêtre
;- Le programme se termine normalement