From c804e666ecae6431ccd3f11b4ed788844cf64094 Mon Sep 17 00:00:00 2001 From: Noah Hellman Date: Tue, 16 May 2023 16:47:19 +0200 Subject: [PATCH] inline: do not parse attrs in verbatim fixes #41 --- src/inline.rs | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/inline.rs b/src/inline.rs index d471ee1..bf038ea 100644 --- a/src/inline.rs +++ b/src/inline.rs @@ -279,8 +279,8 @@ impl<'s> Parser<'s> { self.input.reset_span(); if let Some(first) = self.input.eat() { - self.parse_attributes(&first) - .or_else(|| self.parse_verbatim(&first)) + self.parse_verbatim(&first) + .or_else(|| self.parse_attributes(&first)) .or_else(|| self.parse_autolink(&first)) .or_else(|| self.parse_symbol(&first)) .or_else(|| self.parse_footnote_reference(&first)) @@ -1278,6 +1278,22 @@ mod test { ); } + #[test] + fn verbatim_attr_inside() { + test_parse!( + "`a{i=0}`", + (Enter(Verbatim), "`"), + (Str, "a{i=0}"), + (Exit(Verbatim), "`"), + ); + test_parse!( + r"$`\sum_{i=0}^n 2^i`", + (Enter(InlineMath), "$`"), + (Str, r"\sum_{i=0}^n 2^i"), + (Exit(InlineMath), "`"), + ); + } + #[test] fn verbatim_whitespace() { test_parse!( @@ -1765,6 +1781,23 @@ mod test { ); } + #[test] + fn attr_quoted() { + test_parse!( + r#"word{a="`verb`"}"#, + ( + Attributes { + container: false, + attrs: 0, + }, + r#"{a="`verb`"}"#, + ), + (Enter(Span), ""), + (Str, "word"), + (Exit(Span), r#"{a="`verb`"}"#), + ); + } + #[test] fn attr_whitespace() { test_parse!("word {%comment%}", (Str, "word "));