diff --git a/src/color.c b/src/color.c index 2227fc5c363472994a67136dca496d22e1d91d57..30c7609e6a44c3a88377e9219bdcb13761f00e20 100644 --- a/src/color.c +++ b/src/color.c @@ -295,7 +295,7 @@ void color_update(void) void check_the_multis(filestruct *line) { const colortype *ink; - int nobegin = 0, noend = 0; + int astart, anend; regmatch_t startmatch, endmatch; /* If there is no syntax or no multiline regex, there is nothing to do. */ @@ -309,21 +309,22 @@ void check_the_multis(filestruct *line) alloc_multidata_if_needed(line); + astart = regexec(ink->start, line->data, 1, &startmatch, 0); + anend = regexec(ink->end, line->data, 1, &endmatch, 0); + /* Check whether the multidata still matches the current situation. */ - nobegin = regexec(ink->start, line->data, 1, &startmatch, 0); - noend = regexec(ink->end, line->data, 1, &endmatch, 0); if (line->multidata[ink->id] == CNONE || line->multidata[ink->id] == CWHOLELINE) { - if (nobegin && noend) + if (!astart && !anend) continue; } else if (line->multidata[ink->id] == CSTARTENDHERE) { - if (!nobegin && !noend && startmatch.rm_so < endmatch.rm_so) + if (astart && anend && startmatch.rm_so < endmatch.rm_so) continue; } else if (line->multidata[ink->id] == CBEGINBEFORE) { - if (nobegin && !noend) + if (!astart && anend) continue; } else if (line->multidata[ink->id] == CENDAFTER) { - if (!nobegin && noend) + if (astart && !anend) continue; }