summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-06-29 15:04:49 +0200
committerBram Moolenaar <Bram@vim.org>2012-06-29 15:04:49 +0200
commit96b7ca5142d72d2c8e79d15f9c38f41d6657be40 (patch)
tree7df31318ce86d7ba71661310414195877d3fc197
parent89f940fcacf0b0996c05537034b37b8c6bb87cf5 (diff)
downloadvim-git-96b7ca5142d72d2c8e79d15f9c38f41d6657be40.tar.gz
updated for version 7.3.576v7.3.576
Problem: Formatting of lists inside comments is not right yet. Solution: Use another solution and add a test. (Tor Perkins)
-rw-r--r--src/edit.c37
-rw-r--r--src/misc1.c63
-rw-r--r--src/testdir/test68.in19
-rw-r--r--src/version.c2
4 files changed, 67 insertions, 54 deletions
diff --git a/src/edit.c b/src/edit.c
index aafd226fa..78b4d1c24 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -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
@@ -6336,7 +6337,31 @@ internal_format(textwidth, second_indent, flags, format_only, c)
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;
diff --git a/src/misc1.c b/src/misc1.c
index a84b3c3d8..99881dccd 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -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;
diff --git a/src/testdir/test68.in b/src/testdir/test68.in
index 068d6a098..fcfc68c7b 100644
--- a/src/testdir/test68.in
+++ b/src/testdir/test68.in
@@ -52,6 +52,17 @@ a b
STARTTEST
/^{/+1
+:set tw=5 fo=tcn comments=:#
+A bjA b
+ENDTEST
+
+{
+ 1 a
+# 1 a
+}
+
+STARTTEST
+/^{/+1
:set tw=5 fo=qn comments=:#
gwap
ENDTEST
@@ -83,6 +94,14 @@ ENDTEST
}
STARTTEST
+/^#/
+:setl tw=12 fo=tqnc comments=:#
+A foobar
+ENDTEST
+
+# 1 xxxxx
+
+STARTTEST
:g/^STARTTEST/.,/^ENDTEST/d
:1;/^Results/,$wq! test.out
ENDTEST
diff --git a/src/version.c b/src/version.c
index 33f03e062..646d223bd 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 576,
+/**/
575,
/**/
574,