From 8bc255bc63dbc88b24c96e3217db495027c74018 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Fri, 3 Mar 2017 20:31:09 +0100 Subject: Add support for parenthesized expressions --- askama/src/generator.rs | 7 +++++++ askama/src/parser.rs | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/askama/src/generator.rs b/askama/src/generator.rs index 72c5ecd..6975f25 100644 --- a/askama/src/generator.rs +++ b/askama/src/generator.rs @@ -163,6 +163,12 @@ impl<'a> Generator<'a> { self.visit_expr(right); } + fn visit_group(&mut self, inner: &Expr) { + self.write("("); + self.visit_expr(inner); + self.write(")"); + } + fn visit_call(&mut self, obj: &Expr, method: &str, args: &[Expr]) { self.visit_expr(obj); self.write(&format!(".{}(", method)); @@ -184,6 +190,7 @@ impl<'a> Generator<'a> { Expr::Filter(name, ref args) => self.visit_filter(name, args), Expr::BinOp(op, ref left, ref right) => self.visit_binop(op, left, right), + Expr::Group(ref inner) => self.visit_group(inner), Expr::Call(ref obj, method, ref args) => self.visit_call(obj, method, args), } diff --git a/askama/src/parser.rs b/askama/src/parser.rs index cad6468..b955f0a 100644 --- a/askama/src/parser.rs +++ b/askama/src/parser.rs @@ -9,6 +9,7 @@ pub enum Expr<'a> { Attr(Box>, &'a str), Filter(&'a str, Vec>), BinOp(&'a str, Box>, Box>), + Group(Box>), Call(Box>, &'a str, Vec>), } @@ -127,10 +128,16 @@ named!(arguments>>, opt!( ) )); +named!(expr_group, map!( + delimited!(char!('('), expr_any, char!(')')), + |s| Expr::Group(Box::new(s)) +)); + named!(expr_single, alt!( expr_num_lit | expr_str_lit | - expr_var + expr_var | + expr_group )); named!(expr_attr, alt!( -- cgit