Integrate plain list parser into the parser tree.

This commit is contained in:
Tom Alexander
2023-03-27 13:06:41 -04:00
parent 81a9a754de
commit 22a2ed29f1
4 changed files with 49 additions and 31 deletions

View File

@@ -11,6 +11,7 @@ use nom::combinator::verify;
use nom::multi::many0;
use nom::multi::many1;
use nom::multi::many1_count;
use nom::multi::many_till;
use nom::sequence::tuple;
use crate::parser::element::element;
@@ -25,6 +26,7 @@ use super::error::Res;
use super::object::Object;
use super::parser_with_context::parser_with_context;
use super::source::Source;
use super::util::exit_matcher_parser;
use super::util::get_consumed;
use super::util::start_of_line;
use super::util::trailing_whitespace;
@@ -101,7 +103,11 @@ fn section<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, Sec
.with_additional_node(ContextElement::Context("section"));
not(|i| parser_context.check_exit_matcher(i))(input)?;
let element_matcher = parser_with_context!(element)(&parser_context);
let (remaining, children) = many1(element_matcher)(input)?;
let exit_matcher = parser_with_context!(exit_matcher_parser)(&parser_context);
let (remaining, (children, _exit_contents)) = verify(
many_till(element_matcher, exit_matcher),
|(children, _exit_contents)| !children.is_empty(),
)(input)?;
let source = get_consumed(input, remaining);
Ok((remaining, Section { source, children }))
}