Some fixes to follow coding conventions.
[emacs.git] / lisp / progmodes / cc-vars.el
blobd53e2213d888368c4e0548768b6eb296b75ebdb2
1 ;;; cc-vars.el --- user customization variables for CC Mode
3 ;; Copyright (C) 1985,1987,1992-2001 Free Software Foundation, Inc.
5 ;; Authors: 2000- Martin Stjernholm
6 ;; 1998-1999 Barry A. Warsaw and Martin Stjernholm
7 ;; 1992-1997 Barry A. Warsaw
8 ;; 1987 Dave Detlefs and Stewart Clamen
9 ;; 1985 Richard M. Stallman
10 ;; Maintainer: bug-cc-mode@gnu.org
11 ;; Created: 22-Apr-1997 (split from cc-mode.el)
12 ;; Version: See cc-mode.el
13 ;; Keywords: c languages oop
15 ;; This file is part of GNU Emacs.
17 ;; GNU Emacs is free software; you can redistribute it and/or modify
18 ;; it under the terms of the GNU General Public License as published by
19 ;; the Free Software Foundation; either version 2, or (at your option)
20 ;; any later version.
22 ;; GNU Emacs is distributed in the hope that it will be useful,
23 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
24 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 ;; GNU General Public License for more details.
27 ;; You should have received a copy of the GNU General Public License
28 ;; along with this program; see the file COPYING. If not, write to
29 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
30 ;; Boston, MA 02111-1307, USA.
32 ;;; Commentary:
34 ;;; Code:
36 (eval-when-compile
37 (let ((load-path
38 (if (and (boundp 'byte-compile-dest-file)
39 (stringp byte-compile-dest-file))
40 (cons (file-name-directory byte-compile-dest-file) load-path)
41 load-path)))
42 (require 'cc-bytecomp)))
44 (cc-require 'cc-defs)
46 ;; Silence the compiler.
47 (cc-bytecomp-defun get-char-table) ; XEmacs 20+
48 (cc-bytecomp-defun char-table-range) ; Emacs 19+
49 (cc-bytecomp-defun char-table-p) ; Emacs 19+, XEmacs 20+
51 ;; Pull in custom if it exists and is recent enough (the one in Emacs
52 ;; 19.34 isn't).
53 (eval
54 (cc-eval-when-compile
55 (condition-case nil
56 (progn
57 (require 'custom)
58 (or (fboundp 'defcustom) (error ""))
59 (require 'wid-edit)
60 '(progn ; Compile in the require's.
61 (require 'custom)
62 (require 'wid-edit)))
63 (error
64 (message "Warning: Compiling without Customize support \
65 since a (good enough) custom library wasn't found")
66 (cc-bytecomp-defmacro define-widget (name class doc &rest args))
67 (cc-bytecomp-defmacro defcustom (symbol value doc &rest args)
68 `(defvar ,symbol ,value ,doc))
69 nil))))
72 ;;; Helpers
74 ;; This widget will show up in newer versions of the Custom library
75 (or (get 'other 'widget-type)
76 (define-widget 'other 'sexp
77 "Matches everything, but doesn't let the user edit the value.
78 Useful as last item in a `choice' widget."
79 :tag "Other"
80 :format "%t%n"
81 :value 'other))
83 (define-widget 'c-const-symbol 'item
84 "An uneditable lisp symbol."
85 :value nil
86 :tag "Symbol"
87 :format "%t: %v\n%d"
88 :match (lambda (widget value) (symbolp value))
89 :value-to-internal
90 (lambda (widget value)
91 (let ((s (if (symbolp value)
92 (symbol-name value)
93 value))
94 (l (widget-get widget :size)))
95 (if l
96 (setq s (concat s (make-string (- l (length s)) ?\ ))))
97 s))
98 :value-to-external
99 (lambda (widget value)
100 (if (stringp value)
101 (intern (progn
102 (string-match "\\`[^ ]*" value)
103 (match-string 0 value)))
104 value)))
106 (defvar c-style-variables
107 '(c-basic-offset c-comment-only-line-offset c-block-comment-prefix
108 c-comment-prefix-regexp c-cleanup-list c-hanging-braces-alist
109 c-hanging-colons-alist c-hanging-semi&comma-criteria c-backslash-column
110 c-special-indent-hook c-label-minimum-indentation c-offsets-alist)
111 "List of the style variables.")
113 (defmacro defcustom-c-stylevar (name val doc &rest args)
114 "Defines a style variable."
115 `(progn
116 (put ',name 'c-stylevar-fallback ,val)
117 (defcustom ,name 'set-from-style
118 ,(concat doc "
120 This is a style variable. Apart from the valid values described
121 above, it can be set to the symbol `set-from-style'. In that case, it
122 takes its value from the style system (see `c-default-style' and
123 `c-styles-alist') when a CC Mode buffer is initialized. Otherwise,
124 the value set here overrides the style system (there is a variable
125 `c-old-style-variable-behavior' that changes this, though).")
126 ,@(plist-put
127 args ':type
128 `'(radio
129 (const :tag "Use style settings"
130 set-from-style)
131 ,(let ((type (eval (plist-get args ':type))))
132 (unless (consp type)
133 (setq type (list type)))
134 (unless (c-safe (plist-get (cdr type) ':value))
135 (setcdr type (append `(:value ,val)
136 (cdr type))))
137 (unless (c-safe (plist-get (cdr type) ':tag))
138 (setcdr type (append '(:tag "Override style settings")
139 (cdr type))))
140 type))))))
142 (defun c-valid-offset (offset)
143 "Return non-nil iff OFFSET is a valid offset for a syntactic symbol.
144 See `c-offsets-alist'."
145 (or (eq offset '+)
146 (eq offset '-)
147 (eq offset '++)
148 (eq offset '--)
149 (eq offset '*)
150 (eq offset '/)
151 (integerp offset)
152 (vectorp offset)
153 (functionp offset)
154 (and (symbolp offset)
155 (or (boundp offset)
156 (fboundp offset)))
157 (progn
158 (while (and (consp offset)
159 (c-valid-offset (car offset)))
160 (setq offset (cdr offset)))
161 (null offset))))
165 ;;; User variables
167 (defcustom c-strict-syntax-p nil
168 "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'.
169 If the syntactic symbol for a particular line does not match a symbol
170 in the offsets alist, or if no non-nil offset value can be determined
171 for a symbol, an error is generated, otherwise no error is reported
172 and the syntactic symbol is ignored.
174 This variable is considered obsolete; it doesn't work well with lineup
175 functions that return nil to support the feature of using lists on
176 syntactic symbols in `c-offsets-alist'. Please keep it set to nil."
177 :type 'boolean
178 :group 'c)
180 (defcustom c-echo-syntactic-information-p nil
181 "*If non-nil, syntactic info is echoed when the line is indented."
182 :type 'boolean
183 :group 'c)
185 (defcustom-c-stylevar c-basic-offset 4
186 "*Amount of basic offset used by + and - symbols in `c-offsets-alist'.
187 Also used as the indentation step when `c-syntactic-indentation' is
188 nil."
189 :type 'integer
190 :group 'c)
192 (defcustom c-tab-always-indent t
193 "*Controls the operation of the TAB key.
194 If t, hitting TAB always just indents the current line. If nil,
195 hitting TAB indents the current line if point is at the left margin or
196 in the line's indentation, otherwise it insert a `real' tab character
197 \(see note\). If the symbol `other', then tab is inserted only within
198 literals -- defined as comments and strings -- and inside preprocessor
199 directives, but the line is always reindented.
201 Note: The value of `indent-tabs-mode' will determine whether a real
202 tab character will be inserted, or the equivalent number of spaces.
203 When inserting a tab, actually the function stored in the variable
204 `c-insert-tab-function' is called.
206 Note: indentation of lines containing only comments is also controlled
207 by the `c-comment-only-line-offset' variable."
208 :type '(radio
209 :extra-offset 8
210 :format "%{C Tab Always Indent%}:\n The TAB key:\n%v"
211 (const :tag "always indents, never inserts TAB" t)
212 (const :tag "indents in left margin, otherwise inserts TAB" nil)
213 (other :tag "inserts TAB in literals, otherwise indent" other))
214 :group 'c)
216 (defcustom c-insert-tab-function 'insert-tab
217 "*Function used when inserting a tab for \\[c-indent-command].
218 Only used when `c-tab-always-indent' indicates a `real' tab character
219 should be inserted. Value must be a function taking no arguments."
220 :type 'function
221 :group 'c)
223 (defcustom c-syntactic-indentation t
224 "*Whether the indentation should be controlled by the syntactic context.
226 If t, the indentation functions indents according to the syntactic
227 context, using the style settings specified by `c-offsets-alist'.
229 If nil, every line is just indented to the same level as the previous
230 one, and the \\[c-indent-command] command adjusts the indentation in steps
231 specified by `c-basic-offset'. The indentation style have no effect
232 in this mode, nor any of the indentation associated variables,
233 e.g. `c-special-indent-hook'."
234 :type 'boolean
235 :group 'c)
237 (defcustom-c-stylevar c-comment-only-line-offset 0
238 "*Extra offset for line which contains only the start of a comment.
239 Can contain an integer or a cons cell of the form:
241 (NON-ANCHORED-OFFSET . ANCHORED-OFFSET)
243 Where NON-ANCHORED-OFFSET is the amount of offset given to
244 non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is
245 the amount of offset to give column-zero anchored comment-only lines.
246 Just an integer as value is equivalent to (<val> . -1000).
248 Note that this variable only has effect when the `c-lineup-comment'
249 lineup function is used on the `comment-intro' syntactic symbol (the
250 default)."
251 :type '(choice (integer :tag "Non-anchored offset" 0)
252 (cons :tag "Non-anchored & anchored offset"
253 :value (0 . 0)
254 :extra-offset 8
255 (integer :tag "Non-anchored offset")
256 (integer :tag "Anchored offset")))
257 :group 'c)
259 (defcustom c-indent-comments-syntactically-p nil
260 "*Specifies how \\[indent-for-comment] should handle comment-only lines.
261 When this variable is non-nil, comment-only lines are indented
262 according to syntactic analysis via `c-offsets-alist'. Otherwise, the
263 comment is indented as if it was preceded by code. Note that this
264 variable does not affect how the normal line indentation treats
265 comment-only lines."
266 :type 'boolean
267 :group 'c)
269 (make-obsolete-variable 'c-comment-continuation-stars
270 'c-block-comment-prefix)
272 ;; Although c-comment-continuation-stars is obsolete, we look at it in
273 ;; some places in CC Mode anyway, so make the compiler ignore it
274 ;; during our compilation.
275 (cc-bytecomp-obsolete-var c-comment-continuation-stars)
276 (cc-bytecomp-defvar c-comment-continuation-stars)
278 (defcustom-c-stylevar c-block-comment-prefix
279 (if (boundp 'c-comment-continuation-stars)
280 c-comment-continuation-stars
281 "* ")
282 "*Specifies the line prefix of continued C-style block comments.
283 You should set this variable to the literal string that gets inserted
284 at the front of continued block style comment lines. This should
285 either be the empty string, or some characters without preceding
286 spaces. To adjust the alignment under the comment starter, put an
287 appropriate value on the `c' syntactic symbol (see the
288 `c-offsets-alist' variable).
290 It's only used when a one-line block comment is broken into two or
291 more lines for the first time; otherwise the appropriate prefix is
292 adapted from the comment. This variable is not used for C++ line
293 style comments."
294 :type 'string
295 :group 'c)
297 (defcustom-c-stylevar c-comment-prefix-regexp
298 '((pike-mode . "//+!?\\|\\**")
299 (other . "//+\\|\\**"))
300 "*Regexp to match the line prefix inside comments.
301 This regexp is used to recognize the fill prefix inside comments for
302 correct paragraph filling and other things.
304 If this variable is a string, it will be used in all CC Mode major
305 modes. It can also be an association list, to associate specific
306 regexps to specific major modes. The symbol for the major mode is
307 looked up in the association list, and its value is used as the line
308 prefix regexp. If it's not found, then the symbol `other' is looked
309 up and its value is used instead.
311 The regexp should match the prefix used in both C++ style line
312 comments and C style block comments, but it does not need to match a
313 block comment starter. In other words, it should at least match
314 \"//\" for line comments and the string in `c-block-comment-prefix',
315 which is sometimes inserted by CC Mode inside block comments. It
316 should not match any surrounding whitespace.
318 Note that CC Mode modifies other variables from this one at mode
319 initialization, so you will need to do \\[c-mode] (or whatever mode
320 you're currently using) if you change it in a CC Mode buffer."
321 :type '(radio
322 (regexp :tag "Regexp for all modes")
323 (list
324 :tag "Mode-specific regexps"
325 (set
326 :inline t :format "%v"
327 (cons :format "%v"
328 (const :format "C " c-mode) (regexp :format "%v"))
329 (cons :format "%v"
330 (const :format "C++ " c++-mode) (regexp :format "%v"))
331 (cons :format "%v"
332 (const :format "ObjC " objc-mode) (regexp :format "%v"))
333 (cons :format "%v"
334 (const :format "Java " java-mode) (regexp :format "%v"))
335 (cons :format "%v"
336 (const :format "IDL " idl-mode) (regexp :format "%v"))
337 (cons :format "%v"
338 (const :format "Pike " pike-mode) (regexp :format "%v")))
339 (cons :format " %v"
340 (const :format "Other " other) (regexp :format "%v"))))
341 :group 'c)
343 (defcustom c-ignore-auto-fill '(string cpp code)
344 "*List of contexts in which automatic filling never occurs.
345 If Auto Fill mode is active, it will be temporarily disabled if point
346 is in any context on this list. It's e.g. useful to enable Auto Fill
347 in comments only, but not in strings or normal code. The valid
348 contexts are:
350 string -- inside a string or character literal
351 c -- inside a C style block comment
352 c++ -- inside a C++ style line comment
353 cpp -- inside a preprocessor directive
354 code -- anywhere else, i.e. in normal code"
355 :type '(set
356 :extra-offset 8
357 (const :tag "String literals" string)
358 (const :tag "C style block comments" c)
359 (const :tag "C++ style line comments" c++)
360 (const :tag "Preprocessor directives" cpp)
361 (const :tag "Normal code" code))
362 :group 'c)
364 (defcustom-c-stylevar c-cleanup-list '(scope-operator)
365 "*List of various C/C++/ObjC constructs to \"clean up\".
366 The following clean ups only take place when the auto-newline feature
367 is turned on, as evidenced by the `/a' or `/ah' appearing next to the
368 mode name:
370 brace-else-brace -- Clean up \"} else {\" constructs by placing
371 entire construct on a single line. This clean
372 up only takes place when there is nothing but
373 white space between the braces and the `else'.
374 Clean up occurs when the open brace after the
375 `else' is typed.
376 brace-elseif-brace -- Similar to brace-else-brace, but clean up
377 \"} else if (...) {\" constructs. Clean up
378 occurs after the open parenthesis and the open
379 brace.
380 brace-catch-brace -- Similar to brace-elseif-brace, but clean up
381 \"} catch (...) {\" constructs.
382 empty-defun-braces -- Clean up empty defun braces by placing the
383 braces on the same line. Clean up occurs when
384 the defun closing brace is typed.
385 defun-close-semi -- Clean up the terminating semi-colon on defuns
386 by placing the semi-colon on the same line as
387 the closing brace. Clean up occurs when the
388 semi-colon is typed.
389 list-close-comma -- Clean up commas following braces in array
390 and aggregate initializers. Clean up occurs
391 when the comma is typed.
392 scope-operator -- Clean up double colons which may designate
393 a C++ scope operator split across multiple
394 lines. Note that certain C++ constructs can
395 generate ambiguous situations. This clean up
396 only takes place when there is nothing but
397 whitespace between colons. Clean up occurs
398 when the second colon is typed.
400 The following clean ups always take place when they are on this list,
401 regardless of the auto-newline feature, since they typically don't
402 involve auto-newline inserted newlines:
404 space-before-funcall -- Insert exactly one space before the opening
405 parenthesis of a function call. Clean up
406 occurs when the opening parenthesis is typed.
407 compact-empty-funcall -- Clean up any space before the function call
408 opening parenthesis if and only if the
409 argument list is empty. This is typically
410 useful together with `space-before-funcall' to
411 get the style \"foo (bar)\" and \"foo()\".
412 Clean up occurs when the closing parenthesis
413 is typed."
414 :type '(set
415 :extra-offset 8
416 (const :tag "Put \"} else {\" on one line"
417 brace-else-brace)
418 (const :tag "Put \"} else if (...) {\" on one line"
419 brace-elseif-brace)
420 (const :tag "Put \"} catch (...) {\" on one line"
421 brace-catch-brace)
422 (const :tag "Put empty defun braces on one line"
423 empty-defun-braces)
424 (const :tag "Put \"};\" ending defuns on one line"
425 defun-close-semi)
426 (const :tag "Put \"},\" in aggregates on one line"
427 list-close-comma)
428 (const :tag "Put C++ style \"::\" on one line"
429 scope-operator)
430 (const :tag "Put a space before funcall parens, e.g. \"foo (bar)\""
431 space-before-funcall)
432 (const :tag "Remove space before empty funcalls, e.g. \"foo()\""
433 compact-empty-funcall))
434 :group 'c)
436 (defcustom-c-stylevar c-hanging-braces-alist '((brace-list-open)
437 (brace-entry-open)
438 (substatement-open after)
439 (block-close . c-snug-do-while)
440 (extern-lang-open after)
441 (inexpr-class-open after)
442 (inexpr-class-close before))
443 "*Controls the insertion of newlines before and after braces
444 when the auto-newline feature is active. This variable contains an
445 association list with elements of the following form:
446 \(SYNTACTIC-SYMBOL . ACTION).
448 When a brace (either opening or closing) is inserted, the syntactic
449 context it defines is looked up in this list, and if found, the
450 associated ACTION is used to determine where newlines are inserted.
451 If the context is not found, the default is to insert a newline both
452 before and after the brace.
454 SYNTACTIC-SYMBOL can be any of: defun-open, defun-close, class-open,
455 class-close, inline-open, inline-close, block-open, block-close,
456 substatement-open, statement-case-open, extern-lang-open,
457 extern-lang-close, brace-list-open, brace-list-close,
458 brace-list-intro, brace-entry-open, namespace-open, namespace-close,
459 inexpr-class-open, or inexpr-class-close. See `c-offsets-alist' for
460 details, except for inexpr-class-open and inexpr-class-close, which
461 doesn't have any corresponding symbols there. Those two symbols are
462 used for the opening and closing braces, respectively, of anonymous
463 inner classes in Java.
465 ACTION can be either a function symbol or a list containing any
466 combination of the symbols `before' or `after'. If the list is empty,
467 no newlines are inserted either before or after the brace.
469 When ACTION is a function symbol, the function is called with a two
470 arguments: the syntactic symbol for the brace and the buffer position
471 at which the brace was inserted. The function must return a list as
472 described in the preceding paragraph. Note that during the call to
473 the function, the variable `c-syntactic-context' is set to the entire
474 syntactic context for the brace line."
475 :type
476 `(set ,@(mapcar
477 (lambda (elt)
478 `(cons :format "%v"
479 (c-const-symbol :format "%v: "
480 :size 20
481 :value ,elt)
482 (choice :format "%[Choice%] %v"
483 :value (before after)
484 (set :menu-tag "Before/after"
485 :format "Newline %v brace\n"
486 (const :format "%v, " before)
487 (const :format "%v" after))
488 (function :menu-tag "Function"
489 :format "Run function: %v"
490 :value c-))))
491 '(defun-open defun-close
492 class-open class-close
493 inline-open inline-close
494 block-open block-close
495 substatement-open statement-case-open
496 extern-lang-open extern-lang-close
497 brace-list-open brace-list-close
498 brace-list-intro brace-entry-open
499 namespace-open namespace-close
500 inexpr-class-open inexpr-class-close)))
501 :group 'c)
503 (defcustom-c-stylevar c-hanging-colons-alist nil
504 "*Controls the insertion of newlines before and after certain colons.
505 This variable contains an association list with elements of the
506 following form: (SYNTACTIC-SYMBOL . ACTION).
508 SYNTACTIC-SYMBOL can be any of: case-label, label, access-label,
509 member-init-intro, or inher-intro.
511 See the variable `c-hanging-braces-alist' for the semantics of this
512 variable. Note however that making ACTION a function symbol is
513 currently not supported for this variable."
514 :type
515 `(set ,@(mapcar
516 (lambda (elt)
517 `(cons :format "%v"
518 (c-const-symbol :format "%v: "
519 :size 20
520 :value ,elt)
521 (set :format "Newline %v brace\n"
522 (const :format "%v, " before)
523 (const :format "%v" after))))
524 '(case-label label access-label member-init-intro inher-intro)))
525 :group 'c)
527 (defcustom-c-stylevar c-hanging-semi&comma-criteria
528 '(c-semi&comma-inside-parenlist)
529 "*List of functions that decide whether to insert a newline or not.
530 The functions in this list are called, in order, whenever the
531 auto-newline minor mode is activated (as evidenced by a `/a' or `/ah'
532 string in the mode line), and a semicolon or comma is typed (see
533 `c-electric-semi&comma'). Each function in this list is called with
534 no arguments, and should return one of the following values:
536 nil -- no determination made, continue checking
537 'stop -- do not insert a newline, and stop checking
538 (anything else) -- insert a newline, and stop checking
540 If every function in the list is called with no determination made,
541 then no newline is inserted."
542 :type '(repeat function)
543 :group 'c)
545 (defcustom-c-stylevar c-backslash-column 48
546 "*Column to insert backslashes when macroizing a region."
547 :type 'integer
548 :group 'c)
550 (defcustom c-special-indent-hook nil
551 "*Hook for user defined special indentation adjustments.
552 This hook gets called after a line is indented by the mode."
553 :type 'hook
554 :group 'c)
556 (defcustom c-backspace-function 'backward-delete-char-untabify
557 "*Function called by `c-electric-backspace' when deleting backwards."
558 :type 'function
559 :group 'c)
561 (defcustom c-delete-function 'delete-char
562 "*Function called by `c-electric-delete' when deleting forwards."
563 :type 'function
564 :group 'c)
566 (defcustom c-electric-pound-behavior nil
567 "*List of behaviors for electric pound insertion.
568 Only currently supported behavior is `alignleft'."
569 :type '(set :extra-offset 8 (const alignleft))
570 :group 'c)
572 (defcustom-c-stylevar c-label-minimum-indentation 1
573 "*Minimum indentation for lines inside of top-level constructs.
574 This variable typically only affects code using the `gnu' style, which
575 mandates a minimum of one space in front of every line inside
576 top-level constructs. Specifically, the function
577 `c-gnu-impose-minimum' on your `c-special-indent-hook' is what
578 enforces this."
579 :type 'integer
580 :group 'c)
582 (defcustom c-progress-interval 5
583 "*Interval used to update progress status during long re-indentation.
584 If a number, percentage complete gets updated after each interval of
585 that many seconds. To inhibit all messages during indentation, set
586 this variable to nil."
587 :type 'integer
588 :group 'c)
590 (defcustom c-default-style '((java-mode . "java") (other . "gnu"))
591 "*Style which gets installed by default when a file is visited.
593 The value of this variable can be any style defined in
594 `c-style-alist', including styles you add. The value can also be an
595 association list of major mode symbols to style names.
597 When the value is a string, all CC Mode major modes will install this
598 style by default.
600 When the value is an alist, the major mode symbol is looked up in it
601 and the associated style is installed. If the major mode is not
602 listed in the alist, then the symbol `other' is looked up in it, and
603 if found, the style in that entry is used. If `other' is not found in
604 the alist, then \"gnu\" style is used.
606 The default style gets installed before your mode hooks run, so you
607 can always override the use of `c-default-style' by making calls to
608 `c-set-style' in the appropriate mode hook."
609 :type '(radio
610 (string :tag "Style in all modes")
611 (set :tag "Mode-specific styles"
612 (cons :format "%v"
613 (const :format "C " c-mode) (string :format "%v"))
614 (cons :format "%v"
615 (const :format "C++ " c++-mode) (string :format "%v"))
616 (cons :format "%v"
617 (const :format "ObjC " objc-mode) (string :format "%v"))
618 (cons :format "%v"
619 (const :format "Java " java-mode) (string :format "%v"))
620 (cons :format "%v"
621 (const :format "IDL " idl-mode) (string :format "%v"))
622 (cons :format "%v"
623 (const :format "Pike " pike-mode) (string :format "%v"))
624 (cons :format "%v"
625 (const :format "Other " other) (string :format "%v"))))
626 :group 'c)
628 (put 'c-offsets-alist 'c-stylevar-fallback
629 '((string . c-lineup-dont-change)
630 ;; Relpos: Beg of previous line.
631 (c . c-lineup-C-comments)
632 ;; Relpos: Beg of the comment.
633 (defun-open . 0)
634 ;; Relpos: Boi at the func decl start when inside classes, bol
635 ;; at the func decl start when at top level.
636 (defun-close . 0)
637 ;; Relpos: Boi at the func decl start.
638 (defun-block-intro . +)
639 ;; Relpos: Boi at the block open.
640 (class-open . 0)
641 ;; Relpos: Boi at the class decl start.
642 (class-close . 0)
643 ;; Relpos: Boi at the class decl start.
644 (inline-open . +)
645 ;; Relpos: None for functions (inclass got the relpos then),
646 ;; boi at the lambda start for lambdas.
647 (inline-close . 0)
648 ;; Relpos: For functions: Boi at the func decl start. For
649 ;; lambdas: At the block open if it's at boi, at the boi of the
650 ;; lambda start otherwise.
651 (func-decl-cont . +)
652 ;; Relpos: Boi at the func decl start.
653 (knr-argdecl-intro . +)
654 ;; Relpos: Boi at the current line.
655 (knr-argdecl . 0)
656 ;; Relpos: Boi at the argdecl intro line.
657 (topmost-intro . 0)
658 ;; Relpos: Bol at the last line of previous construct.
659 (topmost-intro-cont . 0)
660 ;; Relpos: Boi at the topmost intro line.
661 (member-init-intro . +)
662 ;; Relpos: Boi at the func decl arglist open.
663 (member-init-cont . c-lineup-multi-inher)
664 ;; Relpos: Beg of the first member init.
665 (inher-intro . +)
666 ;; Relpos: Java: Boi at the class decl start. Otherwise: Boi
667 ;; of current line (a bug?), unless it begins with an inher
668 ;; start colon, in which case boi of previous line is used.
669 (inher-cont . c-lineup-multi-inher)
670 ;; Relpos: Java: At the implements/extends keyword start.
671 ;; Otherwise: At the inher start colon, or boi at the class
672 ;; decl start if the first inherit clause hangs and it's not a
673 ;; func-local inherit clause (when does that occur?).
674 (block-open . 0)
675 ;; Relpos: Inexpr statement: Boi at the the preceding
676 ;; paren. Otherwise: None.
677 (block-close . 0)
678 ;; Relpos: At the open brace if it's at boi. Otherwise boi at
679 ;; the start of the statement the open brace hangs on, or boi
680 ;; at the preceding paren for inexpr statements.
681 (brace-list-open . 0)
682 ;; Relpos: Boi at the brace list decl start, but a starting
683 ;; "typedef" token is ignored.
684 (brace-list-close . 0)
685 ;; Relpos: Boi at the brace list open.
686 (brace-list-intro . +)
687 ;; Relpos: Boi at the brace list open.
688 (brace-list-entry . 0)
689 ;; Relpos: At the first non-ws char after the open paren if the
690 ;; first token is on the same line, otherwise boi at that
691 ;; token.
692 (brace-entry-open . 0)
693 ;; Relpos: Same as brace-list-entry.
694 (statement . 0)
695 ;; Relpos: After a ';' in the condition clause of a for
696 ;; statement: At the first token after the starting paren.
697 ;; Otherwise: Boi at the start of the closest non-hanging
698 ;; previous statement, but after any switch label.
699 (statement-cont . +)
700 ;; Relpos: After the first token in the condition clause of a
701 ;; for statement: At the first token after the starting paren.
702 ;; On the first line in a continued expression that starts with
703 ;; a stream op and there's no stream op on the previous line:
704 ;; Boi of previous line. Otherwise: Boi at the beginning of
705 ;; the statement, but after any type of label.
706 (statement-block-intro . +)
707 ;; Relpos: At the block start if it's at boi, otherwise boi at
708 ;; the start of the statement the open brace hangs on, or boi
709 ;; at the preceding paren for inexpr statements.
710 (statement-case-intro . +)
711 ;; Relpos: At the label keyword (always at boi).
712 (statement-case-open . 0)
713 ;; Relpos: At the label keyword (always at boi).
714 (substatement . +)
715 ;; Relpos: Boi at the containing statement or else clause.
716 (substatement-open . +)
717 ;; Relpos: Boi at the containing statement or else clause.
718 (case-label . 0)
719 ;; Relpos: At the switch block start if it's at boi, otherwise
720 ;; boi at the start of the switch condition clause.
721 (access-label . -)
722 ;; Relpos: Eol (a bug?).
723 (label . 2)
724 ;; Relpos: At the start of the containing block if it's at boi,
725 ;; otherwise boi at the start of the sexp before the block.
726 (do-while-closure . 0)
727 ;; Relpos: Boi at the corresponding while keyword.
728 (else-clause . 0)
729 ;; Relpos: Boi at the corresponding if keyword.
730 (catch-clause . 0)
731 ;; Relpos: Boi at the previous try or catch keyword in the try
732 ;; statement.
733 (comment-intro . c-lineup-comment)
734 ;; Relpos: None.
735 (arglist-intro . +)
736 ;; Relpos: Boi at the open paren, or at the first non-ws after
737 ;; the open paren of the surrounding sexp, whichever is later.
738 (arglist-cont . 0)
739 ;; Relpos: At the first token after the open paren.
740 (arglist-cont-nonempty . c-lineup-arglist)
741 ;; Relpos: Boi at the open paren, or at the first non-ws after
742 ;; the open paren of the surrounding sexp, whichever is later.
743 (arglist-close . +)
744 ;; Relpos: Boi at the open paren, or at the first non-ws after
745 ;; the open paren of the surrounding sexp, whichever is later.
746 (stream-op . c-lineup-streamop)
747 ;; Relpos: Boi at the first stream op in the statement.
748 (inclass . +)
749 ;; Relpos: At the class open brace if it's at boi, otherwise
750 ;; boi at the class decl start.
751 (cpp-macro . [0])
752 ;; Relpos: None.
753 (cpp-macro-cont . c-lineup-dont-change)
754 ;; Relpos: At the macro start (always at boi).
755 (friend . 0)
756 ;; Relpos: None.
757 (objc-method-intro . [0])
758 ;; Relpos: Boi.
759 (objc-method-args-cont . c-lineup-ObjC-method-args)
760 ;; Relpos: At the method start (always at boi).
761 (objc-method-call-cont . c-lineup-ObjC-method-call)
762 ;; Relpos: At the open bracket.
763 (extern-lang-open . 0)
764 ;; Relpos: Boi at the extern keyword.
765 (extern-lang-close . 0)
766 ;; Relpos: Boi at the corresponding extern keyword.
767 (inextern-lang . +)
768 ;; Relpos: At the extern block open brace if it's at boi,
769 ;; otherwise boi at the extern keyword.
770 (namespace-open . 0)
771 ;; Relpos: Boi at the namespace keyword.
772 (namespace-close . 0)
773 ;; Relpos: Boi at the corresponding namespace keyword.
774 (innamespace . +)
775 ;; Relpos: At the namespace block open brace if it's at boi,
776 ;; otherwise boi at the namespace keyword.
777 (template-args-cont . (c-lineup-template-args +))
778 ;; Relpos: Boi at the decl start.
779 (inlambda . c-lineup-inexpr-block)
780 ;; Relpos: None.
781 (lambda-intro-cont . +)
782 ;; Relpos: Boi at the lambda start.
783 (inexpr-statement . 0)
784 ;; Relpos: None.
785 (inexpr-class . +)
786 ;; Relpos: None.
788 (defcustom c-offsets-alist nil
789 "Association list of syntactic element symbols and indentation offsets.
790 As described below, each cons cell in this list has the form:
792 (SYNTACTIC-SYMBOL . OFFSET)
794 When a line is indented, CC Mode first determines the syntactic
795 context of it by generating a list of symbols called syntactic
796 elements. This list can contain more than one syntactic element and
797 the global variable `c-syntactic-context' contains the context list
798 for the line being indented. Each element in this list is actually a
799 cons cell of the syntactic symbol and a buffer position. This buffer
800 position is called the relative indent point for the line. Some
801 syntactic symbols may not have a relative indent point associated with
802 them.
804 After the syntactic context list for a line is generated, CC Mode
805 calculates the absolute indentation for the line by looking at each
806 syntactic element in the list. It compares the syntactic element
807 against the SYNTACTIC-SYMBOL's in `c-offsets-alist'. When it finds a
808 match, it adds the OFFSET to the column of the relative indent point.
809 The sum of this calculation for each element in the syntactic list is
810 the absolute offset for line being indented.
812 If the syntactic element does not match any in the `c-offsets-alist',
813 the element is ignored.
815 If OFFSET is nil, the syntactic element is ignored in the offset
816 calculation.
818 If OFFSET is an integer, it's added to the relative indent.
820 If OFFSET is one of the symbols `+', `-', `++', `--', `*', or `/', a
821 positive or negative multiple of `c-basic-offset' is added; 1, -1, 2,
822 -2, 0.5, and -0.5, respectively.
824 If OFFSET is a vector, it's first element, which must be an integer,
825 is used as an absolute indentation column. This overrides all
826 relative offsets. If there are several syntactic elements which
827 evaluates to absolute indentation columns, the first one takes
828 precedence. You can see in which order CC Mode combines the syntactic
829 elements in a certain context by using \\[c-show-syntactic-information] on the line.
831 If OFFSET is a function, it's called with a single argument
832 containing the cons of the syntactic element symbol and the relative
833 indent point. The return value from the function is then
834 reinterpreted as an OFFSET value.
836 If OFFSET is a list, it's recursively evaluated using the semantics
837 described above. The first element of the list to return a non-nil
838 value succeeds. If none of the elements returns a non-nil value, the
839 syntactic element is ignored.
841 `c-offsets-alist' is a style variable. This means that the offsets on
842 this variable are normally taken from the style system in CC Mode
843 \(see `c-default-style' and `c-styles-alist'). However, any offsets
844 put explicitly on this list will override the style system when a CC
845 Mode buffer is initialized \(there is a variable
846 `c-old-style-variable-behavior' that changes this, though).
848 Here is the current list of valid syntactic element symbols:
850 string -- Inside multi-line string.
851 c -- Inside a multi-line C style block comment.
852 defun-open -- Brace that opens a function definition.
853 defun-close -- Brace that closes a function definition.
854 defun-block-intro -- The first line in a top-level defun.
855 class-open -- Brace that opens a class definition.
856 class-close -- Brace that closes a class definition.
857 inline-open -- Brace that opens an in-class inline method.
858 inline-close -- Brace that closes an in-class inline method.
859 func-decl-cont -- The region between a function definition's
860 argument list and the function opening brace
861 (excluding K&R argument declarations). In C, you
862 cannot put anything but whitespace and comments
863 between them; in C++ and Java, throws declarations
864 and other things can appear in this context.
865 knr-argdecl-intro -- First line of a K&R C argument declaration.
866 knr-argdecl -- Subsequent lines in a K&R C argument declaration.
867 topmost-intro -- The first line in a topmost construct definition.
868 topmost-intro-cont -- Topmost definition continuation lines.
869 member-init-intro -- First line in a member initialization list.
870 member-init-cont -- Subsequent member initialization list lines.
871 inher-intro -- First line of a multiple inheritance list.
872 inher-cont -- Subsequent multiple inheritance lines.
873 block-open -- Statement block open brace.
874 block-close -- Statement block close brace.
875 brace-list-open -- Open brace of an enum or static array list.
876 brace-list-close -- Close brace of an enum or static array list.
877 brace-list-intro -- First line in an enum or static array list.
878 brace-list-entry -- Subsequent lines in an enum or static array list.
879 brace-entry-open -- Subsequent lines in an enum or static array
880 list that start with an open brace.
881 statement -- A C (or like) statement.
882 statement-cont -- A continuation of a C (or like) statement.
883 statement-block-intro -- The first line in a new statement block.
884 statement-case-intro -- The first line in a case \"block\".
885 statement-case-open -- The first line in a case block starting with brace.
886 substatement -- The first line after an if/while/for/do/else.
887 substatement-open -- The brace that opens a substatement block.
888 case-label -- A `case' or `default' label.
889 access-label -- C++ private/protected/public access label.
890 label -- Any ordinary label.
891 do-while-closure -- The `while' that ends a do/while construct.
892 else-clause -- The `else' of an if/else construct.
893 catch-clause -- The `catch' or `finally' of a try/catch construct.
894 comment-intro -- A line containing only a comment introduction.
895 arglist-intro -- The first line in an argument list.
896 arglist-cont -- Subsequent argument list lines when no
897 arguments follow on the same line as the
898 arglist opening paren.
899 arglist-cont-nonempty -- Subsequent argument list lines when at
900 least one argument follows on the same
901 line as the arglist opening paren.
902 arglist-close -- The solo close paren of an argument list.
903 stream-op -- Lines continuing a stream operator construct.
904 inclass -- The construct is nested inside a class definition.
905 Used together with e.g. `topmost-intro'.
906 cpp-macro -- The start of a C preprocessor macro definition.
907 cpp-macro-cont -- Subsequent lines in a multi-line C preprocessor
908 macro definition.
909 friend -- A C++ friend declaration.
910 objc-method-intro -- The first line of an Objective-C method definition.
911 objc-method-args-cont -- Lines continuing an Objective-C method definition.
912 objc-method-call-cont -- Lines continuing an Objective-C method call.
913 extern-lang-open -- Brace that opens an external language block.
914 extern-lang-close -- Brace that closes an external language block.
915 inextern-lang -- Analogous to the `inclass' syntactic symbol,
916 but used inside extern constructs.
917 namespace-open -- Brace that opens a C++ namespace block.
918 namespace-close -- Brace that closes a C++ namespace block.
919 innamespace -- Analogous to the `inextern-lang' syntactic
920 symbol, but used inside C++ namespace constructs.
921 template-args-cont -- C++ template argument list continuations.
922 inlambda -- In the header or body of a lambda function.
923 lambda-intro-cont -- Continuation of the header of a lambda function.
924 inexpr-statement -- The statement is inside an expression.
925 inexpr-class -- The class is inside an expression. Used e.g. for
926 Java anonymous classes."
927 :type
928 `(set :format "%{%t%}:
929 Override style setting
930 | Syntax Offset
932 ,@(mapcar
933 (lambda (elt)
934 `(cons :format "%v"
935 :value ,elt
936 (c-const-symbol :format "%v: "
937 :size 25)
938 (sexp :format "%v"
939 :validate
940 (lambda (widget)
941 (unless (c-valid-offset (widget-value widget))
942 (widget-put widget :error "Invalid offset")
943 widget)))))
944 (get 'c-offsets-alist 'c-stylevar-fallback)))
945 :group 'c)
947 (defcustom c-style-variables-are-local-p t
948 "*Whether style variables should be buffer local by default.
949 If non-nil, then all indentation style related variables will be made
950 buffer local by default. If nil, they will remain global. Variables
951 are made buffer local when this file is loaded, and once buffer
952 localized, they cannot be made global again.
954 The list of variables to buffer localize are:
955 c-offsets-alist
956 c-basic-offset
957 c-comment-only-line-offset
958 c-block-comment-prefix
959 c-comment-prefix-regexp
960 c-cleanup-list
961 c-hanging-braces-alist
962 c-hanging-colons-alist
963 c-hanging-semi&comma-criteria
964 c-backslash-column
965 c-label-minimum-indentation
966 c-special-indent-hook
967 c-indentation-style"
968 :type 'boolean
969 :group 'c)
971 (defcustom c-mode-hook nil
972 "*Hook called by `c-mode'."
973 :type 'hook
974 :group 'c)
976 (defcustom c++-mode-hook nil
977 "*Hook called by `c++-mode'."
978 :type 'hook
979 :group 'c)
981 (defcustom objc-mode-hook nil
982 "*Hook called by `objc-mode'."
983 :type 'hook
984 :group 'c)
986 (defcustom java-mode-hook nil
987 "*Hook called by `java-mode'."
988 :type 'hook
989 :group 'c)
991 (defcustom idl-mode-hook nil
992 "*Hook called by `idl-mode'."
993 :type 'hook
994 :group 'c)
996 (defcustom pike-mode-hook nil
997 "*Hook called by `pike-mode'."
998 :type 'hook
999 :group 'c)
1001 (defcustom c-mode-common-hook nil
1002 "*Hook called by all CC Mode modes for common initializations."
1003 :type '(hook :format "%{CC Mode Common Hook%}:\n%v")
1004 :group 'c)
1006 (defcustom c-initialization-hook nil
1007 "*Hook called when the CC Mode package gets initialized.
1008 This hook is only run once per Emacs session and can be used as a
1009 `load-hook' or in place of using `eval-after-load'."
1010 :type 'hook
1011 :group 'c)
1013 (defcustom c-enable-xemacs-performance-kludge-p nil
1014 "*Enables a XEmacs only hack that may improve speed for some coding styles.
1015 For styles that hang top-level opening braces (as is common with JDK
1016 Java coding styles) this can improve performance between 3 and 60
1017 times for core indentation functions (e.g. `c-parse-state'). For
1018 styles that conform to the Emacs recommendation of putting these
1019 braces in column zero, this can degrade performance about as much.
1020 This variable only has effect in XEmacs.")
1022 (defcustom c-old-style-variable-behavior nil
1023 "*Enables the old style variable behavior when non-nil.
1025 Normally the values of the style variables will override the style
1026 settings specified by the variables `c-default-style' and
1027 `c-styles-alist'. However, in CC Mode 5.25 and earlier, it was the
1028 other way around, meaning that changes made to the style variables
1029 from e.g. Customize would not take effect unless special precautions
1030 were taken. That was confusing, especially for novice users.
1032 It's believed that despite this change, the new behavior will still
1033 produce the same results for most old CC Mode configurations, since
1034 all style variables are per default set in a special non-override
1035 state. Set this variable only if your configuration has stopped
1036 working due to this change.")
1040 ;; Non-customizable variables, still part of the interface to CC Mode
1041 (defvar c-file-style nil
1042 "Variable interface for setting style via File Local Variables.
1043 In a file's Local Variable section, you can set this variable to a
1044 string suitable for `c-set-style'. When the file is visited, CC Mode
1045 will set the style of the file to this value automatically.
1047 Note that file style settings are applied before file offset settings
1048 as designated in the variable `c-file-offsets'.")
1049 (make-variable-buffer-local 'c-file-style)
1051 (defvar c-file-offsets nil
1052 "Variable interface for setting offsets via File Local Variables.
1053 In a file's Local Variable section, you can set this variable to an
1054 association list similar to the values allowed in `c-offsets-alist'.
1055 When the file is visited, CC Mode will institute these offset settings
1056 automatically.
1058 Note that file offset settings are applied after file style settings
1059 as designated in the variable `c-file-style'.")
1060 (make-variable-buffer-local 'c-file-offsets)
1062 (defvar c-syntactic-context nil
1063 "Variable containing syntactic analysis list during indentation.
1064 This is always bound dynamically. It should never be set statically
1065 (e.g. with `setq').")
1067 (defvar c-indentation-style nil
1068 "Name of the currently installed style.
1069 Don't change this directly; call `c-set-style' instead.")
1071 (defvar c-current-comment-prefix nil
1072 "The current comment prefix regexp.
1073 Set from `c-comment-prefix-regexp' at mode initialization.")
1074 (make-variable-buffer-local 'c-current-comment-prefix)
1077 ;; Figure out what features this Emacs has
1078 ;;;###autoload
1079 (defconst c-emacs-features
1080 (let ((infodock-p (boundp 'infodock-version))
1081 (comments
1082 ;; XEmacs 19 and beyond use 8-bit modify-syntax-entry flags.
1083 ;; Emacs 19 uses a 1-bit flag. We will have to set up our
1084 ;; syntax tables differently to handle this.
1085 (let ((table (copy-syntax-table))
1086 entry)
1087 (modify-syntax-entry ?a ". 12345678" table)
1088 (cond
1089 ;; XEmacs 19, and beyond Emacs 19.34
1090 ((arrayp table)
1091 (setq entry (aref table ?a))
1092 ;; In Emacs, table entries are cons cells
1093 (if (consp entry) (setq entry (car entry))))
1094 ;; XEmacs 20
1095 ((fboundp 'get-char-table) (setq entry (get-char-table ?a table)))
1096 ;; before and including Emacs 19.34
1097 ((and (fboundp 'char-table-p)
1098 (char-table-p table))
1099 (setq entry (car (char-table-range table [?a]))))
1100 ;; incompatible
1101 (t (error "CC Mode is incompatible with this version of Emacs")))
1102 (if (= (logand (lsh entry -16) 255) 255)
1103 '8-bit
1104 '1-bit))))
1105 (if infodock-p
1106 (list comments 'infodock)
1107 (list comments)))
1108 "A list of features extant in the Emacs you are using.
1109 There are many flavors of Emacs out there, each with different
1110 features supporting those needed by CC Mode. Here's the current
1111 supported list, along with the values for this variable:
1113 XEmacs 19, 20, 21: (8-bit)
1114 Emacs 19, 20: (1-bit)
1116 Infodock (based on XEmacs) has an additional symbol on this list:
1117 `infodock'.")
1120 (cc-provide 'cc-vars)
1122 ;;; cc-vars.el ends here