From a992495b2b18899a15ebcd0f8125a6330aabbc03 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Wed, 7 Sep 2022 15:32:08 +0200 Subject: [PATCH] feat: add playlist date parser --- .editorconfig | 3 + src/codegen/collect_playlist_dates.rs | 104 +- src/codegen/gen_dictionary.rs | 33 +- src/codegen/mod.rs | 1 + src/dictionary.rs | 1351 ++++++++++++++++++++----- src/timeago.rs | 275 ++++- src/util.rs | 1 - testfiles/date/dictionary.json | 563 ++++++++--- 8 files changed, 1909 insertions(+), 422 deletions(-) diff --git a/.editorconfig b/.editorconfig index f17ec78..f016535 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,3 +12,6 @@ indent_style = tab [*.{json,md,rst,ini,yml,yaml,xml,html,js,jsx,ts,tsx,vue,kt}] indent_size = 2 + +[*.json] +insert_final_newline = false diff --git a/src/codegen/collect_playlist_dates.rs b/src/codegen/collect_playlist_dates.rs index a2bd47b..6801a29 100644 --- a/src/codegen/collect_playlist_dates.rs +++ b/src/codegen/collect_playlist_dates.rs @@ -13,6 +13,7 @@ use serde::{Deserialize, Serialize}; use crate::{ client::RustyTube, model::{locale::LANGUAGES, Country, Language}, + timeago::{self, TimeAgo}, util, }; @@ -83,8 +84,16 @@ async fn collect_dates() { serde_json::to_writer_pretty(file, &collected_dates).unwrap(); } -// #[test] -fn parse_months() { +fn filter_str(string: &str) -> String { + string + .to_lowercase() + .chars() + .filter(|c| c != &'\u{200b}' && !c.is_ascii_digit()) + .collect() +} + +#[test] +fn write_samples_to_dict() { let json_path = Path::new("testfiles/date/playlist_samples.json").to_path_buf(); let json_file = File::open(json_path).unwrap(); let collected_dates: CollectedDates = @@ -123,11 +132,47 @@ fn parse_months() { ]; for lang in langs { + let datestr_table = collected_dates.get(&lang).unwrap(); let mut month_words: HashMap = HashMap::new(); let mut num_order = "".to_owned(); + // Today/Yesterday + let mut td_words: HashMap = HashMap::new(); + { + let mut parse = |string: &str, n: i8| { + filter_str(string).split_whitespace().for_each(|word| { + td_words + .entry(word.to_owned()) + .and_modify(|e| *e = 0) + .or_insert(n); + }); + }; + + parse(datestr_table.get(&DateCase::Today).unwrap(), 1); + parse(datestr_table.get(&DateCase::Yesterday).unwrap(), 2); + parse(datestr_table.get(&DateCase::Ago).unwrap(), 0); + parse(datestr_table.get(&DateCase::Jan).unwrap(), 0); + } + + // n days ago + { + let datestr = datestr_table.get(&DateCase::Ago).unwrap(); + let tago = timeago::parse(lang, &datestr); + assert_eq!( + tago, + Some(TimeAgo { + n: 3, + unit: timeago::TimeUnit::Day + }), + "lang: {}, txt: {}", + lang, + datestr + ); + } + + // Absolute dates (Jan 3, 2020) months.iter().enumerate().for_each(|(n, m)| { - let datestr = collected_dates.get(&lang).unwrap().get(m).unwrap(); + let datestr = datestr_table.get(m).unwrap(); // Get order of numbers let nums = util::parse_numeric_vec::(&datestr); @@ -155,12 +200,7 @@ fn parse_months() { } // Insert words into the map - let filtered_str = datestr - .chars() - .filter(|c| !c.is_ascii_digit()) - .collect::(); - - filtered_str.split_whitespace().for_each(|word| { + filter_str(&datestr).split_whitespace().for_each(|word| { month_words .entry(word.to_owned()) .and_modify(|e| *e = 0) @@ -170,13 +210,47 @@ fn parse_months() { let dict_entry = dict.entry(lang).or_default(); dict_entry.date_order = num_order; - dict_entry.months = month_words.iter().filter_map(|(word, m)| { - if *m == 0 { - None - } else { - Some((word.to_owned(), *m as u8)) + dict_entry.months = month_words + .iter() + .filter_map(|(word, m)| { + if *m == 0 { + None + } else { + Some((word.to_owned(), *m as u8)) + } + }) + .collect(); + + match lang { + Language::Ja + | Language::ZhCn + | Language::ZhHk + | Language::ZhTw + | Language::Ko + | Language::Gu + | Language::Pa + | Language::Ur + | Language::Uz + | Language::Te + // Singhalese YT translation is broken (today == tomorrow) + | Language::Si => {} + _ => { + dict_entry.timeago_nd_tokens = td_words + .iter() + .filter_map(|(word, n)| { + match n { + // Today + 1 => Some((word.to_owned(), "0D".to_owned())), + // Yesterday + 2 => Some((word.to_owned(), "1D".to_owned())), + _ => None, + } + }) + .collect(); + + assert_eq!(dict_entry.timeago_nd_tokens.len(), 2, "lang: {}, nd_tokens: {:?}", lang, &dict_entry.timeago_nd_tokens); } - }).collect(); + } } super::write_dict(&dict); diff --git a/src/codegen/gen_dictionary.rs b/src/codegen/gen_dictionary.rs index 35fa12a..143c950 100644 --- a/src/codegen/gen_dictionary.rs +++ b/src/codegen/gen_dictionary.rs @@ -27,20 +27,22 @@ fn parse_tu(tu: &str) -> (u8, Option) { } } -// #[test] +#[test] fn generate_dictionary() { let dict = super::read_dict(); let code_head = r#"// This file is automatically generated. DO NOT EDIT. use crate::{ model::Language, - timeago::{TaToken, TimeUnit}, + timeago::{TaToken, TimeUnit, DateCmp}, }; pub struct Entry { + pub by_char: bool, pub timeago_tokens: phf::Map<&'static str, TaToken>, - pub date_order: &'static str, + pub date_order: &'static [DateCmp], pub months: phf::Map<&'static str, u8>, + pub timeago_nd_tokens: phf::Map<&'static str, TaToken>, } "#; @@ -76,12 +78,33 @@ pub fn entry(lang: Language) -> Entry { months.entry(&txt, &n_mon.to_string()); }); + // Timeago(ND) tokens + let mut ta_nd_tokens = phf_codegen::Map::<&str>::new(); + entry.timeago_nd_tokens.iter().for_each(|(txt, tu_str)| { + let (n, unit) = parse_tu(&tu_str); + match unit { + Some(unit) => ta_nd_tokens.entry( + &txt, + &format!("TaToken {{ n: {}, unit: Some(TimeUnit::{:?}) }}", n, unit), + ), + None => ta_nd_tokens.entry(&txt, &format!("TaToken {{ n: {}, unit: None }}", n)), + }; + }); + + // Date order + let mut date_order = "&[".to_owned(); + entry.date_order.chars().for_each(|c| { + date_order += &format!("DateCmp::{}, ", c); + }); + date_order = date_order.trim_end_matches([' ', ',']).to_owned() + "]"; + let code_ta_tokens = &ta_tokens.build().to_string().replace('\n', "\n "); + let code_ta_nd_tokens = &ta_nd_tokens.build().to_string().replace('\n', "\n "); let code_months = &months.build().to_string().replace('\n', "\n "); code_timeago_tokens += &format!( - "{} => Entry {{\n timeago_tokens: {},\n date_order: \"{}\",\n months: {},\n }},\n ", - selector, code_ta_tokens, entry.date_order, code_months + "{} => Entry {{\n by_char: {:?},\n timeago_tokens: {},\n date_order: {},\n months: {},\n timeago_nd_tokens: {},\n }},\n ", + selector, entry.by_char, code_ta_tokens, date_order, code_months, code_ta_nd_tokens ); }); diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 4bbd694..02c04fc 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -21,6 +21,7 @@ struct DictEntry { timeago_tokens: BTreeMap, date_order: String, months: BTreeMap, + timeago_nd_tokens: BTreeMap, } fn read_dict() -> Dictionary { diff --git a/src/dictionary.rs b/src/dictionary.rs index 3950782..bf94de8 100644 --- a/src/dictionary.rs +++ b/src/dictionary.rs @@ -1,19 +1,22 @@ // This file is automatically generated. DO NOT EDIT. use crate::{ model::Language, - timeago::{TaToken, TimeUnit}, + timeago::{TaToken, TimeUnit, DateCmp}, }; pub struct Entry { + pub by_char: bool, pub timeago_tokens: phf::Map<&'static str, TaToken>, - pub date_order: &'static str, + pub date_order: &'static [DateCmp], pub months: phf::Map<&'static str, u8>, + pub timeago_nd_tokens: phf::Map<&'static str, TaToken>, } #[rustfmt::skip] pub fn entry(lang: Language) -> Entry { match lang { Language::Af => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -37,31 +40,42 @@ pub fn entry(lang: Language) -> Entry { ("sekonde", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ - (0, 5), - (10, 0), - (0, 11), + (1, 3), + (0, 0), + (0, 7), ], entries: &[ - ("Des.", 12), - ("Jan.", 1), - ("Mei", 5), - ("Jun.", 6), - ("Aug.", 8), - ("Sep.", 9), - ("Apr.", 4), - ("Jul.", 7), - ("Nov.", 11), - ("Okt.", 10), - ("Mrt.", 3), - ("Feb.", 2), + ("jan.", 1), + ("des.", 12), + ("jun.", 6), + ("jul.", 7), + ("sep.", 9), + ("nov.", 11), + ("apr.", 4), + ("feb.", 2), + ("okt.", 10), + ("mrt.", 3), + ("aug.", 8), + ("mei", 5), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("gister", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("vandag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, }, Language::Am => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -86,7 +100,7 @@ pub fn entry(lang: Language) -> Entry { ("ሳምንት", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -109,8 +123,19 @@ pub fn entry(lang: Language) -> Entry { ("ሜይ", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("ትላንት", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ዛሬ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ar => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -147,7 +172,7 @@ pub fn entry(lang: Language) -> Entry { ("ساعتين", TaToken { n: 2, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -155,8 +180,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (1, 0), + ], + entries: &[ + ("بالأمس", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("اليوم", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::As => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -173,7 +209,7 @@ pub fn entry(lang: Language) -> Entry { ("মিনিট", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -181,8 +217,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("আজি", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ক\u{9be}লি", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Az => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -199,7 +246,7 @@ pub fn entry(lang: Language) -> Entry { ("saat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -222,8 +269,19 @@ pub fn entry(lang: Language) -> Entry { ("apr", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 0), + ], + entries: &[ + ("dünən", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("bugün", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Be => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -260,7 +318,7 @@ pub fn entry(lang: Language) -> Entry { ("дзён", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -283,8 +341,19 @@ pub fn entry(lang: Language) -> Entry { ("жні", 8), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("сёння", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ўчора", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Bg => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -309,7 +378,7 @@ pub fn entry(lang: Language) -> Entry { ("секунди", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -317,8 +386,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("вчера", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("днес", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Bn => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -335,7 +415,7 @@ pub fn entry(lang: Language) -> Entry { ("সেকেন\u{9cd}ড", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -358,8 +438,19 @@ pub fn entry(lang: Language) -> Entry { ("ম\u{9be}র\u{9cd}চ,", 3), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("গতক\u{9be}ল", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("আজ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Bs => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -390,7 +481,7 @@ pub fn entry(lang: Language) -> Entry { ("mjeseci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -413,8 +504,19 @@ pub fn entry(lang: Language) -> Entry { ("dec", 12), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("jučer", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("danas", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ca => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -439,7 +541,7 @@ pub fn entry(lang: Language) -> Entry { ("dia", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -462,8 +564,19 @@ pub fn entry(lang: Language) -> Entry { ("d’abr.", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 7485420634051515786, + disps: &[ + (0, 0), + ], + entries: &[ + ("avui", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ahir", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Cs => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -489,7 +602,7 @@ pub fn entry(lang: Language) -> Entry { ("měsíci", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -497,8 +610,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 10121458955350035957, + disps: &[ + (0, 0), + ], + entries: &[ + ("včera", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("dnes", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Da => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -522,7 +646,7 @@ pub fn entry(lang: Language) -> Entry { ("uge", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -545,8 +669,19 @@ pub fn entry(lang: Language) -> Entry { ("jul.", 7), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("går", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::De => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 345707026197253659, disps: &[ @@ -571,7 +706,7 @@ pub fn entry(lang: Language) -> Entry { ("tagen", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -579,8 +714,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("gestern", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("heute", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::El => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12213676231523076107, disps: &[ @@ -605,31 +751,42 @@ pub fn entry(lang: Language) -> Entry { ("δευτερόλεπτα", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (1, 0), - (0, 2), - (7, 3), + (0, 0), + (4, 0), + (0, 4), ], entries: &[ - ("Οκτ", 10), - ("Απρ", 4), - ("Ιουν", 6), - ("Μαΐ", 5), - ("Νοε", 11), - ("Σεπ", 9), - ("Φεβ", 2), - ("Αυγ", 8), - ("Δεκ", 12), - ("Μαρ", 3), - ("Ιαν", 1), - ("Ιουλ", 7), + ("ιουλ", 7), + ("δεκ", 12), + ("απρ", 4), + ("οκτ", 10), + ("σεπ", 9), + ("φεβ", 2), + ("νοε", 11), + ("μαΐ", 5), + ("ιουν", 6), + ("ιαν", 1), + ("μαρ", 3), + ("αυγ", 8), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("χτες", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("σήμερα", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, }, Language::En | Language::EnGb | Language::EnIn => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -654,31 +811,42 @@ pub fn entry(lang: Language) -> Entry { ("year", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ - (4, 0), - (1, 1), - (3, 1), + (11, 10), + (0, 0), + (0, 0), ], entries: &[ - ("Sep", 9), - ("Nov", 11), - ("Oct", 10), - ("Jun", 6), - ("Jul", 7), - ("Apr", 4), - ("Feb", 2), - ("Mar", 3), - ("Dec", 12), - ("May", 5), - ("Jan", 1), - ("Aug", 8), + ("oct", 10), + ("sep", 9), + ("jul", 7), + ("jun", 6), + ("may", 5), + ("nov", 11), + ("apr", 4), + ("mar", 3), + ("jan", 1), + ("aug", 8), + ("feb", 2), + ("dec", 12), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("yesterday", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("today", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, }, Language::Es | Language::EsUs | Language::Es419 => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -703,7 +871,7 @@ pub fn entry(lang: Language) -> Entry { ("minuto", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -726,8 +894,19 @@ pub fn entry(lang: Language) -> Entry { ("mar", 3), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("ayer", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("hoy", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Et => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -755,7 +934,7 @@ pub fn entry(lang: Language) -> Entry { ("päeva", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 14108922650502679131, disps: &[ @@ -778,8 +957,19 @@ pub fn entry(lang: Language) -> Entry { ("juuli", 7), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("eile", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("täna", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Eu => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -799,7 +989,7 @@ pub fn entry(lang: Language) -> Entry { ("ordubete", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -822,8 +1012,19 @@ pub fn entry(lang: Language) -> Entry { ("abu.", 8), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("atzo", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("gaur", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Fa => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -840,7 +1041,7 @@ pub fn entry(lang: Language) -> Entry { ("دقیقه", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -863,8 +1064,19 @@ pub fn entry(lang: Language) -> Entry { ("فوریه", 2), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("امروز", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("دیروز", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Fi => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12213676231523076107, disps: &[ @@ -889,7 +1101,7 @@ pub fn entry(lang: Language) -> Entry { ("sekunti", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -897,8 +1109,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("tänään", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("eilen", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Fil => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -915,31 +1138,42 @@ pub fn entry(lang: Language) -> Entry { ("linggo", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ - (1, 9), - (4, 10), (2, 0), + (7, 3), + (4, 3), ], entries: &[ - ("Ago", 8), - ("Set", 9), - ("Dis", 12), - ("May", 5), - ("Abr", 4), - ("Ene", 1), - ("Hul", 7), - ("Mar", 3), - ("Peb", 2), - ("Hun", 6), - ("Okt", 10), - ("Nob", 11), + ("abr", 4), + ("set", 9), + ("mar", 3), + ("may", 5), + ("hun", 6), + ("nob", 11), + ("okt", 10), + ("ene", 1), + ("hul", 7), + ("dis", 12), + ("ago", 8), + ("peb", 2), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("ngayong", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("kahapon", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, }, Language::Fr | Language::FrCa => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -963,7 +1197,7 @@ pub fn entry(lang: Language) -> Entry { ("heure", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -986,8 +1220,19 @@ pub fn entry(lang: Language) -> Entry { ("juin", 6), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("hier", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("aujourd'hui", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Gl => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1012,7 +1257,7 @@ pub fn entry(lang: Language) -> Entry { ("hora", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1035,8 +1280,19 @@ pub fn entry(lang: Language) -> Entry { ("abr.", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("hoxe", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("onte", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Gu => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1053,7 +1309,7 @@ pub fn entry(lang: Language) -> Entry { ("કલાક", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1076,8 +1332,19 @@ pub fn entry(lang: Language) -> Entry { ("ઑક\u{acd}ટો,", 10), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("આજ\u{ac7}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ગઈ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Hi => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1094,7 +1361,7 @@ pub fn entry(lang: Language) -> Entry { ("मिनट", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1117,8 +1384,19 @@ pub fn entry(lang: Language) -> Entry { ("अप\u{94d}र\u{948}ल", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("कल", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("आज", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Hr => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1149,7 +1427,7 @@ pub fn entry(lang: Language) -> Entry { ("sekundi", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1172,8 +1450,19 @@ pub fn entry(lang: Language) -> Entry { ("srp", 7), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("jučer", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("danas", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Hu => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -1198,7 +1487,7 @@ pub fn entry(lang: Language) -> Entry { ("hónapja", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -1221,8 +1510,19 @@ pub fn entry(lang: Language) -> Entry { ("ápr.", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("tegnap", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ma", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Hy => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1239,7 +1539,7 @@ pub fn entry(lang: Language) -> Entry { ("տարի", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1262,8 +1562,19 @@ pub fn entry(lang: Language) -> Entry { ("ապր,", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("երեկ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("այսօր", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Id => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -1280,31 +1591,42 @@ pub fn entry(lang: Language) -> Entry { ("tahun", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 106375038446233661, disps: &[ - (4, 0), - (11, 8), - (3, 6), + (0, 0), + (1, 7), + (0, 1), ], entries: &[ - ("Sep", 9), - ("Mei", 5), - ("Okt", 10), - ("Jan", 1), - ("Jun", 6), - ("Apr", 4), - ("Feb", 2), - ("Mar", 3), - ("Nov", 11), - ("Jul", 7), - ("Des", 12), - ("Agu", 8), + ("feb", 2), + ("mar", 3), + ("jul", 7), + ("jan", 1), + ("agu", 8), + ("nov", 11), + ("mei", 5), + ("jun", 6), + ("des", 12), + ("sep", 9), + ("okt", 10), + ("apr", 4), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 0), + ], + entries: &[ + ("ini", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("kemarin", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, }, Language::Is => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1329,7 +1651,7 @@ pub fn entry(lang: Language) -> Entry { ("klukkustund", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -1352,8 +1674,19 @@ pub fn entry(lang: Language) -> Entry { ("maí", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("gær", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::It => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1378,7 +1711,7 @@ pub fn entry(lang: Language) -> Entry { ("settimana", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -1401,8 +1734,19 @@ pub fn entry(lang: Language) -> Entry { ("giu", 6), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("ieri", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("oggi", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Iw => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 1937371814602216758, disps: &[ @@ -1434,7 +1778,7 @@ pub fn entry(lang: Language) -> Entry { ("שבועיים", TaToken { n: 2, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1457,8 +1801,19 @@ pub fn entry(lang: Language) -> Entry { ("בפבר׳", 2), ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 0), + ], + entries: &[ + ("היום", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("אתמול", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ja => Entry { + by_char: true, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1475,7 +1830,7 @@ pub fn entry(lang: Language) -> Entry { ("分", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "YMD", + date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1483,8 +1838,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("日", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("本", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ka => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1501,7 +1867,7 @@ pub fn entry(lang: Language) -> Entry { ("წამის", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1524,8 +1890,19 @@ pub fn entry(lang: Language) -> Entry { ("ოქტ.", 10), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("გუშინ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("დღეს", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Kk => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -1542,7 +1919,7 @@ pub fn entry(lang: Language) -> Entry { ("жыл", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -1565,8 +1942,19 @@ pub fn entry(lang: Language) -> Entry { ("ақп.", 2), ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 0), + ], + entries: &[ + ("кеше", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("бүгін", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Km => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1583,7 +1971,7 @@ pub fn entry(lang: Language) -> Entry { ("នាទ\u{17b8}ម\u{17bb}ន", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -1606,8 +1994,19 @@ pub fn entry(lang: Language) -> Entry { ("ធ\u{17d2}ន\u{17bc}", 12), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("បានធ\u{17d2}វើបច\u{17d2}ច\u{17bb}ប\u{17d2}បន\u{17d2}នភាពថ\u{17d2}ងៃនេះ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("បានធ\u{17d2}វើបច\u{17d2}ច\u{17bb}ប\u{17d2}បន\u{17d2}នភាពម\u{17d2}ស\u{17b7}លម\u{17b7}ញ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Kn => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 2980949210194914378, disps: &[ @@ -1632,7 +2031,7 @@ pub fn entry(lang: Language) -> Entry { ("ವರ\u{ccd}ಷಗಳ", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1655,8 +2054,19 @@ pub fn entry(lang: Language) -> Entry { ("ಅಕ\u{ccd}ಟೋ", 10), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("ಇಂದು", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ನ\u{cbf}ನ\u{ccd}ನ\u{cc6}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ko => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -1673,7 +2083,7 @@ pub fn entry(lang: Language) -> Entry { ("주", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "YMD", + date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1681,8 +2091,18 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("오늘", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ky => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -1699,7 +2119,7 @@ pub fn entry(lang: Language) -> Entry { ("апта", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1722,8 +2142,19 @@ pub fn entry(lang: Language) -> Entry { ("-окт.", 10), ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 0), + ], + entries: &[ + ("кечээ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("бүгүн", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Lo => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1740,7 +2171,7 @@ pub fn entry(lang: Language) -> Entry { ("ວ\u{eb4}ນາທ\u{eb5}ກ\u{ec8}ອນ", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 471159234146692604, disps: &[ @@ -1763,40 +2194,53 @@ pub fn entry(lang: Language) -> Entry { ("ພ.ພ.", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("ອ\u{eb1}ບເດດມ\u{eb7}\u{ec9}ນ\u{eb5}\u{ec9}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ອ\u{eb1}ບເດດມ\u{eb7}\u{ec9}ວານນ\u{eb5}\u{ec9}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Lt => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ - (11, 17), - (10, 19), + (0, 19), + (0, 2), + (1, 1), (2, 0), - (1, 2), + (0, 16), ], entries: &[ - ("dieną", TaToken { n: 1, unit: Some(TimeUnit::Day) }), - ("valandų", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), - ("metus", TaToken { n: 1, unit: Some(TimeUnit::Year) }), - ("minutes", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), - ("dienų", TaToken { n: 1, unit: Some(TimeUnit::Day) }), - ("valandą", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), - ("sekundžių", TaToken { n: 1, unit: Some(TimeUnit::Second) }), - ("sekundę", TaToken { n: 1, unit: Some(TimeUnit::Second) }), - ("mėnesių", TaToken { n: 1, unit: Some(TimeUnit::Month) }), - ("savaites", TaToken { n: 1, unit: Some(TimeUnit::Week) }), - ("savaitę", TaToken { n: 1, unit: Some(TimeUnit::Week) }), - ("minučių", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ("mėnesį", TaToken { n: 1, unit: Some(TimeUnit::Month) }), - ("dienas", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("savaitę", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("sekundę", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ("valandas", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), - ("savaičių", TaToken { n: 1, unit: Some(TimeUnit::Week) }), - ("mėnesius", TaToken { n: 1, unit: Some(TimeUnit::Month) }), - ("minutę", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), - ("sekundes", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("dienas", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("d.", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("mėnesių", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ("metų", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("mėnesius", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("metus", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("sekundes", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("sekundžių", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("savaičių", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("minučių", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("minutę", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("valandą", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("dienų", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("savaites", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("dieną", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("minutes", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), + ("valandų", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "YMD", + date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1804,8 +2248,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("šiandien", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("vakar", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Lv => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1830,7 +2285,7 @@ pub fn entry(lang: Language) -> Entry { ("dienas", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -1853,8 +2308,19 @@ pub fn entry(lang: Language) -> Entry { ("jūl.", 7), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("šodien", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("vakar", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Mk => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1879,7 +2345,7 @@ pub fn entry(lang: Language) -> Entry { ("година", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1887,8 +2353,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (0, 0), + ], + entries: &[ + ("вчера", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("денес", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ml => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1905,7 +2382,7 @@ pub fn entry(lang: Language) -> Entry { ("മിനിറ\u{d4d}റ\u{d4d}", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1928,8 +2405,19 @@ pub fn entry(lang: Language) -> Entry { ("ഡിസം", 12), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("ഇന\u{d4d}ന\u{d4d}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ഇന\u{d4d}നലെ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Mn => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1946,7 +2434,7 @@ pub fn entry(lang: Language) -> Entry { ("секундын", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "YMD", + date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -1954,8 +2442,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("өнөөдөр", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("өчигдөр", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Mr => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -1980,7 +2479,7 @@ pub fn entry(lang: Language) -> Entry { ("आठवड\u{94d}याप\u{942}र\u{94d}वी", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2003,8 +2502,19 @@ pub fn entry(lang: Language) -> Entry { ("डिस\u{947}\u{902},", 12), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("काल", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("आज", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ms => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -2021,48 +2531,60 @@ pub fn entry(lang: Language) -> Entry { ("jam", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ - (8, 9), + (2, 1), + (3, 3), (0, 0), - (3, 0), ], entries: &[ - ("Mei", 5), - ("Sep", 9), - ("Nov", 11), - ("Feb", 2), - ("Jul", 7), - ("Ogo", 8), - ("Mac", 3), - ("Jun", 6), - ("Okt", 10), - ("Jan", 1), - ("Apr", 4), - ("Dis", 12), + ("jan", 1), + ("sep", 9), + ("mac", 3), + ("jun", 6), + ("mei", 5), + ("nov", 11), + ("apr", 4), + ("feb", 2), + ("ogo", 8), + ("jul", 7), + ("dis", 12), + ("okt", 10), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("semalam", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ini", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, }, Language::My => Entry { + by_char: false, timeago_tokens: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (3, 0), + (4, 0), (3, 5), ], entries: &[ - ("နာရ\u{102e}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ("န\u{103e}စ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("ရက\u{103a}က", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("မ\u{102d}နစ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), - ("ပတ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Week) }), - ("စက\u{1039}ကန\u{1037}\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), - ("ရက\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ("လ", TaToken { n: 1, unit: Some(TimeUnit::Month) }), + ("နာရ\u{102e}", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), + ("ရက\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("စက\u{1039}ကန\u{1037}\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("ပတ\u{103a}", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2085,8 +2607,19 @@ pub fn entry(lang: Language) -> Entry { ("ဧ", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("ယနေ\u{1037}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("မနေ\u{1037}က", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ne => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2103,7 +2636,7 @@ pub fn entry(lang: Language) -> Entry { ("स\u{947}क\u{947}न\u{94d}ड", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2126,8 +2659,19 @@ pub fn entry(lang: Language) -> Entry { ("अक\u{94d}टोबर", 10), ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (1, 0), + ], + entries: &[ + ("आज", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("हिजो", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Nl => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 14108922650502679131, disps: &[ @@ -2150,7 +2694,7 @@ pub fn entry(lang: Language) -> Entry { ("minuten", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2173,8 +2717,19 @@ pub fn entry(lang: Language) -> Entry { ("mei", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("gisteren", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("vandaag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::No => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2199,7 +2754,7 @@ pub fn entry(lang: Language) -> Entry { ("uke", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2222,8 +2777,19 @@ pub fn entry(lang: Language) -> Entry { ("sep.", 9), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("dag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("går", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Or => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2240,7 +2806,7 @@ pub fn entry(lang: Language) -> Entry { ("ଦ\u{b3f}ନ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2263,8 +2829,19 @@ pub fn entry(lang: Language) -> Entry { ("ଫେବ\u{b43}ଆରୀ", 2), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("ଆଜ\u{b3f}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ଗତକ\u{b3e}ଲ\u{b3f}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Pa => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 399332969041170284, disps: &[ @@ -2284,7 +2861,7 @@ pub fn entry(lang: Language) -> Entry { ("ਘ\u{a70}ਟਾ", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -2307,8 +2884,19 @@ pub fn entry(lang: Language) -> Entry { ("ਅਕਤ\u{a42}", 10), ], }, + timeago_nd_tokens: ::phf::Map { + key: 10121458955350035957, + disps: &[ + (0, 0), + ], + entries: &[ + ("ਬੀ\u{a47}ਤ\u{a47}", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ਅ\u{a71}ਜ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Pl => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2339,7 +2927,7 @@ pub fn entry(lang: Language) -> Entry { ("sekundy", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2362,8 +2950,19 @@ pub fn entry(lang: Language) -> Entry { ("mar", 3), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("dzisiaj", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("wczoraj", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Pt | Language::PtPt => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -2388,7 +2987,7 @@ pub fn entry(lang: Language) -> Entry { ("dias", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2411,8 +3010,19 @@ pub fn entry(lang: Language) -> Entry { ("jan.", 1), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("hoje", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ontem", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ro => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 14108922650502679131, disps: &[ @@ -2437,7 +3047,7 @@ pub fn entry(lang: Language) -> Entry { ("ore", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2460,8 +3070,19 @@ pub fn entry(lang: Language) -> Entry { ("nov.", 11), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("astăzi", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("ieri", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ru => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2493,7 +3114,7 @@ pub fn entry(lang: Language) -> Entry { ("месяца", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2516,8 +3137,19 @@ pub fn entry(lang: Language) -> Entry { ("мая", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("сегодня", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("вчера", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Si => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -2534,7 +3166,7 @@ pub fn entry(lang: Language) -> Entry { ("ද\u{dd2}න", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "YD", + date_order: &[DateCmp::Y, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2557,8 +3189,20 @@ pub fn entry(lang: Language) -> Entry { ("අප\u{dca}\u{200d}රේල\u{dca}", 4), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("ඊයෙ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("ඊයේ", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("අද", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Sk => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -2583,7 +3227,7 @@ pub fn entry(lang: Language) -> Entry { ("týždňami", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2591,8 +3235,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 10121458955350035957, + disps: &[ + (0, 0), + ], + entries: &[ + ("včera", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("dnes", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Sl => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2627,7 +3282,7 @@ pub fn entry(lang: Language) -> Entry { ("urama", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2650,8 +3305,19 @@ pub fn entry(lang: Language) -> Entry { ("dec.", 12), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("danes", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("včeraj", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Sq => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 471159234146692604, disps: &[ @@ -2671,7 +3337,7 @@ pub fn entry(lang: Language) -> Entry { ("vjet", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2694,8 +3360,19 @@ pub fn entry(lang: Language) -> Entry { ("jan", 1), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("dje", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("sot", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Sr => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -2723,7 +3400,7 @@ pub fn entry(lang: Language) -> Entry { ("минута", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2731,8 +3408,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("јуче", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("данас", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::SrLatn => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2761,7 +3449,7 @@ pub fn entry(lang: Language) -> Entry { ("sat", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2769,8 +3457,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (1, 0), + ], + entries: &[ + ("juče", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("danas", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Sv => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2794,7 +3493,7 @@ pub fn entry(lang: Language) -> Entry { ("sekunder", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2817,8 +3516,19 @@ pub fn entry(lang: Language) -> Entry { ("maj", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("idag", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("igår", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Sw => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2837,31 +3547,42 @@ pub fn entry(lang: Language) -> Entry { ("miaka", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ - (0, 3), - (3, 0), - (11, 5), + (4, 0), + (1, 4), + (6, 1), ], entries: &[ - ("Feb", 2), - ("Mac", 3), - ("Jun", 6), - ("Jan", 1), - ("Des", 12), - ("Jul", 7), - ("Mei", 5), - ("Okt", 10), - ("Nov", 11), - ("Apr", 4), - ("Sep", 9), - ("Ago", 8), + ("jan", 1), + ("jul", 7), + ("mac", 3), + ("feb", 2), + ("nov", 11), + ("okt", 10), + ("apr", 4), + ("jun", 6), + ("sep", 9), + ("ago", 8), + ("des", 12), + ("mei", 5), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("leo", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("jana", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, }, Language::Ta => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -2885,7 +3606,7 @@ pub fn entry(lang: Language) -> Entry { ("வ\u{bbe}ரம\u{bcd}", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2908,8 +3629,19 @@ pub fn entry(lang: Language) -> Entry { ("மே,", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("நேற\u{bcd}று", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("இன\u{bcd}று", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Te => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 14108922650502679131, disps: &[ @@ -2934,7 +3666,7 @@ pub fn entry(lang: Language) -> Entry { ("సంవత\u{c4d}సర\u{c3e}ల", TaToken { n: 1, unit: Some(TimeUnit::Year) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2957,8 +3689,19 @@ pub fn entry(lang: Language) -> Entry { ("మ\u{c3e}ర\u{c4d}చ\u{c3f},", 3), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (1, 0), + ], + entries: &[ + ("ఈ", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("న\u{c3f}న\u{c4d}న", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Th => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -2975,7 +3718,7 @@ pub fn entry(lang: Language) -> Entry { ("เด\u{e37}อนท\u{e35}\u{e48}ผ\u{e48}านมา", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -2998,8 +3741,19 @@ pub fn entry(lang: Language) -> Entry { ("พ.ค.", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("อ\u{e31}ปเดตแล\u{e49}วว\u{e31}นน\u{e35}\u{e49}", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("อ\u{e31}ปเดตแล\u{e49}วเม\u{e37}\u{e48}อวาน", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Tr => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3016,31 +3770,42 @@ pub fn entry(lang: Language) -> Entry { ("saniye", TaToken { n: 1, unit: Some(TimeUnit::Second) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 10121458955350035957, disps: &[ - (0, 10), - (2, 0), - (0, 8), + (0, 0), + (6, 9), + (0, 3), ], entries: &[ - ("Kas", 11), - ("Mar", 3), - ("Eyl", 9), - ("Nis", 4), - ("Ara", 12), - ("Eki", 10), - ("Oca", 1), - ("May", 5), - ("Ağu", 8), - ("Haz", 6), - ("Tem", 7), - ("Şub", 2), + ("haz", 6), + ("ağu", 8), + ("oca", 1), + ("nis", 4), + ("eyl", 9), + ("mar", 3), + ("ara", 12), + ("eki", 10), + ("kas", 11), + ("şub", 2), + ("tem", 7), + ("may", 5), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("dün", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("bugün", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, }, Language::Uk => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -3072,7 +3837,7 @@ pub fn entry(lang: Language) -> Entry { ("дні", TaToken { n: 1, unit: Some(TimeUnit::Day) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -3095,8 +3860,19 @@ pub fn entry(lang: Language) -> Entry { ("лют.", 2), ], }, + timeago_nd_tokens: ::phf::Map { + key: 15467950696543387533, + disps: &[ + (1, 0), + ], + entries: &[ + ("вчора", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("сьогодні", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Ur => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 7485420634051515786, disps: &[ @@ -3120,7 +3896,7 @@ pub fn entry(lang: Language) -> Entry { ("گھنٹے", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 15467950696543387533, disps: &[ @@ -3143,8 +3919,19 @@ pub fn entry(lang: Language) -> Entry { ("مئی،", 5), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("آج", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ("کل", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Uz => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3161,7 +3948,7 @@ pub fn entry(lang: Language) -> Entry { ("oy", TaToken { n: 1, unit: Some(TimeUnit::Month) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -3184,8 +3971,19 @@ pub fn entry(lang: Language) -> Entry { ("-iyl,", 7), ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("kecha", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("bugun", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Vi => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -3203,7 +4001,7 @@ pub fn entry(lang: Language) -> Entry { ("phút", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "DMY", + date_order: &[DateCmp::D, DateCmp::M, DateCmp::Y], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3211,8 +4009,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("qua", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("nay", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::ZhCn => Entry { + by_char: true, timeago_tokens: ::phf::Map { key: 2980949210194914378, disps: &[ @@ -3229,7 +4038,7 @@ pub fn entry(lang: Language) -> Entry { ("小", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ], }, - date_order: "YMD", + date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3237,25 +4046,37 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("日", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::ZhHk => Entry { + by_char: true, timeago_tokens: ::phf::Map { - key: 15467950696543387533, + key: 12213676231523076107, disps: &[ - (0, 3), + (3, 3), (2, 0), ], entries: &[ - ("秒", TaToken { n: 1, unit: Some(TimeUnit::Second) }), - ("年", TaToken { n: 1, unit: Some(TimeUnit::Year) }), - ("小", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), - ("分", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ("月", TaToken { n: 1, unit: Some(TimeUnit::Month) }), - ("日", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("天", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("小", TaToken { n: 1, unit: Some(TimeUnit::Hour) }), ("期", TaToken { n: 1, unit: Some(TimeUnit::Week) }), + ("年", TaToken { n: 1, unit: Some(TimeUnit::Year) }), + ("秒", TaToken { n: 1, unit: Some(TimeUnit::Second) }), + ("日", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("分", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "YMD", + date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3263,8 +4084,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("天", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::ZhTw => Entry { + by_char: true, timeago_tokens: ::phf::Map { key: 10121458955350035957, disps: &[ @@ -3281,7 +4113,7 @@ pub fn entry(lang: Language) -> Entry { ("分", TaToken { n: 1, unit: Some(TimeUnit::Minute) }), ], }, - date_order: "YMD", + date_order: &[DateCmp::Y, DateCmp::M, DateCmp::D], months: ::phf::Map { key: 12913932095322966823, disps: &[ @@ -3289,8 +4121,19 @@ pub fn entry(lang: Language) -> Entry { entries: &[ ], }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("天", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("今", TaToken { n: 0, unit: Some(TimeUnit::Day) }), + ], + }, }, Language::Zu => Entry { + by_char: false, timeago_tokens: ::phf::Map { key: 8694567506910003252, disps: &[ @@ -3315,27 +4158,37 @@ pub fn entry(lang: Language) -> Entry { ("amaviki", TaToken { n: 1, unit: Some(TimeUnit::Week) }), ], }, - date_order: "DY", + date_order: &[DateCmp::D, DateCmp::Y], months: ::phf::Map { - key: 12913932095322966823, + key: 15467950696543387533, disps: &[ - (0, 4), - (1, 10), - (1, 0), + (6, 0), + (0, 0), + (2, 1), ], entries: &[ - ("ka-Aga", 8), - ("ka-Mas", 3), - ("ka-Jan", 1), - ("ka-Sep", 9), - ("ka-Jun", 6), - ("ka-Eph", 4), - ("ka-Mey", 5), - ("ka-Jul", 7), - ("ka-Feb", 2), - ("ka-Okt", 10), - ("ka-Dis", 12), - ("ka-Nov", 11), + ("ka-jun", 6), + ("ka-eph", 4), + ("ka-sep", 9), + ("ka-dis", 12), + ("ka-jan", 1), + ("ka-nov", 11), + ("ka-mey", 5), + ("ka-mas", 3), + ("ka-feb", 2), + ("ka-okt", 10), + ("ka-aga", 8), + ("ka-jul", 7), + ], + }, + timeago_nd_tokens: ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 0), + ], + entries: &[ + ("izolo", TaToken { n: 1, unit: Some(TimeUnit::Day) }), + ("namuhla", TaToken { n: 0, unit: Some(TimeUnit::Day) }), ], }, }, diff --git a/src/timeago.rs b/src/timeago.rs index 999ac5a..df87dc0 100644 --- a/src/timeago.rs +++ b/src/timeago.rs @@ -1,5 +1,6 @@ -use std::cmp::Ordering; +use std::{cmp::Ordering, ops::Mul}; +use chrono::NaiveDate; use serde::{Deserialize, Serialize}; use crate::{dictionary, model::Language, util}; @@ -16,6 +17,12 @@ pub struct TaToken { pub unit: Option, } +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +enum ParsedDate { + Absolute(NaiveDate), + Relative(TimeAgo), +} + #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(rename_all = "lowercase")] pub enum TimeUnit { @@ -28,6 +35,12 @@ pub enum TimeUnit { Year, } +pub enum DateCmp { + Y, + M, + D, +} + impl TimeUnit { fn seconds(&self) -> u64 { match self { @@ -66,34 +79,48 @@ impl PartialOrd for TimeAgo { } } -pub fn parse(lang: Language, textual_date: &str) -> Option { - let mappings = dictionary::entry(lang).timeago_tokens; +impl Mul for TimeAgo { + type Output = Self; - let filtered_str = textual_date + fn mul(self, rhs: u8) -> Self::Output { + TimeAgo { + n: self.n * rhs, + unit: self.unit, + } + } +} + +fn filter_str(string: &str) -> String { + string .to_lowercase() .chars() .filter(|c| c != &'\u{200b}' && !c.is_ascii_digit()) - .collect::(); + .collect() +} - let mut qu: u8 = util::parse_numeric(&textual_date).unwrap_or(1); +fn parse_ta_token(entry: &dictionary::Entry, nd: bool, filtered_str: &str) -> Option { + let tokens = match nd { + true => &entry.timeago_nd_tokens, + false => &entry.timeago_tokens, + }; + let mut qu = 1; - match lang { - Language::Ja | Language::ZhCn | Language::ZhHk | Language::ZhTw => { - filtered_str.chars().find_map(|word| { - mappings - .get(&word.to_string()) - .map(|t| match t.unit { - Some(unit) => Some(TimeAgo { n: t.n * qu, unit }), - None => { - qu = t.n; - None - } - }) - .flatten() - }) - } - _ => filtered_str.split_whitespace().find_map(|word| { - mappings + if entry.by_char { + filtered_str.chars().find_map(|word| { + tokens + .get(&word.to_string()) + .map(|t| match t.unit { + Some(unit) => Some(TimeAgo { n: t.n * qu, unit }), + None => { + qu = t.n; + None + } + }) + .flatten() + }) + } else { + filtered_str.split_whitespace().find_map(|word| { + tokens .get(word) .map(|t| match t.unit { Some(unit) => Some(TimeAgo { n: t.n * qu, unit }), @@ -103,7 +130,75 @@ pub fn parse(lang: Language, textual_date: &str) -> Option { } }) .flatten() - }), + }) + } +} + +fn parse_textual_month(entry: &dictionary::Entry, filtered_str: &str) -> Option { + if entry.by_char { + // Chinese/Japanese dont use textual months + None + } else { + filtered_str + .split_whitespace() + .find_map(|word| entry.months.get(word).map(|n| *n)) + } +} + +pub fn parse(lang: Language, textual_date: &str) -> Option { + let entry = dictionary::entry(lang); + let filtered_str = filter_str(textual_date); + + let qu: u8 = util::parse_numeric(&textual_date).unwrap_or(1); + + parse_ta_token(&entry, false, &filtered_str).map(|ta| ta * qu) +} + +fn parse_date(lang: Language, textual_date: &str) -> Option { + let entry = dictionary::entry(lang); + let filtered_str = filter_str(textual_date); + + let nums = util::parse_numeric_vec::(textual_date); + + match nums.len() { + 0 => match parse_ta_token(&entry, true, &filtered_str) { + Some(timeago) => Some(ParsedDate::Relative(timeago)), + None => parse_ta_token(&entry, false, &filtered_str) + .map(|timeago| ParsedDate::Relative(timeago)), + }, + 1 => parse_ta_token(&entry, false, &filtered_str) + .map(|timeago| ParsedDate::Relative(timeago * nums[0] as u8)), + 2..=3 => { + if nums.len() == entry.date_order.len() { + let mut y: Option = None; + let mut m: Option = None; + let mut d: Option = None; + + nums.iter() + .enumerate() + .for_each(|(i, n)| match entry.date_order[i] { + DateCmp::Y => y = Some(*n), + DateCmp::M => m = Some(*n), + DateCmp::D => d = Some(*n), + }); + + if m.is_none() { + m = parse_textual_month(&entry, &filtered_str).map(|n| n as u16); + } + + match (y, m, d) { + (Some(y), Some(m), Some(d)) => Some(ParsedDate::Absolute(NaiveDate::from_ymd( + y.into(), + m.into(), + d.into(), + ))), + _ => None, + } + } else { + None + } + } + _ => None, } } @@ -125,8 +220,8 @@ mod tests { #[case] textual_date: &str, #[case] expect: Option, ) { - let secs_ago = parse(lang, textual_date); - assert_eq!(secs_ago, expect); + let time_ago = parse(lang, textual_date); + assert_eq!(time_ago, expect); } #[test] @@ -339,4 +434,132 @@ mod tests { assert_eq!(n_cases, 1065) } + + #[rstest] + #[case(Language::En, "Updated today", Some(ParsedDate::Relative(TimeAgo { n: 0, unit: TimeUnit::Day })))] + #[case(Language::En, "Updated yesterday", Some(ParsedDate::Relative(TimeAgo { n: 1, unit: TimeUnit::Day })))] + #[case(Language::En, "Updated 2 days ago", Some(ParsedDate::Relative(TimeAgo { n: 2, unit: TimeUnit::Day })))] + #[case( + Language::En, + "Last updated on Jun 04, 2003", + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2003, 6, 4))) + )] + fn t_parse_date( + #[case] lang: Language, + #[case] textual_date: &str, + #[case] expect: Option, + ) { + let parsed_date = parse_date(lang, textual_date); + assert_eq!(parsed_date, expect); + } + + #[test] + fn t_parse_date_samples() { + let json_path = Path::new("testfiles/date/playlist_samples.json"); + let json_file = File::open(json_path).unwrap(); + let date_samples: BTreeMap> = + serde_json::from_reader(BufReader::new(json_file)).unwrap(); + + date_samples.iter().for_each(|(lang, samples)| { + assert_eq!( + parse_date(*lang, samples.get("Today").unwrap()), + Some(ParsedDate::Relative(TimeAgo { + n: 0, + unit: TimeUnit::Day + })), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Yesterday").unwrap()), + Some(ParsedDate::Relative(TimeAgo { + n: 1, + unit: TimeUnit::Day + })), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Ago").unwrap()), + Some(ParsedDate::Relative(TimeAgo { + n: 3, + unit: TimeUnit::Day + })), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Jan").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2020, 1, 3))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Feb").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2016, 2, 7))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Mar").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2015, 3, 9))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Apr").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2017, 4, 2))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("May").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 5, 22))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Jun").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 6, 28))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Jul").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 7, 2))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Aug").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2015, 8, 23))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Sep").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2018, 9, 16))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Oct").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2014, 10, 31))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Nov").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2016, 11, 3))), + "lang: {}", + lang + ); + assert_eq!( + parse_date(*lang, samples.get("Dec").unwrap()), + Some(ParsedDate::Absolute(NaiveDate::from_ymd(2021, 12, 24))), + "lang: {}", + lang + ); + }) + } } diff --git a/src/util.rs b/src/util.rs index e8d9ac2..27d9cae 100644 --- a/src/util.rs +++ b/src/util.rs @@ -2,7 +2,6 @@ use std::{collections::BTreeMap, str::FromStr}; use anyhow::Result; use fancy_regex::Regex; -use once_cell::sync::Lazy; use rand::Rng; use url::Url; diff --git a/testfiles/date/dictionary.json b/testfiles/date/dictionary.json index e55ffd9..7a04e9b 100644 --- a/testfiles/date/dictionary.json +++ b/testfiles/date/dictionary.json @@ -19,18 +19,22 @@ }, "date_order": "DY", "months": { - "Apr.": 4, - "Aug.": 8, - "Des.": 12, - "Feb.": 2, - "Jan.": 1, - "Jul.": 7, - "Jun.": 6, - "Mei": 5, - "Mrt.": 3, - "Nov.": 11, - "Okt.": 10, - "Sep.": 9 + "apr.": 4, + "aug.": 8, + "des.": 12, + "feb.": 2, + "jan.": 1, + "jul.": 7, + "jun.": 6, + "mei": 5, + "mrt.": 3, + "nov.": 11, + "okt.": 10, + "sep.": 9 + }, + "timeago_nd_tokens": { + "gister": "1D", + "vandag": "0D" } }, "am": { @@ -66,6 +70,10 @@ "ጁን": 6, "ጃንዩ": 1, "ፌብሩ": 2 + }, + "timeago_nd_tokens": { + "ትላንት": "1D", + "ዛሬ": "0D" } }, "ar": { @@ -98,7 +106,11 @@ "يومًا": "D" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "اليوم": "0D", + "بالأمس": "1D" + } }, "as": { "equivalent": [], @@ -113,7 +125,11 @@ "সপ্তাহ": "W" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "আজি": "0D", + "কালি": "1D" + } }, "az": { "equivalent": [], @@ -141,6 +157,10 @@ "okt": 10, "sen": 9, "yan": 1 + }, + "timeago_nd_tokens": { + "bugün": "0D", + "dünən": "1D" } }, "be": { @@ -186,6 +206,10 @@ "сне": 12, "сту": 1, "чэр": 6 + }, + "timeago_nd_tokens": { + "сёння": "0D", + "ўчора": "1D" } }, "bg": { @@ -208,7 +232,11 @@ "часа": "h" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "вчера": "1D", + "днес": "0D" + } }, "bn": { "equivalent": [], @@ -236,6 +264,10 @@ "মার্চ,": 3, "মে,": 5, "সেপ্টেম্বর,": 9 + }, + "timeago_nd_tokens": { + "আজ": "0D", + "গতকাল": "1D" } }, "bs": { @@ -276,6 +308,10 @@ "nov": 11, "okt": 10, "sep": 9 + }, + "timeago_nd_tokens": { + "danas": "0D", + "jučer": "1D" } }, "ca": { @@ -311,6 +347,10 @@ "març": 3, "nov.": 11, "set.": 9 + }, + "timeago_nd_tokens": { + "ahir": "1D", + "avui": "0D" } }, "cs": { @@ -334,7 +374,11 @@ "týdny": "W" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "dnes": "0D", + "včera": "1D" + } }, "da": { "equivalent": [], @@ -368,6 +412,10 @@ "nov.": 11, "okt.": 10, "sep.": 9 + }, + "timeago_nd_tokens": { + "dag": "0D", + "går": "1D" } }, "de": { @@ -390,7 +438,11 @@ "wochen": "W" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "gestern": "1D", + "heute": "0D" + } }, "el": { "equivalent": [], @@ -413,18 +465,22 @@ }, "date_order": "DY", "months": { - "Απρ": 4, - "Αυγ": 8, - "Δεκ": 12, - "Ιαν": 1, - "Ιουλ": 7, - "Ιουν": 6, - "Μαΐ": 5, - "Μαρ": 3, - "Νοε": 11, - "Οκτ": 10, - "Σεπ": 9, - "Φεβ": 2 + "απρ": 4, + "αυγ": 8, + "δεκ": 12, + "ιαν": 1, + "ιουλ": 7, + "ιουν": 6, + "μαΐ": 5, + "μαρ": 3, + "νοε": 11, + "οκτ": 10, + "σεπ": 9, + "φεβ": 2 + }, + "timeago_nd_tokens": { + "σήμερα": "0D", + "χτες": "1D" } }, "en": { @@ -451,18 +507,22 @@ }, "date_order": "DY", "months": { - "Apr": 4, - "Aug": 8, - "Dec": 12, - "Feb": 2, - "Jan": 1, - "Jul": 7, - "Jun": 6, - "Mar": 3, - "May": 5, - "Nov": 11, - "Oct": 10, - "Sep": 9 + "apr": 4, + "aug": 8, + "dec": 12, + "feb": 2, + "jan": 1, + "jul": 7, + "jun": 6, + "mar": 3, + "may": 5, + "nov": 11, + "oct": 10, + "sep": 9 + }, + "timeago_nd_tokens": { + "today": "0D", + "yesterday": "1D" } }, "es": { @@ -501,6 +561,10 @@ "nov": 11, "oct": 10, "sept": 9 + }, + "timeago_nd_tokens": { + "ayer": "1D", + "hoy": "0D" } }, "et": { @@ -538,6 +602,10 @@ "okt": 10, "sept": 9, "veebr": 2 + }, + "timeago_nd_tokens": { + "eile": "1D", + "täna": "0D" } }, "eu": { @@ -569,6 +637,10 @@ "urr.": 10, "urt.": 1, "uzt.": 7 + }, + "timeago_nd_tokens": { + "atzo": "1D", + "gaur": "0D" } }, "fa": { @@ -597,6 +669,10 @@ "ژانویه": 1, "ژوئن": 6, "ژوئیه": 7 + }, + "timeago_nd_tokens": { + "امروز": "0D", + "دیروز": "1D" } }, "fi": { @@ -619,7 +695,11 @@ "vuotta": "Y" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "eilen": "1D", + "tänään": "0D" + } }, "fil": { "equivalent": [], @@ -635,18 +715,22 @@ }, "date_order": "DY", "months": { - "Abr": 4, - "Ago": 8, - "Dis": 12, - "Ene": 1, - "Hul": 7, - "Hun": 6, - "Mar": 3, - "May": 5, - "Nob": 11, - "Okt": 10, - "Peb": 2, - "Set": 9 + "abr": 4, + "ago": 8, + "dis": 12, + "ene": 1, + "hul": 7, + "hun": 6, + "mar": 3, + "may": 5, + "nob": 11, + "okt": 10, + "peb": 2, + "set": 9 + }, + "timeago_nd_tokens": { + "kahapon": "1D", + "ngayong": "0D" } }, "fr": { @@ -683,6 +767,10 @@ "nov.": 11, "oct.": 10, "sept.": 9 + }, + "timeago_nd_tokens": { + "aujourd'hui": "0D", + "hier": "1D" } }, "gl": { @@ -718,6 +806,10 @@ "xan.": 1, "xul.": 7, "xuño": 6 + }, + "timeago_nd_tokens": { + "hoxe": "0D", + "onte": "1D" } }, "gu": { @@ -746,6 +838,10 @@ "માર્ચ,": 3, "મે,": 5, "સપ્ટે,": 9 + }, + "timeago_nd_tokens": { + "આજે": "0D", + "ગઈ": "1D" } }, "hi": { @@ -774,6 +870,10 @@ "मई": 5, "मार्च": 3, "सित॰": 9 + }, + "timeago_nd_tokens": { + "आज": "0D", + "कल": "1D" } }, "hr": { @@ -814,6 +914,10 @@ "svi": 5, "tra": 4, "velj": 2 + }, + "timeago_nd_tokens": { + "danas": "0D", + "jučer": "1D" } }, "hu": { @@ -849,6 +953,10 @@ "okt.": 10, "szept.": 9, "ápr.": 4 + }, + "timeago_nd_tokens": { + "ma": "0D", + "tegnap": "1D" } }, "hy": { @@ -877,6 +985,10 @@ "սեպ,": 9, "փտվ,": 2, "օգս,": 8 + }, + "timeago_nd_tokens": { + "այսօր": "0D", + "երեկ": "1D" } }, "id": { @@ -893,18 +1005,22 @@ }, "date_order": "DY", "months": { - "Agu": 8, - "Apr": 4, - "Des": 12, - "Feb": 2, - "Jan": 1, - "Jul": 7, - "Jun": 6, - "Mar": 3, - "Mei": 5, - "Nov": 11, - "Okt": 10, - "Sep": 9 + "agu": 8, + "apr": 4, + "des": 12, + "feb": 2, + "jan": 1, + "jul": 7, + "jun": 6, + "mar": 3, + "mei": 5, + "nov": 11, + "okt": 10, + "sep": 9 + }, + "timeago_nd_tokens": { + "ini": "0D", + "kemarin": "1D" } }, "is": { @@ -940,6 +1056,10 @@ "okt.": 10, "sep.": 9, "ágú.": 8 + }, + "timeago_nd_tokens": { + "dag": "0D", + "gær": "1D" } }, "it": { @@ -975,6 +1095,10 @@ "nov": 11, "ott": 10, "set": 9 + }, + "timeago_nd_tokens": { + "ieri": "1D", + "oggi": "0D" } }, "iw": { @@ -1016,6 +1140,10 @@ "בנוב׳": 11, "בספט׳": 9, "בפבר׳": 2 + }, + "timeago_nd_tokens": { + "אתמול": "1D", + "היום": "0D" } }, "ja": { @@ -1031,7 +1159,11 @@ "週": "W" }, "date_order": "YMD", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "日": "1D", + "本": "0D" + } }, "ka": { "equivalent": [], @@ -1059,6 +1191,10 @@ "ნოე.": 11, "ოქტ.": 10, "სექ.": 9 + }, + "timeago_nd_tokens": { + "გუშინ": "1D", + "დღეს": "0D" } }, "kk": { @@ -1087,6 +1223,10 @@ "қар.": 11, "қаң.": 1, "қыр.": 9 + }, + "timeago_nd_tokens": { + "бүгін": "0D", + "кеше": "1D" } }, "km": { @@ -1115,6 +1255,10 @@ "វិច្ឆិកា": 11, "សីហា": 8, "ឧសភា": 5 + }, + "timeago_nd_tokens": { + "បានធ្វើបច្ចុប្បន្នភាពថ្ងៃនេះ": "0D", + "បានធ្វើបច្ចុប្បន្នភាពម្សិលមិញ": "1D" } }, "kn": { @@ -1150,6 +1294,10 @@ "ಮಾರ್ಚ್": 3, "ಮೇ": 5, "ಸೆಪ್ಟೆಂ": 9 + }, + "timeago_nd_tokens": { + "ಇಂದು": "0D", + "ನಿನ್ನೆ": "1D" } }, "ko": { @@ -1165,7 +1313,10 @@ "초": "s" }, "date_order": "YMD", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "오늘": "0D" + } }, "ky": { "equivalent": [], @@ -1193,6 +1344,10 @@ "-сен.": 9, "-фев.": 2, "-янв.": 1 + }, + "timeago_nd_tokens": { + "бүгүн": "0D", + "кечээ": "1D" } }, "lo": { @@ -1221,12 +1376,17 @@ "ມ.ສ.": 4, "ມິ.ຖ.": 6, "ສ.ຫ.": 8 + }, + "timeago_nd_tokens": { + "ອັບເດດມື້ນີ້": "0D", + "ອັບເດດມື້ວານນີ້": "1D" } }, "lt": { "equivalent": [], "by_char": false, "timeago_tokens": { + "d.": "D", "dienas": "D", "dieną": "D", "dienų": "D", @@ -1249,7 +1409,11 @@ "valandų": "h" }, "date_order": "YMD", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "vakar": "1D", + "šiandien": "0D" + } }, "lv": { "equivalent": [], @@ -1284,6 +1448,10 @@ "nov.": 11, "okt.": 10, "sept.": 9 + }, + "timeago_nd_tokens": { + "vakar": "1D", + "šodien": "0D" } }, "mk": { @@ -1306,7 +1474,11 @@ "часа": "h" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "вчера": "1D", + "денес": "0D" + } }, "ml": { "equivalent": [], @@ -1334,6 +1506,10 @@ "മാർ": 3, "മേയ്": 5, "സെപ്റ്റം": 9 + }, + "timeago_nd_tokens": { + "ഇന്നലെ": "1D", + "ഇന്ന്": "0D" } }, "mn": { @@ -1349,7 +1525,11 @@ "өдрийн": "D" }, "date_order": "YMD", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "өнөөдөр": "0D", + "өчигдөр": "1D" + } }, "mr": { "equivalent": [], @@ -1384,6 +1564,10 @@ "मार्च,": 3, "मे,": 5, "सप्टें,": 9 + }, + "timeago_nd_tokens": { + "आज": "0D", + "काल": "1D" } }, "ms": { @@ -1400,18 +1584,22 @@ }, "date_order": "DY", "months": { - "Apr": 4, - "Dis": 12, - "Feb": 2, - "Jan": 1, - "Jul": 7, - "Jun": 6, - "Mac": 3, - "Mei": 5, - "Nov": 11, - "Ogo": 8, - "Okt": 10, - "Sep": 9 + "apr": 4, + "dis": 12, + "feb": 2, + "jan": 1, + "jul": 7, + "jun": 6, + "mac": 3, + "mei": 5, + "nov": 11, + "ogo": 8, + "okt": 10, + "sep": 9 + }, + "timeago_nd_tokens": { + "ini": "0D", + "semalam": "1D" } }, "my": { @@ -1424,6 +1612,7 @@ "ပတ်": "W", "မိနစ်": "m", "ရက်": "D", + "ရက်က": "D", "လ": "M" }, "date_order": "YD", @@ -1440,6 +1629,10 @@ "အောက်": 10, "ဧ": 4, "ဩ": 8 + }, + "timeago_nd_tokens": { + "မနေ့က": "1D", + "ယနေ့": "0D" } }, "ne": { @@ -1468,6 +1661,10 @@ "मार्च": 3, "मे": 5, "सेप्टेम्बर": 9 + }, + "timeago_nd_tokens": { + "आज": "0D", + "हिजो": "1D" } }, "nl": { @@ -1501,6 +1698,10 @@ "nov.": 11, "okt.": 10, "sep.": 9 + }, + "timeago_nd_tokens": { + "gisteren": "1D", + "vandaag": "0D" } }, "no": { @@ -1536,6 +1737,10 @@ "nov.": 11, "okt.": 10, "sep.": 9 + }, + "timeago_nd_tokens": { + "dag": "0D", + "går": "1D" } }, "or": { @@ -1564,6 +1769,10 @@ "ମଇ": 5, "ମାର୍ଚ୍ଚ": 3, "ସେପ୍ଟେମ୍ବର": 9 + }, + "timeago_nd_tokens": { + "ଆଜି": "0D", + "ଗତକାଲି": "1D" } }, "pa": { @@ -1595,6 +1804,10 @@ "ਮਈ": 5, "ਮਾਰਚ": 3, "ਸਤੰ": 9 + }, + "timeago_nd_tokens": { + "ਅੱਜ": "0D", + "ਬੀੇਤੇ": "1D" } }, "pl": { @@ -1635,6 +1848,10 @@ "sie": 8, "sty": 1, "wrz": 9 + }, + "timeago_nd_tokens": { + "dzisiaj": "0D", + "wczoraj": "1D" } }, "pt": { @@ -1672,6 +1889,10 @@ "nov.": 11, "out.": 10, "set.": 9 + }, + "timeago_nd_tokens": { + "hoje": "0D", + "ontem": "1D" } }, "ro": { @@ -1707,6 +1928,10 @@ "nov.": 11, "oct.": 10, "sept.": 9 + }, + "timeago_nd_tokens": { + "astăzi": "0D", + "ieri": "1D" } }, "ru": { @@ -1748,6 +1973,10 @@ "сент.": 9, "февр.": 2, "янв.": 1 + }, + "timeago_nd_tokens": { + "вчера": "1D", + "сегодня": "0D" } }, "si": { @@ -1776,6 +2005,11 @@ "මාර්තු": 3, "මැයි": 5, "සැප්": 9 + }, + "timeago_nd_tokens": { + "අද": "0D", + "ඊයෙ": "1D", + "ඊයේ": "1D" } }, "sk": { @@ -1798,7 +2032,11 @@ "týždňom": "W" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "dnes": "0D", + "včera": "1D" + } }, "sl": { "equivalent": [], @@ -1841,6 +2079,10 @@ "nov.": 11, "okt.": 10, "sep.": 9 + }, + "timeago_nd_tokens": { + "danes": "0D", + "včeraj": "1D" } }, "sq": { @@ -1872,6 +2114,10 @@ "shk": 2, "sht": 9, "tet": 10 + }, + "timeago_nd_tokens": { + "dje": "1D", + "sot": "0D" } }, "sr": { @@ -1896,7 +2142,11 @@ "секунди": "s" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "данас": "0D", + "јуче": "1D" + } }, "sr-Latn": { "equivalent": [], @@ -1921,7 +2171,11 @@ "sekundi": "s" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "danas": "0D", + "juče": "1D" + } }, "sv": { "equivalent": [], @@ -1955,6 +2209,10 @@ "nov.": 11, "okt.": 10, "sep.": 9 + }, + "timeago_nd_tokens": { + "idag": "0D", + "igår": "1D" } }, "sw": { @@ -1973,18 +2231,22 @@ }, "date_order": "DY", "months": { - "Ago": 8, - "Apr": 4, - "Des": 12, - "Feb": 2, - "Jan": 1, - "Jul": 7, - "Jun": 6, - "Mac": 3, - "Mei": 5, - "Nov": 11, - "Okt": 10, - "Sep": 9 + "ago": 8, + "apr": 4, + "des": 12, + "feb": 2, + "jan": 1, + "jul": 7, + "jun": 6, + "mac": 3, + "mei": 5, + "nov": 11, + "okt": 10, + "sep": 9 + }, + "timeago_nd_tokens": { + "jana": "1D", + "leo": "0D" } }, "ta": { @@ -2019,6 +2281,10 @@ "பிப்.,": 2, "மார்.,": 3, "மே,": 5 + }, + "timeago_nd_tokens": { + "இன்று": "0D", + "நேற்று": "1D" } }, "te": { @@ -2054,6 +2320,10 @@ "మార్చి,": 3, "మే,": 5, "సెప్టెం,": 9 + }, + "timeago_nd_tokens": { + "ఈ": "0D", + "నిన్న": "1D" } }, "th": { @@ -2082,6 +2352,10 @@ "มี.ค.": 3, "ส.ค.": 8, "เม.ย.": 4 + }, + "timeago_nd_tokens": { + "อัปเดตแล้ววันนี้": "0D", + "อัปเดตแล้วเมื่อวาน": "1D" } }, "tr": { @@ -2098,18 +2372,22 @@ }, "date_order": "DY", "months": { - "Ara": 12, - "Ağu": 8, - "Eki": 10, - "Eyl": 9, - "Haz": 6, - "Kas": 11, - "Mar": 3, - "May": 5, - "Nis": 4, - "Oca": 1, - "Tem": 7, - "Şub": 2 + "ara": 12, + "ağu": 8, + "eki": 10, + "eyl": 9, + "haz": 6, + "kas": 11, + "mar": 3, + "may": 5, + "nis": 4, + "oca": 1, + "tem": 7, + "şub": 2 + }, + "timeago_nd_tokens": { + "bugün": "0D", + "dün": "1D" } }, "uk": { @@ -2151,6 +2429,10 @@ "січ.": 1, "трав.": 5, "черв.": 6 + }, + "timeago_nd_tokens": { + "вчора": "1D", + "сьогодні": "0D" } }, "ur": { @@ -2185,6 +2467,10 @@ "مئی،": 5, "مارچ،": 3, "نومبر،": 11 + }, + "timeago_nd_tokens": { + "آج": "0D", + "کل": "1D" } }, "uz": { @@ -2213,6 +2499,10 @@ "-okt,": 10, "-sen,": 9, "-yan,": 1 + }, + "timeago_nd_tokens": { + "bugun": "0D", + "kecha": "1D" } }, "vi": { @@ -2229,7 +2519,11 @@ "tuần": "W" }, "date_order": "DMY", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "nay": "0D", + "qua": "1D" + } }, "zh-CN": { "equivalent": [], @@ -2244,13 +2538,18 @@ "秒": "s" }, "date_order": "YMD", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "今": "0D", + "日": "1D" + } }, "zh-HK": { "equivalent": [], "by_char": true, "timeago_tokens": { "分": "m", + "天": "D", "小": "h", "年": "Y", "日": "D", @@ -2259,7 +2558,11 @@ "秒": "s" }, "date_order": "YMD", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "今": "0D", + "天": "1D" + } }, "zh-TW": { "equivalent": [], @@ -2274,7 +2577,11 @@ "週": "W" }, "date_order": "YMD", - "months": {} + "months": {}, + "timeago_nd_tokens": { + "今": "0D", + "天": "1D" + } }, "zu": { "equivalent": [], @@ -2297,18 +2604,22 @@ }, "date_order": "DY", "months": { - "ka-Aga": 8, - "ka-Dis": 12, - "ka-Eph": 4, - "ka-Feb": 2, - "ka-Jan": 1, - "ka-Jul": 7, - "ka-Jun": 6, - "ka-Mas": 3, - "ka-Mey": 5, - "ka-Nov": 11, - "ka-Okt": 10, - "ka-Sep": 9 + "ka-aga": 8, + "ka-dis": 12, + "ka-eph": 4, + "ka-feb": 2, + "ka-jan": 1, + "ka-jul": 7, + "ka-jun": 6, + "ka-mas": 3, + "ka-mey": 5, + "ka-nov": 11, + "ka-okt": 10, + "ka-sep": 9 + }, + "timeago_nd_tokens": { + "izolo": "1D", + "namuhla": "0D" } } } \ No newline at end of file