From 669453506cfe01fc482c809b3c9cbc90237cd2e8 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Fri, 20 Jan 2017 19:20:30 +0100 Subject: [PATCH] painting: when skipping a zero-length match, skip a character, not a byte --- src/winio.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/winio.c b/src/winio.c index ae904dcd..2ecadfb8 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2384,9 +2384,10 @@ void edit_draw(filestruct *fileptr, const char *converted, REG_NOMATCH) break; - /* Skip over a zero-length regex match. */ + /* If the match is of length zero, skip it. */ if (startmatch.rm_so == startmatch.rm_eo) { - index += startmatch.rm_eo + 1; + index = move_mbright(fileptr->data, + index + startmatch.rm_eo); continue; } @@ -2484,10 +2485,11 @@ void edit_draw(filestruct *fileptr, const char *converted, /* Begin searching for an end after the start match. */ index += startmatch.rm_eo; /* If the start match is zero-length, don't get stuck. */ - if (startmatch.rm_so == startmatch.rm_eo) - if (++index > linelen) + if (startmatch.rm_so == startmatch.rm_eo) { + index = move_mbright(start_line->data, index); + if (index > linelen) break; - + } /* If there is no end after this last start, good. */ if (regexec(varnish->end, start_line->data + index, 0, NULL, REG_NOTBOL) == REG_NOMATCH) @@ -2578,13 +2580,13 @@ void edit_draw(filestruct *fileptr, const char *converted, #endif } index = endmatch.rm_eo; - /* Skip over a zero-length match. */ - if (endmatch.rm_so == endmatch.rm_eo) - index += 1; - if (index > linelen) - break; - else - continue; + /* If the end match is of length zero, step ahead. */ + if (endmatch.rm_so == endmatch.rm_eo) { + index = move_mbright(fileptr->data, index); + if (index > linelen) + break; + } + continue; } /* There is no end on this line. But maybe on later lines? */