unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* C preprocessor directives in asm-mode and ld-script-mode
@ 2005-11-12  4:45 Masatake YAMATO
  2005-11-12 21:22 ` Richard M. Stallman
  0 siblings, 1 reply; 5+ messages in thread
From: Masatake YAMATO @ 2005-11-12  4:45 UTC (permalink / raw)


Hi,

In order to fontificate C preprocessor directives well in asm-mode and
ld-script-mode, I'd like to make c-font-lock-keywords-1 in GNU Emacs
21.2 revive as `cpp-font-lock-keywords'.

`cpp-font-lock-keywords' may be handy to implement a new mode in 
which C preprocessor directives is used. Mode for Imakefile is one of 
such modes.

Masatake YAMATO

2005-11-12  Masatake YAMATO  <jet@gyve.org>

	* font-lock.el (cpp-font-lock-keywords): Font lock keywords for
	C preprocessor forward ported from GNU Emacs 21.2.

	* progmodes/asm-mode.el (asm-font-lock-keywords): Use 
	`cpp-font-lock-keywords'.

	* progmodes/ld-script.el (ld-script-font-lock-keywords): Ditto.

Index: lisp/progmodes/ld-script.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/progmodes/ld-script.el,v
retrieving revision 1.8
diff -u -r1.8 ld-script.el
--- lisp/progmodes/ld-script.el	1 Nov 2005 15:45:32 -0000	1.8
+++ lisp/progmodes/ld-script.el	12 Nov 2005 04:26:03 -0000
@@ -114,18 +114,19 @@
   "Builtin functions of GNU ld script.")
 
 (defvar ld-script-font-lock-keywords
-  `((,(regexp-opt ld-script-keywords 'words)
-     1 font-lock-keyword-face)
-    (,(regexp-opt ld-script-builtins 'words)
-     1 font-lock-builtin-face)
-    ("/DISCARD/" . font-lock-warning-face)
-    ("##\\|#[^#\n]+$"  . font-lock-preprocessor-face)
-    ("\\W\\(\\.\\)\\W" 1 ld-script-location-counter-face)
-    )
+  (append
+   `((,(regexp-opt ld-script-keywords 'words)
+      1 font-lock-keyword-face)
+     (,(regexp-opt ld-script-builtins 'words)
+      1 font-lock-builtin-face)
+     ("/DISCARD/" . font-lock-warning-face)
+     ("\\W\\(\\.\\)\\W" 1 ld-script-location-counter-face)
+     )
+   cpp-font-lock-keywords)
   "Default font-lock-keywords for `ld-script-mode'.")
 
 ;;;###autoload
-(add-to-list 'auto-mode-alist '("\\.ld[s]?\\(\\.in\\)?$" . ld-script-mode))
+(add-to-list 'auto-mode-alist '("\\.lds?\\>" . ld-script-mode))
 
 ;;;###autoload
 (define-derived-mode ld-script-mode nil "LD-Script"
Index: lisp/progmodes/asm-mode.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/progmodes/asm-mode.el,v
retrieving revision 1.33
diff -u -r1.33 asm-mode.el
--- lisp/progmodes/asm-mode.el	1 Aug 2005 08:37:49 -0000	1.33
+++ lisp/progmodes/asm-mode.el	12 Nov 2005 04:26:03 -0000
@@ -82,19 +82,21 @@
   "Keymap for Asm mode.")
 
 (defconst asm-font-lock-keywords
- '(("^\\(\\(\\sw\\|\\s_\\)+\\)\\>:?[ \t]*\\(\\sw+\\(\\.\\sw+\\)*\\)?"
-    (1 font-lock-function-name-face) (3 font-lock-keyword-face nil t))
-   ;; label started from ".".
-   ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>:"
-    1 font-lock-function-name-face)
-   ("^\\((\\sw+)\\)?\\s +\\(\\(\\.?\\sw\\|\\s_\\)+\\(\\.\\sw+\\)*\\)"
-    2 font-lock-keyword-face)
-   ;; directive started from ".".
-   ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>[^:]?"
-    1 font-lock-keyword-face)
-   ;; %register
-   ("%\\sw+" . font-lock-variable-name-face))
- "Additional expressions to highlight in Assembler mode.")
+  (append 
+   '(("^\\(\\(\\sw\\|\\s_\\)+\\)\\>:?[ \t]*\\(\\sw+\\(\\.\\sw+\\)*\\)?"
+      (1 font-lock-function-name-face) (3 font-lock-keyword-face nil t))
+     ;; label started from ".".
+     ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>:"
+      1 font-lock-function-name-face)
+     ("^\\((\\sw+)\\)?\\s +\\(\\(\\.?\\sw\\|\\s_\\)+\\(\\.\\sw+\\)*\\)"
+      2 font-lock-keyword-face)
+     ;; directive started from ".".
+     ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>[^:]?"
+      1 font-lock-keyword-face)
+     ;; %register
+     ("%\\sw+" . font-lock-variable-name-face))
+   cpp-font-lock-keywords)
+  "Additional expressions to highlight in Assembler mode.")
 
 ;;;###autoload
 (defun asm-mode ()
Index: lisp/font-lock.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/font-lock.el,v
retrieving revision 1.282
diff -u -r1.282 font-lock.el
--- lisp/font-lock.el	5 Nov 2005 07:29:45 -0000	1.282
+++ lisp/font-lock.el	12 Nov 2005 04:26:03 -0000
@@ -1956,6 +1956,58 @@
 	      (goto-char (or (scan-sexps (point) 1) (point-max))))
 	    (goto-char (match-end 2)))
 	(error t)))))
