Skip to content

Commit 51d3cec

Browse files
Fix hard break issue
1 parent 36b15f0 commit 51d3cec

File tree

3 files changed

+65
-3
lines changed

3 files changed

+65
-3
lines changed

src/librustdoc/html/markdown.rs

+34-2
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,19 @@ macro_rules! event_loop_break {
116116
match event {
117117
$($end_event)|* => break,
118118
Event::Text(ref s) => {
119+
debug!("Text");
119120
inner($id, s);
120121
if $escape {
121122
$buf.push_str(&format!("{}", Escape(s)));
122123
} else {
123124
$buf.push_str(s);
124125
}
125126
}
126-
Event::SoftBreak | Event::HardBreak if !$buf.is_empty() => {
127-
$buf.push(' ');
127+
Event::SoftBreak => {
128+
debug!("SoftBreak");
129+
if !$buf.is_empty() {
130+
$buf.push(' ');
131+
}
128132
}
129133
x => {
130134
looper($parser, &mut $buf, Some(x), $toc_builder, $shorter, $id);
@@ -165,6 +169,7 @@ pub fn render(w: &mut fmt::Formatter,
165169
print_toc: bool,
166170
shorter: MarkdownOutputStyle) -> fmt::Result {
167171
fn code_block(parser: &mut ParserWrapper, buffer: &mut String, lang: &str) {
172+
debug!("CodeBlock");
168173
let mut origtext = String::new();
169174
while let Some(event) = parser.next() {
170175
match event {
@@ -244,6 +249,7 @@ pub fn render(w: &mut fmt::Formatter,
244249

245250
fn heading(parser: &mut ParserWrapper, buffer: &mut String,
246251
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle, level: i32) {
252+
debug!("Heading");
247253
let mut ret = String::new();
248254
let mut id = String::new();
249255
event_loop_break!(parser, toc_builder, shorter, ret, true, &mut Some(&mut id),
@@ -279,6 +285,7 @@ pub fn render(w: &mut fmt::Formatter,
279285
fn inline_code(parser: &mut ParserWrapper, buffer: &mut String,
280286
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle,
281287
id: &mut Option<&mut String>) {
288+
debug!("InlineCode");
282289
let mut content = String::new();
283290
event_loop_break!(parser, toc_builder, shorter, content, false, id, Event::End(Tag::Code));
284291
buffer.push_str(&format!("<code>{}</code>",
@@ -288,6 +295,7 @@ pub fn render(w: &mut fmt::Formatter,
288295
fn link(parser: &mut ParserWrapper, buffer: &mut String, toc_builder: &mut Option<TocBuilder>,
289296
shorter: MarkdownOutputStyle, url: &str, title: &str,
290297
id: &mut Option<&mut String>) {
298+
debug!("Link");
291299
let mut content = String::new();
292300
event_loop_break!(parser, toc_builder, shorter, content, true, id,
293301
Event::End(Tag::Link(_, _)));
@@ -302,6 +310,7 @@ pub fn render(w: &mut fmt::Formatter,
302310
fn image(parser: &mut ParserWrapper, buffer: &mut String, toc_builder: &mut Option<TocBuilder>,
303311
shorter: MarkdownOutputStyle, url: &str, mut title: String,
304312
id: &mut Option<&mut String>) {
313+
debug!("Image");
305314
event_loop_break!(parser, toc_builder, shorter, title, true, id,
306315
Event::End(Tag::Image(_, _)));
307316
buffer.push_str(&format!("<img src=\"{}\" alt=\"{}\">", url, title));
@@ -310,6 +319,7 @@ pub fn render(w: &mut fmt::Formatter,
310319
fn paragraph(parser: &mut ParserWrapper, buffer: &mut String,
311320
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle,
312321
id: &mut Option<&mut String>) {
322+
debug!("Paragraph");
313323
let mut content = String::new();
314324
event_loop_break!(parser, toc_builder, shorter, content, true, id,
315325
Event::End(Tag::Paragraph));
@@ -318,6 +328,7 @@ pub fn render(w: &mut fmt::Formatter,
318328

319329
fn table_cell(parser: &mut ParserWrapper, buffer: &mut String,
320330
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle) {
331+
debug!("TableCell");
321332
let mut content = String::new();
322333
event_loop_break!(parser, toc_builder, shorter, content, true, &mut None,
323334
Event::End(Tag::TableHead) |
@@ -329,6 +340,7 @@ pub fn render(w: &mut fmt::Formatter,
329340

330341
fn table_row(parser: &mut ParserWrapper, buffer: &mut String,
331342
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle) {
343+
debug!("TableRow");
332344
let mut content = String::new();
333345
while let Some(event) = parser.next() {
334346
match event {
@@ -348,6 +360,7 @@ pub fn render(w: &mut fmt::Formatter,
348360

349361
fn table_head(parser: &mut ParserWrapper, buffer: &mut String,
350362
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle) {
363+
debug!("TableHead");
351364
let mut content = String::new();
352365
while let Some(event) = parser.next() {
353366
match event {
@@ -367,6 +380,7 @@ pub fn render(w: &mut fmt::Formatter,
367380

368381
fn table(parser: &mut ParserWrapper, buffer: &mut String, toc_builder: &mut Option<TocBuilder>,
369382
shorter: MarkdownOutputStyle) {
383+
debug!("Table");
370384
let mut content = String::new();
371385
let mut rows = String::new();
372386
while let Some(event) = parser.next() {
@@ -392,6 +406,7 @@ pub fn render(w: &mut fmt::Formatter,
392406

393407
fn blockquote(parser: &mut ParserWrapper, buffer: &mut String,
394408
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle) {
409+
debug!("BlockQuote");
395410
let mut content = String::new();
396411
event_loop_break!(parser, toc_builder, shorter, content, true, &mut None,
397412
Event::End(Tag::BlockQuote));
@@ -400,6 +415,7 @@ pub fn render(w: &mut fmt::Formatter,
400415

401416
fn list_item(parser: &mut ParserWrapper, buffer: &mut String,
402417
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle) {
418+
debug!("ListItem");
403419
let mut content = String::new();
404420
while let Some(event) = parser.next() {
405421
match event {
@@ -417,6 +433,7 @@ pub fn render(w: &mut fmt::Formatter,
417433

418434
fn list(parser: &mut ParserWrapper, buffer: &mut String, toc_builder: &mut Option<TocBuilder>,
419435
shorter: MarkdownOutputStyle) {
436+
debug!("List");
420437
let mut content = String::new();
421438
while let Some(event) = parser.next() {
422439
match event {
@@ -435,6 +452,7 @@ pub fn render(w: &mut fmt::Formatter,
435452
fn emphasis(parser: &mut ParserWrapper, buffer: &mut String,
436453
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle,
437454
id: &mut Option<&mut String>) {
455+
debug!("Emphasis");
438456
let mut content = String::new();
439457
event_loop_break!(parser, toc_builder, shorter, content, false, id,
440458
Event::End(Tag::Emphasis));
@@ -443,6 +461,7 @@ pub fn render(w: &mut fmt::Formatter,
443461

444462
fn strong(parser: &mut ParserWrapper, buffer: &mut String, toc_builder: &mut Option<TocBuilder>,
445463
shorter: MarkdownOutputStyle, id: &mut Option<&mut String>) {
464+
debug!("Strong");
446465
let mut content = String::new();
447466
event_loop_break!(parser, toc_builder, shorter, content, false, id,
448467
Event::End(Tag::Strong));
@@ -452,6 +471,7 @@ pub fn render(w: &mut fmt::Formatter,
452471
fn footnote(parser: &mut ParserWrapper, buffer: &mut String,
453472
toc_builder: &mut Option<TocBuilder>, shorter: MarkdownOutputStyle,
454473
id: &mut Option<&mut String>) {
474+
debug!("FootnoteDefinition");
455475
let mut content = String::new();
456476
event_loop_break!(parser, toc_builder, shorter, content, true, id,
457477
Event::End(Tag::FootnoteDefinition(_)));
@@ -460,6 +480,7 @@ pub fn render(w: &mut fmt::Formatter,
460480

461481
fn rule(parser: &mut ParserWrapper, buffer: &mut String, toc_builder: &mut Option<TocBuilder>,
462482
shorter: MarkdownOutputStyle, id: &mut Option<&mut String>) {
483+
debug!("Rule");
463484
let mut content = String::new();
464485
event_loop_break!(parser, toc_builder, shorter, content, true, id,
465486
Event::End(Tag::Rule));
@@ -508,6 +529,7 @@ pub fn render(w: &mut fmt::Formatter,
508529
rule(parser, buffer, toc_builder, shorter, id);
509530
}
510531
Event::Start(Tag::FootnoteDefinition(ref def)) => {
532+
debug!("FootnoteDefinition");
511533
let mut content = String::new();
512534
let def = def.as_ref();
513535
footnote(parser, &mut content, toc_builder, shorter, id);
@@ -523,12 +545,22 @@ pub fn render(w: &mut fmt::Formatter,
523545
}));
524546
}
525547
Event::FootnoteReference(ref reference) => {
548+
debug!("FootnoteReference");
526549
let entry = parser.get_entry(reference.as_ref());
527550
buffer.push_str(&format!("<sup id=\"supref{0}\"><a href=\"#ref{0}\">{0}</a>\
528551
</sup>",
529552
(*entry).1));
530553
}
554+
Event::HardBreak => {
555+
debug!("HardBreak");
556+
if shorter.is_fancy() {
557+
buffer.push_str("<br>");
558+
} else if !buffer.is_empty() {
559+
buffer.push(' ');
560+
}
561+
}
531562
Event::Html(h) | Event::InlineHtml(h) => {
563+
debug!("Html/InlineHtml");
532564
buffer.push_str(&*h);
533565
}
534566
_ => {}

src/librustdoc/passes/unindent_comments.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fn unindent(s: &str) -> String {
8282
});
8383

8484
if !lines.is_empty() {
85-
let mut unindented = vec![ lines[0].trim().to_string() ];
85+
let mut unindented = vec![ lines[0].trim_left().to_string() ];
8686
unindented.extend_from_slice(&lines[1..].iter().map(|&line| {
8787
if line.chars().all(|c| c.is_whitespace()) {
8888
line.to_string()
@@ -160,4 +160,15 @@ mod unindent_tests {
160160
let r = unindent(&s);
161161
assert_eq!(r, "line1\nline2");
162162
}
163+
164+
#[test]
165+
fn should_not_trim() {
166+
let s = "\t line1 \n\t line2".to_string();
167+
let r = unindent(&s);
168+
assert_eq!(r, "line1 \nline2");
169+
170+
let s = " \tline1 \n \tline2".to_string();
171+
let r = unindent(&s);
172+
assert_eq!(r, "line1 \nline2");
173+
}
163174
}

src/test/rustdoc/check-hard-break.rs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![crate_name = "foo"]
12+
13+
// ignore-tidy-linelength
14+
15+
// @has foo/fn.f.html
16+
// @has - '<p>hard break:<br>after hard break</p>'
17+
/// hard break:
18+
/// after hard break
19+
pub fn f() {}

0 commit comments

Comments
 (0)