From bd6eeace3a747b43560af68678bce1b05e26de75 Mon Sep 17 00:00:00 2001 From: "Hamid R. K. Pisghadam" Date: Sat, 25 May 2024 10:21:54 +0330 Subject: [PATCH] Add support for * prefix in declaration names --- src/rules_and_declarations.rs | 11 ++++++++++- src/serializer.rs | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/rules_and_declarations.rs b/src/rules_and_declarations.rs index 9240f6de..eccc1e43 100644 --- a/src/rules_and_declarations.rs +++ b/src/rules_and_declarations.rs @@ -250,6 +250,7 @@ where type Item = Result, &'i str)>; fn next(&mut self) -> Option { + let mut parsing_lagacy_star_hack = false; loop { self.input.skip_whitespace(); let start = self.input.state(); @@ -266,7 +267,7 @@ where // keep parsing as a qualified rule if the token is not an ident, so we implement // that in a slightly more straight-forward way Token::Ident(ref name) if self.parser.parse_declarations() => { - let name = name.clone(); + let mut name = name.clone(); let parse_qualified = self.parser.parse_qualified(); let result = { let error_behavior = if parse_qualified { @@ -281,6 +282,10 @@ where error_behavior, |input| { input.expect_colon()?; + if parsing_lagacy_star_hack { + name = format!("*{name}").into(); + parsing_lagacy_star_hack = false; + } parser.parse_value(name, input) }, ) @@ -302,6 +307,10 @@ where return Some(result.map_err(|e| (e, self.input.slice_from(start.position())))); } token => { + if *token == Token::Delim('*') { + parsing_lagacy_star_hack = true; + continue; + } let result = if self.parser.parse_qualified() { self.input.reset(&start); let delimiters = if self.parser.parse_declarations() { diff --git a/src/serializer.rs b/src/serializer.rs index 3c6e31cb..dd1a9407 100644 --- a/src/serializer.rs +++ b/src/serializer.rs @@ -211,6 +211,10 @@ where hex_escape(digit, dest)?; value = &value[1..]; } + if b'*' == value.as_bytes()[0] { + dest.write_str("*")?; + value = &value[1..]; + } serialize_name(value, dest) } }