commit d5f9be7dc8c10f276a5c1487e51e70f34c030f78
parent 4ad0490ce4c06c514b77f4c5a959ee57d1e5280d
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Thu, 18 Jan 2018 21:32:34 +0100
painting: look for an end match only after a start match, if any
This fixes https://savannah.gnu.org/bugs/?52925.
Reviewed-by: Brand Huntsman <alpha@qzx.com>
Diffstat:
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/color.c b/src/color.c
@@ -289,6 +289,7 @@ void check_the_multis(filestruct *line)
const colortype *ink;
bool astart, anend;
regmatch_t startmatch, endmatch;
+ char *afterstart;
/* If there is no syntax or no multiline regex, there is nothing to do. */
if (openfile->syntax == NULL || openfile->syntax->nmultis == 0)
@@ -302,7 +303,8 @@ void check_the_multis(filestruct *line)
alloc_multidata_if_needed(line);
astart = (regexec(ink->start, line->data, 1, &startmatch, 0) == 0);
- anend = (regexec(ink->end, line->data, 1, &endmatch, 0) == 0);
+ afterstart = line->data + (astart ? startmatch.rm_eo : 0);
+ anend = (regexec(ink->end, afterstart, 1, &endmatch, 0) == 0);
/* Check whether the multidata still matches the current situation. */
if (line->multidata[ink->id] == CNONE ||