COLORATION SYNTAXIQUE AVEC TPARSER !!

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 16 août 2003 à 00:50
CLio908 Messages postés 15 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 21 novembre 2010 - 6 nov. 2010 à 09:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12705-coloration-syntaxique-avec-tparser

CLio908 Messages postés 15 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 21 novembre 2010
6 nov. 2010 à 09:25
Bonjour
Je confirme, avec D2007 c'est OK mais avec 2009 pb,
a la place des caractères, j'ai des carré si je regarde dans la var FSoursPtr
avant les #$A0D
Help please...
A+
CLio908 Messages postés 15 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 21 novembre 2010
3 nov. 2010 à 01:20
Bonjour et merci de jeter un œil.
j'ai pris en compte la dif des tostring et mettant classes.tostring mais apparemment je ne rentre même pas dans la boucle
while Parser.Token <> toEOF do //tant qu'on est pas à la fin du fichier...

pb de caractère ...

A+
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
29 oct. 2010 à 20:07
Bon, j'ai jeté un oeil à ce projet. Jusque Delphi 2007, tout va bien et aucun changement n'est nécessaire. De plus, le contenu du buffer est parfaitement lisible pour un occidental moyen comme moi. En revanche, avec Delphi 2009, les caractères contenus dans le buffer ressemblent à du chinois ou du japonais, va savoir...
Je continue de chercher et je m'oriente vers un problème de jeu de caractères à priori. A suivre...
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
29 oct. 2010 à 10:05
Salut Delphiprog :)

Merci pour les investigations !

Pour ce qui est de ta participation je m'en souviens assez bien de mon côté !
Je crois que tu m'avais généré la doc et sans doute aidé sur le code avec Nono ^^
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
28 oct. 2010 à 22:21
Bonsoir Clio908 et Olivier,

Delphi 2009 interprète toString comme un appel à la méthode toString définie dans la classe TObject. Il faut donc remplacer tous les toString par Classes.toString à chaque fois que le compilateur bute sur une erreur de ce type. En revanche, je n'obtiens pas les autres erreurs relevées par Clio908.
Néanmoins l'application compilée avec Delphi 2009 ne colorise pas le code contenu dans l'éditeur comme attendu et semble ne rien faire.
Je continue de rechercher la raison et je reviendrai alors vers vous.

PS : je ne me souvenais plus d'avoir apporté ma contribution à ce projet...
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
23 oct. 2010 à 13:49
Bonjour Clio908 !

Je suis désolé, depuis toutes ces années je suis toujours inscrit aux emails de notification, malheureusement je ne fais plus de Delphi depuis presque autant de temps... je n'ai pour ainsi dire plus de quoi ouvrir ces fichiers (pas même Windows...) et je ne pourrais donc pas t'aider à corriger les problèmes.

D'instinct, je dirais que pour le premier problème il faut que tu vérifies le paramètre passé à toString (s'il y en a un/en manque un ?) ou sur quoi l'appel est fait. L'API a pu changer depuis 2003...
Pour le second problème, le type WideString n'existe sans doute plus depuis le support Unicode par Delphi ?
De ce que je viens de lire, remplace WideString par UnicodeString et ça devrait rouler !
Je t'invite à lire cet article : http://delphi.about.com/gi/o.htm?zi=1/XJ&zTi=1&sdn=delphi&cdn=compute&tm=33&f=00&su=p284.9.336.ip_p504.1.336.ip_&tt=2&bt=0&bts=0&zu=http://edn.embarcadero.com/article/38437

