Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# # $Id: QuotedPrint.pm,v 2.3 1997/12/02 10:24:27 aas Exp $
package MIME::QuotedPrint;
=head1 NAME
MIME::QuotedPrint - Encoding and decoding of quoted-printable strings
=head1 SYNOPSIS
use MIME::QuotedPrint;
$encoded = encode_qp($decoded); $decoded = decode_qp($encoded);
=head1 DESCRIPTION
This module provides functions to encode and decode strings into the Quoted-Printable encoding specified in RFC 2045 - I<MIME (Multipurpose Internet Mail Extensions)>. The Quoted-Printable encoding is intended to represent data that largely consists of bytes that correspond to printable characters in the ASCII character set. Non-printable characters (as defined by english americans) are represented by a triplet consisting of the character "=" followed by two hexadecimal digits.
The following functions are provided:
=over 4
=item encode_qp($str)
This function will return an encoded version of the string given as argument.
Note that encode_qp() does not change newlines C<"\n"> to the CRLF sequence even though this might be considered the right thing to do (RFC 2045 (Q-P Rule #4)).
=item decode_qp($str);
This function will return the plain text version of the string given as argument.
=back
If you prefer not to import these routines into your namespace you can call them as:
use MIME::QuotedPrint (); $encoded = MIME::QuotedPrint::encode($decoded); $decoded = MIME::QuotedPrint::decode($encoded);
=head1 COPYRIGHT
Copyright 1995-1997 Gisle Aas.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
=cut
use strict; use vars qw(@ISA @EXPORT $VERSION);
require Exporter; @ISA = qw(Exporter); @EXPORT = qw(encode_qp decode_qp);
$VERSION = sprintf("%d.%02d", q$Revision: 2.3 $ =~ /(\d+)\.(\d+)/);
sub encode_qp ($) { my $res = shift; $res =~ s/([^ \t\n!-<>-~])/sprintf("=%02X", ord($1))/eg; # rule #2,#3 $res =~ s/([ \t]+)$/ join('', map { sprintf("=%02X", ord($_)) } split('', $1) )/egm; # rule #3 (encode whitespace at eol)
# rule #5 (lines must be shorter than 76 chars, but we are not allowed # to break =XX escapes. This makes things complicated :-( ) my $brokenlines = ""; $brokenlines .= "$1=\n" while $res =~ s/(.*?^[^\n]{73} (?: [^=\n]{2} (?! [^=\n]{0,1} $) # 75 not followed by .?\n |[^=\n] (?! [^=\n]{0,2} $) # 74 not followed by .?.?\n | (?! [^=\n]{0,3} $) # 73 not followed by .?.?.?\n ))//xsm;
"$brokenlines$res"; }
sub decode_qp ($) { my $res = shift; $res =~ s/[ \t]+?(\r?\n)/$1/g; # rule #3 (trailing space must be deleted) $res =~ s/=\r?\n//g; # rule #5 (soft line breaks) $res =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge; $res; }
# Set up aliases so that these functions also can be called as # # MIME::QuotedPrint::encode(); # MIME::QuotedPrint::decode();
*encode = \&encode_qp; *decode = \&decode_qp;
1;
|