summaryrefslogtreecommitdiff
path: root/src/regexp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/regexp.c')
-rw-r--r--src/regexp.c32
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;
}
}