]> granicus.if.org Git - vim/commitdiff
updated for version 7.4a.036 v7.4a.036
authorBram Moolenaar <Bram@vim.org>
Sun, 21 Jul 2013 15:06:00 +0000 (17:06 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 21 Jul 2013 15:06:00 +0000 (17:06 +0200)
Problem:    "\p" in a regexp does not match double-width characters.
            (Yukihiro Nakadaira)
Solution:   Don't count display cells, use vim_isprintc().

src/regexp.c
src/regexp_nfa.c
src/testdir/test64.in
src/testdir/test64.ok
src/testdir/test95.in
src/testdir/test95.ok
src/version.c

index fdcd9f41e3352c4a45b0cd2b2fb3befc2d0f0402..06bbb4a540c8676b544934ef954a0c4d353bf8f2 100644 (file)
@@ -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);
            }
index 72e3a74ff5a3cb4fd1f8f2a541e61e05f8d7326d..07e2fa1fefc107dd0f9a9e91a3e6988018d32ff5 100644 (file)
@@ -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;
 
index ec6107fb1ae001e245a75c1272e75d76766a1732..a946aa45095a8d275846b7431cf35cc16c60ded7 100644 (file)
@@ -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'])
index 4203c8f391333a0ffa4acc52b3a15499c7b94e97..efcf8dd5088387f0574822e97d51c4445c25fb7a 100644 (file)
@@ -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}
index 306c1b4f90cd412bb8e1d8cf221f4bca469eb323..90fa69945ac3572c3324fc2b67adaae08dc52ef1 100644 (file)
@@ -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
 
index b9cdd2e1857ab5561f4d69978ee4510f7de697ae..c378221a707865487a6ee0f83b3950728d03fdf4 100644 (file)
@@ -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
index 04f05b0383ee127ad87853b59a80a8c9638caaba..b22b9749c33e86dde5aac9dd1f61f0eb34d643dd 100644 (file)
@@ -727,6 +727,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    36,
 /**/
     35,
 /**/