package PDF::FromHTML::Template::Base;
use strict;
BEGIN {
}
use PDF::FromHTML::Template::Constants qw(
%Verify
);
use PDF::FromHTML::Template::Factory;
sub new
{
my $class = shift;
push @_, %{shift @_} while UNIVERSAL::isa($_[0], 'HASH');
(@_ % 2) && die "$class->new() called with odd number of option parameters", $/;
my %x = @_;
# Do not use a hashref-slice here because of the uppercase'ing
my $self = {};
$self->{uc $_} = $x{$_} for keys %x;
$self->{__THIS_HAS_RENDERED__} = 0;
bless $self, $class;
}
sub isa { PDF::FromHTML::Template::Factory::isa(@_) }
# These functions are used in the P::T::Container & P::T::Element hierarchies
sub _validate_option
{
my $self = shift;
my ($option, $val_ref) = @_;
$option = uc $option;
return 1 unless exists $Verify{$option} && UNIVERSAL::isa($Verify{$option}, 'HASH');
if (defined $val_ref)
{
if (!defined $$val_ref)
{
$$val_ref = $Verify{$option}{'__DEFAULT__'};
}
elsif (!exists $Verify{$option}{$$val_ref})
{
my $name = ucfirst lc $option;
warn "$name '$$val_ref' unsupported. Defaulting to '$Verify{$option}{'__DEFAULT__'}'", $/;
$$val_ref = $Verify{$option}{'__DEFAULT__'};
}
}
elsif (!defined $self->{$option})
{
$self->{$option} = $Verify{$option}{'__DEFAULT__'};
}
elsif (!exists $Verify{$option}{$self->{$option}})
{
my $name = ucfirst lc $option;
warn "$name '$self->{$option}' unsupported. Defaulting to '$Verify{$option}{'__DEFAULT__'}'", $/;
$self->{$option} = $Verify{$option}{'__DEFAULT__'};
}
return 1;
}
sub calculate { ($_[1])->get(@_[0,2]) }
#{
# my $self = shift;
# my ($context, $attr) = @_;
#
# return $context->get($self, $attr);
#}
sub enter_scope { ($_[1])->enter_scope($_[0]) }
#{
# my $self = shift;
# my ($context) = @_;
#
# return $context->enter_scope($self);
#}
sub exit_scope { ($_[1])->exit_scope(@_[0, 2]) }
#{
# my $self = shift;
# my ($context, $no_delta) = @_;
#
# return $context->exit_scope($self, $no_delta);
#}
sub deltas
{
# my $self = shift;
# my ($context) = @_;
return {};
}
sub reset { $_[0]{__THIS_HAS_RENDERED__} = 0 }
sub mark_as_rendered { $_[0]{__THIS_HAS_RENDERED__} = 1 }
sub has_rendered { $_[0]{__THIS_HAS_RENDERED__} }
sub should_render { ($_[0]{__THIS_HAS_RENDERED__}) || (($_[1])->should_render($_[0])) }
sub resolve
{
# my $self = shift;
# my ($context) = @_;
'';
}
sub render
{
# my $self = shift;
# my ($context) = @_;
return 1;
}
sub begin_page
{
# my $self = shift;
# my ($context) = @_;
return 1;
}
sub end_page
{
# my $self = shift;
# my ($context) = @_;
return 1;
}
1;
__END__