Voilà voilà, je ne peux guère faire plus, j'espère que cela t'aidera :)
Et comme je le disais avant, "bonne prog' !" ^^
Olivier
CLio908 Messages postés 15 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 21 novembre 2010
23 oct. 2010 à 11:43
Bonjour
J'arrive pas à le faire tourner sur CodeGear 2009
PB1
le Pb vient de toString dans la procedure TModifParser.CheckToken(T: Char);
message: E2026: Expression constante attendue
toString renvoie au fichier classes pour définir une constante
PB2
FWideStr: WideString;
message: identificateur de type attendu
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
29 oct. 2004 à 19:04
Félicitation pour la rapidité de la coloration. On pourra toujours rétorquer que les composants SynEdit sont les meilleurs, mais la question n'est là. En effet, j'avais vu un composant TCodeMaster sur le site Delphi Super Page (http://delphi.icm.edu.pl/). Le principe était le même: un TRichEdit. Oui, mais l'atout ici est que la couleur est mise avant le texte, et pas le texte avant la couleur (sinon on est obligé de sélectionner pour appliquer la couleur). L'erreur n'est ici pas faite, contrairement au composant précédent. Et c'est de là que vient la rapidité.

L'autre chose très sympathique pour un test rapide: pas d'installation de composants dans la palette.

Et comme on est dans le parcours syntaxique des fichiers .PAS, ID=24746 propose une élimination des commentaires dans ces mêmes fichiers. Encore un programme sympa qui montre que le projet de cette page comporte en moyenne 40% de commentaires. Mais ça c'est juste une donnée expérimentale.
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
23 août 2003 à 18:13
ok ok, je serai curieux de voir ce que ça va donner !!
Le TParser doit être un très bon outil pour gérer les interprétations lexicales...

Bonne prog' !
Bestiol.
loadspeed Messages postés 8 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 27 septembre 2003
23 août 2003 à 16:06
Je suis en train de tenter de faire un interpretateur de grammaire generique, c'est a dire qu'a partir d'un fichier généré (le fichier de grammaire), mon programme interpretera automtiquement je vais tenter d'inclure ton source, ds le mien pour créer un IDE je te fais signe des que c'est opérationnel.
++
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
21 août 2003 à 21:00
Merci pour ses compliments... je dois dire que je suis assez content car j'ai repéré cette classe il y a longtemps, et j'ai enfin compris comment elle fonctionne !!

Pour ta question là j'ai pas trop le temps, mais j'ai l'intention de me pencher sur le problème !
La suite au prochain numéro, donc ! ;o)

Bonne prog' !
Bestiol.
DeVxX Messages postés 1 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 21 août 2003
21 août 2003 à 18:56
Quoi doit-on faire si je veux gérer les balises HTML et aussi detecté les balise de scripts PHP.ASP,JSP, pour ensuite coloriser les functionner interieure (entre les 2 balise de script) ?

En passant, c'est la premiere fois que je trouve quelque chose d'excellent sur la syntax coloring. Tu m'as beaucoup aider a comprendre le fonctionnement et je t'en remercie infiniment.

Merci
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
20 août 2003 à 02:15
et voilà une nouvelle mise à jour !!
Le code du TDfmParser devient nettement plus lisible, et moins lourd ainsi !!

Bon... vais m'coucher moi !! =0)
Bonne prog' à tous !
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
18 août 2003 à 17:47
non autre part...
Tu as :
Case Parser.Token Of
toString, toWString,....
...
toSymbol: ...
...
//Le else constitue un nouveau cas
else if (Parser.TokenString CaractereSpecial) and (Parser.NextToken toInteger) then
begin
//Ici tu peux récupérer le chiffre donnant la couleur avec Parser.TokenInt et par exemple utiliser un tableau pour gérer la couleur en fonction du nombre !
end;
end;//le end du case est ici !!

Si tu veux je peux te créer une classe qui rajoutera cette fonctionnalité. Mais le code d'au-dessus est amplement suffisant normalement !!
Le mieux serait également que tu aies un caractère de fin, pour dire où la sélection s'arrête. Tu le trouverais alors avec un While !

