Page 1 sur 1

Algo pour LibEditorPlus

Publié : jeu. 31/mars/2005 11:23
par Progi1984
J'ai un petit probleme pour la fonction de coloration syntaxique !
Voila en fait ce que je voudrais

"; " 'ca c une chaine que je vourdrais en chaine' ; "" ' la c le commentaire'

mais je n'arrive pas à trouver l'algo car à chaque fois, il détecte le premier point virgule comme le début du commentaire donc si quelqu'un pouvait m'aider !

merci d'avance ! :D

Publié : jeu. 31/mars/2005 13:05
par Le Soldat Inconnu
pas compliqué, tu comptes le nombre de " avant le point virgule
si le nombre de " est impaire, tu est dans du texte donc on a pas de commentaire
si le nombre de " est paire, tu n'es pas dans du texte

Publié : ven. 01/avr./2005 18:26
par Dr. Dri
j'ai fait un petit analyseur syntaxique (avec quelques défauts) qui passe du code PB en code html+css. Si ca t'intéresse de voir comment je fais je peux t'envoyer les sources...

Chui pas sûr d'avoir commenté par contre...

Les seuls défaut ke je connaisse pour le moment c'est que parfois il mange des accents en passant d'un mot clé à un séparateur par exemple... (en changeant de style)

Y'a aussi la gestion du '*' qui est foireuse parfois (interprêté comme la multiplication, un opérateur et je me rappelle plus sa 2e signification)

Dri

Publié : ven. 01/avr./2005 21:56
par Backup
(interprêté comme la multiplication, un opérateur et je me rappelle plus sa 2e signification)
par exemple ne serait ce pas
un joker qui signifie que l'on remplace plusieurs characteres !!

*.gif ou bien Dri.*

ou bien les pointeurs ?

:D

Publié : ven. 01/avr./2005 22:21
par Progi1984
Dr Dri, je te mpe !
sinon je teste Le SOldat Inconnu !

Publié : ven. 01/avr./2005 23:18
par Progi1984
02/04/05 : 00h17m :
J'ai enfin réussi

un code d'aide :

Code : Tout sélectionner

