From d2bf70da9a865257357c41875206ca454a9c0827 Mon Sep 17 00:00:00 2001 From: Chris Wong <lambda.fairy@gmail.com> Date: Sun, 7 Aug 2016 20:39:31 +1200 Subject: [PATCH] Allow names with multiple hyphens in a row Fixes #40 --- maud_macros/src/parse.rs | 19 +++++++++++++++---- maud_macros/tests/basic_syntax.rs | 7 +++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/maud_macros/src/parse.rs b/maud_macros/src/parse.rs index cc0e3c3..51ecdb5 100644 --- a/maud_macros/src/parse.rs +++ b/maud_macros/src/parse.rs @@ -557,10 +557,21 @@ impl<'cx, 'a, 'i> Parser<'cx, 'a, 'i> { }, _ => return Err(FatalError), }; - while let [minus!(), ident!(_, name), ..] = *self.input { - self.shift(2); - s.push('-'); - s.push_str(&name.name.as_str()); + let mut expect_ident = false; + loop { + expect_ident = match *self.input { + [minus!(), ..] => { + self.shift(1); + s.push('-'); + true + }, + [ident!(_, name), ..] if expect_ident => { + self.shift(1); + s.push_str(&name.name.as_str()); + false + }, + _ => break, + }; } Ok(s) } diff --git a/maud_macros/tests/basic_syntax.rs b/maud_macros/tests/basic_syntax.rs index 949b5d4..28c080c 100644 --- a/maud_macros/tests/basic_syntax.rs +++ b/maud_macros/tests/basic_syntax.rs @@ -130,6 +130,13 @@ fn classes_shorthand() { assert_eq!(s, r#"<p>Hi, <span class="name here">Lyra</span>!</p>"#); } +#[test] +fn hyphens_in_class_names() { + let mut s = String::new(); + html!(s, p.rocks-these.are--my--rocks "yes").unwrap(); + assert_eq!(s, r#"<p class="rocks-these are--my--rocks">yes</p>"#); +} + #[test] fn ids_shorthand() { let mut s = String::new();