Add syntax for empty attributes

This commit is contained in:
Chris Wong 2015-01-13 16:46:37 +13:00
parent e0f11ac9e3
commit e047b3fbb3
2 changed files with 23 additions and 7 deletions
maud_macros/src

View file

@ -14,6 +14,9 @@ macro_rules! dollar {
macro_rules! eq { macro_rules! eq {
() => (TtToken(_, token::Eq)) () => (TtToken(_, token::Eq))
} }
macro_rules! not {
() => (TtToken(_, token::Not))
}
macro_rules! semi { macro_rules! semi {
() => (TtToken(_, token::Semi)) () => (TtToken(_, token::Semi))
} }
@ -154,8 +157,15 @@ impl<'cx, 's, 'i, 'r, 'o> Parser<'cx, 's, 'i, 'r, 'o> {
fn attrs(&mut self) { fn attrs(&mut self) {
while let [ident!(name), eq!(), ..] = self.input { while let [ident!(name), eq!(), ..] = self.input {
self.shift(2); self.shift(2);
if let [not!(), ..] = self.input {
// Empty attribute
self.shift(1);
self.render.attribute_empty(name.as_str());
} else {
// Non-empty attribute
self.render.attribute_start(name.as_str()); self.render.attribute_start(name.as_str());
{ {
// Parse a value under an attribute context
let old_in_attr = self.in_attr; let old_in_attr = self.in_attr;
self.in_attr = true; self.in_attr = true;
self.markup(); self.markup();
@ -164,6 +174,7 @@ impl<'cx, 's, 'i, 'r, 'o> Parser<'cx, 's, 'i, 'r, 'o> {
self.render.attribute_end(); self.render.attribute_end();
} }
} }
}
fn block(&mut self, tts: &[TokenTree]) { fn block(&mut self, tts: &[TokenTree]) {
Parser { Parser {

View file

@ -77,6 +77,11 @@ impl<'cx, 's, 'o> Renderer<'cx, 's, 'o> {
self.write("=\""); self.write("=\"");
} }
pub fn attribute_empty(&mut self, name: &str) {
self.write(" ");
self.write(name);
}
pub fn attribute_end(&mut self) { pub fn attribute_end(&mut self) {
self.write("\""); self.write("\"");
} }