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))