summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-03 11:49:18 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-03 11:49:18 -0500
commitdd17e9001091ce49528625ee46e2d0bc73423a7f (patch)
tree44503d0334792b0b72b7f0b9adcd8534e3f0f4e3
parent3875faa18e63d4bf5336b07279fc36f306900972 (diff)
downloadtext-handlebars-dd17e9001091ce49528625ee46e2d0bc73423a7f.tar.gz
text-handlebars-dd17e9001091ce49528625ee46e2d0bc73423a7f.zip
'.' should be a variable name referring to the current array element
-rw-r--r--lib/Text/Handlebars.pm8
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm9
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/Text/Handlebars.pm b/lib/Text/Handlebars.pm
index 836e253..30a769c 100644
--- a/lib/Text/Handlebars.pm
+++ b/lib/Text/Handlebars.pm
@@ -30,8 +30,12 @@ sub default_functions {
if (defined $ref && $ref eq 'ARRAY') {
die "no iterator cycle provided?"
unless defined $i;
- $value = $value->[$i];
- $ref = ref($value);
+
+ $value = ref($value->[$i])
+ ? $value->[$i]
+ : { '.' => $value->[$i] };
+
+ $ref = ref($value);
}
return $vars unless $ref && $ref eq 'HASH';
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index 831ad7b..b58a716 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -156,6 +156,8 @@ sub init_symbols {
$self->infix('.', 256, $self->can('led_dot'));
$self->infix('/', 256, $self->can('led_dot'));
+ $self->symbol('.')->set_nud($self->can('nud_dot'));
+
$self->symbol('#')->set_std($self->can('std_block'));
$self->symbol('^')->set_std($self->can('std_block'));
$self->prefix('/', 0)->is_block_end(1);
@@ -199,6 +201,13 @@ sub led_dot {
return $dot;
}
+sub nud_dot {
+ my $self = shift;
+ my ($symbol) = @_;
+
+ return $symbol->clone(arity => 'variable');
+}
+
sub std_block {
my $self = shift;
my ($symbol) = @_;