Mercurial > vim
changeset 5899:60cdaa05a6ad v7.4.292
updated for version 7.4.292
Problem: Searching for "a" does not match accented "a" with new regexp
engine, does match with old engine. (David B?rgin)
"ca" does not match "ca" with accented "a" with either engine.
Solution: Change the old engine, check for following composing character
also for single-byte patterns.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 13 May 2014 18:04:00 +0200 |
parents | f8327660d195 |
children | 20c0da43f879 |
files | src/regexp.c src/testdir/test95.in src/testdir/test95.ok src/version.c |
diffstat | 4 files changed, 29 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- 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; } }
--- 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