I've narrowed down the problem to RunStyles::SplitRun. If posRun and position
both
== 0, then no insertion is made. Back in DecorationList::FillRange(), the test
current->Empty() succeeds because the current indicator isn't associated with
more
than one segment (run range), so the indicator is deleted.
The indicator runs from the start of the line to the end before the EOL, so its
position is 0. I gather there's a boundary case here, but if I try ignoring
that condition:
bool changed = current->rs.FillRange(position, value, fillLength);
if (position > 0 && current->Empty()) {=
Delete(currentIndicator);
}
then the entire buffer is highlighted, not just the first line.
BTW, I got the scintilla printf stmts wrong when the decorator is on the first
line. It
should have been this:
Now when I delete that empty line at the start of the above snippet,
I get this log:
DEBUG: KoLintDisplayer: entering display
DEBUG: KoLintDisplayer: Normal: (offsetStart=0, length=29, r.severity=2)
DEBUG: KoLintDisplayer: Coloring 2: 0:29
DecorationList::FillRange(currentIndicator:15, position:0, fillLength:)29
RunStyles::FillRange(position=0, value=1, fillLength=29
144: runStart=0 position=0 fillLength=29
151: remove runStart=0
*** wrong **** this should be
151: remove runStart+1=1
current->Empty() is true, deleting curr Ind
DEBUG: KoLintDisplayer: leaving display
- Eric
_______________________________________________
Scintilla-interest mailing list
[email protected]
http://mailman.lyra.org/mailman/listinfo/scintilla-interest