diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
| commit | bcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch) | |
| tree | f377707a2dac078db8cd0c7d7abfe69ac1006d71 /lib/Text/ASCIITable | |
| download | xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.gz xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.bz2 | |
* Move files to trunk
Diffstat (limited to 'lib/Text/ASCIITable')
| -rw-r--r-- | lib/Text/ASCIITable/Wrap.pm | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/Text/ASCIITable/Wrap.pm b/lib/Text/ASCIITable/Wrap.pm new file mode 100644 index 0000000..f9d729f --- /dev/null +++ b/lib/Text/ASCIITable/Wrap.pm @@ -0,0 +1,97 @@ +package Text::ASCIITable::Wrap; + +@ISA=qw(Exporter); +@EXPORT = qw(); +@EXPORT_OK = qw(wrap); +$VERSION = '0.2'; +use Exporter; +use strict; +use Carp; + +=head1 NAME + +Text::ASCIITable::Wrap - Wrap text + +=head1 SHORT DESCRIPTION + +Make sure a text never gets wider than the specified width using wordwrap. + +=head1 SYNOPSIS + + use Text::ASCIITable::Wrap qw{ wrap }; + print wrap('This is a long line which will be cut down to several lines',10); + +=head1 FUNCTIONS + +=head2 wrap($text,$width[,$nostrict]) (exportable) + +Wraps text at the specified width. Unless the $nostrict parameter is set, it +will cut down the word if a word is wider than $width. Also supports text with linebreaks. + +=cut + +sub wrap { + my ($text,$width,$nostrict) = @_; + Carp::shortmess('Missing required text or width parameter.') if (!defined($text) || !defined($width)); + my $result=''; + for (split(/\n/,$text)) { + $result .= _wrap($_,$width,$nostrict)."\n"; + } + chop($result); + return $result; +} + +sub _wrap { + my ($text,$width,$nostrict) = @_; + my @result; + my $line=''; + $nostrict = defined($nostrict) && $nostrict == 1 ? 1 : 0; + for (split(/ /,$text)) { + my $spc = $line eq '' ? 0 : 1; + my $len = length($line); + my $newlen = $len + $spc + length($_); + if ($len == 0 && $newlen > $width) { + push @result, $nostrict == 1 ? $_ : substr($_,0,$width); # kutt ned bredden + $line=''; + } + elsif ($len != 0 && $newlen > $width) { + push @result, $nostrict == 1 ? $line : substr($line,0,$width); + $line = $_; + } else { + $line .= (' ' x $spc).$_; + } + } + push @result,$nostrict == 1 ? $line : substr($line,0,$width) if $line ne ''; + return join("\n",@result); +} + + +1; + +__END__ + +=head1 REQUIRES + +Exporter, Carp + +=head1 AUTHOR + +Håkon Nessjøen, lunatic@cpan.org + +=head1 VERSION + +Current version is 0.2. + +=head1 COPYRIGHT + +Copyright 2002-2003 by Håkon Nessjøen. +All rights reserved. +This module is free software; +you can redistribute it and/or modify it under the same terms as Perl itself. + +=head1 SEE ALSO + +Text::ASCIITable, Text::Wrap + +=cut + |