+
+;; C preprocessor(cpp) is used outside of C, C++ and Objective-C source file.
+;; e.g. assembler code and GNU linker script in Linux kernel.
+;; `cpp-font-lock-keywords' is handy for modes for the files.
+(defconst cpp-font-lock-keywords
+  (let* ((cpp-directives
+	  (eval-when-compile
+	    (regexp-opt
+	     '("define"  "elif" "else" "endif" "error" "file" "if" "ifdef"
+	       "ifndef" "include" "line" "pragma" "undef"))))
+	 (cpp-directives-depth
+	  (regexp-opt-depth cpp-directives)))
+    (list
+     ;;
+     ;; Fontify error directives.
+     '("^#[ \t]*error[ \t]+\\(.+\\)" 1 font-lock-warning-face prepend)
+     ;;
+     ;; Fontify filenames in #include <...> preprocessor directives as strings.
+     '("^#[ \t]*\\(?:import\\|include\\)[ \t]*\\(<[^>\"\n]*>?\\)"
+       1 font-lock-string-face prepend)
+     ;;
+     ;; Fontify function macro names.
+     '("^#[ \t]*define[ \t]+\\([[:alpha:]_][[:alnum:]_$]*\\)(" 
+       (1 font-lock-function-name-face prepend)
+       ;;
+       ;; Macro arguments.
+       ((lambda (limit)
+	  (re-search-forward
+	   "\\(?:\\([[:alpha:]_][[:alnum:]_]*\\)[,]?\\)" 
+	   (or (save-excursion (re-search-forward ")" limit t)) 
+	       limit)
+	   t)) 
+	nil nil (1 font-lock-variable-name-face prepend)))
+     ;;
+     ;; Fontify symbol names in #elif or #if ... defined preprocessor directives.
+     '("^#[ \t]*\\(?:elif\\|if\\)\\>"
+       ("\\<\\(defined\\)\\>[ \t]*(?\\([[:alpha:]_][[:alnum:]_]*\\)?" nil nil
+	(1 font-lock-builtin-face prepend) (2 font-lock-variable-name-face prepend t)))
+     ;;
+     ;; Fontify otherwise as symbol names, and the preprocessor directive names.
+     (list
+      (concat "^\\(#[ \t]*\\(?:" cpp-directives
+	      "\\)\\)\\>[ \t!]*\\([[:alpha:]_][[:alnum:]_]*\\)?")
+      '(1 font-lock-preprocessor-face prepend)
+      (list (+ 2 cpp-directives-depth)
+	    'font-lock-variable-name-face nil t))))
+    "Font lock keyords for C preprocessor directives.
+`c-mode', `c++-mode' and `objc-mode' have their own 
+Font lock keyords for C preprocessor directives. This definition is for the
+other modes in which C preprocessor directives are used. e.g. `asm-mode' and
+`ld-script-mode'.")
+
 \f
 ;; Lisp.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: C preprocessor directives in asm-mode and ld-script-mode
  2005-11-12  4:45 C preprocessor directives in asm-mode and ld-script-mode Masatake YAMATO
@ 2005-11-12 21:22 ` Richard M. Stallman
  2005-11-14 15:45   ` Masatake YAMATO
  0 siblings, 1 reply; 5+ messages in thread
From: Richard M. Stallman @ 2005-11-12 21:22 UTC (permalink / raw)
  Cc: emacs-devel

    In order to fontificate C preprocessor directives well in asm-mode and
    ld-script-mode, I'd like to make c-font-lock-keywords-1 in GNU Emacs
    21.2 revive as `cpp-font-lock-keywords'.

