summary: turn SoftBreak events into spaces.

Summary items that had their name split into two lines ended up with the
last word of one line and the first word of the next line glued
together, since a space wasn't added.

Added test case for it.

Fixes #1218
This commit is contained in:
Érico Rolim 2020-07-28 22:54:49 -03:00
parent 303db0ddec
commit dcf9462d1e
1 changed files with 21 additions and 0 deletions

View File

@ -569,6 +569,7 @@ fn stringify_events(events: Vec<Event<'_>>) -> String {
.into_iter() .into_iter()
.filter_map(|t| match t { .filter_map(|t| match t {
Event::Text(text) | Event::Code(text) => Some(text.into_string()), Event::Text(text) | Event::Code(text) => Some(text.into_string()),
Event::SoftBreak => Some(String::from(" ")),
_ => None, _ => None,
}) })
.collect() .collect()
@ -926,4 +927,24 @@ mod tests {
assert_eq!(got, should_be); assert_eq!(got, should_be);
} }
/// Regression test for https://github.com/rust-lang/mdBook/issues/1218
/// Ensure chapter names spread across multiple lines have spaces between all the words.
#[test]
fn add_space_for_multi_line_chapter_names() {
let src = "- [Chapter\ntitle](./chapter.md)";
let should_be = vec![SummaryItem::Link(Link {
name: String::from("Chapter title"),
location: Some(PathBuf::from("./chapter.md")),
number: Some(SectionNumber(vec![1])),
nested_items: Vec::new(),
})];
let mut parser = SummaryParser::new(src);
let got = parser
.parse_numbered(&mut 0, &mut SectionNumber::default())
.unwrap();
assert_eq!(got, should_be);
}
} }