Fix comparing key and mark prefix/suffix as optional.

This commit is contained in:
Tom Alexander
2023-10-09 15:41:21 -04:00
parent f6155ecf93
commit 8a0f9d4540
3 changed files with 40 additions and 20 deletions

View File

@@ -1,6 +1,7 @@
use nom::branch::alt;
use nom::bytes::complete::tag;
use nom::character::complete::anychar;
use nom::combinator::map;
use nom::combinator::not;
use nom::combinator::opt;
use nom::combinator::recognize;
@@ -56,18 +57,22 @@ pub(crate) fn citation_reference_key<'b, 'g, 'r, 's>(
context: RefContext<'b, 'g, 'r, 's>,
input: OrgSource<'s>,
) -> Res<OrgSource<'s>, OrgSource<'s>> {
let (remaining, source) = recognize(tuple((
tag("@"),
many1(verify(
preceded(
not(parser_with_context!(exit_matcher_parser)(context)),
anychar,
),
|c| {
WORD_CONSTITUENT_CHARACTERS.contains(*c) || "-.:?~`'/*@+|(){}<>&_^$#%~".contains(*c)
},
let (remaining, source) = map(
tuple((
tag("@"),
recognize(many1(verify(
preceded(
not(parser_with_context!(exit_matcher_parser)(context)),
anychar,
),
|c| {
WORD_CONSTITUENT_CHARACTERS.contains(*c)
|| "-.:?~`'/*@+|(){}<>&_^$#%~".contains(*c)
},
))),
)),
)))(input)?;
|(_, key)| key,
)(input)?;
Ok((remaining, source))
}