highlightAuto method
Implementation
HighlightResult highlightAuto(String code, {List<String>? languageSubset}) {
final subset = languageSubset ?? _languages.keys.toList();
final plaintext = _justTextResult(code);
final results = <HighlightResult>[];
for (final name in subset) {
if (getLanguage(name) == null) continue;
if (!autoDetection(name)) continue;
try {
results.add(_highlight(name, code, false));
} catch (_) {
// skip languages that error
}
}
results.insert(0, plaintext);
final indexedResults = results.asMap().entries.toList();
indexedResults.sort((a, b) {
final resultA = a.value;
final resultB = b.value;
if (resultA.relevance != resultB.relevance) {
return (resultB.relevance - resultA.relevance).sign.toInt();
}
if (resultA.language.isNotEmpty && resultB.language.isNotEmpty) {
final langA = getLanguage(resultA.language);
final langB = getLanguage(resultB.language);
if (langA != null && langA.supersetOf == resultB.language) return 1;
if (langB != null && langB.supersetOf == resultA.language) return -1;
}
return a.key.compareTo(b.key);
});
final sortedResults = indexedResults.map((entry) => entry.value).toList();
final best = sortedResults[0];
final second = sortedResults.length > 1 ? sortedResults[1] : null;
best.secondBest = second;
return best;
}