transform method

  1. @override
String transform(
  1. String input,
  2. String locale
)
override

Transforms input into an instance of U using the provided locale.

Implementation

@override
String transform(String input, String locale) {
  assert(length >= 0);

  final inputRunes = input.runes.toList();

  if (inputRunes.length <= length) {
    return input;
  }

  final isTruncatedAtStart = truncateAt == TruncateAt.start;
  final inputIndexes = Iterable<int>.generate(
    input.length,
    (i) => isTruncatedAtStart ? inputRunes.length - 1 - i : i,
  );
  final includeTruncationIndicator =
      truncationIndicator.runes.length < length;
  final truncationIndicatorLength =
      includeTruncationIndicator ? truncationIndicator.runes.length : 0;
  var buffer = <int>[];
  var nonWhitespaceLength = 0;

  for (final i in inputIndexes) {
    final rune = inputRunes[i];
    final isWhitespace = String.fromCharCodes([rune]).isBlank();

    buffer.add(rune);

    if (!isWhitespace) {
      ++nonWhitespaceLength;

      if (nonWhitespaceLength == length - truncationIndicatorLength) {
        break;
      }
    }
  }

  if (includeTruncationIndicator) {
    buffer.addAll(truncationIndicator.runes);
  }

  if (isTruncatedAtStart) {
    buffer = buffer.reversed.toList();
  }

  return String.fromCharCodes(buffer);
}