From 6082bea6acae266c392cd25317414cf3a167a596 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 13 May 2014 18:04:00 +0200 Subject: [PATCH] =?utf8?q?updated=20for=20version=207.4.292=20Problem:=20?= =?utf8?q?=20=20=20Searching=20for=20"a"=20does=20not=20match=20accented?= =?utf8?q?=20"a"=20with=20new=20regexp=20=20=20=20=20=20=20=20=20=20=20=20?= =?utf8?q?=20engine,=20does=20match=20with=20old=20engine.=20(David=20B?= =?utf8?q?=C3=BCrgin)=20=20=20=20=20=20=20=20=20=20=20=20=20"ca"=20does=20?= =?utf8?q?not=20match=20"ca"=20with=20accented=20"a"=20with=20either=20eng?= =?utf8?q?ine.=20Solution:=20=20=20Change=20the=20old=20engine,=20check=20?= =?utf8?q?for=20following=20composing=20character=20=20=20=20=20=20=20=20?= =?utf8?q?=20=20=20=20=20also=20for=20single-byte=20patterns.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/regexp.c | 32 +++++++++++++++++++------------- src/testdir/test95.in | 2 ++ src/testdir/test95.ok | 6 ++++++ src/version.c | 2 ++ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/regexp.c b/src/regexp.c index fe837721e..d66cd2062 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -4692,31 +4692,37 @@ regmatch(scan) /* match empty string always works; happens when "~" is * empty. */ } - else if (opnd[1] == NUL + else + { + if (opnd[1] == NUL #ifdef FEAT_MBYTE && !(enc_utf8 && ireg_ic) #endif ) - ++reginput; /* matched a single char */ - else - { - len = (int)STRLEN(opnd); - /* Need to match first byte again for multi-byte. */ - if (cstrncmp(opnd, reginput, &len) != 0) - status = RA_NOMATCH; + { + len = 1; /* matched a single byte above */ + } + else + { + /* Need to match first byte again for multi-byte. */ + len = (int)STRLEN(opnd); + if (cstrncmp(opnd, reginput, &len) != 0) + status = RA_NOMATCH; + } #ifdef FEAT_MBYTE /* Check for following composing character. */ - else if (enc_utf8 - && UTF_COMPOSINGLIKE(reginput, reginput + len)) + if (status != RA_NOMATCH + && enc_utf8 + && UTF_COMPOSINGLIKE(reginput, reginput + len) + && !ireg_icombine) { /* raaron: This code makes a composing character get * ignored, which is the correct behavior (sometimes) * for voweled Hebrew texts. */ - if (!ireg_icombine) - status = RA_NOMATCH; + status = RA_NOMATCH; } #endif - else + if (status != RA_NOMATCH) reginput += len; } } diff --git a/src/testdir/test95.in b/src/testdir/test95.in index 90fa69945..817e1f12e 100644 --- a/src/testdir/test95.in +++ b/src/testdir/test95.in @@ -50,6 +50,8 @@ STARTTEST :call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"]) :call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"]) :call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"]) +:call add(tl, [2, "a", "ca\u0300t"]) +:call add(tl, [2, "a\u0300", "ca\u0300t", "a\u0300"]) :"""" Test \Z diff --git a/src/testdir/test95.ok b/src/testdir/test95.ok index c378221a7..e2baee8d2 100644 --- a/src/testdir/test95.ok +++ b/src/testdir/test95.ok @@ -67,6 +67,12 @@ OK 2 - ֹֻ OK 0 - .ֹֻ OK 1 - .ֹֻ OK 2 - .ֹֻ +OK 0 - a +OK 1 - a +OK 2 - a +OK 0 - à +OK 1 - à +OK 2 - à OK 0 - ú\Z OK 1 - ú\Z OK 2 - ú\Z diff --git a/src/version.c b/src/version.c index 030e6f21a..5efd62d2a 100644 --- a/src/version.c +++ b/src/version.c @@ -734,6 +734,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 292, /**/ 291, /**/ -- 2.50.1