diff --git a/src/items/mod.rs b/src/items/mod.rs index ac29ad0..cd1da36 100644 --- a/src/items/mod.rs +++ b/src/items/mod.rs @@ -114,9 +114,9 @@ pub(crate) fn at_local( /// literal2_date = literal_month , [ { whitespace } ] , day , [ [ literal2_date_delim ] , year ] ; /// literal2_date_delim = { whitespace } | [ { whitespace } ] , "," , [ { whitespace } ] ; /// -/// year = dec_int ; -/// month = dec_int ; -/// day = dec_int ; +/// year = dec_uint ; +/// month = dec_uint ; +/// day = dec_uint ; /// /// literal_month = "january" | "jan" /// | "february" | "feb" @@ -130,6 +130,25 @@ pub(crate) fn at_local( /// | "october" | "oct" /// | "november" | "nov" /// | "december" | "dec" ; +/// +/// weekday = [ ordinal ] day [ "," ] ; +/// +/// ordinal = number_ordinal | text_ordinal ; +/// +/// number_ordinal = [ "+" | "-" ] , dec_uint ; +/// +/// text_ordinal = "last" | "this" | "next" | "first" +/// | "third" | "fourth" | "fifth" | "sixth" +/// | "seventh" | "eighth" | "ninth" | "tenth" +/// | "eleventh" | "twelfth" ; +/// +/// day = "monday" | "mon" | "mon." +/// | "tuesday" | "tue" | "tue." | "tues" +/// | "wednesday" | "wed" | "wed." | "wednes" +/// | "thursday" | "thu" | "thu." | "thur" | "thurs" +/// | "friday" | "fri" | "fri." +/// | "saturday" | "sat" | "sat." +/// | "sunday" | "sun" | "sun." ; /// ``` pub(crate) fn parse(input: &mut &str) -> ModalResult { trace("parse", alt((parse_timestamp, parse_items))).parse_next(input) diff --git a/src/items/ordinal.rs b/src/items/ordinal.rs index 7de4f6f..afba61f 100644 --- a/src/items/ordinal.rs +++ b/src/items/ordinal.rs @@ -9,7 +9,7 @@ use winnow::{ use super::primitive::{dec_uint, s}; -pub fn ordinal(input: &mut &str) -> ModalResult { +pub(super) fn ordinal(input: &mut &str) -> ModalResult { alt((text_ordinal, number_ordinal)).parse_next(input) } diff --git a/src/items/weekday.rs b/src/items/weekday.rs index d9f05db..cc9d0e2 100644 --- a/src/items/weekday.rs +++ b/src/items/weekday.rs @@ -61,21 +61,7 @@ impl From for chrono::Weekday { } /// Parse a weekday item. -/// -/// Grammar: -/// -/// ```ebnf -/// weekday = [ ordinal ] day [ "," ] ; -/// -/// day = "monday" | "mon" | "mon." -/// | "tuesday" | "tue" | "tue." | "tues" -/// | "wednesday" | "wed" | "wed." | "wednes" -/// | "thursday" | "thu" | "thu." | "thur" | "thurs" -/// | "friday" | "fri" | "fri." -/// | "saturday" | "sat" | "sat." -/// | "sunday" | "sun" | "sun." ; -/// ``` -pub fn parse(input: &mut &str) -> ModalResult { +pub(super) fn parse(input: &mut &str) -> ModalResult { seq!(Weekday { offset: opt(ordinal).map(|o| o.unwrap_or_default()), day: terminated(day, opt(s(","))),