Skip to content

Commit

Permalink
updated for version 7.3.576
Browse files Browse the repository at this point in the history
Problem:    Formatting of lists inside comments is not right yet.
Solution:   Use another solution and add a test. (Tor Perkins)
  • Loading branch information
brammool committed Jun 29, 2012
1 parent b1b1761 commit f90d559
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 54 deletions.
37 changes: 31 additions & 6 deletions src/edit.c
Expand Up @@ -6320,23 +6320,48 @@ 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
if (State & VREPLACE_FLAG)
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;
Expand Down
63 changes: 15 additions & 48 deletions src/misc1.c
Expand Up @@ -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;
Expand Down
19 changes: 19 additions & 0 deletions src/testdir/test68.in
Expand Up @@ -50,6 +50,17 @@ a b
#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=:#
Expand Down Expand Up @@ -82,6 +93,14 @@ ENDTEST
2bb
}

STARTTEST
/^#/
:setl tw=12 fo=tqnc comments=:#
A foobar
ENDTEST

# 1 xxxxx

STARTTEST
:g/^STARTTEST/.,/^ENDTEST/d
:1;/^Results/,$wq! test.out
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -714,6 +714,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
576,
/**/
575,
/**/
Expand Down

0 comments on commit f90d559

Please sign in to comment.