package Template::Alloy::Tmpl; =head1 NAME Template::Alloy::Tmpl - Text::Tmpl role =cut use strict; use warnings; use Template::Alloy; our $VERSION = $template::Alloy::VERSION; our $error; sub new { die "This class is a role for use by packages such as Template::Alloy" } ###----------------------------------------------------------------### sub parse_tree_tmpl { my $self = shift; local @{ $Template::Alloy::Parse::ALIASES }{qw(ECHO INCLUDE IFN ENDCOMMENT ENDIF ENDIFN ENDLOOP)} = qw(GET PROCESS UNLESS END END END END); local $self->{'V1DOLLAR'} = defined($self->{'V1DOLLAR'}) ? $self->{'V1DOLLAR'} : 1; local $self->{'ANYCASE'} = defined($self->{'ANYCASE'}) ? $self->{'ANYCASE'} : 1; local $self->{'TAG_STYLE'} = $self->{'TAG_STYLE'} || 'html'; return $self->parse_tree_tt3(@_); } ###----------------------------------------------------------------### ### support for few Text::Tmpl calling syntax sub set_delimiters { my $self = shift; $self->{'START_TAG'} = quotemeta(shift || $self->throw('set', 'missing start_tag')); $self->{'END_TAG'} = quotemeta(shift || $self->throw('set', 'missing end_tag')); } sub strerror { $Template::Alloy::Tmpl::error } sub set_strip { my $self = shift; $self->{'POST_CHOMP'} = $_[0] ? '-' : '+'; 1 } sub set_value { my $self = shift; $self->{'_vars'}->{$_[0]} = $_[1]; 1 } sub set_values { my ($self, $hash) = @_; @{ $self->{'_vars'} ||= {} }{keys %$hash} = values %$hash; 1 } sub parse_string { my $self = shift; return $self->parse_file(\$_[0]) } sub set_dir { my $self = shift; $self->{'INCLUDE_PATHS'} = [shift, './']; } sub parse_file { my ($self, $content) = @_; my $vars = $self->{'_vars'} || {}; local $self->{'SYNTAX'} = $self->{'SYNTAX'} || 'tmpl'; local $Template::Alloy::QR_PRIVATE = undef; local $self->{'ABSOLUTE'} = defined($self->{'ABSOLUTE'}) ? $self->{'ABSOLUTE'} : 1; local $self->{'RELATIVE'} = defined($self->{'RELATIVE'}) ? $self->{'RELATIVE'} : 1; $error = undef; my $out = ''; $self->process_simple($content, $vars, \$out) || ($error = $self->error); return $out; } sub loop_iteration { my $self = shift; my $name = shift; my $ref = $self->{'_vars'}->{$name} ||= []; my $vars; $self->throw('loop', "Variable $name is not an arrayref during loop_iteration") if ref($ref) ne 'ARRAY'; if (defined(my $index = shift)) { $vars = $ref->[$index] || $self->throw('loop', "Index $index is not yet defined on loop $name"); } else { $vars = {}; push @$ref, $vars; } return ref($self)->new('_vars' => $vars); } sub fetch_loop_iteration { shift->loop_iteration(@_) } ###----------------------------------------------------------------### 1; __END__ =head1 DESCRIPTION The Template::Alloy::Tmpl role provides the syntax and the interface for Text::Tmpl. It also brings many of the features from the various templating systems. See the Template::Alloy documentation for configuration and other parameters. =head1 ROLE_METHODS =over 4 =item C Called by parse_tree when syntax is set to tmpl. Parses for tags Text::Tmpl style. =item C Sets the START_TAG and END_TAG to use for parsing. $obj->set_delimiters('#[', ']#'); =item C Can be used for checking the error when compile fails (or you can use ->error). May be called as function or method (Text::Tmpl only allows as function). =item C Determines if trailing whitespace on same line is removed. Default is false. =item C Sets the path to look for included templates in. =item C Sets a single value that will be used during processing of the template. $obj->set_value(key => $value); =item C Sets multiple values for use during processing. $obj->set_values(\%values); =item C Processes the passed string. my $out = $obj->process_string("#[echo $foo]#"); =item C Processes the passed filename. my $out = $obj->process_file("my/file.tmpl"); =item C Same as the Text::Tmpl method - used for adding iterations to a loop. my $ref = $obj->loop_iteration('loop1'); # creates iteration 0 $ref->set_values($hash); =item C Gets a previously created loop iteration. my $ref = $obj->fetch_loop_iteration('loop1', 0); $ref->set_values($hash); =back =head1 UNSUPPORTED Text::Tmpl METHODS register_simple, register_pair, alias_simple, alias_pair, remove_simple, remove_pair, set_debug, errno =head1 AUTHOR Paul Seamons =head1 LICENSE This module may be distributed under the same terms as Perl itself. =cut