text$="C'est un test   "+Chr(34)+Chr(34)+";"+Chr(34)+"   apreés on continue      ;"+Chr(34)+"teste2"+Chr(34)
     test=FindString(text$,";",0)
    test2$=Mid(text$,1,test)
    alpha=CountString(test2$,Chr(34))
    If alpha%2 =1 
     test3$="dedans"
    Else
     test3$="hors"
    EndIf
  If OpenWindow(0,0,0,322,150,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"EditorGadget") And CreateGadgetList(WindowID(0)) 
    EditorGadget (0,8,8,306,133,#PB_Container_Raised) 
   
      AddGadgetItem(0,1,text$) 
      AddGadgetItem(0,2,Str(test))
      AddGadgetItem(0,3,test2$)
      AddGadgetItem(0,4,Str(alpha))
      AddGadgetItem(0,5,test3$)
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
  EndIf 


Publié : ven. 01/avr./2005 23:57
par Progi1984
02/04/05 : 00h52m
Amélioration 1: dés le premier point-virgule hors d'une chaine, il considéère le reste comme du commentaire
Amélioration 2: il gère les multiples points-virgules dans les chaines !

Attention : Code supermoche :oops: :oops: mais c'était pour les tests !

Demain ! ¨Plus d'explications !
Alors n'hésitez pas pour les commentaires et les critiques !

Code : Tout sélectionner

text$="C'est un test   "+Chr(34)+";"+Chr(34)+Chr(34)+";"+Chr(34)+"   aprés on continue      ;"+Chr(34)+"teste2"+Chr(34)+Chr(34)+";"+Chr(34)+"   aprés on continue"

i=0
j=1   
  If OpenWindow(0,0,0,322,150,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"EditorGadget") And CreateGadgetList(WindowID(0)) 
    EditorGadget (0,8,8,306,133,#PB_Container_Raised) 
   Repeat
        test=FindString(text$,";",i)

        test2$=Mid(text$,1,test)
        alpha=CountString(test2$,Chr(34))
        If alpha%2=1 
          test3$="dedan"
          i=test+2
        Else 
          test3$="hors"
          i=test+1
        EndIf
      
      AddGadgetItem(0,5*j+1,text$+Str(j)) 
      AddGadgetItem(0,5*j+2,Str(test))
      AddGadgetItem(0,5*j+3,test2$)
      AddGadgetItem(0,5*j+4,Str(alpha))
      AddGadgetItem(0,5*j+5,test3$)
      j=j+1
   Until test=0 Or test3$="hors"
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
  EndIf 
Merci :D encore :D au :D Soldat :D Inconnu :D

PS : Bonne nuit les gars ! :sleeping: :sleeping:

Publié : sam. 02/avr./2005 7:26
par cederavic
Dr. Dri a écrit : Y'a aussi la gestion du '*' qui est foireuse parfois (interprêté comme la multiplication, un opérateur et je me rappelle plus sa 2e signification)
C'est pour les pointeur ;)

Publié : sam. 02/avr./2005 9:46
par Dr. Dri
cederavic a écrit :C'est pour les pointeur ;)
Pour ne pas dire de connerie j'ai préféré ne rien dire ;)
je me rappelai plus dans quel cas on l'utilisai meme si j'étais sur pour les pointeurs
mais là ca a fait tilt, je l'utilisai surtout avec les structures ^^ pour les paramètres des procédures

Dri

PS. je fais pas assez de pure en ce moment !!

Publié : sam. 02/avr./2005 21:11
par Backup
cederavic a écrit :
Dr. Dri a écrit : Y'a aussi la gestion du '*' qui est foireuse parfois (interprêté comme la multiplication, un opérateur et je me rappelle plus sa 2e signification)
C'est pour les pointeur ;)
j'lavais dit avant !!! :D

Publié : sam. 02/avr./2005 21:17
par cederavic
tu posais la question, je n'ai fait que confirmer :p

Publié : sam. 02/avr./2005 22:01
par Dr. Dri
Dobro a écrit :j'lavais dit avant !!! :D
J'ai pas vu les messages entre le mien et celui de cederavic :lol:

Dri :0:

Publié : sam. 02/avr./2005 22:16
par Progi1984
Je vous le rend plus facile d'appréhension en vous le commentant :

Code : Tout sélectionner

text$="C'est un test   "+Chr(34)+";"+Chr(34)+Chr(34)+";"+Chr(34)+"   aprés on continue      ;"+Chr(34)+"teste2"+Chr(34)+Chr(34)+";"+Chr(34)+"   aprés on continue"   ; phrase de test

i=0
j=1   
  If OpenWindow(0,0,0,322,150,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"EditorGadget") And CreateGadgetList(WindowID(0))
    EditorGadget (0,8,8,306,133,#PB_Container_Raised)
   Repeat
        test=FindString(text$,";",i) ; je cherche le ième point-virgule

        test2$=Mid(text$,1,test) ; je prends le texte avant le point-virgule
        alpha=CountString(test2$,Chr(34)) ; je compte le nombre de guillemets avant ce point virgule
        If alpha%2=1
          test3$="dedan" ; si c'est impair, alors le point virgule est dans une chaine
          i=test+2
        Else
          test3$="hors" ; si c'est pair, alors le point virgule est un commenataire
          i=test+1
        EndIf
     
      AddGadgetItem(0,5*j+1,text$+Str(j))
      AddGadgetItem(0,5*j+2,Str(test))
      AddGadgetItem(0,5*j+3,test2$)
      AddGadgetItem(0,5*j+4,Str(alpha))
      AddGadgetItem(0,5*j+5,test3$)
      j=j+1
   Until test=0 Or test3$="hors" ; on quitte quand il n'y pas plus de guillemets ou quand on a trouvé le début des commenatires 
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf 

Publié : dim. 03/avr./2005 10:32
par Dr. Dri
finalement j'ai posté le code sur le forum
(il est pas aussi énorme que dans mes souvenirs)

Par contre aucun commentaire..
Mais je peux répondre aux questions si j'arrive à me rappeler

http://purebasic.hmt-forum.com/viewtopic.php?t=2654

Dri ;)

Publié : dim. 03/avr./2005 13:16
par Progi1984
Merci !