wrapWords function

List<String> wrapWords(
  1. String text,
  2. int max
)

Wortweiser Umbruch auf höchstens max Zeichen (Zwilling von wortzeilenText): geschütztes Leerzeichen bricht nie (wird als Leerzeichen ausgegeben), ein überlanges Wort bricht nach einem Bindestrich, sonst hart.

Implementation

List<String> wrapWords(String text, int max) {
  final grenze = max < 1 ? 1 : max;
  final out = <String>[];
  var rest = text;
  while (rest.length > grenze) {
    var schnitt = grenze;
    if (rest[grenze] != ' ') {
      var i = grenze - 1;
      while (i > 0 && rest[i] != ' ') {
        i -= 1;
      }
      if (i > 0) {
        schnitt = i;
      } else {
        var h = grenze - 1;
        while (h > 0 && rest[h] != '-') {
          h -= 1;
        }
        if (h > 0) schnitt = h + 1;
      }
    }
    out.add(rest.substring(0, schnitt).replaceFirst(RegExp(r' +$'), '').replaceAll(_nbsp, ' '));
    var weiter = schnitt;
    while (weiter < rest.length && rest[weiter] == ' ') {
      weiter += 1;
    }
    rest = rest.substring(weiter);
  }
  out.add(rest.replaceAll(_nbsp, ' '));
  return out;
}