From bad49d49c0b754b6a8cede71e93376507978acc5 Mon Sep 17 00:00:00 2001 From: msifeed <msifeed@derpy.ru> Date: Mon, 18 Jul 2016 13:07:58 +0300 Subject: [PATCH] Add namespace support for element and attribute names --- maud_macros/src/parse.rs | 10 ++++++++++ maud_macros/tests/tests.rs | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/maud_macros/src/parse.rs b/maud_macros/src/parse.rs index 4027c5e..d67d281 100644 --- a/maud_macros/src/parse.rs +++ b/maud_macros/src/parse.rs @@ -49,6 +49,9 @@ macro_rules! question { macro_rules! semi { () => (TokenTree::Token(_, Token::Semi)) } +macro_rules! colon { + () => (TokenTree::Token(_, Token::Colon)) +} macro_rules! comma { () => (TokenTree::Token(_, Token::Comma)) } @@ -548,6 +551,13 @@ impl<'cx, 'a, 'i> Parser<'cx, 'a, 'i> { /// Parses a HTML element or attribute name. fn name(&mut self) -> PResult<String> { let mut s = match *self.input { + [ident!(_, namespace), colon!(), ident!(_, name), ..] => { + self.shift(3); + let mut r = String::from(&namespace.name.as_str() as &str); + r.push(':'); + r.push_str(&name.name.as_str() as &str); + r + }, [ident!(_, name), ..] => { self.shift(1); String::from(&name.name.as_str() as &str) diff --git a/maud_macros/tests/tests.rs b/maud_macros/tests/tests.rs index f5f202c..dc5e9a5 100644 --- a/maud_macros/tests/tests.rs +++ b/maud_macros/tests/tests.rs @@ -87,6 +87,13 @@ mod elements { html!(s, div readonly? input type="checkbox" checked? /).unwrap(); assert_eq!(s, r#"<div readonly><input type="checkbox" checked></div>"#); } + + #[test] + fn namespaces() { + let mut s = String::new(); + html!(s, pon:controls a on:click="yay()" "Yay!").unwrap(); + assert_eq!(s, r#"<pon:controls><a on:click="yay()">Yay!</a></pon:controls>"#); + } } mod splices {