begin process at 2010 02 10 05:46:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > COLORATION SYNTAXIQUE AVEC TPARSER !!

COLORATION SYNTAXIQUE AVEC TPARSER !!


 Information sur la source

Note :
9,75 / 10 - par 8 personnes
9,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Expert Date de création :15/08/2003 Date de mise à jour :20/08/2003 02:13:19 Vu / téléchargé :7 781 / 1 199

Auteur : Bestiol

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note


 Description

La classe TParser est une classe non documentée de Delphi. Elle permet de découper une chaîne de caractères en "tokens". On peut ensuite parcourir la chaîne token par token, récupérer la position dans la chaîne du token en cours...

Cette source permet grâce à cette classe de colorer le texte d'un fichier DFM comme le fait Delphi grâce à un code très simple qui se résume en gros à une boucle While...
    
---------
Mise à jour :
   Deux nouvelles classes pour colorer le code pascal des fichiers .pas.
Une classe similaire à celle créée par Delphiprog (TDfmParser), TPasParser, qui descend d'une version remaniée de TParser.
   Des modifications ont effectivement été nécessaires pour que la classe devienne compatible avec le parsing des fichiers .pas
   Comme j'ai modifié un copier/coller de la classe TParser, j'en ai profité pour commenter tout le code ! Avis à ceux qui cherche à comprendre plus en détail le fonctionnement du Parser !

   Le ZIP ne contient maintenant plus que la version de Delphiprog du programme de coloration, mais largement commentée... Si toutefois vous avez des questions, laissez un commentaire ou envoyez-moi un mail !

   BONUS !! ;o)
   Inclus également dans le ZIP, un fichier d'aide .hlp sur la classe TParser, créée par Delphiprog. Grâce à lui, cette classe sort donc maintenant du registre "Non documentée" !!

------
Nouvelle mise à jour :
   Le passage d'une ProgressBar en paramètre (que je n'avais pas signalé avant...) est maintenant facultatif, pour rendre l'interface et le code du prog indépendants (suite à un nouveau bon conseil de delphiprog !! ;o) )
   J'ai remanié la classe TDfmParser. Le code gérant la colorisation utilise maintenant l'approche du Case Parser.Token Of et passe ainsi d'un code de 60 lignes à un code de 32 !!
   La dite classe utilise également la version "corrigée" du TParser, TModifParser, pour faciliter l'interprétation du code
   Par la même occasion, l'utilisation du Case permet de corriger le bug signalé avec la propriété DesignSize, qui est donc à présent entièrement colorée !

Source

  • Tout est dans le ZIP !
Tout est dans le ZIP !     

 Conclusion

Normalement tout fonctionne comme il faut... à part un cas de propriété qui n'est pas coloré entièrement. voir l'unité .pas !
[Une nouvelle version devrait rapidement venir corriger ce problème]
(*C'est maintenant fait !*)

Sinon, tout commentaire est accepté ! ;-)  

-------

Merci à Nono40 et à Delphiprog pour leur aide, toujours précieuse ! (et a special thanks pour le fichier d'aide !)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip PETITE SCENE EN OPENGL
Source avec Zip DÉCOUPAGE DE FICHIER WAV
Source avec Zip UTILISER UN NUMÉRO DE SÉRIE
Source avec Zip CONCATENATION DE FICHIERS WAV
Source avec Zip STOCKAGE DE MOT DE PASSE CRYPTÉ

 Sources de la même categorie

Source avec Zip Source avec une capture LOGICIEL DE DIAGNOSTIC AUTOMOBILE KWP2000 par Oniria
Source avec Zip Source avec une capture RÉGLE TRANSPARENTE POUR MESURER UN OBJET ECRAN par dubois77
Source avec Zip Source avec une capture LE BOOK DU PAUVRE par dubois77
Source avec Zip Source avec une capture CAHIER 90 PAGES par dubois77
Source avec Zip Source avec une capture TABLEAU DE BOUTONS DYNAMIQUES (AGENDA) par dubois77

Commentaires et avis

Commentaire de Delphiprog le 16/08/2003 00:50:07 administrateur CS

Super travail que tu as réalisé là !

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

Commentaire de Bestiol le 16/08/2003 00:54:12

Merci Delphiprog, ce genre de commentaire fait bien plaisir !

Commentaire de koko le 16/08/2003 10:05:19

bravo bravo !!!
mais pourquoi se limiter au .dfm ?

Commentaire de Delphiprog le 16/08/2003 12:02:59 administrateur CS

"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.

Commentaire de koko le 16/08/2003 12:12:32

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 !

Commentaire de Bestiol le 16/08/2003 15:12:47

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 !

Commentaire de koko le 16/08/2003 16:02:56

a oki ^^

Commentaire de Bestiol le 18/08/2003 02:06:50

voilà Koko maintenant les fichiers .pas sont gérés !

Bonne prog' !

Commentaire de koko le 18/08/2003 09:34:56

merci !!! vous faites de l'exellent travail !

Commentaire de koko le 18/08/2003 14:45:44

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)


Commentaire de Bestiol le 18/08/2003 14:49:22

merci beaucoup, ça fait bien plaisir ce genre de compliments !!

@+

Commentaire de Bestiol le 18/08/2003 15:05:51

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.

Commentaire de koko le 18/08/2003 16:25:36

pour la deuxieme solution, je dois ajouter le if apres le end du Case Parser.Token Of ??? ou bien autre part ?

Commentaire de Bestiol le 18/08/2003 17:47:35

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

Commentaire de Bestiol le 20/08/2003 02:15:54

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 !

Commentaire de DeVxX le 21/08/2003 18:56:55

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

Commentaire de Bestiol le 21/08/2003 21:00:36

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.

Commentaire de loadspeed le 23/08/2003 16:06:12

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.
++

Commentaire de Bestiol le 23/08/2003 18:13:47

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.

Commentaire de grandvizir le 29/10/2004 19:04:25

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.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales