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

Reply via email to