Do not match keyword name if a longer keyword name would match.
This commit is contained in:
parent
e7c3c7aab6
commit
f5dcacc79d
@ -9,6 +9,7 @@ use nom::character::complete::one_of;
|
|||||||
use nom::character::complete::space0;
|
use nom::character::complete::space0;
|
||||||
use nom::combinator::consumed;
|
use nom::combinator::consumed;
|
||||||
use nom::combinator::eof;
|
use nom::combinator::eof;
|
||||||
|
use nom::combinator::map;
|
||||||
use nom::combinator::not;
|
use nom::combinator::not;
|
||||||
use nom::combinator::peek;
|
use nom::combinator::peek;
|
||||||
use nom::combinator::recognize;
|
use nom::combinator::recognize;
|
||||||
@ -22,7 +23,6 @@ use super::org_source::OrgSource;
|
|||||||
use super::util::get_consumed;
|
use super::util::get_consumed;
|
||||||
use super::util::maybe_consume_trailing_whitespace_if_not_exiting;
|
use super::util::maybe_consume_trailing_whitespace_if_not_exiting;
|
||||||
use crate::context::parser_with_context;
|
use crate::context::parser_with_context;
|
||||||
use crate::context::Matcher;
|
|
||||||
use crate::context::RefContext;
|
use crate::context::RefContext;
|
||||||
use crate::error::CustomError;
|
use crate::error::CustomError;
|
||||||
use crate::error::MyError;
|
use crate::error::MyError;
|
||||||
@ -152,12 +152,7 @@ fn affiliated_key<'b, 'g, 'r, 's>(
|
|||||||
input: OrgSource<'s>,
|
input: OrgSource<'s>,
|
||||||
) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
||||||
alt((
|
alt((
|
||||||
recognize(tuple((
|
|
||||||
parser_with_context!(dual_affiliated_key)(context),
|
parser_with_context!(dual_affiliated_key)(context),
|
||||||
tag("["),
|
|
||||||
optval,
|
|
||||||
tag("]"),
|
|
||||||
))),
|
|
||||||
parser_with_context!(plain_affiliated_key)(context),
|
parser_with_context!(plain_affiliated_key)(context),
|
||||||
export_keyword,
|
export_keyword,
|
||||||
))(input)
|
))(input)
|
||||||
@ -169,7 +164,13 @@ fn plain_affiliated_key<'b, 'g, 'r, 's>(
|
|||||||
input: OrgSource<'s>,
|
input: OrgSource<'s>,
|
||||||
) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
||||||
for keyword in context.get_global_settings().element_affiliated_keywords {
|
for keyword in context.get_global_settings().element_affiliated_keywords {
|
||||||
let result = tag_no_case::<_, _, CustomError<_>>(*keyword)(input);
|
let result = map(
|
||||||
|
tuple((
|
||||||
|
tag_no_case::<_, _, CustomError<_>>(*keyword),
|
||||||
|
peek(tag(":")),
|
||||||
|
)),
|
||||||
|
|(key, _)| key,
|
||||||
|
)(input);
|
||||||
match result {
|
match result {
|
||||||
Ok((remaining, ent)) => {
|
Ok((remaining, ent)) => {
|
||||||
return Ok((remaining, ent));
|
return Ok((remaining, ent));
|
||||||
@ -189,7 +190,13 @@ fn dual_affiliated_key<'b, 'g, 'r, 's>(
|
|||||||
input: OrgSource<'s>,
|
input: OrgSource<'s>,
|
||||||
) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
||||||
for keyword in context.get_global_settings().element_dual_keywords {
|
for keyword in context.get_global_settings().element_dual_keywords {
|
||||||
let result = tag_no_case::<_, _, CustomError<_>>(*keyword)(input);
|
let result = recognize(tuple((
|
||||||
|
tag_no_case::<_, _, CustomError<_>>(*keyword),
|
||||||
|
tag("["),
|
||||||
|
optval,
|
||||||
|
tag("]"),
|
||||||
|
peek(tag(":")),
|
||||||
|
)))(input);
|
||||||
match result {
|
match result {
|
||||||
Ok((remaining, ent)) => {
|
Ok((remaining, ent)) => {
|
||||||
return Ok((remaining, ent));
|
return Ok((remaining, ent));
|
||||||
|
Loading…
Reference in New Issue
Block a user