aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--askama/src/parser.rs20
-rw-r--r--testing/templates/elif.html1
-rw-r--r--testing/templates/else-if.html1
-rw-r--r--testing/tests/simple.rs8
4 files changed, 12 insertions, 18 deletions
diff --git a/askama/src/parser.rs b/askama/src/parser.rs
index 89fccff..96f123c 100644
--- a/askama/src/parser.rs
+++ b/askama/src/parser.rs
@@ -62,20 +62,18 @@ named!(expr_node<Node>, map!(
delimited!(tag_s!("{{"), ws!(expr_filtered), tag_s!("}}")),
Node::Expr));
-named!(cond_elif<(Option<Expr>, Nodes)>, do_parse!(
- tag_s!("{%") >>
- ws!(tag_s!("elif")) >>
+named!(cond_if<Expr>, do_parse!(
+ ws!(tag_s!("if")) >>
cond: ws!(expr_filtered) >>
- tag_s!("%}") >>
- block: parse_template >>
- (Some(cond), block)));
+ (cond)));
-named!(cond_else<Nodes>, do_parse!(
+named!(cond_block<(Option<Expr>, Nodes)>, do_parse!(
tag_s!("{%") >>
ws!(tag_s!("else")) >>
+ cond: opt!(cond_if) >>
tag_s!("%}") >>
block: parse_template >>
- (block)));
+ (cond, block)));
named!(block_if<Node>, do_parse!(
tag_s!("{%") >>
@@ -83,8 +81,7 @@ named!(block_if<Node>, do_parse!(
cond: ws!(expr_filtered) >>
tag_s!("%}") >>
block: parse_template >>
- elifs: many0!(cond_elif) >>
- rest: opt!(cond_else) >>
+ elifs: many0!(cond_block) >>
tag_s!("{%") >>
ws!(tag_s!("endif")) >>
tag_s!("%}") >>
@@ -92,9 +89,6 @@ named!(block_if<Node>, do_parse!(
let mut res = Vec::new();
res.push((Some(cond), block));
res.extend(elifs);
- if let Some(else_block) = rest {
- res.push((None, else_block));
- }
Node::Cond(res)
})));
diff --git a/testing/templates/elif.html b/testing/templates/elif.html
deleted file mode 100644
index ad0cbae..0000000
--- a/testing/templates/elif.html
+++ /dev/null
@@ -1 +0,0 @@
-{% if cond %}true{% elif check %}checked{% else %}false{% endif %}
diff --git a/testing/templates/else-if.html b/testing/templates/else-if.html
new file mode 100644
index 0000000..469e08e
--- /dev/null
+++ b/testing/templates/else-if.html
@@ -0,0 +1 @@
+{% if cond %}true{% else if check %}checked{% else %}false{% endif %}
diff --git a/testing/tests/simple.rs b/testing/tests/simple.rs
index 61f5fa4..697dbd2 100644
--- a/testing/tests/simple.rs
+++ b/testing/tests/simple.rs
@@ -55,14 +55,14 @@ fn test_else() {
#[derive(Template)]
-#[template(path = "elif.html")]
-struct ElIfTemplate {
+#[template(path = "else-if.html")]
+struct ElseIfTemplate {
cond: bool,
check: bool,
}
#[test]
-fn test_elif() {
- let s = ElIfTemplate { cond: false, check: true };
+fn test_else_if() {
+ let s = ElseIfTemplate { cond: false, check: true };
assert_eq!(s.render(), "checked\n");
}