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