acute 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +17 -0
  3. data/data/assumptions.yml +124 -0
  4. data/data/words.yml +699 -0
  5. data/exe/acute +4 -0
  6. data/lib/acute/assumption.rb +13 -0
  7. data/lib/acute/calendar.rb +91 -0
  8. data/lib/acute/chronic.rb +176 -0
  9. data/lib/acute/chronic_duration.rb +321 -0
  10. data/lib/acute/cli.rb +168 -0
  11. data/lib/acute/context.rb +205 -0
  12. data/lib/acute/describe.rb +316 -0
  13. data/lib/acute/duration.rb +120 -0
  14. data/lib/acute/errors.rb +47 -0
  15. data/lib/acute/explain.rb +165 -0
  16. data/lib/acute/extract.rb +493 -0
  17. data/lib/acute/grammar/clock_words.rb +109 -0
  18. data/lib/acute/grammar/compact.rb +222 -0
  19. data/lib/acute/grammar/duration.rb +93 -0
  20. data/lib/acute/grammar/nesting.rb +104 -0
  21. data/lib/acute/grammar/numbers.rb +378 -0
  22. data/lib/acute/grammar/ordinals.rb +101 -0
  23. data/lib/acute/grammar/ranges.rb +112 -0
  24. data/lib/acute/grammar/rule.rb +277 -0
  25. data/lib/acute/grammar/shifts.rb +226 -0
  26. data/lib/acute/grammar/words.rb +307 -0
  27. data/lib/acute/grammar.rb +378 -0
  28. data/lib/acute/holidays.rb +97 -0
  29. data/lib/acute/lexer.rb +487 -0
  30. data/lib/acute/locale.rb +53 -0
  31. data/lib/acute/mcp.rb +224 -0
  32. data/lib/acute/parser.rb +66 -0
  33. data/lib/acute/read.rb +21 -0
  34. data/lib/acute/resolve/clock.rb +75 -0
  35. data/lib/acute/resolve/dates.rb +75 -0
  36. data/lib/acute/resolve/day.rb +24 -0
  37. data/lib/acute/resolve/fuzzy.rb +91 -0
  38. data/lib/acute/resolve/named.rb +116 -0
  39. data/lib/acute/resolve/nth.rb +47 -0
  40. data/lib/acute/resolve/period.rb +160 -0
  41. data/lib/acute/resolve/periodic.rb +274 -0
  42. data/lib/acute/resolve/ranges.rb +165 -0
  43. data/lib/acute/resolve/recur.rb +187 -0
  44. data/lib/acute/resolve/rel.rb +146 -0
  45. data/lib/acute/resolve/shift.rb +81 -0
  46. data/lib/acute/resolve.rb +245 -0
  47. data/lib/acute/result.rb +128 -0
  48. data/lib/acute/rule/cron.rb +222 -0
  49. data/lib/acute/rule/expand.rb +401 -0
  50. data/lib/acute/rule.rb +232 -0
  51. data/lib/acute/tables/assumptions.rb +39 -0
  52. data/lib/acute/tables/words.rb +656 -0
  53. data/lib/acute/tables/zones.rb +930 -0
  54. data/lib/acute/tool/compact.rb +82 -0
  55. data/lib/acute/tool/ruby_llm.rb +29 -0
  56. data/lib/acute/tool.rb +192 -0
  57. data/lib/acute/verify.rb +216 -0
  58. data/lib/acute/version.rb +3 -0
  59. data/lib/acute/zone.rb +252 -0
  60. data/lib/acute.rb +160 -0
  61. data/schema/description.json +12 -0
  62. data/schema/duration.json +26 -0
  63. data/schema/extraction.json +30 -0
  64. data/schema/failure.json +29 -0
  65. data/schema/now.json +17 -0
  66. data/schema/result.json +45 -0
  67. data/schema/rule.json +19 -0
  68. data/schema/tools/describe.json +13 -0
  69. data/schema/tools/duration.json +12 -0
  70. data/schema/tools/extract.json +13 -0
  71. data/schema/tools/now.json +9 -0
  72. data/schema/tools/parse.json +13 -0
  73. data/schema/tools/recurrence.json +12 -0
  74. data/schema/tools/verify.json +14 -0
  75. data/schema/verdict.json +25 -0
  76. metadata +117 -0
