wrapWords function
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;
}