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