2022-07-15 23:26:49 -04:00
|
|
|
//! A single element of text.
|
2022-12-16 00:53:29 -05:00
|
|
|
use super::combinator::context_many1;
|
2022-12-18 02:59:41 -05:00
|
|
|
use super::error::Res;
|
2022-12-18 02:53:26 -05:00
|
|
|
use super::paragraph::paragraph;
|
2022-12-18 02:16:28 -05:00
|
|
|
use super::parser_context::ContextTree;
|
2022-12-18 03:24:35 -05:00
|
|
|
use super::token::Paragraph;
|
2022-12-03 23:53:52 -05:00
|
|
|
use super::token::Token;
|
2022-12-03 21:13:42 -05:00
|
|
|
use super::Context;
|
2022-07-15 23:26:49 -04:00
|
|
|
use nom::IResult;
|
2022-10-14 20:17:48 -04:00
|
|
|
|
2022-12-10 23:49:02 -05:00
|
|
|
type UnboundMatcher<'r, 's, I, O, E> = dyn Fn(Context<'r, 's>, I) -> IResult<I, O, E>;
|
2022-12-03 22:44:53 -05:00
|
|
|
|
2022-12-18 04:22:28 -05:00
|
|
|
// TODO: Implement FromStr for Document
|
|
|
|
|
2022-12-16 01:35:49 -05:00
|
|
|
pub fn document(input: &str) -> Res<&str, Vec<Paragraph>> {
|
2022-12-10 23:49:02 -05:00
|
|
|
let initial_context: ContextTree<'_, '_> = ContextTree::new();
|
2022-12-16 01:35:49 -05:00
|
|
|
let (remaining, tokens) = context_many1(&initial_context, paragraph)(input)?;
|
2022-12-18 02:05:21 -05:00
|
|
|
let paragraphs = tokens
|
|
|
|
.into_iter()
|
|
|
|
.map(|token| match token {
|
2022-12-16 01:35:49 -05:00
|
|
|
Token::TextElement(_) => unreachable!(),
|
|
|
|
Token::Paragraph(paragraph) => paragraph,
|
2022-12-18 02:05:21 -05:00
|
|
|
})
|
|
|
|
.collect();
|
2022-12-16 01:35:49 -05:00
|
|
|
Ok((remaining, paragraphs))
|
2022-11-26 19:14:19 -05:00
|
|
|
}
|