cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
16 août 2003 à 00:50
CLio908
Messages postés15Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention21 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.
CLio908
Messages postés15Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention21 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és15Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention21 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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.
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és15Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention21 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és1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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és8Date d'inscriptionlundi 2 juin 2003StatutMembreDernière intervention27 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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és1Date d'inscriptionvendredi 25 juillet 2003StatutMembreDernière intervention21 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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és654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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és833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 18 août 2003 à 14:49
merci beaucoup, ça fait bien plaisir ce genre de compliments !!
@+
cs_koko
Messages postés654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 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és654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 février 2005 18 août 2003 à 09:34
merci !!! vous faites de l'exellent travail !
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 18 août 2003 à 02:06
voilà Koko maintenant les fichiers .pas sont gérés !
Bonne prog' !
cs_koko
Messages postés654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 février 2005 16 août 2003 à 16:02
a oki ^^
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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és654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 février 2005 16 août 2003 à 10:05
bravo bravo !!!
mais pourquoi se limiter au .dfm ?
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 16 août 2003 à 00:54
Merci Delphiprog, ce genre de commentaire fait bien plaisir !
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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...
6 nov. 2010 à 09:25
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+
3 nov. 2010 à 01:20
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+
29 oct. 2010 à 20:07
Je continue de chercher et je m'oriente vers un problème de jeu de caractères à priori. A suivre...
29 oct. 2010 à 10:05
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 ^^
28 oct. 2010 à 22:21
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...
23 oct. 2010 à 13:49
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
23 oct. 2010 à 11:43
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
29 oct. 2004 à 19:04
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.
23 août 2003 à 18:13
Le TParser doit être un très bon outil pour gérer les interprétations lexicales...
Bonne prog' !
Bestiol.
23 août 2003 à 16:06
++
21 août 2003 à 21:00
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.
21 août 2003 à 18:56
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
20 août 2003 à 02:15
Le code du TDfmParser devient nettement plus lisible, et moins lourd ainsi !!
Bon... vais m'coucher moi !! =0)
Bonne prog' à tous !
18 août 2003 à 17:47
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' !
18 août 2003 à 16:25
18 août 2003 à 15:05
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.
18 août 2003 à 14:49
@+
18 août 2003 à 14:45
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)
18 août 2003 à 09:34
18 août 2003 à 02:06
Bonne prog' !
16 août 2003 à 16:02
16 août 2003 à 15:12
-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 !
16 août 2003 à 12:12
mais par exemple j'avais essayé d'ouvrir un fichier .pas... mais il était pas content le prog !
16 août 2003 à 12:02
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.
16 août 2003 à 10:05
mais pourquoi se limiter au .dfm ?
16 août 2003 à 00:54
16 août 2003 à 00:50
Enfin un code source intéressant. On commençait à s'ennuyer...