patch 9.1.0504: inner-tag textobject confused about ">" in attributes
Commit:
https://github.com/vim/vim/commit/ca7f93e6f351b310c17cfc8f88acf21c839d6116
Author: Christian Brabandt <
c...@256bit.org>
Date: Wed Jun 19 20:26:51 2024 +0200
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 <
c...@256bit.org>
diff --git a/src/testdir/test_textobjects.vim b/src/testdir/test_textobjects.vim
index d5e772db5..2622b06a4 100644
--- a/src/testdir/test_textobjects.vim
+++ b/src/testdir/test_textobjects.vim
@@ -201,6 +201,18 @@ func Test_string_html_objects()
normal! 2k0vaty
call assert_equal("<div><div
attr=\"attr\"
></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&
" this was going beyond the end of the line
diff --git a/src/textobject.c b/src/textobject.c
index 1890d7c83..aa2db0770 100644
--- a/src/textobject.c
+++ b/src/textobject.c
@@ -1426,15 +1426,22 @@ again:
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;
while (inc_cursor() >= 0)
- if (*ml_get_cursor() == '>')
+ {
+ p = ml_get_cursor();
+ if (*p == '>' && !in_quotes)
{
inc_cursor();
start_pos = curwin->w_cursor;
break;
}
+ else if (*p == '"' || *p == '\'')
+ in_quotes = !in_quotes;
+ }
curwin->w_cursor = end_pos;
// If we are in Visual mode and now have the same text as before set
diff --git a/src/version.c b/src/version.c
index a366f35af..0d8b57d7f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 504,
/**/
503,
/**/