Outils pour ajouter les Declare des procédures d'un fichier

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Si certains d'entre-vous utilisent jaPBe, je vous rappelle que ces fonctions existent déjà :
- soit manuellement : menu "Projet" -> "Insérer déclarations"
- soit automatiquement : menu "Projet" -> "Options du projet" -> Cocher "Créer un fichier de déclarations"
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Bon a savoir mais je prefere personnellement l'editeur officiel, je jetterais quand meme un oeil sur la derniere version de jaPBE des que j'ai un peu de temps 8), Au fait, bravo pour le boulot fourni sur tes nombreux autres programmes, une suggestion quand meme, pourrais tu fournir les codes sources, ca pourrait etre un plus apreciable...
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

Salut à Toutes et à Tous,
Ah JaPBe, un réel plaisir pour PureBasic :D
Pendant que j'y suis : FELICITATIONS pour tes produits qui demandent énormément de travail! (JaPBe, PureForm...)
Une petite question Gnozal...Que veut dire jaPBe ?
C'est une concaténation de mots clefs :wink:

En outre, puisque je suis dans les éloges, je tiens à remercier tous les purebasiciens et purebasiciennes pour les aides et autres codes sources qui sont à mis à disposition de la communauté. :D

Cordialement,
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Sehka a écrit :Salut à Toutes et à Tous,
Ah JaPBe, un réel plaisir pour PureBasic :D
Pendant que j'y suis : FELICITATIONS pour tes produits qui demandent énormément de travail! (JaPBe, PureForm...)
c'est clair, que c'est un sacré boulot :D
et puis pour JaPBE , je ne saurai plus m'en passer !!
je ne sais meme pas comment font ceux qui ne l'utilise pas !!
rien que pour la mise en forme du code avec Ctrl+Tab, il est indispensable :D

Sehka a écrit : Une petite question Gnozal...Que veut dire jaPBe ?
C'est une concaténation de mots clefs :wink:
J uste
A nother
P ure
B asic
E ditor

voila ! Japbe a été programmé par G P I ,
puis repris par Gnozal , pour continuer a le maintenir :D (Merci pour ça)
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

Merci Dobro pour ton explication du jaPBe :D
Concernant le Ctrl+Tab, enfin de la magie informatique :lol:
C'est tout simplement EFFICACE :!:
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Interessant en effet Ctrl+Tab, j'ai un peu examiné le code de JaPBE, j'ai extrait la procedure AutoIndentSelection2() apparement optimisé par gnozal et l'autre faite par l'auteur initial AutoIndentSelection(), bon je pensais faire ca rapidement pour l'editeur officiel, le hic c'est que la procedure d'indentation depend etroitement de scintilla, il faudrait a priori readapter les procedures associés et ils sont nombreux les bougres, autant reecrire une telle fonction mais ca prendrait trop de temps, c'est quand meme aberrant que ce type de fonction manque a l'editeur officiel, je me poses une question, pourquoi maintenir jaPBE au lieu d'ameliorer par des petits utilitaires (codé avec le language) l'editeur officiel de purebasic, ca pourrait profiter egallement aux autres version linux et mac...
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Un programme à ajouter à l'éditeur officiel existe déja, créé par LSI (Le Soldat Inconnu). Fouillez sur son site pour un petit programme qui s'appelle
PBSyntax.exe dans la section PureBasic.

http://www.lsi-dev.com/index.php

Pour être honnète, ce genre de fonctionnalité se doit d'être intégré à l'éditeur et non disponible par l'intermédiaire d'un plugin. C'est la seule raison pour laquelle je travaille avec jaPBe. Même si je préfaire, et de loin, la simplicité de l'éditeur officiel.

A+
Guimauve
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

c'est pas si sorcier a faire un Ctrl-tab, j'en ai fait un pour mon éditeur
PureGolo :D

je surveille l'appuis sur les touches Ctrl+Tab

puis je passe en revu chaque ligne de l'éditeur