@@ -0,0 +1,656 @@
1
+ # GENERATED by bin/generate from data/words.yml; do not edit
2
+ # frozen_string_literal: true
3
+
4
+ module Acute
5
+ module Tables
6
+ WORDS = {
7
+ "today" => [:day, 0].freeze,
8
+ "tomorrow" => [:day, 1].freeze,
9
+ "tmrw" => [:day, 1].freeze,
10
+ "tmr" => [:day, 1].freeze,
11
+ "yesterday" => [:day, -1].freeze,
12
+ "today's" => [:day, 0].freeze,
13
+ "todays" => [:day, 0].freeze,
14
+ "tomorrow's" => [:day, 1].freeze,
15
+ "tomorrows" => [:day, 1].freeze,
16
+ "yesterday's" => [:day, -1].freeze,
17
+ "am" => [:meridiem, 0].freeze,
18
+ "a.m" => [:meridiem, 0].freeze,
19
+ "pm" => [:meridiem, 12].freeze,
20
+ "p.m" => [:meridiem, 12].freeze,
21
+ "p" => [:meridiem, 12].freeze,
22
+ "noon" => [:named, 12].freeze,
23
+ "midday" => [:named, 12].freeze,
24
+ "midnight" => [:named, 0].freeze,
25
+ "now" => [:now, 0].freeze,
26
+ "at" => [:at, 0].freeze,
27
+ "sunday" => [:weekday, 0].freeze,
28
+ "sun" => [:weekday, 0].freeze,
29
+ "monday" => [:weekday, 1].freeze,
30
+ "mon" => [:weekday, 1].freeze,
31
+ "tuesday" => [:weekday, 2].freeze,
32
+ "tue" => [:weekday, 2].freeze,
33
+ "tues" => [:weekday, 2].freeze,
34
+ "tu" => [:weekday, 2].freeze,
35
+ "wednesday" => [:weekday, 3].freeze,
36
+ "wed" => [:weekday, 3].freeze,
37
+ "midweek" => [:weekday, 3].freeze,
38
+ "thursday" => [:weekday, 4].freeze,
39
+ "thu" => [:weekday, 4].freeze,
40
+ "thur" => [:weekday, 4].freeze,
41
+ "thurs" => [:weekday, 4].freeze,
42
+ "friday" => [:weekday, 5].freeze,
43
+ "fri" => [:weekday, 5].freeze,
44
+ "fr" => [:weekday, 5].freeze,
45
+ "frid" => [:weekday, 5].freeze,
46
+ "saturday" => [:weekday, 6].freeze,
47
+ "sat" => [:weekday, 6].freeze,
48
+ "sundays" => [:weekday, 0].freeze,
49
+ "mondays" => [:weekday, 1].freeze,
50
+ "tuesdays" => [:weekday, 2].freeze,
51
+ "wednesdays" => [:weekday, 3].freeze,
52
+ "thursdays" => [:weekday, 4].freeze,
53
+ "fridays" => [:weekday, 5].freeze,
54
+ "saturdays" => [:weekday, 6].freeze,
55
+ "january" => [:month, 1].freeze,
56
+ "jan" => [:month, 1].freeze,
57
+ "february" => [:month, 2].freeze,
58
+ "feb" => [:month, 2].freeze,
59
+ "march" => [:month, 3].freeze,
60
+ "mar" => [:month, 3].freeze,
61
+ "april" => [:month, 4].freeze,
62
+ "apr" => [:month, 4].freeze,
63
+ "may" => [:month, 5].freeze,
64
+ "june" => [:month, 6].freeze,
65
+ "jun" => [:month, 6].freeze,
66
+ "july" => [:month, 7].freeze,
67
+ "jul" => [:month, 7].freeze,
68
+ "august" => [:month, 8].freeze,
69
+ "aug" => [:month, 8].freeze,
70
+ "september" => [:month, 9].freeze,
71
+ "sep" => [:month, 9].freeze,
72
+ "sept" => [:month, 9].freeze,
73
+ "october" => [:month, 10].freeze,
74
+ "oct" => [:month, 10].freeze,
75
+ "november" => [:month, 11].freeze,
76
+ "nov" => [:month, 11].freeze,
77
+ "december" => [:month, 12].freeze,
78
+ "dec" => [:month, 12].freeze,
79
+ "s" => [:unit, :second].freeze,
80
+ "sec" => [:unit, :second].freeze,
81
+ "secs" => [:unit, :second].freeze,
82
+ "seconds" => [:unit, :second].freeze,
83
+ "m" => [:unit, :minute].freeze,
84
+ "min" => [:unit, :minute].freeze,
85
+ "mins" => [:unit, :minute].freeze,
86
+ "minute" => [:unit, :minute].freeze,
87
+ "minutes" => [:unit, :minute].freeze,
88
+ "h" => [:unit, :hour].freeze,
89
+ "hr" => [:unit, :hour].freeze,
90
+ "hrs" => [:unit, :hour].freeze,
91
+ "hour" => [:unit, :hour].freeze,
92
+ "hours" => [:unit, :hour].freeze,
93
+ "d" => [:unit, :day].freeze,
94
+ "day" => [:unit, :day].freeze,
95
+ "days" => [:unit, :day].freeze,
96
+ "w" => [:unit, :week].freeze,
97
+ "wk" => [:unit, :week].freeze,
98
+ "wks" => [:unit, :week].freeze,
99
+ "week" => [:unit, :week].freeze,
100
+ "week's" => [:unit, :week].freeze,
101
+ "weeks" => [:unit, :week].freeze,
102
+ "fortnight" => [:unit, :fortnight].freeze,
103
+ "fortnight's" => [:unit, :fortnight].freeze,
104
+ "fortnights" => [:unit, :fortnight].freeze,
105
+ "mo" => [:unit, :month].freeze,
106
+ "month" => [:unit, :month].freeze,
107
+ "month's" => [:unit, :month].freeze,
108
+ "months" => [:unit, :month].freeze,
109
+ "quarter" => [:unit, :quarter].freeze,
110
+ "quarters" => [:unit, :quarter].freeze,
111
+ "qtr" => [:unit, :quarter].freeze,
112
+ "qtrs" => [:unit, :quarter].freeze,
113
+ "y" => [:unit, :year].freeze,
114
+ "yr" => [:unit, :year].freeze,
115
+ "yrs" => [:unit, :year].freeze,
116
+ "year" => [:unit, :year].freeze,
117
+ "year's" => [:unit, :year].freeze,
118
+ "years" => [:unit, :year].freeze,
119
+ "decade" => [:unit, :decade].freeze,
120
+ "decades" => [:unit, :decade].freeze,
121
+ "century" => [:unit, :century].freeze,
122
+ "season" => [:unit, :season].freeze,
123
+ "seasons" => [:unit, :season].freeze,
124
+ "centuries" => [:unit, :century].freeze,
125
+ "weekday" => [:unit, :business_day].freeze,
126
+ "weekdays" => [:unit, :business_day].freeze,
127
+ "next" => [:relative, :next].freeze,
128
+ "this" => [:relative, :this].freeze,
129
+ "current" => [:relative, :this].freeze,
130
+ "last" => [:relative, :last].freeze,
131
+ "past" => [:relative, :past].freeze,
132
+ "coming" => [:relative, :next].freeze,
133
+ "upcoming" => [:relative, :next].freeze,
134
+ "following" => [:relative, :next].freeze,
135
+ "previous" => [:relative, :last].freeze,
136
+ "prev" => [:relative, :last].freeze,
137
+ "one" => [:number, 1].freeze,
138
+ "two" => [:number, 2].freeze,
139
+ "three" => [:number, 3].freeze,
140
+ "four" => [:number, 4].freeze,
141
+ "five" => [:number, 5].freeze,
142
+ "six" => [:number, 6].freeze,
143
+ "seven" => [:number, 7].freeze,
144
+ "eight" => [:number, 8].freeze,
145
+ "nine" => [:number, 9].freeze,
146
+ "ten" => [:number, 10].freeze,
147
+ "eleven" => [:number, 11].freeze,
148
+ "twelve" => [:number, 12].freeze,
149
+ "thirteen" => [:number, 13].freeze,
150
+ "fourteen" => [:number, 14].freeze,
151
+ "fifteen" => [:number, 15].freeze,
152
+ "sixteen" => [:number, 16].freeze,
153
+ "seventeen" => [:number, 17].freeze,
154
+ "eighteen" => [:number, 18].freeze,
155
+ "nineteen" => [:number, 19].freeze,
156
+ "twenty" => [:number, 20].freeze,
157
+ "thirty" => [:number, 30].freeze,
158
+ "forty" => [:number, 40].freeze,
159
+ "fifty" => [:number, 50].freeze,
160
+ "sixty" => [:number, 60].freeze,
161
+ "seventy" => [:number, 70].freeze,
162
+ "eighty" => [:number, 80].freeze,
163
+ "ninety" => [:number, 90].freeze,
164
+ "twenties" => [:decade, 20].freeze,
165
+ "thirties" => [:decade, 30].freeze,
166
+ "forties" => [:decade, 40].freeze,
167
+ "fifties" => [:decade, 50].freeze,
168
+ "sixties" => [:decade, 60].freeze,
169
+ "seventies" => [:decade, 70].freeze,
170
+ "eighties" => [:decade, 80].freeze,
171
+ "nineties" => [:decade, 90].freeze,
172
+ "first" => [:ordinal, 1].freeze,
173
+ "final" => [:ordinal, -1].freeze,
174
+ "second" => [:ordinal, 2].freeze,
175
+ "third" => [:ordinal, 3].freeze,
176
+ "fourth" => [:ordinal, 4].freeze,
177
+ "fifth" => [:ordinal, 5].freeze,
178
+ "sixth" => [:ordinal, 6].freeze,
179
+ "seventh" => [:ordinal, 7].freeze,
180
+ "eighth" => [:ordinal, 8].freeze,
181
+ "ninth" => [:ordinal, 9].freeze,
182
+ "tenth" => [:ordinal, 10].freeze,
183
+ "eleventh" => [:ordinal, 11].freeze,
184
+ "twelfth" => [:ordinal, 12].freeze,
185
+ "thirteenth" => [:ordinal, 13].freeze,
186
+ "fourteenth" => [:ordinal, 14].freeze,
187
+ "fifteenth" => [:ordinal, 15].freeze,
188
+ "sixteenth" => [:ordinal, 16].freeze,
189
+ "seventeenth" => [:ordinal, 17].freeze,
190
+ "eighteenth" => [:ordinal, 18].freeze,
191
+ "nineteenth" => [:ordinal, 19].freeze,
192
+ "twentieth" => [:ordinal, 20].freeze,
193
+ "thirtieth" => [:ordinal, 30].freeze,
194
+ "morning" => [:part, :morning].freeze,
195
+ "afternoon" => [:part, :afternoon].freeze,
196
+ "evening" => [:part, :evening].freeze,
197
+ "mornings" => [:part, :morning].freeze,
198
+ "afternoons" => [:part, :afternoon].freeze,
199
+ "evenings" => [:part, :evening].freeze,
200
+ "nights" => [:part, :night].freeze,
201
+ "night" => [:part, :night].freeze,
202
+ "tonight" => [:part, :tonight].freeze,
203
+ "tonight's" => [:part, :tonight].freeze,
204
+ "lunch" => [:part, :lunch].freeze,
205
+ "lunchtime" => [:part, :lunch].freeze,
206
+ "spring" => [:season, :spring].freeze,
207
+ "summer" => [:season, :summer].freeze,
208
+ "autumn" => [:season, :autumn].freeze,
209
+ "fall" => [:season, :autumn].freeze,
210
+ "winter" => [:season, :winter].freeze,
211
+ "springs" => [:season, :spring].freeze,
212
+ "summers" => [:season, :summer].freeze,
213
+ "autumns" => [:season, :autumn].freeze,
214
+ "falls" => [:season, :autumn].freeze,
215
+ "winters" => [:season, :winter].freeze,
216
+ "christmas" => [:holiday, :christmas].freeze,
217
+ "xmas" => [:holiday, :christmas].freeze,
218
+ "thanksgiving" => [:holiday, :thanksgiving].freeze,
219
+ "halloween" => [:holiday, :halloween].freeze,
220
+ "easter" => [:holiday, :easter].freeze,
221
+ "juneteenth" => [:holiday, :juneteenth].freeze,
222
+ "pentecost" => [:holiday, :pentecost].freeze,
223
+ "whitsunday" => [:holiday, :pentecost].freeze,
224
+ "whitsun" => [:holiday, :pentecost].freeze,
225
+ "thanksgivings" => [:holiday, :thanksgiving].freeze,
226
+ "kwanzaa" => [:holiday, :kwanzaa].freeze,
227
+ "weekend" => [:weekend, 0].freeze,
228
+ "weekends" => [:weekend, 0].freeze,
229
+ "wkend" => [:weekend, 0].freeze,
230
+ "utc" => [:zone, 0].freeze,
231
+ "gmt" => [:zone, 0].freeze,
232
+ "z" => [:zone, 0].freeze,
233
+ "est" => [:zone, -18000].freeze,
234
+ "edt" => [:zone, -14400].freeze,
235
+ "cst" => [:zone, -21600].freeze,
236
+ "cdt" => [:zone, -18000].freeze,
237
+ "mst" => [:zone, -25200].freeze,
238
+ "mdt" => [:zone, -21600].freeze,
239
+ "pst" => [:zone, -28800].freeze,
240
+ "pdt" => [:zone, -25200].freeze,
241
+ "cet" => [:zone, 3600].freeze,
242
+ "cest" => [:zone, 7200].freeze,
243
+ "bst" => [:zone, ["GB", 3600, 21600].freeze].freeze,
244
+ "ist" => [:zone, [19800, 3600, 7200].freeze].freeze,
245
+ "aest" => [:zone, 36000].freeze,
246
+ "aedt" => [:zone, 39600].freeze,
247
+ "jst" => [:zone, 32400].freeze,
248
+ "msk" => [:zone, 10800].freeze,
249
+ "hst" => [:zone, -36000].freeze,
250
+ "akst" => [:zone, -32400].freeze,
251
+ "akdt" => [:zone, -28800].freeze,
252
+ "eet" => [:zone, 7200].freeze,
253
+ "eest" => [:zone, 10800].freeze,
254
+ "nzst" => [:zone, 43200].freeze,
255
+ "nzdt" => [:zone, 46800].freeze,
256
+ "acst" => [:zone, 34200].freeze,
257
+ "acdt" => [:zone, 37800].freeze,
258
+ "awst" => [:zone, 28800].freeze,
259
+ "sgt" => [:zone, 28800].freeze,
260
+ "hkt" => [:zone, 28800].freeze,
261
+ "kst" => [:zone, 32400].freeze,
262
+ "et" => [:zone, :"America/New_York"].freeze,
263
+ "eastern" => [:zone, :"America/New_York"].freeze,
264
+ "ct" => [:zone, :"America/Chicago"].freeze,
265
+ "central" => [:zone, :"America/Chicago"].freeze,
266
+ "mt" => [:zone, :"America/Denver"].freeze,
267
+ "mountain" => [:zone, :"America/Denver"].freeze,
268
+ "pt" => [:zone, :"America/Los_Angeles"].freeze,
269
+ "pacific" => [:zone, :"America/Los_Angeles"].freeze,
270
+ "early" => [:fuzzy, :early].freeze,
271
+ "mid" => [:fuzzy, :mid].freeze,
272
+ "middle" => [:fuzzy, :mid].freeze,
273
+ "late" => [:fuzzy, :late].freeze,
274
+ "beginning" => [:fuzzy, :start].freeze,
275
+ "start" => [:fuzzy, :start].freeze,
276
+ "end" => [:fuzzy, :end].freeze,
277
+ "eod" => [:fuzzy, :eod].freeze,
278
+ "eom" => [:fuzzy, :eom].freeze,
279
+ "eoy" => [:fuzzy, :eoy].freeze,
280
+ "bom" => [:fuzzy, :bom].freeze,
281
+ "boy" => [:fuzzy, :boy].freeze,
282
+ "a" => [:article, 1].freeze,
283
+ "an" => [:article, 1].freeze,
284
+ "workweek" => [:word, :work_week].freeze,
285
+ "during" => [:word, :during].freeze,
286
+ "all" => [:word, :all].freeze,
287
+ "rest" => [:word, :rest].freeze,
288
+ "remainder" => [:word, :rest].freeze,
289
+ "anytime" => [:word, :anytime].freeze,
290
+ "sometime" => [:word, :anytime].freeze,
291
+ "sometimes" => [:word, :anytime].freeze,
292
+ "in" => [:word, :in].freeze,
293
+ "within" => [:word, :within].freeze,
294
+ "ago" => [:word, :ago].freeze,
295
+ "back" => [:word, :ago].freeze,
296
+ "hence" => [:word, :hence].freeze,
297
+ "out" => [:word, :hence].freeze,
298
+ "later" => [:word, :later].freeze,
299
+ "earlier" => [:word, :ago].freeze,
300
+ "from" => [:word, :from].freeze,
301
+ "to" => [:word, :to].freeze,
302
+ "closest" => [:word, :closest].freeze,
303
+ "nearest" => [:word, :closest].freeze,
304
+ "and" => [:word, :and].freeze,
305
+ "or" => [:word, :or].freeze,
306
+ "of" => [:word, :of].freeze,
307
+ "the" => [:word, :the].freeze,
308
+ "on" => [:word, :on].freeze,
309
+ "between" => [:word, :between].freeze,
310
+ "after" => [:word, :after].freeze,
311
+ "before" => [:word, :before].freeze,
312
+ "since" => [:word, :since].freeze,
313
+ "until" => [:word, :until].freeze,
314
+ "till" => [:word, :until].freeze,
315
+ "til" => [:word, :until].freeze,
316
+ "untill" => [:word, :until].freeze,
317
+ "through" => [:word, :through].freeze,
318
+ "thru" => [:word, :through].freeze,
319
+ "by" => [:word, :by].freeze,
320
+ "around" => [:word, :around].freeze,
321
+ "about" => [:word, :around].freeze,
322
+ "approximately" => [:word, :around].freeze,
323
+ "roughly" => [:word, :around].freeze,
324
+ "approx" => [:word, :around].freeze,
325
+ "circa" => [:word, :around].freeze,
326
+ "ish" => [:word, :around].freeze,
327
+ "o'clock" => [:word, :oclock].freeze,
328
+ "thousand" => [:word, :thousand].freeze,
329
+ "hundred" => [:word, :hundred].freeze,
330
+ "million" => [:word, :million].freeze,
331
+ "oh" => [:word, :oh].freeze,
332
+ "o" => [:word, :oh].freeze,
333
+ "zero" => [:word, :oh].freeze,
334
+ "oclock" => [:word, :oclock].freeze,
335
+ "half" => [:word, :half].freeze,
336
+ "for" => [:word, :for].freeze,
337
+ "more" => [:word, :more].freeze,
338
+ "extra" => [:word, :more].freeze,
339
+ "additional" => [:word, :more].freeze,
340
+ "t" => [:word, :t].freeze,
341
+ "q" => [:word, :q].freeze,
342
+ "fy" => [:word, :fy].freeze,
343
+ "ad" => [:word, :ad].freeze,
344
+ "be" => [:word, :be].freeze,
345
+ "b.e" => [:word, :be].freeze,
346
+ "a.d" => [:word, :ad].freeze,
347
+ "ce" => [:word, :ad].freeze,
348
+ "c.e" => [:word, :ad].freeze,
349
+ "starting" => [:word, :starting].freeze,
350
+ "onwards" => [:word, :orlater].freeze,
351
+ "onward" => [:word, :orlater].freeze,
352
+ "commencing" => [:word, :starting].freeze,
353
+ "every" => [:word, :every].freeze,
354
+ "each" => [:word, :every].freeze,
355
+ "other" => [:word, :other].freeze,
356
+ "alternate" => [:word, :other].freeze,
357
+ "once" => [:word, :once].freeze,
358
+ "times" => [:word, :times].freeze,
359
+ "occurrences" => [:word, :times].freeze,
360
+ "occurrence" => [:word, :times].freeze,
361
+ "except" => [:word, :except].freeze,
362
+ "excluding" => [:word, :except].freeze,
363
+ "everyday" => [:word, :daily].freeze,
364
+ "daily" => [:word, :daily].freeze,
365
+ "hourly" => [:word, :hourly].freeze,
366
+ "weekly" => [:word, :weekly].freeze,
367
+ "monthly" => [:word, :monthly].freeze,
368
+ "yearly" => [:word, :yearly].freeze,
369
+ "annually" => [:word, :yearly].freeze,
370
+ "annual" => [:word, :yearly].freeze,
371
+ "quarterly" => [:word, :quarterly].freeze,
372
+ "semiannually" => [:word, :semiannual].freeze,
373
+ "semiannual" => [:word, :semiannual].freeze,
374
+ "biweekly" => [:word, :biweekly].freeze,
375
+ "fortnightly" => [:word, :biweekly].freeze,
376
+ "bimonthly" => [:word, :bimonthly].freeze,
377
+ "tommorow" => [:day, 1].freeze,
378
+ "tonite" => [:part, :tonight].freeze,
379
+ "febuary" => [:month, 2].freeze,
380
+ "wensday" => [:weekday, 3].freeze,
381
+ }.freeze
382
+
383
+ PHRASES = {
384
+ "martin luther king jr day" => [:holiday, :mlk_day].freeze,
385
+ "monday of the holy spirit" => [:holiday, :whit_monday].freeze,
386
+ "martin luther king day" => [:holiday, :mlk_day].freeze,
387
+ "martin luther king's day" => [:holiday, :mlk_day].freeze,
388
+ "martin luther kings day" => [:holiday, :mlk_day].freeze,
389
+ "at the present time" => [:now, 0].freeze,
390
+ "military spouse appreciation day" => [:holiday, :military_spouse_day].freeze,
391
+ "on or earlier than" => [:word, :onbefore].freeze,
392
+ "day of the vow" => [:holiday, :reconciliation_day].freeze,
393
+ "day of the covenant" => [:holiday, :reconciliation_day].freeze,
394
+ "after or equal to" => [:word, :onafter].freeze,
395
+ "later than or on" => [:word, :onafter].freeze,
396
+ "later than or in" => [:word, :onafter].freeze,
397
+ "later than or at" => [:word, :onafter].freeze,
398
+ "abraham lincoln's birthday" => [:holiday, :lincolns_birthday].freeze,
399
+ "saint paddys day" => [:holiday, :st_patricks].freeze,
400
+ "at the moment" => [:now, 0].freeze,
401
+ "george washington day" => [:holiday, :presidents_day].freeze,
402
+ "mlk jr day" => [:holiday, :mlk_day].freeze,
403
+ "at the minute" => [:now, 0].freeze,
404
+ "abraham lincolns birthday" => [:holiday, :lincolns_birthday].freeze,
405
+ "melbourne cup day" => [:holiday, :melbourne_cup].freeze,
406
+ "at this time" => [:now, 0].freeze,
407
+ "abraham lincoln birthday" => [:holiday, :lincolns_birthday].freeze,
408
+ "st patty's day" => [:holiday, :st_patricks].freeze,
409
+ "day of reconciliation" => [:holiday, :reconciliation_day].freeze,
410
+ "indian arrival day" => [:holiday, :indian_arrival_day].freeze,
411
+ "st pattys day" => [:holiday, :st_patricks].freeze,
412
+ "on or after" => [:word, :onafter].freeze,
413
+ "at or after" => [:word, :onafter].freeze,
414
+ "after or on" => [:word, :onafter].freeze,
415
+ "on or before" => [:word, :onbefore].freeze,
416
+ "at or before" => [:word, :onbefore].freeze,
417
+ "before or on" => [:word, :onbefore].freeze,
418
+ "before or in" => [:word, :onbefore].freeze,
419
+ "before or at" => [:word, :onbefore].freeze,
420
+ "no later than" => [:word, :by].freeze,
421
+ "new year eve" => [:holiday, :new_years_eve].freeze,
422
+ "new year day" => [:holiday, :new_years_day].freeze,
423
+ "fourth of july" => [:holiday, :independence_day].freeze,
424
+ "year greater than" => [:word, :after].freeze,
425
+ "thursday of mysteries" => [:holiday, :maundy_thursday].freeze,
426
+ "thu of mysteries" => [:holiday, :maundy_thursday].freeze,
427
+ "in advance of" => [:word, :before].freeze,
428
+ "st paddy's day" => [:holiday, :st_patricks].freeze,
429
+ "st paddys day" => [:holiday, :st_patricks].freeze,
430
+ "saint paddy's day" => [:holiday, :st_patricks].freeze,
431
+ "garifuna settlement day" => [:holiday, :garifuna_day].freeze,
432
+ "april fools day" => [:holiday, :april_fools].freeze,
433
+ "national grandparents' day" => [:holiday, :grandparents_day].freeze,
434
+ "saint patricks day" => [:holiday, :st_patricks].freeze,
435
+ "saint patrick's day" => [:holiday, :st_patricks].freeze,
436
+ "st patricks day" => [:holiday, :st_patricks].freeze,
437
+ "st patrick's day" => [:holiday, :st_patricks].freeze,
438
+ "military spouse day" => [:holiday, :military_spouse_day].freeze,
439
+ "military spouses day" => [:holiday, :military_spouse_day].freeze,
440
+ "a couple of" => [:word, :couple].freeze,
441
+ "new years day" => [:holiday, :new_years_day].freeze,
442
+ "new year's day" => [:holiday, :new_years_day].freeze,
443
+ "new years eve" => [:holiday, :new_years_eve].freeze,
444
+ "new year's eve" => [:holiday, :new_years_eve].freeze,
445
+ "administrative professionals' day" => [:holiday, :admin_day].freeze,
446
+ "a pair of" => [:word, :couple].freeze,
447
+ "administrative professionals day" => [:holiday, :admin_day].freeze,
448
+ "administrative professional's day" => [:holiday, :admin_day].freeze,
449
+ "administrative professional day" => [:holiday, :admin_day].freeze,
450
+ "admin professionals day" => [:holiday, :admin_day].freeze,
451
+ "george washington's birthday" => [:holiday, :presidents_day].freeze,
452
+ "civil rights day" => [:holiday, :mlk_day].freeze,
453
+ "ides of march" => [:holiday, :ides_of_march].freeze,
454
+ "world vegan day" => [:holiday, :world_vegan_day].freeze,
455
+ "saint patty's day" => [:holiday, :st_patricks].freeze,
456
+ "international workers day" => [:holiday, :workers_day].freeze,
457
+ "pacific daylight time" => [:zone, -25200].freeze,
458
+ "pacific standard time" => [:zone, -28800].freeze,
459
+ "mountain daylight time" => [:zone, -21600].freeze,
460
+ "mountain standard time" => [:zone, -25200].freeze,
461
+ "central daylight time" => [:zone, -18000].freeze,
462
+ "central standard time" => [:zone, -21600].freeze,
463
+ "eastern daylight time" => [:zone, -14400].freeze,
464
+ "eastern standard time" => [:zone, -18000].freeze,
465
+ "international workers' day" => [:holiday, :workers_day].freeze,
466
+ "int'l workers day" => [:holiday, :workers_day].freeze,
467
+ "int'l workers' day" => [:holiday, :workers_day].freeze,
468
+ "vimy ridge day" => [:holiday, :vimy_ridge_day].freeze,
469
+ "saint pattys day" => [:holiday, :st_patricks].freeze,
470
+ "national siblings day" => [:holiday, :siblings_day].freeze,
471
+ "national sibling day" => [:holiday, :siblings_day].freeze,
472
+ "thanks giving day" => [:holiday, :thanksgiving].freeze,
473
+ "guy fawkes night" => [:holiday, :guy_fawkes].freeze,
474
+ "guy fawkes day" => [:holiday, :guy_fawkes].freeze,
475
+ "national grandparents day" => [:holiday, :grandparents_day].freeze,
476
+ "april fools' day" => [:holiday, :april_fools].freeze,
477
+ "april fool's day" => [:holiday, :april_fools].freeze,
478
+ "work week" => [:word, :work_week].freeze,
479
+ "business week" => [:word, :work_week].freeze,
480
+ "days time" => [:unit, :day].freeze,
481
+ "in between" => [:word, :between].freeze,
482
+ "working week" => [:word, :work_week].freeze,
483
+ "working days" => [:unit, :business_day].freeze,
484
+ "working day" => [:unit, :business_day].freeze,
485
+ "business days" => [:unit, :business_day].freeze,
486
+ "business day" => [:unit, :business_day].freeze,
487
+ "kruger day" => [:holiday, :kruger_day].freeze,
488
+ "reconciliation day" => [:holiday, :reconciliation_day].freeze,
489
+ "rizal day" => [:holiday, :rizal_day].freeze,
490
+ "sovereign's birthday" => [:holiday, :victoria_day].freeze,
491
+ "dominion day" => [:holiday, :canada_day].freeze,
492
+ "bonfire night" => [:holiday, :guy_fawkes].freeze,
493
+ "leap year" => [:holiday, :leap_year].freeze,
494
+ "leap day" => [:holiday, :leap_day].freeze,
495
+ "admin day" => [:holiday, :admin_day].freeze,
496
+ "days' time" => [:unit, :day].freeze,
497
+ "weeks time" => [:unit, :week].freeze,
498
+ "weeks' time" => [:unit, :week].freeze,
499
+ "months time" => [:unit, :month].freeze,
500
+ "months' time" => [:unit, :month].freeze,
501
+ "years time" => [:unit, :year].freeze,
502
+ "years' time" => [:unit, :year].freeze,
503
+ "minute's time" => [:unit, :minute].freeze,
504
+ "hour's time" => [:unit, :hour].freeze,
505
+ "day's time" => [:unit, :day].freeze,
506
+ "week's time" => [:unit, :week].freeze,
507
+ "fortnight's time" => [:unit, :fortnight].freeze,
508
+ "month's time" => [:unit, :month].freeze,
509
+ "year's time" => [:unit, :year].freeze,
510
+ "a couple" => [:word, :couple].freeze,
511
+ "couple of" => [:word, :couple].freeze,
512
+ "fiscal year" => [:word, :fy].freeze,
513
+ "calendar year" => [:unit, :year].freeze,
514
+ "calendar month" => [:unit, :month].freeze,
515
+ "calendar week" => [:unit, :week].freeze,
516
+ "calendar quarter" => [:unit, :quarter].freeze,
517
+ "financial year" => [:word, :fy].freeze,
518
+ "semi annually" => [:word, :semiannual].freeze,
519
+ "semi annual" => [:word, :semiannual].freeze,
520
+ "bi weekly" => [:word, :biweekly].freeze,
521
+ "early hours" => [:part, :early_hours].freeze,
522
+ "small hours" => [:part, :early_hours].freeze,
523
+ "a m" => [:meridiem, 0].freeze,
524
+ "p m" => [:meridiem, 12].freeze,
525
+ "prior to" => [:word, :before].freeze,
526
+ "later than" => [:word, :after].freeze,
527
+ "but before" => [:word, :butbefore].freeze,
528
+ "greater than" => [:word, :after].freeze,
529
+ "earlier than" => [:word, :before].freeze,
530
+ "sooner than" => [:word, :before].freeze,
531
+ "or later" => [:word, :orlater].freeze,
532
+ "and later" => [:word, :orlater].freeze,
533
+ "or greater" => [:word, :orlater].freeze,
534
+ "and greater" => [:word, :orlater].freeze,
535
+ "and beyond" => [:word, :orlater].freeze,
536
+ "or earlier" => [:word, :orearlier].freeze,
537
+ "up to" => [:word, :upto].freeze,
538
+ "right now" => [:now, 0].freeze,
539
+ "just now" => [:now, 0].freeze,
540
+ "at present" => [:now, 0].freeze,
541
+ "this time" => [:word, :sametime].freeze,
542
+ "same time" => [:word, :sametime].freeze,
543
+ "minutes time" => [:unit, :minute].freeze,
544
+ "minutes' time" => [:unit, :minute].freeze,
545
+ "hours time" => [:unit, :hour].freeze,
546
+ "hours' time" => [:unit, :hour].freeze,
547
+ "o clock" => [:word, :oclock].freeze,
548
+ "flag day" => [:holiday, :flag_day].freeze,
549
+ "patriot day" => [:holiday, :patriot_day].freeze,
550
+ "boss's day" => [:holiday, :bosses_day].freeze,
551
+ "boss day" => [:holiday, :bosses_day].freeze,
552
+ "bosses day" => [:holiday, :bosses_day].freeze,
553
+ "bosses' day" => [:holiday, :bosses_day].freeze,
554
+ "australia day" => [:holiday, :australia_day].freeze,
555
+ "anzac day" => [:holiday, :anzac_day].freeze,
556
+ "canada day" => [:holiday, :canada_day].freeze,
557
+ "victoria day" => [:holiday, :victoria_day].freeze,
558
+ "melbourne cup" => [:holiday, :melbourne_cup].freeze,
559
+ "mlk day" => [:holiday, :mlk_day].freeze,
560
+ "presidents day" => [:holiday, :presidents_day].freeze,
561
+ "president day" => [:holiday, :presidents_day].freeze,
562
+ "presidents' day" => [:holiday, :presidents_day].freeze,
563
+ "president's day" => [:holiday, :presidents_day].freeze,
564
+ "mother's day" => [:holiday, :mothers_day].freeze,
565
+ "mothers day" => [:holiday, :mothers_day].freeze,
566
+ "mothers' day" => [:holiday, :mothers_day].freeze,
567
+ "mothering sunday" => [:holiday, :mothering_sunday].freeze,
568
+ "memorial day" => [:holiday, :memorial_day].freeze,
569
+ "memorial days" => [:holiday, :memorial_day].freeze,
570
+ "father's day" => [:holiday, :fathers_day].freeze,
571
+ "fathers day" => [:holiday, :fathers_day].freeze,
572
+ "fathers' day" => [:holiday, :fathers_day].freeze,
573
+ "eastern time" => [:zone, :"America/New_York"].freeze,
574
+ "central time" => [:zone, :"America/Chicago"].freeze,
575
+ "mountain time" => [:zone, :"America/Denver"].freeze,
576
+ "pacific time" => [:zone, :"America/Los_Angeles"].freeze,
577
+ "alaska time" => [:zone, :"America/Anchorage"].freeze,
578
+ "hawaii time" => [:zone, :"Pacific/Honolulu"].freeze,
579
+ "week end" => [:weekend, 0].freeze,
580
+ "lunch time" => [:part, :lunch].freeze,
581
+ "christmas eve" => [:holiday, :christmas_eve].freeze,
582
+ "christmas day" => [:holiday, :christmas].freeze,
583
+ "thanksgiving day" => [:holiday, :thanksgiving].freeze,
584
+ "valentine's day" => [:holiday, :valentines].freeze,
585
+ "valentines day" => [:holiday, :valentines].freeze,
586
+ "valentine day" => [:holiday, :valentines].freeze,
587
+ "saint patrick" => [:holiday, :st_patricks].freeze,
588
+ "independence day" => [:holiday, :independence_day].freeze,
589
+ "veterans day" => [:holiday, :veterans_day].freeze,
590
+ "veteran's day" => [:holiday, :veterans_day].freeze,
591
+ "veterans' day" => [:holiday, :veterans_day].freeze,
592
+ "veteran day" => [:holiday, :veterans_day].freeze,
593
+ "boxing day" => [:holiday, :boxing_day].freeze,
594
+ "groundhog day" => [:holiday, :groundhog_day].freeze,
595
+ "groundhogs day" => [:holiday, :groundhog_day].freeze,
596
+ "groundhog's day" => [:holiday, :groundhog_day].freeze,
597
+ "earth day" => [:holiday, :earth_day].freeze,
598
+ "decoration day" => [:holiday, :memorial_day].freeze,
599
+ "covenant thursday" => [:holiday, :maundy_thursday].freeze,
600
+ "covenant thu" => [:holiday, :maundy_thursday].freeze,
601
+ "branch sunday" => [:holiday, :palm_sunday].freeze,
602
+ "pancake day" => [:holiday, :mardi_gras].freeze,
603
+ "election day" => [:holiday, :election_day].freeze,
604
+ "lincoln's birthday" => [:holiday, :lincolns_birthday].freeze,
605
+ "lincolns birthday" => [:holiday, :lincolns_birthday].freeze,
606
+ "lincolns' birthday" => [:holiday, :lincolns_birthday].freeze,
607
+ "lincoln birthday" => [:holiday, :lincolns_birthday].freeze,
608
+ "law day" => [:holiday, :law_day].freeze,
609
+ "loyalty day" => [:holiday, :loyalty_day].freeze,
610
+ "may day" => [:holiday, :may_day].freeze,
611
+ "workers day" => [:holiday, :workers_day].freeze,
612
+ "workers' day" => [:holiday, :workers_day].freeze,
613
+ "siblings day" => [:holiday, :siblings_day].freeze,
614
+ "sibling day" => [:holiday, :siblings_day].freeze,
615
+ "grandparents day" => [:holiday, :grandparents_day].freeze,
616
+ "grandparents' day" => [:holiday, :grandparents_day].freeze,
617
+ "grandparent's day" => [:holiday, :grandparents_day].freeze,
618
+ "secretaries' day" => [:holiday, :admin_day].freeze,
619
+ "secretaries day" => [:holiday, :admin_day].freeze,
620
+ "secretary's day" => [:holiday, :admin_day].freeze,
621
+ "admins day" => [:holiday, :admin_day].freeze,
622
+ "admins' day" => [:holiday, :admin_day].freeze,
623
+ "labor day" => [:holiday, :labor_day].freeze,
624
+ "labour day" => [:holiday, :labor_day].freeze,
625
+ "columbus day" => [:holiday, :columbus_day].freeze,
626
+ "black friday" => [:holiday, :black_friday].freeze,
627
+ "black fridays" => [:holiday, :black_friday].freeze,
628
+ "cyber monday" => [:holiday, :cyber_monday].freeze,
629
+ "easter sunday" => [:holiday, :easter].freeze,
630
+ "easter day" => [:holiday, :easter].freeze,
631
+ "good friday" => [:holiday, :good_friday].freeze,
632
+ "easter monday" => [:holiday, :easter_monday].freeze,
633
+ "easter mon" => [:holiday, :easter_monday].freeze,
634
+ "palm sunday" => [:holiday, :palm_sunday].freeze,
635
+ "maundy thursday" => [:holiday, :maundy_thursday].freeze,
636
+ "holy thursday" => [:holiday, :maundy_thursday].freeze,
637
+ "ash wednesday" => [:holiday, :ash_wednesday].freeze,
638
+ "mardi gras" => [:holiday, :mardi_gras].freeze,
639
+ "shrove tuesday" => [:holiday, :mardi_gras].freeze,
640
+ "whit sunday" => [:holiday, :pentecost].freeze,
641
+ "white sunday" => [:holiday, :pentecost].freeze,
642
+ "whit monday" => [:holiday, :whit_monday].freeze,
643
+ "trinity sunday" => [:holiday, :trinity_sunday].freeze,
644
+ "thanks giving" => [:holiday, :thanksgiving].freeze,
645
+ "washington's birthday" => [:holiday, :presidents_day].freeze,
646
+ "washingtons birthday" => [:holiday, :presidents_day].freeze,
647
+ "washington birthday" => [:holiday, :presidents_day].freeze,
648
+ }.freeze
649
+
650
+ ENGLISH = ["may", "march", "following", "sat", "sun", "tu", "fr", "second", "fall", "a", "mon", "wed", "start", "end", "last", "past", "this", "next", "d", "m", "s", "h", "w", "y", "lunch", "boy"].freeze
651
+
652
+ PLURAL = ["thanksgivings", "springs", "summers", "autumns", "falls", "winters", "seasons", "sundays", "mondays", "tuesdays", "wednesdays", "thursdays", "fridays", "saturdays", "weekends", "weekdays", "black fridays", "memorial days", "secs", "seconds", "mins", "minutes", "hrs", "hours", "days", "wks", "weeks", "fortnights", "months", "quarters", "yrs", "years", "decades", "centuries", "mornings", "afternoons", "evenings", "nights"].freeze
653
+
654
+ HINT_WORDS = ["a.d", "a.m", "about", "acdt", "acst", "additional", "aedt", "aest", "after", "afternoon", "afternoons", "ago", "akdt", "akst", "all", "alternate", "and", "annual", "annually", "anytime", "approx", "approximately", "apr", "april", "around", "aug", "august", "autumn", "autumns", "awst", "b.e", "back", "before", "beginning", "between", "bimonthly", "biweekly", "bom", "boy", "bst", "c.e", "cdt", "central", "centuries", "century", "cest", "cet", "christmas", "circa", "closest", "coming", "commencing", "cst", "current", "daily", "day", "days", "dec", "decade", "decades", "december", "during", "each", "earlier", "early", "easter", "eastern", "edt", "eest", "eet", "eight", "eighteen", "eighteenth", "eighth", "eighties", "eighty", "eleven", "eleventh", "end", "eod", "eom", "eoy", "est", "evening", "evenings", "every", "everyday", "except", "excluding", "extra", "fall", "falls", "feb", "february", "fifteen", "fifteenth", "fifth", "fifties", "fifty", "final", "first", "five", "following", "for", "forties", "fortnight", "fortnight's", "fortnightly", "fortnights", "forty", "four", "fourteen", "fourteenth", "fourth", "fri", "frid", "friday", "fridays", "from", "gmt", "half", "halloween", "hence", "hkt", "hour", "hourly", "hours", "hrs", "hst", "hundred", "ish", "ist", "jan", "january", "jst", "jul", "july", "jun", "june", "juneteenth", "kst", "kwanzaa", "last", "late", "later", "lunch", "lunchtime", "mar", "march", "may", "mdt", "mid", "midday", "middle", "midnight", "midweek", "million", "min", "mins", "minute", "minutes", "mon", "monday", "mondays", "month", "month's", "monthly", "months", "more", "morning", "mornings", "mountain", "msk", "mst", "nearest", "next", "night", "nights", "nine", "nineteen", "nineteenth", "nineties", "ninety", "ninth", "noon", "nov", "november", "now", "nzdt", "nzst", "o'clock", "occurrence", "occurrences", "oclock", "oct", "october", "once", "one", "onward", "onwards", "other", "out", "p.m", "pacific", "past", "pdt", "pentecost", "prev", "previous", "pst", "qtr", "qtrs", "quarter", "quarterly", "quarters", "remainder", "rest", "roughly", "sat", "saturday", "saturdays", "season", "seasons", "sec", "second", "seconds", "secs", "semiannual", "semiannually", "sep", "sept", "september", "seven", "seventeen", "seventeenth", "seventh", "seventies", "seventy", "sgt", "since", "six", "sixteen", "sixteenth", "sixth", "sixties", "sixty", "sometime", "sometimes", "spring", "springs", "start", "starting", "summer", "summers", "sun", "sunday", "sundays", "ten", "tenth", "thanksgiving", "thanksgivings", "the", "third", "thirteen", "thirteenth", "thirties", "thirtieth", "thirty", "this", "thousand", "three", "through", "thru", "thu", "thur", "thurs", "thursday", "thursdays", "til", "till", "times", "tmr", "tmrw", "today", "today's", "todays", "tomorrow", "tomorrow's", "tomorrows", "tonight", "tonight's", "tue", "tues", "tuesday", "tuesdays", "twelfth", "twelve", "twenties", "twentieth", "twenty", "two", "until", "untill", "upcoming", "utc", "wed", "wednesday", "wednesdays", "week", "week's", "weekday", "weekdays", "weekend", "weekends", "weekly", "weeks", "whitsun", "whitsunday", "winter", "winters", "within", "wkend", "wks", "workweek", "xmas", "year", "year's", "yearly", "years", "yesterday", "yesterday's", "yrs", "zero"].freeze
655
+ end
656
+ end