From: Perl 5 Porters Date: Fri, 5 Jul 1996 05:05:23 +0000 (+0000) Subject: Update to version 96.041801 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b1a524cb07dc967b81ca1991cece82cb77a776ac;p=p5sagit%2Fp5-mst-13.2.git Update to version 96.041801 --- diff --git a/lib/Text/Wrap.pm b/lib/Text/Wrap.pm index b665752..8f8cdcc 100644 --- a/lib/Text/Wrap.pm +++ b/lib/Text/Wrap.pm @@ -1,68 +1,19 @@ - package Text::Wrap; -# -# This is a very simple paragraph formatter. It formats one -# paragraph at a time by wrapping and indenting text. -# -# Usage: -# -# use Text::Wrap; -# -# print wrap($initial_tab,$subsequent_tab,@text); -# -# You can also set the number of columns to wrap before: -# -# $Text::Wrap::columns = 135; # <= width of screen -# -# use Text::Wrap qw(wrap $columns); -# $columns = 70; -# -# -# The first line will be printed with $initial_tab prepended. All -# following lines will have $subsequent_tab prepended. -# -# Example: -# -# print wrap("\t","","This is a bit of text that ..."); -# -# David Muir Sharnoff -# Version: 9/21/95 -# - -=head1 NAME - -Text::Wrap -- wrap text into a paragraph - -=head1 SYNOPSIS - - use Text::Wrap; - - $Text::Wrap::columns = 20; # Default - print wrap("\t","",Hello, world, it's a nice day, isn't it?"); - -=head1 DESCRIPTION - -This module is a simple paragraph formatter that wraps text into a paragraph -and indents each line. The single exported function, wrap(), takes three -arguments. The first is included before the first output line, and the -second argument is included before each subsequest output line. The third -argument is the text to be wrapped. - -=head1 AUTHOR - -David Muir Sharnoff - -=cut - require Exporter; @ISA = (Exporter); @EXPORT = qw(wrap); @EXPORT_OK = qw($columns); +$VERSION = 96.041801; + +use vars qw($VERSION $columns $debug); +use strict; + BEGIN { - $Text::Wrap::columns = 76; # <= screen width + $columns = 76; # <= screen width + $debug = 0; } use Text::Tabs; @@ -72,22 +23,79 @@ sub wrap { my ($ip, $xp, @t) = @_; - my $r; + my $r = ""; my $t = expand(join(" ",@t)); my $lead = $ip; - my $ll = $Text::Wrap::columns - length(expand($lead)) - 1; - if ($t =~ s/^([^\n]{0,$ll})\s//) { - $r .= unexpand($lead . $1 . "\n"); + 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; - my $ll = $Text::Wrap::columns - length(expand($lead)) - 1; - while ($t =~ s/^([^\n]{0,$ll})\s//) { - $r .= unexpand($lead . $1 . "\n"); + $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; - $r .= $t; + + 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 + +=cut