en fonction de ce que je trouve , comme commandes PureGolo
j'ajoute un espace (ou une tabulation, je sais plus :lol:)
ou bien je retire, cette espace , ou cet tabulation :D
il suffit de faire une variable qui s'incremente a la rencontre d'un "IF" par exemple , et qui se décremente a la rencontre d'un Endif :D
pareil avec les autres commandes qui seraient concernées par l'indentation, une seul variable devrai suffire en principe :D

bref rien de bien compliqué :D
pareil au moment de l'entrée d'une commande, incrémenter la variable ou décrémenter la variable suivant la commande qui est entré en début de ligne ..
Franchement, c'est pas dur a faire comme truc :D
je ne comprends pas non plus pourquoi l'éditeur officiel ne l'a pas 8O

mais mon pure Golo lui si ! :D
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Bon, j'ai fait une recherche dans le forum sur PBSyntax, il me semble que ce n'est pas fiable, d'apres ce que j'ai lu, beaucoups on eu des probleme en l'utilisant, maintenant faire ce genre de fonction de zero en tenant compte de la syntaxe de purebasic n'est peut etre pas dur mais necessiterait beaucoup de temps et je n'ai vraiment pas que ca a faire :P surtout que cette fonction devrait logiquement etre integre dans tous editeur de language qui se respecte...
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Bonjour à tous,

j'ai adapté le code qui permet de lister les déclarations pour les avoir dans l'ordre alphabétique (nom de procédure)

Merci à Marc et Coolman pour les versions

Code : Tout sélectionner

; Description : au lieu d'ajouter manuellement les Declare en début des fichiers sources. ce code permet
; de le faire automatiquement, cree les declare relatifs aux procedures du code a traiter, à compiler en V4
; et à ajouter au menu Outils de l'IDE....
;
; ne pas oublier dans la section arguments de mettre "%FILE" au lieu de seulement %FILE sinon les noms
; de fichiers avec espace ne passent pas...
;
; Code creé par Mark trouvé sur le forum francais de purebasic
;
; Modifié par Coolman le 12 Fevrier 2007, le resultat est transferé dans le presse papier a charge pour
; l'utilisateur de faire un coller en debut de code...
;
; Modifié par Denis le 25 Novembre 2007, le resultat transferé dans le presse papier est trié par ordre 
; alphabétique des noms de procedure
;

Structure MyDeclare
   NomProc.s
   TypeRetour.s
EndStructure

Declare.l CheckDeclare(Chaine.s)
Declare.s GetProcedureName(Chaine.s)
Declare.l CheckString(Chaine.s)

EnableExplicit
Global NewList MyProcedures.s()
Global NewList MyDeclarations.MyDeclare()

Define Result.l = 0
Define Pos.l = 0
Define SourceFileName.s = ProgramParameter()
Define Chaine.s = ""
Define TempDir.s = GetTemporaryDirectory()
Define Tmpchaine.s = ""
Define Compteur.l = 0
Define RC.s = Chr(13) + Chr(10)


Procedure.l CheckDeclare(Chaine.s)

  Define Result.l = #False
  Define MyProcName.s = ""
  Define Data01.s = Trim(Chaine)
 
  If FindString(Data01,"Declare",1) = 1
    MyProcName = GetProcedureName(Data01)
    ResetList(MyProcedures())
    While NextElement(MyProcedures())
      If MyProcedures() = MyProcName
        Result = #True
        Break
      EndIf   
    Wend
  EndIf
 
  ProcedureReturn Result

EndProcedure

Procedure.s GetProcedureName(Chaine.s)
 
  Define Ptr01.l = 0
  Define Ptr02.l = 0
  Define Result.s = ""
  Define Data01.s = Trim(Chaine)
 
  Ptr01 = FindString(Data01," ",1)
  Ptr02 = FindString(Data01,"(",1)
  If Ptr01 > 0 And Ptr02 > Ptr01
    Ptr01 + 1
    Result = Trim(Mid(Data01,Ptr01,Ptr02 - Ptr01))
  EndIf
 
  ProcedureReturn Result
 
EndProcedure

