raw
1mod blocks;
2mod inline;
3mod link_util;
4mod util;
5
6use nom::{
7 Parser,
8 branch::alt,
9 character::complete::{line_ending, space1},
10 combinator::eof,
11 multi::many0,
12 sequence::terminated,
13};
14
15use crate::ast::Document;
16
17pub fn parse_markdown(input: &str) -> Result<Document, nom::Err<nom::error::Error<&str>>> {
19 let empty_lines = many0(alt((space1, line_ending)));
20 let mut parser = terminated(many0(crate::parser::blocks::block()), (empty_lines, eof));
21 let (_, blocks) = parser.parse(input)?;
22
23 let blocks = blocks.into_iter().flatten().collect();
24
25 Ok(Document { blocks })
26}
27