Really start from scratch.
This commit is contained in:
parent
6f416f6997
commit
1487f7d96b
@ -7,29 +7,41 @@ use nom::error::VerboseError;
|
|||||||
use nom::IResult;
|
use nom::IResult;
|
||||||
use nom::Parser;
|
use nom::Parser;
|
||||||
|
|
||||||
type ContextReference<'r, T> = Option<&'r ContextLayer<'r, T>>;
|
// type ContextReference<'r, T> = Option<ContextLayer<'r, T>>;
|
||||||
type MatcherRef = dyn for<'s> FnMut(&'s str) -> IResult<&'s str, &'s str, VerboseError<&'s str>>;
|
// type MatcherRef = dyn for<'s> FnMut(&'s str) -> IResult<&'s str, &'s str, VerboseError<&'s str>>;
|
||||||
|
|
||||||
pub struct ContextLayer<'r, T> {
|
// pub struct ContextLayer<'r, T> {
|
||||||
data: T,
|
// data: T,
|
||||||
parent: ContextReference<'r, T>,
|
// parent: ContextReference<'r, T>,
|
||||||
}
|
// }
|
||||||
|
|
||||||
pub struct TestContext<'r, T> {
|
// pub struct TestContext<'r, T> {
|
||||||
head: ContextReference<'r, T>,
|
// head: ContextReference<'r, T>,
|
||||||
}
|
// }
|
||||||
|
|
||||||
pub struct ContextData<'r> {
|
// pub struct ContextData<'r> {
|
||||||
fail_matcher: ChainBehavior<'r>,
|
// fail_matcher: ChainBehavior<'r>,
|
||||||
}
|
// }
|
||||||
|
|
||||||
impl<'r> TestContext<'r, ContextData<'r>> {
|
// impl<'r> TestContext<'r, ContextData<'r>> {
|
||||||
pub fn new() -> Self {
|
// pub fn new() -> Self {
|
||||||
TestContext { head: None }
|
// TestContext { head: None }
|
||||||
}
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
enum ChainBehavior<'r> {
|
// pub fn with_additional_fail_matcher<'subr>(
|
||||||
AndParent(Option<&'r MatcherRef>),
|
// &self,
|
||||||
IgnoreParent(Option<&'r MatcherRef>),
|
// additional_fail_matcher: &'subr MatcherRef,
|
||||||
}
|
// ) -> TestContext<'subr, ContextData<'subr>> {
|
||||||
|
// // TestContext {
|
||||||
|
// // head: Some(
|
||||||
|
|
||||||
|
// // )
|
||||||
|
// // }
|
||||||
|
// todo!()
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// enum ChainBehavior<'r> {
|
||||||
|
// AndParent(Option<&'r MatcherRef>),
|
||||||
|
// IgnoreParent(Option<&'r MatcherRef>),
|
||||||
|
// }
|
||||||
|
@ -26,7 +26,6 @@ use nom::multi::many_till;
|
|||||||
use nom::sequence::tuple;
|
use nom::sequence::tuple;
|
||||||
use nom::IResult;
|
use nom::IResult;
|
||||||
|
|
||||||
use super::nom_context::TestContext;
|
|
||||||
use super::parser_with_context::parser_with_context;
|
use super::parser_with_context::parser_with_context;
|
||||||
use super::text_element_parser::paragraph;
|
use super::text_element_parser::paragraph;
|
||||||
|
|
||||||
@ -137,11 +136,11 @@ pub fn paragraph_end(input: &str) -> Res<&str, &str> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn document(input: &str) -> Res<&str, Vec<(Vec<TextElement>, &str)>> {
|
pub fn document(input: &str) -> Res<&str, Vec<(Vec<TextElement>, &str)>> {
|
||||||
let initial_context = TestContext::new();
|
// let initial_context = TestContext::new();
|
||||||
let paragraph_context = initial_context;
|
// let paragraph_context = initial_context;
|
||||||
// let paragraph_context =
|
// let paragraph_context =
|
||||||
// initial_context.with_additional_fail_matcher(Rc::new(RefCell::new(paragraph_end)));
|
// initial_context.with_additional_fail_matcher(Rc::new(RefCell::new(paragraph_end)));
|
||||||
// let initial_context = NomContext::new(Rc::new(RefCell::new(paragraph_end)));
|
// let initial_context = NomContext::new(Rc::new(RefCell::new(paragraph_end)));
|
||||||
let ret = many1(parser_with_context!(paragraph)(¶graph_context))(input);
|
let ret = many1(parser_with_context!(paragraph)(10))(input);
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,6 @@ use std::rc::Rc;
|
|||||||
use crate::parser::parser_with_context::parser_with_context;
|
use crate::parser::parser_with_context::parser_with_context;
|
||||||
use crate::parser::text::paragraph_end;
|
use crate::parser::text::paragraph_end;
|
||||||
|
|
||||||
use super::nom_context::ContextData;
|
|
||||||
use super::nom_context::TestContext;
|
|
||||||
use super::text::bold_end;
|
use super::text::bold_end;
|
||||||
use super::text::bold_start;
|
use super::text::bold_start;
|
||||||
use super::text::line_break;
|
use super::text::line_break;
|
||||||
@ -25,10 +23,7 @@ use nom::multi::many_till;
|
|||||||
use nom::sequence::tuple;
|
use nom::sequence::tuple;
|
||||||
use nom::IResult;
|
use nom::IResult;
|
||||||
|
|
||||||
fn flat_text_element<'s, 'r>(
|
fn flat_text_element<'s, 'r>(i: &'s str, context: u32) -> Res<&'s str, TextElement<'s>> {
|
||||||
i: &'s str,
|
|
||||||
context: &'r TestContext<ContextData>,
|
|
||||||
) -> Res<&'s str, TextElement<'s>> {
|
|
||||||
// context.not_matching_fail(i)?;
|
// context.not_matching_fail(i)?;
|
||||||
|
|
||||||
alt((
|
alt((
|
||||||
@ -41,10 +36,7 @@ fn flat_text_element<'s, 'r>(
|
|||||||
))(i)
|
))(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn flat_bold<'s, 'r>(
|
fn flat_bold<'s, 'r>(i: &'s str, context: u32) -> Res<&'s str, TextElement<'s>> {
|
||||||
i: &'s str,
|
|
||||||
context: &'r TestContext<ContextData>,
|
|
||||||
) -> Res<&'s str, TextElement<'s>> {
|
|
||||||
// let fail_matcher = recognize(bold_end);
|
// let fail_matcher = recognize(bold_end);
|
||||||
// let new_context = context.with_additional_fail_matcher(Rc::new(RefCell::new(paragraph_end)));
|
// let new_context = context.with_additional_fail_matcher(Rc::new(RefCell::new(paragraph_end)));
|
||||||
// let new_context =
|
// let new_context =
|
||||||
@ -55,7 +47,7 @@ fn flat_bold<'s, 'r>(
|
|||||||
|
|
||||||
pub fn paragraph<'s, 'r>(
|
pub fn paragraph<'s, 'r>(
|
||||||
i: &'s str,
|
i: &'s str,
|
||||||
context: &'r TestContext<ContextData>,
|
context: u32,
|
||||||
) -> Res<&'s str, (Vec<TextElement<'s>>, &'s str)> {
|
) -> Res<&'s str, (Vec<TextElement<'s>>, &'s str)> {
|
||||||
let text_element_parser = parser_with_context!(flat_text_element)(context);
|
let text_element_parser = parser_with_context!(flat_text_element)(context);
|
||||||
many_till(text_element_parser, paragraph_end)(i)
|
many_till(text_element_parser, paragraph_end)(i)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user