Weird lifetime issue.
This commit is contained in:
parent
11cf24a500
commit
ff65776607
@ -39,12 +39,12 @@ use nom::Parser;
|
|||||||
use tracing::instrument;
|
use tracing::instrument;
|
||||||
use tracing::trace;
|
use tracing::trace;
|
||||||
|
|
||||||
type UnboundMatcher<'r, I, O, E> = dyn for<'s> Fn(Context<'r>, I) -> IResult<I, O, E>;
|
type UnboundMatcher<'r, I, O, E> = dyn Fn(Context<'r>, I) -> IResult<I, O, E>;
|
||||||
|
|
||||||
fn context_many_till<'r, I, O, E, F>(
|
fn context_many_till<'r, I, O, E, F>(
|
||||||
context: Context<'r>,
|
context: Context<'r>,
|
||||||
mut many_matcher: UnboundMatcher<'r, I, O, E>,
|
mut many_matcher: &UnboundMatcher<'r, I, O, E>,
|
||||||
mut till_matcher: UnboundMatcher<'r, I, F, E>,
|
mut till_matcher: &UnboundMatcher<'r, I, F, E>,
|
||||||
) -> impl FnMut(I) -> IResult<I, (Vec<O>, F), E>
|
) -> impl FnMut(I) -> IResult<I, (Vec<O>, F), E>
|
||||||
where
|
where
|
||||||
I: Clone + InputLength,
|
I: Clone + InputLength,
|
||||||
@ -54,10 +54,12 @@ where
|
|||||||
let mut ret = Vec::new();
|
let mut ret = Vec::new();
|
||||||
loop {
|
loop {
|
||||||
let len = i.input_len();
|
let len = i.input_len();
|
||||||
match till_matcher.parse(i.clone()) {
|
let till_parser = parser_with_context!(till_matcher);
|
||||||
|
match till_parser(context.clone())(i.clone()) {
|
||||||
Ok((remaining, finish)) => return Ok((remaining, (ret, finish))),
|
Ok((remaining, finish)) => return Ok((remaining, (ret, finish))),
|
||||||
Err(nom::Err::Error(_)) => {
|
Err(nom::Err::Error(_)) => {
|
||||||
match many_matcher.parse(i.clone()) {
|
let many_parser = parser_with_context!(many_matcher);
|
||||||
|
match many_parser(context.clone())(i.clone()) {
|
||||||
Err(nom::Err::Error(err)) => {
|
Err(nom::Err::Error(err)) => {
|
||||||
return Err(nom::Err::Error(E::append(i, ErrorKind::ManyTill, err)))
|
return Err(nom::Err::Error(E::append(i, ErrorKind::ManyTill, err)))
|
||||||
}
|
}
|
||||||
@ -77,7 +79,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => return Err(e),
|
Err(e) => return Err(e),
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,6 +91,10 @@ pub fn document(input: &str) -> Res<&str, Vec<(Vec<TextElement>, &str)>> {
|
|||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn context_paragraph_end<'s, 'r>(context: Context<'r>, input: &str) -> Res<&str, &str> {
|
||||||
|
paragraph_end(input)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn paragraph<'s, 'r>(
|
pub fn paragraph<'s, 'r>(
|
||||||
context: Context<'r>,
|
context: Context<'r>,
|
||||||
i: &'s str,
|
i: &'s str,
|
||||||
@ -100,8 +106,11 @@ pub fn paragraph<'s, 'r>(
|
|||||||
fail_matcher: ChainBehavior::AndParent(Some(¶graph_end)),
|
fail_matcher: ChainBehavior::AndParent(Some(¶graph_end)),
|
||||||
}));
|
}));
|
||||||
let ret = {
|
let ret = {
|
||||||
let text_element_parser = parser_with_context!(flat_text_element)(paragraph_context);
|
context_many_till(
|
||||||
context_many_till(¶graph_context, text_element_parser, paragraph_end)(i)
|
¶graph_context,
|
||||||
|
&flat_text_element,
|
||||||
|
&context_paragraph_end,
|
||||||
|
)(i)
|
||||||
};
|
};
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user