Remove double 'use strict'.
[p5sagit/p5-mst-13.2.git] / lib / Text / Wrap.pm
index b665752..03bae1b 100644 (file)
@@ -1,68 +1,18 @@
-
 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 <muir@idiom.com>
-# 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 <muir@idiom.com>
-
-=cut
-
 require Exporter;
 
 @ISA = (Exporter);
 @EXPORT = qw(wrap);
 @EXPORT_OK = qw($columns);
 
+$VERSION = 96.041801;
+
+use vars qw($VERSION $columns $debug);
+
 BEGIN  {
-       $Text::Wrap::columns = 76;  # <= screen width
+       $columns = 76;  # <= screen width
+       $debug = 0;
 }
 
 use Text::Tabs;
@@ -72,22 +22,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 <muir@idiom.com>
+
+=cut