diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-04 19:21:27 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-04 19:24:50 -0500 |
commit | 02a68abd6466029ea92d6160347e11f2b4d5d25a (patch) | |
tree | 0a7039bb36560573d70656e3b5782ffd860e639b /lib/Text | |
parent | aabf883a41f3172275e1a05b10f872cfde5b94c5 (diff) | |
download | text-handlebars-02a68abd6466029ea92d6160347e11f2b4d5d25a.tar.gz text-handlebars-02a68abd6466029ea92d6160347e11f2b4d5d25a.zip |
allow [] for dereferencing with literals
Diffstat (limited to 'lib/Text')
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index dd543dc..fe2f083 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -553,10 +553,25 @@ sub define_function { return; } +sub parse_literal { + my $self = shift; + my ($literal) = @_; + + if ($literal =~ /\A\[(.*)\]\z/ms) { + $literal = $1; + $literal =~ s/(["\\])/\\$1/g; + $literal = '"' . $literal . '"'; + } + + return $self->SUPER::parse_literal($literal); +} + sub is_valid_field { my $self = shift; my ($field) = @_; + # allow foo.[10] + return 1 if $field->arity eq 'literal'; # undefined symbols are all treated as variables - see undefined_name return 1 if $field->arity eq 'variable'; # allow ../../foo |