]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.576 v7.3.576
authorBram Moolenaar <Bram@vim.org>
Fri, 29 Jun 2012 13:04:49 +0000 (15:04 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 29 Jun 2012 13:04:49 +0000 (15:04 +0200)
Problem:    Formatting of lists inside comments is not right yet.
Solution:   Use another solution and add a test. (Tor Perkins)

src/edit.c
src/misc1.c
src/testdir/test68.in
src/version.c

index aafd226fa6c74f0889382899b243d115f68c366b..78b4d1c24507020885ebe15fd0183ab8c96b4e9e 100644 (file)
@@ -6320,14 +6320,15 @@ internal_format(textwidth, second_indent, flags, format_only, c)
            if (!(flags & INSCHAR_COM_LIST))
            {
                /*
-                * This section is for numeric lists w/o comments.  If comment
-                * indents are needed with numeric lists (formatoptions=nq),
-                * then the INSCHAR_COM_LIST flag will cause the corresponding
-                * OPENLINE_COM_LIST flag to be passed through to open_line()
-                * (as seen above)...
+                * This section is for auto-wrap of numeric lists.  When not
+                * in insert mode (i.e. format_lines()), the INSCHAR_COM_LIST
+                * flag will be set and open_line() will handle it (as seen
+                * above).  The code here (and in get_number_indent()) will
+                * recognize comments if needed...
                 */
                if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
-                   second_indent = get_number_indent(curwin->w_cursor.lnum -1);
+                   second_indent =
+                                get_number_indent(curwin->w_cursor.lnum - 1);
                if (second_indent >= 0)
                {
 #ifdef FEAT_VREPLACE
@@ -6335,8 +6336,32 @@ internal_format(textwidth, second_indent, flags, format_only, c)
                        change_indent(INDENT_SET, second_indent,
                                                            FALSE, NUL, TRUE);
                    else
+#endif
+#ifdef FEAT_COMMENTS
+                       if (leader_len > 0 && second_indent - leader_len > 0)
+                   {
+                       int i;
+                       int padding = second_indent - leader_len;
+
+                       /* We started at the first_line of a numbered list
+                        * that has a comment.  the open_line() function has
+                        * inserted the proper comment leader and positioned
+                        * the cursor at the end of the split line.  Now we
+                        * add the additional whitespace needed after the
+                        * comment leader for the numbered list.  */
+                       for (i = 0; i < padding; i++)
+                       {
+                           ins_str((char_u *)" ");
+                           changed_bytes(curwin->w_cursor.lnum, leader_len);
+                       }
+                   }
+                   else
+                   {
 #endif
                        (void)set_indent(second_indent, SIN_CHANGED);
+#ifdef FEAT_COMMENTS
+                   }
+#endif
                }
            }
            first_line = FALSE;
index a84b3c3d8a07361591c3a58dc443efb56ad4d72c..99881dccdfc7ea0e0ff1946fdbbb79b285b80adf 100644 (file)
@@ -424,68 +424,35 @@ get_number_indent(lnum)
     colnr_T    col;
     pos_T      pos;
 
+    regmatch_T regmatch;
+    int                lead_len = 0;   /* length of comment leader */
+
     if (lnum > curbuf->b_ml.ml_line_count)
        return -1;
     pos.lnum = 0;
 
 #ifdef FEAT_COMMENTS
-    if (has_format_option(FO_Q_COMS) && has_format_option(FO_Q_NUMBER))
-    {
-       regmatch_T  regmatch;
-       int         lead_len;         /* length of comment leader */
-
+    /* In format_lines() (i.e. not insert mode), fo+=q is needed too...  */
+    if ((State & INSERT) || has_format_option(FO_Q_COMS))
        lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
-       regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
-       if (regmatch.regprog != NULL)
-       {
-           regmatch.rm_ic = FALSE;
-
-           /* vim_regexec() expects a pointer to a line.  This lets us
-            * start matching for the flp beyond any comment leader...  */
-           if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
-           {
-               pos.lnum = lnum;
-               pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
-#ifdef FEAT_VIRTUALEDIT
-               pos.coladd = 0;
 #endif
-           }
-       }
-       vim_free(regmatch.regprog);
-    }
-    else
+    regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+    if (regmatch.regprog != NULL)
     {
-       /*
-        * What follows is the orig code that is not "comment aware"...
-        *
-        * I'm not sure if regmmatch_T (multi-match) is needed in this case.
-        * It may be true that this section would work properly using the
-        * regmatch_T code above, in which case, these two separate sections
-        * should be consolidated w/ FEAT_COMMENTS making lead_len > 0...
-        */
-#endif
-       regmmatch_T  regmatch;
-
-       regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+       regmatch.rm_ic = FALSE;
 
-       if (regmatch.regprog != NULL)
+       /* vim_regexec() expects a pointer to a line.  This lets us
+        * start matching for the flp beyond any comment leader...  */
+       if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
        {
-           regmatch.rmm_ic = FALSE;
-           regmatch.rmm_maxcol = 0;
-           if (vim_regexec_multi(&regmatch, curwin, curbuf,
-                                                     lnum, (colnr_T)0, NULL))
-           {
-               pos.lnum = regmatch.endpos[0].lnum + lnum;
-               pos.col = regmatch.endpos[0].col;
+           pos.lnum = lnum;
+           pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
 #ifdef FEAT_VIRTUALEDIT
-               pos.coladd = 0;
+           pos.coladd = 0;
 #endif
-           }
-           vim_free(regmatch.regprog);
        }
-#ifdef FEAT_COMMENTS
     }
-#endif
+    vim_free(regmatch.regprog);
 
     if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
        return -1;
index 068d6a0987db981d286e78fb0403c402d8777f07..fcfc68c7b4d284e9963fcb9b780490d7e3fefa2b 100644 (file)
@@ -50,6 +50,17 @@ a b
 #a b
 }
 
+STARTTEST
+/^{/+1
+:set tw=5 fo=tcn comments=:#
+A b\ejA b\e
+ENDTEST
+
+{
+  1 a
+# 1 a
+}
+
 STARTTEST
 /^{/+1
 :set tw=5 fo=qn comments=:#
@@ -82,6 +93,14 @@ ENDTEST
    2bb
 }
 
+STARTTEST
+/^#/
+:setl tw=12 fo=tqnc comments=:#
+A foobar\e
+ENDTEST
+
+# 1 xxxxx
+
 STARTTEST
 :g/^STARTTEST/.,/^ENDTEST/d
 :1;/^Results/,$wq! test.out
index 33f03e062bd45cb68c789c84f873f776c239a476..646d223bd002e8f473aa9e175c02731c72966037 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    576,
 /**/
     575,
 /**/