For some reason it does not work with FnMut for additional fail matchers.
This commit is contained in:
parent
661ccfb30c
commit
d1460fed95
@ -7,17 +7,33 @@ use nom::error::VerboseError;
|
|||||||
use nom::IResult;
|
use nom::IResult;
|
||||||
use nom::Parser;
|
use nom::Parser;
|
||||||
|
|
||||||
pub struct TestContext<T> {
|
pub struct ContextLayer<T> {
|
||||||
head: ContextReference<T>,
|
data: T,
|
||||||
|
parent: Option<Rc<ContextLayer<T>>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> ContextLayer<T> {
|
||||||
|
pub fn with_new_layer(self: Rc<Self>, new_layer: T) -> ContextLayer<T> {
|
||||||
|
ContextLayer {
|
||||||
|
data: new_layer,
|
||||||
|
parent: Some(self),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ContextReference<T> = Option<Rc<ContextLayer<T>>>;
|
type ContextReference<T> = Option<Rc<ContextLayer<T>>>;
|
||||||
|
|
||||||
struct ContextLayer<T> {
|
pub struct TestContext<T> {
|
||||||
data: T,
|
head: ContextReference<T>,
|
||||||
parent: ContextReference<T>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// type ContextReference<T> = Option<Rc<ContextLayer<T>>>;
|
||||||
|
|
||||||
|
// struct ContextLayer<T> {
|
||||||
|
// data: T,
|
||||||
|
// parent: ContextReference<T>,
|
||||||
|
// }
|
||||||
|
|
||||||
pub struct ContextData {
|
pub struct ContextData {
|
||||||
fail_matcher: ChainBehavior,
|
fail_matcher: ChainBehavior,
|
||||||
}
|
}
|
||||||
@ -46,7 +62,8 @@ impl TestContext<ContextData> {
|
|||||||
///// OLD
|
///// OLD
|
||||||
/////
|
/////
|
||||||
|
|
||||||
type MatcherRef = Rc<RefCell<dyn FnMut(&str) -> IResult<&str, &str, VerboseError<&str>>>>;
|
type MatcherRef =
|
||||||
|
Rc<RefCell<dyn for<'s> FnMut(&'s str) -> IResult<&'s str, &'s str, VerboseError<&'s str>>>>;
|
||||||
|
|
||||||
struct FailChecker<'r>(&'r NomContext<'r>);
|
struct FailChecker<'r>(&'r NomContext<'r>);
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ fn flat_bold<'s, 'r>(
|
|||||||
i: &'s str,
|
i: &'s str,
|
||||||
context: &'r TestContext<ContextData>,
|
context: &'r TestContext<ContextData>,
|
||||||
) -> Res<&'s str, TextElement<'s>> {
|
) -> Res<&'s str, TextElement<'s>> {
|
||||||
let new_context =
|
let fail_matcher = recognize(bold_end);
|
||||||
context.with_additional_fail_matcher(Rc::new(RefCell::new(recognize(bold_end))));
|
let new_context = context.with_additional_fail_matcher(Rc::new(RefCell::new(paragraph_end)));
|
||||||
// let new_context = context.without_bold(Rc::new(RefCell::new(recognize(bold_end))));
|
// let new_context = context.without_bold(Rc::new(RefCell::new(recognize(bold_end))));
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user