mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.0365: tag kind can't be a multi-byte character
Problem: Tag kind can't be a multi-byte character. (Marcin Szamotulski) Solution: Recognize multi-byte character. (closes #5724)
This commit is contained in:
parent
693e80e938
commit
283e5f4e69
13
src/tag.c
13
src/tag.c
@ -3229,7 +3229,9 @@ parse_match(
|
|||||||
tagp->command_end = p;
|
tagp->command_end = p;
|
||||||
p += 2; // skip ";\""
|
p += 2; // skip ";\""
|
||||||
if (*p++ == TAB)
|
if (*p++ == TAB)
|
||||||
while (ASCII_ISALPHA(*p))
|
// Accept ASCII alphabetic kind characters and any multi-byte
|
||||||
|
// character.
|
||||||
|
while (ASCII_ISALPHA(*p) || mb_ptr2len(p) > 1)
|
||||||
{
|
{
|
||||||
if (STRNCMP(p, "kind:", 5) == 0)
|
if (STRNCMP(p, "kind:", 5) == 0)
|
||||||
tagp->tagkind = p + 5;
|
tagp->tagkind = p + 5;
|
||||||
@ -3245,20 +3247,21 @@ parse_match(
|
|||||||
tagp->tagkind = p;
|
tagp->tagkind = p;
|
||||||
if (pt == NULL)
|
if (pt == NULL)
|
||||||
break;
|
break;
|
||||||
p = pt + 1;
|
p = pt;
|
||||||
|
MB_PTR_ADV(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tagp->tagkind != NULL)
|
if (tagp->tagkind != NULL)
|
||||||
{
|
{
|
||||||
for (p = tagp->tagkind;
|
for (p = tagp->tagkind;
|
||||||
*p && *p != '\t' && *p != '\r' && *p != '\n'; ++p)
|
*p && *p != '\t' && *p != '\r' && *p != '\n'; MB_PTR_ADV(p))
|
||||||
;
|
;
|
||||||
tagp->tagkind_end = p;
|
tagp->tagkind_end = p;
|
||||||
}
|
}
|
||||||
if (tagp->user_data != NULL)
|
if (tagp->user_data != NULL)
|
||||||
{
|
{
|
||||||
for (p = tagp->user_data;
|
for (p = tagp->user_data;
|
||||||
*p && *p != '\t' && *p != '\r' && *p != '\n'; ++p)
|
*p && *p != '\t' && *p != '\r' && *p != '\n'; MB_PTR_ADV(p))
|
||||||
;
|
;
|
||||||
tagp->user_data_end = p;
|
tagp->user_data_end = p;
|
||||||
}
|
}
|
||||||
@ -4006,7 +4009,7 @@ get_tags(list_T *list, char_u *pat, char_u *buf_fname)
|
|||||||
if (tp.command_end != NULL)
|
if (tp.command_end != NULL)
|
||||||
{
|
{
|
||||||
for (p = tp.command_end + 3;
|
for (p = tp.command_end + 3;
|
||||||
*p != NUL && *p != '\n' && *p != '\r'; ++p)
|
*p != NUL && *p != '\n' && *p != '\r'; MB_PTR_ADV(p))
|
||||||
{
|
{
|
||||||
if (p == tp.tagkind || (p + 5 == tp.tagkind
|
if (p == tp.tagkind || (p + 5 == tp.tagkind
|
||||||
&& STRNCMP(p, "kind:", 5) == 0))
|
&& STRNCMP(p, "kind:", 5) == 0))
|
||||||
|
@ -7,6 +7,7 @@ func Test_taglist()
|
|||||||
\ "BFoo\tXbar\t1",
|
\ "BFoo\tXbar\t1",
|
||||||
\ "BBar\tXbar\t2",
|
\ "BBar\tXbar\t2",
|
||||||
\ "Kindly\tXbar\t3;\"\tv\tfile:",
|
\ "Kindly\tXbar\t3;\"\tv\tfile:",
|
||||||
|
\ "Lambda\tXbar\t3;\"\tλ\tfile:",
|
||||||
\ "Command\tXbar\tcall cursor(3, 4)|;\"\td",
|
\ "Command\tXbar\tcall cursor(3, 4)|;\"\td",
|
||||||
\ ], 'Xtags')
|
\ ], 'Xtags')
|
||||||
set tags=Xtags
|
set tags=Xtags
|
||||||
@ -17,12 +18,16 @@ func Test_taglist()
|
|||||||
call assert_equal(['FFoo', 'BFoo'], map(taglist("Foo", "Xfoo"), {i, v -> v.name}))
|
call assert_equal(['FFoo', 'BFoo'], map(taglist("Foo", "Xfoo"), {i, v -> v.name}))
|
||||||
call assert_equal(['BFoo', 'FFoo'], map(taglist("Foo", "Xbar"), {i, v -> v.name}))
|
call assert_equal(['BFoo', 'FFoo'], map(taglist("Foo", "Xbar"), {i, v -> v.name}))
|
||||||
|
|
||||||
let kind = taglist("Kindly")
|
let kindly = taglist("Kindly")
|
||||||
call assert_equal(1, len(kind))
|
call assert_equal(1, len(kindly))
|
||||||
call assert_equal('v', kind[0]['kind'])
|
call assert_equal('v', kindly[0]['kind'])
|
||||||
call assert_equal('3', kind[0]['cmd'])
|
call assert_equal('3', kindly[0]['cmd'])
|
||||||
call assert_equal(1, kind[0]['static'])
|
call assert_equal(1, kindly[0]['static'])
|
||||||
call assert_equal('Xbar', kind[0]['filename'])
|
call assert_equal('Xbar', kindly[0]['filename'])
|
||||||
|
|
||||||
|
let lambda = taglist("Lambda")
|
||||||
|
call assert_equal(1, len(lambda))
|
||||||
|
call assert_equal('λ', lambda[0]['kind'])
|
||||||
|
|
||||||
let cmd = taglist("Command")
|
let cmd = taglist("Command")
|
||||||
call assert_equal(1, len(cmd))
|
call assert_equal(1, len(cmd))
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
365,
|
||||||
/**/
|
/**/
|
||||||
364,
|
364,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user