Procedure.l CheckString(Chaine.s)

  Define Result.l = 0
  Define DoIt.l = #False
  Define Data01.s = Trim(Chaine)
  Define Data02.s = ""
   
  If FindString(Data01,"ProcedureReturn",1) = 1
    Result = 0
  Else   
    If FindString(Data01,"Procedure",1) = 1
     
      Data02 =  GetProcedureName(Chaine)
      AddElement(MyProcedures())
      MyProcedures() = Data02
     
      Data01 = StringField(Data01,1," ")
      If FindString(Data01,".",1) > 0
        Select Right(Data01,1)
          Case "b"  : Result = 2
          Case "c"  : Result = 3
          Case "w"  : Result = 4
          Case "l"  : Result = 5
          Case "f"  : Result = 6
          Case "q"  : Result = 7
          Case "d"  : Result = 8
          Case "s"  : Result = 9       
        EndSelect
      Else
        Result = 1
      EndIf
    EndIf
  EndIf
 
  ProcedureReturn Result

EndProcedure

If SourceFileName="" : End : EndIf
If MessageRequester("Information", "Analyser le fichier "+ SourceFileName + " (O/N) !" , #PB_MessageRequester_YesNo)  <> 6 :

End : EndIf     

If OpenFile(1,SourceFileName)
      While Eof(1) = 0
        Chaine = ReadString(1) : Result.l = CheckString(Chaine)
        If Result > 0
          Chaine = Trim(Chaine) : Pos = FindString(Chaine," ",1)
          If Pos > 0
            Select Result
              Case 1  
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos)
                    MyDeclarations()\TypeRetour = "Declare   " 
                 EndIf     
              
              Case 2 
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos)
                    MyDeclarations()\TypeRetour = "Declare.b "
                 EndIf     

              Case 3
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos)
                    MyDeclarations()\TypeRetour = "Declare.c " 
                 EndIf     

              Case 4
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos)
                    MyDeclarations()\TypeRetour = "Declare.w " 
                 EndIf     

              Case 5 
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos) 
                    MyDeclarations()\TypeRetour = "Declare.l " 
                 EndIf     

              Case 6 
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos) 
                    MyDeclarations()\TypeRetour = "Declare.f " 
                 EndIf     

              Case 7
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos)
                    MyDeclarations()\TypeRetour = "Declare.q "
                 EndIf     

              Case 8
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos)
                    MyDeclarations()\TypeRetour = "Declare.d " 
                 EndIf     

              Case 9
                 If AddElement(MyDeclarations())
                    MyDeclarations()\NomProc = Right(Chaine,Len(Chaine) - Pos) 
                    MyDeclarations()\TypeRetour = "Declare.s "
                 EndIf     

            EndSelect
            Compteur + 1        
               
          EndIf       
        EndIf       
      Wend     

      SortStructuredList(MyDeclarations(), 2, OffsetOf(MyDeclare\NomProc), #PB_Sort_String)
      ForEach MyDeclarations()
         Tmpchaine + MyDeclarations()\TypeRetour+MyDeclarations()\NomProc + RC
      Next
      
      If Compteur>0 And (compteur = CountList(MyDeclarations()))
          SetClipboardText(Tmpchaine)
          MessageRequester("Information", Str(Compteur)+" 'Declare(s)' detecté(s) et transferé(s) dans le presse papier" + RC +"faites un coller pour l'inserer dans votre code source...", 0)
      Else
          If Compteur = 0
             MessageRequester("Information", "Desolé, aucun resultas...", 0)
          Else
             ; c'est une erreur dans l'ajout des éléments de la liste chainée
             MessageRequester("Information", "Le nombre d'éléments de la liste ne correspond pas au nombre de déclarations"+RC+"testez le résultat des fonctions AddElement(MyDeclarations())", 0)
          EndIf
      EndIf   
      CloseFile(1)           
Else
     MessageRequester("Information", "Desolé, une erreur s'est produite lors de l'acces au fichier "+SourceFileName+" !", 0)
     End
EndIf       
End 
Répondre