summaryrefslogtreecommitdiffstats
path: root/src/book
diff options
context:
space:
mode:
authorEvian-Zhang <evianzhang1999@163.com>2020-08-03 09:49:01 +0800
committerEvian-Zhang <evianzhang1999@163.com>2020-08-03 09:49:01 +0800
commit60be20a783a094e55f5ffbc3276fa47ebe04a3f0 (patch)
treeef070df5d3ccba3bf2592051731f754d9120f501 /src/book
parent8746206060960dc9e0e6c1d122976af64883fe43 (diff)
allow space in SUMMARY.md's link destination
Diffstat (limited to 'src/book')
-rw-r--r--src/book/summary.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/book/summary.rs b/src/book/summary.rs
index 4782eb84..96ba757d 100644
--- a/src/book/summary.rs
+++ b/src/book/summary.rs
@@ -333,6 +333,7 @@ impl<'a> SummaryParser<'a> {
/// Finishes parsing a link once the `Event::Start(Tag::Link(..))` has been opened.
fn parse_link(&mut self, href: String) -> Link {
+ let href = href.replace("%20", " ").replace("+", " ");
let link_content = collect_events!(self.stream, end Tag::Link(..));
let name = stringify_events(link_content);
@@ -947,4 +948,35 @@ mod tests {
assert_eq!(got, should_be);
}
+
+ #[test]
+ fn allow_space_in_link_destination() {
+ let src = "- [test1](./test%20link1.md)\n- [test2](./test+link2.md)\n- [test3](<./test link3.md>)";
+ let should_be = vec![
+ SummaryItem::Link(Link {
+ name: String::from("test1"),
+ location: Some(PathBuf::from("./test link1.md")),
+ number: Some(SectionNumber(vec![1])),
+ nested_items: Vec::new(),
+ }),
+ SummaryItem::Link(Link {
+ name: String::from("test2"),
+ location: Some(PathBuf::from("./test link2.md")),
+ number: Some(SectionNumber(vec![2])),
+ nested_items: Vec::new(),
+ }),
+ SummaryItem::Link(Link {
+ name: String::from("test3"),
+ location: Some(PathBuf::from("./test link3.md")),
+ number: Some(SectionNumber(vec![3])),
+ 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);
+ }
}