home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2 / Openstep-4.2-Intel-User.iso / usr / lib / perl5 / Text / Tabs.pm < prev   
Text File  |  1997-03-29  |  942b  |  64 lines

  1. #
  2. # expand and unexpand tabs as per the unix expand and 
  3. # unexpand programs.
  4. #
  5. # expand and unexpand operate on arrays of lines.  
  6. #
  7. # David Muir Sharnoff <muir@idiom.com>
  8. # Version: 4/19/95
  9.  
  10. package Text::Tabs;
  11.  
  12. require Exporter;
  13.  
  14. @ISA = (Exporter);
  15. @EXPORT = qw(expand unexpand $tabstop);
  16.  
  17. $tabstop = 8;
  18.  
  19. sub expand
  20. {
  21.     my (@l) = @_;
  22.     my $l, @k;
  23.     my $nl;
  24.     for $l (@l) {
  25.         $nl = $/ if chomp($l);
  26.         @k = split($/,$l);
  27.         for $_ (@k) {
  28.             1 while s/^([^\t]*)(\t+)/
  29.                 $1 . (" " x 
  30.                     ($tabstop * length($2)
  31.                     - (length($1) % $tabstop)))
  32.                 /e;
  33.         }
  34.         $l = join("\n",@k).$nl;
  35.     }
  36.     return @l if $#l > 0;
  37.     return $l[0];
  38. }
  39.  
  40. sub unexpand
  41. {
  42.     my (@l) = &expand(@_);
  43.     my @e;
  44.     my $k, @k;
  45.     my $nl;
  46.     for $k (@l) {
  47.         $nl = $/ if chomp($k);
  48.         @k = split($/,$k);
  49.         for $x (@k) {
  50.             @e = split(/(.{$tabstop})/,$x);
  51.             for $_ (@e) {
  52.                 s/  +$/\t/;
  53.             }
  54.             $x = join('',@e);
  55.         }
  56.         $k = join("\n",@k).$nl;
  57.     }
  58.     return @l if $#l > 0;
  59.     return $l[0];
  60. }
  61.  
  62. 1;
  63.