highlightAuto method

HighlightResult highlightAuto(
  1. String code, {
  2. List<String>? languageSubset,
})

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