Acme-Pythonic

 view release on metacpan or  search on metacpan

t/text_wrap.t  view on Meta::CPAN

# -*- Mode: Python -*-

# This is a meticolous port of Text::Wrap.
#
# The intention is to test whether an example of real code is processed
# correctly.
#
# It has been written by copying the original code and doing the minimal
# changes for it to be Pythonic, which means colonizing, removing some
# parens, adding a few backslashes, etc. Comments, spacing, and all
# details have been kept.

use Test::More 'no_plan';
use Acme::Pythonic debug => 0;

package Acme::Pythonic::Text::Wrap

require Exporter

@ISA = qw(Exporter)
@EXPORT = qw(wrap fill)
@EXPORT_OK = qw($columns $break $huge)

$VERSION = 2001.09291

use vars qw($VERSION $columns $debug $break $huge $unexpand $tabstop
    $separator)
use strict

BEGIN:
    $columns = 76  # <= screen width
    $debug = 0
    $break = '\s'
    $huge = 'wrap' # alternatively: 'die' or 'overflow'
    $unexpand = 1
    $tabstop = 8
    $separator = "\n"

use Text::Tabs qw(expand unexpand)

sub wrap:
    my ($ip, $xp, @t) = @_

    local($Text::Tabs::tabstop) = $tabstop
    my $r = ""
    my $tail = pop(@t)
    my $t = expand(join("", (map { /\s+\z/ ? ( $_ ) : ($_, ' ') } @t), $tail))
    my $lead = $ip
    my $ll = $columns - length(expand($ip)) - 1
    $ll = 0 if $ll < 0
    my $nll = $columns - length(expand($xp)) - 1
    my $nl = ""
    my $remainder = ""

    use re 'taint'

    pos($t) = 0
    while $t !~ /\G\s*\Z/gc:
        if $t =~ /\G([^\n]{0,$ll})($break|\z)/xmgc:
            $r .= $unexpand \
                ? unexpand($nl . $lead . $1) \
                : $nl . $lead . $1
            $remainder = $2
        elsif $huge eq 'wrap' && $t =~ /\G([^\n]{$ll})/gc:
            $r .= $unexpand \
                ? unexpand($nl . $lead . $1) \
                : $nl . $lead . $1
            $remainder = $separator



( run in 0.857 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )