IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

regexp pour coloration syntaxique block preprocesseur emacs


Sujet :

Fortran

  1. #1
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut regexp pour coloration syntaxique block preprocesseur emacs
    Bonjour à tous,

    J'ai une petite question… plus sur regexp que php… je pense que c'est ici que ce sera le plus approprié pour la poser. Je code en Fortran… ne partez pas encore !… et j'utilise emacs, le mode de coloration syntaxique f90-mode d'emacs ne supporte pas actuellement la coloration des directives préprocesseurs. J'ai donc bidouillé un petit quelque chose dans mon .emacs pour pouvoir colorer celles-ci. Avec ce que j'ai rajouté dans un morceau de code préprocesseur comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #motclo toto()         \
          première ligne   \
          neme ligne        \
          dernière ligne
    j'arrive à colorer la première ligne, les lignes suivantes qui se finissent par \, mais le problème que j'ai est sur la regexp à utiliser pour colorer la dernière ligne. Il faudrait que je puisse tester le dernier caractère de la ligne précédente pour voir si c'est un \ mais je ne vois, sais pas comment faire. Je vous donne déjà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ;; coloration des commandes preprocesseur
    (add-hook 'f90-mode-hook
              '(lambda () (font-lock-add-keywords
                           nil
                           '(("\\(^#.*\\)"
                              1 font-lock-type-face prepend)))))
     
    (add-hook 'f90-mode-hook
              '(lambda () (font-lock-add-keywords
                           nil
                           '(("\\(.*\\\\\n\\)"
                              1 font-lock-type-face append)))))
    Il y a beaucoup de backslash mais c'est à cause de la syntaxe pour emacs. J'ai voulu tester avec des trucs du genre ^\\\\\n.* mais pas moyen. Peut être que je m'y prend mal où alors ce n'est tout simplement pas possible simplement avec une regexp et il faut faire quelque chose de plus subtil avec des fonctions… enfin si vous avez une idée je suis preneur.

    Bonne journée

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284

  3. #3
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    à creuser en effet… merci pour le tuyau … il est l'heure de pieuter un peu pour moi maintenant.

  4. #4
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    …à l'aide de la direction donnée par jabbounet j'ai déniché cette petite page sur le emacswiki.org : http://emacswiki.org/emacs/MultilineFontLock, grâce à laquelle j'ai pu faire un début de coloration pour les macros préprocesseur… il faut maintenant y mettre les bons mots clés define, ifdef… mais l'idée est là. Pour l'instant je peux colorer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #begin une macro sur une ligne
     
    #begin une macro sur \
    plusieurs lignes \
    fin
    et pour faire ça voici le code de départ qu'il faudra inclure au mode fortran existant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
     (defun my-mode () "my-mode" (interactive)
       (kill-all-local-variables)
       (make-local-variable 'font-lock-defaults)
       (setq font-lock-defaults  '(my-mode-font-lock-keywords t))
       (make-local-variable 'font-lock-extend-region-functions)
       (add-hook 'font-lock-extend-region-functions
    	     'my-font-lock-extend-region))
     
     
    (defun my-font-lock-extend-region ()
       (save-excursion
         (goto-char font-lock-beg)
    	 ;; search for beginning of a macro
         (let ((found-point (re-search-backward "^#begin" nil t)))
           (if found-point
    		   (progn
    			 (goto-char font-lock-end)
    			 (if (re-search-forward "[^\\]$" nil t)
    				 (progn
    				   (end-of-line)				   
    				   (setq font-lock-end (point))))
    	    (setq font-lock-beg found-point))))))
     
     (defvar my-mode-font-lock-keywords nil
       "Keywords/Regexp for fontlocking of my-mode")
     
     (setq my-mode-font-lock-keywords
    	  (list
           '(my-font-lock-matcher
    		 ;; number_identifying_region type_of_enlighting
    		 (0 'font-lock-type-face)
    		 )))
     
     ;;  Original idea from font-latex-match-math-env command in font-latex.el.
     (defun my-font-lock-matcher (limit)
       "
    #begin \
     macro continues \
     and again \
     the last line enlighted
     this one no
     "
      ;; search for the begin of the first region
      (when (re-search-forward "^#begin" limit t)
        (let ((beg (match-beginning 0)) end ; 1st Region
    		  )
    	  ;; search for end of region 
    	  ;; return to the beginning of the first line of
    	  ;; the macro in order to check if it's a one line macro
    	  (beginning-of-line)
              ;; end of region is defined by the first line not ended by a backslash
    	  (if (re-search-forward "[^\\]$" limit t)
    		  (progn
    			(setq end (match-end 0 ))
    			))
    	  (end-of-line)
    	  (setq end (point))
    	  ;; save the regions
    	  (store-match-data (list beg end))
          t)))
    à suivre…

  5. #5
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par rogue-spectre Voir le message
    et pour faire ça voici le code de départ qu'il faudra inclure au mode fortran existant

    à suivre…
    n'est-il pas possible de le combiner avec font-lock-add-keyword?

    http://www.emacswiki.org/emacs/FontLockKeywords

Discussions similaires

  1. regexp pour coloration syntaxique block preprocesseur emacs
    Par rogue-spectre dans le forum Fortran
    Réponses: 1
    Dernier message: 10/07/2012, 20h37
  2. Réponses: 2
    Dernier message: 26/03/2012, 16h22
  3. Réponses: 15
    Dernier message: 21/04/2011, 22h17
  4. Script pour coloration syntaxique de code html
    Par piotrr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 25/03/2010, 22h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo