Rename $if and $for to #if and #for

`#if` and `#for` aren't splices. They are a different concept, so should
have different syntax as well.
This commit is contained in:
Chris Wong 2015-09-12 13:53:14 +12:00
parent 59360c719c
commit 37835b3b24
2 changed files with 17 additions and 14 deletions
maud_macros

View file

@ -13,6 +13,9 @@ use super::render::{Escape, Renderer};
macro_rules! dollar {
() => (TtToken(_, token::Dollar))
}
macro_rules! pound {
() => (TtToken(_, token::Pound))
}
macro_rules! dot {
() => (TtToken(_, token::Dot))
}
@ -125,12 +128,12 @@ impl<'cx, 'i> Parser<'cx, 'i> {
self.literal(tt, false);
},
// If
[dollar!(), ident!(sp, name), ..] if name.name == "if" => {
[pound!(), ident!(sp, name), ..] if name.name == "if" => {
self.shift(2);
self.if_expr(sp);
},
// For
[dollar!(), ident!(sp, name), ..] if name.name == "for" => {
[pound!(), ident!(sp, name), ..] if name.name == "for" => {
self.shift(2);
self.for_expr(sp);
},
@ -201,11 +204,11 @@ impl<'cx, 'i> Parser<'cx, 'i> {
self.shift(1);
if_cond.push(tt.clone());
},
[] => self.render.cx.span_fatal(sp, "expected body for this $if"),
[] => self.render.cx.span_fatal(sp, "expected body for this #if"),
}}
// Parse the (optional) else
let else_body = match self.input {
[dollar!(), ident!(else_), ..] if else_.name == "else" => {
[pound!(), ident!(else_), ..] if else_.name == "else" => {
self.shift(2);
match self.input {
[ident!(sp, if_), ..] if if_.name == "if" => {
@ -225,7 +228,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
self.shift(1);
Some(self.block(sp, &d.tts))
},
_ => self.render.cx.span_fatal(sp, "expected body for this $else"),
_ => self.render.cx.span_fatal(sp, "expected body for this #else"),
}
},
_ => None,
@ -244,7 +247,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
self.shift(1);
pattern.push(tt.clone());
},
_ => self.render.cx.span_fatal(sp, "invalid $for"),
_ => self.render.cx.span_fatal(sp, "invalid #for"),
}}
let pattern = self.with_rust_parser(pattern, RustParser::parse_pat);
let mut iterable = vec![];
@ -259,7 +262,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
self.shift(1);
iterable.push(tt.clone());
},
_ => self.render.cx.span_fatal(sp, "invalid $for"),
_ => self.render.cx.span_fatal(sp, "invalid #for"),
}}
let iterable = self.with_rust_parser(iterable, RustParser::parse_expr);
self.render.emit_for(pattern, iterable, body);

View file

@ -202,13 +202,13 @@ mod control {
for (number, &name) in (1..4).zip(["one", "two", "three"].iter()) {
let mut s = String::new();
html!(s, {
$if number == 1 {
#if number == 1 {
"one"
} $else if number == 2 {
} #else if number == 2 {
"two"
} $else if number == 3 {
} #else if number == 3 {
"three"
} $else {
} #else {
"oh noes"
}
}).unwrap();
@ -221,9 +221,9 @@ mod control {
for &(input, output) in [(Some("yay"), "yay"), (None, "oh noes")].iter() {
let mut s = String::new();
html!(s, {
$if let Some(value) = input {
#if let Some(value) = input {
$value
} $else {
} #else {
"oh noes"
}
}).unwrap();
@ -236,7 +236,7 @@ mod control {
let ponies = ["Apple Bloom", "Scootaloo", "Sweetie Belle"];
let mut s = String::new();
html!(s, {
ul $for pony in &ponies {
ul #for pony in &ponies {
li $pony
}
}).unwrap();