@@ -91,12 +91,15 @@ fn write_markdown(
91
91
}
92
92
93
93
fn write_page ( ctxt : ctxt , page : doc:: page ) {
94
+ write_title ( ctxt, page) ;
94
95
alt page {
95
96
doc : : cratepage ( doc) {
96
97
write_crate ( ctxt, doc) ;
97
98
}
98
99
doc:: itempage ( doc) {
99
- write_item ( ctxt, doc) ;
100
+ // We don't write a header for item's pages because their
101
+ // header in the html output is created by the page title
102
+ write_item_no_header ( ctxt, doc) ;
100
103
}
101
104
}
102
105
ctxt. w . write_done ( ) ;
@@ -117,6 +120,45 @@ fn should_request_new_writer_for_each_page() {
117
120
}
118
121
}
119
122
123
+ fn write_title ( ctxt : ctxt , page : doc:: page ) {
124
+ ctxt. w . write_line ( #fmt ( "%% %s" , make_title ( page) ) ) ;
125
+ ctxt. w . write_line ( "" ) ;
126
+ }
127
+
128
+ fn make_title ( page : doc:: page ) -> str {
129
+ let item = alt page {
130
+ doc : : cratepage ( cratedoc) {
131
+ doc:: modtag ( cratedoc. topmod )
132
+ }
133
+ doc:: itempage ( itemtag) {
134
+ itemtag
135
+ }
136
+ } ;
137
+ let title = markdown_pass:: header_text ( item) ;
138
+ let title = str:: replace ( title, "`" , "" ) ;
139
+ ret title;
140
+ }
141
+
142
+ #[ test]
143
+ fn should_write_title_for_each_page ( ) {
144
+ let ( writer_factory, po) = markdown_writer:: future_writer_factory ( ) ;
145
+ let ( srv, doc) = test:: create_doc_srv (
146
+ "#[link(name = \" core\" )]; mod a { }" ) ;
147
+ let doc = page_pass:: mk_pass ( config:: doc_per_mod) . f ( srv, doc) ;
148
+ write_markdown ( doc, writer_factory) ;
149
+ iter:: repeat ( 2 u) { ||
150
+ let ( page, markdown) = comm:: recv ( po) ;
151
+ alt page {
152
+ doc : : cratepage ( _) {
153
+ assert str:: contains ( markdown, "% Crate core" ) ;
154
+ }
155
+ doc:: itempage ( _) {
156
+ assert str:: contains ( markdown, "% Module a" ) ;
157
+ }
158
+ }
159
+ }
160
+ }
161
+
120
162
enum hlvl {
121
163
h1 = 1 ,
122
164
h2 = 2 ,
@@ -210,7 +252,6 @@ fn write_crate(
210
252
ctxt : ctxt ,
211
253
doc : doc:: cratedoc
212
254
) {
213
- write_header ( ctxt, h1, doc:: modtag ( doc. topmod ) ) ;
214
255
write_top_module ( ctxt, doc. topmod ) ;
215
256
}
216
257
@@ -225,7 +266,6 @@ fn write_mod(
225
266
ctxt : ctxt ,
226
267
moddoc : doc:: moddoc
227
268
) {
228
- write_header ( ctxt, h1, doc:: modtag ( moddoc) ) ;
229
269
write_mod_contents ( ctxt, moddoc) ;
230
270
}
231
271
@@ -294,6 +334,18 @@ fn write_mod_contents(
294
334
}
295
335
296
336
fn write_item ( ctxt : ctxt , doc : doc:: itemtag ) {
337
+ write_item_ ( ctxt, doc, true ) ;
338
+ }
339
+
340
+ fn write_item_no_header ( ctxt : ctxt , doc : doc:: itemtag ) {
341
+ write_item_ ( ctxt, doc, false ) ;
342
+ }
343
+
344
+ fn write_item_ ( ctxt : ctxt , doc : doc:: itemtag , write_header : bool ) {
345
+ if write_header {
346
+ write_item_header ( ctxt, doc) ;
347
+ }
348
+
297
349
alt doc {
298
350
doc : : modtag ( moddoc) { write_mod ( ctxt, moddoc) }
299
351
doc:: nmodtag ( nmoddoc) { write_nmod ( ctxt, nmoddoc) }
@@ -307,6 +359,17 @@ fn write_item(ctxt: ctxt, doc: doc::itemtag) {
307
359
}
308
360
}
309
361
362
+ fn write_item_header ( ctxt : ctxt , doc : doc:: itemtag ) {
363
+ write_header ( ctxt, item_header_lvl ( doc) , doc) ;
364
+ }
365
+
366
+ fn item_header_lvl ( doc : doc:: itemtag ) -> hlvl {
367
+ alt doc {
368
+ doc : : modtag ( _) | doc:: nmodtag ( _) { h1 }
369
+ _ { h2 }
370
+ }
371
+ }
372
+
310
373
#[ test]
311
374
fn should_write_crate_description ( ) {
312
375
let markdown = test:: render ( "#[doc = \" this is the crate\" ];" ) ;
@@ -354,7 +417,6 @@ fn should_not_write_index_if_no_entries() {
354
417
}
355
418
356
419
fn write_nmod ( ctxt : ctxt , doc : doc:: nmoddoc ) {
357
- write_header ( ctxt, h1, doc:: nmodtag ( doc) ) ;
358
420
write_common ( ctxt, doc. desc ( ) , doc. sections ( ) ) ;
359
421
360
422
for fndoc in doc. fns {
@@ -379,7 +441,6 @@ fn write_fn(
379
441
ctxt : ctxt ,
380
442
doc : doc:: fndoc
381
443
) {
382
- write_header ( ctxt, h2, doc:: fntag ( doc) ) ;
383
444
write_fnlike (
384
445
ctxt,
385
446
doc. sig ,
@@ -463,7 +524,6 @@ fn write_const(
463
524
ctxt : ctxt ,
464
525
doc : doc:: constdoc
465
526
) {
466
- write_header ( ctxt, h2, doc:: consttag ( doc) ) ;
467
527
write_sig ( ctxt, doc. sig ) ;
468
528
write_common ( ctxt, doc. desc ( ) , doc. sections ( ) ) ;
469
529
}
@@ -486,7 +546,6 @@ fn write_enum(
486
546
ctxt : ctxt ,
487
547
doc : doc:: enumdoc
488
548
) {
489
- write_header ( ctxt, h2, doc:: enumtag ( doc) ) ;
490
549
write_common ( ctxt, doc. desc ( ) , doc. sections ( ) ) ;
491
550
write_variants ( ctxt, doc. variants ) ;
492
551
}
@@ -566,7 +625,6 @@ fn should_write_variant_list_with_signatures() {
566
625
}
567
626
568
627
fn write_res ( ctxt : ctxt , doc : doc:: resdoc ) {
569
- write_header ( ctxt, h2, doc:: restag ( doc) ) ;
570
628
write_sig ( ctxt, doc. sig ) ;
571
629
write_common ( ctxt, doc. desc ( ) , doc. sections ( ) ) ;
572
630
}
@@ -584,7 +642,6 @@ fn should_write_resource_signature() {
584
642
}
585
643
586
644
fn write_iface ( ctxt : ctxt , doc : doc:: ifacedoc ) {
587
- write_header ( ctxt, h2, doc:: ifacetag ( doc) ) ;
588
645
write_common ( ctxt, doc. desc ( ) , doc. sections ( ) ) ;
589
646
write_methods ( ctxt, doc. methods ) ;
590
647
}
@@ -631,7 +688,6 @@ fn should_write_iface_method_signature() {
631
688
}
632
689
633
690
fn write_impl ( ctxt : ctxt , doc : doc:: impldoc ) {
634
- write_header ( ctxt, h2, doc:: impltag ( doc) ) ;
635
691
write_common ( ctxt, doc. desc ( ) , doc. sections ( ) ) ;
636
692
write_methods ( ctxt, doc. methods ) ;
637
693
}
@@ -673,7 +729,6 @@ fn write_type(
673
729
ctxt : ctxt ,
674
730
doc : doc:: tydoc
675
731
) {
676
- write_header ( ctxt, h2, doc:: tytag ( doc) ) ;
677
732
write_sig ( ctxt, doc. sig ) ;
678
733
write_common ( ctxt, doc. desc ( ) , doc. sections ( ) ) ;
679
734
}
@@ -759,16 +814,6 @@ mod test {
759
814
ret tuple:: second ( comm:: recv ( po) ) ;
760
815
}
761
816
762
- #[ test]
763
- fn write_markdown_should_write_crate_header ( ) {
764
- astsrv:: from_str ( "" ) { |srv|
765
- let doc = extract:: from_srv ( srv, "belch" ) ;
766
- let doc = attr_pass:: mk_pass ( ) . f ( srv, doc) ;
767
- let markdown = write_markdown_str ( doc) ;
768
- assert str:: contains ( markdown, "# Crate `belch`" ) ;
769
- }
770
- }
771
-
772
817
#[ test]
773
818
fn write_markdown_should_write_mod_headers ( ) {
774
819
let markdown = render ( "mod moo { }" ) ;
0 commit comments