transform method
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);
}