mirror of
https://github.com/vim/vim.git
synced 2025-10-06 05:44:14 -04:00
patch 8.2.0372: prop_find() may not find text property at start of the line
Problem: Prop_find() may not find text property at start of the line. Solution: Adjust the loop to find properties. (Axel Forsman, closes #5761, closes #5663)
This commit is contained in:
@@ -1166,3 +1166,30 @@ func Test_textprop_ins_str()
|
|||||||
call prop_remove({'type': 'test'})
|
call prop_remove({'type': 'test'})
|
||||||
call prop_type_delete('test')
|
call prop_type_delete('test')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_find_prop_later_in_line()
|
||||||
|
new
|
||||||
|
call prop_type_add('test', {'highlight': 'ErrorMsg'})
|
||||||
|
call setline(1, 'just some text')
|
||||||
|
call prop_add(1, 1, {'length': 4, 'type': 'test'})
|
||||||
|
call prop_add(1, 10, {'length': 3, 'type': 'test'})
|
||||||
|
|
||||||
|
call assert_equal({'id': 0, 'lnum': 1, 'col': 10, 'end': 1, 'type': 'test', 'length': 3, 'start': 1},
|
||||||
|
\ prop_find(#{type: 'test', lnum: 1, col: 6}))
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
call prop_type_delete('test')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_find_zerowidth_prop_sol()
|
||||||
|
new
|
||||||
|
call prop_type_add('test', {'highlight': 'ErrorMsg'})
|
||||||
|
call setline(1, 'just some text')
|
||||||
|
call prop_add(1, 1, {'length': 0, 'type': 'test'})
|
||||||
|
|
||||||
|
call assert_equal({'id': 0, 'lnum': 1, 'col': 1, 'end': 1, 'type': 'test', 'length': 0, 'start': 1},
|
||||||
|
\ prop_find(#{type: 'test', lnum: 1}))
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
call prop_type_delete('test')
|
||||||
|
endfunc
|
||||||
|
@@ -663,24 +663,22 @@ f_prop_find(typval_T *argvars, typval_T *rettv)
|
|||||||
mch_memmove(&prop, text + textlen + i * sizeof(textprop_T),
|
mch_memmove(&prop, text + textlen + i * sizeof(textprop_T),
|
||||||
sizeof(textprop_T));
|
sizeof(textprop_T));
|
||||||
|
|
||||||
|
if (dir < 0)
|
||||||
|
{
|
||||||
|
if (col < prop.tp_col)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (prop.tp_col + prop.tp_len - (prop.tp_len != 0) < col)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (prop.tp_id == id || prop.tp_type == type_id)
|
if (prop.tp_id == id || prop.tp_type == type_id)
|
||||||
{
|
{
|
||||||
// Check if the starting position has text props.
|
// Check if the starting position has text props.
|
||||||
if (lnum_start == lnum)
|
if (lnum_start == lnum
|
||||||
{
|
&& col >= prop.tp_col
|
||||||
if (col >= prop.tp_col
|
&& (col <= prop.tp_col + prop.tp_len
|
||||||
&& (col <= prop.tp_col + prop.tp_len-1))
|
- (prop.tp_len != 0)))
|
||||||
start_pos_has_prop = 1;
|
start_pos_has_prop = 1;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Not at the first line of the search so adjust col to
|
|
||||||
// indicate that we're continuing from prev/next line.
|
|
||||||
if (dir < 0)
|
|
||||||
col = buf->b_ml.ml_line_len;
|
|
||||||
else
|
|
||||||
col = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
prop_start = !(prop.tp_flags & TP_FLAG_CONT_PREV);
|
prop_start = !(prop.tp_flags & TP_FLAG_CONT_PREV);
|
||||||
prop_end = !(prop.tp_flags & TP_FLAG_CONT_NEXT);
|
prop_end = !(prop.tp_flags & TP_FLAG_CONT_NEXT);
|
||||||
@@ -705,17 +703,6 @@ f_prop_find(typval_T *argvars, typval_T *rettv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dir < 0)
|
|
||||||
{
|
|
||||||
if (col < prop.tp_col)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (col > prop.tp_col + prop.tp_len-1)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
prop_fill_dict(rettv->vval.v_dict, &prop, buf);
|
prop_fill_dict(rettv->vval.v_dict, &prop, buf);
|
||||||
dict_add_number(rettv->vval.v_dict, "lnum", lnum);
|
dict_add_number(rettv->vval.v_dict, "lnum", lnum);
|
||||||
|
|
||||||
@@ -735,6 +722,8 @@ f_prop_find(typval_T *argvars, typval_T *rettv)
|
|||||||
break;
|
break;
|
||||||
lnum--;
|
lnum--;
|
||||||
}
|
}
|
||||||
|
// Adjust col to indicate that we're continuing from prev/next line.
|
||||||
|
col = dir < 0 ? buf->b_ml.ml_line_len : 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -738,6 +738,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
372,
|
||||||
/**/
|
/**/
|
||||||
371,
|
371,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user