mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
updated for version 7.4a.036
Problem: "\p" in a regexp does not match double-width characters. (Yukihiro Nakadaira) Solution: Don't count display cells, use vim_isprintc().
This commit is contained in:
parent
9ba7e17de1
commit
ac7c33e38c
@ -4563,14 +4563,14 @@ regmatch(scan)
|
||||
break;
|
||||
|
||||
case PRINT:
|
||||
if (ptr2cells(reginput) != 1)
|
||||
if (!vim_isprintc(PTR2CHAR(reginput)))
|
||||
status = RA_NOMATCH;
|
||||
else
|
||||
ADVANCE_REGINPUT();
|
||||
break;
|
||||
|
||||
case SPRINT:
|
||||
if (VIM_ISDIGIT(*reginput) || ptr2cells(reginput) != 1)
|
||||
if (VIM_ISDIGIT(*reginput) || !vim_isprintc(PTR2CHAR(reginput)))
|
||||
status = RA_NOMATCH;
|
||||
else
|
||||
ADVANCE_REGINPUT();
|
||||
@ -5944,7 +5944,8 @@ regrepeat(p, maxcount)
|
||||
if (got_int)
|
||||
break;
|
||||
}
|
||||
else if (ptr2cells(scan) == 1 && (testval || !VIM_ISDIGIT(*scan)))
|
||||
else if (vim_isprintc(PTR2CHAR(scan)) == 1
|
||||
&& (testval || !VIM_ISDIGIT(*scan)))
|
||||
{
|
||||
mb_ptr_adv(scan);
|
||||
}
|
||||
|
@ -5749,12 +5749,12 @@ nfa_regmatch(prog, start, submatch, m)
|
||||
break;
|
||||
|
||||
case NFA_PRINT: /* \p */
|
||||
result = ptr2cells(reginput) == 1;
|
||||
result = vim_isprintc(PTR2CHAR(reginput));
|
||||
ADD_STATE_IF_MATCH(t->state);
|
||||
break;
|
||||
|
||||
case NFA_SPRINT: /* \P */
|
||||
result = !VIM_ISDIGIT(curc) && ptr2cells(reginput) == 1;
|
||||
result = !VIM_ISDIGIT(curc) && vim_isprintc(PTR2CHAR(reginput));
|
||||
ADD_STATE_IF_MATCH(t->state);
|
||||
break;
|
||||
|
||||
|
@ -228,6 +228,7 @@ STARTTEST
|
||||
:call add(tl, [2, '\v((ab)|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
|
||||
:call add(tl, [2, '\v(a(c*)+b)+', 'acbababaaa', 'acbabab', 'ab', ''])
|
||||
:call add(tl, [2, '\v(a|b*)+', 'aaaa', 'aaaa', ''])
|
||||
:call add(tl, [2, '\p*', 'aá ', 'aá '])
|
||||
:"
|
||||
:" Test greedy-ness and lazy-ness
|
||||
:call add(tl, [2, 'a\{-2,7}','aaaaaaaaaaaaa', 'aa'])
|
||||
|
@ -506,6 +506,9 @@ OK 2 - \v(a(c*)+b)+
|
||||
OK 0 - \v(a|b*)+
|
||||
OK 1 - \v(a|b*)+
|
||||
OK 2 - \v(a|b*)+
|
||||
OK 0 - \p*
|
||||
OK 1 - \p*
|
||||
OK 2 - \p*
|
||||
OK 0 - a\{-2,7}
|
||||
OK 1 - a\{-2,7}
|
||||
OK 2 - a\{-2,7}
|
||||
|
@ -29,6 +29,7 @@ STARTTEST
|
||||
|
||||
:" this is not a normal "i" but 0xec
|
||||
:call add(tl, [2, '\p\+', 'ìa', 'ìa'])
|
||||
:call add(tl, [2, '\p*', 'aあ', 'aあ'])
|
||||
|
||||
:"""" Test recognition of some character classes
|
||||
:call add(tl, [2, '\i\+', '&*¨xx ', 'xx'])
|
||||
@ -118,6 +119,16 @@ STARTTEST
|
||||
:endfor
|
||||
:unlet t tl e l
|
||||
|
||||
:" check that 'ambiwidth' does not change the meaning of \p
|
||||
:set regexpengine=1 ambiwidth=single
|
||||
:$put ='eng 1 ambi single: ' . match(\"\u00EC\", '\p')
|
||||
:set regexpengine=1 ambiwidth=double
|
||||
:$put ='eng 1 ambi double: ' . match(\"\u00EC\", '\p')
|
||||
:set regexpengine=2 ambiwidth=single
|
||||
:$put ='eng 2 ambi single: ' . match(\"\u00EC\", '\p')
|
||||
:set regexpengine=2 ambiwidth=double
|
||||
:$put ='eng 2 ambi double: ' . match(\"\u00EC\", '\p')
|
||||
|
||||
:/\%#=1^Results/,$wq! test.out
|
||||
ENDTEST
|
||||
|
||||
|
@ -17,6 +17,9 @@ OK 2 - [ม[:alpha:][=a=]]\+
|
||||
OK 0 - \p\+
|
||||
OK 1 - \p\+
|
||||
OK 2 - \p\+
|
||||
OK 0 - \p*
|
||||
OK 1 - \p*
|
||||
OK 2 - \p*
|
||||
OK 0 - \i\+
|
||||
OK 1 - \i\+
|
||||
OK 2 - \i\+
|
||||
@ -113,3 +116,7 @@ OK 2 - \Zֹ\+
|
||||
OK 0 - [^[=a=]]\+
|
||||
OK 1 - [^[=a=]]\+
|
||||
OK 2 - [^[=a=]]\+
|
||||
eng 1 ambi single: 0
|
||||
eng 1 ambi double: 0
|
||||
eng 2 ambi single: 0
|
||||
eng 2 ambi double: 0
|
||||
|
@ -727,6 +727,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
36,
|
||||
/**/
|
||||
35,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user