changeset 4466:4ff8fa416a0d v7.3.981

updated for version 7.3.981 Problem: In the old regexp engine \i, \I, \f and \F don't work on multi-byte characters. Solution: Dereference pointer properly.
author Bram Moolenaar <bram@vim.org>
date Tue, 21 May 2013 00:03:02 +0200
parents bf405e5aabf6
children 6ea4431f7939
files src/regexp.c src/testdir/test64.in src/testdir/test64.ok src/version.c
diffstat 4 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -5758,7 +5758,7 @@ regrepeat(p, maxcount)
       case SIDENT + ADD_NL:
 	while (count < maxcount)
 	{
-	    if (vim_isIDc(*scan) && (testval || !VIM_ISDIGIT(*scan)))
+	    if (vim_isIDc(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
 	    {
 		mb_ptr_adv(scan);
 	    }
@@ -5819,7 +5819,7 @@ regrepeat(p, maxcount)
       case SFNAME + ADD_NL:
 	while (count < maxcount)
 	{
-	    if (vim_isfilec(*scan) && (testval || !VIM_ISDIGIT(*scan)))
+	    if (vim_isfilec(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
 	    {
 		mb_ptr_adv(scan);
 	    }
--- a/src/testdir/test64.in
+++ b/src/testdir/test64.in
@@ -262,6 +262,10 @@ STARTTEST
 :call add(tl, ['[a-zA-Z]', 'a', 'a'])
 :call add(tl, ['[A-Z]', 'a'])
 :call add(tl, ['\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa'])
+:call add(tl, ['\i\+', '&*§xx ', 'xx'])
+:call add(tl, ['\%#=1\i\+', '&*§xx ', 'xx'])
+:call add(tl, ['\f\+', '&*Ÿfname ', 'fname'])
+:call add(tl, ['\%#=1\i\+', '&*Ÿfname ', 'fname'])
 
 :"""" Tests for \z features
 :call add(tl, ['xx \ze test', 'xx '])					" must match after \ze
--- a/src/testdir/test64.ok
+++ b/src/testdir/test64.ok
@@ -203,6 +203,10 @@ OK - [a-z]
 OK - [a-zA-Z]
 OK - [A-Z]
 OK - \C[^A-Z]\+
+OK - \i\+
+OK - \%#=1\i\+
+OK - \f\+
+OK - \%#=1\i\+
 OK - xx \ze test
 OK - abc\zeend
 OK - abc\zsdd
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    981,
+/**/
     980,
 /**/
     979,