amend! inline: hide empty attributes from output

inline: hide empty attrs, whitespace attrs from output

in order to allow comments
This commit is contained in:
Noah Hellman 2023-01-19 22:31:13 +01:00
parent 42ca801712
commit d3b2ee14cb

View file

@ -243,12 +243,7 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
} }
fn parse_attributes(&mut self, first: &lex::Token) -> Option<Event> { fn parse_attributes(&mut self, first: &lex::Token) -> Option<Event> {
if first.kind == lex::Kind::Open(Delimiter::Brace) if first.kind == lex::Kind::Open(Delimiter::Brace) {
&& self
.events
.back()
.map_or(false, |e| e.kind == EventKind::Str)
{
let mut ahead = self.lexer.chars(); let mut ahead = self.lexer.chars();
let (mut attr_len, mut has_attr) = attr::valid(std::iter::once('{').chain(&mut ahead)); let (mut attr_len, mut has_attr) = attr::valid(std::iter::once('{').chain(&mut ahead));
attr_len -= 1; // rm { attr_len -= 1; // rm {
@ -262,7 +257,13 @@ impl<I: Iterator<Item = char> + Clone> Parser<I> {
has_attr |= non_empty; has_attr |= non_empty;
} }
Some(if has_attr { let set_attr = has_attr
&& self
.events
.back()
.map_or(false, |e| e.kind == EventKind::Str);
Some(if set_attr {
let i = self let i = self
.events .events
.iter() .iter()
@ -1080,7 +1081,7 @@ mod test {
(Enter(Emphasis), "_"), (Enter(Emphasis), "_"),
(Str, "abc def"), (Str, "abc def"),
(Exit(Emphasis), "_"), (Exit(Emphasis), "_"),
(Str, " {.d}"), (Str, " "),
); );
} }
@ -1104,6 +1105,13 @@ mod test {
); );
} }
#[test]
fn attr_whitespace() {
test_parse!("word {%comment%}", (Str, "word "));
test_parse!("word {%comment%} word", (Str, "word "), (Str, " word"));
test_parse!("word {a=b}", (Str, "word "));
}
#[test] #[test]
fn attr_empty() { fn attr_empty() {
test_parse!("word{}", (Str, "word")); test_parse!("word{}", (Str, "word"));