home *** CD-ROM | disk | FTP | other *** search
- #
- # expand and unexpand tabs as per the unix expand and
- # unexpand programs.
- #
- # expand and unexpand operate on arrays of lines. Do not
- # feed strings that contain newlines to them.
- #
- # David Muir Sharnoff <muir@idiom.com>
- #
- # Version: 9/21/95
- #
-
- =head1 NAME
-
- Text::Tabs -- expand and unexpand tabs
-
- =head1 SYNOPSIS
-
- use Text::Tabs;
-
- #$tabstop = 8; # Defaults
- print expand("Hello\tworld");
- print unexpand("Hello, world");
- $tabstop = 4;
- print join("\n",expand(split(/\n/,
- "Hello\tworld,\nit's a nice day.\n"
- )));
-
- =head1 DESCRIPTION
-
- This module expands and unexpands tabs into spaces, as per the unix expand
- and unexpand programs. Either function should be passed an array of strings
- (newlines may I<not> be included, and should be used to split an incoming
- string into separate elements.) which will be processed and returned.
-
- =head1 AUTHOR
-
- David Muir Sharnoff <muir@idiom.com>
-
- =cut
-
- package Text::Tabs;
-
- require Exporter;
-
- @ISA = (Exporter);
- @EXPORT = qw(expand unexpand $tabstop);
-
- $tabstop = 8;
-
- sub expand
- {
- my @l = @_;
- for $_ (@l) {
- 1 while s/^([^\t]*)(\t+)/
- $1 . (" " x
- ($tabstop * length($2)
- - (length($1) % $tabstop)))
- /e;
- }
- return @l if wantarray;
- return @l[0];
- }
-
- sub unexpand
- {
- my @l = &expand(@_);
- my @e;
- for $x (@l) {
- @e = split(/(.{$tabstop})/,$x);
- for $_ (@e) {
- s/ +$/\t/;
- }
- $x = join('',@e);
- }
- return @l if wantarray;
- return @l[0];
- }
-
- 1;
-