[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 2 package Text::Tabs; 3 4 require Exporter; 5 6 @ISA = (Exporter); 7 @EXPORT = qw(expand unexpand $tabstop); 8 9 use vars qw($VERSION $tabstop $debug); 10 $VERSION = 2007.1117; 11 12 use strict; 13 14 BEGIN { 15 $tabstop = 8; 16 $debug = 0; 17 } 18 19 sub expand { 20 my @l; 21 my $pad; 22 for ( @_ ) { 23 my $s = ''; 24 for (split(/^/m, $_, -1)) { 25 my $offs = 0; 26 s{\t}{ 27 $pad = $tabstop - (pos() + $offs) % $tabstop; 28 $offs += $pad - 1; 29 " " x $pad; 30 }eg; 31 $s .= $_; 32 } 33 push(@l, $s); 34 } 35 return @l if wantarray; 36 return $l[0]; 37 } 38 39 sub unexpand 40 { 41 my (@l) = @_; 42 my @e; 43 my $x; 44 my $line; 45 my @lines; 46 my $lastbit; 47 my $ts_as_space = " "x$tabstop; 48 for $x (@l) { 49 @lines = split("\n", $x, -1); 50 for $line (@lines) { 51 $line = expand($line); 52 @e = split(/(.{$tabstop})/,$line,-1); 53 $lastbit = pop(@e); 54 $lastbit = '' 55 unless defined $lastbit; 56 $lastbit = "\t" 57 if $lastbit eq $ts_as_space; 58 for $_ (@e) { 59 if ($debug) { 60 my $x = $_; 61 $x =~ s/\t/^I\t/gs; 62 print "sub on '$x'\n"; 63 } 64 s/ +$/\t/; 65 } 66 $line = join('',@e, $lastbit); 67 } 68 $x = join("\n", @lines); 69 } 70 return @l if wantarray; 71 return $l[0]; 72 } 73 74 1; 75 __END__ 76 77 sub expand 78 { 79 my (@l) = @_; 80 for $_ (@l) { 81 1 while s/(^|\n)([^\t\n]*)(\t+)/ 82 $1. $2 . (" " x 83 ($tabstop * length($3) 84 - (length($2) % $tabstop))) 85 /sex; 86 } 87 return @l if wantarray; 88 return $l[0]; 89 } 90 91 92 =head1 NAME 93 94 Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1) 95 96 =head1 SYNOPSIS 97 98 use Text::Tabs; 99 100 $tabstop = 4; # default = 8 101 @lines_without_tabs = expand(@lines_with_tabs); 102 @lines_with_tabs = unexpand(@lines_without_tabs); 103 104 =head1 DESCRIPTION 105 106 Text::Tabs does about what the unix utilities expand(1) and unexpand(1) 107 do. Given a line with tabs in it, expand will replace the tabs with 108 the appropriate number of spaces. Given a line with or without tabs in 109 it, unexpand will add tabs when it can save bytes by doing so (just 110 like C<unexpand -a>). Invisible compression with plain ASCII! 111 112 =head1 EXAMPLE 113 114 #!perl 115 # unexpand -a 116 use Text::Tabs; 117 118 while (<>) { 119 print unexpand $_; 120 } 121 122 Instead of the C<expand> comand, use: 123 124 perl -MText::Tabs -n -e 'print expand $_' 125 126 Instead of the C<unexpand -a> command, use: 127 128 perl -MText::Tabs -n -e 'print unexpand $_' 129 130 =head1 LICENSE 131 132 Copyright (C) 1996-2002,2005,2006 David Muir Sharnoff. 133 Copyright (C) 2005 Aristotle Pagaltzis 134 This module may be modified, used, copied, and redistributed at your own risk. 135 Publicly redistributed modified versions must use a different name. 136
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |