render method
void
render(
- Iterable<
TreeSitterHighlightEvent> highlighter, - List<
int> source, - TreeSitterHighlightAttributeCallback attributeCallback
Appends a stream of native Tree-sitter highlight events to html.
source and event ranges use UTF-8 byte offsets. The callback writes the
attributes between <span and >, exactly like upstream.
Implementation
void render(
Iterable<TreeSitterHighlightEvent> highlighter,
List<int> source,
TreeSitterHighlightAttributeCallback attributeCallback,
) {
final highlights = <TreeSitterHighlight>[];
for (final event in highlighter) {
switch (event) {
case TreeSitterHighlightStart(:final highlight):
highlights.add(highlight);
_startHighlight(highlight, attributeCallback);
case TreeSitterHighlightEnd():
if (highlights.isNotEmpty) highlights.removeLast();
_endHighlight();
case TreeSitterHighlightSource(:final start, :final end):
RangeError.checkValidRange(start, end, source.length, 'event');
_addText(source.sublist(start, end), highlights, attributeCallback);
}
}
if (_lastCarriageReturn case final offset?) {
_lastCarriageReturn = null;
_addCarriageReturn(offset, attributeCallback);
}
if (html.isEmpty || html.last != 0x0a) html.add(0x0a);
if (lineOffsets.isNotEmpty && lineOffsets.last == html.length) {
lineOffsets.removeLast();
}
}