🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: fr.comp.applications.emacs
6 messages
6 total messages Started by Nicolas Matringe Wed, 24 Apr 2013 11:31
Coloration en fonction de la position (en plus de la coloration syntaxique)
#188
Author: Nicolas Matringe
Date: Wed, 24 Apr 2013 11:31
16 lines
2068 bytes
Bonjour
Je suis en train de créer un mode pour éditer un assembleur propriétaire (et ça se passe très bien jusque là) et j'y ajoute un mode pour colorier le fichier de log de la compilation qui comporte 3 colonnes : l'adresse, l'opcode et l'assembleur correspondant. Je voudrais afficher adresse et opcode dans des couleurs différentes et indépendantes de la coloration syntaxique de l'assembleur mais je ne sais pas comment faire.
J'ai facilement créé une expression régulière pour la première colonne "^.\{4\}" mais je n'arrive pas à trouver comment créer celle de la seconde colonne. J'ai essayé "\(?:^.\{4\}\).\{8\}" mais le 1 groupe "matche" aussi.
Peut-être que je ne prends pas le problème dans le bon sens et qu'il ne faut pas passer par une regexp pour colorier par colonne ?

Merci d'avance
Nicolas
Re: Coloration en fonction de la position (en plus de la coloration syntaxique)
#190
Author: Pascal J. Bourguignon
Date: Thu, 25 Apr 2013 17:53
37 lines
3382 bytes
Nicolas Matringe <nmatringe@gmail.com> writes:

> Bonjour
> Je suis en train de cr�er un mode pour �diter un assembleur
> propri�taire (et �a se passe tr�s bien jusque l�) et j'y ajoute un
> mode pour colorier le fichier de log de la compilation qui comporte 3
> colonnes : l'adresse, l'opcode et l'assembleur correspondant. Je
> voudrais afficher adresse et opcode dans des couleurs diff�rentes et
> ind�pendantes de la coloration syntaxique de l'assembleur mais je ne
> sais pas comment faire.
> J'ai facilement cr�� une expression r�guli�re pour la premi�re colonne
> "^.\{4\}" mais je n'arrive pas � trouver comment cr�er celle de la
> seconde colonne. J'ai essay� "\(?:^.\{4\}\).\{8\}" mais le 1 groupe
> "matche" aussi.
> Peut-�tre que je ne prends pas le probl�me dans le bon sens et qu'il ne faut pas passer par une regexp pour colorier par colonne ?

Jette un oeul sur: 
https://gitorious.org/com-informatimago/emacs/blobs/master/pjb-asm7090.el

Comme tu vois, le truc c'est qu'on peut utiliser une fonction au lieu
d'une regexp dans font-lock-add-keywords (cf. ligne 208).

Cette fonction peut effectuer toute l'analyse syntaxique ou autre
qu'elle veut.  Le seul truc, c'est qu'en sortant, les match-data doivent
�ter remplis avec les groupes attendus par les diff�rentes faces
sp�cifi�es.

`match-data' et `set-match-data' sont sp�cifi�es avec la structure de
donn�e retourn�e et attendue, donc la fonction peut directement la
g�n�rer et la passer � set-match-data, ou, elle peut faire comme la
mienne (dans le cas d'un langage assembleur ligne par ligne, c'est plus
simple), appeler re-search-forward avec une regexp adapt�e � chaque cas.


-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Re: Coloration en fonction de la position (en plus de la coloration syntaxique)
#191
Author: Nicolas Matringe
Date: Thu, 25 Apr 2013 22:26
68 lines
4200 bytes
Le jeudi 25 avril 2013 19:53:43 UTC+2, Pascal J. Bourguignon a écrit :
> Nicolas Matringe <nmatringe@gmail.com> writes:
> > [...] colorier le fichier de log de la compilation qui comporte 3
> > colonnes : l'adresse, l'opcode et l'assembleur correspondant. Je
> > voudrais afficher adresse et opcode dans des couleurs différentes
[...]
> > J'ai facilement créé une expression régulière pour la première colonne
> > "^.\{4\}" mais je n'arrive pas à trouver comment créer celle de la
> > seconde colonne.[...]
> > Peut-être que je ne prends pas le problème dans le bon sens et qu'il ne
> > faut pas passer par une regexp pour colorier par colonne ?
> 
> Jette un oeul sur: 
> https://gitorious.org/com-informatimago/emacs/blobs/master/pjb-asm7090.el

Ouh la...


> Comme tu vois, le truc c'est qu'on peut utiliser une fonction au lieu
> d'une regexp dans font-lock-add-keywords (cf. ligne 208).

