1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
mod blockquote; mod horizontal_rule; mod indent; mod list; mod paragraph; use crate::{Result, Span}; use blockquote::blockquote; use horizontal_rule::horizontal_rule; use indent::indent; use list::list; use nom::branch::alt; use paragraph::paragraph; #[derive(Debug, PartialEq)] pub enum MultilineBlock { UnorderedList(Vec<ListItem>), OrderedList(Vec<ListItem>, ListIndex), Indent(Vec<MultilineBlock>), HorizontalRule, Blockquote(Vec<MultilineBlock>), Paragraph(Vec<Span>), } #[derive(Debug, PartialEq)] pub enum ListIndex { Numeric(String), LowerAlphabet(String), UpperAlphabet(String), LowerArabic(String), UpperArabic(String), HangulChosung(String), HangulSyllable(String), } #[derive(Debug, PartialEq)] pub struct ListItem(pub Vec<MultilineBlock>); impl ListItem { pub fn iter(&self) -> std::slice::Iter<MultilineBlock> { self.0.iter() } pub fn into_iter(self) -> std::vec::IntoIter<MultilineBlock> { self.0.into_iter() } } pub(crate) fn multiline_block(input: &str) -> Result<MultilineBlock> { alt((list, indent, horizontal_rule, blockquote, paragraph))(input) }