summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2010-12-12 10:11:03 +0100
committerDaniel Friesel <derf@finalrewind.org>2010-12-12 10:11:03 +0100
commit7b5ebce9a0c1f36aa926faaa3e49380e04ecc83e (patch)
tree079db80d86c878071f386513d23d57636b037cff
parent49eb6c4218467ddcac828c48ab86b60bbdcc3c88 (diff)
Cover more line breaking corner cases
-rwxr-xr-xbin/icli21
1 files changed, 15 insertions, 6 deletions
diff --git a/bin/icli b/bin/icli
index ddf7978..a88c287 100755
--- a/bin/icli
+++ b/bin/icli
@@ -116,19 +116,28 @@ sub split_by_words {
my @words = split(/ /, $str);
my @ret;
- foreach my $word (@words) {
- if (length($word) > $max_w) {
- # FIXME we can do better
- $word = substr($word, 0, $max_w);
+
+ while (grep { length($_) > $max_w } @words) {
+ for my $i ( 0 .. $#words ) {
+ my $word = $words[$i];
+
+ if (length($word) > $max_w) {
+ splice(@words, $i, 1, substr($word, 0, $max_w), substr($word, $max_w));
+ last;
+ }
}
}
while (@words) {
my $cur_str = q{};
- while (@words and ((length($cur_str) + length($words[0])) < $max_w)) {
- if (length($cur_str)) {
+ my $tr_space = 0;
+ while (@words and ((length($cur_str) + length($words[0]) + $tr_space) <= $max_w)) {
+ if ($tr_space) {
$cur_str .= ' ';
}
+ else {
+ $tr_space = 1;
+ }
$cur_str .= shift(@words);
}
if (@ret) {