Why was that deleted in the first place?

If we do bring it back, it seems strange not to use it in C mode.
Is there any reason not to use it in C mode as well?
Can you see how to do that?


-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: C preprocessor directives in asm-mode and ld-script-mode
  2005-11-12 21:22 ` Richard M. Stallman
@ 2005-11-14 15:45   ` Masatake YAMATO
  2005-12-29 17:11     ` Richard M. Stallman
  0 siblings, 1 reply; 5+ messages in thread
From: Masatake YAMATO @ 2005-11-14 15:45 UTC (permalink / raw)
  Cc: bug-cc-mode, emacs-devel

>     In order to fontificate C preprocessor directives well in asm-mode and
>     ld-script-mode, I'd like to make c-font-lock-keywords-1 in GNU Emacs
>     21.2 revive as `cpp-font-lock-keywords'.
> 
> Why was that deleted in the first place?
> 
> If we do bring it back, it seems strange not to use it in C mode.
> Is there any reason not to use it in C mode as well?
> Can you see how to do that?

`c-font-lock-keywords-1' of cc-mode is accurate, but tightly integrated
to cc-mode itself. I cannot find an easy way to reuse the 
`c-font-lock-keywords-1' at the outside of cc-mode.

Masatake YAMATO

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: C preprocessor directives in asm-mode and ld-script-mode
  2005-11-14 15:45   ` Masatake YAMATO
@ 2005-12-29 17:11     ` Richard M. Stallman
  2006-01-05 19:00       ` Masatake YAMATO
  0 siblings, 1 reply; 5+ messages in thread
From: Richard M. Stallman @ 2005-12-29 17:11 UTC (permalink / raw)
  Cc: bug-cc-mode, emacs-devel

Please forgive my delay in responding.

    >     In order to fontificate C preprocessor directives well in asm-mode and
    >     ld-script-mode, I'd like to make c-font-lock-keywords-1 in GNU Emacs
    >     21.2 revive as `cpp-font-lock-keywords'.

I guess we should do this.  Could you send the patch
and change log entries?


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: C preprocessor directives in asm-mode and ld-script-mode
  2005-12-29 17:11     ` Richard M. Stallman
@ 2006-01-05 19:00       ` Masatake YAMATO
  0 siblings, 0 replies; 5+ messages in thread
From: Masatake YAMATO @ 2006-01-05 19:00 UTC (permalink / raw)
  Cc: bug-cc-mode, emacs-devel

