diff --git a/src/parser/plain_list.rs b/src/parser/plain_list.rs index b728780..6bd455e 100644 --- a/src/parser/plain_list.rs +++ b/src/parser/plain_list.rs @@ -100,6 +100,7 @@ pub fn plain_list_item<'r, 's>( } Err(_) => { let (remaining, _ws) = space1(remaining)?; + // TODO: The problem is we are not capturing trailing whitespace for elements that are before the last element. let (remaining, (contents, _exit_contents)) = many_till(element_matcher, exit_matcher)(remaining)?; let source = get_consumed(input, remaining); @@ -296,7 +297,6 @@ mod tests { #[test] fn two_blank_lines_ends_nested_list() { - // Plain lists with an asterisk bullet must be indented or else they would be a headline let input = r#"1. foo 1. bar @@ -315,6 +315,40 @@ baz"#; 1. bar +"# + ); + } + + #[test] + fn interior_trailing_whitespace() { + let input = r#"1. foo + + bar + + 1. baz + + lorem + + +ipsum"#; + let initial_context: ContextTree<'_, '_> = ContextTree::new(); + let document_context = + initial_context.with_additional_node(ContextElement::DocumentRoot(input)); + let plain_list_matcher = parser_with_context!(plain_list)(&document_context); + let (remaining, result) = + plain_list_matcher(input).expect("Should parse the plain list successfully."); + assert_eq!(remaining, "ipsum"); + assert_eq!( + result.get_source(), + r#"1. foo + + bar + + 1. baz + + lorem + + "# ); } diff --git a/toy_language.txt b/toy_language.txt index d953b9f..843a1e0 100644 --- a/toy_language.txt +++ b/toy_language.txt @@ -1,38 +1,10 @@ -prologue *goes here* I guess *bold -text* - -bold*wont* start *or stop*when there is text outside it - -I guess *regular - -text* - -[foo *bar] baz* car - - -*nesting *bold entrances* and* exits - -* Heading - -body of heading - -** Child heading -** Immediate second child heading - -* Second top-level heading -foo bar -1. This is a list immediately after a paragraph -2. This is a second item in the list - 1. This is a child of the second item -#+begin_center 1. foo -2. bar -#+end_center -[fn:1] A footnote. -[fn:2] A multi- + bar -line footnote. + 1. baz + + lorem -not in the footnote. +ipsum