package Solution::Template;
{
use strict;
use warnings;
use lib '..';
our $VERSION = '0.9.1';
use Solution::Utility;
#
sub context { $_[0]->{'context'} }
sub filters { $_[0]->{'filters'} }
sub tags { $_[0]->{'tags'} }
sub document { $_[0]->{'document'} }
sub parent { $_[0]->{'parent'} }
sub resolve { $_[0]->{'context'}->resolve($_[1], $_[2]) }
#
sub new {
my ($class) = @_;
my $self = bless {tags => Solution->tags(), # Global list
filters => Solution->filters() # Global list
}, $class;
return $self;
}
sub parse {
my ($class, $source) = @_;
my $self = ref $class ? $class : $class->new();
my @tokens = Solution::Utility::tokenize($source);
$self->{'document'} ||= Solution::Document->new({template => $self});
$self->{'document'}->parse(\@tokens);
return $self;
}
sub render {
my ($self, $assigns, $info) = @_;
$info ||= {};
$info->{'template'} = $self;
$self->{'context'} = Solution::Context->new($assigns, $info);
return $self->document->render();
}
sub register_filter {
my ($self, $name) = @_;
eval qq[require $name;];
return push @{$self->{'filters'}}, $name;
}
sub register_tag {
my ($self, $tag_name, $package) = @_;
eval qq[require $package;];
return $self->{'tags'}{$tag_name} = $package;
}
}
1;
=pod
=head1 NAME
Solution::Template - Base class for all templates and template-like things
=head1 Description
This is used internally.
=head1 See Also
Liquid for Designers: http://wiki.github.com/tobi/liquid/liquid-for-designers
L<Solution|Solution/"Create your own filters">'s docs on custom filter creation
=head1 Author
Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/
The original Liquid template system was developed by jadedPixel
(http://jadedpixel.com/) and Tobias Lütke (http://blog.leetsoft.com/).
=head1 License and Legal
Copyright (C) 2009-2012 by Sanko Robinson E<lt>sanko@cpan.orgE<gt>
This program is free software; you can redistribute it and/or modify it under
the terms of The Artistic License 2.0. See the F<LICENSE> file included with
this distribution or http://www.perlfoundation.org/artistic_license_2_0. For
clarification, see http://www.perlfoundation.org/artistic_2_0_notes.
When separated from the distribution, all original POD documentation is
covered by the Creative Commons Attribution-Share Alike 3.0 License. See
http://creativecommons.org/licenses/by-sa/3.0/us/legalcode. For
clarification, see http://creativecommons.org/licenses/by-sa/3.0/us/.
=cut