From 89390cf5f69a44763773159d9a8c8c9772185d0b Mon Sep 17 00:00:00 2001 From: Noah Hellman Date: Thu, 8 Dec 2022 18:25:24 +0100 Subject: [PATCH] handle html escapes in html mod --- src/html.rs | 24 +++++++++++++++++++++++- src/inline.rs | 2 ++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/html.rs b/src/html.rs index cd8580e..8ea8b0d 100644 --- a/src/html.rs +++ b/src/html.rs @@ -145,7 +145,29 @@ impl<'s, I: Iterator>, W: std::fmt::Write> Writer { Container::DoubleQuoted => self.out.write_str("”")?, } } - Event::Str(s) => self.out.write_str(s)?, + Event::Str(mut s) => { + let mut ent = ""; + while let Some(i) = s.chars().position(|c| { + if let Some(s) = match c { + '<' => Some("<"), + '>' => Some(">"), + '&' => Some("&"), + '"' => Some("""), + _ => None, + } { + ent = s; + true + } else { + false + } + }) { + self.out.write_str(&s[..i])?; + self.out.write_str(ent)?; + s = &s[i + 1..]; + } + self.out.write_str(s)?; + } + Event::Atom(a) => match a { Atom::Ellipsis => self.out.write_str("…")?, Atom::EnDash => self.out.write_str("–")?, diff --git a/src/inline.rs b/src/inline.rs index 5fd5ec9..1ea052f 100644 --- a/src/inline.rs +++ b/src/inline.rs @@ -125,6 +125,8 @@ impl<'s> Parser<'s> { fn parse_atom(&mut self, first: &lex::Token) -> Option { let atom = match first.kind { + lex::Kind::Newline => Softbreak, + lex::Kind::Hardbreak => Hardbreak, lex::Kind::Escape => Escape, lex::Kind::Nbsp => Nbsp, lex::Kind::Seq(lex::Sequence::Period) if first.len == 3 => Ellipsis,