diff options
-rw-r--r-- | src/nvim/regexp.c | 37 | ||||
-rw-r--r-- | src/nvim/testdir/test95.in | 2 | ||||
-rw-r--r-- | src/nvim/testdir/test95.ok | 6 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
4 files changed, 29 insertions, 18 deletions
diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c index 8c0652dd01..b37fb1e39d 100644 --- a/src/nvim/regexp.c +++ b/src/nvim/regexp.c @@ -4093,25 +4093,28 @@ regmatch ( else if (*opnd == NUL) { /* match empty string always works; happens when "~" is * empty. */ - } else if (opnd[1] == NUL - && !(enc_utf8 && ireg_ic) - ) - ++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; - /* Check for following composing character. */ - else if (enc_utf8 - && UTF_COMPOSINGLIKE(reginput, reginput + len)) { - /* raaron: This code makes a composing character get - * ignored, which is the correct behavior (sometimes) - * for voweled Hebrew texts. */ - if (!ireg_icombine) + } else { + if (opnd[1] == NUL && !(enc_utf8 && ireg_ic)) { + 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; - } else + } + } + // Check for following composing character. + 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. + status = RA_NOMATCH; + } + if (status != RA_NOMATCH) { reginput += len; + } } } break; diff --git a/src/nvim/testdir/test95.in b/src/nvim/testdir/test95.in index 9afcc7fa6a..568563f88d 100644 --- a/src/nvim/testdir/test95.in +++ b/src/nvim/testdir/test95.in @@ -49,6 +49,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/nvim/testdir/test95.ok b/src/nvim/testdir/test95.ok index c378221a70..e2baee8d29 100644 --- a/src/nvim/testdir/test95.ok +++ b/src/nvim/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/nvim/version.c b/src/nvim/version.c index 84165f021a..32dcfbe575 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -226,7 +226,7 @@ static int included_patches[] = { //295, //294, //293, - //292, + 292, //291, //290, 289, |