From 898169a2d88c3538cdfd41feb0b16267165065bd Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Tue, 13 Dec 2011 21:13:51 +0000 Subject: [PATCH] Add the switch statement to AWK Mode. --- lisp/ChangeLog | 10 ++++++++++ lisp/progmodes/cc-awk.el | 6 +++--- lisp/progmodes/cc-langs.el | 10 +++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f338462b2be..cf042ec6c82 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,15 @@ 2011-12-13 Alan Mackenzie + Add the switch statement to AWK Mode. + + * progmodes/cc-awk (awk-font-lock-keywords): Add "switch", "case", + "default" to the keywords regexp. + + * progmodes/cc-langs (c-label-kwds): Let AWK take the same + expression as the rest. + (c-nonlabel-token-key): Allow string literals for AWK. Refactor + for the other modes. + Large brace-block initialisation makes CC Mode slow: Fix. Tidy up and accelerate c-in-literal, etc. by using the c-parse-state diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el index f44b34ac351..ef67a18d807 100644 --- a/lisp/progmodes/cc-awk.el +++ b/lisp/progmodes/cc-awk.el @@ -894,9 +894,9 @@ std\\(err\\|in\\|out\\)\\|user\\)\\)\\>\ ;; Keywords. (concat "\\<" (regexp-opt - '("BEGIN" "END" "break" "continue" "delete" "do" "else" - "exit" "for" "getline" "if" "in" "next" "nextfile" - "return" "while") + '("BEGIN" "END" "break" "case" "continue" "default" "delete" + "do" "else" "exit" "for" "getline" "if" "in" "next" + "nextfile" "return" "switch" "while") t) "\\>") ;; Builtins. diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 0bfca84cd96..96f0887eec0 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -2242,8 +2242,7 @@ This construct is \" :\"." (c-lang-defconst c-label-kwds "Keywords introducing colon terminated labels in blocks." - t '("case" "default") - awk nil) + t '("case" "default")) (c-lang-defconst c-label-kwds-regexp ;; Adorned regexp matching any keyword that introduces a label. @@ -2998,18 +2997,19 @@ neither in a statement nor in a declaration context. The regexp is tested at the beginning of every sexp in a suspected label, i.e. before \":\". Only used if `c-recognize-colon-labels' is set." t (concat - ;; Don't allow string literals. - "\"\\|" ;; All keywords except `c-label-kwds' and `c-protection-kwds'. (c-make-keywords-re t (set-difference (c-lang-const c-keywords) (append (c-lang-const c-label-kwds) (c-lang-const c-protection-kwds)) :test 'string-equal))) + ;; Don't allow string literals, except in AWK. Character constants are OK. + (c objc java pike idl) (concat "\"\\|" + (c-lang-const c-nonlabel-token-key)) ;; Also check for open parens in C++, to catch member init lists in ;; constructors. We normally allow it so that macros with arguments ;; work in labels. - c++ (concat "\\s\(\\|" (c-lang-const c-nonlabel-token-key))) + c++ (concat "\\s\(\\|\"\\|" (c-lang-const c-nonlabel-token-key))) (c-lang-defvar c-nonlabel-token-key (c-lang-const c-nonlabel-token-key)) (c-lang-defconst c-nonlabel-token-2-key -- 2.11.4.GIT