preHighlightLines method
Implementation
Future<void> preHighlightLines(
int startLine,
int endLine,
String Function(int) getLineText,
) async {
final linesToProcess = <int, String>{};
for (int i = startLine; i <= endLine; i++) {
final lineText = getLineText(i);
final cached = _grammarCache[i];
if (cached == null ||
cached.text != lineText ||
cached.version != _version) {
linesToProcess[i] = lineText;
}
}
if (linesToProcess.isEmpty) return;
if (linesToProcess.length < 50) {
for (final entry in linesToProcess.entries) {
final span = _highlightLine(entry.value);
_grammarCache[entry.key] = HighlightedLine(entry.value, span, _version);
}
onHighlightComplete?.call();
return;
}
final results = await compute(
_highlightLinesInBackground,
_BackgroundHighlightData(
langId: _langId,
lines: linesToProcess,
languageMode: language,
theme: editorTheme,
baseStyle: baseTextStyle,
),
);
for (final entry in results.entries) {
final spanData = entry.value;
final textSpan = spanData != null ? _spanDataToTextSpan(spanData) : null;
_grammarCache[entry.key] = HighlightedLine(
linesToProcess[entry.key]!,
textSpan,
_version,
);
}
onHighlightComplete?.call();
}