Acme-EyeDrops
view release on metacpan or search on metacpan
- new shape: mosquito
- new shape: coffee
- new shape: yanick
- new shape: yanick2
- new shape: yanick3
1.09 Sun May 19 17:09:12 2002
- new attributes: Reduce and Expand
- new attributes: RotateType and RotateFlip
- new functions: reduce_shape and expand_shape
- new rtype/flip parameters added to rotate_shape function
- rotate 90 and 270 now work, no longer squashed
- added support for new attributes to demo/sightly.pl
- new test: reshape.t (tests Reduce, Expand, Rotate)
- new test: camel.t
- documentation: added 'Thirty Two Camels' sub-section
- minor change to shape yanick (identical dimensions to camel now)
1.10 Wed May 29 19:08:11 2002
lib/Acme/EyeDrops.pm view on Meta::CPAN
use vars qw($VERSION @ISA @EXPORT_OK);
require Exporter; @ISA = qw(Exporter);
@EXPORT_OK = qw(ascii_to_sightly sightly_to_ascii
regex_print_sightly regex_eval_sightly clean_print_sightly
clean_eval_sightly regex_binmode_print_sightly
clean_binmode_print_sightly
get_eye_dir get_eye_shapes get_eye_string get_builtin_shapes
get_eye_properties get_eye_keywords find_eye_shapes
make_triangle make_siertri make_banner
border_shape invert_shape reflect_shape rotate_shape
reduce_shape expand_shape hjoin_shapes
pour_text pour_sightly sightly);
$VERSION = '1.62';
{ # This table was generated by demo/gentable.pl.
my @C = (
q Z('!'^'!')Z,q Z('('^')')Z,q Z('<'^'>')Z,q Z('>'^'=')Z,
q Z('>'^':')Z,q Z('>'^';')Z,q Z('+'^'-')Z,q Z('*'^'-')Z,
q Z('+'^'#')Z,q Z('*'^'#')Z,q Z('!'^'+')Z,q Z('!'^'*')Z,
q Z('!'^'-')Z,q Z('!'^',')Z,q Z('!'^'/')Z,q Z('!'^'.')Z,
q Z('?'^'/')Z,q Z('<'^'-')Z,q Z('-'^'?')Z,q Z('.'^'=')Z,
q Z('+'^'?')Z,q Z('*'^'?')Z,q Z('?'^')')Z,q Z('<'^'+')Z,
lib/Acme/EyeDrops.pm view on Meta::CPAN
sub reduce_shape {
my ($tlines, $f) = @_; my $i = $f++; my $s = "";
for my $l (grep(!(++$i%$f), split(/\n/, $tlines))) {
for ($i = 0; $i < length($l); $i += $f) { $s .= substr($l, $i, 1) }
$s .= "\n";
}
$s =~ s/ +$//mg; $s;
}
sub expand_shape {
my ($s, $f) = @_; my $i = ' ' x ++$f; my $j = '#' x $f;
$s =~ s/ /$i/g; $s =~ s/#/$j/g; my $t = "";
for my $l (split(/^/, $s, -1)) { $t .= $l x $f } $t;
}
# Rotate shape clockwise: 90, 180 or 270 degrees
# (other angles are left as an exercise for the reader:-)
sub rotate_shape {
my ($tlines, $degrees, $rtype, $flip) = @_;
$degrees == 180 and
lib/Acme/EyeDrops.pm view on Meta::CPAN
} elsif ($arg{Width}) {
die "invalid width $arg{Width} (must be > 3)"
if !$arg{Text} && $arg{Width} < 4;
$shape = '#' x $arg{Width};
}
$shape or return "use re 'eval';\n" x ($arg{Regex} == 3 || ($arg{Regex} == 1 && $] >= 5.017)) . $sightly;
$arg{Rotate} and $shape = rotate_shape($shape, $arg{Rotate},
$arg{RotateType}, $arg{RotateFlip});
$arg{Reflect} and $shape = reflect_shape($shape);
$arg{Reduce} and $shape = reduce_shape($shape, $arg{Reduce});
$arg{Expand} and $shape = expand_shape($shape, $arg{Expand});
$arg{Invert} and $shape = invert_shape($shape);
$arg{TrailingSpaces} ||
$arg{BorderGap} || $arg{BorderWidth} ||
$arg{BorderGapLeft} || $arg{BorderWidthLeft} ||
$arg{BorderGapRight} || $arg{BorderWidthRight} ||
$arg{BorderGapTop} || $arg{BorderWidthTop} ||
$arg{BorderGapBottom} || $arg{BorderWidthBottom} and
$shape = border_shape($shape,
$arg{BorderGapLeft} || $arg{BorderGap},
$arg{BorderGapRight} || $arg{BorderGap},
lib/Acme/EyeDrops.pm view on Meta::CPAN
Invert a shape.
=item reflect_shape SHAPESTRING
Reflect a shape.
=item reduce_shape SHAPESTRING FACT
Reduce the size of a shape by a factor of FACT.
=item expand_shape SHAPESTRING FACT
Expand the size of a shape by a factor of FACT.
=item rotate_shape SHAPESTRING DEGREES RTYPE FLIP
Rotate a shape clockwise thru 90, 180 or 270 degrees.
RTYPE=0 big rotated shape,
RTYPE=1 small rotated shape,
RTYPE=2 squashed rotated shape.
FLIP=1 to flip (reflect) shape in addition to rotating it.
t/11_bold.t view on Meta::CPAN
#!/usr/bin/perl
# 11_bold.t (was vshape.t)
# This tests OK as taint-safe (i.e. with -Tw added to first line above).
use strict;
use Acme::EyeDrops qw(get_eye_string get_eye_shapes
get_builtin_shapes
make_triangle make_siertri
border_shape invert_shape reflect_shape
hjoin_shapes sightly
reduce_shape expand_shape rotate_shape);
select(STDERR);$|=1;select(STDOUT);$|=1; # autoflush
# --------------------------------------------------
# A valid shape should:
# 1) contain only ' ' '#' and "\n"
# 2) be left-justified
# 3) no line should contain trailing spaces
# 4) be properly newline-terminated
# 5) contain no leading or trailing newlines
t/11_bold.t view on Meta::CPAN
++$itest; print "ok $itest - $e properly newline terminated\n";
}
for my $e (@eye_shapes) { test_one_shape($e, get_eye_string($e)) }
my $s = get_eye_string('camel');
test_one_shape('border_shape', border_shape($s, 1, 1, 1, 1, 1, 1, 1, 1));
test_one_shape('invert_shape', invert_shape($s));
test_one_shape('reflect_shape', reflect_shape($s));
test_one_shape('hjoin_shapes', hjoin_shapes(3, $s, $s));
test_one_shape('reduce_shape', reduce_shape($s, 1));
test_one_shape('expand_shape', expand_shape($s, 1));
test_one_shape('rotate_shape-90', rotate_shape($s, 90, 0, 0));
test_one_shape('rotate_shape-180', rotate_shape($s, 180, 0, 0));
test_one_shape('rotate_shape-270', rotate_shape($s, 270, 0, 0));
test_one_shape('make_triangle', make_triangle(71));
test_one_shape('make_triangle', make_triangle(2));
test_one_shape('make_siertri', make_siertri(5));
my $p = sightly( { SourceString => "knob\n",
Print => 1,
Regex => 1,
( run in 2.304 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )