themeTokens function
Applies theme to one line's raw tokens, merging adjacent tokens with
the same style. tokens must come from tokenizing line.
Implementation
List<ThemedToken> themeTokens(
String line,
List<Token> tokens,
SyntaxTheme theme,
) {
final result = <ThemedToken>[];
for (final token in tokens) {
final style = theme.styleFor(token.scopes);
final text = line.substring(token.start, token.end);
if (result.isNotEmpty && result.last.style == style) {
final last = result.removeLast();
result.add(
ThemedToken(last.text + text, last.offset, style, last.scopes),
);
} else {
result.add(ThemedToken(text, token.start, style, token.scopes));
}
}
return result;
}