Page 1 sur 1

PBDOC

Publié : mer. 01/févr./2006 22:44
par Droopy
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

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)
et voici un code pour tester :

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

Publié : mer. 01/févr./2006 23:14
par CameleonTH
En voyant le titre je croyais que c'était la nouvelle Doc pour la V4. :D
Sinon c'est vrai que ton petit prog est trés pratique car moi sa me fait ch*** de faire les doc. :D
Bon travail.

Publié : mer. 01/févr./2006 23:47
par Gillou
Merci, Droopy ;)

Publié : mer. 01/févr./2006 23:55
par Frenchy Pilou
C'est une méta doc la doc de la doc :D

Publié : lun. 06/févr./2006 21:32
par Droopy
PureBasic 3.94
J'ai généré un Pluggin pour jaPBe

http://www.penguinbyte.com/apps/pbwebst ... /PBDoc.zip

On peut enregistrer la doc au format RTF et l'imprimer.

Publié : lun. 06/févr./2006 21:59
par Flype
Est-ce que ç'est sensé fonctionner dans l'éditeur purebasic 4.0 beta ?

Publié : lun. 06/févr./2006 22:27
par Droopy
Non.

Je ne sais pas comment faire de pluggin pour l'éditeur officiel de PureBasic.

Publié : lun. 06/févr./2006 22:54
par Flype
ok merci, j'ai toujours pas laché mon jaPBe de toutes facons :wink:

Publié : ven. 02/mai/2008 20:43
par didier69
Salut Droopy,

je viens du monde java et javadoc j'adore. En plus cela
permet de structurer tes commentaires et ton code.

Est-ce que pbdoc est toujours d'actualité ?

Cordialement.

Publié : sam. 03/mai/2008 20:23
par Droopy
oui logiquement cela devrait encore fonctionner :wink:

Publié : dim. 04/mai/2008 9:44
par didier69
Tu ne t'en sers plus ?

Publié : dim. 04/mai/2008 13:51
par Droopy
Non, maintenant j'ai tendance à créer l'algo, puis à coder ensuite.

Publié : dim. 04/mai/2008 16:19
par didier69
Certes, mais tu ne documentes plus avec ?

Publié : lun. 05/mai/2008 6:18
par Droopy
non je ne l'utilise plus, je calque mon code sur mon algo