]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0504: inner-tag textobject confused about ">" in attributes v9.1.0504
authorChristian Brabandt <cb@256bit.org>
Wed, 19 Jun 2024 18:26:51 +0000 (20:26 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 19 Jun 2024 18:26:51 +0000 (20:26 +0200)
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>
src/testdir/test_textobjects.vim
src/textobject.c
src/version.c

index d5e772db50958d00064c6ac0d64bc67b9d75462e..2622b06a4a6800487dd97ec99c5a9bf821158f8e 100644 (file)
@@ -201,6 +201,18 @@ func Test_string_html_objects()
     normal! 2k0vaty
     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&
 
     " this was going beyond the end of the line
index 1890d7c83fedc27f5eb06958acff8f6fa2492981..aa2db0770942d36c1e591114a8a4cb26a51d103b 100644 (file)
@@ -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
index a366f35af806d6ab585a1ac829a8f5f8b1d1d31e..0d8b57d7f13e93e1f1811e372bdf6be6d6e5d098 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    504,
 /**/
     503,
 /**/