diff options
-rw-r--r-- | Cargo.lock | 6 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/lib.rs | 15 | ||||
-rw-r--r-- | tests/tests.rs | 18 |
4 files changed, 31 insertions, 10 deletions
@@ -56,7 +56,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pidgin" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -112,7 +112,7 @@ version = "1.0.0" dependencies = [ "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pidgin 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pidgin 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -159,7 +159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16" "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" -"checksum pidgin 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebfb7c2a7cadeeac248ecfcf74e514342bede5709780accf6b4225e059745f20" +"checksum pidgin 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7de3efd6e9f57f6d65f7d6ec34b47f0e91082e1042b4979929843802d1ce130d" "checksum redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "679da7508e9a6390aeaf7fbd02a800fdc64b73fe2204dd2c8ae66d22d9d5ad5d" "checksum regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ee84f70c8c08744ea9641a731c7fadb475bf2ecc52d7f627feb833e0b3990467" "checksum regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fbc557aac2b708fe84121caf261346cc2eed71978024337e42eb46b8a252ac6e" @@ -15,7 +15,7 @@ edition = "2018" panic = "abort" [dependencies] -pidgin = "0.2" +pidgin = "0.3" lazy_static = "1.2" chrono = "0.4" regex = "1"
\ No newline at end of file @@ -181,11 +181,11 @@ extern crate lazy_static; extern crate chrono; use chrono::naive::{NaiveDate, NaiveDateTime}; use chrono::{Datelike, Duration, Local, Timelike, Weekday}; -use pidgin::{Match, Matcher}; +use pidgin::{Grammar, Match, Matcher}; use regex::Regex; lazy_static! { - static ref MATCHER: Matcher = grammar!{ + pub static ref GRAMMAR: Grammar = grammar!{ (?ibBw) TOP -> r(r"\A") <something> r(r"\z") @@ -243,10 +243,10 @@ lazy_static! { .collect::<Vec<_>>() ] n_year => r(r"\b(?:[1-9][0-9]{0,4}|0)\b") - suffix_year => r(r"\b[1-9][0-9]{0,4}\b") + suffix_year => r(r"\b[1-9][0-9]{0,4}") year_suffix => <ce> | <bce> - ce => (?-i) [["ce", "c.e.", "ad", "a.d.", "CE", "C.E.", "AD", "A.D."]] - bce => (?-i) [["bce", "b.c.e.", "bc", "b.c.", "BCE", "B.C.E.", "BC", "B.C."]] + ce => (?-ib) [["ce", "c.e.", "ad", "a.d.", "CE", "C.E.", "AD", "A.D."]] + bce => (?-ib) [["bce", "b.c.e.", "bc", "b.c.", "BCE", "B.C.E.", "BC", "B.C."]] n_day => [ (1..=31) .into_iter() @@ -311,7 +311,10 @@ lazy_static! { "ever after", "the last syllable of recorded time", ]] - }.matcher().unwrap(); + }; +} +lazy_static! { + pub static ref MATCHER: Matcher = GRAMMAR.matcher().unwrap(); } /// A collection of parameters that can influence the interpretation diff --git a/tests/tests.rs b/tests/tests.rs index 31ef9fb..c77eb1a 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -852,6 +852,24 @@ fn april_3_25_ad() { } #[test] +fn april_3_25bc() { + let d1 = NaiveDate::from_ymd(-24, 4, 3).and_hms(0, 0, 0); + let d2 = d1 + Duration::days(1); + let (start, end, _) = parse("April 3, 25BC", None).unwrap(); + assert_eq!(d1, start); + assert_eq!(d2, end); +} + +#[test] +fn april_3_25ad() { + let d1 = NaiveDate::from_ymd(25, 4, 3).and_hms(0, 0, 0); + let d2 = d1 + Duration::days(1); + let (start, end, _) = parse("April 3, 25AD", None).unwrap(); + assert_eq!(d1, start); + assert_eq!(d2, end); +} + +#[test] fn this_weekend() { let now = NaiveDate::from_ymd(1969, 5, 6).and_hms(0, 0, 0); let d1 = NaiveDate::from_ymd(1969, 5, 10).and_hms(0, 0, 0); |