]> gitweb.factorcode.org Git - factor.git/blob - extra/calendar/holidays/us/us.factor
fix typo
[factor.git] / extra / calendar / holidays / us / us.factor
1 ! Copyright (C) 2009 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs calendar combinators.short-circuit fry
4 kernel lexer math namespaces parser sequences shuffle vocabs
5 words ;
6 IN: calendar.holidays.us
7
8 SYMBOLS: world us us-federal canada
9 commonwealth-of-nations ;
10
11 <<
12 SYNTAX: HOLIDAY:
13     CREATE-WORD
14     dup H{ } clone "holiday" set-word-prop
15     parse-definition (( timestamp/n -- timestamp )) define-declared ;
16
17 SYNTAX: HOLIDAY-NAME:
18     scan-word "holiday" word-prop scan-word scan-object spin set-at ;
19 >>
20
21 : holiday>timestamp ( n word -- timestamp )
22     execute( timestamp -- timestamp' ) ;
23
24 : find-holidays ( n symbol -- seq )
25     all-words swap '[ "holiday" word-prop _ swap key? ] filter
26     [ holiday>timestamp ] with map ;
27
28 : adjust-federal-holiday ( timestamp -- timestamp' )
29     dup saturday? [
30         1 days time-
31     ] [
32         dup sunday? [
33             1 days time+
34         ] when 
35     ] if ;
36
37 : us-federal-holidays ( timestamp/n -- seq )
38     us-federal find-holidays [ adjust-federal-holiday ] map ;
39
40 : canadian-holidays ( timestamp/n -- seq )
41     canada find-holidays ;
42
43 HOLIDAY: new-year's-day january 1 >>day ;
44 HOLIDAY-NAME: new-year's-day world "New Year's Day"
45 HOLIDAY-NAME: new-year's-day us-federal "New Year's Day"
46
47 HOLIDAY: martin-luther-king-day january 3 monday-of-month ;
48 HOLIDAY-NAME: martin-luther-king-day us-federal "Martin Luther King Day"
49
50 HOLIDAY: inauguration-day year dup 4 neg rem + january 20 >>day ;
51 HOLIDAY-NAME: inauguration-day us "Inauguration Day"
52
53 HOLIDAY: washington's-birthday february 3 monday-of-month ;
54 HOLIDAY-NAME: washington's-birthday us-federal "Washington's Birthday"
55
56 HOLIDAY: memorial-day may last-monday-of-month ;
57 HOLIDAY-NAME: memorial-day us-federal "Memorial Day"
58
59 HOLIDAY: independence-day july 4 >>day ;
60 HOLIDAY-NAME: independence-day us-federal "Independence Day"
61
62 HOLIDAY: labor-day september 1 monday-of-month ;
63 HOLIDAY-NAME: labor-day us-federal "Labor Day"
64
65 HOLIDAY: columbus-day october 2 monday-of-month ;
66 HOLIDAY-NAME: columbus-day us-federal "Columbus Day"
67
68 HOLIDAY: veterans-day november 11 >>day ;
69 HOLIDAY-NAME: veterans-day us-federal "Veterans Day"
70 HOLIDAY-NAME: veterans-day world "Armistice Day"
71 HOLIDAY-NAME: veterans-day commonwealth-of-nations "Remembrance Day"
72
73 HOLIDAY: thanksgiving-day november 4 thursday-of-month ;
74 HOLIDAY-NAME: thanksgiving-day us-federal "Thanksgiving Day"
75
76 HOLIDAY: canadian-thanksgiving-day october 2 monday-of-month ;
77 HOLIDAY-NAME: canadian-thanksgiving-day canada "Thanksgiving Day"
78
79 HOLIDAY: christmas-day december 25 >>day ;
80 HOLIDAY-NAME: christmas-day world "Christmas Day"
81 HOLIDAY-NAME: christmas-day us-federal "Christmas Day"
82
83 HOLIDAY: belly-laugh-day january 24 >>day ;
84
85 HOLIDAY: groundhog-day february 2 >>day ;
86
87 HOLIDAY: lincoln's-birthday february 12 >>day ;
88
89 HOLIDAY: valentine's-day february 14 >>day ;
90
91 HOLIDAY: st-patrick's-day march 17 >>day ;
92
93 HOLIDAY: ash-wednesday easter 46 days time- ;
94
95 ALIAS: first-day-of-lent ash-wednesday
96
97 HOLIDAY: fat-tuesday ash-wednesday 1 days time- ;
98
99 HOLIDAY: good-friday easter 2 days time- ;
100
101 HOLIDAY: tax-day april 15 >>day ;
102
103 HOLIDAY: earth-day april 22 >>day ;
104
105 HOLIDAY: administrative-professionals'-day april last-saturday-of-month wednesday ;
106
107 HOLIDAY: cinco-de-mayo may 5 >>day ;
108
109 HOLIDAY: mother's-day may 2 sunday-of-month ;
110
111 HOLIDAY: armed-forces-day may 3 saturday-of-month ;
112
113 HOLIDAY: flag-day june 14 >>day ;
114
115 HOLIDAY: parents'-day july 4 sunday-of-month ;
116
117 HOLIDAY: grandparents'-day labor-day 1 weeks time+ ;
118
119 HOLIDAY: patriot-day september 11 >>day ;
120
121 HOLIDAY: stepfamily-day september 16 >>day ;
122
123 HOLIDAY: citizenship-day september 17 >>day ;
124
125 HOLIDAY: boss's-day october 16 >>day ;
126
127 HOLIDAY: sweetest-day october 3 saturday-of-month ;
128
129 HOLIDAY: halloween october 31 >>day ;
130
131 HOLIDAY: election-day november 1 monday-of-month 1 days time+ ;
132
133 HOLIDAY: black-friday thanksgiving-day 1 days time+ ;
134
135 HOLIDAY: pearl-harbor-remembrance-day december 7 >>day ;
136
137 HOLIDAY: new-year's-eve december 31 >>day ;
138
139 : post-office-open? ( timestamp -- ? )
140     {
141         [ sunday? not ]
142         [ dup us-federal-holidays [ same-day? ] with any? not ]
143     } 1&& ;