compare_properties example block.

This commit is contained in:
Tom Alexander
2023-10-10 00:43:02 -04:00
parent ec98e1c3c5
commit bdfa050ee3
3 changed files with 194 additions and 160 deletions

View File

@@ -16,6 +16,7 @@ use nom::combinator::verify;
use nom::multi::many0;
use nom::multi::many_till;
use nom::sequence::tuple;
use nom::InputTake;
use super::keyword::affiliated_keyword;
use super::org_source::OrgSource;
@@ -160,7 +161,20 @@ pub(crate) fn example_block<'b, 'g, 'r, 's>(
) -> Res<OrgSource<'s>, ExampleBlock<'s>> {
let (remaining, affiliated_keywords) = many0(affiliated_keyword)(input)?;
let (remaining, _) = lesser_block_begin("example")(context, remaining)?;
let (remaining, parameters) = opt(tuple((space1, example_switches)))(remaining)?;
let (remaining, parameters) = opt(alt((
map(tuple((space1, example_switches)), |(_, switches)| switches),
map(space1, |ws: OrgSource<'_>| {
let source = ws.take(0);
ExampleSrcSwitches {
source: source.into(),
number_lines: None,
retain_labels: RetainLabels::Yes,
preserve_indent: None,
use_labels: true,
label_format: None,
}
}),
)))(remaining)?;
let (remaining, _nl) = recognize(tuple((space0, line_ending)))(remaining)?;
let lesser_block_end_specialized = lesser_block_end("example");
let contexts = [
@@ -174,7 +188,6 @@ pub(crate) fn example_block<'b, 'g, 'r, 's>(
let parser_context = context.with_additional_node(&contexts[0]);
let parser_context = parser_context.with_additional_node(&contexts[1]);
let parser_context = parser_context.with_additional_node(&contexts[2]);
let parameters = parameters.map(|(_, parameters)| parameters);
let (remaining, contents) = content(&parser_context, remaining)?;
let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?;
@@ -185,11 +198,7 @@ pub(crate) fn example_block<'b, 'g, 'r, 's>(
let (switches, number_lines, preserve_indent, retain_labels, use_labels, label_format) = {
if let Some(parameters) = parameters {
(
if parameters.source.len() == 0 {
None
} else {
Some(parameters.source)
},
Some(parameters.source),
parameters.number_lines,
parameters.preserve_indent,
parameters.retain_labels,