2001-03-21 12:59:36 +00:00
|
|
|
|
;;; cc-langs.el --- language specific settings for CC Mode
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;; Copyright (C) 1985,1987,1992-2001 Free Software Foundation, Inc.
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
2000-07-24 11:11:01 +00:00
|
|
|
|
;; Authors: 2000- Martin Stjernholm
|
|
|
|
|
;; 1998-1999 Barry A. Warsaw and Martin Stjernholm
|
1999-02-08 16:53:18 +00:00
|
|
|
|
;; 1992-1997 Barry A. Warsaw
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; 1987 Dave Detlefs and Stewart Clamen
|
|
|
|
|
;; 1985 Richard M. Stallman
|
1999-02-08 16:53:18 +00:00
|
|
|
|
;; Maintainer: bug-cc-mode@gnu.org
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; Created: 22-Apr-1997 (split from cc-mode.el)
|
1997-10-23 07:47:37 +00:00
|
|
|
|
;; Version: See cc-mode.el
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; Keywords: c languages oop
|
|
|
|
|
|
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
|
|
|
|
|
;; GNU Emacs is free software; you can redistribute it and/or modify
|
|
|
|
|
;; it under the terms of the GNU General Public License as published by
|
|
|
|
|
;; the Free Software Foundation; either version 2, or (at your option)
|
|
|
|
|
;; any later version.
|
|
|
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;; along with this program; see the file COPYING. If not, write to
|
|
|
|
|
;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; Boston, MA 02111-1307, USA.
|
|
|
|
|
|
2001-07-16 07:46:48 +00:00
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
1999-12-12 18:24:19 +00:00
|
|
|
|
(eval-when-compile
|
|
|
|
|
(let ((load-path
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(if (and (boundp 'byte-compile-dest-file)
|
|
|
|
|
(stringp byte-compile-dest-file))
|
|
|
|
|
(cons (file-name-directory byte-compile-dest-file) load-path)
|
1999-12-12 18:24:19 +00:00
|
|
|
|
load-path)))
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(require 'cc-bytecomp)))
|
1999-12-12 18:24:19 +00:00
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(cc-require 'cc-defs)
|
|
|
|
|
(cc-require 'cc-vars)
|
1997-07-18 02:09:34 +00:00
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
1999-12-12 18:24:19 +00:00
|
|
|
|
(defvar c-buffer-is-cc-mode nil
|
|
|
|
|
"Non-nil for all buffers with a `major-mode' derived from CC Mode.
|
|
|
|
|
Otherwise, this variable is nil. I.e. this variable is non-nil for
|
|
|
|
|
`c-mode', `c++-mode', `objc-mode', `java-mode', `idl-mode',
|
|
|
|
|
`pike-mode', and any other non-CC Mode mode that calls
|
|
|
|
|
`c-initialize-cc-mode' (e.g. `awk-mode').")
|
|
|
|
|
(make-variable-buffer-local 'c-buffer-is-cc-mode)
|
|
|
|
|
(put 'c-buffer-is-cc-mode 'permanent-local t)
|
1997-07-13 21:30:50 +00:00
|
|
|
|
|
1999-12-12 18:24:19 +00:00
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; Regular expressions and other values which must be parameterized on
|
|
|
|
|
;; a per-language basis.
|
|
|
|
|
|
1997-07-18 02:09:34 +00:00
|
|
|
|
;; Regex describing a `symbol' in all languages. We cannot use just
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; `word' syntax class since `_' cannot be in word class. Putting
|
|
|
|
|
;; underscore in word class breaks forward word movement behavior that
|
1997-07-18 02:09:34 +00:00
|
|
|
|
;; users are familiar with. Besides, this runs counter to Emacs
|
|
|
|
|
;; convention.
|
|
|
|
|
;;
|
|
|
|
|
;; I suspect this definition isn't correct in light of Java's
|
|
|
|
|
;; definition of a symbol as being Unicode. I know so little about
|
|
|
|
|
;; I18N (except how to sound cool and say I18N :-) that I'm willing to
|
|
|
|
|
;; punt on this for now.
|
|
|
|
|
(defconst c-symbol-key "[_a-zA-Z]\\(\\w\\|\\s_\\)*")
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;; HELPME: Many of the following keyword lists are more or less bogus
|
|
|
|
|
;; for some languages (notably ObjC and IDL). The effects of the
|
|
|
|
|
;; erroneous values in the language handling is miniscule since these
|
|
|
|
|
;; constants are not used very much (yet, anyway) in the actual syntax
|
|
|
|
|
;; detection code, but I'd still appreciate help to get them correct.
|
|
|
|
|
|
|
|
|
|
;; Primitive type keywords.
|
|
|
|
|
(defconst c-C-primitive-type-kwds
|
|
|
|
|
"char\\|double\\|float\\|int\\|long\\|short\\|signed\\|unsigned\\|void")
|
|
|
|
|
(defconst c-C++-primitive-type-kwds c-C-primitive-type-kwds)
|
|
|
|
|
(defconst c-ObjC-primitive-type-kwds c-C-primitive-type-kwds)
|
|
|
|
|
(defconst c-Java-primitive-type-kwds
|
|
|
|
|
"boolean\\|byte\\|char\\|double\\|float\\|int\\|long\\|short\\|void")
|
|
|
|
|
(defconst c-IDL-primitive-type-kwds c-C-primitive-type-kwds)
|
|
|
|
|
(defconst c-Pike-primitive-type-kwds
|
|
|
|
|
(concat "constant\\|float\\|int\\|mapping\\|multiset\\|object\\|"
|
|
|
|
|
"program\\|string\\|void"))
|
|
|
|
|
|
|
|
|
|
;; Declaration specifier keywords.
|
|
|
|
|
(defconst c-C-specifier-kwds
|
|
|
|
|
"auto\\|const\\|extern\\|register\\|static\\|volatile")
|
|
|
|
|
(defconst c-C++-specifier-kwds
|
|
|
|
|
(concat c-C-specifier-kwds "\\|friend\\|inline\\|virtual"))
|
|
|
|
|
(defconst c-ObjC-specifier-kwds c-C++-specifier-kwds)
|
|
|
|
|
(defconst c-Java-specifier-kwds
|
|
|
|
|
;; Note: `const' is not used, but it's still a reserved keyword.
|
|
|
|
|
(concat "abstract\\|const\\|final\\|native\\|private\\|protected\\|"
|
|
|
|
|
"public\\|static\\|synchronized\\|transient\\|volatile"))
|
|
|
|
|
(defconst c-IDL-specifier-kwds c-C++-specifier-kwds)
|
|
|
|
|
(defconst c-Pike-specifier-kwds
|
|
|
|
|
(concat "final\\|inline\\|local\\|nomask\\|optional\\|private\\|"
|
|
|
|
|
"protected\\|static\\|variant"))
|
|
|
|
|
|
|
|
|
|
;; Class/struct declaration keywords.
|
|
|
|
|
(defconst c-C-class-kwds "struct\\|union")
|
|
|
|
|
(defconst c-C++-class-kwds (concat c-C-class-kwds "\\|class"))
|
|
|
|
|
(defconst c-ObjC-class-kwds "interface\\|implementation")
|
|
|
|
|
(defconst c-Java-class-kwds "class\\|interface")
|
|
|
|
|
(defconst c-IDL-class-kwds
|
|
|
|
|
(concat c-C++-class-kwds "\\|interface\\|valuetype"))
|
|
|
|
|
(defconst c-Pike-class-kwds "class")
|
|
|
|
|
|
|
|
|
|
;; Keywords introducing other declaration-level blocks.
|
|
|
|
|
(defconst c-C-extra-toplevel-kwds "extern")
|
|
|
|
|
(defconst c-C++-extra-toplevel-kwds
|
|
|
|
|
(concat c-C-extra-toplevel-kwds "\\|namespace"))
|
|
|
|
|
;;(defconst c-ObjC-extra-toplevel-kwds nil)
|
|
|
|
|
;;(defconst c-Java-extra-toplevel-kwds nil)
|
|
|
|
|
(defconst c-IDL-extra-toplevel-kwds "module")
|
|
|
|
|
;;(defconst c-Pike-extra-toplevel-kwds nil)
|
|
|
|
|
|
|
|
|
|
;; Keywords introducing other declaration-level constructs.
|
|
|
|
|
(defconst c-C-other-decl-kwds "enum\\|typedef")
|
|
|
|
|
(defconst c-C++-other-decl-kwds (concat c-C-other-decl-kwds "\\|template"))
|
|
|
|
|
;;(defconst c-ObjC-other-decl-kwds nil)
|
|
|
|
|
(defconst c-Java-other-decl-kwds "import\\|package")
|
|
|
|
|
;;(defconst c-IDL-other-decl-kwds nil)
|
|
|
|
|
(defconst c-Pike-other-decl-kwds "import\\|inherit")
|
|
|
|
|
|
|
|
|
|
;; Keywords that occur in declaration-level constructs.
|
|
|
|
|
;;(defconst c-C-decl-level-kwds nil)
|
|
|
|
|
;;(defconst c-C++-decl-level-kwds nil)
|
|
|
|
|
;;(defconst c-ObjC-decl-level-kwds nil)
|
|
|
|
|
(defconst c-Java-decl-level-kwds "extends\\|implements\\|throws")
|
|
|
|
|
;;(defconst c-IDL-decl-level-kwds nil)
|
|
|
|
|
;;(defconst c-Pike-decl-level-kwds nil)
|
|
|
|
|
|
|
|
|
|
;; Protection label keywords in classes.
|
|
|
|
|
;;(defconst c-C-protection-kwds nil)
|
|
|
|
|
(defconst c-C++-protection-kwds "private\\|protected\\|public")
|
|
|
|
|
(defconst c-ObjC-protection-kwds c-C++-protection-kwds)
|
|
|
|
|
;;(defconst c-Java-protection-kwds nil)
|
|
|
|
|
;;(defconst c-IDL-protection-kwds nil)
|
|
|
|
|
;;(defconst c-Pike-protection-kwds nil)
|
|
|
|
|
|
|
|
|
|
;; Statement keywords followed directly by a block.
|
|
|
|
|
(defconst c-C-block-stmt-1-kwds "do\\|else")
|
|
|
|
|
(defconst c-C++-block-stmt-1-kwds
|
|
|
|
|
(concat c-C-block-stmt-1-kwds "\\|asm\\|try"))
|
|
|
|
|
(defconst c-ObjC-block-stmt-1-kwds c-C++-block-stmt-1-kwds)
|
|
|
|
|
(defconst c-Java-block-stmt-1-kwds
|
|
|
|
|
(concat c-C-block-stmt-1-kwds "\\|finally\\|try"))
|
|
|
|
|
;;(defconst c-IDL-block-stmt-1-kwds nil)
|
|
|
|
|
(defconst c-Pike-block-stmt-1-kwds c-C-block-stmt-1-kwds)
|
|
|
|
|
|
|
|
|
|
;; Statement keywords followed by a paren sexp and then by a block.
|
|
|
|
|
(defconst c-C-block-stmt-2-kwds "for\\|if\\|switch\\|while")
|
|
|
|
|
(defconst c-C++-block-stmt-2-kwds (concat c-C-block-stmt-2-kwds "\\|catch"))
|
|
|
|
|
(defconst c-ObjC-block-stmt-2-kwds c-C++-block-stmt-2-kwds)
|
|
|
|
|
(defconst c-Java-block-stmt-2-kwds
|
|
|
|
|
(concat c-C++-block-stmt-2-kwds "\\|synchronized"))
|
|
|
|
|
;;(defconst c-IDL-block-stmt-2-kwds nil)
|
|
|
|
|
(defconst c-Pike-block-stmt-2-kwds c-C-block-stmt-2-kwds)
|
|
|
|
|
|
|
|
|
|
;; Statement keywords followed by an expression or nothing.
|
|
|
|
|
(defconst c-C-simple-stmt-kwds "break\\|continue\\|goto\\|return")
|
|
|
|
|
(defconst c-C++-simple-stmt-kwds c-C-simple-stmt-kwds)
|
|
|
|
|
(defconst c-ObjC-simple-stmt-kwds c-C-simple-stmt-kwds)
|
|
|
|
|
(defconst c-Java-simple-stmt-kwds
|
|
|
|
|
;; Note: `goto' is not a valid statement, but the keyword is still reserved.
|
|
|
|
|
(concat c-C-simple-stmt-kwds "\\|throw"))
|
|
|
|
|
;;(defconst c-IDL-simple-stmt-kwds nil)
|
|
|
|
|
(defconst c-Pike-simple-stmt-kwds "break\\|continue\\|return")
|
|
|
|
|
|
|
|
|
|
;; Keywords introducing labels in blocks.
|
|
|
|
|
(defconst c-C-label-kwds "case\\|default")
|
|
|
|
|
(defconst c-C++-label-kwds c-C-label-kwds)
|
|
|
|
|
(defconst c-ObjC-label-kwds c-C-label-kwds)
|
|
|
|
|
(defconst c-Java-label-kwds c-C-label-kwds)
|
|
|
|
|
;;(defconst c-IDL-label-kwds nil)
|
|
|
|
|
(defconst c-Pike-label-kwds c-C-label-kwds)
|
|
|
|
|
|
|
|
|
|
;; Keywords that can occur anywhere in expressions.
|
|
|
|
|
(defconst c-C-expr-kwds "sizeof")
|
|
|
|
|
(defconst c-C++-expr-kwds
|
|
|
|
|
(concat c-C-expr-kwds "\\|delete\\|new\\|operator\\|this\\|throw"))
|
|
|
|
|
(defconst c-ObjC-expr-kwds c-C-expr-kwds)
|
|
|
|
|
(defconst c-Java-expr-kwds "instanceof\\|new\\|super\\|this")
|
|
|
|
|
;;(defconst c-IDL-expr-kwds nil)
|
|
|
|
|
(defconst c-Pike-expr-kwds
|
|
|
|
|
(concat c-C-expr-kwds "\\|catch\\|class\\|gauge\\|lambda\\|predef"))
|
|
|
|
|
|
|
|
|
|
;; All keywords.
|
|
|
|
|
(defconst c-C-keywords
|
|
|
|
|
(concat c-C-primitive-type-kwds "\\|" c-C-specifier-kwds
|
|
|
|
|
"\\|" c-C-class-kwds "\\|" c-C-extra-toplevel-kwds
|
|
|
|
|
"\\|" c-C-other-decl-kwds
|
|
|
|
|
;; "\\|" c-C-decl-level-kwds "\\|" c-C-protection-kwds
|
|
|
|
|
"\\|" c-C-block-stmt-1-kwds "\\|" c-C-block-stmt-2-kwds
|
|
|
|
|
"\\|" c-C-simple-stmt-kwds "\\|" c-C-label-kwds
|
|
|
|
|
"\\|" c-C-expr-kwds))
|
|
|
|
|
(defconst c-C++-keywords
|
|
|
|
|
(concat c-C++-primitive-type-kwds "\\|" c-C++-specifier-kwds
|
|
|
|
|
"\\|" c-C++-class-kwds "\\|" c-C++-extra-toplevel-kwds
|
|
|
|
|
"\\|" c-C++-other-decl-kwds
|
|
|
|
|
;; "\\|" c-C++-decl-level-kwds
|
|
|
|
|
"\\|" c-C++-protection-kwds
|
|
|
|
|
"\\|" c-C++-block-stmt-1-kwds "\\|" c-C++-block-stmt-2-kwds
|
|
|
|
|
"\\|" c-C++-simple-stmt-kwds "\\|" c-C++-label-kwds
|
|
|
|
|
"\\|" c-C++-expr-kwds))
|
|
|
|
|
(defconst c-ObjC-keywords
|
|
|
|
|
(concat c-ObjC-primitive-type-kwds "\\|" c-ObjC-specifier-kwds
|
|
|
|
|
"\\|" c-ObjC-class-kwds
|
|
|
|
|
;; "\\|" c-ObjC-extra-toplevel-kwds
|
|
|
|
|
;; "\\|" c-ObjC-other-decl-kwds "\\|" c-ObjC-decl-level-kwds
|
|
|
|
|
"\\|" c-ObjC-protection-kwds
|
|
|
|
|
"\\|" c-ObjC-block-stmt-1-kwds "\\|" c-ObjC-block-stmt-2-kwds
|
|
|
|
|
"\\|" c-ObjC-simple-stmt-kwds "\\|" c-ObjC-label-kwds
|
|
|
|
|
"\\|" c-ObjC-expr-kwds))
|
|
|
|
|
(defconst c-Java-keywords
|
|
|
|
|
(concat c-Java-primitive-type-kwds "\\|" c-Java-specifier-kwds
|
|
|
|
|
"\\|" c-Java-class-kwds
|
|
|
|
|
;; "\\|" c-Java-extra-toplevel-kwds
|
|
|
|
|
"\\|" c-Java-other-decl-kwds "\\|" c-Java-decl-level-kwds
|
|
|
|
|
;; "\\|" c-Java-protection-kwds
|
|
|
|
|
"\\|" c-Java-block-stmt-1-kwds "\\|" c-Java-block-stmt-2-kwds
|
|
|
|
|
"\\|" c-Java-simple-stmt-kwds "\\|" c-Java-label-kwds
|
|
|
|
|
"\\|" c-Java-expr-kwds))
|
|
|
|
|
(defconst c-IDL-keywords
|
|
|
|
|
(concat c-IDL-primitive-type-kwds "\\|" c-IDL-specifier-kwds
|
|
|
|
|
"\\|" c-IDL-class-kwds "\\|" c-IDL-extra-toplevel-kwds
|
|
|
|
|
;; "\\|" c-IDL-other-decl-kwds "\\|" c-IDL-decl-level-kwds
|
|
|
|
|
;; "\\|" c-IDL-protection-kwds
|
|
|
|
|
;; "\\|" c-IDL-block-stmt-1-kwds "\\|" c-IDL-block-stmt-2-kwds
|
|
|
|
|
;; "\\|" c-IDL-simple-stmt-kwds "\\|" c-IDL-label-kwds
|
|
|
|
|
;; "\\|" c-IDL-expr-kwds)
|
|
|
|
|
))
|
|
|
|
|
(defconst c-Pike-keywords
|
|
|
|
|
(concat c-Pike-primitive-type-kwds "\\|" c-Pike-specifier-kwds
|
|
|
|
|
"\\|" c-Pike-class-kwds
|
|
|
|
|
;; "\\|" c-Pike-extra-toplevel-kwds
|
|
|
|
|
"\\|" c-Pike-other-decl-kwds
|
|
|
|
|
;; "\\|" c-Pike-decl-level-kwds "\\|" c-Pike-protection-kwds
|
|
|
|
|
"\\|" c-Pike-block-stmt-1-kwds "\\|" c-Pike-block-stmt-2-kwds
|
|
|
|
|
"\\|" c-Pike-simple-stmt-kwds "\\|" c-Pike-label-kwds
|
|
|
|
|
"\\|" c-Pike-expr-kwds))
|
|
|
|
|
|
|
|
|
|
(defvar c-keywords nil)
|
|
|
|
|
(make-variable-buffer-local 'c-keywords)
|
|
|
|
|
|
|
|
|
|
;; Keywords defining protection levels
|
|
|
|
|
(defconst c-protection-key "\\<\\(public\\|protected\\|private\\)\\>")
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;; Regexps introducing class definitions.
|
|
|
|
|
(defconst c-C-class-key (c-paren-re c-C-class-kwds))
|
|
|
|
|
(defconst c-C++-class-key (c-paren-re c-C++-class-kwds))
|
|
|
|
|
(defconst c-IDL-class-key (c-paren-re c-IDL-class-kwds))
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(defconst c-ObjC-class-key
|
|
|
|
|
(concat
|
2001-03-21 12:59:36 +00:00
|
|
|
|
"@\\(" c-ObjC-class-kwds "\\)\\s +"
|
1997-07-10 07:54:06 +00:00
|
|
|
|
c-symbol-key ;name of the class
|
|
|
|
|
"\\(\\s *:\\s *" c-symbol-key "\\)?" ;maybe followed by the superclass
|
|
|
|
|
"\\(\\s *<[^>]+>\\)?" ;and maybe the adopted protocols list
|
|
|
|
|
))
|
|
|
|
|
(defconst c-Java-class-key
|
|
|
|
|
(concat
|
|
|
|
|
"\\(" c-protection-key "\\s +\\)?"
|
2001-03-21 12:59:36 +00:00
|
|
|
|
"\\(" c-Java-class-kwds "\\)\\s +"
|
1997-07-10 07:54:06 +00:00
|
|
|
|
c-symbol-key ;name of the class
|
1999-02-08 16:53:18 +00:00
|
|
|
|
"\\(\\s *extends\\s *" c-symbol-key "\\)?" ;maybe followed by superclass
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;;"\\(\\s *implements *[^{]+{\\)?" ;maybe the adopted protocols list
|
|
|
|
|
))
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(defconst c-Pike-class-key (c-paren-re c-Pike-class-kwds))
|
1999-02-08 16:53:18 +00:00
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(defvar c-class-key c-C-class-key)
|
|
|
|
|
(make-variable-buffer-local 'c-class-key)
|
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(defconst c-C-extra-toplevel-key (c-paren-re c-C-extra-toplevel-kwds))
|
|
|
|
|
(defconst c-C++-extra-toplevel-key (c-paren-re c-C++-extra-toplevel-kwds))
|
|
|
|
|
(defconst c-IDL-extra-toplevel-key (c-paren-re c-IDL-extra-toplevel-kwds))
|
|
|
|
|
|
1998-02-17 07:10:11 +00:00
|
|
|
|
(defvar c-extra-toplevel-key c-C-extra-toplevel-key)
|
|
|
|
|
(make-variable-buffer-local 'c-extra-toplevel-key)
|
|
|
|
|
|
1999-12-12 18:24:19 +00:00
|
|
|
|
;; Keywords that can introduce bitfields in the languages that supports that.
|
|
|
|
|
(defconst c-C-bitfield-key "\\(char\\|int\\|long\\|signed\\|unsigned\\)")
|
|
|
|
|
|
|
|
|
|
(defvar c-bitfield-key nil)
|
|
|
|
|
(make-variable-buffer-local 'c-bitfield-key)
|
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; regexp describing access protection clauses. language specific
|
|
|
|
|
(defvar c-access-key nil)
|
|
|
|
|
(make-variable-buffer-local 'c-access-key)
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(defconst c-C++-access-key
|
|
|
|
|
(concat "\\<\\(" c-C++-protection-kwds "\\)\\>[ \t]*:"))
|
|
|
|
|
;;(defconst c-IDL-access-key nil)
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(defconst c-ObjC-access-key (concat "@" c-protection-key))
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;;(defconst c-Java-access-key nil)
|
|
|
|
|
;;(defconst c-Pike-access-key nil)
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
|
|
|
|
;; keywords introducing conditional blocks
|
|
|
|
|
(defconst c-C-conditional-key nil)
|
|
|
|
|
(defconst c-C++-conditional-key nil)
|
1999-12-12 18:24:19 +00:00
|
|
|
|
(defconst c-IDL-conditional-key nil)
|
|
|
|
|
(defconst c-ObjC-conditional-key nil)
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(defconst c-Java-conditional-key nil)
|
1999-02-08 16:53:18 +00:00
|
|
|
|
(defconst c-Pike-conditional-key nil)
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
|
|
|
|
(let ((all-kws "for\\|if\\|do\\|else\\|while\\|switch")
|
|
|
|
|
(exc-kws "\\|try\\|catch")
|
|
|
|
|
(thr-kws "\\|finally\\|synchronized")
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(front "\\<\\(")
|
|
|
|
|
(back "\\)\\>[^_]"))
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(setq c-C-conditional-key (concat front all-kws back)
|
|
|
|
|
c-C++-conditional-key (concat front all-kws exc-kws back)
|
1999-12-12 18:24:19 +00:00
|
|
|
|
;; c-IDL-conditional-key is nil.
|
|
|
|
|
c-ObjC-conditional-key c-C-conditional-key
|
1999-02-08 16:53:18 +00:00
|
|
|
|
c-Java-conditional-key (concat front all-kws exc-kws thr-kws back)
|
|
|
|
|
c-Pike-conditional-key (concat front all-kws "\\|foreach" back)))
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
|
|
|
|
(defvar c-conditional-key c-C-conditional-key)
|
|
|
|
|
(make-variable-buffer-local 'c-conditional-key)
|
|
|
|
|
|
|
|
|
|
;; keywords describing method definition introductions
|
|
|
|
|
(defvar c-method-key nil)
|
|
|
|
|
(make-variable-buffer-local 'c-method-key)
|
|
|
|
|
|
|
|
|
|
(defconst c-ObjC-method-key
|
|
|
|
|
(concat
|
|
|
|
|
"^\\s *[+-]\\s *"
|
|
|
|
|
"\\(([^)]*)\\)?" ; return type
|
|
|
|
|
;; \\s- in objc syntax table does not include \n
|
|
|
|
|
;; since it is considered the end of //-comments.
|
|
|
|
|
"[ \t\n]*" c-symbol-key))
|
|
|
|
|
|
|
|
|
|
;; comment starter definitions for various languages. language specific
|
|
|
|
|
(defconst c-C++-comment-start-regexp "/[/*]")
|
1999-12-12 18:24:19 +00:00
|
|
|
|
(defconst c-C-comment-start-regexp c-C++-comment-start-regexp)
|
|
|
|
|
(defconst c-IDL-comment-start-regexp c-C++-comment-start-regexp)
|
|
|
|
|
(defconst c-ObjC-comment-start-regexp c-C++-comment-start-regexp)
|
|
|
|
|
(defconst c-Pike-comment-start-regexp c-C++-comment-start-regexp)
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; We need to match all 3 Java style comments
|
|
|
|
|
;; 1) Traditional C block; 2) javadoc /** ...; 3) C++ style
|
|
|
|
|
(defconst c-Java-comment-start-regexp "/\\(/\\|[*][*]?\\)")
|
1997-08-11 22:13:48 +00:00
|
|
|
|
(defvar c-comment-start-regexp c-C++-comment-start-regexp)
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(make-variable-buffer-local 'c-comment-start-regexp)
|
|
|
|
|
|
|
|
|
|
;; Regexp describing a switch's case or default label for all languages
|
|
|
|
|
(defconst c-switch-label-key "\\(\\(case[( \t]+\\S .*\\)\\|default[ \t]*\\):")
|
|
|
|
|
;; Regexp describing any label.
|
|
|
|
|
(defconst c-label-key (concat c-symbol-key ":\\([^:]\\|$\\)"))
|
|
|
|
|
|
|
|
|
|
;; Regexp describing class inheritance declarations. TBD: this should
|
|
|
|
|
;; be language specific, and only makes sense for C++
|
|
|
|
|
(defconst c-inher-key
|
|
|
|
|
(concat "\\(\\<static\\>\\s +\\)?"
|
|
|
|
|
c-C++-class-key "[ \t]+" c-symbol-key
|
|
|
|
|
"\\([ \t]*:[ \t]*\\)\\s *[^;]"))
|
|
|
|
|
|
|
|
|
|
;; Regexp describing C++ base classes in a derived class definition.
|
|
|
|
|
;; TBD: this should be language specific, and only makes sense for C++
|
|
|
|
|
(defvar c-baseclass-key
|
|
|
|
|
(concat
|
|
|
|
|
":?[ \t]*\\(virtual[ \t]+\\)?\\("
|
|
|
|
|
c-protection-key "[ \t]+\\)" c-symbol-key))
|
|
|
|
|
(make-variable-buffer-local 'c-baseclass-key)
|
|
|
|
|
|
|
|
|
|
;; Regexp describing friend declarations in C++ classes.
|
|
|
|
|
(defconst c-C++-friend-key
|
|
|
|
|
"friend[ \t]+\\|template[ \t]*<.+>[ \t]*friend[ \t]+")
|
|
|
|
|
|
|
|
|
|
;; Regexp describing Java inheritance and throws clauses.
|
|
|
|
|
(defconst c-Java-special-key "\\(implements\\|extends\\|throws\\)[^_]")
|
|
|
|
|
|
|
|
|
|
;; Regexp describing the beginning of a Java top-level definition.
|
|
|
|
|
(defconst c-Java-defun-prompt-regexp
|
|
|
|
|
"^[ \t]*\\(\\(\\(public\\|protected\\|private\\|const\\|abstract\\|synchronized\\|final\\|static\\|threadsafe\\|transient\\|native\\|volatile\\)\\s-+\\)*\\(\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*[][_$.a-zA-Z0-9]+\\|[[a-zA-Z]\\)\\s-*\\)\\s-+\\)\\)?\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*\\s-+\\)\\s-*\\)?\\([_a-zA-Z][^][ \t:;.,{}()=]*\\|\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)\\)\\s-*\\(([^);{}]*)\\)?\\([] \t]*\\)\\(\\s-*\\<throws\\>\\s-*\\(\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)[, \t\n\r\f]*\\)+\\)?\\s-*")
|
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;; Regexp to append to paragraph-start.
|
2000-07-24 11:11:01 +00:00
|
|
|
|
(defvar c-append-paragraph-start "$")
|
|
|
|
|
(make-variable-buffer-local 'c-append-paragraph-start)
|
1998-03-08 06:51:26 +00:00
|
|
|
|
(defconst c-Java-javadoc-paragraph-start
|
2001-03-21 12:59:36 +00:00
|
|
|
|
"\\(@[a-zA-Z]+\\>\\|$\\)")
|
|
|
|
|
(defconst c-Pike-pikedoc-paragraph-start
|
|
|
|
|
"\\(@[a-zA-Z]+\\>\\([^{]\\|$\\)\\|$\\)")
|
|
|
|
|
|
|
|
|
|
;; Regexp to append to paragraph-separate.
|
|
|
|
|
(defvar c-append-paragraph-separate "$")
|
|
|
|
|
(make-variable-buffer-local 'c-append-paragraph-separate)
|
|
|
|
|
(defconst c-Pike-pikedoc-paragraph-separate c-Pike-pikedoc-paragraph-start)
|
1998-03-08 06:51:26 +00:00
|
|
|
|
|
1999-02-08 16:53:18 +00:00
|
|
|
|
;; Regexp that starts lambda constructs.
|
|
|
|
|
(defvar c-lambda-key nil)
|
|
|
|
|
(make-variable-buffer-local 'c-lambda-key)
|
|
|
|
|
(defconst c-Pike-lambda-key "\\<lambda\\>")
|
|
|
|
|
|
|
|
|
|
;; Regexp that are followed by a statement block in expressions.
|
|
|
|
|
(defvar c-inexpr-block-key nil)
|
|
|
|
|
(make-variable-buffer-local 'c-inexpr-block-key)
|
|
|
|
|
(defconst c-Pike-inexpr-block-key "\\<\\(catch\\|gauge\\)\\>")
|
|
|
|
|
|
|
|
|
|
;; Regexp that may be followed by an anonymous class in expressions.
|
|
|
|
|
(defvar c-inexpr-class-key nil)
|
|
|
|
|
(make-variable-buffer-local 'c-inexpr-class-key)
|
|
|
|
|
(defconst c-Java-inexpr-class-key "\\<new\\>")
|
2000-07-24 11:11:01 +00:00
|
|
|
|
(defconst c-Pike-inexpr-class-key "\\<class\\>")
|
1999-02-08 16:53:18 +00:00
|
|
|
|
|
|
|
|
|
;; List of open- and close-chars that makes up a pike-style brace
|
|
|
|
|
;; list, ie for a `([<5B>])' list there should be a cons (?\[ . ?\]) in
|
|
|
|
|
;; this list.
|
|
|
|
|
(defvar c-special-brace-lists nil)
|
|
|
|
|
(make-variable-buffer-local 'c-special-brace-lists)
|
|
|
|
|
(defconst c-Pike-special-brace-lists '((?{ . ?})
|
|
|
|
|
(?\[ . ?\])
|
|
|
|
|
(?< . ?>)))
|
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;; Syntax tables.
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
|
|
|
|
(defun c-populate-syntax-table (table)
|
|
|
|
|
;; Populate the syntax TABLE
|
|
|
|
|
;; DO NOT TRY TO SET _ (UNDERSCORE) TO WORD CLASS!
|
|
|
|
|
(modify-syntax-entry ?_ "_" table)
|
|
|
|
|
(modify-syntax-entry ?\\ "\\" table)
|
|
|
|
|
(modify-syntax-entry ?+ "." table)
|
|
|
|
|
(modify-syntax-entry ?- "." table)
|
|
|
|
|
(modify-syntax-entry ?= "." table)
|
|
|
|
|
(modify-syntax-entry ?% "." table)
|
|
|
|
|
(modify-syntax-entry ?< "." table)
|
|
|
|
|
(modify-syntax-entry ?> "." table)
|
|
|
|
|
(modify-syntax-entry ?& "." table)
|
|
|
|
|
(modify-syntax-entry ?| "." table)
|
1997-08-11 22:13:48 +00:00
|
|
|
|
(modify-syntax-entry ?\' "\"" table)
|
|
|
|
|
;; Set up block and line oriented comments. The new C standard
|
|
|
|
|
;; mandates both comment styles even in C, so since all languages
|
|
|
|
|
;; now require dual comments, we make this the default.
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(cond
|
|
|
|
|
;; XEmacs 19 & 20
|
|
|
|
|
((memq '8-bit c-emacs-features)
|
|
|
|
|
(modify-syntax-entry ?/ ". 1456" table)
|
1997-08-11 22:13:48 +00:00
|
|
|
|
(modify-syntax-entry ?* ". 23" table))
|
|
|
|
|
;; Emacs 19 & 20
|
1997-07-10 07:54:06 +00:00
|
|
|
|
((memq '1-bit c-emacs-features)
|
|
|
|
|
(modify-syntax-entry ?/ ". 124b" table)
|
1997-08-11 22:13:48 +00:00
|
|
|
|
(modify-syntax-entry ?* ". 23" table))
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;; incompatible
|
|
|
|
|
(t (error "CC Mode is incompatible with this version of Emacs"))
|
1997-08-11 22:13:48 +00:00
|
|
|
|
)
|
|
|
|
|
(modify-syntax-entry ?\n "> b" table)
|
|
|
|
|
;; Give CR the same syntax as newline, for selective-display
|
|
|
|
|
(modify-syntax-entry ?\^m "> b" table))
|
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defvar c-mode-syntax-table nil
|
|
|
|
|
"Syntax table used in c-mode buffers.")
|
|
|
|
|
(if c-mode-syntax-table
|
|
|
|
|
()
|
|
|
|
|
(setq c-mode-syntax-table (make-syntax-table))
|
1997-08-11 22:13:48 +00:00
|
|
|
|
(c-populate-syntax-table c-mode-syntax-table))
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
1997-08-11 22:13:48 +00:00
|
|
|
|
;;;###autoload
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(defvar c++-mode-syntax-table nil
|
|
|
|
|
"Syntax table used in c++-mode buffers.")
|
|
|
|
|
(if c++-mode-syntax-table
|
|
|
|
|
()
|
|
|
|
|
(setq c++-mode-syntax-table (make-syntax-table))
|
|
|
|
|
(c-populate-syntax-table c++-mode-syntax-table)
|
|
|
|
|
;; TBD: does it make sense for colon to be symbol class in C++?
|
|
|
|
|
;; I'm not so sure, since c-label-key is busted on lines like:
|
|
|
|
|
;; Foo::bar( i );
|
|
|
|
|
;; maybe c-label-key should be fixed instead of commenting this out,
|
|
|
|
|
;; but it also bothers me that this only seems appropriate for C++
|
|
|
|
|
;; and not C.
|
|
|
|
|
;;(modify-syntax-entry ?: "_" c++-mode-syntax-table)
|
|
|
|
|
)
|
|
|
|
|
|
1999-12-12 18:24:19 +00:00
|
|
|
|
(defvar c++-template-syntax-table nil
|
|
|
|
|
"A variant of `c++-mode-syntax-table' that defines `<' and `>' as
|
|
|
|
|
parenthesis characters. Used temporarily when template argument lists
|
|
|
|
|
are parsed.")
|
|
|
|
|
(if c++-template-syntax-table
|
|
|
|
|
()
|
|
|
|
|
(setq c++-template-syntax-table
|
|
|
|
|
(copy-syntax-table c++-mode-syntax-table))
|
|
|
|
|
(modify-syntax-entry ?< "(>" c++-template-syntax-table)
|
|
|
|
|
(modify-syntax-entry ?> ")<" c++-template-syntax-table))
|
|
|
|
|
|
1997-08-11 22:13:48 +00:00
|
|
|
|
;;;###autoload
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(defvar objc-mode-syntax-table nil
|
|
|
|
|
"Syntax table used in objc-mode buffers.")
|
|
|
|
|
(if objc-mode-syntax-table
|
|
|
|
|
()
|
|
|
|
|
(setq objc-mode-syntax-table (make-syntax-table))
|
|
|
|
|
(c-populate-syntax-table objc-mode-syntax-table)
|
1997-08-11 22:13:48 +00:00
|
|
|
|
;; add extra Objective-C only syntax
|
|
|
|
|
(modify-syntax-entry ?@ "_" objc-mode-syntax-table))
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
1997-08-11 22:13:48 +00:00
|
|
|
|
;;;###autoload
|
1997-07-10 07:54:06 +00:00
|
|
|
|
(defvar java-mode-syntax-table nil
|
|
|
|
|
"Syntax table used in java-mode buffers.")
|
|
|
|
|
(if java-mode-syntax-table
|
|
|
|
|
()
|
|
|
|
|
(setq java-mode-syntax-table (make-syntax-table))
|
1997-08-11 22:13:48 +00:00
|
|
|
|
(c-populate-syntax-table java-mode-syntax-table))
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
1997-08-11 22:13:48 +00:00
|
|
|
|
;;;###autoload
|
1997-08-09 18:26:19 +00:00
|
|
|
|
(defvar idl-mode-syntax-table nil
|
|
|
|
|
"Syntax table used in idl-mode buffers.")
|
|
|
|
|
(if idl-mode-syntax-table
|
|
|
|
|
nil
|
|
|
|
|
(setq idl-mode-syntax-table (make-syntax-table))
|
1997-08-11 22:13:48 +00:00
|
|
|
|
(c-populate-syntax-table idl-mode-syntax-table))
|
1997-08-09 18:26:19 +00:00
|
|
|
|
|
1999-02-08 16:53:18 +00:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defvar pike-mode-syntax-table nil
|
|
|
|
|
"Syntax table used in pike-mode buffers.")
|
|
|
|
|
(if pike-mode-syntax-table
|
|
|
|
|
()
|
|
|
|
|
(setq pike-mode-syntax-table (make-syntax-table))
|
|
|
|
|
(c-populate-syntax-table pike-mode-syntax-table)
|
|
|
|
|
(modify-syntax-entry ?@ "." pike-mode-syntax-table))
|
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
|
|
|
|
|
;; internal state variables
|
|
|
|
|
|
|
|
|
|
;; Internal state of hungry delete key feature
|
|
|
|
|
(defvar c-hungry-delete-key nil)
|
|
|
|
|
(make-variable-buffer-local 'c-hungry-delete-key)
|
|
|
|
|
|
|
|
|
|
;; Internal state of auto newline feature.
|
|
|
|
|
(defvar c-auto-newline nil)
|
|
|
|
|
(make-variable-buffer-local 'c-auto-newline)
|
1999-02-08 16:53:18 +00:00
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
;; Internal auto-newline/hungry-delete designation string for mode line.
|
|
|
|
|
(defvar c-auto-hungry-string nil)
|
|
|
|
|
(make-variable-buffer-local 'c-auto-hungry-string)
|
|
|
|
|
|
|
|
|
|
;; Non-nil means K&R style argument declarations are valid.
|
|
|
|
|
(defvar c-recognize-knr-p t)
|
|
|
|
|
(make-variable-buffer-local 'c-recognize-knr-p)
|
1997-08-09 18:26:19 +00:00
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
|
2001-03-21 12:59:36 +00:00
|
|
|
|
(cc-provide 'cc-langs)
|
2001-07-16 07:46:48 +00:00
|
|
|
|
|
1997-07-10 07:54:06 +00:00
|
|
|
|
;;; cc-langs.el ends here
|