use crate::ast::Block;
use crate::parser::util::char_m_n;
use crate::parser::util::*;
use crate::parser::MarkdownParserState;
use nom::{
character::complete::char, combinator::opt, multi::many1, sequence::preceded, IResult, Parser,
};
use std::rc::Rc;
pub(crate) fn blockquote_start(input: &str) -> IResult<&str, char> {
preceded(char_m_n(0, 3, ' '), char('>')).parse(input)
}
pub(crate) fn blockquote<'a>(
state: Rc<MarkdownParserState>,
) -> impl FnMut(&'a str) -> IResult<&'a str, Vec<Block>> {
move |input: &'a str| {
let prefix = (blockquote_start, opt(char(' ')));
let (input, lines) =
many1(preceded(prefix, line_terminated(not_eof_or_eol0))).parse(input)?;
let inner = lines.join("\n");
let nested_state = Rc::new(state.nested());
let (_, inner) = crate::parser::blocks::blocks_many0(nested_state, &inner)
.map_err(|err| err.map_input(|_| input))?;
Ok((input, inner))
}
}