Update plain list item tag parser to allow double colon as long as its not the last one on that line.

This commit is contained in:
Tom Alexander 2023-09-11 10:29:15 -04:00
parent 1f11bfa2ec
commit 1561e1e580
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

View File

@ -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>, 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>, 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>,