> Please forgive my delay in responding.
> 
>     >     In order to fontificate C preprocessor directives well in asm-mode and
>     >     ld-script-mode, I'd like to make c-font-lock-keywords-1 in GNU Emacs
>     >     21.2 revive as `cpp-font-lock-keywords'.
> 
> I guess we should do this.  Could you send the patch
> and change log entries?

Sorry to be late. A bit busy now.

I have changed nothing since my last post.
Here, I send my patch again.


2006-01-06  Masatake YAMATO  <jet@gyve.org>

	* font-lock.el (cpp-font-lock-keywords): Font lock keywords for
	C preprocessor forward ported from GNU Emacs 21.2.

	* progmodes/asm-mode.el (asm-font-lock-keywords): Use 
	`cpp-font-lock-keywords'.

	* progmodes/ld-script.el (ld-script-font-lock-keywords): Ditto.

Index: lisp/progmodes/ld-script.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/progmodes/ld-script.el,v
retrieving revision 1.8
diff -u -r1.8 ld-script.el
--- lisp/progmodes/ld-script.el	1 Nov 2005 15:45:32 -0000	1.8
+++ lisp/progmodes/ld-script.el	5 Jan 2006 18:56:38 -0000
@@ -114,14 +114,15 @@
   "Builtin functions of GNU ld script.")
 
 (defvar ld-script-font-lock-keywords
-  `((,(regexp-opt ld-script-keywords 'words)
-     1 font-lock-keyword-face)
-    (,(regexp-opt ld-script-builtins 'words)
-     1 font-lock-builtin-face)
-    ("/DISCARD/" . font-lock-warning-face)
-    ("##\\|#[^#\n]+$"  . font-lock-preprocessor-face)
-    ("\\W\\(\\.\\)\\W" 1 ld-script-location-counter-face)
-    )
+  (append
+   `((,(regexp-opt ld-script-keywords 'words)
+      1 font-lock-keyword-face)
+     (,(regexp-opt ld-script-builtins 'words)
+      1 font-lock-builtin-face)
+     ("/DISCARD/" . font-lock-warning-face)
+     ("\\W\\(\\.\\)\\W" 1 ld-script-location-counter-face)
+     )
+   cpp-font-lock-keywords)
   "Default font-lock-keywords for `ld-script-mode'.")
 
 ;;;###autoload
Index: lisp/progmodes/asm-mode.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/progmodes/asm-mode.el,v
retrieving revision 1.34
diff -u -r1.34 asm-mode.el
--- lisp/progmodes/asm-mode.el	17 Nov 2005 07:36:46 -0000	1.34
+++ lisp/progmodes/asm-mode.el	5 Jan 2006 18:56:38 -0000
@@ -83,19 +83,21 @@
   "Keymap for Asm mode.")
 
 (defconst asm-font-lock-keywords
- '(("^\\(\\(\\sw\\|\\s_\\)+\\)\\>:?[ \t]*\\(\\sw+\\(\\.\\sw+\\)*\\)?"
-    (1 font-lock-function-name-face) (3 font-lock-keyword-face nil t))
-   ;; label started from ".".
-   ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>:"
-    1 font-lock-function-name-face)
-   ("^\\((\\sw+)\\)?\\s +\\(\\(\\.?\\sw\\|\\s_\\)+\\(\\.\\sw+\\)*\\)"
-    2 font-lock-keyword-face)
-   ;; directive started from ".".
-   ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>[^:]?"
-    1 font-lock-keyword-face)
-   ;; %register
-   ("%\\sw+" . font-lock-variable-name-face))
- "Additional expressions to highlight in Assembler mode.")
+  (append 
+   '(("^\\(\\(\\sw\\|\\s_\\)+\\)\\>:?[ \t]*\\(\\sw+\\(\\.\\sw+\\)*\\)?"
+      (1 font-lock-function-name-face) (3 font-lock-keyword-face nil t))
+     ;; label started from ".".
+     ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>:"
+      1 font-lock-function-name-face)
+     ("^\\((\\sw+)\\)?\\s +\\(\\(\\.?\\sw\\|\\s_\\)+\\(\\.\\sw+\\)*\\)"
+      2 font-lock-keyword-face)
+     ;; directive started from ".".
+     ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>[^:]?"
+      1 font-lock-keyword-face)
+     ;; %register
+     ("%\\sw+" . font-lock-variable-name-face))
+   cpp-font-lock-keywords)
+  "Additional expressions to highlight in Assembler mode.")
 
 ;;;###autoload
 (defun asm-mode ()
Index: lisp/font-lock.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/font-lock.el,v
retrieving revision 1.290
diff -u -r1.290 font-lock.el
--- lisp/font-lock.el	3 Jan 2006 17:00:35 -0000	1.290
+++ lisp/font-lock.el	5 Jan 2006 18:56:38 -0000
@@ -1963,6 +1963,58 @@
 	      (goto-char (or (scan-sexps (point) 1) (point-max))))
 	    (goto-char (match-end 2)))
 	(error t)))))