Allez bonne prog' !
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
18 août 2003 à 16:25
pour la deuxieme solution, je dois ajouter le if apres le end du Case Parser.Token Of ??? ou bien autre part ?
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
18 août 2003 à 15:05
en fait ce que tu demandes correspond un peu aux modifications apportées pour les commentaires...
Par exemple avec '(*'... On peut assimiler la parenthèse à ton caractère spécial, et l'étoile à un nombre !
Regarde dans l'unité TMonParser.pas, la fonction NextToken... En fin de fonction tu as un commentaire "PARTIE AJOUTEE", c'est là que tu pourras t'inspirer si tu veux agir au niveau de la classe...

Si tu veux ajouter cette gestion dans la classe TPasParser, ton caractère spécial ne devrait être reconnu comme aucun type de token... Il faut donc que tu rajoutes un else au CaseParser.Token Of, et que tu introduises le code par :
If (Parser.TokenString CaractereSpecial) and (Parser.NextToken toInteger) then
begin
//Ici tu peux récupérer le chiffre donnant la couleur avec Parser.TokenInt et par exemple utiliser un tableau pour gérer la couleur en fonction du nombre !
end;

Voilà je pense que tout ça devrait faire l'affaire... Le plus facile est certainement la seconde solution !!
Bonne prog' !
Bestiol.
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
18 août 2003 à 14:49
merci beaucoup, ça fait bien plaisir ce genre de compliments !!

@+
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
18 août 2003 à 14:45
j'ai plusieurs questions :
1. Comment faire pour, par exemple, détecté un caractère spécial suivi d'un nombre et faire un action suivant le nombre ?
exemple..
on prend le caractère 3 avec un nombre. Chaque nombre correspond a une couleur (0 blanc, 1 noir, 2 = gris,...) et apres mettre ce qui suit avec la couleur...
exemple concret :
1 j'écris en noir
et alors dans le richedit, ca ecrit en noir...

2. J'ai essayé de justement faire ce que j'ai dis au dessus... mais juste loader un fichier qui est pas dfm ou pas, et ca bug au niveau du while Parser.Token <> toEOF...
donc voila (et encore bravo du beau travail :D)
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
18 août 2003 à 09:34
merci !!! vous faites de l'exellent travail !
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
18 août 2003 à 02:06
voilà Koko maintenant les fichiers .pas sont gérés !

Bonne prog' !
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
16 août 2003 à 16:02
a oki ^^
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
16 août 2003 à 15:12
Pour répondre à Koko, je me suis limité au .dfm car c'était d'après moi le plus simple pour faire un exemple :
-2/3 mots réservés à prendre en compte
-Une seule couleur qui différencie juste les valeurs "non symboliques", si on peut dire !

Mais je compte essayer de colorer du code Pascal, et peut-être du HTMl ou PHP...
Mais le mieux, c'est que la classe TParser, dont tu peux hériter pour faire une nouvelle classe, te permet également d'interpréter le code, par exemple !
C'est un gros travail mais au final l'outil est de taille !

Je vais essayer un autre type de fichier...
Bonne prog' !

PS: Si le "prog n'est pas content", c'est parce que ma boucle n'est en rien prévue pour trouver autre chose que le contenu d'un DFM !
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
16 août 2003 à 12:12
pour du php, html, javascript... pour les languages web quoi...

mais par exemple j'avais essayé d'ouvrir un fichier .pas... mais il était pas content le prog !
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
16 août 2003 à 12:02
"mais pourquoi se limiter au .dfm ?"
Réponse : il fallait bien commencer par quelque chose !
Si tu entrevois d'autres applications concrètes, ne te gênes pas pour faire une proposition, elle sera accueillie avec plaisir.
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
16 août 2003 à 10:05
bravo bravo !!!
mais pourquoi se limiter au .dfm ?
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
16 août 2003 à 00:54
Merci Delphiprog, ce genre de commentaire fait bien plaisir !
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
16 août 2003 à 00:50
Super travail que tu as réalisé là !

Enfin un code source intéressant. On commençait à s'ennuyer...