aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--askama_shared/src/parser.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/askama_shared/src/parser.rs b/askama_shared/src/parser.rs
index ec4dcbd..6ea5ffd 100644
--- a/askama_shared/src/parser.rs
+++ b/askama_shared/src/parser.rs
@@ -367,6 +367,16 @@ named!(block_if<Node>, do_parse!(
})
));
+named!(match_else_block<When>, do_parse!(
+ tag_s!("{%") >>
+ pws: opt!(tag_s!("-")) >>
+ ws!(tag_s!("else")) >>
+ nws: opt!(tag_s!("-")) >>
+ tag_s!("%}") >>
+ block: parse_template >>
+ (WS(pws.is_some(), nws.is_some()), "_", vec![], block)
+));
+
named!(when_block<When>, do_parse!(
tag_s!("{%") >>
pws: opt!(tag_s!("-")) >>
@@ -387,11 +397,16 @@ named!(block_match<Node>, do_parse!(
tag_s!("%}") >>
inter: take_content >>
arms: many1!(when_block) >>
+ else_arm: opt!(match_else_block) >>
ws!(tag_s!("{%")) >>
pws2: opt!(tag_s!("-")) >>
ws!(tag_s!("endmatch")) >>
nws2: opt!(tag_s!("-")) >>
({
+ let mut arms = arms;
+ if let Some(arm) = else_arm {
+ arms.push(arm);
+ }
let inter = match inter {
Node::Lit(lws, val, rws) => {
assert!(val.is_empty(),