From 29c03c665553d2a98d021473ce77afed1218da93 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Fri, 21 Apr 2023 22:49:00 -0400 Subject: [PATCH] Disallowing begin blocks for keywords makes some of the tests pass. --- build.rs | 4 +--- src/parser/keyword.rs | 6 +++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/build.rs b/build.rs index af9f430..9575ccd 100644 --- a/build.rs +++ b/build.rs @@ -71,9 +71,7 @@ use organic::parser::sexp::sexp_with_padding; fn is_expect_fail(name: &str) -> Option<&str> { match name { "drawer_drawer_with_headline_inside" => Some("Apparently lines with :end: become their own paragraph. This odd behavior needs to be investigated more."), - // "element_container_priority_drawer_dynamic_block" => Some("Keyword needs to be implemented."), - "element_container_priority_dynamic_block_dynamic_block" => Some("Keyword needs to be implemented."), - "element_container_priority_footnote_definition_dynamic_block" => Some("Keyword needs to be implemented."), + // "element_container_priority_footnote_definition_dynamic_block" => Some("Keyword needs to be implemented."), "element_container_priority_greater_block_dynamic_block" => Some("Keyword needs to be implemented."), "element_container_priority_section_dynamic_block" => Some("Keyword needs to be implemented."), _ => None, diff --git a/src/parser/keyword.rs b/src/parser/keyword.rs index a4188e7..0581132 100644 --- a/src/parser/keyword.rs +++ b/src/parser/keyword.rs @@ -1,11 +1,13 @@ use nom::branch::alt; use nom::bytes::complete::is_not; use nom::bytes::complete::tag; +use nom::bytes::complete::tag_no_case; use nom::character::complete::line_ending; use nom::character::complete::space0; use nom::character::complete::space1; use nom::combinator::eof; -use nom::combinator::opt; +use nom::combinator::not; +use nom::combinator::peek; use nom::combinator::recognize; use nom::sequence::tuple; @@ -21,6 +23,8 @@ pub fn keyword<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, let (remaining, rule) = recognize(tuple(( space0, tag("#+"), + not(peek(tag_no_case("call"))), + not(peek(tag_no_case("begin"))), is_not(" \t\r\n:"), tag(":"), alt((recognize(tuple((space1, is_not("\r\n")))), space0)),