(c-symbol-key): Use POSIX char classes to match symbols in Emacs 21.
authorMartin Stjernholm <mast@lysator.liu.se>
Mon, 7 Apr 2003 22:45:18 +0000 (22:45 +0000)
committerMartin Stjernholm <mast@lysator.liu.se>
Mon, 7 Apr 2003 22:45:18 +0000 (22:45 +0000)
This makes CC Mode cope with the full range of identifier characters
in e.g. Java.

lisp/ChangeLog
lisp/progmodes/cc-langs.el

index 268119e..23e4268 100644 (file)
@@ -1,3 +1,9 @@
+2003-04-08  Martin Stjernholm  <bug-cc-mode@gnu.org>
+
+       * progmodes/cc-langs.el (c-symbol-key): Use POSIX char classes
+       to match symbols.  This makes CC Mode cope with the full range
+       of identifier characters in e.g. Java.
+
 2003-04-07  Francesco Potort\e,Al\e(B  <pot@gnu.org>
 
        * xt-mouse.el (xterm-mouse-event-read): New function.
index 3dc9e8b..663f0d1 100644 (file)
@@ -181,18 +181,16 @@ appended."
   )
 
 ;; Regexp describing a `symbol' in all languages, not excluding
-;; keywords.  We cannot use just `word' syntax class since `_' cannot
-;; be in word class.  Putting underscore in word class breaks forward
-;; word movement behavior that users are familiar with.  Besides, it
-;; runs counter to Emacs convention.
-;;
-;; This definition isn't correct for the first character in the
-;; languages that accept the full range of Unicode word constituents
-;; in identifiers (e.g. Java and Pike).  For that we'd need to make a
-;; regexp that matches all characters in the word constituent class
-;; except 0-9, and the regexp engine currently can't do that.
+;; keywords.
 (c-lang-defconst c-symbol-key
-  (c c++ objc java idl) "[_a-zA-Z]\\(\\w\\|\\s_\\)*"
+  (c c++ objc java idl)
+  (if (string-match "[[:alpha:]]" "a")
+      "[[:alpha:]_][[:alnum:]_]*"      ; Emacs 21.
+    ;; We cannot use just `word' syntax class since `_' cannot be
+    ;; in word class.  Putting underscore in word class breaks
+    ;; forward word movement behavior that users are familiar
+    ;; with.  Besides, it runs counter to Emacs convention.
+    "[a-zA-Z_]\\(\\w\\|_\\)*")
   pike (concat "\\(" (c-lang-var c-symbol-key c) "\\|"
               (c-make-keywords-re nil
                 '("`+" "`-" "`&" "`|" "`^" "`<<" "`>>" "`*" "`/" "`%" "`~"