diff --git a/src/parser/object_parser.rs b/src/parser/object_parser.rs index b119d09..18faf11 100644 --- a/src/parser/object_parser.rs +++ b/src/parser/object_parser.rs @@ -33,7 +33,7 @@ pub fn standard_set_object<'r, 's>( context: Context<'r, 's>, input: OrgSource<'s>, ) -> Res, Object<'s>> { - alt(( + let (remaining, object) = alt(( map(parser_with_context!(timestamp)(context), Object::Timestamp), map(parser_with_context!(subscript)(context), Object::Subscript), map( @@ -82,7 +82,8 @@ pub fn standard_set_object<'r, 's>( map(parser_with_context!(angle_link)(context), Object::AngleLink), map(parser_with_context!(org_macro)(context), Object::OrgMacro), map(parser_with_context!(plain_text)(context), Object::PlainText), - ))(input) + ))(input)?; + Ok((remaining, object)) } #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] @@ -90,7 +91,7 @@ pub fn minimal_set_object<'r, 's>( context: Context<'r, 's>, input: OrgSource<'s>, ) -> Res, Object<'s>> { - alt(( + let (remaining, object) = alt(( map(parser_with_context!(subscript)(context), Object::Subscript), map( parser_with_context!(superscript)(context), @@ -103,7 +104,8 @@ pub fn minimal_set_object<'r, 's>( ), parser_with_context!(text_markup)(context), map(parser_with_context!(plain_text)(context), Object::PlainText), - ))(input) + ))(input)?; + Ok((remaining, object)) } #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] @@ -111,7 +113,7 @@ pub fn any_object_except_plain_text<'r, 's>( context: Context<'r, 's>, input: OrgSource<'s>, ) -> Res, Object<'s>> { - alt(( + let (remaining, object) = alt(( map(parser_with_context!(timestamp)(context), Object::Timestamp), map(parser_with_context!(subscript)(context), Object::Subscript), map( @@ -159,7 +161,8 @@ pub fn any_object_except_plain_text<'r, 's>( map(parser_with_context!(plain_link)(context), Object::PlainLink), map(parser_with_context!(angle_link)(context), Object::AngleLink), map(parser_with_context!(org_macro)(context), Object::OrgMacro), - ))(input) + ))(input)?; + Ok((remaining, object)) } #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] @@ -168,7 +171,7 @@ pub fn regular_link_description_object_set<'r, 's>( input: OrgSource<'s>, ) -> Res, Object<'s>> { // TODO: It can also contain another link, but only when it is a plain or angle link. It can contain square brackets, but not ]] - alt(( + let (remaining, object) = alt(( map( parser_with_context!(export_snippet)(context), Object::ExportSnippet, @@ -187,7 +190,8 @@ pub fn regular_link_description_object_set<'r, 's>( ), map(parser_with_context!(org_macro)(context), Object::OrgMacro), parser_with_context!(minimal_set_object)(context), - ))(input) + ))(input)?; + Ok((remaining, object)) } #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] @@ -195,7 +199,7 @@ pub fn table_cell_set_object<'r, 's>( context: Context<'r, 's>, input: OrgSource<'s>, ) -> Res, Object<'s>> { - alt(( + let (remaining, object) = alt(( map(parser_with_context!(citation)(context), Object::Citation), map( parser_with_context!(export_snippet)(context), @@ -220,5 +224,6 @@ pub fn table_cell_set_object<'r, 's>( map(parser_with_context!(target)(context), Object::Target), map(parser_with_context!(timestamp)(context), Object::Timestamp), parser_with_context!(minimal_set_object)(context), - ))(input) + ))(input)?; + Ok((remaining, object)) } diff --git a/src/parser/util.rs b/src/parser/util.rs index 12f3f25..484a41d 100644 --- a/src/parser/util.rs +++ b/src/parser/util.rs @@ -155,3 +155,16 @@ pub fn not_yet_implemented() -> Res, ()> { "Not implemented yet.".into(), )))); } + +#[allow(dead_code)] +#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] +/// Text from the current point until the next line break or end of file +/// +/// Useful for debugging. +pub fn text_until_eol<'r, 's>( + input: OrgSource<'s>, +) -> Result<&'s str, nom::Err>>> { + let line = recognize(many_till(anychar, alt((line_ending, eof))))(input) + .map(|(_remaining, line)| Into::<&str>::into(line))?; + Ok(line.trim()) +}