getLineSpan method
Implementation
TextSpan? getLineSpan(int lineIndex, String lineText) {
final mergedCache = _mergedCache[lineIndex];
if (mergedCache != null &&
mergedCache.version == _version &&
mergedCache.text == lineText) {
return mergedCache.span;
}
final grammarCache = _grammarCache[lineIndex];
final cachedGrammarSpan =
grammarCache != null &&
grammarCache.version == _version &&
grammarCache.text == lineText
? grammarCache.span
: null;
final semanticSpans = _lineSemanticSpans[lineIndex];
if (_isEditing || semanticSpans == null || semanticSpans.isEmpty) {
if (_lineSpanCache.containsKey(lineText)) {
return _lineSpanCache[lineText];
}
if (cachedGrammarSpan != null) {
_lineSpanCache[lineText] = cachedGrammarSpan;
return cachedGrammarSpan;
}
}
if (cachedGrammarSpan != null) {
final mergedSpan = _mergeGrammarAndSemantic(
lineText,
cachedGrammarSpan,
semanticSpans,
);
_lineSpanCache[lineText] = mergedSpan;
_mergedCache[lineIndex] = HighlightedLine(lineText, mergedSpan, _version);
return mergedSpan;
}
if (_lineSpanCache.containsKey(lineText) &&
(semanticSpans == null || semanticSpans.isEmpty || _isEditing)) {
return _lineSpanCache[lineText];
}
final grammarSpan = _highlightLine(lineText);
if (_isEditing) {
_lineSpanCache[lineText] = grammarSpan;
return grammarSpan;
}
final mergedSpan = _mergeGrammarAndSemantic(
lineText,
grammarSpan,
semanticSpans,
);
_lineSpanCache[lineText] = mergedSpan;
_mergedCache[lineIndex] = HighlightedLine(lineText, mergedSpan, _version);
return mergedSpan;
}