diff --git a/src/parser/plain_list.rs b/src/parser/plain_list.rs index 5fa0fb0f..4d026e50 100644 --- a/src/parser/plain_list.rs +++ b/src/parser/plain_list.rs @@ -1,8 +1,12 @@ use nom::branch::alt; use nom::bytes::complete::tag; +use nom::character::complete::anychar; use nom::character::complete::digit1; +use nom::character::complete::line_ending; use nom::character::complete::one_of; +use nom::combinator::not; use nom::combinator::recognize; +use nom::multi::many1; use nom::sequence::tuple; use super::error::Res; @@ -32,3 +36,28 @@ fn bullet<'s>(i: &'s str) -> Res<&'s str, &'s str> { recognize(tuple((counter, alt((tag("."), tag(")")))))), ))(i) } + +fn counter_set<'s>(i: &'s str) -> Res<&'s str, &'s str> { + recognize(tuple((tag("[@"), counter, tag("]"))))(i) +} + +fn check_box<'s>(i: &'s str) -> Res<&'s str, &'s str> { + recognize(alt((tag("[ ]"), tag("[X]"), tag("[-]"))))(i) +} + +fn item_tag<'s>(i: &'s str) -> Res<&'s str, &'s str> { + recognize(tuple((tag_text, tag_separator)))(i) +} + +fn tag_text<'s>(i: &'s str) -> Res<&'s str, &'s str> { + recognize(many1(tag_text_character))(i) +} + +fn tag_text_character<'s>(i: &'s str) -> Res<&'s str, &'s str> { + not(alt((tag_separator, line_ending)))(i)?; + recognize(anychar)(i) +} + +fn tag_separator<'s>(i: &'s str) -> Res<&'s str, &'s str> { + tag(" :: ")(i) +}