Algo pour LibEditorPlus

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 :

Algo pour LibEditorPlus

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Dernière modification par Backup le ven. 01/avr./2005 23:18, modifié 1 fois.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Dr Dri, je te mpe !
sinon je teste Le SOldat Inconnu !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 

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

Message 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:
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message 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 ;)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 !!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

tu posais la question, je n'ai fait que confirmer :p
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Merci !
Répondre