summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-04 19:21:27 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-04 19:24:50 -0500
commit02a68abd6466029ea92d6160347e11f2b4d5d25a (patch)
tree0a7039bb36560573d70656e3b5782ffd860e639b /lib
parentaabf883a41f3172275e1a05b10f872cfde5b94c5 (diff)
downloadtext-handlebars-02a68abd6466029ea92d6160347e11f2b4d5d25a.tar.gz
text-handlebars-02a68abd6466029ea92d6160347e11f2b4d5d25a.zip
allow [] for dereferencing with literals
Diffstat (limited to 'lib')
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm15
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