normalizeLineCase function

String normalizeLineCase(
  1. String line
)

Normalizes dominant line casing while preserving mixed-case lines.

Implementation

String normalizeLineCase(String line) {
  if (hasCodeLikeToken(line)) {
    return line;
  }

  int letters = 0;
  int upper = 0;
  int lower = 0;
  int? firstLetterCode;

  for (int i = 0; i < line.length; i++) {
    final int code = line.codeUnitAt(i);
    if (isUpper(code)) {
      letters++;
      upper++;
      firstLetterCode ??= code;
    } else if (isLower(code)) {
      letters++;
      lower++;
      firstLetterCode ??= code;
    }
  }

  if (letters < _minLettersForCaseNormalization) {
    return line;
  }

  final double upperRatio = upper / letters;
  final double lowerRatio = lower / letters;

  if (upperRatio >= _dominantCaseRatio) {
    return line.toUpperCase();
  }
  if (lowerRatio >= _dominantCaseRatio && firstLetterCode != null) {
    final String lowercased = line.toLowerCase();
    if (shouldPreserveLongLowercaseProse(
      line,
      minTokens: _longLowercaseProseMinTokens,
      minLetters: _longLowercaseProseMinLetters,
    )) {
      return lowercased;
    }
    return sentenceCase(lowercased);
  }

  return line;
}