summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Brabandt <cb@256bit.org>2024-06-19 20:26:51 +0200
committerChristian Brabandt <cb@256bit.org>2024-06-19 20:26:51 +0200
commitca7f93e6f351b310c17cfc8f88acf21c839d6116 (patch)
tree1109927a7cde057e3c749c48f8e36ddc8c83d795
parent43eef882ff42e673af1e753892801ba20c5d002a (diff)
patch 9.1.0504: inner-tag textobject confused about ">" in attributesv9.1.0504
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>
-rw-r--r--src/testdir/test_textobjects.vim12
-rw-r--r--src/textobject.c11
-rw-r--r--src/version.c2
3 files changed, 23 insertions, 2 deletions
diff --git a/src/testdir/test_textobjects.vim b/src/testdir/test_textobjects.vim
index d5e772db50..2622b06a4a 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\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
diff --git a/src/textobject.c b/src/textobject.c
index 1890d7c83f..aa2db07709 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 a366f35af8..0d8b57d7f1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 504,
+/**/
503,
/**/
502,
#336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/*
 * QorIQ FMan v3 1g port #2 device tree stub [ controller @ offset 0x400000 ]
 *
 * Copyright 2012 - 2015 Freescale Semiconductor Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *	 notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *	 notice, this list of conditions and the following disclaimer in the
 *	 documentation and/or other materials provided with the distribution.
 *     * Neither the name of Freescale Semiconductor nor the
 *	 names of its contributors may be used to endorse or promote products
 *	 derived from this software without specific prior written permission.
 *
 *
 * ALTERNATIVELY, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") as published by the Free Software
 * Foundation, either version 2 of that License or (at your option) any
 * later version.
 *
 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

fman@400000 {
	fman0_rx_0x0a: port@8a000 {
		cell-index = <0xa>;
		compatible = "fsl,fman-v3-port-rx";
		reg = <0x8a000 0x1000>;
	};

	fman0_tx_0x2a: port@aa000 {
		cell-index = <0x2a>;
		compatible = "fsl,fman-v3-port-tx";
		reg = <0xaa000 0x1000>;
	};

	ethernet@e4000 {
		cell-index = <2>;
		compatible = "fsl,fman-memac";
		reg = <0xe4000 0x1000>;
		fsl,fman-ports = <&fman0_rx_0x0a &fman0_tx_0x2a>;
		ptp-timer = <&ptp_timer0>;
		pcsphy-handle = <&pcsphy2>;
	};

	mdio@e5000 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
		reg = <0xe5000 0x1000>;
		fsl,erratum-a011043; /* must ignore read errors */

		pcsphy2: ethernet-phy@0 {
			reg = <0x0>;
		};
	};
};