diff options
Diffstat (limited to '')
-rw-r--r-- | askama/src/generator.rs | 5 | ||||
-rw-r--r-- | askama/src/parser.rs | 6 | ||||
-rw-r--r-- | testing/templates/operators.html | 2 |
3 files changed, 12 insertions, 1 deletions
diff --git a/askama/src/generator.rs b/askama/src/generator.rs index e768219..a8d62af 100644 --- a/askama/src/generator.rs +++ b/askama/src/generator.rs @@ -103,6 +103,10 @@ impl<'a> Generator<'a> { self.prepare_ws(ws); } + fn visit_num_lit(&mut self, s: &str) { + self.write(s); + } + fn visit_str_lit(&mut self, s: &str) { self.write(&format!("\"{}\"", s)); } @@ -129,6 +133,7 @@ impl<'a> Generator<'a> { fn visit_expr(&mut self, expr: &Expr) { match *expr { + Expr::NumLit(s) => self.visit_num_lit(s), Expr::StrLit(s) => self.visit_str_lit(s), Expr::Var(s) => self.visit_var(s), Expr::Filter(name, ref val) => self.visit_filter(name, val), diff --git a/askama/src/parser.rs b/askama/src/parser.rs index 6d0e58f..1d34611 100644 --- a/askama/src/parser.rs +++ b/askama/src/parser.rs @@ -3,6 +3,7 @@ use std::str; #[derive(Debug)] pub enum Expr<'a> { + NumLit(&'a str), StrLit(&'a str), Var(&'a str), Filter(&'a str, Box<Expr<'a>>), @@ -72,6 +73,10 @@ fn take_content(i: &[u8]) -> IResult<&[u8], Node> { IResult::Done(&i[..0], split_ws_parts(&i[..])) } +named!(expr_num_lit<Expr>, map!(nom::digit, + |s| Expr::NumLit(str::from_utf8(s).unwrap()) +)); + named!(expr_str_lit<Expr>, map!( delimited!(char!('"'), is_not!("\""), char!('"')), |s| Expr::StrLit(str::from_utf8(s).unwrap()) @@ -86,6 +91,7 @@ named!(target_single<Target>, map!(alphanumeric, )); named!(expr_single<Expr>, alt!( + expr_num_lit | expr_str_lit | expr_var )); diff --git a/testing/templates/operators.html b/testing/templates/operators.html index 1488b9a..4b093c5 100644 --- a/testing/templates/operators.html +++ b/testing/templates/operators.html @@ -28,6 +28,6 @@ {% if a == b && a + b == c -%} and {%- endif -%} -{% if a == c || a == b -%} +{% if a == c || a == 1 -%} or {%- endif -%} |