[SOCPB 2006] Projet # 7 : Code Txt Doc -> Wiki

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

[SOCPB 2006] Projet # 7 : Code Txt Doc -> Wiki

Message par Progi1984 »

Projet #7

Leader :Dr Dri

Membres :

Bon Code

Note :
Le Leader a pour but :
+ d'orienter le développement du projet
+ de regrouper les codes recus
+ de formater le code final (lisibilité, commentaire)
Donc ses paroles sont lettres d'évangiles
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Pour commencer j'aurais quelques questions.

Serait-il possible d'avoir un fichier de doc qui contienne tous les cas de figure possibles ?
(je pense en particulier à la lib Gadget)

Est-ce qu'on inclue la coloration syntaxique ?
(sachant qu'il existe une lib officielle depuis la v4)

Est-ce qu'on propose la personnalisation des couleurs ?

Dri
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Un conseil : vois avec Comtois vu que c'est lui qui a lancé le projet...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

il y a une liste des commandes ici


André a commencé à renseigner un fichier word avec l'explication des commandes.
si tu as un accès au cvs tu peux le récupérer, sinon dis moi le , je le mettrai en ligne sur mon site.

Je pourrai aussi mettre à disposition le code que j'avais fait l'année dernière , c'est affreusement écrit et incomplet.
L'écrire à plusieurs ça pourra être l'occasion d'apprendre à mieux gérer ce genre de traitement :)
Est-ce qu'on inclue la coloration syntaxique ?
(sachant qu'il existe une lib officielle depuis la v4)
J'y avais songé à ce truc, pourquoi pas, mais dans un deuxième temps, faut pas voir trop gros pour commencer sous peine de ne rien finir .
Par contre on peut construire le code en gardant à l'esprit la possibilité d'ajouter cette extension.
Est-ce qu'on propose la personnalisation des couleurs ?
L'idéal serait de pouvoir construire un script de conversion de façon à personnaliser la page wiki.
Par exemple tu peux comparer la mise en page de la doc sur ces deux sites :

Site 1

Site 2
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tiens voila un exemple pour une commande

Code : Tout sélectionner

@Function Resultat = ButtonGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])

@Description
  Crée un bouton dans la GadgetList en cours.
  Si @ReferenceLink "purebasic_objects" "#PB_Any" est utilisé pour le paramètre '#Gadget', le numéro du nouveau gadget sera renvoyé dans 'Resultat'.
  #Gadget sera la valeur retournée par la fonction @Link "Window/EventGadget" "EventGadget()". x et y sont les coordonnées de la position du
  bouton dans la fenêtre. 'Largeur' et 'Hauteur' sont ses dimensions, 'Texte$' contient
  le texte qui sera affiché dans le bouton.
  Pour créer une GadgetList, voir @Link "CreateGadgetList" "CreateGadgetList()".
@LineBreak
@LineBreak
  Le paramètre facultatif 'Options' peut être une combinaison des constantes suivantes:
@FixedFont
  @ConstantColor "#PB_Button_Right"    : Aligne le texte du bouton à droite.
  @ConstantColor "#PB_Button_Left"     : Aligne le texte du bouton à gauche.
  @ConstantColor "#PB_Button_Default"  : Définit le bouton comme bouton par défaut (encadré en noir).
  @ConstantColor "#PB_Button_MultiLine": Affiche le texte sur plusieurs lignes s'il est trop long.
  @ConstantColor "#PB_Button_Toggle"   : Crée un bouton de type 'Toogle'. Ce bouton alterne l'état 'appuyé' et 'normal'.
@EndFixedFont
  Vous pouvez ajouter une 'mini aide' à ce gadget en utilisant @Link "GadgetToolTip" "GadgetToolTip()". 
