home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
c't freeware shareware 1997
/
CT_SW_97.ISO
/
pc
/
software
/
entwickl
/
win95
/
pw32i306.exe
/
lib
/
Text
/
wrap.pm
< prev
Wrap
Text File
|
1996-10-03
|
2KB
|
101 lines
package Text::Wrap;
require Exporter;
@ISA = (Exporter);
@EXPORT = qw(wrap);
@EXPORT_OK = qw($columns);
$VERSION = 96.041801;
use vars qw($VERSION $columns $debug);
BEGIN {
$columns = 76; # <= screen width
$debug = 0;
}
use Text::Tabs;
use strict;
sub wrap
{
my ($ip, $xp, @t) = @_;
my $r = "";
my $t = expand(join(" ",@t));
my $lead = $ip;
my $ll = $columns - length(expand($lead)) - 1;
my $nl = "";
# remove up to a line length of things that aren't
# new lines and tabs.
if ($t =~ s/^([^\n]{0,$ll})(\s|\Z(?!\n))//xm) {
# accept it.
$r .= unexpand($lead . $1);
# recompute the leader
$lead = $xp;
$ll = $columns - length(expand($lead)) - 1;
$nl = $2;
# repeat the above until there's none left
while ($t and $t =~ s/^([^\n]{0,$ll})(\s|\Z(?!\n))//xm) {
print "\$2 is '$2'\n" if $debug;
$nl = $2;
$r .= unexpand("\n" . $lead . $1);
}
$r .= $nl;
}
die "couldn't wrap '$t'"
if length($t) > $ll;
print "-----------$r---------\n" if $debug;
print "Finish up with '$lead', '$t'\n" if $debug;
$r .= $lead . $t if $t ne "";
print "-----------$r---------\n" if $debug;;
return $r;
}
1;
__DATA__
=head1 NAME
Text::Wrap - line wrapping to form simple paragraphs
=head1 SYNOPSIS
use Text::Wrap
print wrap($initial_tab, $subsequent_tab, @text);
use Text::Wrap qw(wrap $columns);
$columns = 132;
=head1 DESCRIPTION
Text::Wrap is a very simple paragraph formatter. It formats a
single paragraph at a time by breaking lines at word boundries.
Indentation is controlled for the first line ($initial_tab) and
all subsquent lines ($subsequent_tab) independently. $Text::Wrap::columns
should be set to the full width of your output device.
=head1 EXAMPLE
print wrap("\t","","This is a bit of text that forms
a normal book-style paragraph");
=head1 AUTHOR
David Muir Sharnoff E<lt>F<muir@idiom.com>E<gt>
=cut