diff options
Diffstat (limited to 'gnu/usr.bin/perl/cpan/Text-Tabs/lib')
-rw-r--r-- | gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm | 82 | ||||
-rw-r--r-- | gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm | 76 |
2 files changed, 124 insertions, 34 deletions
diff --git a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm index d3c06a08c10..34d81ab8b7f 100644 --- a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm +++ b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm @@ -6,16 +6,24 @@ require Exporter; @ISA = (Exporter); @EXPORT = qw(expand unexpand $tabstop); -use vars qw($VERSION $tabstop $debug); -$VERSION = 2009.0305; +use vars qw($VERSION $SUBVERSION $tabstop $debug); +$VERSION = 2012.0818; +$SUBVERSION = 'modern'; use strict; +use 5.010_000; + BEGIN { $tabstop = 8; $debug = 0; } +my $CHUNK = qr/\X/; + +sub _xlen (_) { scalar(() = $_[0] =~ /$CHUNK/g) } +sub _xpos (_) { _xlen( substr( $_[0], 0, pos($_[0]) ) ) } + sub expand { my @l; my $pad; @@ -24,10 +32,13 @@ sub expand { for (split(/^/m, $_, -1)) { my $offs = 0; s{\t}{ - $pad = $tabstop - (pos() + $offs) % $tabstop; + # this works on both 5.10 and 5.11 + $pad = $tabstop - (_xlen(${^PREMATCH}) + $offs) % $tabstop; + # this works on 5.11, but fails on 5.10 + #XXX# $pad = $tabstop - (_xpos() + $offs) % $tabstop; $offs += $pad - 1; " " x $pad; - }eg; + }peg; $s .= $_; } push(@l, $s); @@ -44,12 +55,12 @@ sub unexpand my $line; my @lines; my $lastbit; - my $ts_as_space = " "x$tabstop; + my $ts_as_space = " " x $tabstop; for $x (@l) { @lines = split("\n", $x, -1); for $line (@lines) { $line = expand($line); - @e = split(/(.{$tabstop})/,$line,-1); + @e = split(/(${CHUNK}{$tabstop})/,$line,-1); $lastbit = pop(@e); $lastbit = '' unless defined $lastbit; @@ -91,7 +102,7 @@ sub expand =head1 NAME -Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1) +Text::Tabs - expand and unexpand tabs like unix expand(1) and unexpand(1) =head1 SYNOPSIS @@ -103,11 +114,38 @@ Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1) =head1 DESCRIPTION -Text::Tabs does about what the unix utilities expand(1) and unexpand(1) -do. Given a line with tabs in it, expand will replace the tabs with +Text::Tabs does most of what the unix utilities expand(1) and unexpand(1) +do. Given a line with tabs in it, C<expand> replaces those tabs with the appropriate number of spaces. Given a line with or without tabs in -it, unexpand will add tabs when it can save bytes by doing so (just -like C<unexpand -a>). Invisible compression with plain ASCII! +it, C<unexpand> adds tabs when it can save bytes by doing so, +like the C<unexpand -a> command. + +Unlike the old unix utilities, this module correctly accounts for +any Unicode combining characters (such as diacriticals) that may occur +in each line for both expansion and unexpansion. These are overstrike +characters that do not increment the logical position. Make sure +you have the appropriate Unicode settings enabled. + +=head1 EXPORTS + +The following are exported: + +=over 4 + +=item expand + +=item unexpand + +=item $tabstop + +The C<$tabstop> variable controls how many column positions apart each +tabstop is. The default is 8. + +Please note that C<local($tabstop)> doesn't do the right thing and if you want +to use C<local> to override C<$tabstop>, you need to use +C<local($Text::Tabs::tabstop)>. + +=back =head1 EXAMPLE @@ -119,18 +157,36 @@ like C<unexpand -a>). Invisible compression with plain ASCII! print unexpand $_; } -Instead of the C<expand> comand, use: +Instead of the shell's C<expand> comand, use: perl -MText::Tabs -n -e 'print expand $_' -Instead of the C<unexpand -a> command, use: +Instead of the shell's C<unexpand -a> command, use: perl -MText::Tabs -n -e 'print unexpand $_' +=head1 SUBVERSION + +This module comes in two flavors: one for modern perls (5.10 and above) +and one for ancient obsolete perls. The version for modern perls has +support for Unicode. The version for old perls does not. You can tell +which version you have installed by looking at C<$Text::Tabs::SUBVERSION>: +it is C<old> for obsolete perls and C<modern> for current perls. + +This man page is for the version for modern perls and so that's probably +what you've got. + +=head1 BUGS + +Text::Tabs handles only tabs (C<"\t">) and combining characters (C</\pM/>). It doesn't +count backwards for backspaces (C<"\t">), omit other non-printing control characters (C</\pC/>), +or otherwise deal with any other zero-, half-, and full-width characters. + =head1 LICENSE Copyright (C) 1996-2002,2005,2006 David Muir Sharnoff. Copyright (C) 2005 Aristotle Pagaltzis +Copyright (C) 2012 Google, Inc. This module may be modified, used, copied, and redistributed at your own risk. Publicly redistributed modified versions must use a different name. diff --git a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm index de8620247f2..1b40ab4f2bd 100644 --- a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm +++ b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm @@ -7,16 +7,18 @@ require Exporter; @EXPORT = qw(wrap fill); @EXPORT_OK = qw($columns $break $huge); -$VERSION = 2009.0305; +$VERSION = 2012.0818; +$SUBVERSION = 'modern'; -use vars qw($VERSION $columns $debug $break $huge $unexpand $tabstop - $separator $separator2); +use 5.010_000; + +use vars qw($VERSION $SUBVERSION $columns $debug $break $huge $unexpand $tabstop $separator $separator2); use strict; BEGIN { $columns = 76; # <= screen width $debug = 0; - $break = '\s'; + $break = '(?=\s)\X'; $huge = 'wrap'; # alternatively: 'die' or 'overflow' $unexpand = 1; $tabstop = 8; @@ -24,6 +26,12 @@ BEGIN { $separator2 = undef; } +my $CHUNK = qr/\X/; + +sub _xlen(_) { scalar(() = $_[0] =~ /$CHUNK/g) } + +sub _xpos(_) { _xlen( substr( $_[0], 0, pos($_[0]) ) ) } + use Text::Tabs qw(expand unexpand); sub wrap @@ -35,14 +43,14 @@ sub wrap my $tail = pop(@t); my $t = expand(join("", (map { /\s+\z/ ? ( $_ ) : ($_, ' ') } @t), $tail)); my $lead = $ip; - my $nll = $columns - length(expand($xp)) - 1; + my $nll = $columns - _xlen(expand($xp)) - 1; if ($nll <= 0 && $xp ne '') { - my $nc = length(expand($xp)) + 2; + my $nc = _xlen(expand($xp)) + 2; warnings::warnif "Increasing \$Text::Wrap::columns from $columns to $nc to accommodate length of subsequent tab"; $columns = $nc; $nll = 1; } - my $ll = $columns - length(expand($ip)) - 1; + my $ll = $columns - _xlen(expand($ip)) - 1; $ll = 0 if $ll < 0; my $nl = ""; my $remainder = ""; @@ -51,17 +59,17 @@ sub wrap pos($t) = 0; while ($t !~ /\G(?:$break)*\Z/gc) { - if ($t =~ /\G([^\n]{0,$ll})($break|\n+|\z)/xmgc) { + if ($t =~ /\G((?:(?=[^\n])\X){0,$ll})($break|\n+|\z)/xmgc) { $r .= $unexpand ? unexpand($nl . $lead . $1) : $nl . $lead . $1; $remainder = $2; - } elsif ($huge eq 'wrap' && $t =~ /\G([^\n]{$ll})/gc) { + } elsif ($huge eq 'wrap' && $t =~ /\G((?:(?!=[^\n])\X){$ll})/gc) { $r .= $unexpand ? unexpand($nl . $lead . $1) : $nl . $lead . $1; $remainder = defined($separator2) ? $separator2 : $separator; - } elsif ($huge eq 'overflow' && $t =~ /\G([^\n]*?)($break|\n+|\z)/xmgc) { + } elsif ($huge eq 'overflow' && $t =~ /\G((?:(?=[^\n])\X)*?)($break|\n+|\z)/xmgc) { $r .= $unexpand ? unexpand($nl . $lead . $1) : $nl . $lead . $1; @@ -90,7 +98,9 @@ sub wrap print "Finish up with '$lead'\n" if $debug; - $r .= $lead . substr($t, pos($t), length($t)-pos($t)) + my($opos) = pos($t); + + $r .= $lead . substr($t, pos($t), length($t) - pos($t)) if pos($t) ne length($t); print "-----------$r---------\n" if $debug;; @@ -150,7 +160,7 @@ B<Example 2> $huge = 'overflow'; B<Example 3> - + use Text::Wrap; $Text::Wrap::columns = 72; @@ -165,14 +175,23 @@ all subsequent lines (C<$subsequent_tab>) independently. Please note: C<$initial_tab> and C<$subsequent_tab> are the literal strings that will be used: it is unlikely you would want to pass in a number. -Text::Wrap::fill() is a simple multi-paragraph formatter. It formats +C<Text::Wrap::fill()> is a simple multi-paragraph formatter. It formats each paragraph separately and then joins them together when it's done. It will destroy any whitespace in the original text. It breaks text into -paragraphs by looking for whitespace after a newline. In other respects +paragraphs by looking for whitespace after a newline. In other respects, it acts like wrap(). +C<wrap()> compresses trailing whitespace into one newline, and C<fill()> +deletes all trailing whitespace. + Both C<wrap()> and C<fill()> return a single string. +Unlike the old Unix fmt(1) utility, this module correctly accounts for +any Unicode combining characters (such as diacriticals) that may occur +in each line for both expansion and unexpansion. These are overstrike +characters that do not increment the logical position. Make sure +you have the appropriate Unicode settings enabled. + =head1 OVERRIDES C<Text::Wrap::wrap()> has a number of variables that control its behavior. @@ -250,16 +269,31 @@ Result: "This is a bit of|text that forms a|normal book-style|paragraph" +=head1 SUBVERSION + +This module comes in two flavors: one for modern perls (5.10 and above) +and one for ancient obsolete perls. The version for modern perls has +support for Unicode. The version for old perls does not. You can tell +which version you have installed by looking at C<$Text::Wrap::SUBVERSION>: +it is C<old> for obsolete perls and C<modern> for current perls. + +This man page is for the version for modern perls and so that's probably +what you've got. + =head1 SEE ALSO -For wrapping multi-byte characters: L<Text::WrapI18N>. -For more detailed controls: L<Text::Format>. +For correct handling of East Asian half- and full-width characters, +see L<Text::WrapI18N>. For more detailed controls: L<Text::Format>. + +=head1 AUTHOR + +David Muir Sharnoff <cpan@dave.sharnoff.org> with help from Tim Pierce and +many many others. =head1 LICENSE -David Muir Sharnoff <muir@idiom.org> with help from Tim Pierce and -many many others. Copyright (C) 1996-2009 David Muir Sharnoff. -This module may be modified, used, copied, and redistributed at -your own risk. Publicly redistributed versions that are modified -must use a different name. +Copyright (C) 1996-2009 David Muir Sharnoff. +Copyright (C) 2012 Google, Inc. +This module may be modified, used, copied, and redistributed at your own risk. +Publicly redistributed modified versions must use a different name. |