changeset 3123:0ecfe54a273f v7.3.332

updated for version 7.3.332 Problem: Indent after "public:" is not increased in C++ code. (Lech Lorens) Solution: Check for namespace after the regular checks. (partly by Martin Gieseking)
author Bram Moolenaar <bram@vim.org>
date Tue, 04 Oct 2011 18:03:47 +0200
parents 103d12cfdbf7
children c5c07a5ef1fc
files src/misc1.c src/testdir/test3.in src/testdir/test3.ok src/version.c
diffstat 4 files changed, 74 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -6389,6 +6389,7 @@ get_c_indent()
     int		lookfor_cpp_namespace = FALSE;
     int		cont_amount = 0;    /* amount for continuation line */
     int		original_line_islabel;
+    int		added_to_amount = 0;
 
     for (options = curbuf->b_p_cino; *options; )
     {
@@ -7216,52 +7217,59 @@ get_c_indent()
 			else
 			    amount += ind_continuation;
 		    }
-		    else if (lookfor_cpp_namespace)
+		    else
 		    {
-			if (curwin->w_cursor.lnum == ourscope)
-			    continue;
-
-			if (curwin->w_cursor.lnum == 0
-				|| curwin->w_cursor.lnum
-					      < ourscope - FIND_NAMESPACE_LIM)
-			    break;
-
-			l = ml_get_curline();
-
-			/*
-			 * If we're in a comment now, skip to the start of the
-			 * comment.
-			 */
-			trypos = find_start_comment(ind_maxcomment);
-			if (trypos != NULL)
+			if (lookfor != LOOKFOR_TERM
+					  && lookfor != LOOKFOR_CPP_BASECLASS)
 			{
-			    curwin->w_cursor.lnum = trypos->lnum + 1;
-			    curwin->w_cursor.col = 0;
-			    continue;
+			    amount = scope_amount;
+			    if (theline[0] == '{')
+			    {
+				amount += ind_open_extra;
+				added_to_amount = ind_open_extra;
+			    }
 			}
 
-			/*
-			 * Skip preprocessor directives and blank lines.
-			 */
-			if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
-			    continue;
-
-			if (cin_is_cpp_namespace(l))
+			if (lookfor_cpp_namespace)
 			{
-			    amount += ind_cpp_namespace;
-			    break;
+			    /*
+			     * Looking for C++ namespace, need to look further
+			     * back.
+			     */
+			    if (curwin->w_cursor.lnum == ourscope)
+				continue;
+
+			    if (curwin->w_cursor.lnum == 0
+				    || curwin->w_cursor.lnum
+					      < ourscope - FIND_NAMESPACE_LIM)
+				break;
+
+			    l = ml_get_curline();
+
+			    /* If we're in a comment now, skip to the start of
+			     * the comment. */
+			    trypos = find_start_comment(ind_maxcomment);
+			    if (trypos != NULL)
+			    {
+				curwin->w_cursor.lnum = trypos->lnum + 1;
+				curwin->w_cursor.col = 0;
+				continue;
+			    }
+
+			    /* Skip preprocessor directives and blank lines. */
+			    if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+				continue;
+
+			    /* Finally the actual check for "namespace". */
+			    if (cin_is_cpp_namespace(l))
+			    {
+				amount += ind_cpp_namespace - added_to_amount;
+				break;
+			    }
+
+			    if (cin_nocode(l))
+				continue;
 			}
-
-			if (cin_nocode(l))
-			    continue;
-
-		    }
-		    else if (lookfor != LOOKFOR_TERM
-					  && lookfor != LOOKFOR_CPP_BASECLASS)
-		    {
-			amount = scope_amount;
-			if (theline[0] == '{')
-			    amount += ind_open_extra;
 		    }
 		    break;
 		}
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
@@ -1309,6 +1309,20 @@ protected:
 };
 
 STARTTEST
+:set cino=(0,gs,hs
+2kdd]]=][
+ENDTEST
+
+class Foo : public Bar
+{
+public:
+virtual void method1(void) = 0;
+virtual void method2(int arg1,
+int arg2,
+int arg3) = 0;
+};
+
+STARTTEST
 :set cino=+20
 2kdd]]=][
 ENDTEST
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -1190,6 +1190,16 @@ protected:
 };
 
 
+class Foo : public Bar
+{
+	public:
+		virtual void method1(void) = 0;
+		virtual void method2(int arg1,
+							 int arg2,
+							 int arg3) = 0;
+};
+
+
 	void
 foo()
 {
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    332,
+/**/
     331,
 /**/
     330,