diff --git a/src/html.rs b/src/html.rs index 96625ea..f4a1d7c 100644 --- a/src/html.rs +++ b/src/html.rs @@ -48,8 +48,24 @@ enum Raw { Other, } -struct Writer { - events: std::iter::Peekable, +struct FilteredEvents { + events: I, +} + +impl<'s, I: Iterator>> Iterator for FilteredEvents { + type Item = Event<'s>; + + fn next(&mut self) -> Option { + let mut ev = self.events.next(); + while matches!(ev, Some(Event::Atom(Atom::Blankline | Atom::Escape))) { + ev = self.events.next(); + } + ev + } +} + +struct Writer<'s, I: Iterator>, W> { + events: std::iter::Peekable>, out: W, raw: Raw, text_only: bool, @@ -58,10 +74,10 @@ struct Writer { footnote_backlink_written: bool, } -impl<'s, I: Iterator>, W: std::fmt::Write> Writer { +impl<'s, I: Iterator>, W: std::fmt::Write> Writer<'s, I, W> { fn new(events: I, out: W) -> Self { Self { - events: events.peekable(), + events: FilteredEvents { events }.peekable(), out, raw: Raw::None, text_only: false, @@ -324,7 +340,7 @@ impl<'s, I: Iterator>, W: std::fmt::Write> Writer { Atom::NonBreakingSpace => self.out.write_str(" ")?, Atom::Hardbreak => self.out.write_str("
\n")?, Atom::Softbreak => self.out.write_char('\n')?, - Atom::Blankline | Atom::Escape => {} + Atom::Escape | Atom::Blankline => unreachable!("filtered out"), }, } }