wordWrap function
Word-wrap text to the given width.
Splits on whitespace boundaries. Lines longer than width with no
whitespace are broken at exactly width.
Implementation
String wordWrap(String text, int width) {
if (width <= 0) return text;
final inputLines = text.split('\n');
final output = <String>[];
for (final line in inputLines) {
if (line.length <= width) {
output.add(line);
continue;
}
final words = line.split(RegExp(r'\s+'));
final buf = StringBuffer();
for (final word in words) {
if (buf.isEmpty) {
if (word.length > width) {
// Break long word
var remaining = word;
while (remaining.length > width) {
output.add(remaining.substring(0, width));
remaining = remaining.substring(width);
}
buf.write(remaining);
} else {
buf.write(word);
}
} else if (buf.length + 1 + word.length <= width) {
buf.write(' $word');
} else {
output.add(buf.toString());
buf.clear();
if (word.length > width) {
var remaining = word;
while (remaining.length > width) {
output.add(remaining.substring(0, width));
remaining = remaining.substring(width);
}
buf.write(remaining);
} else {
buf.write(word);
}
}
}
if (buf.isNotEmpty) output.add(buf.toString());
}
return output.join('\n');
}