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 !

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 ?

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

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

encore

au

Soldat

Inconnu
PS : Bonne nuit les gars !

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 !!!

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 !!!

J'ai pas vu les messages entre le mien et celui de cederavic
Dri

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 !