about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustdoc/html/format.rs6
-rw-r--r--src/librustdoc/html/layout.rs7
-rw-r--r--src/librustdoc/html/render.rs10
-rw-r--r--src/librustdoc/html/sources.rs3
4 files changed, 15 insertions, 11 deletions
diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs
index f3c40c8568b..80f34fb17d2 100644
--- a/src/librustdoc/html/format.rs
+++ b/src/librustdoc/html/format.rs
@@ -99,7 +99,11 @@ impl Buffer {
         self.into_inner()
     }
 
-    crate fn display<T: fmt::Display>(&mut self, t: T) {
+    crate fn with_formatter<T: FnOnce(&mut fmt::Formatter<'_>) -> fmt::Result>(&mut self, t: T) {
+        self.from_display(display_fn(move |f| (t)(f)));
+    }
+
+    crate fn from_display<T: std::fmt::Display>(&mut self, t: T) {
         if self.for_html {
             write!(self, "{}", t);
         } else {
diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
index 1202f411f91..56074f4ab11 100644
--- a/src/librustdoc/html/layout.rs
+++ b/src/librustdoc/html/layout.rs
@@ -1,4 +1,3 @@
-use std::fmt;
 use std::path::PathBuf;
 
 use crate::externalfiles::ExternalHtml;
@@ -31,11 +30,11 @@ pub struct Page<'a> {
     pub static_extra_scripts: &'a [&'a str],
 }
 
-pub fn render<T: fmt::Display, S: Print>(
+pub fn render<T: Print, S: Print>(
     layout: &Layout,
     page: &Page<'_>,
     sidebar: S,
-    t: &T,
+    t: T,
     themes: &[PathBuf],
 ) -> String {
     let static_root_path = page.static_root_path.unwrap_or(page.root_path);
@@ -175,7 +174,7 @@ pub fn render<T: fmt::Display, S: Print>(
     } else {
         String::new()
     },
-    content   = *t,
+    content   = Buffer::html().to_display(t),
     static_root_path = static_root_path,
     root_path = page.root_path,
     css_class = page.css_class,
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 1d1e54fc9ea..4514a540f54 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -65,7 +65,7 @@ use crate::docfs::{DocFS, ErrorStorage, PathError};
 use crate::doctree;
 use crate::fold::DocFolder;
 use crate::html::escape::Escape;
-use crate::html::format::{Print, Buffer, AsyncSpace, ConstnessSpace};
+use crate::html::format::{Buffer, AsyncSpace, ConstnessSpace};
 use crate::html::format::{GenericBounds, WhereClause, href, AbiSpace, DefaultSpace};
 use crate::html::format::{VisSpace, Function, UnsafetySpace, MutableSpace};
 use crate::html::format::fmt_impl_for_trait_page;
@@ -1172,7 +1172,7 @@ themePicker.onblur = handleThemeButtonsBlur;
                                     })
                                     .collect::<String>());
             let v = layout::render(&cx.shared.layout,
-                           &page, "", &content,
+                           &page, "", content,
                            &cx.shared.themes);
             cx.shared.fs.write(&dst, v.as_bytes())?;
         }
@@ -1919,7 +1919,7 @@ impl Context {
             String::new()
         };
         let v = layout::render(&self.shared.layout,
-                       &page, sidebar, &all,
+                       &page, sidebar, |buf: &mut Buffer| buf.from_display(all),
                        &self.shared.themes);
         self.shared.fs.write(&final_file, v.as_bytes())?;
 
@@ -1935,7 +1935,7 @@ impl Context {
         themes.push(PathBuf::from("settings.css"));
         let v = layout::render(
             &self.shared.layout,
-            &page, sidebar, &settings,
+            &page, sidebar, |buf: &mut Buffer| buf.from_display(settings),
             &themes);
         self.shared.fs.write(&settings_file, v.as_bytes())?;
 
@@ -1993,7 +1993,7 @@ impl Context {
         if !self.render_redirect_pages {
             layout::render(&self.shared.layout, &page,
                            |buf: &mut _| print_sidebar(self, it, buf),
-                           &Item{ cx: self, item: it },
+                           |buf: &mut Buffer| buf.from_display(Item { cx: self, item: it }),
                            &self.shared.themes)
         } else {
             let mut url = self.root_path();
diff --git a/src/librustdoc/html/sources.rs b/src/librustdoc/html/sources.rs
index 6dccfdadf0f..e94ae1d968e 100644
--- a/src/librustdoc/html/sources.rs
+++ b/src/librustdoc/html/sources.rs
@@ -4,6 +4,7 @@ use crate::fold::DocFolder;
 use crate::html::layout;
 use crate::html::render::{Error, SharedContext, BASIC_KEYWORDS};
 use crate::html::highlight;
+use crate::html::format::Buffer;
 use std::ffi::OsStr;
 use std::fs;
 use std::path::{Component, Path, PathBuf};
@@ -120,7 +121,7 @@ impl<'a> SourceCollector<'a> {
             static_extra_scripts: &[&format!("source-script{}", self.scx.resource_suffix)],
         };
         let v = layout::render(&self.scx.layout,
-                       &page, "", &Source(contents),
+                       &page, "", |buf: &mut Buffer| buf.from_display(Source(&contents)),
                        &self.scx.themes);
         self.scx.fs.write(&cur, v.as_bytes())?;
         self.scx.local_sources.insert(p.clone(), href);