preHighlightLines method

Future<void> preHighlightLines(
  1. int startLine,
  2. int endLine,
  3. String getLineText(
    1. int
    )
)

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();
}