whichtime_sys/dictionaries/
pt.rs1use super::{CasualDateType, CasualTimeType, RelativeModifier, TimeUnit, Weekday};
4use phf::phf_map;
5
6pub static WEEKDAY_MAP: phf::Map<&'static str, Weekday> = phf_map! {
8 "domingo" => Weekday::Sunday,
9 "dom" => Weekday::Sunday,
10 "dom." => Weekday::Sunday,
11 "segunda" => Weekday::Monday,
12 "segunda-feira" => Weekday::Monday,
13 "seg" => Weekday::Monday,
14 "seg." => Weekday::Monday,
15 "terça" => Weekday::Tuesday,
16 "terca" => Weekday::Tuesday,
17 "terça-feira" => Weekday::Tuesday,
18 "terca-feira" => Weekday::Tuesday,
19 "ter" => Weekday::Tuesday,
20 "ter." => Weekday::Tuesday,
21 "quarta" => Weekday::Wednesday,
22 "quarta-feira" => Weekday::Wednesday,
23 "qua" => Weekday::Wednesday,
24 "qua." => Weekday::Wednesday,
25 "quinta" => Weekday::Thursday,
26 "quinta-feira" => Weekday::Thursday,
27 "qui" => Weekday::Thursday,
28 "qui." => Weekday::Thursday,
29 "sexta" => Weekday::Friday,
30 "sexta-feira" => Weekday::Friday,
31 "sex" => Weekday::Friday,
32 "sex." => Weekday::Friday,
33 "sábado" => Weekday::Saturday,
34 "sabado" => Weekday::Saturday,
35 "sab" => Weekday::Saturday,
36 "sab." => Weekday::Saturday,
37};
38
39pub static MONTH_MAP: phf::Map<&'static str, u32> = phf_map! {
41 "janeiro" => 1,
42 "jan" => 1,
43 "jan." => 1,
44 "fevereiro" => 2,
45 "fev" => 2,
46 "fev." => 2,
47 "março" => 3,
48 "marco" => 3,
49 "mar" => 3,
50 "mar." => 3,
51 "abril" => 4,
52 "abr" => 4,
53 "abr." => 4,
54 "maio" => 5,
55 "mai" => 5,
56 "mai." => 5,
57 "junho" => 6,
58 "jun" => 6,
59 "jun." => 6,
60 "julho" => 7,
61 "jul" => 7,
62 "jul." => 7,
63 "agosto" => 8,
64 "ago" => 8,
65 "ago." => 8,
66 "setembro" => 9,
67 "set" => 9,
68 "set." => 9,
69 "outubro" => 10,
70 "out" => 10,
71 "out." => 10,
72 "novembro" => 11,
73 "nov" => 11,
74 "nov." => 11,
75 "dezembro" => 12,
76 "dez" => 12,
77 "dez." => 12,
78};
79
80pub static INTEGER_WORD_MAP: phf::Map<&'static str, f64> = phf_map! {
82 "um" => 1.0,
83 "uma" => 1.0,
84 "dois" => 2.0,
85 "duas" => 2.0,
86 "três" => 3.0,
87 "tres" => 3.0,
88 "quatro" => 4.0,
89 "cinco" => 5.0,
90 "seis" => 6.0,
91 "sete" => 7.0,
92 "oito" => 8.0,
93 "nove" => 9.0,
94 "dez" => 10.0,
95 "onze" => 11.0,
96 "doze" => 12.0,
97};
98
99pub static TIME_UNIT_MAP: phf::Map<&'static str, TimeUnit> = phf_map! {
101 "seg" => TimeUnit::Second,
102 "segundo" => TimeUnit::Second,
103 "segundos" => TimeUnit::Second,
104 "min" => TimeUnit::Minute,
105 "mins" => TimeUnit::Minute,
106 "minuto" => TimeUnit::Minute,
107 "minutos" => TimeUnit::Minute,
108 "h" => TimeUnit::Hour,
109 "hr" => TimeUnit::Hour,
110 "hora" => TimeUnit::Hour,
111 "horas" => TimeUnit::Hour,
112 "dia" => TimeUnit::Day,
113 "dias" => TimeUnit::Day,
114 "semana" => TimeUnit::Week,
115 "semanas" => TimeUnit::Week,
116 "mês" => TimeUnit::Month,
117 "mes" => TimeUnit::Month,
118 "meses" => TimeUnit::Month,
119 "trimestre" => TimeUnit::Quarter,
120 "trimestres" => TimeUnit::Quarter,
121 "ano" => TimeUnit::Year,
122 "anos" => TimeUnit::Year,
123};
124
125pub static CASUAL_DATE_MAP: phf::Map<&'static str, CasualDateType> = phf_map! {
127 "agora" => CasualDateType::Now,
128 "hoje" => CasualDateType::Today,
129 "hoje à noite" => CasualDateType::Tonight,
130 "hoje a noite" => CasualDateType::Tonight,
131 "amanhã" => CasualDateType::Tomorrow,
132 "amanha" => CasualDateType::Tomorrow,
133 "ontem" => CasualDateType::Yesterday,
134 "depois de amanhã" => CasualDateType::Overmorrow,
135 "depois de amanha" => CasualDateType::Overmorrow,
136 "anteontem" => CasualDateType::DayBeforeYesterday,
137};
138
139pub static CASUAL_TIME_MAP: phf::Map<&'static str, CasualTimeType> = phf_map! {
141 "meio-dia" => CasualTimeType::Noon,
142 "meio dia" => CasualTimeType::Noon,
143 "meia-noite" => CasualTimeType::Midnight,
144 "meia noite" => CasualTimeType::Midnight,
145 "manhã" => CasualTimeType::Morning,
146 "manha" => CasualTimeType::Morning,
147 "tarde" => CasualTimeType::Afternoon,
148 "noite" => CasualTimeType::Night,
149};
150
151pub static RELATIVE_MODIFIER_MAP: phf::Map<&'static str, RelativeModifier> = phf_map! {
153 "este" => RelativeModifier::This,
154 "esta" => RelativeModifier::This,
155 "isto" => RelativeModifier::This,
156 "próximo" => RelativeModifier::Next,
157 "proximo" => RelativeModifier::Next,
158 "próxima" => RelativeModifier::Next,
159 "proxima" => RelativeModifier::Next,
160 "seguinte" => RelativeModifier::Next,
161 "passado" => RelativeModifier::Last,
162 "passada" => RelativeModifier::Last,
163 "último" => RelativeModifier::Last,
164 "ultimo" => RelativeModifier::Last,
165 "última" => RelativeModifier::Last,
166 "ultima" => RelativeModifier::Last,
167 "anterior" => RelativeModifier::Last,
168};
169
170#[inline]
175pub fn get_weekday(s: &str) -> Option<Weekday> {
176 WEEKDAY_MAP.get(s).copied()
177}
178
179#[inline]
180pub fn get_month(s: &str) -> Option<u32> {
181 MONTH_MAP.get(s).copied()
182}
183
184#[inline]
185pub fn get_integer_word(s: &str) -> Option<f64> {
186 INTEGER_WORD_MAP.get(s).copied()
187}
188
189#[inline]
190pub fn get_time_unit(s: &str) -> Option<TimeUnit> {
191 TIME_UNIT_MAP.get(s).copied()
192}
193
194#[inline]
195pub fn get_casual_date(s: &str) -> Option<CasualDateType> {
196 CASUAL_DATE_MAP.get(s).copied()
197}
198
199#[inline]
200pub fn get_casual_time(s: &str) -> Option<CasualTimeType> {
201 CASUAL_TIME_MAP.get(s).copied()
202}
203
204#[inline]
205pub fn get_relative_modifier(s: &str) -> Option<RelativeModifier> {
206 RELATIVE_MODIFIER_MAP.get(s).copied()
207}
208
209pub fn parse_number_pattern(text: &str) -> f64 {
211 let lower = text.to_lowercase();
212
213 if let Some(val) = get_integer_word(&lower) {
214 return val;
215 }
216
217 match lower.as_str() {
218 s if s.contains("alguns") || s.contains("algumas") => return 3.0,
219 s if s.contains("meia") || s.contains("meio") => return 0.5,
220 s if s.contains("vários") || s.contains("varios") => return 7.0,
221 _ => {}
222 }
223
224 text.parse::<f64>().unwrap_or(0.0)
225}