summaryrefslogtreecommitdiff
path: root/lib/Text/Tabs.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Text/Tabs.pm')
-rw-r--r--lib/Text/Tabs.pm47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/Text/Tabs.pm b/lib/Text/Tabs.pm
new file mode 100644
index 0000000000..8ca833f8e8
--- /dev/null
+++ b/lib/Text/Tabs.pm
@@ -0,0 +1,47 @@
+#
+# 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>
+#
+
+package 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;
+}
+
+sub unexpand
+{
+ my @l = &expand(@_);
+ my @e;
+ for $x (@l) {
+ @e = split(/(.{$tabstop})/,$x);
+ for $_ (@e) {
+ s/ +$/\t/;
+ }
+ $x = join('',@e);
+ }
+ return @l;
+}
+
+1;