aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--askama/src/generator.rs5
-rw-r--r--askama/src/parser.rs6
-rw-r--r--testing/templates/operators.html2
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 -%}