Skip to content

Commit

Permalink
rustdoc: make table of contents optional
Browse files Browse the repository at this point in the history
rustdoc currently determines whether to produce a table of
contents (along with numbered sections) from the input type: yes for
markdown input, no for Rust input. This commit adds a flag to disable
the table of contents for markdown input, which is useful for embedding
the output in a larger context.
  • Loading branch information
aturon authored and alexcrichton committed Jul 24, 2014
1 parent 62bddfa commit 31ac8a9
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
6 changes: 4 additions & 2 deletions src/librustdoc/lib.rs
Expand Up @@ -131,7 +131,8 @@ pub fn opts() -> Vec<getopts::OptGroup> {
Markdown file or generated documentation",
"FILES"),
optopt("", "markdown-playground-url",
"URL to send code snippets to", "URL")
"URL to send code snippets to", "URL"),
optflag("", "markdown-no-toc", "don't include table of contents")
)
}

Expand Down Expand Up @@ -220,7 +221,8 @@ pub fn main_args(args: &[String]) -> int {
return test::run(input, cfgs, libs, externs, test_args)
}
(false, true) => return markdown::render(input, output.unwrap_or(Path::new("doc")),
&matches, &external_html),
&matches, &external_html,
!matches.opt_present("markdown-no-toc")),
(false, false) => {}
}

Expand Down
12 changes: 9 additions & 3 deletions src/librustdoc/markdown.rs
Expand Up @@ -20,7 +20,7 @@ use externalfiles::ExternalHtml;

use html::escape::Escape;
use html::markdown;
use html::markdown::{MarkdownWithToc, find_testable_code, reset_headers};
use html::markdown::{Markdown, MarkdownWithToc, find_testable_code, reset_headers};
use test::Collector;

/// Separate any lines at the start of the file that begin with `%`.
Expand All @@ -42,7 +42,7 @@ fn extract_leading_metadata<'a>(s: &'a str) -> (Vec<&'a str>, &'a str) {
/// Render `input` (e.g. "foo.md") into an HTML file in `output`
/// (e.g. output = "bar" => "bar/foo.html").
pub fn render(input: &str, mut output: Path, matches: &getopts::Matches,
external_html: &ExternalHtml) -> int {
external_html: &ExternalHtml, include_toc: bool) -> int {
let input_p = Path::new(input);
output.push(input_p.filestem().unwrap());
output.set_extension("html");
Expand Down Expand Up @@ -80,6 +80,12 @@ pub fn render(input: &str, mut output: Path, matches: &getopts::Matches,

reset_headers();

let rendered = if include_toc {
format!("{}", MarkdownWithToc(text))
} else {
format!("{}", Markdown(text))
};

let err = write!(
&mut out,
r#"<!DOCTYPE html>
Expand Down Expand Up @@ -113,7 +119,7 @@ pub fn render(input: &str, mut output: Path, matches: &getopts::Matches,
css = css,
in_header = external_html.in_header,
before_content = external_html.before_content,
text = MarkdownWithToc(text),
text = rendered,
after_content = external_html.after_content,
playground = playground,
);
Expand Down

0 comments on commit 31ac8a9

Please sign in to comment.