Configure Symbola font only for symbols and punctuation
[emacs.git] / lisp / progmodes / cc-vars.el
blob022bc225c9f05fb92754c03fbfe9dec0bb2506fa
1 ;;; cc-vars.el --- user customization variables for CC Mode
3 ;; Copyright (C) 1985, 1987, 1992-2015 Free Software Foundation, Inc.
5 ;; Authors: 2002- Alan Mackenzie
6 ;; 1998- Martin Stjernholm
7 ;; 1992-1999 Barry A. Warsaw
8 ;; 1987 Dave Detlefs
9 ;; 1987 Stewart Clamen
10 ;; 1985 Richard M. Stallman
11 ;; Maintainer: bug-cc-mode@gnu.org
12 ;; Created: 22-Apr-1997 (split from cc-mode.el)
13 ;; Keywords: c languages
14 ;; Package: cc-mode
16 ;; This file is part of GNU Emacs.
18 ;; GNU Emacs is free software: you can redistribute it and/or modify
19 ;; it under the terms of the GNU General Public License as published by
20 ;; the Free Software Foundation, either version 3 of the License, or
21 ;; (at your option) any later version.
23 ;; GNU Emacs is distributed in the hope that it will be useful,
24 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
25 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 ;; GNU General Public License for more details.
28 ;; You should have received a copy of the GNU General Public License
29 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
31 ;;; Commentary:
33 ;;; Code:
35 (eval-when-compile
36 (let ((load-path
37 (if (and (boundp 'byte-compile-dest-file)
38 (stringp byte-compile-dest-file))
39 (cons (file-name-directory byte-compile-dest-file) load-path)
40 load-path)))
41 (load "cc-bytecomp" nil t)))
43 (cc-require 'cc-defs)
45 (cc-eval-when-compile
46 (require 'custom)
47 (require 'widget))
49 ;;; Helpers
52 ;; Emacs has 'other since at least version 21.1.
53 ;; FIXME this is probably broken, since the widget is defined
54 ;; in wid-edit, which this file does not load. So we will always
55 ;; define the widget, even when we don't need to.
56 (when (featurep 'xemacs)
57 (or (get 'other 'widget-type)
58 (define-widget 'other 'sexp
59 "Matches everything, but doesn't let the user edit the value.
60 Useful as last item in a `choice' widget."
61 :tag "Other"
62 :format "%t%n"
63 :value 'other)))
65 ;; The next defun will supersede c-const-symbol.
66 (eval-and-compile
67 (defun c-constant-symbol (sym len)
68 "Create an uneditable symbol for customization buffers.
69 SYM is the name of the symbol, LEN the length of the field (in
70 characters) the symbol will be displayed in. LEN must be big
71 enough.
73 This returns a (const ....) structure, suitable for embedding
74 within a customization type."
75 (or (symbolp sym) (error "c-constant-symbol: %s is not a symbol" sym))
76 (let* ((name (symbol-name sym))
77 (l (length name))
78 (disp (concat name ":" (make-string (- len l 1) ?\ ))))
79 `(const
80 :size ,len
81 :format ,disp
82 :value ,sym))))
84 (define-widget 'c-const-symbol 'item
85 "An uneditable lisp symbol. This is obsolete -
86 use c-constant-symbol instead."
87 :value nil
88 :tag "Symbol"
89 :format "%t: %v\n%d"
90 :match (lambda (widget value) (symbolp value))
91 :value-to-internal
92 (lambda (widget value)
93 (let ((s (if (symbolp value)
94 (symbol-name value)
95 value))
96 (l (widget-get widget :size)))
97 (if l
98 (setq s (concat s (make-string (- l (length s)) ?\ ))))
99 s))
100 :value-to-external
101 (lambda (widget value)
102 (if (stringp value)
103 (intern (progn
104 (string-match "\\`[^ ]*" value)
105 (match-string 0 value)))
106 value)))
108 (define-widget 'c-integer-or-nil 'sexp
109 "An integer or the value nil."
110 :value nil
111 :tag "Optional integer"
112 :match (lambda (widget value) (or (integerp value) (null value))))
114 (define-widget 'c-symbol-list 'sexp
115 "A single symbol or a list of symbols."
116 :tag "Symbols separated by spaces"
117 :validate 'widget-field-validate
118 :match
119 (lambda (widget value)
120 (or (symbolp value)
121 (catch 'ok
122 (while (listp value)
123 (unless (symbolp (car value))
124 (throw 'ok nil))
125 (setq value (cdr value)))
126 (null value))))
127 :value-to-internal
128 (lambda (widget value)
129 (cond ((null value)
131 ((symbolp value)
132 (symbol-name value))
133 ((consp value)
134 (mapconcat (lambda (symbol)
135 (symbol-name symbol))
136 value
137 " "))
139 value)))
140 :value-to-external
141 (lambda (widget value)
142 (if (stringp value)
143 (let (list end)
144 (while (string-match "\\S +" value end)
145 (setq list (cons (intern (match-string 0 value)) list)
146 end (match-end 0)))
147 (if (and list (not (cdr list)))
148 (car list)
149 (nreverse list)))
150 value)))
152 (defvar c-style-variables
153 '(c-basic-offset c-comment-only-line-offset c-indent-comment-alist
154 c-indent-comments-syntactically-p c-block-comment-prefix
155 c-comment-prefix-regexp c-doc-comment-style c-cleanup-list
156 c-hanging-braces-alist c-hanging-colons-alist
157 c-hanging-semi&comma-criteria c-backslash-column c-backslash-max-column
158 c-special-indent-hook c-label-minimum-indentation c-offsets-alist)
159 "List of the style variables.")
161 (defvar c-fallback-style nil)
163 (defsubst c-set-stylevar-fallback (name val)
164 (put name 'c-stylevar-fallback val)
165 (setq c-fallback-style (cons (cons name val) c-fallback-style)))
167 (defmacro defcustom-c-stylevar (name val doc &rest args)
168 "Define a style variable NAME with VAL and DOC.
169 More precisely, convert the given `:type FOO', mined out of ARGS,
170 to an aggregate `:type (radio STYLE (PREAMBLE FOO))', append some
171 some boilerplate documentation to DOC, arrange for the fallback
172 value of NAME to be VAL, and call `custom-declare-variable' to
173 do the rest of the work.
175 STYLE stands for the choice where the value is taken from some
176 style setting. PREAMBLE is optionally prepended to FOO; that is,
177 if FOO contains :tag or :value, the respective two-element list
178 component is ignored."
179 (declare (debug (symbolp form stringp &rest)))
180 (let* ((expanded-doc (concat doc "
182 This is a style variable. Apart from the valid values described
183 above, it can be set to the symbol `set-from-style'. In that case,
184 it takes its value from the style system (see `c-default-style' and
185 `c-style-alist') when a CC Mode buffer is initialized. Otherwise,
186 the value set here overrides the style system (there is a variable
187 `c-old-style-variable-behavior' that changes this, though)."))
188 (typ (eval (plist-get args :type)))
189 (type (if (consp typ) typ (list typ)))
190 (head (car type))
191 (tail (cdr type))
192 (newt (append (unless (plist-get tail :tag)
193 '(:tag "Override style settings"))
194 (unless (plist-get tail :value)
195 `(:value ,(eval val)))
196 tail))
197 (aggregate `'(radio
198 (const :tag "Use style settings" set-from-style)
199 ,(cons head newt))))
200 `(progn
201 (c-set-stylevar-fallback ',name ,val)
202 (custom-declare-variable
203 ',name ''set-from-style
204 ,expanded-doc
205 ,@(plist-put args :type aggregate)))))
207 (defun c-valid-offset (offset)
208 "Return non-nil if OFFSET is a valid offset for a syntactic symbol.
209 See `c-offsets-alist'."
210 (or (eq offset '+)
211 (eq offset '-)
212 (eq offset '++)
213 (eq offset '--)
214 (eq offset '*)
215 (eq offset '/)
216 (integerp offset)
217 (functionp offset)
218 (and (symbolp offset) (boundp offset))
219 (and (vectorp offset)
220 (= (length offset) 1)
221 (integerp (elt offset 0)))
222 (and (consp offset)
223 (not (eq (car offset) 'quote)) ; Detect misquoted lists.
224 (progn
225 (when (memq (car offset) '(first min max add))
226 (setq offset (cdr offset)))
227 (while (and (consp offset)
228 (c-valid-offset (car offset)))
229 (setq offset (cdr offset)))
230 (null offset)))))
234 ;;; User variables
236 (defcustom c-strict-syntax-p nil
237 "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'.
238 If the syntactic symbol for a particular line does not match a symbol
239 in the offsets alist, or if no non-nil offset value can be determined
240 for a symbol, an error is generated, otherwise no error is reported
241 and the syntactic symbol is ignored.
243 This variable is considered obsolete; it doesn't work well with lineup
244 functions that return nil to support the feature of using lists on
245 syntactic symbols in `c-offsets-alist'. Please keep it set to nil."
246 :type 'boolean
247 :group 'c)
249 (defcustom c-echo-syntactic-information-p nil
250 "*If non-nil, syntactic info is echoed when the line is indented."
251 :type 'boolean
252 :group 'c)
254 (defcustom c-report-syntactic-errors nil
255 "*If non-nil, certain syntactic errors are reported with a ding
256 and a message, for example when an \"else\" is indented for which
257 there's no corresponding \"if\".
259 Note however that CC Mode doesn't make any special effort to check for
260 syntactic errors; that's the job of the compiler. The reason it can
261 report cases like the one above is that it can't find the correct
262 anchoring position to indent the line in that case."
263 :type 'boolean
264 :group 'c)
266 (defcustom-c-stylevar c-basic-offset 4
267 "*Amount of basic offset used by + and - symbols in `c-offsets-alist'.
268 Also used as the indentation step when `c-syntactic-indentation' is
269 nil."
270 :type 'integer
271 :group 'c)
272 ;;;###autoload(put 'c-basic-offset 'safe-local-variable 'integerp)
275 (defcustom c-tab-always-indent t
276 "*Controls the operation of the TAB key.
277 If t, hitting TAB always just indents the current line. If nil, hitting
278 TAB indents the current line if point is at the left margin or in the
279 line's indentation, otherwise it inserts a `real' tab character \(see
280 note\). If some other value (not nil or t), then tab is inserted only
281 within literals \(comments and strings), but the line is always
282 reindented.
284 Note: The value of `indent-tabs-mode' will determine whether a real
285 tab character will be inserted, or the equivalent number of spaces.
286 When inserting a tab, actually the function stored in the variable
287 `c-insert-tab-function' is called.
289 Note: indentation of lines containing only comments is also controlled
290 by the `c-comment-only-line-offset' variable."
291 :type '(radio
292 (const :tag "TAB key always indents, never inserts TAB" t)
293 (const :tag "TAB key indents in left margin, otherwise inserts TAB" nil)
294 (other :tag "TAB key inserts TAB in literals, otherwise indents" other))
295 :group 'c)
297 (defcustom c-insert-tab-function 'insert-tab
298 "*Function used when inserting a tab for \\[c-indent-command].
299 Only used when `c-tab-always-indent' indicates a `real' tab character
300 should be inserted. Value must be a function taking no arguments.
301 The default, `insert-tab', inserts either a tab or the equivalent
302 number of spaces depending on the value of `indent-tabs-mode'."
303 :type 'function
304 :group 'c)
306 (defcustom c-syntactic-indentation t
307 "*Whether the indentation should be controlled by the syntactic context.
309 If t, the indentation functions indent according to the syntactic
310 context, using the style settings specified by `c-offsets-alist'.
312 If nil, every line is just indented to the same level as the previous
313 one, and the \\[c-indent-command] command adjusts the indentation in
314 steps specified by `c-basic-offset'. The indentation style has no
315 effect in this mode, nor any of the indentation associated variables,
316 e.g. `c-special-indent-hook'."
317 :type 'boolean
318 :group 'c)
319 (make-variable-buffer-local 'c-syntactic-indentation)
320 (put 'c-syntactic-indentation 'safe-local-variable 'booleanp)
322 (defcustom c-syntactic-indentation-in-macros t
323 "*Enable syntactic analysis inside macros.
324 If this is nil, all lines inside macro definitions are analyzed as
325 `cpp-macro-cont'. Otherwise they are analyzed syntactically, just
326 like normal code, and `cpp-define-intro' is used to create the
327 additional indentation of the bodies of \"#define\" macros.
329 Having this enabled simplifies editing of large multiline macros, but
330 it might complicate editing if CC Mode doesn't recognize the context
331 of the macro content. The default context inside the macro is the
332 same as the top level, so if it contains \"bare\" statements they
333 might be indented wrongly, although there are special cases that
334 handle this in most cases. If this problem occurs, it's usually
335 countered easily by surrounding the statements by a block \(or even
336 better with the \"do { ... } while \(0)\" trick)."
337 :type 'boolean
338 :group 'c)
339 (put 'c-syntactic-indentation-in-macros 'safe-local-variable 'booleanp)
341 (defcustom c-defun-tactic 'go-outward
342 "*Whether functions are recognized inside, e.g., a class.
343 This is used by `c-beginning-of-defun' and like functions.
345 Its value is one of:
346 t -- Functions are recognized only at the top level.
347 go-outward -- Nested functions are also recognized. Should a function
348 command hit the beginning/end of a nested scope, it will
349 carry on at the less nested level."
350 :version "24.1"
351 :type '(radio
352 (const :tag "Functions are at the top-level" t)
353 (const :tag "Functions are also recognized inside declaration scopes" go-outward))
354 :group 'c)
356 (defcustom-c-stylevar c-comment-only-line-offset 0
357 "*Extra offset for line which contains only the start of a comment.
358 Can contain an integer or a cons cell of the form:
360 (NON-ANCHORED-OFFSET . ANCHORED-OFFSET)
362 Where NON-ANCHORED-OFFSET is the amount of offset given to
363 non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is
364 the amount of offset to give column-zero anchored comment-only lines.
365 Just an integer as value is equivalent to (<val> . -1000).
367 Note that this variable only has effect when the `c-lineup-comment'
368 lineup function is used on the `comment-intro' syntactic symbol (the
369 default)."
370 :type '(choice (integer :tag "Non-anchored offset" 0)
371 (cons :tag "Non-anchored & anchored offset"
372 :value (0 . 0)
373 (integer :tag "Non-anchored offset")
374 (integer :tag "Anchored offset")))
375 :group 'c)
377 (defcustom-c-stylevar c-indent-comment-alist
378 '((anchored-comment . (column . 0))
379 (end-block . (space . 1))
380 (cpp-end-block . (space . 2)))
381 "*Specifies how \\[indent-for-comment] calculates the comment start column.
382 This is an association list that contains entries of the form:
384 (LINE-TYPE . INDENT-SPEC)
386 LINE-TYPE specifies a type of line as described below, and INDENT-SPEC
387 says what \\[indent-for-comment] should do when used on that type of line.
389 The recognized values for LINE-TYPE are:
391 empty-line -- The line is empty.
392 anchored-comment -- The line contains a comment that starts in column 0.
393 end-block -- The line contains a solitary block closing brace.
394 cpp-end-block -- The line contains a preprocessor directive that
395 closes a block, i.e. either \"#endif\" or \"#else\".
396 other -- The line does not match any other entry
397 currently on the list.
399 An INDENT-SPEC is a cons cell of the form:
401 (ACTION . VALUE)
403 ACTION says how \\[indent-for-comment] should align the comment, and
404 VALUE is interpreted depending on ACTION. ACTION can be any of the
405 following:
407 space -- Put VALUE spaces between the end of the line and the start
408 of the comment.
409 column -- Start the comment at the column VALUE. If the line is
410 longer than that, the comment is preceded by a single
411 space. If VALUE is nil, `comment-column' is used.
412 align -- Align the comment with one on the previous line, if there
413 is any. If the line is too long, the comment is preceded
414 by a single space. If there isn't a comment start on the
415 previous line, the behavior is specified by VALUE, which
416 in turn is interpreted as an INDENT-SPEC.
418 If a LINE-TYPE is missing, then \\[indent-for-comment] indents the comment
419 according to `comment-column'.
421 Note that a non-nil value on `c-indent-comments-syntactically-p'
422 overrides this variable, so empty lines are indented syntactically
423 in that case, i.e. as if \\[c-indent-command] was used instead."
424 :type
425 (let ((space '(cons :tag "space"
426 :format "%v"
427 :value (space . 1)
428 (const :format "space " space)
429 (integer :format "%v")))
430 (column '(cons :tag "column"
431 :format "%v"
432 (const :format "column " column)
433 (c-integer-or-nil :format "%v"))))
434 `(set ,@(mapcar
435 (lambda (elt)
436 `(cons :format "%v"
437 ,(c-constant-symbol elt 20)
438 (choice
439 :format "%[Choice%] %v"
440 :value (column . nil)
441 ,space
442 ,column
443 (cons :tag "align"
444 :format "%v"
445 (const :format "align " align)
446 (choice
447 :format "%[Choice%] %v"
448 :value (column . nil)
449 ,space
450 ,column)))))
451 '(empty-line anchored-comment end-block cpp-end-block other))))
452 :group 'c)
454 (defcustom-c-stylevar c-indent-comments-syntactically-p nil
455 "*Specifies how \\[indent-for-comment] should handle comment-only lines.
456 When this variable is non-nil, comment-only lines are indented
457 according to syntactic analysis via `c-offsets-alist'. Otherwise, the
458 comment is indented as if it was preceded by code. Note that this
459 variable does not affect how the normal line indentation treats
460 comment-only lines."
461 :type 'boolean
462 :group 'c)
464 (make-obsolete-variable 'c-comment-continuation-stars
465 'c-block-comment-prefix "21.1")
467 ;; Although c-comment-continuation-stars is obsolete, we look at it in
468 ;; some places in CC Mode anyway, so make the compiler ignore it
469 ;; during our compilation.
470 ;; [This is unclean; better to use `symbol-value'. --ttn]
471 ;;(cc-bytecomp-obsolete-var c-comment-continuation-stars)
472 ;;(cc-bytecomp-defvar c-comment-continuation-stars)
474 (defcustom-c-stylevar c-block-comment-prefix
475 (if (boundp 'c-comment-continuation-stars)
476 (symbol-value 'c-comment-continuation-stars)
477 "* ")
478 "*Specifies the line prefix of continued C-style block comments.
479 You should set this variable to the literal string that gets inserted
480 at the front of continued block style comment lines. This should
481 either be the empty string, or some characters without preceding
482 spaces. To adjust the alignment under the comment starter, put an
483 appropriate value on the `c' syntactic symbol (see the
484 `c-offsets-alist' variable).
486 It's only used when a one-line block comment is broken into two or
487 more lines for the first time; otherwise the appropriate prefix is
488 adapted from the comment. This variable is not used for C++ line
489 style comments."
490 :type 'string
491 :group 'c)
493 (defcustom-c-stylevar c-comment-prefix-regexp
494 '((pike-mode . "//+!?\\|\\**")
495 (awk-mode . "#+")
496 (other . "//+\\|\\**"))
497 "*Regexp to match the line prefix inside comments.
498 This regexp is used to recognize the fill prefix inside comments for
499 correct paragraph filling and other things.
501 If this variable is a string, it will be used in all CC Mode major
502 modes. It can also be an association list, to associate specific
503 regexps to specific major modes. The symbol for the major mode is
504 looked up in the association list, and its value is used as the line
505 prefix regexp. If it's not found, then the symbol `other' is looked
506 up and its value is used instead.
508 The regexp should match the prefix used in both C++ style line
509 comments and C style block comments, but it does not need to match a
510 block comment starter. In other words, it should at least match
511 \"//\" for line comments and the string in `c-block-comment-prefix',
512 which is sometimes inserted by CC Mode inside block comments. It
513 should not match any surrounding whitespace.
515 Note that CC Mode uses this variable to set many other variables that
516 handle the paragraph filling. That's done at mode initialization or
517 when you switch to a style which sets this variable. Thus, if you
518 change it in some other way, e.g. interactively in a CC Mode buffer,
519 you will need to do \\[c-setup-paragraph-variables] afterwards so that
520 the other variables are updated with the new value.
522 Note also that when CC Mode starts up, all variables are initialized
523 before the mode hooks are run. It's therefore necessary to make a
524 call to `c-setup-paragraph-variables' explicitly if you change this
525 variable in a mode hook."
526 :type '(radio
527 (regexp :tag "Regexp for all modes")
528 (list
529 :tag "Mode-specific regexps"
530 (set
531 :inline t :format "%v"
532 (cons :format "%v"
533 (const :format "C " c-mode) (regexp :format "%v"))
534 (cons :format "%v"
535 (const :format "C++ " c++-mode) (regexp :format "%v"))
536 (cons :format "%v"
537 (const :format "ObjC " objc-mode) (regexp :format "%v"))
538 (cons :format "%v"
539 (const :format "Java " java-mode) (regexp :format "%v"))
540 (cons :format "%v"
541 (const :format "IDL " idl-mode) (regexp :format "%v"))
542 (cons :format "%v"
543 (const :format "Pike " pike-mode) (regexp :format "%v"))
544 (cons :format "%v"
545 (const :format "AWK " awk-mode) (regexp :format "%v")))
546 (cons :format " %v"
547 (const :format "Other " other) (regexp :format "%v"))))
548 :group 'c)
550 (defcustom-c-stylevar c-doc-comment-style
551 '((java-mode . javadoc)
552 (pike-mode . autodoc)
553 (c-mode . gtkdoc))
554 "*Specifies documentation comment style(s) to recognize.
555 This is primarily used to fontify doc comments and the markup within
556 them, e.g. Javadoc comments.
558 The value can be any of the following symbols for various known doc
559 comment styles:
561 javadoc -- Javadoc style for \"/** ... */\" comments (default in Java mode).
562 autodoc -- Pike autodoc style for \"//! ...\" comments (default in Pike mode).
563 gtkdoc -- GtkDoc style for \"/** ... **/\" comments (default in C mode).
565 The value may also be a list of doc comment styles, in which case all
566 of them are recognized simultaneously (presumably with markup cues
567 that don't conflict).
569 The value may also be an association list to specify different doc
570 comment styles for different languages. The symbol for the major mode
571 is then looked up in the alist, and the value of that element is
572 interpreted as above if found. If it isn't found then the symbol
573 `other' is looked up and its value is used instead.
575 Note that CC Mode uses this variable to set other variables that
576 handle fontification etc. That's done at mode initialization or when
577 you switch to a style which sets this variable. Thus, if you change
578 it in some other way, e.g. interactively in a CC Mode buffer, you will
579 need to do \\[java-mode] (or whatever mode you're currently using) to
580 reinitialize.
582 Note also that when CC Mode starts up, the other variables are
583 modified before the mode hooks are run. If you change this variable
584 in a mode hook, you have to call `c-setup-doc-comment-style'
585 afterwards to redo that work."
586 ;; Symbols other than those documented above may be used on this
587 ;; variable. If a variable exists that has that name with
588 ;; "-font-lock-keywords" appended, its value is prepended to the
589 ;; font lock keywords list. If it's a function then it's called and
590 ;; the result is prepended.
591 :type '(radio
592 (c-symbol-list :tag "Doc style(s) in all modes")
593 (list
594 :tag "Mode-specific doc styles"
595 (set
596 :inline t :format "%v"
597 (cons :format "%v"
598 (const :format "C " c-mode)
599 (c-symbol-list :format "%v"))
600 (cons :format "%v"
601 (const :format "C++ " c++-mode)
602 (c-symbol-list :format "%v"))
603 (cons :format "%v"
604 (const :format "ObjC " objc-mode)
605 (c-symbol-list :format "%v"))
606 (cons :format "%v"
607 (const :format "Java " java-mode)
608 (c-symbol-list :format "%v"))
609 (cons :format "%v"
610 (const :format "IDL " idl-mode)
611 (c-symbol-list :format "%v"))
612 (cons :format "%v"
613 (const :format "Pike " pike-mode)
614 (c-symbol-list :format "%v"))
615 (cons :format "%v"
616 (const :format "AWK " awk-mode)
617 (c-symbol-list :format "%v"))
618 (cons :format "%v"
619 (const :format "Other " other)
620 (c-symbol-list :format "%v")))))
621 :group 'c)
623 (defcustom c-ignore-auto-fill '(string cpp code)
624 "*List of contexts in which automatic filling never occurs.
625 If Auto Fill mode is active, it will be temporarily disabled if point
626 is in any context on this list. It's e.g. useful to enable Auto Fill
627 in comments only, but not in strings or normal code. The valid
628 contexts are:
630 string -- inside a string or character literal
631 c -- inside a C style block comment
632 c++ -- inside a C++ style line comment
633 cpp -- inside a preprocessor directive
634 code -- anywhere else, i.e. in normal code"
635 :type '(set
636 (const :tag "String literals" string)
637 (const :tag "C style block comments" c)
638 (const :tag "C++ style line comments" c++)
639 (const :tag "Preprocessor directives" cpp)
640 (const :tag "Normal code" code))
641 :group 'c)
643 (defcustom-c-stylevar c-cleanup-list '(scope-operator)
644 "*List of various C/C++/ObjC constructs to \"clean up\".
645 The following clean ups only take place when the auto-newline feature
646 is turned on, as evidenced by the `/la' appearing next to the mode
647 name:
649 brace-else-brace -- Clean up \"} else {\" constructs by placing
650 entire construct on a single line. This clean
651 up only takes place when there is nothing but
652 white space between the braces and the `else'.
653 Clean up occurs when the open brace after the
654 `else' is typed.
655 brace-elseif-brace -- Similar to brace-else-brace, but clean up
656 \"} else if (...) {\" constructs. Clean up
657 occurs after the open parenthesis and the open
658 brace.
659 brace-catch-brace -- Similar to brace-elseif-brace, but clean up
660 \"} catch (...) {\" constructs.
661 empty-defun-braces -- Clean up empty defun braces by placing the
662 braces on the same line. Clean up occurs when
663 the defun closing brace is typed.
664 one-liner-defun -- If the code inside a function body can fit in
665 a single line, then remove any newlines
666 between that line and the defun braces so that
667 the whole body becomes a single line.
668 `c-max-one-liner-length' gives the maximum
669 length allowed for the resulting line. Clean
670 up occurs when the closing brace is typed.
671 defun-close-semi -- Clean up the terminating semi-colon on defuns
672 by placing the semi-colon on the same line as
673 the closing brace. Clean up occurs when the
674 semi-colon is typed.
675 list-close-comma -- Clean up commas following braces in array
676 and aggregate initializers. Clean up occurs
677 when the comma is typed.
678 scope-operator -- Clean up double colons which may designate
679 a C++ scope operator split across multiple
680 lines. Note that certain C++ constructs can
681 generate ambiguous situations. This clean up
682 only takes place when there is nothing but
683 whitespace between colons. Clean up occurs
684 when the second colon is typed.
686 The following clean ups always take place when they are on this list,
687 regardless of the auto-newline feature, since they typically don't
688 involve auto-newline inserted newlines:
690 space-before-funcall -- Insert exactly one space before the opening
691 parenthesis of a function call. Clean up
692 occurs when the opening parenthesis is typed.
693 compact-empty-funcall -- Clean up any space before the function call
694 opening parenthesis if and only if the
695 argument list is empty. This is typically
696 useful together with `space-before-funcall' to
697 get the style \"foo (bar)\" and \"foo()\".
698 Clean up occurs when the closing parenthesis
699 is typed.
700 comment-close-slash -- When a slash is typed after the comment prefix
701 on a bare line in a c-style comment, the comment
702 is closed by cleaning up preceding space and
703 inserting a star if needed."
704 :type '(set
705 (const :tag "Put \"} else {\" on one line (brace-else-brace)"
706 brace-else-brace)
707 (const :tag "Put \"} else if (...) {\" on one line (brace-elseif-brace)"
708 brace-elseif-brace)
709 (const :tag "Put \"} catch (...) {\" on one line (brace-catch-brace)"
710 brace-catch-brace)
711 (const :tag "Put empty defun braces on one line (empty-defun-braces)"
712 empty-defun-braces)
713 (const :tag "Put short function bodies on one line (one-liner-defun)"
714 one-liner-defun)
715 (const :tag "Put \"};\" ending defuns on one line (defun-close-semi)"
716 defun-close-semi)
717 (const :tag "Put \"},\" in aggregates on one line (list-close-comma)"
718 list-close-comma)
719 (const :tag "Put C++ style \"::\" on one line (scope-operator)"
720 scope-operator)
721 (const :tag "Put a space before funcall parens, e.g. \"foo (bar)\" (space-before-funcall)"
722 space-before-funcall)
723 (const :tag "Remove space before empty funcalls, e.g. \"foo()\" (compact-empty-funcall)"
724 compact-empty-funcall)
725 (const :tag "Make / on a bare line of a C-style comment close it (comment-close-slash)"
726 comment-close-slash))
727 :group 'c)
729 (defcustom-c-stylevar c-hanging-braces-alist '((brace-list-open)
730 (brace-entry-open)
731 (statement-cont)
732 (substatement-open after)
733 (block-close . c-snug-do-while)
734 (extern-lang-open after)
735 (namespace-open after)
736 (module-open after)
737 (composition-open after)
738 (inexpr-class-open after)
739 (inexpr-class-close before)
740 (arglist-cont-nonempty))
741 "*Controls the insertion of newlines before and after braces
742 when the auto-newline feature is active. This variable contains an
743 association list with elements of the following form:
744 \(SYNTACTIC-SYMBOL . ACTION).
746 When a brace (either opening or closing) is inserted, the syntactic
747 context it defines is looked up in this list, and if found, the
748 associated ACTION is used to determine where newlines are inserted.
749 If the context is not found, the default is to insert a newline both
750 before and after the brace.
752 SYNTACTIC-SYMBOL can be statement-cont, brace-list-intro,
753 inexpr-class-open, inexpr-class-close, and any of the *-open and
754 *-close symbols. See `c-offsets-alist' for details, except for
755 inexpr-class-open and inexpr-class-close, which doesn't have any
756 corresponding symbols there. Those two symbols are used for the
757 opening and closing braces, respectively, of anonymous inner classes
758 in Java.
760 ACTION can be either a function symbol or a list containing any
761 combination of the symbols `before' or `after'. If the list is empty,
762 no newlines are inserted either before or after the brace.
764 When ACTION is a function symbol, the function is called with a two
765 arguments: the syntactic symbol for the brace and the buffer position
766 at which the brace was inserted. The function must return a list as
767 described in the preceding paragraph. Note that during the call to
768 the function, the variable `c-syntactic-context' is set to the entire
769 syntactic context for the brace line."
770 :type
771 `(set ,@(mapcar
772 (lambda (elt)
773 `(cons :format "%v"
774 ,(c-constant-symbol elt 24)
775 (choice :format "%[Choice%] %v"
776 :value (before after)
777 (set :menu-tag "Before/after"
778 :format "Newline %v brace\n"
779 (const :format "%v, " before)
780 (const :format "%v " after))
781 (function :menu-tag "Function"
782 :format "Run function: %v"))))
783 '(defun-open defun-close
784 class-open class-close
785 inline-open inline-close
786 block-open block-close
787 statement-cont substatement-open statement-case-open
788 brace-list-open brace-list-close
789 brace-list-intro brace-entry-open
790 extern-lang-open extern-lang-close
791 namespace-open namespace-close
792 module-open module-close
793 composition-open composition-close
794 inexpr-class-open inexpr-class-close
795 arglist-cont-nonempty)))
796 :group 'c)
798 (defcustom c-max-one-liner-length 80
799 "Maximum length of line that clean-up \"one-liner-defun\" will compact to.
800 Zero or nil means no limit."
801 :type 'integer
802 :group 'c)
804 (defcustom-c-stylevar c-hanging-colons-alist nil
805 "*Controls the insertion of newlines before and after certain colons.
806 This variable contains an association list with elements of the
807 following form: (SYNTACTIC-SYMBOL . ACTION).
809 SYNTACTIC-SYMBOL can be any of: case-label, label, access-label,
810 member-init-intro, or inher-intro.
812 See the variable `c-hanging-braces-alist' for the semantics of this
813 variable. Note however that making ACTION a function symbol is
814 currently not supported for this variable."
815 :type
816 `(set ,@(mapcar
817 (lambda (elt)
818 `(cons :format "%v"
819 ,(c-constant-symbol elt 20)
820 (set :format "Newline %v colon\n"
821 (const :format "%v, " before)
822 (const :format "%v" after))))
823 '(case-label label access-label member-init-intro inher-intro)))
824 :group 'c)
826 (defcustom-c-stylevar c-hanging-semi&comma-criteria
827 '(c-semi&comma-inside-parenlist)
828 "*List of functions that decide whether to insert a newline or not.
829 The functions in this list are called, in order, whenever the
830 auto-newline minor mode is activated (as evidenced by a `/a' or `/ah'
831 string in the mode line), and a semicolon or comma is typed (see
832 `c-electric-semi&comma'). Each function in this list is called with
833 no arguments, and should return one of the following values:
835 nil -- no determination made, continue checking
836 'stop -- do not insert a newline, and stop checking
837 (anything else) -- insert a newline, and stop checking
839 If every function in the list is called with no determination made,
840 then no newline is inserted."
841 :type '(repeat function)
842 :group 'c)
844 (defcustom-c-stylevar c-backslash-column 48
845 "*Minimum alignment column for line continuation backslashes.
846 This is used by the functions that automatically insert or align the
847 line continuation backslashes in multiline macros. If any line in the
848 macro exceeds this column then the next tab stop from that line is
849 used as alignment column instead. See also `c-backslash-max-column'."
850 :type 'integer
851 :group 'c)
852 ;;;###autoload(put 'c-backslash-column 'safe-local-variable 'integerp)
854 (defcustom-c-stylevar c-backslash-max-column 72
855 "*Maximum alignment column for line continuation backslashes.
856 This is used by the functions that automatically insert or align the
857 line continuation backslashes in multiline macros. If any line in the
858 macro exceeds this column then the backslashes for the other lines
859 will be aligned at this column."
860 :type 'integer
861 :group 'c)
863 (defcustom c-auto-align-backslashes t
864 "*Align automatically inserted line continuation backslashes.
865 When line continuation backslashes are inserted automatically for line
866 breaks in multiline macros, e.g. by \\[c-context-line-break], they are
867 aligned with the other backslashes in the same macro if this flag is
868 set. Otherwise the inserted backslashes are preceded by a single
869 space."
870 :type 'boolean
871 :group 'c)
873 (defcustom c-backspace-function 'backward-delete-char-untabify
874 "*Function called by `c-electric-backspace' when deleting backwards."
875 :type 'function
876 :group 'c)
878 (defcustom c-delete-function 'delete-char
879 "*Function called by `c-electric-delete-forward' when deleting forwards."
880 :type 'function
881 :group 'c)
883 (defcustom c-require-final-newline
884 ;; C and C++ mandate that all nonempty files should end with a
885 ;; newline. Objective-C refers to C for all things it doesn't
886 ;; specify, so the same holds there. The other languages do not
887 ;; require it (at least not explicitly in a normative text).
888 '((c-mode . t)
889 (c++-mode . t)
890 (objc-mode . t))
891 "*Controls whether a final newline is ensured when the file is saved.
892 The value is an association list that for each language mode specifies
893 the value to give to `require-final-newline' at mode initialization;
894 see that variable for details about the value. If a language isn't
895 present on the association list, CC Mode won't touch
896 `require-final-newline' in buffers for that language."
897 :type `(set (cons :format "%v"
898 (const :format "C " c-mode)
899 (symbol :format "%v" :value ,require-final-newline))
900 (cons :format "%v"
901 (const :format "C++ " c++-mode)
902 (symbol :format "%v" :value ,require-final-newline))
903 (cons :format "%v"
904 (const :format "ObjC " objc-mode)
905 (symbol :format "%v" :value ,require-final-newline))
906 (cons :format "%v"
907 (const :format "Java " java-mode)
908 (symbol :format "%v" :value ,require-final-newline))
909 (cons :format "%v"
910 (const :format "IDL " idl-mode)
911 (symbol :format "%v" :value ,require-final-newline))
912 (cons :format "%v"
913 (const :format "Pike " pike-mode)
914 (symbol :format "%v" :value ,require-final-newline))
915 (cons :format "%v"
916 (const :format "AWK " awk-mode)
917 (symbol :format "%v" :value ,require-final-newline)))
918 :group 'c)
920 (defcustom c-electric-pound-behavior nil
921 "*List of behaviors for electric pound insertion.
922 Only currently supported behavior is `alignleft'."
923 :type '(set (const alignleft))
924 :group 'c)
926 (defcustom c-special-indent-hook nil
927 "*Hook for user defined special indentation adjustments.
928 This hook gets called after each line is indented by the mode. It is only
929 called when `c-syntactic-indentation' is non-nil."
930 :type 'hook
931 :group 'c)
933 (defcustom-c-stylevar c-label-minimum-indentation 1
934 "*Minimum indentation for lines inside code blocks.
935 This variable typically only affects code using the `gnu' style, which
936 mandates a minimum of one space in front of every line inside code
937 blocks. Specifically, the function `c-gnu-impose-minimum' on your
938 `c-special-indent-hook' is what enforces this."
939 :type 'integer
940 :group 'c)
942 (defcustom c-progress-interval 5
943 "*Interval used to update progress status during long re-indentation.
944 If a number, percentage complete gets updated after each interval of
945 that many seconds. To inhibit all messages during indentation, set
946 this variable to nil."
947 :type 'integer
948 :group 'c)
950 (defcustom c-objc-method-arg-min-delta-to-bracket 2
951 "*Minimum number of chars to the opening bracket.
953 Consider this ObjC snippet:
955 [foo blahBlah: fred
956 |<-x->|barBaz: barney
958 If `x' is less than this number then `c-lineup-ObjC-method-call-colons'
959 will defer the indentation decision to the next function. By default
960 this is `c-lineup-ObjC-method-call', which would align it like:
962 [foo blahBlahBlah: fred
963 thisIsTooDamnLong: barney
965 This behavior can be overridden by customizing the indentation of
966 `objc-method-call-cont' in the \"objc\" style."
967 :type 'integer
968 :group 'c)
970 (defcustom c-objc-method-arg-unfinished-offset 4
971 "*Offset relative to bracket if first selector is on a new line.
973 [aaaaaaaaa
974 |<-x->|bbbbbbb: cccccc
975 ddddd: eeee];"
976 :type 'integer
977 :group 'c)
979 (defcustom c-objc-method-parameter-offset 4
980 "*Offset for selector parameter on a new line (relative to first selector.
982 [aaaaaaa bbbbbbbbbb:
983 |<-x->|cccccccc
984 ddd: eeee
985 ffff: ggg];"
986 :type 'integer
987 :group 'c)
989 (defcustom c-default-style '((java-mode . "java") (awk-mode . "awk")
990 (other . "gnu"))
991 "*Style which gets installed by default when a file is visited.
993 The value of this variable can be any style defined in
994 `c-style-alist', including styles you add. The value can also be an
995 association list of major mode symbols to style names.
997 When the value is a string, all CC Mode major modes will install this
998 style by default.
1000 When the value is an alist, the major mode symbol is looked up in it
1001 and the associated style is installed. If the major mode is not
1002 listed in the alist, then the symbol `other' is looked up in it, and
1003 if found, the style in that entry is used. If `other' is not found in
1004 the alist, then \"gnu\" style is used.
1006 The default style gets installed before your mode hooks run, so you
1007 can always override the use of `c-default-style' by making calls to
1008 `c-set-style' in the appropriate mode hook."
1009 :type '(radio
1010 (string :tag "Style in all modes")
1011 (set :tag "Mode-specific styles"
1012 (cons :format "%v"
1013 (const :format "C " c-mode) (string :format "%v"))
1014 (cons :format "%v"
1015 (const :format "C++ " c++-mode) (string :format "%v"))
1016 (cons :format "%v"
1017 (const :format "ObjC " objc-mode) (string :format "%v"))
1018 (cons :format "%v"
1019 (const :format "Java " java-mode) (string :format "%v"))
1020 (cons :format "%v"
1021 (const :format "IDL " idl-mode) (string :format "%v"))
1022 (cons :format "%v"
1023 (const :format "Pike " pike-mode) (string :format "%v"))
1024 (cons :format "%v"
1025 (const :format "AWK " awk-mode) (string :format "%v"))
1026 (cons :format "%v"
1027 (const :format "Other " other) (string :format "%v"))))
1028 :group 'c)
1030 ;; *) At the start of a statement or declaration means in more detail:
1031 ;; At the closest preceding statement/declaration that starts at boi
1032 ;; and doesn't have a label or comment at that position. If there's
1033 ;; no such statement within the same block, then back up to the
1034 ;; surrounding block or statement, add the appropriate
1035 ;; statement-block-intro, defun-block-intro or substatement syntax
1036 ;; symbol and continue searching.
1037 (c-set-stylevar-fallback 'c-offsets-alist
1038 '((string . c-lineup-dont-change)
1039 ;; Anchor pos: Beg of previous line.
1040 (c . c-lineup-C-comments)
1041 ;; Anchor pos: Beg of the comment.
1042 (defun-open . 0)
1043 ;; Anchor pos: When inside a class: Boi at the func decl start.
1044 ;; When at top level: Bol at the func decl start. When inside
1045 ;; a code block (only possible in Pike): At the func decl
1046 ;; start(*).
1047 (defun-close . 0)
1048 ;; Anchor pos: At the defun block open if it's at boi,
1049 ;; otherwise boi at the func decl start.
1050 (defun-block-intro . +)
1051 ;; Anchor pos: At the block open(*).
1052 (class-open . 0)
1053 ;; Anchor pos: Boi at the class decl start.
1054 (class-close . 0)
1055 ;; Anchor pos: Boi at the class decl start.
1056 (inline-open . +)
1057 ;; Anchor pos: None for functions (inclass got the relpos
1058 ;; then), boi at the lambda start for lambdas.
1059 (inline-close . 0)
1060 ;; Anchor pos: Inexpr functions: At the lambda block open if
1061 ;; it's at boi, else at the statement(*) at boi of the start of
1062 ;; the lambda construct. Otherwise: At the inline block open
1063 ;; if it's at boi, otherwise boi at the func decl start.
1064 (func-decl-cont . +)
1065 ;; Anchor pos: Boi at the func decl start.
1066 (knr-argdecl-intro . +)
1067 ;; Anchor pos: Boi at the topmost intro line.
1068 (knr-argdecl . 0)
1069 ;; Anchor pos: At the beginning of the first K&R argdecl.
1070 (topmost-intro . 0)
1071 ;; Anchor pos: Bol at the last line of previous construct.
1072 (topmost-intro-cont . c-lineup-topmost-intro-cont)
1073 ;;Anchor pos: Bol at the topmost annotation line
1074 (annotation-top-cont . 0)
1075 ;;Anchor pos: Bol at the topmost annotation line
1076 (annotation-var-cont . +)
1077 ;; Anchor pos: Boi at the topmost intro line.
1078 (member-init-intro . +)
1079 ;; Anchor pos: Boi at the func decl arglist open.
1080 (member-init-cont . c-lineup-multi-inher)
1081 ;; Anchor pos: Beg of the first member init.
1082 (inher-intro . +)
1083 ;; Anchor pos: Boi at the class decl start.
1084 (inher-cont . c-lineup-multi-inher)
1085 ;; Anchor pos: Java: At the implements/extends keyword start.
1086 ;; Otherwise: At the inher start colon, or boi at the class
1087 ;; decl start if the first inherit clause hangs and it's not a
1088 ;; func-local inherit clause (when does that occur?).
1089 (block-open . 0)
1090 ;; Anchor pos: Inexpr statement: At the statement(*) at boi of
1091 ;; the start of the inexpr construct. Otherwise: None.
1092 (block-close . 0)
1093 ;; Anchor pos: Inexpr statement: At the inexpr block open if
1094 ;; it's at boi, else at the statement(*) at boi of the start of
1095 ;; the inexpr construct. Block hanging on a case/default
1096 ;; label: At the closest preceding label that starts at boi.
1097 ;; Otherwise: At the block open(*).
1098 (brace-list-open . 0)
1099 ;; Anchor pos: Boi at the brace list decl start, but a starting
1100 ;; "typedef" token is ignored.
1101 (brace-list-close . 0)
1102 ;; Anchor pos: At the brace list decl start(*).
1103 (brace-list-intro . +)
1104 ;; Anchor pos: At the brace list decl start(*).
1105 (brace-list-entry . 0)
1106 ;; Anchor pos: At the first non-ws char after the open paren if
1107 ;; the first token is on the same line, otherwise boi at that
1108 ;; token.
1109 (brace-entry-open . 0)
1110 ;; Anchor pos: Same as brace-list-entry.
1111 (statement . 0)
1112 ;; Anchor pos: After a `;' in the condition clause of a for
1113 ;; statement: At the first token after the starting paren.
1114 ;; Otherwise: At the preceding statement(*).
1115 (statement-cont . +)
1116 ;; Anchor pos: After the first token in the condition clause of
1117 ;; a for statement: At the first token after the starting
1118 ;; paren. Otherwise: At the containing statement(*).
1119 (statement-block-intro . +)
1120 ;; Anchor pos: In inexpr statement block: At the inexpr block
1121 ;; open if it's at boi, else at the statement(*) at boi of the
1122 ;; start of the inexpr construct. In a block hanging on a
1123 ;; case/default label: At the closest preceding label that
1124 ;; starts at boi. Otherwise: At the start of the containing
1125 ;; block(*).
1126 (statement-case-intro . +)
1127 ;; Anchor pos: At the case/default label(*).
1128 (statement-case-open . 0)
1129 ;; Anchor pos: At the case/default label(*).
1130 (substatement . +)
1131 ;; Anchor pos: At the containing statement(*).
1132 (substatement-open . +)
1133 ;; Anchor pos: At the containing statement(*).
1134 (substatement-label . 2)
1135 ;; Anchor pos: At the containing statement(*).
1136 (case-label . 0)
1137 ;; Anchor pos: At the start of the switch block(*).
1138 (access-label . -)
1139 ;; Anchor pos: Same as inclass.
1140 (label . 2)
1141 ;; Anchor pos: At the start of the containing block(*).
1142 (do-while-closure . 0)
1143 ;; Anchor pos: At the corresponding while statement(*).
1144 (else-clause . 0)
1145 ;; Anchor pos: At the corresponding if statement(*).
1146 (catch-clause . 0)
1147 ;; Anchor pos: At the previous try or catch statement clause(*).
1148 (comment-intro . (c-lineup-knr-region-comment c-lineup-comment))
1149 ;; Anchor pos: None.
1150 (arglist-intro . +)
1151 ;; Anchor pos: At the containing statement(*).
1152 ;; 2nd pos: At the open paren.
1153 (arglist-cont . (c-lineup-gcc-asm-reg 0))
1154 ;; Anchor pos: At the first token after the open paren.
1155 (arglist-cont-nonempty . (c-lineup-gcc-asm-reg c-lineup-arglist))
1156 ;; Anchor pos: At the containing statement(*).
1157 ;; 2nd pos: At the open paren.
1158 (arglist-close . +)
1159 ;; Anchor pos: At the containing statement(*).
1160 ;; 2nd pos: At the open paren.
1161 (stream-op . c-lineup-streamop)
1162 ;; Anchor pos: Boi at the first stream op in the statement.
1163 (inclass . +)
1164 ;; Anchor pos: At the class open brace if it's at boi,
1165 ;; otherwise boi at the class decl start.
1166 (cpp-macro . [0])
1167 ;; Anchor pos: None.
1168 (cpp-macro-cont . +)
1169 ;; Anchor pos: At the macro start (always at boi).
1170 (cpp-define-intro . (c-lineup-cpp-define +))
1171 ;; Anchor pos: None.
1172 (friend . 0)
1173 ;; Anchor pos: None.
1174 (objc-method-intro . [0])
1175 ;; Anchor pos: Boi.
1176 (objc-method-args-cont . c-lineup-ObjC-method-args)
1177 ;; Anchor pos: At the method start (always at boi).
1178 (objc-method-call-cont . (c-lineup-ObjC-method-call-colons
1179 c-lineup-ObjC-method-call +))
1180 ;; Anchor pos: At the open bracket.
1181 (extern-lang-open . 0)
1182 (namespace-open . 0)
1183 (module-open . 0)
1184 (composition-open . 0)
1185 ;; Anchor pos: Boi at the extern/namespace/etc keyword.
1186 (extern-lang-close . 0)
1187 (namespace-close . 0)
1188 (module-close . 0)
1189 (composition-close . 0)
1190 ;; Anchor pos: Boi at the corresponding extern/namespace/etc keyword.
1191 (inextern-lang . +)
1192 (innamespace . +)
1193 (inmodule . +)
1194 (incomposition . +)
1195 ;; Anchor pos: At the extern/namespace/etc block open brace if
1196 ;; it's at boi, otherwise boi at the keyword.
1197 (template-args-cont . (c-lineup-template-args +))
1198 ;; Anchor pos: Boi at the decl start. This might be changed;
1199 ;; the logical position is clearly the opening '<'.
1200 (inlambda . c-lineup-inexpr-block)
1201 ;; Anchor pos: None.
1202 (lambda-intro-cont . +)
1203 ;; Anchor pos: Boi at the lambda start.
1204 (inexpr-statement . +)
1205 ;; Anchor pos: None.
1206 (inexpr-class . +)
1207 ;; Anchor pos: None.
1209 (defcustom c-offsets-alist nil
1210 "Association list of syntactic element symbols and indentation offsets.
1211 As described below, each cons cell in this list has the form:
1213 (SYNTACTIC-SYMBOL . OFFSET)
1215 When a line is indented, CC Mode first determines the syntactic
1216 context of it by generating a list of symbols called syntactic
1217 elements. The global variable `c-syntactic-context' is bound to the
1218 that list. Each element in the list is in turn a list where the first
1219 element is a syntactic symbol which tells what kind of construct the
1220 indentation point is located within. More elements in the syntactic
1221 element lists are optional. If there is one more and it isn't nil,
1222 then it's the anchor position for that construct.
1224 After generating the syntactic context for the line, CC Mode
1225 calculates the absolute indentation: First the base indentation is
1226 found by using the anchor position for the first syntactic element
1227 that provides one. If none does, zero is used as base indentation.
1228 Then CC Mode looks at each syntactic element in the context in turn.
1229 It compares the car of the syntactic element against the
1230 SYNTACTIC-SYMBOL's in `c-offsets-alist'. When it finds a match, it
1231 adds OFFSET to the base indentation. The sum of this calculation is
1232 the absolute offset for line being indented.
1234 If the syntactic element does not match any in the `c-offsets-alist',
1235 the element is ignored.
1237 OFFSET can specify an offset in several different ways:
1239 If OFFSET is nil then it's ignored.
1241 If OFFSET is an integer then it's used as relative offset, i.e. it's
1242 added to the base indentation.
1244 If OFFSET is one of the symbols `+', `-', `++', `--', `*', or `/'
1245 then a positive or negative multiple of `c-basic-offset' is added to
1246 the base indentation; 1, -1, 2, -2, 0.5, and -0.5, respectively.
1248 If OFFSET is a symbol with a value binding then that value, which
1249 must be an integer, is used as relative offset.
1251 If OFFSET is a vector then its first element, which must be an
1252 integer, is used as an absolute indentation column. This overrides
1253 the previous base indentation and the relative offsets applied to
1254 it, and it becomes the new base indentation.
1256 If OFFSET is a function or a lambda expression then it's called with
1257 a single argument containing the cons of the syntactic symbol and
1258 the anchor position (or nil if there is none). The return value
1259 from the function is then reinterpreted as an offset specification.
1261 If OFFSET is a list then its elements are evaluated recursively as
1262 offset specifications. If the first element is any of the symbols
1263 below then it isn't evaluated but instead specifies how the
1264 remaining offsets in the list should be combined. If it's something
1265 else then the list is combined according the method `first'. The
1266 valid combination methods are:
1268 `first' -- Use the first offset (that doesn't evaluate to nil).
1269 `min' -- Use the minimum of all the offsets. All must be either
1270 relative or absolute - they can't be mixed.
1271 `max' -- Use the maximum of all the offsets. All must be either
1272 relative or absolute - they can't be mixed.
1273 `add' -- Add all the evaluated offsets together. Exactly one of
1274 them may be absolute, in which case the result is
1275 absolute. Any relative offsets that preceded the
1276 absolute one in the list will be ignored in that case.
1278 `c-offsets-alist' is a style variable. This means that the offsets on
1279 this variable are normally taken from the style system in CC Mode
1280 \(see `c-default-style' and `c-style-alist'). However, any offsets
1281 put explicitly on this list will override the style system when a CC
1282 Mode buffer is initialized \(there is a variable
1283 `c-old-style-variable-behavior' that changes this, though).
1285 Here is the current list of valid syntactic element symbols:
1287 string -- Inside multi-line string.
1288 c -- Inside a multi-line C style block comment.
1289 defun-open -- Brace that opens a function definition.
1290 defun-close -- Brace that closes a function definition.
1291 defun-block-intro -- The first line in a top-level defun.
1292 class-open -- Brace that opens a class definition.
1293 class-close -- Brace that closes a class definition.
1294 inline-open -- Brace that opens an in-class inline method.
1295 inline-close -- Brace that closes an in-class inline method.
1296 func-decl-cont -- The region between a function definition's
1297 argument list and the function opening brace
1298 (excluding K&R argument declarations). In C, you
1299 cannot put anything but whitespace and comments
1300 between them; in C++ and Java, throws declarations
1301 and other things can appear in this context.
1302 knr-argdecl-intro -- First line of a K&R C argument declaration.
1303 knr-argdecl -- Subsequent lines in a K&R C argument declaration.
1304 topmost-intro -- The first line in a topmost construct definition.
1305 topmost-intro-cont -- Topmost definition continuation lines.
1306 annotation-top-cont -- Topmost definition continuation line where only
1307 annotations are on previous lines.
1308 annotation-var-cont -- A continuation of a C (or like) statement where
1309 only annotations are on previous lines.
1310 member-init-intro -- First line in a member initialization list.
1311 member-init-cont -- Subsequent member initialization list lines.
1312 inher-intro -- First line of a multiple inheritance list.
1313 inher-cont -- Subsequent multiple inheritance lines.
1314 block-open -- Statement block open brace.
1315 block-close -- Statement block close brace.
1316 brace-list-open -- Open brace of an enum or static array list.
1317 brace-list-close -- Close brace of an enum or static array list.
1318 brace-list-intro -- First line in an enum or static array list.
1319 brace-list-entry -- Subsequent lines in an enum or static array list.
1320 brace-entry-open -- Subsequent lines in an enum or static array
1321 list that start with an open brace.
1322 statement -- A C (or like) statement.
1323 statement-cont -- A continuation of a C (or like) statement.
1324 statement-block-intro -- The first line in a new statement block.
1325 statement-case-intro -- The first line in a case \"block\".
1326 statement-case-open -- The first line in a case block starting with brace.
1327 substatement -- The first line after an if/while/for/do/else.
1328 substatement-open -- The brace that opens a substatement block.
1329 substatement-label -- Labeled line after an if/while/for/do/else.
1330 case-label -- A \"case\" or \"default\" label.
1331 access-label -- C++ private/protected/public access label.
1332 label -- Any ordinary label.
1333 do-while-closure -- The \"while\" that ends a do/while construct.
1334 else-clause -- The \"else\" of an if/else construct.
1335 catch-clause -- The \"catch\" or \"finally\" of a try/catch construct.
1336 comment-intro -- A line containing only a comment introduction.
1337 arglist-intro -- The first line in an argument list.
1338 arglist-cont -- Subsequent argument list lines when no
1339 arguments follow on the same line as the
1340 arglist opening paren.
1341 arglist-cont-nonempty -- Subsequent argument list lines when at
1342 least one argument follows on the same
1343 line as the arglist opening paren.
1344 arglist-close -- The solo close paren of an argument list.
1345 stream-op -- Lines continuing a stream operator construct.
1346 inclass -- The construct is nested inside a class definition.
1347 Used together with e.g. `topmost-intro'.
1348 cpp-macro -- The start of a C preprocessor macro definition.
1349 cpp-macro-cont -- Inside a multi-line C preprocessor macro definition.
1350 friend -- A C++ friend declaration.
1351 objc-method-intro -- The first line of an Objective-C method definition.
1352 objc-method-args-cont -- Lines continuing an Objective-C method definition.
1353 objc-method-call-cont -- Lines continuing an Objective-C method call.
1354 extern-lang-open -- Brace that opens an \"extern\" block.
1355 extern-lang-close -- Brace that closes an \"extern\" block.
1356 inextern-lang -- Analogous to the `inclass' syntactic symbol,
1357 but used inside \"extern\" blocks.
1358 namespace-open, namespace-close, innamespace
1359 -- Similar to the three `extern-lang' symbols, but for
1360 C++ \"namespace\" blocks.
1361 module-open, module-close, inmodule
1362 -- Similar to the three `extern-lang' symbols, but for
1363 CORBA IDL \"module\" blocks.
1364 composition-open, composition-close, incomposition
1365 -- Similar to the three `extern-lang' symbols, but for
1366 CORBA CIDL \"composition\" blocks.
1367 template-args-cont -- C++ template argument list continuations.
1368 inlambda -- In the header or body of a lambda function.
1369 lambda-intro-cont -- Continuation of the header of a lambda function.
1370 inexpr-statement -- The statement is inside an expression.
1371 inexpr-class -- The class is inside an expression. Used e.g. for
1372 Java anonymous classes."
1373 :type
1374 `(set :format "%{%t%}:
1375 Override style setting
1376 | Syntax Offset
1378 ,@(mapcar
1379 (lambda (elt)
1380 `(cons :format "%v"
1381 :value ,elt
1382 ,(c-constant-symbol (car elt) 25)
1383 (sexp :format "%v"
1384 :validate
1385 (lambda (widget)
1386 (unless (c-valid-offset (widget-value widget))
1387 (widget-put widget :error "Invalid offset")
1388 widget)))))
1389 (get 'c-offsets-alist 'c-stylevar-fallback)))
1390 :group 'c)
1392 ;; The syntactic symbols that can occur inside code blocks. Used by
1393 ;; `c-gnu-impose-minimum'.
1394 (defconst c-inside-block-syms
1395 '(defun-block-intro block-open block-close statement statement-cont
1396 statement-block-intro statement-case-intro statement-case-open
1397 substatement substatement-open substatement-label case-label label
1398 do-while-closure else-clause catch-clause inlambda annotation-var-cont))
1400 (defcustom c-style-variables-are-local-p t
1401 "*Whether style variables should be buffer local by default.
1402 If non-nil, then all indentation style related variables will be made
1403 buffer local by default. If nil, they will remain global. Variables
1404 are made buffer local when this file is loaded, and once buffer
1405 localized, they cannot be made global again.
1407 This variable must be set appropriately before CC Mode is loaded.
1409 The list of variables to buffer localize are:
1410 c-basic-offset
1411 c-comment-only-line-offset
1412 c-indent-comment-alist
1413 c-indent-comments-syntactically-p
1414 c-block-comment-prefix
1415 c-comment-prefix-regexp
1416 c-doc-comment-style
1417 c-cleanup-list
1418 c-hanging-braces-alist
1419 c-hanging-colons-alist
1420 c-hanging-semi&comma-criteria
1421 c-backslash-column
1422 c-backslash-max-column
1423 c-label-minimum-indentation
1424 c-offsets-alist
1425 c-special-indent-hook
1426 c-indentation-style"
1427 :type 'boolean
1428 :safe 'booleanp
1429 :group 'c)
1431 (defcustom c-mode-hook nil
1432 "*Hook called by `c-mode'."
1433 :type 'hook
1434 :group 'c)
1436 (defcustom c++-mode-hook nil
1437 "*Hook called by `c++-mode'."
1438 :type 'hook
1439 :group 'c)
1441 (defcustom objc-mode-hook nil
1442 "*Hook called by `objc-mode'."
1443 :type 'hook
1444 :group 'c)
1446 (defcustom java-mode-hook nil
1447 "*Hook called by `java-mode'."
1448 :type 'hook
1449 :group 'c)
1451 (defcustom idl-mode-hook nil
1452 "*Hook called by `idl-mode'."
1453 :type 'hook
1454 :group 'c)
1456 (defcustom pike-mode-hook nil
1457 "*Hook called by `pike-mode'."
1458 :type 'hook
1459 :group 'c)
1461 (defcustom awk-mode-hook nil
1462 "*Hook called by `awk-mode'."
1463 :type 'hook
1464 :group 'c)
1466 (defcustom c-mode-common-hook nil
1467 "*Hook called by all CC Mode modes for common initializations."
1468 :type 'hook
1469 :group 'c)
1471 (defcustom c-initialization-hook nil
1472 "*Hook called when the CC Mode package gets initialized.
1473 This hook is only run once per Emacs session and can be used as a
1474 `load-hook' or in place of using `eval-after-load'."
1475 :type 'hook
1476 :group 'c)
1478 (defcustom c-enable-xemacs-performance-kludge-p nil
1479 "*Enables a XEmacs only hack that may improve speed for some coding styles.
1480 For styles that hang top-level opening braces (as is common with JDK
1481 Java coding styles) this can improve performance between 3 and 60
1482 times for core indentation functions (e.g. `c-parse-state'). For
1483 styles that conform to the Emacs recommendation of putting these
1484 braces in column zero, this can degrade performance about as much.
1485 This variable only has effect in XEmacs."
1486 :type 'boolean
1487 :group 'c)
1489 (defvar c-old-style-variable-behavior nil
1490 "*Enables the old style variable behavior when non-nil.
1492 Normally the values of the style variables will override the style
1493 settings specified by the variables `c-default-style' and
1494 `c-style-alist'. However, in CC Mode 5.25 and earlier, it was the
1495 other way around, meaning that changes made to the style variables
1496 from e.g. Customize would not take effect unless special precautions
1497 were taken. That was confusing, especially for novice users.
1499 It's believed that despite this change, the new behavior will still
1500 produce the same results for most old CC Mode configurations, since
1501 all style variables are per default set in a special non-override
1502 state. Set this variable only if your configuration has stopped
1503 working due to this change.")
1505 (define-widget 'c-extra-types-widget 'radio
1506 "Internal CC Mode widget for the `*-font-lock-extra-types' variables."
1507 :args '((const :tag "none" nil)
1508 (repeat :tag "types" regexp)))
1510 (defun c-make-font-lock-extra-types-blurb (mode1 mode2 example)
1511 (concat "\
1512 *List of extra types (aside from the type keywords) to recognize in "
1513 mode1 " mode.
1514 Each list item should be a regexp matching a single identifier.
1515 " example "
1517 Note that items on this list that don't include any regexp special
1518 characters are automatically optimized using `regexp-opt', so you
1519 should not use `regexp-opt' explicitly to build regexps here.
1521 On decoration level 3 (and higher, where applicable), a method is used
1522 that finds most types and declarations by syntax alone. This variable
1523 is still used as a first step, but other types are recognized
1524 correctly anyway in most cases. Therefore this variable should be
1525 fairly restrictive and not contain patterns that are uncertain.
1527 Note that this variable is only consulted when the major mode is
1528 initialized. If you change it later you have to reinitialize CC Mode
1529 by doing \\[" mode2 "].
1531 Despite the name, this variable is not only used for font locking but
1532 also elsewhere in CC Mode to tell types from other identifiers."))
1534 ;; Note: Most of the variables below are also defined in font-lock.el
1535 ;; in older versions of Emacs, so depending on the load order we might
1536 ;; not install the values below. There's no kludge to cope with this
1537 ;; (as opposed to the *-font-lock-keywords-* variables) since the old
1538 ;; values work fairly well anyway.
1540 (defcustom c-font-lock-extra-types
1541 '("\\sw+_t"
1542 ;; Defined in C99:
1543 "bool" "complex" "imaginary"
1544 ;; Standard library types (except those matched by the _t pattern):
1545 "FILE" "lconv" "tm" "va_list" "jmp_buf"
1546 ;; I do not appreciate the following very Emacs-specific luggage
1547 ;; in the default value, but otoh it can hardly get in the way for
1548 ;; other users, and removing it would cause unnecessary grief for
1549 ;; the old timers that are used to it. /mast
1550 "Lisp_Object")
1551 (c-make-font-lock-extra-types-blurb "C" "c-mode"
1552 "For example, a value of (\"FILE\" \"\\\\sw+_t\") means the word \"FILE\"
1553 and words ending in \"_t\" are treated as type names.")
1554 :type 'c-extra-types-widget
1555 :group 'c)
1557 (defcustom c++-font-lock-extra-types
1558 '("\\sw+_t"
1559 ;; C library types (except those matched by the _t pattern):
1560 "FILE" "lconv" "tm" "va_list" "jmp_buf"
1561 ;; Some standard C++ types that came from font-lock.el.
1562 ;; Experienced C++ users says there's no clear benefit in
1563 ;; extending this to all the types in the standard library, at
1564 ;; least not when they'll be recognized without "std::" too.
1565 "istream" "istreambuf"
1566 "ostream" "ostreambuf"
1567 "ifstream" "ofstream" "fstream"
1568 "strstream" "strstreambuf" "istrstream" "ostrstream"
1569 "ios"
1570 "string" "rope"
1571 "list" "slist"
1572 "deque" "vector" "bit_vector"
1573 "set" "multiset"
1574 "map" "multimap"
1575 "hash"
1576 "hash_set" "hash_multiset"
1577 "hash_map" "hash_multimap"
1578 "stack" "queue" "priority_queue"
1579 "type_info"
1580 "iterator" "const_iterator" "reverse_iterator" "const_reverse_iterator"
1581 "reference" "const_reference")
1582 (c-make-font-lock-extra-types-blurb "C++" "c++-mode"
1583 "For example, a value of (\"string\") means the word \"string\" is treated
1584 as a type name.")
1585 :type 'c-extra-types-widget
1586 :group 'c)
1588 (defcustom objc-font-lock-extra-types
1589 (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw*"))
1590 (c-make-font-lock-extra-types-blurb "ObjC" "objc-mode" (concat
1591 "For example, a value of (\"[" c-upper "]\\\\sw*[" c-lower "]\\\\sw*\") means
1592 capitalized words are treated as type names (the requirement for a
1593 lower case char is to avoid recognizing all-caps macro and constant
1594 names)."))
1595 :type 'c-extra-types-widget
1596 :group 'c)
1598 (defcustom java-font-lock-extra-types
1599 (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw"))
1600 (c-make-font-lock-extra-types-blurb "Java" "java-mode" (concat
1601 "For example, a value of (\"[" c-upper "]\\\\sw*[" c-lower "]\\\\sw*\") means
1602 capitalized words are treated as type names (the requirement for a
1603 lower case char is to avoid recognizing all-caps constant names)."))
1604 :type 'c-extra-types-widget
1605 :group 'c)
1607 (defcustom idl-font-lock-extra-types nil
1608 (c-make-font-lock-extra-types-blurb "IDL" "idl-mode" "")
1609 :type 'c-extra-types-widget
1610 :group 'c)
1612 (defcustom pike-font-lock-extra-types
1613 (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw*"))
1614 (c-make-font-lock-extra-types-blurb "Pike" "pike-mode" (concat
1615 "For example, a value of (\"[" c-upper "]\\\\sw*[" c-lower "]\\\\sw*\") means
1616 capitalized words are treated as type names (the requirement for a
1617 lower case char is to avoid recognizing all-caps macro and constant
1618 names)."))
1619 :type 'c-extra-types-widget
1620 :group 'c)
1623 ;; Non-customizable variables, still part of the interface to CC Mode
1624 (defvar c-macro-with-semi-re nil
1625 ;; Regular expression which matches a (#define'd) symbol whose expansion
1626 ;; ends with a semicolon.
1628 ;; This variable should be set by `c-make-macros-with-semi-re' rather than
1629 ;; directly.
1631 (make-variable-buffer-local 'c-macro-with-semi-re)
1633 (defvar c-macro-names-with-semicolon
1634 '("Q_OBJECT" "Q_PROPERTY" "Q_DECLARE" "Q_ENUMS")
1635 "List of #defined symbols whose expansion ends with a semicolon.
1636 Alternatively it can be a string, a regular expression which
1637 matches all such symbols.
1639 The \"symbols\" must be syntactically valid identifiers in the
1640 target language \(C, C++, Objective C), or \(as the case may be)
1641 the regular expression must match only valid identifiers.
1643 If you change this variable's value, call the function
1644 `c-make-macros-with-semi-re' to set the necessary internal
1645 variables.
1647 Note that currently \(2008-11-04) this variable is a prototype,
1648 and is likely to disappear or change its form soon.")
1649 (make-variable-buffer-local 'c-macro-names-with-semicolon)
1651 (defun c-make-macro-with-semi-re ()
1652 ;; Convert `c-macro-names-with-semicolon' into the regexp
1653 ;; `c-macro-with-semi-re' (or just copy it if it's already a re).
1654 (setq c-macro-with-semi-re
1655 (and
1656 (boundp 'c-opt-cpp-macro-define)
1657 c-opt-cpp-macro-define
1658 (cond
1659 ((stringp c-macro-names-with-semicolon)
1660 (copy-sequence c-macro-names-with-semicolon))
1661 ((consp c-macro-names-with-semicolon)
1662 (concat
1663 "\\<"
1664 (regexp-opt c-macro-names-with-semicolon)
1665 "\\>")) ; N.B. the PAREN param of regexp-opt isn't supported by
1666 ; all XEmacsen.
1667 ((null c-macro-names-with-semicolon)
1668 nil)
1669 (t (error "c-make-macro-with-semi-re: invalid \
1670 c-macro-names-with-semicolon: %s"
1671 c-macro-names-with-semicolon))))))
1673 (defvar c-file-style nil
1674 "Variable interface for setting style via File Local Variables.
1675 In a file's Local Variable section, you can set this variable to a
1676 string suitable for `c-set-style'. When the file is visited, CC Mode
1677 will set the style of the file to this value automatically.
1679 Note that file style settings are applied before file offset settings
1680 as designated in the variable `c-file-offsets'.")
1681 (make-variable-buffer-local 'c-file-style)
1682 ;;;###autoload(put 'c-file-style 'safe-local-variable 'string-or-null-p)
1684 (defvar c-file-offsets nil
1685 "Variable interface for setting offsets via File Local Variables.
1686 In a file's Local Variable section, you can set this variable to an
1687 association list similar to the values allowed in `c-offsets-alist'.
1688 When the file is visited, CC Mode will institute these offset settings
1689 automatically.
1691 Note that file offset settings are applied after file style settings
1692 as designated in the variable `c-file-style'.")
1693 (make-variable-buffer-local 'c-file-offsets)
1695 ;; It isn't possible to specify a doc-string without specifying an
1696 ;; initial value with `defvar', so the following two variables have been
1697 ;; given doc-strings by setting the property `variable-documentation'
1698 ;; directly. C-h v will read this documentation only for versions of GNU
1699 ;; Emacs from 22.1. It's really good not to have an initial value for
1700 ;; variables like these that always should be dynamically bound, so it's
1701 ;; worth the inconvenience.
1703 (cc-bytecomp-defvar c-syntactic-context)
1704 (defvar c-syntactic-context)
1705 (put 'c-syntactic-context 'variable-documentation
1706 "Variable containing the syntactic analysis list for a line of code.
1708 It is a list with one element for each syntactic symbol pertinent to the
1709 line, for example \"((defun-block-intro 1) (comment-intro))\".
1711 It is dynamically bound when calling \(i) a brace hanging \"action
1712 function\"; \(ii) a semicolon/comma hanging \"criteria function\"; \(iii) a
1713 \"line-up function\"; \(iv) a c-special-indent-hook function. It is also
1714 used internally by CC Mode.
1716 c-syntactic-context is always bound dynamically. It must NEVER be set
1717 statically (e.g. with `setq').")
1720 (cc-bytecomp-defvar c-syntactic-element)
1721 (defvar c-syntactic-element)
1722 (put 'c-syntactic-element 'variable-documentation
1723 "Variable containing the current syntactic element during calls to
1724 the lineup functions. The value is one of the elements in the list in
1725 `c-syntactic-context' and is a list with the symbol name in the first
1726 position, followed by zero or more elements containing any additional
1727 info associated with the syntactic symbol. There are accessor functions
1728 `c-langelem-sym', `c-langelem-pos', `c-langelem-col', and
1729 `c-langelem-2nd-pos' to access the list.
1731 Specifically, the element returned by `c-langelem-pos' is the anchor
1732 position, or nil if there isn't any. See the comments in the
1733 `c-offsets-alist' variable and the CC Mode manual for more detailed info
1734 about the data each syntactic symbol provides.
1736 This is always bound dynamically. It should never be set
1737 statically (e.g. with `setq').")
1739 (defvar c-indentation-style nil
1740 "Name of the currently installed style.
1741 Don't change this directly; call `c-set-style' instead, or set the variable
1742 `c-file-style' in the file's Local Variable list.")
1744 (defvar c-current-comment-prefix nil
1745 "The current comment prefix regexp.
1746 Set from `c-comment-prefix-regexp' at mode initialization.")
1747 (make-variable-buffer-local 'c-current-comment-prefix)
1749 ;; N.B. The next three variables are initialized in
1750 ;; c-setup-paragraph-variables. Their initializations here are "just in
1751 ;; case". ACM, 2004/2/15. They are NOT buffer local (yet?).
1752 (defvar c-string-par-start
1753 ;; (concat "\\(" (default-value 'paragraph-start) "\\)\\|[ \t]*\\\\$")
1754 "\f\\|[ \t]*\\\\?$"
1755 "Value of paragraph-start used when scanning strings.
1756 It treats escaped EOLs as whitespace.")
1758 (defvar c-string-par-separate
1759 ;; (concat "\\(" (default-value 'paragraph-separate) "\\)\\|[ \t]*\\\\$")
1760 "[ \t\f]*\\\\?$"
1761 "Value of paragraph-separate used when scanning strings.
1762 It treats escaped EOLs as whitespace.")
1764 (defvar c-sentence-end-with-esc-eol
1765 (concat "\\(\\(" (c-default-value-sentence-end) "\\)"
1766 ;; N.B.: "$" would be illegal when not enclosed like "\\($\\)".
1767 "\\|" "[.?!][]\"')}]* ?\\\\\\($\\)[ \t\n]*"
1768 "\\)")
1769 "Value used like sentence-end used when scanning strings.
1770 It treats escaped EOLs as whitespace.")
1773 (cc-provide 'cc-vars)
1775 ;;; Local Variables:
1776 ;;; indent-tabs-mode: t
1777 ;;; tab-width: 8
1778 ;;; End:
1779 ;;; cc-vars.el ends here