painting: don't look at the current multidata when coloring a line

When coloring a line, look only at the multidata of the preceding
line, and based on that determine what to seek in the current line.

This fixes https://savannah.gnu.org/bugs/?50292.
master
Benno Schulenberg 2017-02-12 20:28:14 +01:00
parent b3bcc8eeac
commit 6bd94040df
1 changed files with 2 additions and 19 deletions

View File

@ -2436,25 +2436,8 @@ void edit_draw(filestruct *fileptr, const char *converted,
}
}
/* First see if the multidata was maybe already calculated. */
if (fileptr->multidata[varnish->id] == CNONE)
goto tail_of_loop;
else if (fileptr->multidata[varnish->id] == CWHOLELINE) {
mvwaddnstr(edit, row, margin, converted, -1);
goto tail_of_loop;
} else if (fileptr->multidata[varnish->id] == CBEGINBEFORE) {
regexec(varnish->end, fileptr->data, 1, &endmatch, 0);
/* If the part to be coloured is not visible, skip it. */
if (endmatch.rm_eo <= from_x)
goto tail_of_loop;
paintlen = actual_x(converted, strnlenpt(fileptr->data,
endmatch.rm_eo) - from_col);
mvwaddnstr(edit, row, margin, converted, paintlen);
goto tail_of_loop;
}
/* There is no precalculated multidata, or it is CENDAFTER or
* CSTARTENDHERE. In all cases, find out what to paint. */
/* The preceding line has no precalculated multidata. So, do
* some backtracking to find out what to paint. */
/* Assume nothing gets painted until proven otherwise below. */
fileptr->multidata[varnish->id] = CNONE;