+
+;; C preprocessor(cpp) is used outside of C, C++ and Objective-C source file.
+;; e.g. assembler code and GNU linker script in Linux kernel.
+;; `cpp-font-lock-keywords' is handy for modes for the files.
+(defconst cpp-font-lock-keywords
+  (let* ((cpp-directives
+	  (eval-when-compile
+	    (regexp-opt
+	     '("define"  "elif" "else" "endif" "error" "file" "if" "ifdef"
+	       "ifndef" "include" "line" "pragma" "undef"))))
+	 (cpp-directives-depth
+	  (regexp-opt-depth cpp-directives)))
+    (list
+     ;;
+     ;; Fontify error directives.
+     '("^#[ \t]*error[ \t]+\\(.+\\)" 1 font-lock-warning-face prepend)
+     ;;
+     ;; Fontify filenames in #include <...> preprocessor directives as strings.
+     '("^#[ \t]*\\(?:import\\|include\\)[ \t]*\\(<[^>\"\n]*>?\\)"
+       1 font-lock-string-face prepend)
+     ;;
+     ;; Fontify function macro names.
+     '("^#[ \t]*define[ \t]+\\([[:alpha:]_][[:alnum:]_$]*\\)(" 
+       (1 font-lock-function-name-face prepend)
+       ;;
+       ;; Macro arguments.
+       ((lambda (limit)
+	  (re-search-forward
+	   "\\(?:\\([[:alpha:]_][[:alnum:]_]*\\)[,]?\\)" 
+	   (or (save-excursion (re-search-forward ")" limit t)) 
+	       limit)
+	   t)) 
+	nil nil (1 font-lock-variable-name-face prepend)))
+     ;;
+     ;; Fontify symbol names in #elif or #if ... defined preprocessor directives.
+     '("^#[ \t]*\\(?:elif\\|if\\)\\>"
+       ("\\<\\(defined\\)\\>[ \t]*(?\\([[:alpha:]_][[:alnum:]_]*\\)?" nil nil
+	(1 font-lock-builtin-face prepend) (2 font-lock-variable-name-face prepend t)))
+     ;;
+     ;; Fontify otherwise as symbol names, and the preprocessor directive names.
+     (list
+      (concat "^\\(#[ \t]*\\(?:" cpp-directives
+	      "\\)\\)\\>[ \t!]*\\([[:alpha:]_][[:alnum:]_]*\\)?")
+      '(1 font-lock-preprocessor-face prepend)
+      (list (+ 2 cpp-directives-depth)
+	    'font-lock-variable-name-face nil t))))
+    "Font lock keyords for C preprocessor directives.
+`c-mode', `c++-mode' and `objc-mode' have their own 
+Font lock keyords for C preprocessor directives. This definition is for the
+other modes in which C preprocessor directives are used. e.g. `asm-mode' and
+`ld-script-mode'.")
+
 \f
 ;; Lisp.
 


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-01-05 19:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-12  4:45 C preprocessor directives in asm-mode and ld-script-mode Masatake YAMATO
2005-11-12 21:22 ` Richard M. Stallman
2005-11-14 15:45   ` Masatake YAMATO
2005-12-29 17:11     ` Richard M. Stallman
2006-01-05 19:00       ` Masatake YAMATO

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).