diff --git a/src/parser/element_parser.rs b/src/parser/element_parser.rs index a7400ecb..1188a30b 100644 --- a/src/parser/element_parser.rs +++ b/src/parser/element_parser.rs @@ -89,7 +89,15 @@ fn _element<'b, 'g, 'r, 's>( Element::DynamicBlock ); - let footnote_definition_matcher = parser_with_context!(footnote_definition)(context); + ak_element!( + footnote_definition, + &mut affiliated_keywords, + post_affiliated_keywords_input, + context, + input, + Element::FootnoteDefinition + ); + let comment_matcher = parser_with_context!(comment)(context); let drawer_matcher = parser_with_context!(drawer)(context); let table_matcher = parser_with_context!(org_mode_table)(context); @@ -113,7 +121,6 @@ fn _element<'b, 'g, 'r, 's>( let _enter = span.enter(); opt(alt(( - map(footnote_definition_matcher, Element::FootnoteDefinition), map(comment_matcher, Element::Comment), map(drawer_matcher, Element::Drawer), map(table_matcher, Element::Table), diff --git a/src/parser/footnote_definition.rs b/src/parser/footnote_definition.rs index 1ce9aef9..8b669cd1 100644 --- a/src/parser/footnote_definition.rs +++ b/src/parser/footnote_definition.rs @@ -33,21 +33,26 @@ use crate::parser::util::immediate_in_section; use crate::parser::util::maybe_consume_trailing_whitespace; use crate::parser::util::start_of_line; use crate::types::FootnoteDefinition; +use crate::types::Keyword; #[cfg_attr( feature = "tracing", tracing::instrument(ret, level = "debug", skip(context)) )] -pub(crate) fn footnote_definition<'b, 'g, 'r, 's>( +pub(crate) fn footnote_definition<'b, 'g, 'r, 's, AK>( + affiliated_keywords: AK, + remaining: OrgSource<'s>, context: RefContext<'b, 'g, 'r, 's>, input: OrgSource<'s>, -) -> Res, FootnoteDefinition<'s>> { +) -> Res, FootnoteDefinition<'s>> +where + AK: IntoIterator>, +{ if immediate_in_section(context, "footnote definition") { return Err(nom::Err::Error(CustomError::MyError(MyError( "Cannot nest objects of the same element".into(), )))); } - let (remaining, affiliated_keywords) = many0(affiliated_keyword)(input)?; start_of_line(remaining)?; // Cannot be indented. let (remaining, (_, lbl, _, _, _)) = tuple((