html: render tight lists
This commit is contained in:
parent
69d51a5032
commit
a9ce70aae3
1 changed files with 12 additions and 1 deletions
13
src/html.rs
13
src/html.rs
|
@ -71,6 +71,7 @@ struct Writer<'s, I: Iterator<Item = Event<'s>>, W> {
|
||||||
out: W,
|
out: W,
|
||||||
raw: Raw,
|
raw: Raw,
|
||||||
text_only: bool,
|
text_only: bool,
|
||||||
|
list_tightness: Vec<bool>,
|
||||||
encountered_footnote: bool,
|
encountered_footnote: bool,
|
||||||
footnote_number: Option<std::num::NonZeroUsize>,
|
footnote_number: Option<std::num::NonZeroUsize>,
|
||||||
footnote_backlink_written: bool,
|
footnote_backlink_written: bool,
|
||||||
|
@ -83,6 +84,7 @@ impl<'s, I: Iterator<Item = Event<'s>>, W: std::fmt::Write> Writer<'s, I, W> {
|
||||||
out,
|
out,
|
||||||
raw: Raw::None,
|
raw: Raw::None,
|
||||||
text_only: false,
|
text_only: false,
|
||||||
|
list_tightness: Vec::new(),
|
||||||
encountered_footnote: false,
|
encountered_footnote: false,
|
||||||
footnote_number: None,
|
footnote_number: None,
|
||||||
footnote_backlink_written: false,
|
footnote_backlink_written: false,
|
||||||
|
@ -147,7 +149,12 @@ impl<'s, I: Iterator<Item = Event<'s>>, W: std::fmt::Write> Writer<'s, I, W> {
|
||||||
Container::Table => self.out.write_str("<table")?,
|
Container::Table => self.out.write_str("<table")?,
|
||||||
Container::TableRow => self.out.write_str("<tr")?,
|
Container::TableRow => self.out.write_str("<tr")?,
|
||||||
Container::Div { .. } => self.out.write_str("<div")?,
|
Container::Div { .. } => self.out.write_str("<div")?,
|
||||||
Container::Paragraph => self.out.write_str("<p")?,
|
Container::Paragraph => {
|
||||||
|
if matches!(self.list_tightness.last(), Some(true)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
self.out.write_str("<p")?;
|
||||||
|
}
|
||||||
Container::Heading { level } => write!(self.out, "<h{}", level)?,
|
Container::Heading { level } => write!(self.out, "<h{}", level)?,
|
||||||
Container::TableCell => self.out.write_str("<td")?,
|
Container::TableCell => self.out.write_str("<td")?,
|
||||||
Container::DescriptionTerm => self.out.write_str("<dt")?,
|
Container::DescriptionTerm => self.out.write_str("<dt")?,
|
||||||
|
@ -273,6 +280,7 @@ impl<'s, I: Iterator<Item = Event<'s>>, W: std::fmt::Write> Writer<'s, I, W> {
|
||||||
kind: ListKind::Unordered | ListKind::Task,
|
kind: ListKind::Unordered | ListKind::Task,
|
||||||
..
|
..
|
||||||
} => {
|
} => {
|
||||||
|
self.list_tightness.pop();
|
||||||
self.out.write_str("</ul>")?;
|
self.out.write_str("</ul>")?;
|
||||||
}
|
}
|
||||||
Container::List {
|
Container::List {
|
||||||
|
@ -298,6 +306,9 @@ impl<'s, I: Iterator<Item = Event<'s>>, W: std::fmt::Write> Writer<'s, I, W> {
|
||||||
Container::TableRow => self.out.write_str("</tr>")?,
|
Container::TableRow => self.out.write_str("</tr>")?,
|
||||||
Container::Div { .. } => self.out.write_str("</div>")?,
|
Container::Div { .. } => self.out.write_str("</div>")?,
|
||||||
Container::Paragraph => {
|
Container::Paragraph => {
|
||||||
|
if matches!(self.list_tightness.last(), Some(true)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if let Some(num) = self.footnote_number {
|
if let Some(num) = self.footnote_number {
|
||||||
if matches!(
|
if matches!(
|
||||||
self.events.peek(),
|
self.events.peek(),
|
||||||
|
|
Loading…
Reference in a new issue