The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package pdflib_pl;

use strict;

# This is a testing version of pdflib_pl, used to test PDF::Template.

BEGIN {
    use vars qw($VERSION $AUTOLOAD);

    $VERSION = '4.1';

    use IO::File;
}

my $DEBUG = 0;

my $fh;

sub PDF_new {
    $fh = undef;

    my $pdf = {
        BUFFER => [],
        FONTS  => [ undef ],
        CURRFONT => {},
    };

    print "PDF_new: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        push @{$pdf->{BUFFER}}, "PDF_new('@_')";
    }

    return $pdf;
}

sub PDF_open_file {
    my $pdf = shift;

    print "PDF_open_file: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        push @{$pdf->{BUFFER}}, "PDF_open_file('@_')";
    }

    my ($fname) = @_;

    if ($fname)
    {
        $fh = IO::File->new(">$fname")
            || return -1;
    }

    return 1;
}

sub PDF_close {
    my $pdf = shift;

    print "PDF_close: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        push @{$pdf->{BUFFER}}, "PDF_close('@_')";
    }

    if (UNIVERSAL::isa($fh, 'IO::File'))
    {
        local $" = $/;
        print $fh "@{$pdf->{BUFFER}}\n";
    }

    return 1;
}

sub PDF_get_buffer {
    my $pdf = shift;

    print "PDF_get_buffer: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        push @{$pdf->{BUFFER}}, "PDF_get_buffer('@_')";
    }

    my $w = wantarray;
    return unless defined $w;

    if (wantarray)
    {
        return @{$pdf->{BUFFER}};
    }
    else
    {
        local $" = $/;
        return "@{$pdf->{BUFFER}}\n";
    }
}

sub PDF_show_boxed {
    my $pdf = shift;

    print "PDF_show_boxed: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        push @{$pdf->{BUFFER}}, "PDF_show_boxed('@_')";
    }

    return 0;
}

sub PDF_findfont {
    my $pdf = shift;

    print "PDF_findfont: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        push @{$pdf->{BUFFER}}, "PDF_findfont('@_')";
    }

    push @{$pdf->{FONTS}}, join '|', @_;

    return $#{$pdf->{FONTS}};
}

sub PDF_setfont {
    my $pdf = shift;

    print "PDF_setfont: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        push @{$pdf->{BUFFER}}, "PDF_setfont('@_')";
    }

    $pdf->{CURRFONT} = {
        FACE => $_[0],
        SIZE => $_[1],
    };

    return 1;
}

sub PDF_get_value {
    my $pdf = shift;

    print "PDF_get_value: $pdf\n" if $DEBUG;

    {
        local $" = "', '";
        @_ = map { defined $_ ? $_ : '' } @_;
        push @{$pdf->{BUFFER}}, "PDF_get_value('@_')";
    }

    if ($_[0] eq 'fontsize')
    {
        return $pdf->{CURRFONT}{SIZE};
    }

    return 1;
}

my @func_names = qw(
    PDF_add_bookmark
    PDF_add_weblink
    PDF_begin_page
    PDF_circle
    PDF_close_image
    PDF_end_page
    PDF_fill
    PDF_fill_stroke
    PDF_lineto
    PDF_moveto
    PDF_open_image_file
    PDF_place_image
    PDF_rect
    PDF_restore
    PDF_save
    PDF_set_info
    PDF_set_parameter
    PDF_setcolor
    PDF_setlinewidth
    PDF_setrgbcolor
    PDF_setrgbcolor_fill
    PDF_setrgbcolor_stroke
    PDF_show_xy
    PDF_stroke
);

sub AUTOLOAD
{
    my $name = $AUTOLOAD;
    $name =~ s/.*::([^:]+)$/$1/;

    no strict 'refs';

    *$AUTOLOAD = sub {
        my $pdf = shift;

        print "$name: $pdf\n" if $DEBUG;

        local $" = "', '";
        push @{$pdf->{BUFFER}}, "${name}('@_')";
    };

    goto &$AUTOLOAD;
}

1;
__END__