| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package Template::Alloy::Tmpl; | 
| 2 |  |  |  |  |  |  |  | 
| 3 |  |  |  |  |  |  | =head1 NAME | 
| 4 |  |  |  |  |  |  |  | 
| 5 |  |  |  |  |  |  | Template::Alloy::Tmpl - Text::Tmpl role | 
| 6 |  |  |  |  |  |  |  | 
| 7 |  |  |  |  |  |  | =cut | 
| 8 |  |  |  |  |  |  |  | 
| 9 | 2 |  |  | 2 |  | 14 | use strict; | 
|  | 2 |  |  |  |  | 4 |  | 
|  | 2 |  |  |  |  | 76 |  | 
| 10 | 2 |  |  | 2 |  | 11 | use warnings; | 
|  | 2 |  |  |  |  | 6 |  | 
|  | 2 |  |  |  |  | 62 |  | 
| 11 | 2 |  |  | 2 |  | 11 | use Template::Alloy; | 
|  | 2 |  |  |  |  | 11 |  | 
|  | 2 |  |  |  |  | 15 |  | 
| 12 |  |  |  |  |  |  |  | 
| 13 |  |  |  |  |  |  | our $VERSION = $template::Alloy::VERSION; | 
| 14 |  |  |  |  |  |  | our $error; | 
| 15 |  |  |  |  |  |  |  | 
| 16 | 0 |  |  | 0 | 0 | 0 | sub new { die "This class is a role for use by packages such as Template::Alloy" } | 
| 17 |  |  |  |  |  |  |  | 
| 18 |  |  |  |  |  |  | ###----------------------------------------------------------------### | 
| 19 |  |  |  |  |  |  |  | 
| 20 |  |  |  |  |  |  | sub parse_tree_tmpl { | 
| 21 | 106 |  |  | 106 | 1 | 127 | my $self = shift; | 
| 22 |  |  |  |  |  |  |  | 
| 23 | 106 |  |  |  |  | 187 | local @{ $Template::Alloy::Parse::ALIASES }{qw(ECHO INCLUDE IFN    ENDCOMMENT ENDIF ENDIFN ENDLOOP)} | 
|  | 106 |  |  |  |  | 806 |  | 
| 24 |  |  |  |  |  |  | = qw(GET  PROCESS UNLESS END        END   END    END); | 
| 25 | 106 | 50 |  |  |  | 516 | local $self->{'V1DOLLAR'}   = defined($self->{'V1DOLLAR'}) ? $self->{'V1DOLLAR'} : 1; | 
| 26 | 106 | 50 |  |  |  | 317 | local $self->{'ANYCASE'}    = defined($self->{'ANYCASE'})  ? $self->{'ANYCASE'}  : 1; | 
| 27 | 106 |  | 50 |  |  | 485 | local $self->{'TAG_STYLE'}  = $self->{'TAG_STYLE'} || 'html'; | 
| 28 |  |  |  |  |  |  |  | 
| 29 | 106 |  |  |  |  | 537 | return $self->parse_tree_tt3(@_); | 
| 30 |  |  |  |  |  |  | } | 
| 31 |  |  |  |  |  |  |  | 
| 32 |  |  |  |  |  |  | ###----------------------------------------------------------------### | 
| 33 |  |  |  |  |  |  | ### support for few Text::Tmpl calling syntax | 
| 34 |  |  |  |  |  |  |  | 
| 35 |  |  |  |  |  |  | sub set_delimiters { | 
| 36 | 98 |  |  | 98 | 1 | 484 | my $self = shift; | 
| 37 | 98 |  | 33 |  |  | 424 | $self->{'START_TAG'} = quotemeta(shift || $self->throw('set', 'missing start_tag')); | 
| 38 | 98 |  | 33 |  |  | 433 | $self->{'END_TAG'}   = quotemeta(shift || $self->throw('set', 'missing end_tag')); | 
| 39 |  |  |  |  |  |  | } | 
| 40 |  |  |  |  |  |  |  | 
| 41 | 0 |  |  | 0 | 1 | 0 | sub strerror { $Template::Alloy::Tmpl::error } | 
| 42 |  |  |  |  |  |  |  | 
| 43 | 98 | 50 |  | 98 | 1 | 416 | sub set_strip { my $self = shift; $self->{'POST_CHOMP'} = $_[0] ? '-' : '+'; 1 } | 
|  | 98 |  |  |  |  | 277 |  | 
|  | 98 |  |  |  |  | 159 |  | 
| 44 |  |  |  |  |  |  |  | 
| 45 | 0 |  |  | 0 | 1 | 0 | sub set_value { my $self = shift; $self->{'_vars'}->{$_[0]} = $_[1]; 1 } | 
|  | 0 |  |  |  |  | 0 |  | 
|  | 0 |  |  |  |  | 0 |  | 
| 46 |  |  |  |  |  |  |  | 
| 47 | 108 |  | 100 | 108 | 1 | 345 | sub set_values { my ($self, $hash) = @_; @{ $self->{'_vars'} ||= {} }{keys %$hash} = values %$hash; 1 } | 
|  | 108 |  |  |  |  | 456 |  | 
|  | 108 |  |  |  |  | 667 |  | 
|  | 108 |  |  |  |  | 257 |  | 
| 48 |  |  |  |  |  |  |  | 
| 49 | 98 |  |  | 98 | 1 | 520 | sub parse_string { my $self = shift; return $self->parse_file(\$_[0]) } | 
|  | 98 |  |  |  |  | 442 |  | 
| 50 |  |  |  |  |  |  |  | 
| 51 |  |  |  |  |  |  | sub set_dir { | 
| 52 | 98 |  |  | 98 | 1 | 468 | my $self = shift; | 
| 53 | 98 |  |  |  |  | 348 | $self->{'INCLUDE_PATHS'} = [shift, './']; | 
| 54 |  |  |  |  |  |  | } | 
| 55 |  |  |  |  |  |  |  | 
| 56 |  |  |  |  |  |  | sub parse_file { | 
| 57 | 98 |  |  | 98 | 1 | 147 | my ($self, $content) = @_; | 
| 58 |  |  |  |  |  |  |  | 
| 59 | 98 |  | 50 |  |  | 266 | my $vars = $self->{'_vars'} || {}; | 
| 60 |  |  |  |  |  |  |  | 
| 61 | 98 |  | 50 |  |  | 515 | local $self->{'SYNTAX'} = $self->{'SYNTAX'} || 'tmpl'; | 
| 62 | 98 |  |  |  |  | 128 | local $Template::Alloy::QR_PRIVATE = undef; | 
| 63 | 98 | 50 |  |  |  | 385 | local $self->{'ABSOLUTE'} = defined($self->{'ABSOLUTE'}) ? $self->{'ABSOLUTE'} : 1; | 
| 64 | 98 | 50 |  |  |  | 336 | local $self->{'RELATIVE'} = defined($self->{'RELATIVE'}) ? $self->{'RELATIVE'} : 1; | 
| 65 |  |  |  |  |  |  |  | 
| 66 | 98 |  |  |  |  | 131 | $error = undef; | 
| 67 |  |  |  |  |  |  |  | 
| 68 | 98 |  |  |  |  | 139 | my $out = ''; | 
| 69 | 98 | 50 |  |  |  | 318 | $self->process_simple($content, $vars, \$out) | 
| 70 |  |  |  |  |  |  | || ($error = $self->error); | 
| 71 | 98 |  |  |  |  | 548 | return $out; | 
| 72 |  |  |  |  |  |  | } | 
| 73 |  |  |  |  |  |  |  | 
| 74 |  |  |  |  |  |  | sub loop_iteration { | 
| 75 | 10 |  |  | 10 | 1 | 68 | my $self = shift; | 
| 76 | 10 |  |  |  |  | 17 | my $name = shift; | 
| 77 | 10 |  | 100 |  |  | 55 | my $ref  = $self->{'_vars'}->{$name} ||= []; | 
| 78 | 10 |  |  |  |  | 13 | my $vars; | 
| 79 |  |  |  |  |  |  |  | 
| 80 | 10 | 50 |  |  |  | 26 | $self->throw('loop', "Variable $name is not an arrayref during loop_iteration") if ref($ref) ne 'ARRAY'; | 
| 81 | 10 | 50 |  |  |  | 27 | if (defined(my $index = shift)) { | 
| 82 | 0 |  | 0 |  |  | 0 | $vars = $ref->[$index] || $self->throw('loop', "Index $index is not yet defined on loop $name"); | 
| 83 |  |  |  |  |  |  | } else { | 
| 84 | 10 |  |  |  |  | 15 | $vars = {}; | 
| 85 | 10 |  |  |  |  | 37 | push @$ref, $vars; | 
| 86 |  |  |  |  |  |  | } | 
| 87 |  |  |  |  |  |  |  | 
| 88 | 10 |  |  |  |  | 36 | return ref($self)->new('_vars' => $vars); | 
| 89 |  |  |  |  |  |  | } | 
| 90 |  |  |  |  |  |  |  | 
| 91 | 0 |  |  | 0 | 1 |  | sub fetch_loop_iteration { shift->loop_iteration(@_) } | 
| 92 |  |  |  |  |  |  |  | 
| 93 |  |  |  |  |  |  | ###----------------------------------------------------------------### | 
| 94 |  |  |  |  |  |  |  | 
| 95 |  |  |  |  |  |  | 1; | 
| 96 |  |  |  |  |  |  |  | 
| 97 |  |  |  |  |  |  | __END__ |