0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 9.1.0504: inner-tag textobject confused about ">" in attributes

Problem:  inner-tag textobject confused about ">" in attributes
Solution: Skip over quoted '>' when determining the start position

fixes: #15043
closes: #15049

Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt
2024-06-19 20:26:51 +02:00
parent 43eef882ff
commit ca7f93e6f3
3 changed files with 23 additions and 2 deletions

View File

@@ -201,6 +201,18 @@ func Test_string_html_objects()
normal! 2k0vaty normal! 2k0vaty
call assert_equal("<div><div\nattr=\"attr\"\n></div></div>", @", e) call assert_equal("<div><div\nattr=\"attr\"\n></div></div>", @", e)
" tag, that includes a > in some attribute
let t = "<div attr=\"attr >> foo >> bar \">Hello</div>"
$put =t
normal! fHyit
call assert_equal("Hello", @", e)
" tag, that includes a > in some attribute
let t = "<div attr='attr >> foo >> bar '>Hello 123</div>"
$put =t
normal! fHyit
call assert_equal("Hello 123", @", e)
set quoteescape& set quoteescape&
" this was going beyond the end of the line " this was going beyond the end of the line

View File

@@ -1426,15 +1426,22 @@ again:
if (!do_include) if (!do_include)
{ {
// Exclude the start tag. // Exclude the start tag,
// but skip over '>' if it appears in quotes
int in_quotes = FALSE;
curwin->w_cursor = start_pos; curwin->w_cursor = start_pos;
while (inc_cursor() >= 0) while (inc_cursor() >= 0)
if (*ml_get_cursor() == '>') {
p = ml_get_cursor();
if (*p == '>' && !in_quotes)
{ {
inc_cursor(); inc_cursor();
start_pos = curwin->w_cursor; start_pos = curwin->w_cursor;
break; break;
} }
else if (*p == '"' || *p == '\'')
in_quotes = !in_quotes;
}
curwin->w_cursor = end_pos; curwin->w_cursor = end_pos;
// If we are in Visual mode and now have the same text as before set // If we are in Visual mode and now have the same text as before set

View File

@@ -704,6 +704,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 */
/**/
504,
/**/ /**/
503, 503,
/**/ /**/