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
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;
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(®match, 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(®match, ml_get(lnum) + lead_len, (colnr_T)0))
{
- regmatch.rmm_ic = FALSE;
- regmatch.rmm_maxcol = 0;
- if (vim_regexec_multi(®match, 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;