@LineBreak
@LineBreak
@OS Windows
  @LineBreak
  @LineBreak
  @Underline "Pour Window uniquement":
  @LineBreak
  Vous pouvez utiliser le caractère '&' pour souligner une lettre particulière dans le 'Texte$'du bouton : "&Bouton" affichera : @Underline "B"outon
  @LineBreak
  (Note: Sous Windows XP le caractère souligné apparait seulement si cette option n'est pas désactivée.)
  @LineBreak
  @LineBreak
  Vous pouvez associer un raccourci clavier au bouton avec la commande @Link "Window/AddKeyboardShortcut" "AddKeyboardShortcut()".
@EndOS
@LineBreak
@LineBreak
@Example
@Code
  ; Démonstration des options possibles pour le gadget bouton
  ;
  If OpenWindow(0, 0, 0, 222, 200, "ButtonGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10,  10, 200, 20, "Bouton standard")
    ButtonGadget(1, 10,  40, 200, 20, "Texte aligné à gauche", #PB_Button_Left)
    ButtonGadget(2, 10,  70, 200, 20, "Texte aligné à droite", #PB_Button_Right)
    ButtonGadget(3, 10, 100, 200, 60, "Texte sur plusieurs lignes (les textes longs retournent automatiquement à la ligne)", #PB_Button_MultiLine)
    ButtonGadget(4, 10, 170, 200, 20, "Bouton à bascule", #PB_Button_Toggle)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
@EndCode
@LineBreak
@Image buttongadget.png

@SupportedOS Windows, Linux, MacOS X
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

J'ai récupéré la liste des commandes (heureusement il me reste des notions d'allemand) mais je me pose des questions (la différence entre Code->EndCode et SourceExample->EndSourceExample par exemple ?)

Enfin bon je lirais ca plus tard... Sinon je n'ai pas d'acces au cvs (pas qu'je sache...) donc si tu pouvais me donner le fichier word je ne dirais pas non ^^

J'ai récupéré aussi ton example du ButtonGadget mais je voulais plutôt la page "Gadget" avec la nouvelle navigation par image maintenant ^^ (enfin bon je garde aussi l'exemple du bouton =)

Pour les deux exemples de sites, c'est pas assez parlant pour moi :oops;

Ca signifie qu'il faut pouvoir générer plusieurs codes wiki différents ? Ca me fait penser qu'il faut ke je dl une doc sur les specs du wiki -_-

Je commence un embryon dès que j'ai le temps

Dri
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Voila le fichier doc avec les explications des mots clés de docMaker, il n'est pas fini , mais l'essentiel y est. Et j'ai mis le fichier complet gadget.txt.

http://perso.wanadoo.fr/comtois/Doc/doc.zip

Pour avoir accès au cvs tu as juste à installer tortoise sur ton disque :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Après avoir un peu tout lu, voila ce que je propose:

Il y a plusieurs types de balises et qu'en plus ca peut évoluer. Donc je propose un système de fichiers de préférences.

Code : Tout sélectionner

[balises avec les guillemets]
Bold = code wiki au choix
Green = code wiki au choix

[balises avec une url]
Image = code wiki au choix
InternetLink = code wiki au choix
Sinon une chose intéressante dans, un fichier peut contenir plusieurs fonctions, donc il faudrait une routine pour enumérer ces fonctions (et après laisser le choix de traiter une fonction en particulier ou toutes)

Dernier truc un peu gênant
(c'est pour ca que j'avais demandé la doc pour la lib gadget)

Il est possible d'insérer du code html dans la doc, dans le cas de la page Gadget ce n'est pas vital mais on ne sait pas comment ca va évoluer... Pour le moment on va être obligé de zapper le contenu de cette balise (@FormatIf)

Dri
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu as tout à fait raison Dri , il faudrait gérer un fichier préférence ,ça permet de personnaliser la page wiki.

Voici le code pourri que j'avais fait pour mettre en ligne la doc sur le site du GCN :oops:

Code : Tout sélectionner

;Gérer 
;@ReferenceLink 
;@FastLink
;@ConstantColor

Declare SelectionMotCle(Ligne$,MotCle$)

Global Precedent$,Suivant$,Sommaire$
Global FixeFont.l,CodeEnCours.l


#CheminWiki="D:\Wiki\"
#RepertoireCVS="D:\CVSPureBasic\Documentation\French\"
Global NewList Tampon.s()
Global NewList ListeFonction.s()
Global NewList ListeBibliotheque.s()
Global NewList ListeFichier.s()
Global NomFonction$
;Charge la liste des biblio
;Ce fichier est généré manuellement en faisant un copier/coller du sommaire de l'aide 
If OpenFile(0,"ListeBiblio.bib")
    While Eof(0)=0
        Ligne$=LTrim(ReadString(0))
        AddElement(ListeBibliotheque())
        ListeBibliotheque()=Ligne$
    Wend
    CloseFile(0)
EndIf  

;Détection de tous les fichiers "*.txt" issus du CVS
If ExamineDirectory(0, #RepertoireCVS, "*.txt")
    
    Repeat
        FileType = NextDirectoryEntry(0)
        If FileType
            FileName$ = DirectoryEntryName(0)
            If FileType = 1 ; 
                AddElement(ListeFichier())
                ListeFichier()=FileName$
                Debug filename$
            EndIf
        EndIf
    Until FileType = 0 
    
EndIf

ForEach ListeFichier()
    
    ;Mémorise le fichier
    If OpenFile(0,#RepertoireCVS + ListeFichier())
         
        ClearList(Tampon())
        While Eof(0)=0
            Ligne$=ReadString(0)
            AddElement(Tampon())
            Tampon()=Ligne$
        Wend
        CloseFile(0)
    EndIf  
    
    ;Création de la liste des fonctions de la bibliothèque
    ClearList(ListeFonction())
    ForEach Tampon() 
        If FindString(Tampon(),"@Function",1)
            SyntaxeFonction$=RemoveString(Tampon(), "@Function")
            ;Fonction retournant une valeur
            Position=FindString(SyntaxeFonction$,"=",1)
            If Position
                temp$=Trim(Mid(SyntaxeFonction$,Position+1,Len(SyntaxeFonction$)-Position))
            Else
                temp$=Trim(SyntaxeFonction$)
            EndIf
            NomFonction$=StringField(temp$,1,"(")
            AddElement(ListeFonction())
            ListeFonction()=NomFonction$
        EndIf  
    Next
    ;Trie la liste des fonctions
    SortList(ListeFonction(),0)
   
    ;Construction des fichiers 
    ForEach Tampon()
        If CodeEnCours=0
            Ligne$=LTrim(Tampon())
        Else
            Ligne$=Tampon()
        EndIf    
        ;C'est pas un commentaire et pas une ligne vide
        If Left(Ligne$,1)<>";" And Len(Trim(Ligne$))>0
            ;Cherche un mot clé
            Position=FindString(Ligne$,"@",1)
            ;Si un mot clé est trouvé 
            If Position  
                ;Recupere le MotCle
                temp$=Mid(Ligne$,Position+1,Len(Ligne$)-Position)
                MotCle$=StringField(temp$,1," ")
                If MotCle$="OS"
                    MotCle$=RemoveString(Ligne$,"@",1)
                EndIf    

                SelectionMotCle(Ligne$,MotCle$)
            Else
                If FixeFont
                    WriteString(0,"* ")
                EndIf    
                WriteStringN(0,Ligne$)
            EndIf
            
            
        EndIf
        
    Next    
    
Next
End
    
Procedure SelectionMotCle(Ligne$,MotCle$)
    
    Select MotCle$
        
        Case "Library"
            If IsFile(0)
                CloseFile(0)
            EndIf   
            
            ;Récupère le nom de la bibliothèque
            NomBibliotheque$=Trim(RemoveString(Ligne$, "@Library"))
            
            ;Création d'un fichier avec le nom de la bibliothèque
            If CreateFile(0,#CheminWiki+"Lib_"+NomBibliotheque$)=0
                MessageRequester("Création fichier wiki","Erreur à la création du fichier " + NomBibliotheque$,0)
                End
            EndIf
             
            ;Mémorise le nom du sommaire 
            Sommaire$="PureBasic:"+NomBibliotheque$
            
            ;écriture du menu
            ;Cherche la biblio dans la liste
            ForEach ListeBibliotheque()
                If ListeBibliotheque()=NomBibliotheque$
                    
                    index=ListIndex(ListeBibliotheque())
                    If index>0
                        SelectElement(ListeBibliotheque(),index-1)
                    Else
                        LastElement(ListeBibliotheque())
                    EndIf
                    LibPrecedent$="PureBasic:"+ListeBibliotheque()
                    
                    If index<CountList(ListeBibliotheque())-1
                        SelectElement(ListeBibliotheque(),index+1)
                    Else
                        FirstElement(ListeBibliotheque())
                    EndIf    
                    LibSuivant$="PureBasic:"+ListeBibliotheque()
                    
                    Break
                EndIf
            Next   
            
            WriteStringN(0,"{{ArticlesPlusieursPages|Sommaire=PureBasic:Manuel"+"|Précédent="+LibPrecedent$+"|Suivant="+LibSuivant$+"}} ")
            
        Case "Overview"
            WriteStringN(0,"==General==")
            
        Case "CommandList"    
            WriteStringN(0,"==Sommaire des commandes==")
            ForEach ListeFonction()
                WriteStringN(0,"* [[PureBasic:"+ListeFonction()+" | "+ListeFonction()+"()]]")
            Next    
        Case "Function"
            ;Termine le fichier en cours 
            If IsFile(0)
                CloseFile(0)
            EndIf   
            
            SyntaxeFonction$=RemoveString(Ligne$, "@Function")
            
            ;Fonction retournant une valeur
            Position=FindString(SyntaxeFonction$,"=",1)
            
            If Position
                temp$=Trim(Mid(SyntaxeFonction$,Position+1,Len(SyntaxeFonction$)-Position))
            Else
                temp$=Trim(SyntaxeFonction$)
            EndIf
            NomFonction$=StringField(temp$,1,"(")
            
            ;Cherche la fonction dans la liste
            ForEach ListeFonction()
                If ListeFonction()=NomFonction$
                    
                    index=ListIndex(ListeFonction())
                    
                    If index>0
                        SelectElement(ListeFonction(),index-1)
                    Else
                        LastElement(ListeFonction())
                    EndIf
                    Precedent$="PureBasic:"+ListeFonction()
                    
                    If index<CountList(ListeFonction())-1
                        SelectElement(ListeFonction(),index+1)
                    Else
                        FirstElement(ListeFonction())
                    EndIf  
                    Suivant$="PureBasic:"+ListeFonction()
                    
                    Break
                EndIf
            Next   
            If CreateFile(0,#CheminWiki+NomFonction$)=0
                MessageRequester("Création fichier wiki","Erreur à la création du fichier " + NomFonction$,0)
                End
            EndIf
            
            WriteStringN(0,"{{ArticlesPlusieursPages|Sommaire="+Sommaire$+"|Précédent="+Precedent$+"|Suivant="+Suivant$+"}} ")
            WriteStringN(0,"==Syntaxe==")
            New$=ReplaceString(SyntaxeFonction$,NomFonction$,"'''"+NomFonction$+"'''")
            WriteStringN(0,RTrim(LTrim(New$)))
            
        Case "Description"
            WriteStringN(0,"==Description==")
            
        Case "ConstantColor"
            Ligne$=RemoveString(Ligne$,"@ConstantColor",1)
            WriteStringN(0, "* " + Ligne$)
            
        Case "ReturnValue"
            WriteStringN(0, "==Valeur de retour==")
            
        Case "Parameters"
            WriteStringN(0, "==Arguments==")  
            
        Case "Image"    
            NomImage$=LTrim(RemoveString(Ligne$,"@Image"))
            WriteStringN(0, "[[Image:PB_"+NomImage$+"]]")
            
        Case "ExampleFile"
            WriteStringN(0, "'''<big>Exemple</big>'''")
            
        Case "Code"
            CodeEnCours=1
            WriteStringN(0, "<pre>")
            
        Case "EndCode"
            CodeEnCours=0
            WriteStringN(0, "</pre>")
            
        Case "FixedFont"
            FixeFont=1
            
        Case "EndFixedFont"
            FixeFont=0
            
        Case "LineBreak"
            WriteStringN(0, "<br>")
            
        Case "Link"
            Position=FindString(Ligne$,"@Link",1)
            While Position
                Position1=FindString(Ligne$,Chr(34),Position)
                Position2=FindString(Ligne$,Chr(34),Position1+1)
                Position3=FindString(Ligne$,Chr(34),Position2+1)
                Position4=FindString(Ligne$,Chr(34),Position3+1)
                Deb$=Left(Ligne$,Position-1) 
                Suite$=Mid(Ligne$,Position3+1,Len(Ligne$)-Position3)
                Champ$=StringField(Suite$,1,"(")
               
                Champ1$="PureBasic:"+Champ$ 
                
                Suite$=Mid(Ligne$,Position4+1,Len(Ligne$)-Position4)
                Ligne$=Deb$+"[["+Champ1$+" | "+Champ$+"()]]"+Suite$
                Position=FindString(Ligne$,"@Link",1)
            Wend    
            
            WriteStringN(0,Ligne$)   
            
        Case "ReferenceLink"
                    Position=FindString(Ligne$,"@ReferenceLink",1)
            ;While Position
                Position1=FindString(Ligne$,Chr(34),Position)
                Position2=FindString(Ligne$,Chr(34),Position1+1)
                Position3=FindString(Ligne$,Chr(34),Position2+1)
                Position4=FindString(Ligne$,Chr(34),Position3+1)
                Deb$=Left(Ligne$,Position-1) 
                Suite$=Mid(Ligne$,Position3+1,Len(Ligne$)-Position3)
                Champ$=StringField(Suite$,1,"(")
               
                Champ1$="PureBasic:"+Champ$ 
                
                Suite$=Mid(Ligne$,Position4+1,Len(Ligne$)-Position4)
                Ligne$=Deb$+"[["+Champ1$+" | "+Champ$+"()]]"+Suite$
                Position=FindString(Ligne$,"@ReferenceLink",1)
            ;Wend    
            
            WriteStringN(0,Ligne$) 
        Case "OS Windows"     
            WriteStringN(0,"==OS Windows==")
            
        Case "OS Amiga"     
            WriteStringN(0,"==OS Amiga==")
            
        Case "OS Linux"     
            WriteStringN(0,"==OS Linux==")
            
        Case "OS Mac"     
            WriteStringN(0,"==OS Mac==")
            
        Case "SupportedOS"
            WriteStringN(0,"==OS supportés==")
            OS$=RemoveString(Ligne$, "@SupportedOS")
            If FindString(OS$,"All",1)
                WriteStringN(0,"Windows, AmigaOS, Linux, MacOS X")
            Else    
                WriteStringN(0,LTrim(OS$))
            EndIf
            
    EndSelect
EndProcedure    
y'a du boulot pour arranger le truc :)

Enfin pas l'arranger mais en faire un autre en partant de zéro .
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

News au 10 Juillet ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Je viens de sortir de plusieurs semaines bien chargées (et ce week end mon anniversaire lol) donc grossomodo ca n'a pas bougé, je taffe toujours sur le fichier ini qui va contenir la description des balises.

Dri
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Bonne anniversaire :p
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

voila un début de fichier ini, il est loin d'être fini... si y'en a qui veulent participer, bah postez, sinon je vais continuer quand j'aurais le temps et éditer au fur et à mesure.

Code : Tout sélectionner

[TYPES]
NOPARAM = Balises qui n'ont pas de paramètre
DQUOTE  = Balises suivies d'un mot entre guillemets
DQUOTE2 = Balises suivies de deux mots entre guillemets
LINE    = Une balise par ligne, avec au moins un paramètre

[NOPARAM]
Code
EndCode
CommandList
Description
Example
FixedFont
EndFixedFont
FormatEndIf
Indent
EndIndent
LineBreak
EndOS
Overview

[DQUOTE]
Bold          = Met le texte en gras
Green         = Colore le texte en vert
Keyword       = Met le texte en gras avec la couleur des mots-clé
Orange        = Colore le texte en orange
Red           = Colore le texte en rouge
Underline     = Souligne le texte
ConstantColor = Colore le texte avec la couleur des constantes
FastLink      = Crée un lien vers une fonction de la même bibliothèque
FunctionColor = Colore le texte avec la couleur des fonctions

[DQUOTE2]

InternetLink = Crée un lien vers une ressource sur internet

[LINE]

ExampleFile = Crée un lien vers un fichier PureBasic (dans le dossier Examples)
SupportedOS = Donne la liste des systèmes d'exploitations qui supportent la fonction

;à classer...
;
;@ElseOs
;@EndSourceExample
;@FormatElse
;@FormatIf
;@Function
;@Image
;@Library
;@LibraryLink
;@Link
;@MainGuideLink (noparam ?)
;@Os
;@Parameter
;@Parameters
;@ReferenceLink
;@ReturnValue
;@Section
;@SourceExample
;@Syntax
;@Title
Dri
Dernière modification par Dr. Dri le lun. 17/juil./2006 12:20, modifié 2 fois.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Voici le fichier ini pour le wiki du GCN , je ne sais pas si c'est comme ça que tu avais prévu ?

Code : Tout sélectionner

[TAGS]
NOPARAM = Balises qui n'ont pas de paramètre
DQUOTE  = Balises suivies d'un mot entre guillemets
DQUOTE2 = Balises suivies de deux mots entre guillemets
LINE    = Une balise par ligne, avec au moins un paramètre

[NOPARAM]
Code = <pre>
EndCode = </pre>
CommandList = ==Sommaire des commandes==
Description = == Description == 
Example = '''<big>Exemple : </big>'''
ExampleFile = ''<big>Exemple</big>'''
FixedFont = Je ne sais pas 
EndFixedFont 
FormatEndIf 
Indent = Rechercher la syntaxe wiki
EndIndent
LineBreak = <br>
Os Amiga = == OS Amiga ==
Os Linux = == OS Linux ==
Os Mac = == OS Mac ==
Os Windows = == OS Windows ==
EndOS = 
Overview = == Général ==

[DQUOTE]
Bold          = Met le texte en gras
Green         = Colore le texte en vert
Keyword       = Met le texte en gras avec la couleur des mots-clé
Orange        = Colore le texte en orange
Red           = Colore le texte en rouge
Underline     = Souligne le texte
ConstantColor = Colore le texte avec la couleur des constantes
FastLink      = Crée un lien vers une fonction de la même bibliothèque
FunctionColor = Colore le texte avec la couleur des fonctions

[DQUOTE2]

[LINE]

[à classer...]
MainGuideLink (noparam ?)
Parameter
Parameters = ==Arguments==
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

En fait comtois tu as une longueur d'avance, je fais d'abord un fichier ini contenant la desctiption des balises. Ensuite un autre fichier de prefs pour la conversion en wiki.
Pour éviter d'avoir deux fichiers l'idéal aurait été un fichier xml mais bon c'est un détail ^^

(par exemple pour Code
Code = Début d'un listing PB)

[edit]
j'ai programmé un morceau du programe final, un explorateur de balises. Je vais le modifier pour ajouter les possibilités d'ajouter/modifier les informations des prefs. Et le tout devrait représenter une boîte de dialogue.

Code : Tout sélectionner

;Gestion des préférences sous forme de listes

Structure Preference
  Group.s
  Key.s
  Value.s
EndStructure

Procedure.l LoadPreferences(File.s, Preferences.Preference())
  Protected Load.l = #False
  
  If OpenPreferences(File)
  
    If ExaminePreferenceGroups()
      While NextPreferenceGroup()
        
        If ExaminePreferenceKeys()
          While NextPreferenceKey()
            AddElement( Preferences() )
            
            Preferences()\Group = PreferenceGroupName()
            Preferences()\Key   = PreferenceKeyName()
            Preferences()\Value = PreferenceKeyValue()
          Wend
        EndIf
        
      Wend
    EndIf
    
    ClosePreferences()
  
    SortStructuredList(Preferences(), 0|2, OffsetOf(Preference\Group), #PB_Sort_String)
    Load = #True
  EndIf
  
  ProcedureReturn Load
EndProcedure

;---------------------------------------------------------------------

Global NewList Description.Preference()

Enumeration
  #ComboBox_Types
  #ComboBox_Tags
  #Text_Description
EndEnumeration

Procedure FindGroup()
  Index = GetGadgetState(#ComboBox_Types)
  
  ;trouve le nom du groupe
  ResetList( Description() )
  While Index >= 0 And NextElement( Description() )
    If Description()\Group = "TYPES"
      Index - 1
    EndIf
  Wend
  
  Group.s = Description()\Key
  
  ;trouve le groupe
  ResetList( Description() )
  While NextElement( Description() ) And Description()\Group <> Group
  Wend
  
  If Description()\Group = Group
    FindGroup = #True
  EndIf
  
  ProcedureReturn FindGroup
EndProcedure

Procedure ChangeTag()
  If FindGroup()
    Index = GetGadgetState(#ComboBox_Tags)
    
    While Index > 0 And NextElement( Description() )
      Index - 1
    Wend
    
    If Index = 0
      SetGadgetText(#Text_Description, Description()\Value)
    EndIf
  EndIf
EndProcedure

Procedure ChangeGroup()
  If FindGroup()
    
    Group.s = Description()\Group
    ClearGadgetItemList(#ComboBox_Tags)
  
    ;refresh les balises
    Repeat
      AddGadgetItem(#ComboBox_Tags, #PB_Default, "@" + Description()\Key)
    Until Not NextElement( Description() ) Or Description()\Group <> Group
    
    SetGadgetState(#ComboBox_Tags, 0)
    ChangeTag()
  EndIf
EndProcedure

If LoadPreferences("description.ini", Description())
  OpenWindow(0, 0, 0, 270, 140, "Doc->Wiki Tag Explorer", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EndIf

If is window(0) And UseGadgetList( WindowID(0) )
  ComboBoxGadget(#ComboBox_Types, 10, 10, 250, 100)
  ComboBoxGadget(#ComboBox_Tags,  10, 40, 250, 100)
  TextGadget(#Text_Description, 10, 70, 250, 100, "")
  
  ;liste les groupes
  ResetList( Description() )
  While NextElement( Description() )
    If Description()\Group = "TYPES"
      AddGadgetItem(#ComboBox_Types, #PB_Default, Description()\Value)
    EndIf
  Wend
  SetGadgetState(#ComboBox_Types, 0)
  ChangeGroup()
  
  Repeat
    
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
          Case #ComboBox_Types
            ChangeGroup()
            
          Case #ComboBox_Tags
            ChangeTag()
            
        EndSelect
      
      Case #PB_Event_CloseWindow
        
        Quit = #True
      
    EndSelect
    
  Until Quit
EndIf
Dri
Répondre