wordWrap function

String wordWrap(
  1. String text,
  2. int width
)

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');
}