From dd17e9001091ce49528625ee46e2d0bc73423a7f Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 3 Oct 2012 11:49:18 -0500 Subject: '.' should be a variable name referring to the current array element --- lib/Text/Handlebars.pm | 8 ++++++-- lib/Text/Xslate/Syntax/Handlebars.pm | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'lib') 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) = @_; -- cgit v1.2.3-54-g00ecf