PBDOC

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

PBDOC

Message 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
CameleonTH
Messages : 333
Inscription : sam. 25/juin/2005 11:18
Localisation : Laon (02)
Contact :

Message 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.
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Merci, Droopy ;)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

C'est une méta doc la doc de la doc :D
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Est-ce que ç'est sensé fonctionner dans l'éditeur purebasic 4.0 beta ?
Image
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Non.

Je ne sais pas comment faire de pluggin pour l'éditeur officiel de PureBasic.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ok merci, j'ai toujours pas laché mon jaPBe de toutes facons :wink:
Image
didier69
Messages : 61
Inscription : mer. 30/avr./2008 12:50
Localisation : Villeurbanne (Lyon)

Message 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.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

oui logiquement cela devrait encore fonctionner :wink:
didier69
Messages : 61
Inscription : mer. 30/avr./2008 12:50
Localisation : Villeurbanne (Lyon)

Message par didier69 »

Tu ne t'en sers plus ?
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Non, maintenant j'ai tendance à créer l'algo, puis à coder ensuite.
didier69
Messages : 61
Inscription : mer. 30/avr./2008 12:50
Localisation : Villeurbanne (Lyon)

Message par didier69 »

Certes, mais tu ne documentes plus avec ?
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

non je ne l'utilise plus, je calque mon code sur mon algo
Répondre