summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-29 22:26:28 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-29 23:45:51 -0800
commit9208684e745b50b511c0fd3645a8ab2f3919fc82 (patch)
tree250476a4174243c87dc157c07056b555a22419a7 /src/rustdoc
parent516f87f860ea9bb185a8eac40a598abaefafaa31 (diff)
downloadrust-9208684e745b50b511c0fd3645a8ab2f3919fc82.tar.gz
rust-9208684e745b50b511c0fd3645a8ab2f3919fc82.zip
rustdoc: Extract markdown_writer from markdown_pass
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/markdown_pass.rs96
-rw-r--r--src/rustdoc/markdown_writer.rs96
-rw-r--r--src/rustdoc/rustdoc.rc1
3 files changed, 103 insertions, 90 deletions
diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs
index 06b1b0f4484..da7472fd065 100644
--- a/src/rustdoc/markdown_pass.rs
+++ b/src/rustdoc/markdown_pass.rs
@@ -1,77 +1,12 @@
 #[doc = "Generate markdown from a document tree"];
 
+import markdown_writer::writer;
+import markdown_writer::writer_util;
+
 export mk_pass;
 
 fn mk_pass(config: config::config) -> pass {
-    mk_pass_(config, markdown_writer(config))
-}
-
-enum writeinstr {
-    write(str),
-    done
-}
-
-type writer = fn~(+writeinstr);
-
-impl writer for writer {
-    fn write_str(str: str) {
-        self(write(str));
-    }
-
-    fn write_line(str: str) {
-        self.write_str(str + "\n");
-    }
-
-    fn write_done() {
-        self(done)
-    }
-}
-
-fn markdown_writer(config: config::config) -> writer {
-    let filename = make_filename(config);
-    let ch = task::spawn_listener {|po: comm::port<writeinstr>|
-        let markdown = "";
-        let keep_going = true;
-        while keep_going {
-            alt comm::recv(po) {
-              write(s) { markdown += s; }
-              done { keep_going = false; }
-            }
-        }
-        write_file(filename, markdown);
-    };
-
-    fn~(+instr: writeinstr) {
-        comm::send(ch, instr);
-    }
-}
-
-fn make_filename(config: config::config) -> str {
-    import std::fs;
-    let cratefile = fs::basename(config.input_crate);
-    let cratename = tuple::first(fs::splitext(cratefile));
-    fs::connect(config.output_dir, cratename + ".md")
-}
-
-fn write_file(path: str, s: str) {
-    import std::io;
-    import std::io::writer_util;
-
-    alt io::file_writer(path, [io::create, io::truncate]) {
-      result::ok(writer) {
-        writer.write_str(s);
-      }
-      result::err(e) { fail e }
-    }
-}
-
-#[test]
-fn should_use_markdown_file_name_based_off_crate() {
-    let config = {
-        output_dir: "output/dir"
-        with config::default_config("input/test.rc")
-    };
-    assert make_filename(config) == "output/dir/test.md";
+    mk_pass_(config, markdown_writer::make_writer(config))
 }
 
 // FIXME: This is a really convoluted interface to work around trying
@@ -918,29 +853,10 @@ mod test {
         doc
     }
 
-    fn writer_future() -> (writer, future::future<str>) {
-        let port = comm::port();
-        let chan = comm::chan(port);
-        let writer = fn~(+instr: writeinstr) {
-            comm::send(chan, copy instr);
-        };
-        let future = future::from_fn {||
-            let res = "";
-            while true {
-                alt comm::recv(port) {
-                  write(s) { res += s }
-                  done { break }
-                }
-            }
-            res
-        };
-        (writer, future)
-    }
-
     fn write_markdown_str(
         doc: doc::cratedoc
     ) -> str {
-        let (writer, future) = writer_future();
+        let (writer, future) = markdown_writer::future_writer();
         write_markdown(doc, writer);
         ret future::get(future);
     }
@@ -953,7 +869,7 @@ mod test {
             output_style: config::doc_per_crate
             with config::default_config("")
         };
-        let (writer, future) = writer_future();
+        let (writer, future) = markdown_writer::future_writer();
         let pass = mk_pass_(config, writer);
         pass.f(srv, doc);
         ret future::get(future);
diff --git a/src/rustdoc/markdown_writer.rs b/src/rustdoc/markdown_writer.rs
new file mode 100644
index 00000000000..ff382a2aca4
--- /dev/null
+++ b/src/rustdoc/markdown_writer.rs
@@ -0,0 +1,96 @@
+export writeinstr;
+export writer;
+export writer_util;
+export make_writer;
+export future_writer;
+
+enum writeinstr {
+    write(str),
+    done
+}
+
+type writer = fn~(+writeinstr);
+
+impl writer_util for writer {
+    fn write_str(str: str) {
+        self(write(str));
+    }
+
+    fn write_line(str: str) {
+        self.write_str(str + "\n");
+    }
+
+    fn write_done() {
+        self(done)
+    }
+}
+
+fn make_writer(config: config::config) -> writer {
+    markdown_writer(config)
+}
+
+fn markdown_writer(config: config::config) -> writer {
+    let filename = make_filename(config);
+    let ch = task::spawn_listener {|po: comm::port<writeinstr>|
+        let markdown = "";
+        let keep_going = true;
+        while keep_going {
+            alt comm::recv(po) {
+              write(s) { markdown += s; }
+              done { keep_going = false; }
+            }
+        }
+        write_file(filename, markdown);
+    };
+
+    fn~(+instr: writeinstr) {
+        comm::send(ch, instr);
+    }
+}
+
+fn make_filename(config: config::config) -> str {
+    import std::fs;
+    let cratefile = fs::basename(config.input_crate);
+    let cratename = tuple::first(fs::splitext(cratefile));
+    fs::connect(config.output_dir, cratename + ".md")
+}
+
+fn write_file(path: str, s: str) {
+    import std::io;
+    import std::io::writer_util;
+
+    alt io::file_writer(path, [io::create, io::truncate]) {
+      result::ok(writer) {
+        writer.write_str(s);
+      }
+      result::err(e) { fail e }
+    }
+}
+
+#[test]
+fn should_use_markdown_file_name_based_off_crate() {
+    let config = {
+        output_dir: "output/dir"
+        with config::default_config("input/test.rc")
+    };
+    assert make_filename(config) == "output/dir/test.md";
+}
+
+fn future_writer() -> (writer, future::future<str>) {
+    let port = comm::port();
+    let chan = comm::chan(port);
+    let writer = fn~(+instr: writeinstr) {
+        comm::send(chan, copy instr);
+    };
+    let future = future::from_fn {||
+        let res = "";
+        while true {
+            alt comm::recv(port) {
+              write(s) { res += s }
+              done { break }
+            }
+        }
+        res
+    };
+    (writer, future)
+}
diff --git a/src/rustdoc/rustdoc.rc b/src/rustdoc/rustdoc.rc
index e317ade9d16..5f88ca4bdf9 100644
--- a/src/rustdoc/rustdoc.rc
+++ b/src/rustdoc/rustdoc.rc
@@ -18,6 +18,7 @@ mod extract;
 mod attr_parser;
 mod doc;
 mod markdown_pass;
+mod markdown_writer;
 mod fold;
 mod path_pass;
 mod attr_pass;