From 1561e1e580d6ba00b4c7274c67286f4baee5a814 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 11 Sep 2023 10:29:15 -0400 Subject: [PATCH] Update plain list item tag parser to allow double colon as long as its not the last one on that line. --- src/parser/plain_list.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/parser/plain_list.rs b/src/parser/plain_list.rs index 73c92d5..288088b 100644 --- a/src/parser/plain_list.rs +++ b/src/parser/plain_list.rs @@ -1,5 +1,6 @@ use nom::branch::alt; use nom::bytes::complete::tag; +use nom::character::complete::anychar; use nom::character::complete::digit1; use nom::character::complete::line_ending; use nom::character::complete::one_of; @@ -314,7 +315,7 @@ fn item_tag<'b, 'g, 'r, 's>( ), |(children, _exit_contents)| !children.is_empty(), )(input)?; - let (remaining, _) = tuple((one_of(" \t"), tag("::")))(remaining)?; + let (remaining, _) = item_tag_divider(remaining)?; Ok((remaining, children)) } @@ -325,14 +326,22 @@ fn item_tag_end<'b, 'g, 'r, 's>( ) -> Res, OrgSource<'s>> { alt(( recognize(tuple(( - one_of(" \t"), - tag("::"), - alt((recognize(one_of(" \t")), line_ending, eof)), + item_tag_divider, + opt(tuple(( + peek(one_of(" \t")), + many_till(anychar, peek(alt((item_tag_divider, line_ending, eof)))), + ))), + alt((line_ending, eof)), ))), line_ending, ))(input) } +#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] +fn item_tag_divider<'s>(input: OrgSource<'s>) -> Res, OrgSource<'s>> { + recognize(tuple((one_of(" \t"), tag("::"))))(input) +} + #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] fn item_tag_post_gap<'b, 'g, 'r, 's>( context: RefContext<'b, 'g, 'r, 's>,