Alors, attends... Je n'utilise pas font-lock-add-keywords, j'ai copié sur d'autres modes :
(setq mi6-font-lock-keywords
      `(
        (,mi6-constants-regexp . font-lock-constant-face)
        (,mi6-instructions-regexp . font-lock-keyword-face)
        (,mi6-registers-regexp . font-lock-variable-name-face)
        (,mi6-hw-registers-regexp . font-lock-function-name-face)
        (,mi6-conditions-regexp . font-lock-builtin-face)
        )
      )

puis dans la définition du mode:
  (setq font-lock-defaults '((mi6-font-lock-keywords)))

Donc si je te comprends bien, je peux mettre une fonction dans ma variable mi6-font-lock-keywords ?
Ma liste ressemblerait alors à... Ah mince je sais pas, en fait.


> Cette fonction peut effectuer toute l'analyse syntaxique ou autre
> qu'elle veut.  Le seul truc, c'est qu'en sortant, les match-data doivent
> êter remplis avec les groupes attendus par les différentes faces
> spécifiées.

Je ne comprends pas très bien ce que ça veut dire... (pardonne mon peu de pratique du lisp)


> `match-data' et `set-match-data' sont spécifiées avec la structure de
> donnée retournée et attendue, donc la fonction peut directement la
> générer et la passer à set-match-data, ou, elle peut faire comme la
> mienne (dans le cas d'un langage assembleur ligne par ligne, c'est plus
> simple), appeler re-search-forward avec une regexp adaptée à chaque cas.

Je ne comprends pas tout mais j'entrevois... L'assembleur pour lequel je crée ce mode a une structure très libre, je ne vois pas comment je pourrais utiliser re-search-forward, ne sachant pas a priori quel objet (registre, variable, instruction...) va se trouver à quelle position.
Ça a l'air sacrément plus compliqué que je ne l'aurais cru au départ.

Merci en tout cas
Nicolas
Re: Coloration en fonction de la position (en plus de la coloration syntaxique)
#192
Author: Nicolas Matringe
Date: Fri, 26 Apr 2013 11:01
19 lines
2292 bytes
Le vendredi 26 avril 2013 00:26:25 UTC+2, Nicolas Matringe a écrit :
> [...]j'ai copié sur d'autres modes :
> (setq mi6-font-lock-keywords
>       `(
>         (,mi6-constants-regexp . font-lock-constant-face)
>         (,mi6-instructions-regexp . font-lock-keyword-face)
>         (,mi6-registers-regexp . font-lock-variable-name-face)
>         (,mi6-hw-registers-regexp . font-lock-function-name-face)
>         (,mi6-conditions-regexp . font-lock-builtin-face)
>         )
>       )

J'ai résolu le problème après avoir relu plus attentivement la doc, on peut indiquer quelle sous-expression on veut colorier :
                (,mi6-log-opcode-regexp . (2 font-lock-type-face)))
ne va appliquer font-lock-type-face qu'à la 2nde sous-expression de mi6-log-opcode-regexp. Ça m'ouvre des perspectives...

Nicolas
Re: Coloration en fonction de la position (en plus de la coloration syntaxique)
#194
Author: duthen.cnv
Date: Tue, 30 Apr 2013 14:25
20 lines
2480 bytes
Le vendredi 26 avril 2013 13:01:45 UTC+2, Nicolas Matringe a écrit :
> J'ai résolu le problème après avoir relu plus attentivement la doc, on peut indiquer quelle sous-expression on veut colorier :
> 
>                 (,mi6-log-opcode-regexp . (2 font-lock-type-face)))
> 
> ne va appliquer font-lock-type-face qu'à la 2nde sous-expression de mi6-log-opcode-regexp. Ça m'ouvre des perspectives...

C'est à ça que devait faire référence Pascal Bourguignon:

match-data décrit précisément la structure matchée, c'est-à-dire la liste des sous-expressions matchées associées à leur numéro.

Plus précisément, match-data contient une liste avec:
l'endroit dans le fichier du début de la première sous-expression
l'endroit dans le fichier de la fin de la première sous-expression
l'endroit dans le fichier du début de la deuxième sous-expression
l'endroit dans le fichier de la fin de la deuxième sous-expression
etc.
Re: Coloration en fonction de la position (en plus de la coloration syntaxique)
#195
Author: Nicolas Matringe
Date: Tue, 30 Apr 2013 23:21
15 lines
2647 bytes
Le 30/04/2013 16:25, duthen.cnv@gmail.com a �crit :

> match-data d�crit pr�cis�ment la structure match�e, c'est-�-dire la
> liste des sous-expressions match�es associ�es � leur num�ro.
> Plus pr�cis�ment, match-data contient une liste avec: l'endroit dans
> le fichier du d�but de la premi�re sous-expression l'endroit dans le
> fichier de la fin de la premi�re sous-expression l'endroit dans le
> fichier du d�but de la deuxi�me sous-expression l'endroit dans le
> fichier de la fin de la deuxi�me sous-expression etc.

Oui certainement mais avec sa fonction j'ai �t� un peu perdu.
Finalement je n'ai plus qu'une expression r�guli�re avec 2 
sous-expressions color�es diff�remment, c'est tout simple.

Nicolas
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads