diff --git a/org_mode_samples/greater_element/greater_block/with_params.org b/org_mode_samples/greater_element/greater_block/with_params.org new file mode 100644 index 00000000..86ce0203 --- /dev/null +++ b/org_mode_samples/greater_element/greater_block/with_params.org @@ -0,0 +1,3 @@ +#+begin_defun foo bar baz +lorem +#+end_defun diff --git a/src/parser/greater_block.rs b/src/parser/greater_block.rs index 97a00c3d..961da9ea 100644 --- a/src/parser/greater_block.rs +++ b/src/parser/greater_block.rs @@ -1,6 +1,7 @@ use nom::branch::alt; use nom::bytes::complete::is_not; use nom::bytes::complete::tag_no_case; +use nom::character::complete::anychar; use nom::character::complete::line_ending; use nom::character::complete::space0; use nom::character::complete::space1; @@ -8,6 +9,8 @@ use nom::combinator::consumed; use nom::combinator::eof; use nom::combinator::not; use nom::combinator::opt; +use nom::combinator::peek; +use nom::combinator::recognize; use nom::combinator::verify; use nom::multi::many0; use nom::multi::many_till; @@ -16,6 +19,7 @@ use nom::sequence::tuple; use super::org_source::OrgSource; use super::util::in_section; +use super::util::org_line_ending; use crate::context::parser_with_context; use crate::context::ContextElement; use crate::context::ContextMatcher; @@ -64,7 +68,7 @@ pub(crate) fn greater_block<'b, 'g, 'r, 's>( } let exit_with_name = greater_block_end(name.into()); let (remaining, parameters) = opt(tuple((space1, parameters)))(remaining)?; - let (remaining, _nl) = line_ending(remaining)?; + let (remaining, _nl) = tuple((space0, line_ending))(remaining)?; let contexts = [ ContextElement::ConsumeTrailingWhitespace(true), ContextElement::Context(context_name.as_str()), @@ -123,7 +127,7 @@ fn name<'s>(input: OrgSource<'s>) -> Res, OrgSource<'s>> { #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] fn parameters<'s>(input: OrgSource<'s>) -> Res, OrgSource<'s>> { - is_not("\r\n")(input) + recognize(many_till(anychar, peek(tuple((space0, line_ending)))))(input) } fn greater_block_end<'c>(name: &'c str) -> impl ContextMatcher + 'c {