Mercurial > emacs
changeset 98550:dce66c484f23
(c-indent-region): Fix so that indenting a macro followed by blank lines
doesn't backslash the following non-blank line into the macro.
author | Alan Mackenzie <acm@muc.de> |
---|---|
date | Tue, 07 Oct 2008 13:14:17 +0000 |
parents | 994ac1522433 |
children | a3f6caec5257 |
files | lisp/progmodes/cc-cmds.el |
diffstat | 1 files changed, 25 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/progmodes/cc-cmds.el Tue Oct 07 13:12:14 2008 +0000 +++ b/lisp/progmodes/cc-cmds.el Tue Oct 07 13:14:17 2008 +0000 @@ -3096,46 +3096,41 @@ (c-parsing-error nil) ;; shut up any echo msgs on indiv lines (c-echo-syntactic-information-p nil) - (in-macro (and c-auto-align-backslashes - (c-save-buffer-state () - (save-excursion (c-beginning-of-macro))) - start)) + (macro-start + (and (c-save-buffer-state () + (save-excursion (c-beginning-of-macro))) + start)) (c-fix-backslashes nil) syntax) (unwind-protect (progn (c-progress-init start end 'c-indent-region) - (while (and (bolp) + + (while (and (bolp) ;; One line each time round the loop. (not (eobp)) (< (point) endmark)) ;; update progress (c-progress-update) ;; skip empty lines - (skip-chars-forward " \t\n") - (beginning-of-line) - ;; Get syntax and indent. - (c-save-buffer-state nil - (setq syntax (c-guess-basic-syntax))) - (if (and c-auto-align-backslashes - (assq 'cpp-macro syntax)) - ;; Record macro start. - (setq in-macro (point))) - (if in-macro - (if (looking-at "\\s *\\\\$") - (forward-line) - (c-indent-line syntax t t) - (if (progn (end-of-line) - (not (eq (char-before) ?\\))) - (progn - ;; Fixup macro backslashes. - (forward-line) - (c-backslash-region in-macro (point) nil) - (setq in-macro nil)) - (forward-line))) - (c-indent-line syntax t t) - (forward-line))) - (if in-macro - (c-backslash-region in-macro (c-point 'bopl) nil t))) + (unless (or (looking-at "\\s *$") + (and macro-start (looking-at "\\s *\\\\$"))) + ;; Get syntax and indent. + (c-save-buffer-state nil + (setq syntax (c-guess-basic-syntax))) + (c-indent-line syntax t t)) + + (if (assq 'cpp-macro syntax) ; New macro? + (setq macro-start (point)) + (when (and macro-start ; End of old macro? + c-auto-align-backslashes + (not (eq (char-before (c-point 'eol)) ?\\))) + ;; Fixup macro backslashes. + (c-backslash-region macro-start (c-point 'bonl) nil) + (setq macro-start nil))) + (forward-line)) + + (if (and macro-start c-auto-align-backslashes) + (c-backslash-region macro-start (c-point 'bopl) nil t))) (set-marker endmark nil) (c-progress-fini 'c-indent-region)) (c-echo-parsing-error quiet))