From 30412361e1447b2c0b74aa1cb2c452a200db68ad Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Fri, 15 Dec 2023 19:19:58 -0500 Subject: [PATCH] Fix handling fixed width area post-blank inside a list. --- .../fixed_width_area/list_post_blank.org | 6 +++++ src/parser/fixed_width_area.rs | 15 ++++++++---- src/parser/util.rs | 23 ------------------- 3 files changed, 17 insertions(+), 27 deletions(-) create mode 100644 org_mode_samples/lesser_element/fixed_width_area/list_post_blank.org diff --git a/org_mode_samples/lesser_element/fixed_width_area/list_post_blank.org b/org_mode_samples/lesser_element/fixed_width_area/list_post_blank.org new file mode 100644 index 00000000..1d5bb9de --- /dev/null +++ b/org_mode_samples/lesser_element/fixed_width_area/list_post_blank.org @@ -0,0 +1,6 @@ +1. foo + #+begin_src text + + #+end_src + +2. baz diff --git a/src/parser/fixed_width_area.rs b/src/parser/fixed_width_area.rs index 10abff20..bbd44b01 100644 --- a/src/parser/fixed_width_area.rs +++ b/src/parser/fixed_width_area.rs @@ -14,7 +14,7 @@ use nom::InputTake; use super::affiliated_keyword::parse_affiliated_keywords; use super::org_source::OrgSource; -use super::util::maybe_consume_trailing_whitespace_if_not_exiting_mid_line; +use super::util::maybe_consume_trailing_whitespace_if_not_exiting; use super::util::org_line_ending; use crate::context::parser_with_context; use crate::context::RefContext; @@ -48,8 +48,11 @@ where ), ))(remaining)?; - let (remaining, post_blank) = - maybe_consume_trailing_whitespace_if_not_exiting_mid_line(context, remaining)?; + let post_blank_begin = remaining; + let (remaining, _first_line_break) = org_line_ending(remaining)?; + let (remaining, _additional_post_blank) = + maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; + let post_blank = get_consumed(post_blank_begin, remaining); let source = get_consumed(input, remaining); let mut value = Vec::with_capacity(remaining_lines.len() + 1); value.push(Into::<&str>::into(first_line)); @@ -63,7 +66,11 @@ where affiliated_keywords, ), value, - post_blank: post_blank.map(Into::<&str>::into), + post_blank: if post_blank.len() > 0 { + Some(Into::<&str>::into(post_blank)) + } else { + None + }, }, )) } diff --git a/src/parser/util.rs b/src/parser/util.rs index 3ed86d26..29523f2b 100644 --- a/src/parser/util.rs +++ b/src/parser/util.rs @@ -72,13 +72,6 @@ fn element_trailing_whitespace<'s>(input: OrgSource<'s>) -> Res, O alt((eof, recognize(many0(blank_line))))(input) } -#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] -fn element_trailing_whitespace_mid_line<'s>( - input: OrgSource<'s>, -) -> Res, OrgSource<'s>> { - alt((eof, recognize(many0(blank_line))))(input) -} - #[cfg_attr( feature = "tracing", tracing::instrument(ret, level = "debug", skip(context)) @@ -121,22 +114,6 @@ pub(crate) fn maybe_consume_trailing_whitespace_if_not_exiting<'b, 'g, 'r, 's>( } } -#[cfg_attr( - feature = "tracing", - tracing::instrument(ret, level = "debug", skip(context)) -)] -pub(crate) fn maybe_consume_trailing_whitespace_if_not_exiting_mid_line<'b, 'g, 'r, 's>( - context: RefContext<'b, 'g, 'r, 's>, - input: OrgSource<'s>, -) -> Res, Option>> { - if context.should_consume_trailing_whitespace() && exit_matcher_parser(context, input).is_err() - { - Ok(opt(element_trailing_whitespace_mid_line)(input)?) - } else { - Ok((input, None)) - } -} - #[cfg_attr( feature = "tracing", tracing::instrument(ret, level = "debug", skip(context))