".to_string(), src.to_string());
let mut out = Vec::new();
- doit(&sess,
- lexer::StringReader::new(&sess.span_diagnostic, fm),
- class,
- id,
- &mut out).unwrap();
+ write_header(class, id, &mut out).unwrap();
+ write_source(&sess,
+ lexer::StringReader::new(&sess.span_diagnostic, fm),
+ &mut out).unwrap();
+ write_footer(&mut out).unwrap();
+ String::from_utf8_lossy(&out[..]).into_owned()
+}
+
+/// Highlights `src`, returning the HTML output. Returns only the inner html to
+/// be inserted into an element. C.f., `render_with_highlighting` which includes
+/// an enclosing `` block.
+pub fn render_inner_with_highlighting(src: &str) -> String {
+ let sess = parse::ParseSess::new();
+ let fm = sess.codemap().new_filemap("".to_string(), src.to_string());
+
+ let mut out = Vec::new();
+ write_source(&sess,
+ lexer::StringReader::new(&sess.span_diagnostic, fm),
+ &mut out).unwrap();
String::from_utf8_lossy(&out[..]).into_owned()
}
@@ -43,17 +57,10 @@ pub fn highlight(src: &str, class: Option<&str>, id: Option<&str>) -> String {
/// it's used. All source code emission is done as slices from the source map,
/// not from the tokens themselves, in order to stay true to the original
/// source.
-fn doit(sess: &parse::ParseSess, mut lexer: lexer::StringReader,
- class: Option<&str>, id: Option<&str>,
- out: &mut Write) -> io::Result<()> {
- use syntax::parse::lexer::Reader;
-
- write!(out, " write!(out, "id='{}' ", id)?,
- None => {}
- }
- write!(out, "class='rust {}'>\n", class.unwrap_or(""))?;
+fn write_source(sess: &parse::ParseSess,
+ mut lexer: lexer::StringReader,
+ out: &mut Write)
+ -> io::Result<()> {
let mut is_attribute = false;
let mut is_macro = false;
let mut is_macro_nonterminal = false;
@@ -184,5 +191,21 @@ fn doit(sess: &parse::ParseSess, mut lexer: lexer::StringReader,
}
}
+ Ok(())
+}
+
+fn write_header(class: Option<&str>,
+ id: Option<&str>,
+ out: &mut Write)
+ -> io::Result<()> {
+ write!(out, " write!(out, "id='{}' ", id)?,
+ None => {}
+ }
+ write!(out, "class='rust {}'>\n", class.unwrap_or(""))
+}
+
+fn write_footer(out: &mut Write) -> io::Result<()> {
write!(out, "
\n")
}
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index e7304b69510..3baf22b38ef 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -262,9 +262,9 @@ pub fn render(w: &mut fmt::Formatter, s: &str, print_toc: bool) -> fmt::Result {
&Default::default());
s.push_str(&format!("{}", Escape(&test)));
});
- s.push_str(&highlight::highlight(&text,
- Some("rust-example-rendered"),
- None));
+ s.push_str(&highlight::render_with_highlighting(&text,
+ Some("rust-example-rendered"),
+ None));
let output = CString::new(s).unwrap();
hoedown_buffer_puts(ob, output.as_ptr());
})
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 0f436efd70b..84ccd4ac661 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -2661,16 +2661,16 @@ impl<'a> fmt::Display for Source<'a> {
write!(fmt, "{0:1$}\n", i, cols)?;
}
write!(fmt, "
")?;
- write!(fmt, "{}", highlight::highlight(s, None, None))?;
+ write!(fmt, "{}", highlight::render_with_highlighting(s, None, None))?;
Ok(())
}
}
fn item_macro(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
t: &clean::Macro) -> fmt::Result {
- w.write_str(&highlight::highlight(&t.source,
- Some("macro"),
- None))?;
+ w.write_str(&highlight::render_with_highlighting(&t.source,
+ Some("macro"),
+ None))?;
render_stability_since_raw(w, it.stable_since(), None)?;
document(w, cx, it)
}