I needed to wrap a paragraph of text to a sensible line length, as a part of one of my HTML generating scripts. Looked at the existing wrap functions and found they all required modules which may or may not be installed on the target machines. Hence, decided to do some algorithmic crunching and write my own wrap function.
# fmt("text",width);
#---------------------------------------------------------------------
+-
# Wraps long lines to manageable size. If a word is too long, the line
# length is temporarily raised until the word does fit.
sub fmt {
my $text=shift; # Input text
my $width=shift; # Desired width
$width=70 if(!$width); # Default to 70 if omitted
my $rc=""; # Return value
my $cll=$width; # Current line length
my $cp=0; # Current position
my $i; # Index to last space.
my $lot=length($text); # Length of $text.
$text=~s/\s+/ /g; # Reduce all series of whitespace to o
+ne
while($cp+$cll < $lot) {
print STDERR "cp=$cp cll=$cll\n";
while((($i=rindex($text," ",$cp+$cll))<=$cp) && $cp+$cll < $lot) {
$cll+=$width;
}
if($i>$cp) {
$rc=$rc.substr($text,$cp,$i-$cp)."\n";
$cp=$i+1;
$cll=$width;
}
}
$rc=$rc.substr($text,$cp)."\n";
return $rc;
}
Use as follows:
print fmt("Type in your paragraph of text here...",40);