Skip to content

Commit 7e2934b

Browse files
committed
---
yaml --- r: 11613 b: refs/heads/master c: 0e3cee7 h: refs/heads/master i: 11611: ed6e1ef v: v3
1 parent ea4d62e commit 7e2934b

File tree

4 files changed

+80
-29
lines changed

4 files changed

+80
-29
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 0b2ffa854fd243055e3e41c7a6cd5116531afc9a
2+
refs/heads/master: 0e3cee747af58a48038347e88c5fc05799a8e8b5
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
55
refs/heads/try: 2898dcc5d97da9427ac367542382b6239d9c0bbf

trunk/src/rustdoc/markdown_pass.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
import markdown_writer::writer;
44
import markdown_writer::writer_util;
5+
import markdown_writer::writer_factory;
56

67
export mk_pass;
78
export header_kind, header_name, header_text;
89

9-
fn mk_pass(writer: writer) -> pass {
10+
fn mk_pass(writer_factory: writer_factory) -> pass {
1011
let f = fn~(srv: astsrv::srv, doc: doc::doc) -> doc::doc {
11-
run(srv, doc, writer)
12+
run(srv, doc, writer_factory)
1213
};
1314

1415
{
@@ -20,7 +21,7 @@ fn mk_pass(writer: writer) -> pass {
2021
fn run(
2122
srv: astsrv::srv,
2223
doc: doc::doc,
23-
writer: writer
24+
writer_factory: writer_factory
2425
) -> doc::doc {
2526

2627
fn mods_last(item1: doc::itemtag, item2: doc::itemtag) -> bool {
@@ -42,7 +43,7 @@ fn run(
4243
"mods last", mods_last
4344
).f(srv, doc);
4445

45-
write_markdown(sorted_doc, writer);
46+
write_markdown(sorted_doc, writer_factory);
4647

4748
ret doc;
4849
}
@@ -79,10 +80,10 @@ type ctxt = {
7980

8081
fn write_markdown(
8182
doc: doc::doc,
82-
writer: writer
83+
writer_factory: writer_factory
8384
) {
8485
let ctxt = {
85-
w: writer
86+
w: writer_factory(doc::cratepage(doc.cratedoc()))
8687
};
8788

8889
write_crate(ctxt, doc.cratedoc());
@@ -944,23 +945,19 @@ mod test {
944945
fn write_markdown_str(
945946
doc: doc::doc
946947
) -> str {
947-
let (writer, future) = markdown_writer::future_writer();
948-
write_markdown(doc, writer);
949-
ret future::get(future);
948+
let (writer_factory, po) = markdown_writer::future_writer_factory();
949+
write_markdown(doc, writer_factory);
950+
ret tuple::second(comm::recv(po));
950951
}
951952

952953
fn write_markdown_str_srv(
953954
srv: astsrv::srv,
954955
doc: doc::doc
955956
) -> str {
956-
let config = {
957-
output_style: config::doc_per_crate
958-
with config::default_config("")
959-
};
960-
let (writer, future) = markdown_writer::future_writer();
961-
let pass = mk_pass(writer);
957+
let (writer_factory, po) = markdown_writer::future_writer_factory();
958+
let pass = mk_pass(writer_factory);
962959
pass.f(srv, doc);
963-
ret future::get(future);
960+
ret tuple::second(comm::recv(po));
964961
}
965962

966963
#[test]

trunk/src/rustdoc/markdown_writer.rs

Lines changed: 65 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
export writeinstr;
22
export writer;
3+
export writer_factory;
34
export writer_util;
4-
export make_writer;
5-
export future_writer;
5+
export make_writer_factory;
6+
export future_writer_factory;
67

78
enum writeinstr {
89
write(str),
910
done
1011
}
1112

1213
type writer = fn~(+writeinstr);
14+
type writer_factory = fn~(page: doc::page) -> writer;
1315

1416
impl writer_util for writer {
1517
fn write_str(str: str) {
@@ -25,28 +27,46 @@ impl writer_util for writer {
2527
}
2628
}
2729

28-
fn make_writer(config: config::config) -> writer {
30+
fn make_writer_factory(config: config::config) -> writer_factory {
2931
alt config.output_format {
3032
config::markdown {
31-
markdown_writer(config)
33+
markdown_writer_factory(config)
3234
}
3335
config::pandoc_html {
34-
pandoc_writer(config)
36+
pandoc_writer_factory(config)
3537
}
3638
}
3739
}
3840

39-
fn markdown_writer(config: config::config) -> writer {
40-
let filename = make_filename(config, "md");
41+
fn markdown_writer_factory(config: config::config) -> writer_factory {
42+
fn~(page: doc::page) -> writer {
43+
markdown_writer(config, page)
44+
}
45+
}
46+
47+
fn pandoc_writer_factory(config: config::config) -> writer_factory {
48+
fn~(page: doc::page) -> writer {
49+
pandoc_writer(config, page)
50+
}
51+
}
52+
53+
fn markdown_writer(
54+
config: config::config,
55+
page: doc::page
56+
) -> writer {
57+
let filename = make_filename(config, "md", page);
4158
generic_writer {|markdown|
4259
write_file(filename, markdown);
4360
}
4461
}
4562

46-
fn pandoc_writer(config: config::config) -> writer {
63+
fn pandoc_writer(
64+
config: config::config,
65+
page: doc::page
66+
) -> writer {
4767
assert option::is_some(config.pandoc_cmd);
4868
let pandoc_cmd = option::get(config.pandoc_cmd);
49-
let filename = make_filename(config, "html");
69+
let filename = make_filename(config, "html", page);
5070

5171
let pandoc_args = [
5272
"--standalone",
@@ -109,7 +129,11 @@ fn generic_writer(process: fn~(markdown: str)) -> writer {
109129
}
110130
}
111131

112-
fn make_filename(config: config::config, ext: str) -> str {
132+
fn make_filename(
133+
config: config::config,
134+
ext: str,
135+
_page: doc::page
136+
) -> str {
113137
import std::fs;
114138
let cratefile = fs::basename(config.input_crate);
115139
let cratename = tuple::first(fs::splitext(cratefile));
@@ -134,7 +158,37 @@ fn should_use_markdown_file_name_based_off_crate() {
134158
output_dir: "output/dir"
135159
with config::default_config("input/test.rc")
136160
};
137-
assert make_filename(config, "md") == "output/dir/test.md";
161+
let doc = test::mk_doc("");
162+
let page = doc::cratepage(doc.cratedoc());
163+
assert make_filename(config, "md", page) == "output/dir/test.md";
164+
}
165+
166+
#[cfg(test)]
167+
mod test {
168+
fn mk_doc(source: str) -> doc::doc {
169+
astsrv::from_str(source) {|srv|
170+
extract::from_srv(srv, "")
171+
}
172+
}
173+
}
174+
175+
fn future_writer_factory(
176+
) -> (writer_factory, comm::port<(doc::page, str)>) {
177+
let markdown_po = comm::port();
178+
let markdown_ch = comm::chan(markdown_po);
179+
let writer_factory = fn~(page: doc::page) -> writer {
180+
let writer_po = comm::port();
181+
let writer_ch = comm::chan(writer_po);
182+
task::spawn {||
183+
let (writer, future) = future_writer();
184+
comm::send(writer_ch, writer);
185+
let s = future::get(future);
186+
comm::send(markdown_ch, (page, s));
187+
}
188+
comm::recv(writer_po)
189+
};
190+
191+
(writer_factory, markdown_po)
138192
}
139193

140194
fn future_writer() -> (writer, future::future<str>) {

trunk/src/rustdoc/rustdoc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ fn run(config: config::config) {
157157
sort_item_type_pass::mk_pass(),
158158
markdown_index_pass::mk_pass(),
159159
markdown_pass::mk_pass(
160-
markdown_writer::make_writer(config)
160+
markdown_writer::make_writer_factory(config)
161161
)
162162
]);
163163
}

0 commit comments

Comments
 (0)