diff options
author | Nicholas Clark <nick@ccl4.org> | 2009-10-02 14:19:12 +0100 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2009-10-02 14:19:12 +0100 |
commit | 9b7a10575018a218ebb7a89f80d9771db035413e (patch) | |
tree | 64bfd500ed303d76265d83ff853a3260a2c21ebe /cpan/PerlIO-via-QuotedPrint | |
parent | a636c943c3929a440786edb825bc8af23c40278f (diff) | |
download | perl-9b7a10575018a218ebb7a89f80d9771db035413e.tar.gz |
Move PerlIO::via::QuotedPrint from ext/ to cpan/
Diffstat (limited to 'cpan/PerlIO-via-QuotedPrint')
-rw-r--r-- | cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm | 94 | ||||
-rw-r--r-- | cpan/PerlIO-via-QuotedPrint/t/QuotedPrint.t | 75 |
2 files changed, 169 insertions, 0 deletions
diff --git a/cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm b/cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm new file mode 100644 index 0000000000..2434191f09 --- /dev/null +++ b/cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm @@ -0,0 +1,94 @@ +package PerlIO::via::QuotedPrint; + +# Set the version info +# Make sure we do things by the book from now on + +$VERSION = '0.06'; +use strict; + +# Make sure the encoding/decoding stuff is available + +use MIME::QuotedPrint (); # no need to pollute this namespace + +# Satisfy -require- + +1; + +#----------------------------------------------------------------------- +# IN: 1 class to bless with +# 2 mode string (ignored) +# 3 file handle of PerlIO layer below (ignored) +# OUT: 1 blessed object + +sub PUSHED { bless \*PUSHED,$_[0] } #PUSHED + +#----------------------------------------------------------------------- +# IN: 1 instantiated object (ignored) +# 2 handle to read from +# OUT: 1 decoded string + +sub FILL { + +# Read the line from the handle +# Decode if there is something decode and return result or signal eof + + my $line = readline( $_[1] ); + (defined $line) ? MIME::QuotedPrint::decode_qp( $line ) : undef; +} #FILL + +#----------------------------------------------------------------------- +# IN: 1 instantiated object (ignored) +# 2 buffer to be written +# 3 handle to write to +# OUT: 1 number of bytes written + +sub WRITE { + +# Encode whatever needs to be encoded and write to handle: indicate result + + (print {$_[2]} MIME::QuotedPrint::encode_qp($_[1])) ? length($_[1]) : -1; +} #WRITE + +__END__ + +=head1 NAME + +PerlIO::via::QuotedPrint - PerlIO layer for quoted-printable strings + +=head1 SYNOPSIS + + use PerlIO::via::QuotedPrint; + + open( my $in,'<:via(QuotedPrint)','file.qp' ) + or die "Can't open file.qp for reading: $!\n"; + + open( my $out,'>:via(QuotedPrint)','file.qp' ) + or die "Can't open file.qp for writing: $!\n"; + +=head1 DESCRIPTION + +This module implements a PerlIO layer that works on files encoded in the +quoted-printable format. It will decode from quoted-printable while reading +from a handle, and it will encode as quoted-printable while writing to a handle. + +=head1 REQUIRED MODULES + + MIME::QuotedPrint (any) + +=head1 SEE ALSO + +L<PerlIO::via>, L<MIME::QuotedPrint>, L<PerlIO::via::Base64>, +L<PerlIO::via::MD5>, L<PerlIO::via::StripHTML>, L<PerlIO::via::Rotate>. + +=head1 ACKNOWLEDGEMENTS + +Based on example that was initially added to MIME::QuotedPrint.pm for the +5.8.0 distribution of Perl. + +=head1 COPYRIGHT + +Copyright (c) 2002-2003 Elizabeth Mattijsen. All rights reserved. This +library is free software; you can redistribute it and/or modify it under +the same terms as Perl itself. + +=cut diff --git a/cpan/PerlIO-via-QuotedPrint/t/QuotedPrint.t b/cpan/PerlIO-via-QuotedPrint/t/QuotedPrint.t new file mode 100644 index 0000000000..69eb625f17 --- /dev/null +++ b/cpan/PerlIO-via-QuotedPrint/t/QuotedPrint.t @@ -0,0 +1,75 @@ +BEGIN { # Magic Perl CORE pragma + unless (find PerlIO::Layer 'perlio') { + print "1..0 # Skip: PerlIO not used\n"; + exit 0; + } + require Config; + if (($Config::Config{'extensions'} !~ m!\bPerlIO/via\b!) ){ + print "1..0 # Skip -- Perl configured without PerlIO::via module\n"; + exit 0; + } + if (ord("A") == 193) { + print "1..0 # Skip: EBCDIC\n"; + } +} + +use strict; +use warnings; +use Test::More tests => 11; + +BEGIN { use_ok('PerlIO::via::QuotedPrint') } + +my $file = 'test.qp'; + +my $decoded = <<EOD; +This is a tést for quoted-printable text that has hàrdly any speçial characters +in it. +EOD + +my $encoded; + +if (ord('A') == 193) { # EBCDIC. + $encoded = <<EOD; +This is a t=51st for quoted-printable text that has h=44rdly any spe=48ial = +characters +in it. +EOD +} else { + $encoded = <<EOD; +This is a t=E9st for quoted-printable text that has h=E0rdly any spe=E7ial = +characters +in it. +EOD +} + +# Create the encoded test-file + +ok( + open( my $out,'>:via(PerlIO::via::QuotedPrint)', $file ), + "opening '$file' for writing" +); + +ok( (print $out $decoded), 'print to file' ); +ok( close( $out ), 'closing encoding handle' ); + +# Check encoding without layers + +{ +local $/ = undef; +ok( open( my $test,$file ), 'opening without layer' ); +is( $encoded,readline( $test ), 'check encoded content' ); +ok( close( $test ), 'close test handle' ); +} + +# Check decoding _with_ layers + +ok( + open( my $in,'<:via(QuotedPrint)', $file ), + "opening '$file' for reading" +); +is( $decoded,join( '',<$in> ), 'check decoding' ); +ok( close( $in ), 'close decoding handle' ); + +# Remove whatever we created now + +ok( unlink( $file ), "remove test file '$file'" ); |