blob: 30a769c4382c68f7e14ab95460025c910420d4aa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package Text::Handlebars;
use strict;
use warnings;
use base 'Text::Xslate';
use Scalar::Util 'weaken';
sub default_functions {
my $class = shift;
return {
%{ $class->SUPER::default_functions(@_) },
'(is_array)' => sub {
my ($val) = @_;
return ref($val) && ref($val) eq 'ARRAY';
},
'(is_empty_array)' => sub {
my ($val) = @_;
return @$val == 0;
},
'(make_array)' => sub {
my ($length) = @_;
return [(undef) x $length];
},
'(new_vars_for)' => sub {
my ($vars, $value, $i) = @_;
$i = 0 unless defined $i; # XXX
if (my $ref = ref($value)) {
if (defined $ref && $ref eq 'ARRAY') {
die "no iterator cycle provided?"
unless defined $i;
$value = ref($value->[$i])
? $value->[$i]
: { '.' => $value->[$i] };
$ref = ref($value);
}
return $vars unless $ref && $ref eq 'HASH';
weaken(my $vars_copy = $vars);
return {
%$vars,
%$value,
'..' => $vars_copy,
};
}
else {
return $vars;
}
},
};
}
sub options {
my $class = shift;
my $options = $class->SUPER::options(@_);
$options->{compiler} = 'Text::Handlebars::Compiler';
return $options;
}
1;
|