about summary refs log tree commit diff
path: root/src/librustdoc/html
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2024-10-28 17:39:17 +0100
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2024-12-05 22:50:21 +0100
commit6e0dabd9e209a0fe902313b367df365d6476b875 (patch)
tree31e82822a6c080df1bcd060ae136220649fdec56 /src/librustdoc/html
parentabcd094c5174cf25f3de1879c57b4c69c7fe4a94 (diff)
downloadrust-6e0dabd9e209a0fe902313b367df365d6476b875.tar.gz
rust-6e0dabd9e209a0fe902313b367df365d6476b875.zip
Turn `markdown_split_summary_and_content` into a method of `Markdown`
Diffstat (limited to 'src/librustdoc/html')
-rw-r--r--src/librustdoc/html/markdown.rs95
-rw-r--r--src/librustdoc/html/render/mod.rs6
2 files changed, 52 insertions, 49 deletions
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index 9982130c6d3..90c49270566 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -1345,6 +1345,55 @@ impl<'a> Markdown<'a> {
             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<'_> {
@@ -1418,52 +1467,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;
diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index b841f01813a..e013829e5e0 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -74,7 +74,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};
@@ -1941,7 +1940,7 @@ 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.borrow_mut(),
@@ -1949,7 +1948,8 @@ fn render_impl(
                     edition: cx.shared.edition(),
                     playground: &cx.shared.playground,
                     heading_offset: HeadingOffset::H4,
-                })
+                }
+                .split_summary_and_content()
             })
             .unwrap_or((None, None));
         render_impl_summary(