summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text')
-rw-r--r--gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm82
-rw-r--r--gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm76
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.