diff options
| author | Stefan Monnier | 2001-10-12 17:29:30 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2001-10-12 17:29:30 +0000 |
| commit | 61b8c98e98321c2519983b6b27db52dc060e68d0 (patch) | |
| tree | 4914c4e1ae4dc9755f3053534f271432ead5c090 | |
| parent | b04125748c77405624e542d9acc7267173e3b7fb (diff) | |
| download | emacs-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.el | 63 |
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 | ||