diff --git a/src/parser/keyword.rs b/src/parser/keyword.rs index 499dc088..971ab09a 100644 --- a/src/parser/keyword.rs +++ b/src/parser/keyword.rs @@ -1,11 +1,11 @@ use nom::branch::alt; +use nom::bytes::complete::is_not; use nom::bytes::complete::tag; use nom::character::complete::line_ending; use nom::character::complete::space0; +use nom::character::complete::space1; use nom::combinator::eof; use nom::combinator::recognize; -use nom::combinator::verify; -use nom::multi::many1_count; use nom::sequence::tuple; use super::Context; @@ -16,10 +16,14 @@ use crate::parser::Keyword; #[tracing::instrument(ret, level = "debug")] pub fn keyword<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, Keyword<'s>> { start_of_line(context, input)?; + // TODO: When key is a member of org-element-parsed-keywords, value can contain the standard set objects, excluding footnote references. let (remaining, rule) = recognize(tuple(( space0, - verify(many1_count(tag("-")), |dashes| *dashes >= 5), - space0, + tag("#+"), + is_not(" \t\r\n:"), + tag(":"), + space1, + is_not("\r\n"), alt((line_ending, eof)), )))(input)?; Ok((remaining, Keyword { source: rule }))