summaryrefslogtreecommitdiff
path: root/ext/PerlIO-via-QuotedPrint
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2009-09-13 16:57:40 +0100
committerNicholas Clark <nick@ccl4.org>2009-09-13 16:57:40 +0100
commitd298f468fca65d287753530a975a3d396dd25e1d (patch)
tree684f0eae8de163a0df94236f4a1b07c7cf4f8a06 /ext/PerlIO-via-QuotedPrint
parent92d4c6331040f899673234f65d5ab2a406c5a32d (diff)
downloadperl-d298f468fca65d287753530a975a3d396dd25e1d.tar.gz
Move PerlIO::via::QuotedPrint from lib to ext.
Diffstat (limited to 'ext/PerlIO-via-QuotedPrint')
-rw-r--r--ext/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm94
-rw-r--r--ext/PerlIO-via-QuotedPrint/t/QuotedPrint.t75
2 files changed, 169 insertions, 0 deletions
diff --git a/ext/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm b/ext/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm
new file mode 100644
index 0000000000..2434191f09
--- /dev/null
+++ b/ext/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/ext/PerlIO-via-QuotedPrint/t/QuotedPrint.t b/ext/PerlIO-via-QuotedPrint/t/QuotedPrint.t
new file mode 100644
index 0000000000..69eb625f17
--- /dev/null
+++ b/ext/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'" );