summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/librustdoc/markdown_pass.rs39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/librustdoc/markdown_pass.rs b/src/librustdoc/markdown_pass.rs
index c6f5dbefb6a..97de4627d6b 100644
--- a/src/librustdoc/markdown_pass.rs
+++ b/src/librustdoc/markdown_pass.rs
@@ -451,9 +451,13 @@ fn write_variants(
fn write_variant(ctxt: &Ctxt, doc: doc::VariantDoc) {
assert!(doc.sig.is_some());
let sig = (&doc.sig).get();
+
+ // space out list items so they all end up within paragraph elements
+ ctxt.w.put_line(~"");
+
match copy doc.desc {
Some(desc) => {
- ctxt.w.put_line(fmt!("* `%s` - %s", sig, desc));
+ ctxt.w.put_line(list_item_indent(fmt!("* `%s` - %s", sig, desc)));
}
None => {
ctxt.w.put_line(fmt!("* `%s`", sig));
@@ -461,6 +465,18 @@ fn write_variant(ctxt: &Ctxt, doc: doc::VariantDoc) {
}
}
+fn list_item_indent(item: &str) -> ~str {
+ let mut indented = ~[];
+ for str::each_line_any(item) |line| {
+ indented.push(line);
+ }
+
+ // separate markdown elements within `*` lists must be indented by four
+ // spaces, or they will escape the list context. indenting everything
+ // seems fine though.
+ str::connect_slices(indented, "\n ")
+}
+
fn write_trait(ctxt: &Ctxt, doc: doc::TraitDoc) {
write_common(ctxt, doc.desc(), doc.sections());
write_methods(ctxt, doc.methods);
@@ -807,7 +823,9 @@ mod test {
assert!(str::contains(
markdown,
"\n\n#### Variants\n\
+ \n\
\n* `b` - test\
+ \n\
\n* `c` - test\n\n"));
}
@@ -817,7 +835,24 @@ mod test {
assert!(str::contains(
markdown,
"\n\n#### Variants\n\
+ \n\
\n* `b`\
+ \n\
+ \n* `c`\n\n"));
+ }
+
+ #[test]
+ fn should_write_variant_list_with_indent() {
+ let markdown = render(
+ ~"enum a { #[doc = \"line 1\\n\\nline 2\"] b, c }");
+ assert!(str::contains(
+ markdown,
+ "\n\n#### Variants\n\
+ \n\
+ \n* `b` - line 1\
+ \n \
+ \n line 2\
+ \n\
\n* `c`\n\n"));
}
@@ -827,7 +862,9 @@ mod test {
assert!(str::contains(
markdown,
"\n\n#### Variants\n\
+ \n\
\n* `b(int)`\
+ \n\
\n* `c(int)` - a\n\n"));
}