package Razor2::Preproc::enBase64;
sub new {
return bless {}, shift;
}
sub isit {
my ($self, $text) = @_;
my $is_binary = ($$text =~ /^Content-Type-Encoding: 8-bit/) ||
($$text =~ /([\x00-\x1f|\x7f-\xff])/ and $1 !~ /[\r\n\t]/);
return $is_binary;
}
sub doit {
my ($self, $text) = @_;
pos($$text) = 0; # ensure start at the beginning
my $res = join '', map( pack('u',$_)=~ /^.(\S*)/, ($$text =~ /(.{1,45})/gs));
$res =~ tr|` -_|AA-Za-z0-9+/|; # `# help emacs
# fix padding at the end
my $padding = (3 - length($$text) % 3) % 3;
$res =~ s/.{$padding}$/'=' x $padding/e if $padding;
# split into lines
$res =~ s/(.{1,76})/$1\n/g;
$res = "Content-Transfer-Encoding: base64\n\n$res";
$$text = $res;
}
1;