Add the switch statement to AWK Mode.
authorAlan Mackenzie <acm@muc.de>
Tue, 13 Dec 2011 21:13:51 +0000 (21:13 +0000)
committerAlan Mackenzie <acm@muc.de>
Tue, 13 Dec 2011 21:13:51 +0000 (21:13 +0000)
lisp/ChangeLog
lisp/progmodes/cc-awk.el
lisp/progmodes/cc-langs.el

index f338462..cf042ec 100644 (file)
@@ -1,5 +1,15 @@
 2011-12-13  Alan Mackenzie  <acm@muc.de>
 
+       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
index f44b34a..ef67a18 100644 (file)
@@ -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.
index 0bfca84..96f0887 100644 (file)
@@ -2242,8 +2242,7 @@ This construct is \"<keyword> <expression> :\"."
 
 (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