Page 1 sur 1

Declare Generator

Publié : jeu. 22/avr./2021 23:41
par Ar-S
L'ami Micoute a fait un petit soft pour créer déclarer automatiquement les procédures dans un programme. => ici

Je eu envie de me faire une version plus simple et concise que j'appelle, une fois compilée, via les outils de l'IDE. Il ne gère pas les fichiers, seulement ce qui se trouve en presse papier.
Voilà le code et les instructions.
EnJoYeZ :P

Code : Tout sélectionner

; =======================================================
; =======================================================
; Nom : ~ Declare Generator ~
; Déclaration automatique des procédures
; Code : Ar-S // PB 5.7x // Avril 2021
; Regex : Marc56 alias Regex Man :)
; Instructions
; Copier votre code dans le presse papier
; Exécutez Declare Generator
; Faites un coller en début de votre code.. 
; That's all falk !
; =======================================================


Global t$ = GetClipboardText()

EnableExplicit

Define D$
Define Clip$ = GetClipboardText()

If Clip$ = "" 
     MessageRequester("Oouups","Vous devez copier un code dans le presse papier",#MB_ICONEXCLAMATION)
    End 
EndIf

Define RegEx$ = "\sprocedure(\.?[a-zA-Z]?\s\w+\(.*?\))"

If Not CreateRegularExpression(0, RegEx$, #PB_RegularExpression_NoCase)
    MessageRequester("Erreur", "L'expression régulière n'est pas valide")
    End
EndIf

If ExamineRegularExpression(0, Clip$)
    While NextRegularExpressionMatch(0)
        D$ + "Declare" + RegularExpressionGroup(0, 1)+#LF$
    Wend
    D$ + ";EnJoY your time"+#LF$
    
    ;Stockage du résultat dans le presse papier..
    SetClipboardText (D$)
    MessageRequester("OK","Vous pouvez maintenant coller le résultat au début de votre code.",#MB_ICONINFORMATION)
    ; Ne vous reste plus qu'à coller en début de code.
    
Else
    MessageRequester("Désolé", "Le presse-papier ne conscient pas de procédures")
EndIf




Re: Declare Generator

Publié : ven. 23/avr./2021 9:28
par Marc56
C'est intéressant comme idée :D
Par contre il en ramasse un peu trop: si on passe sur ton code, il trouve:

Code : Tout sélectionner

Declare "), NP2 = CountString(t$,"Declare.")
Declare ",StartP)
Declare Recupe()
Declare RecupeDot()
Declare.")
Declare.",StartP)
;EnJoY your time
Il faudrait vérifier à gauche.

Il est aussi possible d'utiliser une RegEx
Au plus simple:

Code : Tout sélectionner

^Procedure .+?\)$
(mais ne fonctionne que si Procedure est en début de ligne)

Celle-ci est un peu mieux:

Code : Tout sélectionner

\sprocedure(\.?[a-zA-Z]?\s\w+\(.*?\))
Elle capture aussi le type de valeur de retour.
Mais elle ramasse aussi celle qui se trouve dans un commentaire.

Un petit bout de code RegEx qui semble fonctionner

Code : Tout sélectionner

EnableExplicit

Define Clip$ = GetClipboardText()

If Clip$ = "" 
    MessageRequester("Erreur", "Le presse-papier est vide") 
    End 
EndIf

Define RegEx$ = "\sprocedure(\.?[a-zA-Z]?\s\w+\(.*?\))"

If Not CreateRegularExpression(0, RegEx$, #PB_RegularExpression_NoCase)
    MessageRequester("Erreur", "L'expression régulière n'est pas valide")
    End
EndIf

If ExamineRegularExpression(0, Clip$)
    While NextRegularExpressionMatch(0)
        Debug "Declare" + RegularExpressionGroup(0, 1)
    Wend
Else
    MessageRequester("Désolé", "Le presse-papier ne conscient pas de procédures")
EndIf

End
Sur ton code (auquel j'ai ajouté quelques autres procédure pour tester), il trouve et créé bien

Code : Tout sélectionner

Declare Recupe()
Declare.i Recupe2()
Declare.i Recupe3(Hello, World.s)
Declare RecupeDot()
:wink:

Re: Declare Generator

Publié : ven. 23/avr./2021 11:54
par Guillot
bon, j'arrive apres la bataille

moi, pour l'analyse de code je fais ça
(mais je devrai peut etre me mettre aux expressions régulires...)

Code : Tout sélectionner

Procedure.s codefiltre(txt.s)
    Protected i,n,ch,co,  c.w
    
    n=Len(txt)
    Dim t.w(n-1)
    CopyMemory(@ txt,@ t(0),n*2)
    For i=0 To n-1
        c=t(i)
        Select c
            Case 34:ch=~ch	; guillemet
            Case 59:co=1	; point virgule
            Case 13:co=0	; me souviens plus pourquoi j'ai fais ça (mais doit y avoir une bonne raison...)
        EndSelect      
        If ch:c=34 :EndIf
        If co:c=59:EndIf
        t(i)=c
    Next
    CopyMemory(@ t(0),@ txt,n*2)
    ProcedureReturn txt
EndProcedure

g.s=Chr(34)
t.s="Global NP = CountString(t$,"+g+"Procedure "+g+"), NP2 = CountString(t$,"+g+"Procedure."+g+") ;commentaire"
tt.s=codefiltre(t)
Debug t
Debug tt
je fait la recherche sur le code filtré, et les modifs sur le code d'origine

une petite question marc56:
t'es le marc_256 du forum anglais ?

Re: Declare Generator

Publié : sam. 24/avr./2021 12:36
par Ar-S
@Marc56 Effectivement j'avais testé de sur de gros codes mais sans avoir songé que le mot Procedure pouvait être en comment ou dans une variable.
J'ai modifié le code au 1er topic pour y ajouter ton regex. Merci :P

Re: Declare Generator

Publié : lun. 26/avr./2021 13:42
par Marc56
Nouvelle version qui prend en compte plus de possibilités et ignore les procédures en commentaire.

Code : Tout sélectionner

^[^;]*?Procedure(\$?(?:\.[A-Za-z])?\h[A-Za-z_0-9]+\h?\((?:[A-Za-z0-9.,$ ]*)?\))
Exemple fonctionnel avec quelques lignes pour tester (on peut ainsi en ajouter)

Code : Tout sélectionner

EnableExplicit

Define Clip$ = "Procedure Hello_World()"                    + #CRLF$ +
               "Procedure Hello_World_00()"                 + #CRLF$ +
               "Procedure$ Hello_World_00()"                + #CRLF$ +
               "Procedure Hello_World_01(Hi$)"              + #CRLF$ +
               "Procedure Hello_World_01(Hi.s)"             + #CRLF$ +
               "Procedure.i Hello_World_01(Hi.s)"           + #CRLF$ +
               "Procedure$ Hello_World_01(Hi.s)"            + #CRLF$ +
               "Procedure 01_OK()              "            + #CRLF$ +
               "  Procedure 02_OK()            "            + #CRLF$ +
               "    Procedure 03_OK_()     "                + #CRLF$ +
               "a=0 : Procedure.b 04_OK()        "          + #CRLF$ +
               "Procedure 05_OK(param)         "            + #CRLF$ +
               "Procedure 06_OK (param, Parm2) "            + #CRLF$ +
               "Procedure.i 07_OK()   "                     + #CRLF$ +
               "Procedure.i 08_OK()"                        + #CRLF$ +
               "Procedure test() : a=1 : EndProcedure  "    + #CRLF$ +
               "EndProcedure         "                      + #CRLF$ +  ; No
               ";Procedure 20_KO()             "            + #CRLF$ +  ; No
               "; Procedure 21_KO()           "             + #CRLF$ +  ; No
               "a=0 : ; Procedure 22_KO()    "              + #CRLF$ +  ; No
               ";  Procedure 23_KO()             "          + #CRLF$ +  ; No
               ";   Procedure 24_KO()        "              + #CRLF$ +  ; No
               "a=0 : ;     Procedure 25_KO()"              + #CRLF$ +  ; No
               "a=0 : ;     Procedure   26_KO()"                        ; No

Define RegEx$ = "^[^;]*?Procedure(\$?(?:\.[A-Za-z])?\h[A-Za-z_0-9]+\h?\((?:[A-Za-z0-9.,$ ]*)?\))"

If Not CreateRegularExpression(0, RegEx$, #PB_RegularExpression_NoCase | 
                                          #PB_RegularExpression_Extended | 
                                          #PB_RegularExpression_MultiLine | 
                                          #PB_RegularExpression_AnyNewLine)
    MessageRequester("Error", "RegEx Not valid")
    End
EndIf

Define i
If ExamineRegularExpression(0, Clip$)
    While NextRegularExpressionMatch(0)
        i + 1
        Debug "Declare" + RegularExpressionGroup(0, 1)
    Wend
EndIf
FreeRegularExpression(0)
Debug #CRLF$ + "Found: " + i

End
:wink:

Re: Declare Generator

Publié : jeu. 29/avr./2021 9:08
par Zorro
Marc56 a écrit : ven. 23/avr./2021 9:28 C'est intéressant comme idée :D


Merci :) ;)

Re: Declare Generator

Publié : jeu. 29/avr./2021 17:23
par grendizer
Trés bonne idée

au passge un énorme Coucou à Zorro

Re: Declare Generator

Publié : dim. 02/mai/2021 9:24
par Zorro
grendizer a écrit : jeu. 29/avr./2021 17:23 Trés bonne idée

au passge un énorme Coucou à Zorro

yo , ;)


je disais Merci pour l'idée , parceque c'est présent depuis le début dans EPB ;)

je vois que le forum a changé ... de look ...

bon ,je retourne sur Blender (ben oui, je suis devenu un "pro" de Blender :D )

Re: Declare Generator

Publié : dim. 02/mai/2021 9:40
par Micoute
Bonjour Zorro. C'est normal, avec l'âge, les goûts changent.

Re: Declare Generator

Publié : dim. 02/mai/2021 11:23
par venom
Zorro a écrit : dim. 02/mai/2021 9:24 bon ,je retourne sur Blender (ben oui, je suis devenu un "pro" de Blender :D )
Ouep j'ai vue ça sur youtube :wink: J'ai d'ailleurs poster un message à une de tes vidéos :D







@++

Re: Declare Generator

Publié : dim. 02/mai/2021 12:08
par Zorro
Merci :)