diff options
Diffstat (limited to 'src/regexp.c')
-rw-r--r-- | src/regexp.c | 32 |
1 files changed, 19 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; } } |