From e97cf6630f18fefa7032af2e6b4cab481d848194 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Fri, 21 Apr 2023 23:54:54 -0400 Subject: [PATCH] Move consuming the trailing whitespace up to the element matchers. --- src/parser/clock.rs | 3 --- src/parser/comment.rs | 3 --- src/parser/diary_sexp.rs | 3 --- src/parser/drawer.rs | 2 -- src/parser/dynamic_block.rs | 3 --- src/parser/element_parser.rs | 17 ++++++++++++++++- src/parser/fixed_width_area.rs | 3 --- src/parser/footnote_definition.rs | 3 --- src/parser/greater_block.rs | 5 +---- src/parser/lesser_block.rs | 15 --------------- src/parser/paragraph.rs | 3 --- src/parser/plain_list.rs | 3 --- src/parser/table.rs | 2 -- 13 files changed, 17 insertions(+), 48 deletions(-) diff --git a/src/parser/clock.rs b/src/parser/clock.rs index d15e69a..3043c8b 100644 --- a/src/parser/clock.rs +++ b/src/parser/clock.rs @@ -31,9 +31,6 @@ pub fn clock<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, C parser_with_context!(inactive_timestamp)(context), ))(remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok((remaining, Clock { source })) } diff --git a/src/parser/comment.rs b/src/parser/comment.rs index 80d5651..9dd5328 100644 --- a/src/parser/comment.rs +++ b/src/parser/comment.rs @@ -38,9 +38,6 @@ pub fn comment<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, let (remaining, _remaining_lines) = many0(preceded(not(exit_matcher), comment_line_matcher))(remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok((remaining, Comment { source })) } diff --git a/src/parser/diary_sexp.rs b/src/parser/diary_sexp.rs index 3cf0c43..bb4abd7 100644 --- a/src/parser/diary_sexp.rs +++ b/src/parser/diary_sexp.rs @@ -24,9 +24,6 @@ pub fn diary_sexp<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s s let (remaining, _trailing_whitespace) = recognize(tuple((space0, alt((line_ending, eof)))))(remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok((remaining, DiarySexp { source })) } diff --git a/src/parser/drawer.rs b/src/parser/drawer.rs index fa5db04..4e6765a 100644 --- a/src/parser/drawer.rs +++ b/src/parser/drawer.rs @@ -69,8 +69,6 @@ pub fn drawer<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, }; let (remaining, _end) = drawer_end(&parser_context, remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; let source = get_consumed(input, remaining); Ok(( diff --git a/src/parser/dynamic_block.rs b/src/parser/dynamic_block.rs index 1cbe4b4..71a401d 100644 --- a/src/parser/dynamic_block.rs +++ b/src/parser/dynamic_block.rs @@ -74,9 +74,6 @@ pub fn dynamic_block<'r, 's>( }; let (remaining, _end) = dynamic_block_end(&parser_context, remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, diff --git a/src/parser/element_parser.rs b/src/parser/element_parser.rs index 04b7466..7a09aff 100644 --- a/src/parser/element_parser.rs +++ b/src/parser/element_parser.rs @@ -16,6 +16,8 @@ use super::lesser_block::src_block; use super::lesser_block::verse_block; use super::paragraph::paragraph; use super::plain_list::plain_list; +use super::util::get_consumed; +use super::util::maybe_consume_trailing_whitespace_if_not_exiting; use super::util::start_of_line; use super::Context; use crate::error::Res; @@ -40,7 +42,14 @@ pub fn paragraph_element<'r, 's>( let paragraph_matcher = parser_with_context!(paragraph)(context); let keyword_matcher = parser_with_context!(keyword)(context); let (remaining, affiliated_keywords) = many0(keyword_matcher)(input)?; - map(paragraph_matcher, Element::Paragraph)(remaining) + let (remaining, element) = map(paragraph_matcher, Element::Paragraph)(remaining)?; + + let (remaining, _trailing_ws) = + maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; + + let source = get_consumed(input, remaining); + + Ok((remaining, element)) } pub fn non_paragraph_element<'r, 's>( context: Context<'r, 's>, @@ -89,5 +98,11 @@ pub fn non_paragraph_element<'r, 's>( map(keyword_matcher, Element::Keyword)(input) } }?; + + let (remaining, _trailing_ws) = + maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; + + let source = get_consumed(input, remaining); + Ok((remaining, element)) } diff --git a/src/parser/fixed_width_area.rs b/src/parser/fixed_width_area.rs index 3a4f28c..ed8853e 100644 --- a/src/parser/fixed_width_area.rs +++ b/src/parser/fixed_width_area.rs @@ -31,9 +31,6 @@ pub fn fixed_width_area<'r, 's>( let (remaining, _remaining_lines) = many0(preceded(not(exit_matcher), fixed_width_area_line_matcher))(remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok((remaining, FixedWidthArea { source })) } diff --git a/src/parser/footnote_definition.rs b/src/parser/footnote_definition.rs index c401b40..faaad70 100644 --- a/src/parser/footnote_definition.rs +++ b/src/parser/footnote_definition.rs @@ -55,9 +55,6 @@ pub fn footnote_definition<'r, 's>( let (remaining, (children, _exit_contents)) = many_till(element_matcher, exit_matcher)(remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, diff --git a/src/parser/greater_block.rs b/src/parser/greater_block.rs index 4a8f896..7727247 100644 --- a/src/parser/greater_block.rs +++ b/src/parser/greater_block.rs @@ -1,7 +1,7 @@ +use super::Context; use crate::error::CustomError; use crate::error::MyError; use crate::error::Res; -use super::Context; use crate::parser::element_parser::element; use crate::parser::exiting::ExitClass; use crate::parser::greater_element::GreaterBlock; @@ -87,9 +87,6 @@ pub fn greater_block<'r, 's>( // Not checking if parent exit matcher is causing exit because the greater_block_end matcher asserts we matched a full greater block - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, diff --git a/src/parser/lesser_block.rs b/src/parser/lesser_block.rs index 7bbdacc..9844286 100644 --- a/src/parser/lesser_block.rs +++ b/src/parser/lesser_block.rs @@ -70,9 +70,6 @@ pub fn verse_block<'r, 's>( }; let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, @@ -111,9 +108,6 @@ pub fn comment_block<'r, 's>( })(remaining)?; let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, @@ -152,9 +146,6 @@ pub fn example_block<'r, 's>( })(remaining)?; let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, @@ -194,9 +185,6 @@ pub fn export_block<'r, 's>( })(remaining)?; let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, @@ -233,9 +221,6 @@ pub fn src_block<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s st })(remaining)?; let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?; - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok(( remaining, diff --git a/src/parser/paragraph.rs b/src/parser/paragraph.rs index b722856..e1b30f4 100644 --- a/src/parser/paragraph.rs +++ b/src/parser/paragraph.rs @@ -39,9 +39,6 @@ pub fn paragraph<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s st // Not checking parent exit matcher because if there are any children matched then we have a valid paragraph. - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok((remaining, Paragraph { source, children })) diff --git a/src/parser/plain_list.rs b/src/parser/plain_list.rs index 9f15933..d5af25c 100644 --- a/src/parser/plain_list.rs +++ b/src/parser/plain_list.rs @@ -134,9 +134,6 @@ pub fn plain_list<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s s )))); } - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; - let source = get_consumed(input, remaining); Ok((remaining, PlainList { source, children })) } diff --git a/src/parser/table.rs b/src/parser/table.rs index 0ac55f3..e8924ef 100644 --- a/src/parser/table.rs +++ b/src/parser/table.rs @@ -51,8 +51,6 @@ pub fn org_mode_table<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<& many_till(org_mode_table_row_matcher, exit_matcher)(input)?; // TODO: Consume trailing formulas - let (remaining, _trailing_ws) = - maybe_consume_trailing_whitespace_if_not_exiting(context, remaining)?; let source = get_consumed(input, remaining); Ok((remaining, Table { source, children }))