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) {
final cachedLine = _lineSpanCache[lineIndex];
if (cachedLine != null && cachedLine.text == lineText) {
return cachedLine.span;
}
if (cachedGrammarSpan != null) {
_lineSpanCache[lineIndex] = HighlightedLine(
lineText,
cachedGrammarSpan,
_version,
);
return cachedGrammarSpan;
}
}
if (cachedGrammarSpan != null) {
final mergedSpan = _mergeGrammarAndSemantic(
lineText,
cachedGrammarSpan,
semanticSpans,
);
_lineSpanCache[lineIndex] = HighlightedLine(
lineText,
mergedSpan,
_version,
);
_mergedCache[lineIndex] = HighlightedLine(lineText, mergedSpan, _version);
return mergedSpan;
}
final cachedLine = _lineSpanCache[lineIndex];
if (cachedLine != null &&
cachedLine.text == lineText &&
(semanticSpans == null || semanticSpans.isEmpty || _isEditing)) {
return cachedLine.span;
}
final grammarSpan = _highlightLine(lineIndex, lineText);
if (_isEditing) {
_lineSpanCache[lineIndex] = HighlightedLine(
lineText,
grammarSpan,
_version,
);
return grammarSpan;
}
final mergedSpan = _mergeGrammarAndSemantic(
lineText,
grammarSpan,
semanticSpans,
);
_lineSpanCache[lineIndex] = HighlightedLine(lineText, mergedSpan, _version);
_mergedCache[lineIndex] = HighlightedLine(lineText, mergedSpan, _version);
return mergedSpan;
}