aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2001-10-12 17:29:30 +0000
committerStefan Monnier2001-10-12 17:29:30 +0000
commit61b8c98e98321c2519983b6b27db52dc060e68d0 (patch)
tree4914c4e1ae4dc9755f3053534f271432ead5c090
parentb04125748c77405624e542d9acc7267173e3b7fb (diff)
downloademacs-61b8c98e98321c2519983b6b27db52dc060e68d0.tar.gz
emacs-61b8c98e98321c2519983b6b27db52dc060e68d0.zip
(awk-mode-syntax-table): / has string syntax.
(awk-font-lock-syntactic-keywords): New var. (awk-mode): Use it.
-rw-r--r--lisp/progmodes/awk-mode.el63
1 files changed, 40 insertions, 23 deletions
diff --git a/lisp/progmodes/awk-mode.el b/lisp/progmodes/awk-mode.el
index 8079d74301e..3d06eaa3582 100644
--- a/lisp/progmodes/awk-mode.el
+++ b/lisp/progmodes/awk-mode.el
@@ -29,28 +29,29 @@
29 29
30;;; Code: 30;;; Code:
31 31
32(defvar awk-mode-syntax-table nil 32(defvar awk-mode-syntax-table
33 "Syntax table in use in Awk-mode buffers.") 33 (let ((st (make-syntax-table)))
34 34 (modify-syntax-entry ?\\ "\\" st)
35(if awk-mode-syntax-table 35 (modify-syntax-entry ?\n "> " st)
36 () 36 (modify-syntax-entry ?\f "> " st)
37 (setq awk-mode-syntax-table (make-syntax-table)) 37 (modify-syntax-entry ?\# "< " st)
38 (modify-syntax-entry ?\\ "\\" awk-mode-syntax-table) 38 ;; / can delimit regexes or be a division operator. We assume that it is
39 (modify-syntax-entry ?\n "> " awk-mode-syntax-table) 39 ;; more commonly used for regexes and fix the remaining cases with
40 (modify-syntax-entry ?\f "> " awk-mode-syntax-table) 40 ;; `font-lock-syntactic-keywords'.
41 (modify-syntax-entry ?\# "< " awk-mode-syntax-table) 41 (modify-syntax-entry ?/ "\"" st)
42 (modify-syntax-entry ?/ "." awk-mode-syntax-table) 42 (modify-syntax-entry ?* "." st)
43 (modify-syntax-entry ?* "." awk-mode-syntax-table) 43 (modify-syntax-entry ?+ "." st)
44 (modify-syntax-entry ?+ "." awk-mode-syntax-table) 44 (modify-syntax-entry ?- "." st)
45 (modify-syntax-entry ?- "." awk-mode-syntax-table) 45 (modify-syntax-entry ?= "." st)
46 (modify-syntax-entry ?= "." awk-mode-syntax-table) 46 (modify-syntax-entry ?% "." st)
47 (modify-syntax-entry ?% "." awk-mode-syntax-table) 47 (modify-syntax-entry ?< "." st)
48 (modify-syntax-entry ?< "." awk-mode-syntax-table) 48 (modify-syntax-entry ?> "." st)
49 (modify-syntax-entry ?> "." awk-mode-syntax-table) 49 (modify-syntax-entry ?& "." st)
50 (modify-syntax-entry ?& "." awk-mode-syntax-table) 50 (modify-syntax-entry ?| "." st)
51 (modify-syntax-entry ?| "." awk-mode-syntax-table) 51 (modify-syntax-entry ?_ "_" st)
52 (modify-syntax-entry ?_ "_" awk-mode-syntax-table) 52 (modify-syntax-entry ?\' "\"" st)
53 (modify-syntax-entry ?\' "\"" awk-mode-syntax-table)) 53 st)
54 "Syntax table in use in `awk-mode' buffers.")
54 55
55;; Regexps written with help from Peter Galbraith <galbraith@mixing.qc.dfo.ca>. 56;; Regexps written with help from Peter Galbraith <galbraith@mixing.qc.dfo.ca>.
56(defconst awk-font-lock-keywords 57(defconst awk-font-lock-keywords
@@ -87,6 +88,18 @@
87 )) 88 ))
88 "Default expressions to highlight in AWK mode.") 89 "Default expressions to highlight in AWK mode.")
89 90
91(require 'syntax)
92
93(defconst awk-font-lock-syntactic-keywords
94 ;; `/' is mostly used for /.../ regular expressions, but is also
95 ;; used as a division operator. Distinguishing between the two is
96 ;; a pain in the youknowwhat.
97 ;; '(("\\(^\\|[<=>-+*%/!^,~(?:|&]\\)\\s-*\\(/\\)\\([^/\n\\]\\|\\\\.\\)*\\(/\\)"
98 ;; (2 "\"") (4 "\"")))
99 '(("[^<=>-+*%/!^,~(?:|& \t\n\f]\\s-*\\(/\\)"
100 (1 (unless (nth 3 (syntax-ppss (match-beginning 1))) "."))))
101 "Syntactic keywords for `awk-mode'.")
102
90;;;###autoload 103;;;###autoload
91(define-derived-mode awk-mode c-mode "AWK" 104(define-derived-mode awk-mode c-mode "AWK"
92 "Major mode for editing AWK code. 105 "Major mode for editing AWK code.
@@ -100,7 +113,11 @@ Turning on AWK mode runs `awk-mode-hook'."
100 (set (make-local-variable 'comment-start) "# ") 113 (set (make-local-variable 'comment-start) "# ")
101 (set (make-local-variable 'comment-end) "") 114 (set (make-local-variable 'comment-end) "")
102 (set (make-local-variable 'comment-start-skip) "#+ *") 115 (set (make-local-variable 'comment-start-skip) "#+ *")
103 (setq font-lock-defaults '(awk-font-lock-keywords nil nil ((?_ . "w"))))) 116 (setq font-lock-defaults '(awk-font-lock-keywords
117 nil nil ((?_ . "w")) nil
118 (parse-sexp-lookup-properties . t)
119 (font-lock-syntactic-keywords
120 . awk-font-lock-syntactic-keywords))))
104 121
105(provide 'awk-mode) 122(provide 'awk-mode)
106 123