Skip to content

Commit b63ff0b

Browse files
committed
---
yaml --- r: 14563 b: refs/heads/try c: ad82a03 h: refs/heads/master i: 14561: 2293ccf 14559: 1878402 v: v3
1 parent cc503be commit b63ff0b

File tree

3 files changed

+74
-35
lines changed

3 files changed

+74
-35
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
refs/heads/master: 61b1875c16de39c166b0f4d54bba19f9c6777d1a
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
5-
refs/heads/try: 81a0745361744b30b7888372a39d924042cd0234
5+
refs/heads/try: ad82a031f2e2c3612b0257f6727b8a379cb732d0
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

branches/try/src/rustdoc/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import std::getopts;
22

3-
export output_format::{};
4-
export output_style::{};
3+
export output_format;
4+
export output_style;
55
export config;
66
export default_config;
77
export parse_config;

branches/try/src/rustdoc/markdown_pass.rs

Lines changed: 71 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,48 @@
11
#[doc = "Generate markdown from a document tree"];
22

3-
import std::io;
4-
import std::io::writer_util;
5-
63
export mk_pass;
74

85
fn mk_pass(config: config::config) -> pass {
9-
mk_pass_(config, {|f| f(std::io::stdout()) })
6+
mk_pass_(config, stdout_writer)
7+
}
8+
9+
enum writeinstr {
10+
write(str),
11+
done
12+
}
13+
14+
type writer = fn~(writeinstr);
15+
16+
impl writer for writer {
17+
fn write_str(str: str) {
18+
self(write(str));
19+
}
20+
21+
fn write_line(str: str) {
22+
self.write_str(str + "\n");
23+
}
24+
25+
fn write_done() {
26+
self(done)
27+
}
28+
}
29+
30+
fn stdout_writer(instr: writeinstr) {
31+
alt instr {
32+
write(str) { std::io::println(str); }
33+
done { }
34+
}
1035
}
1136

1237
// FIXME: This is a really convoluted interface to work around trying
1338
// to get a writer into a unique closure and then being able to test
1439
// what was written afterward
1540
fn mk_pass_(
1641
config: config::config,
17-
give_writer: fn~(fn(io::writer))
42+
writer: writer
1843
) -> pass {
1944
let f = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc {
20-
run(srv, doc, config, give_writer)
45+
run(srv, doc, config, writer)
2146
};
2247

2348
{
@@ -30,7 +55,7 @@ fn run(
3055
srv: astsrv::srv,
3156
doc: doc::cratedoc,
3257
_config: config::config,
33-
give_writer: fn~(fn(io::writer))
58+
writer: writer
3459
) -> doc::cratedoc {
3560

3661
fn mods_last(item1: doc::itemtag, item2: doc::itemtag) -> bool {
@@ -45,17 +70,16 @@ fn run(
4570
lteq
4671
}
4772

48-
give_writer {|writer|
49-
// Sort the items so mods come last. All mods will be
50-
// output at the same header level so sorting mods last
51-
// makes the headers come out nested correctly.
52-
let sorted_doc = sort_pass::mk_pass(
53-
"mods last", mods_last
54-
).f(srv, doc);
73+
// Sort the items so mods come last. All mods will be
74+
// output at the same header level so sorting mods last
75+
// makes the headers come out nested correctly.
76+
let sorted_doc = sort_pass::mk_pass(
77+
"mods last", mods_last
78+
).f(srv, doc);
5579

56-
write_markdown(sorted_doc, writer);
57-
}
58-
doc
80+
write_markdown(sorted_doc, writer);
81+
82+
ret doc;
5983
}
6084

6185
#[test]
@@ -85,18 +109,19 @@ fn should_write_modules_last() {
85109
}
86110

87111
type ctxt = {
88-
w: io::writer
112+
w: writer
89113
};
90114

91115
fn write_markdown(
92116
doc: doc::cratedoc,
93-
writer: io::writer
117+
writer: writer
94118
) {
95119
let ctxt = {
96120
w: writer
97121
};
98122

99123
write_crate(ctxt, doc);
124+
ctxt.w.write_done();
100125
}
101126

102127
enum hlvl {
@@ -853,31 +878,45 @@ mod test {
853878
doc
854879
}
855880

881+
fn writer_future() -> (writer, future::future<str>) {
882+
let port = comm::port();
883+
let chan = comm::chan(port);
884+
let writer = fn~(instr: writeinstr) {
885+
comm::send(chan, copy instr);
886+
};
887+
let future = future::from_fn {||
888+
let res = "";
889+
while true {
890+
alt comm::recv(port) {
891+
write(s) { res += s }
892+
done { break }
893+
}
894+
}
895+
res
896+
};
897+
(writer, future)
898+
}
899+
856900
fn write_markdown_str(
857901
doc: doc::cratedoc
858902
) -> str {
859-
let buffer = io::mk_mem_buffer();
860-
let writer = io::mem_buffer_writer(buffer);
903+
let (writer, future) = writer_future();
861904
write_markdown(doc, writer);
862-
ret io::mem_buffer_str(buffer);
905+
ret future::get(future);
863906
}
864907

865908
fn write_markdown_str_srv(
866909
srv: astsrv::srv,
867910
doc: doc::cratedoc
868911
) -> str {
869-
let port = comm::port();
870-
let chan = comm::chan(port);
871-
872-
let pass = mk_pass_(config::default_config("")) {|f|
873-
let buffer = io::mk_mem_buffer();
874-
let writer = io::mem_buffer_writer(buffer);
875-
f(writer);
876-
let result = io::mem_buffer_str(buffer);
877-
comm::send(chan, result);
912+
let config = {
913+
output_style: config::doc_per_crate
914+
with config::default_config("")
878915
};
916+
let (writer, future) = writer_future();
917+
let pass = mk_pass_(config, writer);
879918
pass.f(srv, doc);
880-
ret comm::recv(port);
919+
ret future::get(future);
881920
}
882921

883922
#[test]

0 commit comments

Comments
 (0)