The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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;