From cbe7ef4030c85b0112a32773148fe80670998b04 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 10 Apr 2023 11:16:32 -0400 Subject: [PATCH] Update the section parser to handle the new whitespace-included element parsers. --- src/parser/document.rs | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/parser/document.rs b/src/parser/document.rs index 216b7690..bf5b7262 100644 --- a/src/parser/document.rs +++ b/src/parser/document.rs @@ -107,36 +107,23 @@ fn section<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, Sec })); let element_matcher = parser_with_context!(element)(&parser_context); let exit_matcher = parser_with_context!(exit_matcher_parser)(&parser_context); - let trailing_matcher = parser_with_context!(element_trailing_whitespace)(&parser_context); let (remaining, (children, _exit_contents)) = verify( - many_till( - tuple(( - element_matcher, - opt(map(trailing_matcher, Element::TrailingWhitespace)), - )), - exit_matcher, - ), + many_till(element_matcher, exit_matcher), |(children, _exit_contents)| !children.is_empty(), )(input)?; - let flattened_children: Vec = children - .into_iter() - .flat_map(|tpl| { - let mut flattened_children = Vec::with_capacity(2); - flattened_children.push(tpl.0); - if let Some(bar) = tpl.1 { - flattened_children.push(bar); - } - flattened_children.into_iter() - }) - .collect(); + + // Check if a parent exit matcher is causing the exit + exit_matcher_parser(context, remaining)?; + + let (remaining, _trailing_ws) = if context.should_consume_trailing_whitespace() { + opt(parser_with_context!(element_trailing_whitespace)(&parser_context))(remaining)? + + } else { + (remaining, None) + }; + let source = get_consumed(input, remaining); - Ok(( - remaining, - Section { - source, - children: flattened_children, - }, - )) + Ok((remaining, Section { source, children })) } #[tracing::instrument(ret, level = "debug")]