wayver's git archive


an obsidian renderer
git clone https://git.wayver.dev/sable

sable-markdown/src/parser/blocks/blockquote.rs@2b84405277e54ab809e328cf0237374d4b4dbd0c

raw
Date Commit Message Author Files + -
2026-02-23 01:55 initial mvp wayverd 139 17808 0
...

1use nom::{
2    IResult, Parser,
3    character::complete::char,
4    multi::{many_m_n, many1},
5    sequence::preceded,
6};
7
8use crate::{
9    ast::Block,
10    parser::util::{line_terminated, not_eof_or_eol0},
11};
12
13pub(super) fn blockquote<'a>() -> impl FnMut(&'a str) -> IResult<&'a str, Vec<Block>> {
14    move |input: &'a str| {
15        let prefix = preceded(many_m_n(0, 3, char(' ')), char('>'));
16
17        let (input, lines) =
18            many1(preceded(prefix, line_terminated(not_eof_or_eol0))).parse(input)?;
19        let inner = lines.join("\n");
20
21        let (_, inner) = many1(crate::parser::blocks::block())
22            .parse(&inner)
23            .map_err(|err| err.map_input(|_| input))?;
24
25        let inner = inner.into_iter().flatten().collect();
26
27        Ok((input, inner))
28    }
29}
30