Skip to content

Commit

Permalink
Turn markdown_split_summary_and_content into a method of Markdown
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Oct 28, 2024
1 parent 890fc0d commit 391c707
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 49 deletions.
95 changes: 49 additions & 46 deletions src/librustdoc/html/markdown.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1345,6 +1345,55 @@ impl<'a> Markdown<'a> {
let p = TableWrapper::new(p);
CodeBlocks::new(p, codes, edition, playground)
}

/// Convert markdown to (summary, remaining) HTML.
///
/// - The summary is the first top-level Markdown element (usually a paragraph, but potentially
/// any block).
/// - The remaining docs contain everything after the summary.
pub(crate) fn split_summary_and_content(self) -> (Option<String>, Option<String>) {
if self.content.is_empty() {
return (None, None);
}
let mut p = self.into_iter();

let mut event_level = 0;
let mut summary_events = Vec::new();
let mut get_next_tag = false;

let mut end_of_summary = false;
while let Some(event) = p.next() {
match event {
Event::Start(_) => event_level += 1,
Event::End(kind) => {
event_level -= 1;
if event_level == 0 {
// We're back at the "top" so it means we're done with the summary.
end_of_summary = true;
// We surround tables with `<div>` HTML tags so this is a special case.
get_next_tag = kind == TagEnd::Table;
}
}
_ => {}
}
summary_events.push(event);
if end_of_summary {
if get_next_tag && let Some(event) = p.next() {
summary_events.push(event);
}
break;
}
}
let mut summary = String::new();
html::push_html(&mut summary, summary_events.into_iter());
if summary.is_empty() {
return (None, None);
}
let mut content = String::new();
html::push_html(&mut content, p);

if content.is_empty() { (Some(summary), None) } else { (Some(summary), Some(content)) }
}
}

impl MarkdownWithToc<'_> {
Expand Down Expand Up @@ -1416,52 +1465,6 @@ impl MarkdownItemInfo<'_> {
}
}

pub(crate) fn markdown_split_summary_and_content(
md: Markdown<'_>,
) -> (Option<String>, Option<String>) {
if md.content.is_empty() {
return (None, None);
}
let mut p = md.into_iter();

let mut event_level = 0;
let mut summary_events = Vec::new();
let mut get_next_tag = false;

let mut end_of_summary = false;
while let Some(event) = p.next() {
match event {
Event::Start(_) => event_level += 1,
Event::End(kind) => {
event_level -= 1;
if event_level == 0 {
// We're back at the "top" so it means we're done with the summary.
end_of_summary = true;
// We surround tables with `<div>` HTML tags so this is a special case.
get_next_tag = kind == TagEnd::Table;
}
}
_ => {}
}
summary_events.push(event);
if end_of_summary {
if get_next_tag && let Some(event) = p.next() {
summary_events.push(event);
}
break;
}
}
let mut summary = String::new();
html::push_html(&mut summary, summary_events.into_iter());
if summary.is_empty() {
return (None, None);
}
let mut content = String::new();
html::push_html(&mut content, p);

if content.is_empty() { (Some(summary), None) } else { (Some(summary), Some(content)) }
}

impl MarkdownSummaryLine<'_> {
pub(crate) fn into_string_with_has_more_content(self) -> (String, bool) {
let MarkdownSummaryLine(md, links) = self;
Expand Down
6 changes: 3 additions & 3 deletions src/librustdoc/html/render/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ use crate::html::format::{
};
use crate::html::markdown::{
HeadingOffset, IdMap, Markdown, MarkdownItemInfo, MarkdownSummaryLine,
markdown_split_summary_and_content,
};
use crate::html::static_files::SCRAPE_EXAMPLES_HELP_MD;
use crate::html::{highlight, sources};
Expand Down Expand Up @@ -1943,15 +1942,16 @@ fn render_impl(
.impl_item
.opt_doc_value()
.map(|dox| {
markdown_split_summary_and_content(Markdown {
Markdown {
content: &*dox,
links: &i.impl_item.links(cx),
ids: &mut cx.id_map,
error_codes: cx.shared.codes,
edition: cx.shared.edition(),
playground: &cx.shared.playground,
heading_offset: HeadingOffset::H4,
})
}
.split_summary_and_content()
})
.unwrap_or((None, None));
render_impl_summary(
Expand Down

0 comments on commit 391c707

Please sign in to comment.