diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Text/Handlebars.pm | 8 | ||||
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 9 |
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) = @_; |