Khaaaaan! Change 34230 wasn't right. The tests all passed because I
[p5sagit/p5-mst-13.2.git] / lib / Text / Tabs.pm
index acd7afb..610e870 100644 (file)
@@ -7,7 +7,7 @@ require Exporter;
 @EXPORT = qw(expand unexpand $tabstop);
 
 use vars qw($VERSION $tabstop $debug);
-$VERSION = 96.121201;
+$VERSION = 2007.1117;
 
 use strict;
 
@@ -16,15 +16,21 @@ BEGIN       {
        $debug = 0;
 }
 
-sub expand
-{
-       my @l = @_;
-       for $_ (@l) {
-               1 while s/(^|\n)([^\t\n]*)(\t+)/
-                       $1. $2 . (" " x 
-                               ($tabstop * length($3)
-                               - (length($2) % $tabstop)))
-                       /sex;
+sub expand {
+       my @l;
+       my $pad;
+       for ( @_ ) {
+               my $s = '';
+               for (split(/^/m, $_, -1)) {
+                       my $offs = 0;
+                       s{\t}{
+                               $pad = $tabstop - (pos() + $offs) % $tabstop;
+                               $offs += $pad - 1;
+                               " " x $pad;
+                       }eg;
+                       $s .= $_;
+               }
+               push(@l, $s);
        }
        return @l if wantarray;
        return $l[0];
@@ -32,21 +38,23 @@ sub expand
 
 sub unexpand
 {
-       my @l = @_;
+       my (@l) = @_;
        my @e;
        my $x;
        my $line;
        my @lines;
        my $lastbit;
+       my $ts_as_space = " "x$tabstop;
        for $x (@l) {
                @lines = split("\n", $x, -1);
                for $line (@lines) {
                        $line = expand($line);
                        @e = split(/(.{$tabstop})/,$line,-1);
                        $lastbit = pop(@e);
-                       $lastbit = '' unless defined $lastbit;
+                       $lastbit = '' 
+                               unless defined $lastbit;
                        $lastbit = "\t"
-                               if $lastbit eq " "x$tabstop;
+                               if $lastbit eq $ts_as_space;
                        for $_ (@e) {
                                if ($debug) {
                                        my $x = $_;
@@ -66,6 +74,20 @@ sub unexpand
 1;
 __END__
 
+sub expand
+{
+       my (@l) = @_;
+       for $_ (@l) {
+               1 while s/(^|\n)([^\t\n]*)(\t+)/
+                       $1. $2 . (" " x 
+                               ($tabstop * length($3)
+                               - (length($2) % $tabstop)))
+                       /sex;
+       }
+       return @l if wantarray;
+       return $l[0];
+}
+
 
 =head1 NAME
 
@@ -73,25 +95,42 @@ Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1)
 
 =head1 SYNOPSIS
 
-use Text::Tabs;
+  use Text::Tabs;
 
-$tabstop = 4;
-@lines_without_tabs = expand(@lines_with_tabs);
-@lines_with_tabs = unexpand(@lines_without_tabs);
+  $tabstop = 4;  # default = 8
+  @lines_without_tabs = expand(@lines_with_tabs);
+  @lines_with_tabs = unexpand(@lines_without_tabs);
 
 =head1 DESCRIPTION
 
-Text::Tabs does about what the unix utilities expand(1) and unexpand(1)
+Text::Tabs does about what the unix utilities expand(1) and unexpand(1) 
 do.  Given a line with tabs in it, expand will replace the tabs with
 the appropriate number of spaces.  Given a line with or without tabs in
-it, unexpand will add tabs when it can save bytes by doing so.  Invisible
-compression with plain ascii!
+it, unexpand will add tabs when it can save bytes by doing so (just
+like C<unexpand -a>).  Invisible compression with plain ASCII! 
+
+=head1 EXAMPLE
+
+  #!perl
+  # unexpand -a
+  use Text::Tabs;
+
+  while (<>) {
+    print unexpand $_;
+  }
+
+Instead of the C<expand> comand, use:
+
+  perl -MText::Tabs -n -e 'print expand $_'
+
+Instead of the C<unexpand -a> command, use:
 
-=head1 BUGS
+  perl -MText::Tabs -n -e 'print unexpand $_'
 
-expand doesn't handle newlines very quickly -- do not feed it an
-entire document in one string.  Instead feed it an array of lines.
+=head1 LICENSE
 
-=head1 AUTHOR
+Copyright (C) 1996-2002,2005,2006 David Muir Sharnoff.  
+Copyright (C) 2005 Aristotle Pagaltzis 
+This module may be modified, used, copied, and redistributed at your own risk.
+Publicly redistributed modified versions must use a different name.
 
-David Muir Sharnoff <muir@idiom.com>