use super::prelude::*;
#[inline]
pub fn collect_text<'p, 'r, 't>(
log: &slog::Logger,
parser: &'p mut Parser<'r, 't>,
rule: Rule,
close_conditions: &[ParseCondition],
invalid_conditions: &[ParseCondition],
warn_kind: Option<ParseWarningKind>,
) -> Result<&'t str, ParseWarning>
where
'r: 't,
{
collect_text_keep(
log,
parser,
rule,
close_conditions,
invalid_conditions,
warn_kind,
)
.map(|(slice, _)| slice)
}
pub fn collect_text_keep<'p, 'r, 't>(
log: &slog::Logger,
parser: &'p mut Parser<'r, 't>,
rule: Rule,
close_conditions: &[ParseCondition],
invalid_conditions: &[ParseCondition],
warn_kind: Option<ParseWarningKind>,
) -> Result<(&'t str, &'r ExtractedToken<'t>), ParseWarning>
where
'r: 't,
{
info!(
log,
"Trying to consume tokens to merge into a single string",
);
let (start, mut end) = (parser.current(), None);
let (last, exceptions) = collect(
log,
parser,
rule,
close_conditions,
invalid_conditions,
warn_kind,
|log, parser| {
trace!(log, "Ingesting token in string span");
end = Some(parser.current());
ok!(())
},
)?
.into();
assert!(
exceptions.is_empty(),
"Exceptions were returned during text token collection",
);
let slice = match (start, end) {
(start, Some(end)) => parser.full_text().slice(log, start, end),
(_, None) => "",
};
Ok((slice, last))
}