diff --git a/ChangeLog b/ChangeLog index c0b164b8..29abf9dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2015-11-29 Benno Schulenberg * src/color.c (reset_multis): Evaluate correctly whether to reset the multidata cache. This fixes Savannah bug #46543. + * src/color.c (reset_multis): Reset the multidata a bit less often. 2015-11-28 Benno Schulenberg * src/nano.c (main): Allow the user full control over the values of diff --git a/src/color.c b/src/color.c index 88ff3f1e..7f0de570 100644 --- a/src/color.c +++ b/src/color.c @@ -442,11 +442,8 @@ void reset_multis(filestruct *fileptr, bool force) continue; alloc_multidata_if_needed(fileptr); - if (force == TRUE) { - reset_multis_for_id(fileptr, tmpcolor->id); - continue; - } + if (force == FALSE) { /* Figure out where the first begin and end are to determine if * things changed drastically for the precalculated multi values. */ nobegin = regexec(tmpcolor->start, fileptr->data, 1, &startmatch, 0); @@ -458,10 +455,15 @@ void reset_multis(filestruct *fileptr, bool force) if (nobegin && noend) continue; } else if (fileptr->multidata[tmpcolor->id] == CBEGINBEFORE && !noend - && (nobegin || endmatch.rm_eo > startmatch.rm_eo)) { - reset_multis_after(fileptr, tmpcolor->id); + && nobegin) continue; - } + else if (fileptr->multidata[tmpcolor->id] == CSTARTENDHERE && + !nobegin && !noend && startmatch.rm_so < endmatch.rm_so) + continue; + else if (fileptr->multidata[tmpcolor->id] == CENDAFTER && + !nobegin && noend) + continue; + } /* If we got here, assume the worst. */ reset_multis_for_id(fileptr, tmpcolor->id);