shouldPreserveLongLowercaseProse function

bool shouldPreserveLongLowercaseProse(
  1. String value, {
  2. required int minTokens,
  3. required int minLetters,
})

Returns true for long already-lowercase prose that should stay lowercase.

This is used by sentence and line casing passes to avoid capitalizing coherent lowercase prose samples that are already internally consistent.

Implementation

bool shouldPreserveLongLowercaseProse(
  String value, {
  required int minTokens,
  required int minLetters,
}) {
  if (RegExp(r'[A-Z]').hasMatch(value)) {
    return false;
  }

  final List<String> tokens = RegExp(
    r'[A-Za-z]+',
  ).allMatches(value).map((match) => match.group(0)!).toList();
  if (tokens.length < minTokens) {
    return false;
  }

  int letterCount = 0;
  for (final String token in tokens) {
    if (token != token.toLowerCase()) {
      return false;
    }
    letterCount += token.length;
  }

  return letterCount >= minLetters;
}