home_run 0.9.0-x86-mswin32-60 → 0.9.1-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,852 @@
1
+
2
+ #line 1 "date_parser.rl"
3
+ #include "date_ext.h"
4
+
5
+ #define RHRR_ISO_PARSER 0x1
6
+ #define RHRR_RFC_PARSER 0x2
7
+ #define RHRR_CLF_PARSER 0x4
8
+
9
+ #define RHRR_ISO_TIME_SET 0x1
10
+ #define RHRR_ISO_ZONE_SET 0x2
11
+
12
+ #define RHRR_RFC_TIME_SET 0x1
13
+ #define RHRR_RFC_ZONE_SET 0x2
14
+ #define RHRR_RFC_ZONE_NUM_SET 0x4
15
+ #define RHRR_RFC_ZONE_NAME_SET 0x8
16
+
17
+ #define RHRR_CLF_TIME_SET 0x1
18
+ #define RHRR_CLF_ZONE_SET 0x2
19
+
20
+ #define RHRR_BAD_OFFSET 86400
21
+
22
+ extern const char * rhrd__abbr_month_names[];
23
+ extern const char * rhrd__abbr_day_names[];
24
+
25
+ extern VALUE rhrd_sym_hour;
26
+ extern VALUE rhrd_sym_mday;
27
+ extern VALUE rhrd_sym_min;
28
+ extern VALUE rhrd_sym_mon;
29
+ extern VALUE rhrd_sym_offset;
30
+ extern VALUE rhrd_sym_sec;
31
+ extern VALUE rhrd_sym_wday;
32
+ extern VALUE rhrd_sym_year;
33
+ extern VALUE rhrd_sym_zone;
34
+
35
+ const char * rhrd__rfc_zone_names[] = {"UT", "GMT", "EST", "EDT", "CST", "CDT", "MST", "MDT", "PST", "PDT",
36
+ "A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M",
37
+ "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
38
+ long rhrd__rfc_zone_offsets[] = {0, 0, -18000, -14400, -21600, -18000, -25200, -21600, -28800, -25200,
39
+ 3600, 7200, 10800, 14400, 18000, 21600, 25200, 28800, 32400, 36000, 39600, 43200,
40
+ -3600, -7200, -10800, -14400, -18000, -21600, -25200, -28800, -32400, -36000, -39600, -43200, 0};
41
+
42
+ long rhrd__rfc_zone_offset(char * str) {
43
+ int i;
44
+
45
+ for(i = 0; i < 36; i++) {
46
+ if(strcasecmp(rhrd__rfc_zone_names[i], str) == 0) {
47
+ return rhrd__rfc_zone_offsets[i];
48
+ }
49
+ }
50
+
51
+ return RHRR_BAD_OFFSET;
52
+ }
53
+
54
+ long rhrd__month_num(char * str) {
55
+ int i;
56
+
57
+ for(i = 1; i < 13; i++) {
58
+ if(strncasecmp(str, rhrd__abbr_month_names[i], 3) == 0) {
59
+ return i;
60
+ }
61
+ }
62
+
63
+ return atol(str);
64
+ }
65
+
66
+ long rhrd__weekday_num(char * str) {
67
+ int i;
68
+
69
+ for(i = 0; i < 7; i++) {
70
+ if(strncasecmp(str, rhrd__abbr_day_names[i], 3) == 0) {
71
+ return i;
72
+ }
73
+ }
74
+
75
+ return 7;
76
+ }
77
+
78
+
79
+ #line 80 "date_parser.c"
80
+ static const char _date_parser_actions[] = {
81
+ 0, 1, 0, 1, 1, 1, 2, 1,
82
+ 3, 1, 4, 1, 5, 1, 6, 1,
83
+ 7, 1, 9, 1, 10, 1, 11, 1,
84
+ 12, 1, 13, 1, 14, 1, 15, 1,
85
+ 16, 1, 17, 1, 18, 1, 21, 1,
86
+ 23, 1, 24, 1, 25, 1, 26, 1,
87
+ 27, 1, 28, 1, 29, 1, 31, 2,
88
+ 0, 22, 2, 7, 9, 2, 8, 7,
89
+ 2, 18, 21, 2, 19, 18, 2, 20,
90
+ 18, 2, 29, 31, 2, 30, 29, 3,
91
+ 8, 7, 9, 3, 19, 18, 21, 3,
92
+ 20, 18, 21, 3, 30, 29, 31
93
+ };
94
+
95
+ static const short _date_parser_key_offsets[] = {
96
+ 0, 0, 20, 22, 24, 26, 28, 30,
97
+ 32, 34, 36, 40, 42, 44, 45, 47,
98
+ 49, 50, 52, 54, 56, 58, 59, 61,
99
+ 63, 65, 68, 70, 72, 74, 77, 80,
100
+ 96, 100, 102, 103, 106, 108, 110, 112,
101
+ 114, 117, 119, 120, 122, 124, 125, 127,
102
+ 129, 131, 133, 135, 137, 139, 141, 143,
103
+ 145, 147, 149, 153, 155, 159, 161, 165,
104
+ 167, 169, 171, 173, 175, 177, 179, 183,
105
+ 185, 187, 188, 195, 204, 206, 225, 229,
106
+ 231, 237, 239, 241, 243, 245, 247, 248,
107
+ 250, 252, 253, 255, 257, 259, 261, 263,
108
+ 265, 267, 269, 271, 273, 275, 277, 279,
109
+ 283, 285, 289, 291, 295, 297, 299, 301,
110
+ 303, 305, 307, 328, 349, 351, 353, 355,
111
+ 357, 361, 363, 367, 369, 371, 373, 375,
112
+ 380, 383, 389, 394, 397, 401, 404, 409,
113
+ 414, 417, 423, 448, 473, 476, 479, 482,
114
+ 489, 494
115
+ };
116
+
117
+ static const char _date_parser_trans_keys[] = {
118
+ 32, 45, 48, 51, 70, 77, 83, 84,
119
+ 87, 102, 109, 115, 116, 119, 9, 13,
120
+ 49, 50, 52, 57, 48, 57, 48, 57,
121
+ 48, 57, 48, 57, 45, 47, 48, 49,
122
+ 49, 57, 45, 47, 48, 51, 49, 50,
123
+ 49, 57, 48, 57, 58, 48, 53, 48,
124
+ 57, 58, 48, 53, 48, 57, 48, 57,
125
+ 48, 57, 58, 48, 57, 48, 57, 48,
126
+ 52, 50, 48, 49, 48, 57, 48, 49,
127
+ 48, 50, 48, 49, 57, 47, 48, 57,
128
+ 65, 68, 70, 74, 77, 78, 79, 83,
129
+ 97, 100, 102, 106, 109, 110, 111, 115,
130
+ 80, 85, 112, 117, 82, 114, 47, 45,
131
+ 48, 57, 48, 57, 48, 57, 48, 57,
132
+ 48, 57, 50, 48, 49, 48, 57, 58,
133
+ 48, 53, 48, 57, 58, 48, 53, 48,
134
+ 57, 48, 57, 48, 57, 48, 57, 48,
135
+ 57, 48, 52, 71, 103, 69, 101, 67,
136
+ 99, 69, 101, 66, 98, 65, 85, 97,
137
+ 117, 78, 110, 76, 78, 108, 110, 65,
138
+ 97, 82, 89, 114, 121, 79, 111, 86,
139
+ 118, 67, 99, 84, 116, 69, 101, 80,
140
+ 112, 48, 57, 48, 49, 50, 57, 82,
141
+ 114, 73, 105, 44, 32, 48, 51, 9,
142
+ 13, 49, 50, 32, 48, 51, 9, 13,
143
+ 49, 50, 52, 57, 49, 57, 32, 65,
144
+ 68, 70, 74, 77, 78, 79, 83, 97,
145
+ 100, 102, 106, 109, 110, 111, 115, 9,
146
+ 13, 80, 85, 112, 117, 82, 114, 32,
147
+ 45, 9, 13, 48, 57, 48, 57, 48,
148
+ 57, 48, 57, 48, 57, 48, 57, 58,
149
+ 48, 53, 48, 57, 58, 48, 53, 48,
150
+ 57, 48, 57, 48, 57, 48, 57, 48,
151
+ 57, 84, 116, 48, 52, 71, 103, 69,
152
+ 101, 67, 99, 69, 101, 66, 98, 65,
153
+ 85, 97, 117, 78, 110, 76, 78, 108,
154
+ 110, 65, 97, 82, 89, 114, 121, 79,
155
+ 111, 86, 118, 67, 99, 84, 116, 69,
156
+ 101, 80, 112, 32, 65, 68, 70, 74,
157
+ 77, 78, 79, 83, 97, 100, 102, 106,
158
+ 109, 110, 111, 115, 9, 13, 48, 57,
159
+ 32, 65, 68, 70, 74, 77, 78, 79,
160
+ 83, 97, 100, 102, 106, 109, 110, 111,
161
+ 115, 9, 13, 48, 49, 48, 57, 48,
162
+ 49, 79, 111, 78, 110, 65, 85, 97,
163
+ 117, 84, 116, 72, 85, 104, 117, 85,
164
+ 117, 69, 101, 69, 101, 68, 100, 32,
165
+ 84, 116, 9, 13, 32, 9, 13, 32,
166
+ 50, 9, 13, 48, 49, 32, 43, 45,
167
+ 9, 13, 32, 9, 13, 32, 58, 9,
168
+ 13, 32, 9, 13, 32, 43, 45, 9,
169
+ 13, 32, 43, 45, 9, 13, 32, 9,
170
+ 13, 32, 50, 9, 13, 48, 49, 32,
171
+ 43, 45, 67, 69, 71, 77, 80, 85,
172
+ 99, 101, 103, 109, 112, 117, 9, 13,
173
+ 65, 73, 75, 90, 97, 105, 107, 122,
174
+ 32, 43, 45, 67, 69, 71, 77, 80,
175
+ 85, 99, 101, 103, 109, 112, 117, 9,
176
+ 13, 65, 73, 75, 90, 97, 105, 107,
177
+ 122, 32, 9, 13, 32, 9, 13, 32,
178
+ 9, 13, 32, 68, 83, 100, 115, 9,
179
+ 13, 32, 77, 109, 9, 13, 32, 84,
180
+ 116, 9, 13, 0
181
+ };
182
+
183
+ static const char _date_parser_single_lengths[] = {
184
+ 0, 14, 0, 0, 0, 0, 2, 2,
185
+ 0, 2, 2, 0, 0, 1, 0, 0,
186
+ 1, 0, 0, 0, 0, 1, 0, 0,
187
+ 0, 1, 0, 0, 0, 1, 1, 16,
188
+ 4, 2, 1, 1, 0, 0, 0, 0,
189
+ 1, 0, 1, 0, 0, 1, 0, 0,
190
+ 0, 0, 0, 0, 0, 2, 2, 2,
191
+ 2, 2, 4, 2, 4, 2, 4, 2,
192
+ 2, 2, 2, 2, 2, 0, 0, 2,
193
+ 2, 1, 3, 3, 0, 17, 4, 2,
194
+ 2, 0, 0, 0, 0, 0, 1, 0,
195
+ 0, 1, 0, 0, 0, 0, 0, 0,
196
+ 2, 0, 2, 2, 2, 2, 2, 4,
197
+ 2, 4, 2, 4, 2, 2, 2, 2,
198
+ 2, 2, 17, 17, 0, 0, 2, 2,
199
+ 4, 2, 4, 2, 2, 2, 2, 3,
200
+ 1, 2, 3, 1, 2, 1, 3, 3,
201
+ 1, 2, 15, 15, 1, 1, 1, 5,
202
+ 3, 3
203
+ };
204
+
205
+ static const char _date_parser_range_lengths[] = {
206
+ 0, 3, 1, 1, 1, 1, 0, 0,
207
+ 1, 0, 1, 1, 1, 0, 1, 1,
208
+ 0, 1, 1, 1, 1, 0, 1, 1,
209
+ 1, 1, 1, 1, 1, 1, 1, 0,
210
+ 0, 0, 0, 1, 1, 1, 1, 1,
211
+ 1, 1, 0, 1, 1, 0, 1, 1,
212
+ 1, 1, 1, 1, 1, 0, 0, 0,
213
+ 0, 0, 0, 0, 0, 0, 0, 0,
214
+ 0, 0, 0, 0, 0, 1, 2, 0,
215
+ 0, 0, 2, 3, 1, 1, 0, 0,
216
+ 2, 1, 1, 1, 1, 1, 0, 1,
217
+ 1, 0, 1, 1, 1, 1, 1, 1,
218
+ 0, 1, 0, 0, 0, 0, 0, 0,
219
+ 0, 0, 0, 0, 0, 0, 0, 0,
220
+ 0, 0, 2, 2, 1, 1, 0, 0,
221
+ 0, 0, 0, 0, 0, 0, 0, 1,
222
+ 1, 2, 1, 1, 1, 1, 1, 1,
223
+ 1, 2, 5, 5, 1, 1, 1, 1,
224
+ 1, 1
225
+ };
226
+
227
+ static const short _date_parser_index_offsets[] = {
228
+ 0, 0, 18, 20, 22, 24, 26, 29,
229
+ 32, 34, 37, 41, 43, 45, 47, 49,
230
+ 51, 53, 55, 57, 59, 61, 63, 65,
231
+ 67, 69, 72, 74, 76, 78, 81, 84,
232
+ 101, 106, 109, 111, 114, 116, 118, 120,
233
+ 122, 125, 127, 129, 131, 133, 135, 137,
234
+ 139, 141, 143, 145, 147, 149, 152, 155,
235
+ 158, 161, 164, 169, 172, 177, 180, 185,
236
+ 188, 191, 194, 197, 200, 203, 205, 208,
237
+ 211, 214, 216, 222, 229, 231, 250, 255,
238
+ 258, 263, 265, 267, 269, 271, 273, 275,
239
+ 277, 279, 281, 283, 285, 287, 289, 291,
240
+ 293, 296, 298, 301, 304, 307, 310, 313,
241
+ 318, 321, 326, 329, 334, 337, 340, 343,
242
+ 346, 349, 352, 372, 392, 394, 396, 399,
243
+ 402, 407, 410, 415, 418, 421, 424, 427,
244
+ 432, 435, 440, 445, 448, 452, 455, 460,
245
+ 465, 468, 473, 494, 515, 518, 521, 524,
246
+ 531, 536
247
+ };
248
+
249
+ static const unsigned char _date_parser_indicies[] = {
250
+ 0, 2, 3, 5, 7, 8, 9, 10,
251
+ 11, 7, 8, 9, 10, 11, 0, 4,
252
+ 6, 1, 12, 1, 13, 1, 14, 1,
253
+ 15, 1, 16, 16, 1, 17, 18, 1,
254
+ 19, 1, 20, 20, 1, 21, 23, 22,
255
+ 1, 24, 1, 25, 1, 26, 1, 27,
256
+ 1, 28, 1, 29, 1, 30, 1, 31,
257
+ 1, 32, 1, 33, 1, 34, 1, 35,
258
+ 1, 36, 1, 25, 1, 38, 37, 1,
259
+ 24, 1, 24, 1, 19, 1, 13, 39,
260
+ 1, 40, 14, 1, 41, 42, 43, 44,
261
+ 45, 46, 47, 48, 41, 42, 43, 44,
262
+ 45, 46, 47, 48, 1, 49, 50, 49,
263
+ 50, 1, 51, 51, 1, 52, 1, 53,
264
+ 54, 1, 55, 1, 56, 1, 57, 1,
265
+ 58, 1, 60, 59, 1, 61, 1, 62,
266
+ 1, 63, 1, 64, 1, 65, 1, 66,
267
+ 1, 67, 1, 68, 1, 69, 1, 70,
268
+ 1, 71, 1, 61, 1, 51, 51, 1,
269
+ 72, 72, 1, 51, 51, 1, 73, 73,
270
+ 1, 51, 51, 1, 74, 75, 74, 75,
271
+ 1, 51, 51, 1, 51, 51, 51, 51,
272
+ 1, 76, 76, 1, 51, 51, 51, 51,
273
+ 1, 77, 77, 1, 51, 51, 1, 78,
274
+ 78, 1, 51, 51, 1, 79, 79, 1,
275
+ 51, 51, 1, 39, 1, 39, 13, 1,
276
+ 80, 80, 1, 81, 81, 1, 82, 1,
277
+ 83, 84, 86, 82, 85, 1, 83, 84,
278
+ 88, 82, 87, 89, 1, 89, 1, 89,
279
+ 90, 91, 92, 93, 94, 95, 96, 97,
280
+ 90, 91, 92, 93, 94, 95, 96, 97,
281
+ 89, 1, 98, 99, 98, 99, 1, 100,
282
+ 100, 1, 100, 101, 100, 102, 1, 103,
283
+ 1, 104, 1, 105, 1, 106, 1, 107,
284
+ 1, 108, 1, 109, 1, 110, 1, 111,
285
+ 1, 112, 1, 113, 1, 114, 1, 115,
286
+ 1, 116, 1, 117, 1, 118, 118, 1,
287
+ 107, 1, 100, 100, 1, 119, 119, 1,
288
+ 100, 100, 1, 120, 120, 1, 100, 100,
289
+ 1, 121, 122, 121, 122, 1, 100, 100,
290
+ 1, 100, 100, 100, 100, 1, 123, 123,
291
+ 1, 100, 100, 100, 100, 1, 124, 124,
292
+ 1, 100, 100, 1, 125, 125, 1, 100,
293
+ 100, 1, 126, 126, 1, 100, 100, 1,
294
+ 89, 90, 91, 92, 93, 94, 95, 96,
295
+ 97, 90, 91, 92, 93, 94, 95, 96,
296
+ 97, 89, 89, 1, 89, 90, 91, 92,
297
+ 93, 94, 95, 96, 97, 90, 91, 92,
298
+ 93, 94, 95, 96, 97, 89, 89, 1,
299
+ 89, 1, 89, 1, 127, 127, 1, 81,
300
+ 81, 1, 128, 127, 128, 127, 1, 81,
301
+ 81, 1, 129, 130, 129, 130, 1, 81,
302
+ 81, 1, 81, 81, 1, 131, 131, 1,
303
+ 81, 81, 1, 133, 134, 134, 132, 1,
304
+ 132, 132, 1, 132, 38, 132, 37, 1,
305
+ 135, 136, 136, 135, 1, 137, 137, 1,
306
+ 138, 139, 138, 1, 138, 138, 1, 140,
307
+ 141, 141, 140, 1, 142, 141, 141, 142,
308
+ 1, 143, 143, 1, 106, 145, 106, 144,
309
+ 1, 146, 147, 147, 149, 149, 150, 149,
310
+ 149, 151, 149, 149, 150, 149, 149, 151,
311
+ 146, 148, 148, 148, 148, 1, 152, 147,
312
+ 147, 149, 149, 150, 149, 149, 151, 149,
313
+ 149, 150, 149, 149, 151, 152, 148, 148,
314
+ 148, 148, 1, 153, 153, 1, 154, 154,
315
+ 1, 155, 155, 1, 155, 156, 156, 156,
316
+ 156, 155, 1, 155, 156, 156, 155, 1,
317
+ 155, 118, 118, 155, 1, 0
318
+ };
319
+
320
+ static const unsigned char _date_parser_trans_targs[] = {
321
+ 1, 0, 2, 29, 69, 70, 3, 71,
322
+ 118, 120, 122, 125, 3, 4, 5, 6,
323
+ 7, 8, 28, 9, 10, 11, 26, 27,
324
+ 127, 13, 14, 15, 16, 17, 18, 130,
325
+ 20, 21, 22, 23, 131, 12, 24, 30,
326
+ 31, 32, 54, 56, 58, 61, 63, 65,
327
+ 67, 33, 53, 34, 35, 36, 37, 37,
328
+ 38, 39, 132, 41, 52, 42, 43, 44,
329
+ 45, 46, 47, 134, 49, 50, 51, 136,
330
+ 55, 57, 59, 60, 62, 64, 66, 68,
331
+ 72, 73, 74, 75, 76, 116, 117, 114,
332
+ 115, 77, 78, 99, 101, 103, 106, 108,
333
+ 110, 112, 79, 98, 80, 81, 82, 82,
334
+ 83, 84, 137, 86, 87, 88, 89, 90,
335
+ 91, 138, 93, 94, 95, 140, 142, 100,
336
+ 102, 104, 105, 107, 109, 111, 113, 119,
337
+ 121, 123, 124, 126, 128, 129, 25, 128,
338
+ 19, 128, 133, 40, 135, 48, 135, 133,
339
+ 85, 97, 139, 92, 142, 143, 144, 145,
340
+ 139, 141, 141, 141, 96
341
+ };
342
+
343
+ static const char _date_parser_trans_actions[] = {
344
+ 0, 0, 1, 55, 55, 55, 1, 19,
345
+ 19, 19, 19, 19, 0, 0, 0, 0,
346
+ 0, 3, 3, 0, 0, 5, 5, 5,
347
+ 0, 0, 0, 9, 0, 0, 11, 0,
348
+ 0, 0, 0, 0, 0, 7, 7, 0,
349
+ 0, 39, 39, 39, 39, 39, 39, 39,
350
+ 39, 0, 0, 0, 0, 41, 41, 0,
351
+ 0, 0, 0, 43, 43, 0, 0, 45,
352
+ 0, 0, 47, 0, 0, 0, 0, 0,
353
+ 0, 0, 0, 0, 0, 0, 0, 0,
354
+ 0, 0, 0, 21, 21, 21, 21, 21,
355
+ 21, 0, 23, 23, 23, 23, 23, 23,
356
+ 23, 23, 0, 0, 0, 25, 25, 0,
357
+ 0, 0, 0, 0, 0, 29, 0, 0,
358
+ 31, 0, 0, 0, 0, 0, 0, 0,
359
+ 0, 0, 0, 0, 0, 0, 0, 0,
360
+ 0, 0, 0, 0, 0, 0, 0, 15,
361
+ 13, 61, 0, 0, 51, 49, 0, 76,
362
+ 27, 27, 35, 33, 33, 33, 33, 33,
363
+ 0, 67, 0, 70, 0
364
+ };
365
+
366
+ static const char _date_parser_eof_actions[] = {
367
+ 0, 0, 0, 0, 0, 0, 0, 0,
368
+ 0, 0, 0, 0, 0, 0, 0, 0,
369
+ 0, 0, 0, 0, 0, 0, 0, 0,
370
+ 0, 0, 0, 0, 0, 0, 0, 0,
371
+ 0, 0, 0, 0, 0, 0, 0, 0,
372
+ 0, 0, 0, 0, 0, 0, 0, 0,
373
+ 0, 0, 0, 0, 0, 0, 0, 0,
374
+ 0, 0, 0, 0, 0, 0, 0, 0,
375
+ 0, 0, 0, 0, 0, 0, 0, 0,
376
+ 0, 0, 0, 0, 0, 0, 0, 0,
377
+ 0, 0, 0, 0, 0, 0, 0, 0,
378
+ 0, 0, 0, 0, 0, 0, 0, 0,
379
+ 0, 0, 0, 0, 0, 0, 0, 0,
380
+ 0, 0, 0, 0, 0, 0, 0, 0,
381
+ 0, 0, 0, 0, 0, 0, 0, 0,
382
+ 0, 0, 0, 0, 0, 0, 0, 17,
383
+ 17, 17, 58, 79, 53, 53, 73, 53,
384
+ 91, 37, 64, 37, 83, 37, 87, 87,
385
+ 87, 87
386
+ };
387
+
388
+ static const int date_parser_start = 1;
389
+ static const int date_parser_first_final = 127;
390
+ static const int date_parser_error = 0;
391
+
392
+ static const int date_parser_en_main = 1;
393
+
394
+
395
+ #line 181 "date_parser.rl"
396
+
397
+
398
+ VALUE rhrd__ragel_parse(char * p, long len) {
399
+ VALUE hash;
400
+ long state = 0;
401
+ long parsers = 0;
402
+
403
+ long year = 0;
404
+ long month = 0;
405
+ long day = 0;
406
+ long wday = 0;
407
+
408
+ long hour = 0;
409
+ long minute = 0;
410
+ long second = 0;
411
+
412
+ VALUE rzone;
413
+ char * zone = NULL;
414
+ long zone_len = 0;
415
+ long offset = 0;
416
+
417
+ long iso_state = 0;
418
+ char * t_iso_year = NULL;
419
+ char * t_iso_month = NULL;
420
+ char * t_iso_day = NULL;
421
+ char * t_iso_hour= NULL;
422
+ char * t_iso_minute = NULL;
423
+ char * t_iso_second = NULL;
424
+ char * t_iso_zone = NULL;
425
+ char * t_iso_zone_end = NULL;
426
+
427
+ long rfc_state = 0;
428
+ char * t_rfc_wday = NULL;
429
+ char * t_rfc_year = NULL;
430
+ char * t_rfc_month = NULL;
431
+ char * t_rfc_day = NULL;
432
+ char * t_rfc_hour= NULL;
433
+ char * t_rfc_minute = NULL;
434
+ char * t_rfc_second = NULL;
435
+ char * t_rfc_zone = NULL;
436
+ char * t_rfc_zone_end = NULL;
437
+
438
+ long clf_state = 0;
439
+ char * t_clf_year = NULL;
440
+ char * t_clf_month = NULL;
441
+ char * t_clf_day = NULL;
442
+ char * t_clf_hour= NULL;
443
+ char * t_clf_minute = NULL;
444
+ char * t_clf_second = NULL;
445
+ char * t_clf_zone = NULL;
446
+ char * t_clf_zone_end = NULL;
447
+
448
+ int cs = 0;
449
+ char * eof;
450
+ char * pe;
451
+ pe = p + len;
452
+ eof = pe;
453
+
454
+
455
+ #line 456 "date_parser.c"
456
+ {
457
+ cs = date_parser_start;
458
+ }
459
+
460
+ #line 240 "date_parser.rl"
461
+
462
+ #line 463 "date_parser.c"
463
+ {
464
+ int _klen;
465
+ unsigned int _trans;
466
+ const char *_acts;
467
+ unsigned int _nacts;
468
+ const char *_keys;
469
+
470
+ if ( p == pe )
471
+ goto _test_eof;
472
+ if ( cs == 0 )
473
+ goto _out;
474
+ _resume:
475
+ _keys = _date_parser_trans_keys + _date_parser_key_offsets[cs];
476
+ _trans = _date_parser_index_offsets[cs];
477
+
478
+ _klen = _date_parser_single_lengths[cs];
479
+ if ( _klen > 0 ) {
480
+ const char *_lower = _keys;
481
+ const char *_mid;
482
+ const char *_upper = _keys + _klen - 1;
483
+ while (1) {
484
+ if ( _upper < _lower )
485
+ break;
486
+
487
+ _mid = _lower + ((_upper-_lower) >> 1);
488
+ if ( (*p) < *_mid )
489
+ _upper = _mid - 1;
490
+ else if ( (*p) > *_mid )
491
+ _lower = _mid + 1;
492
+ else {
493
+ _trans += (_mid - _keys);
494
+ goto _match;
495
+ }
496
+ }
497
+ _keys += _klen;
498
+ _trans += _klen;
499
+ }
500
+
501
+ _klen = _date_parser_range_lengths[cs];
502
+ if ( _klen > 0 ) {
503
+ const char *_lower = _keys;
504
+ const char *_mid;
505
+ const char *_upper = _keys + (_klen<<1) - 2;
506
+ while (1) {
507
+ if ( _upper < _lower )
508
+ break;
509
+
510
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
511
+ if ( (*p) < _mid[0] )
512
+ _upper = _mid - 2;
513
+ else if ( (*p) > _mid[1] )
514
+ _lower = _mid + 2;
515
+ else {
516
+ _trans += ((_mid - _keys)>>1);
517
+ goto _match;
518
+ }
519
+ }
520
+ _trans += _klen;
521
+ }
522
+
523
+ _match:
524
+ _trans = _date_parser_indicies[_trans];
525
+ cs = _date_parser_trans_targs[_trans];
526
+
527
+ if ( _date_parser_trans_actions[_trans] == 0 )
528
+ goto _again;
529
+
530
+ _acts = _date_parser_actions + _date_parser_trans_actions[_trans];
531
+ _nacts = (unsigned int) *_acts++;
532
+ while ( _nacts-- > 0 )
533
+ {
534
+ switch ( *_acts++ )
535
+ {
536
+ case 0:
537
+ #line 85 "date_parser.rl"
538
+ { t_iso_year = p; }
539
+ break;
540
+ case 1:
541
+ #line 86 "date_parser.rl"
542
+ { t_iso_month = p; }
543
+ break;
544
+ case 2:
545
+ #line 87 "date_parser.rl"
546
+ { t_iso_day = p; }
547
+ break;
548
+ case 3:
549
+ #line 88 "date_parser.rl"
550
+ { t_iso_hour = p; }
551
+ break;
552
+ case 4:
553
+ #line 89 "date_parser.rl"
554
+ { t_iso_minute = p; }
555
+ break;
556
+ case 5:
557
+ #line 90 "date_parser.rl"
558
+ { t_iso_second = p; }
559
+ break;
560
+ case 6:
561
+ #line 91 "date_parser.rl"
562
+ { t_iso_zone = p; }
563
+ break;
564
+ case 7:
565
+ #line 93 "date_parser.rl"
566
+ { iso_state |= RHRR_ISO_TIME_SET; }
567
+ break;
568
+ case 8:
569
+ #line 94 "date_parser.rl"
570
+ {
571
+ t_iso_zone_end = p;
572
+ iso_state |= RHRR_ISO_ZONE_SET;
573
+ }
574
+ break;
575
+ case 10:
576
+ #line 114 "date_parser.rl"
577
+ { t_rfc_wday = p; }
578
+ break;
579
+ case 11:
580
+ #line 115 "date_parser.rl"
581
+ { t_rfc_day = p; }
582
+ break;
583
+ case 12:
584
+ #line 116 "date_parser.rl"
585
+ { t_rfc_month = p; }
586
+ break;
587
+ case 13:
588
+ #line 117 "date_parser.rl"
589
+ { t_rfc_year = p; }
590
+ break;
591
+ case 14:
592
+ #line 118 "date_parser.rl"
593
+ { t_rfc_hour = p; }
594
+ break;
595
+ case 15:
596
+ #line 119 "date_parser.rl"
597
+ { t_rfc_minute = p; }
598
+ break;
599
+ case 16:
600
+ #line 120 "date_parser.rl"
601
+ { t_rfc_second = p; }
602
+ break;
603
+ case 17:
604
+ #line 121 "date_parser.rl"
605
+ { t_rfc_zone = p; }
606
+ break;
607
+ case 18:
608
+ #line 123 "date_parser.rl"
609
+ { rfc_state |= RHRR_RFC_TIME_SET; }
610
+ break;
611
+ case 19:
612
+ #line 124 "date_parser.rl"
613
+ {
614
+ t_rfc_zone_end = p;
615
+ rfc_state |= RHRR_RFC_ZONE_SET | RHRR_RFC_ZONE_NUM_SET;
616
+ }
617
+ break;
618
+ case 20:
619
+ #line 128 "date_parser.rl"
620
+ {
621
+ t_rfc_zone_end = p;
622
+ rfc_state |= RHRR_RFC_ZONE_SET | RHRR_RFC_ZONE_NAME_SET;
623
+ }
624
+ break;
625
+ case 22:
626
+ #line 151 "date_parser.rl"
627
+ { t_clf_day = p; }
628
+ break;
629
+ case 23:
630
+ #line 152 "date_parser.rl"
631
+ { t_clf_month = p; }
632
+ break;
633
+ case 24:
634
+ #line 153 "date_parser.rl"
635
+ { t_clf_year = p; }
636
+ break;
637
+ case 25:
638
+ #line 154 "date_parser.rl"
639
+ { t_clf_hour = p; }
640
+ break;
641
+ case 26:
642
+ #line 155 "date_parser.rl"
643
+ { t_clf_minute = p; }
644
+ break;
645
+ case 27:
646
+ #line 156 "date_parser.rl"
647
+ { t_clf_second = p; }
648
+ break;
649
+ case 28:
650
+ #line 157 "date_parser.rl"
651
+ { t_clf_zone = p; }
652
+ break;
653
+ case 29:
654
+ #line 159 "date_parser.rl"
655
+ { clf_state |= RHRR_CLF_TIME_SET; }
656
+ break;
657
+ case 30:
658
+ #line 160 "date_parser.rl"
659
+ {
660
+ t_clf_zone_end = p;
661
+ clf_state |= RHRR_CLF_ZONE_SET;
662
+ }
663
+ break;
664
+ #line 665 "date_parser.c"
665
+ }
666
+ }
667
+
668
+ _again:
669
+ if ( cs == 0 )
670
+ goto _out;
671
+ if ( ++p != pe )
672
+ goto _resume;
673
+ _test_eof: {}
674
+ if ( p == eof )
675
+ {
676
+ const char *__acts = _date_parser_actions + _date_parser_eof_actions[cs];
677
+ unsigned int __nacts = (unsigned int) *__acts++;
678
+ while ( __nacts-- > 0 ) {
679
+ switch ( *__acts++ ) {
680
+ case 7:
681
+ #line 93 "date_parser.rl"
682
+ { iso_state |= RHRR_ISO_TIME_SET; }
683
+ break;
684
+ case 8:
685
+ #line 94 "date_parser.rl"
686
+ {
687
+ t_iso_zone_end = p;
688
+ iso_state |= RHRR_ISO_ZONE_SET;
689
+ }
690
+ break;
691
+ case 9:
692
+ #line 98 "date_parser.rl"
693
+ { parsers |= RHRR_ISO_PARSER; }
694
+ break;
695
+ case 18:
696
+ #line 123 "date_parser.rl"
697
+ { rfc_state |= RHRR_RFC_TIME_SET; }
698
+ break;
699
+ case 19:
700
+ #line 124 "date_parser.rl"
701
+ {
702
+ t_rfc_zone_end = p;
703
+ rfc_state |= RHRR_RFC_ZONE_SET | RHRR_RFC_ZONE_NUM_SET;
704
+ }
705
+ break;
706
+ case 20:
707
+ #line 128 "date_parser.rl"
708
+ {
709
+ t_rfc_zone_end = p;
710
+ rfc_state |= RHRR_RFC_ZONE_SET | RHRR_RFC_ZONE_NAME_SET;
711
+ }
712
+ break;
713
+ case 21:
714
+ #line 132 "date_parser.rl"
715
+ { parsers |= RHRR_RFC_PARSER; }
716
+ break;
717
+ case 29:
718
+ #line 159 "date_parser.rl"
719
+ { clf_state |= RHRR_CLF_TIME_SET; }
720
+ break;
721
+ case 30:
722
+ #line 160 "date_parser.rl"
723
+ {
724
+ t_clf_zone_end = p;
725
+ clf_state |= RHRR_CLF_ZONE_SET;
726
+ }
727
+ break;
728
+ case 31:
729
+ #line 164 "date_parser.rl"
730
+ { parsers |= RHRR_CLF_PARSER; }
731
+ break;
732
+ #line 733 "date_parser.c"
733
+ }
734
+ }
735
+ }
736
+
737
+ _out: {}
738
+ }
739
+
740
+ #line 241 "date_parser.rl"
741
+
742
+ switch(parsers) {
743
+ case RHRR_ISO_PARSER:
744
+ year = atol(t_iso_year);
745
+ month = atol(t_iso_month);
746
+ day = atol(t_iso_day);
747
+ state |= RHRR_YEAR_SET | RHRR_MONTH_SET | RHRR_DAY_SET;
748
+ if (iso_state & RHRR_ISO_TIME_SET) {
749
+ hour = atol(t_iso_hour);
750
+ minute = atol(t_iso_minute);
751
+ second = atol(t_iso_second);
752
+ state |= RHRR_HOUR_SET | RHRR_MINUTE_SET | RHRR_SECOND_SET;
753
+ if (iso_state & RHRR_ISO_ZONE_SET) {
754
+ zone = t_iso_zone;
755
+ zone_len = t_iso_zone_end - zone;
756
+ offset = atol(zone) * 3600 + atol(zone + 4) * 60;
757
+ state |= RHRR_ZONE_SET | RHRR_OFFSET_SET;
758
+ }
759
+ }
760
+ break;
761
+ case RHRR_RFC_PARSER:
762
+ wday = rhrd__weekday_num(t_rfc_wday);
763
+ day = atol(t_rfc_day);
764
+ month = rhrd__month_num(t_rfc_month);
765
+ year = atol(t_rfc_year);
766
+ state |= RHRR_WDAY_SET | RHRR_YEAR_SET | RHRR_MONTH_SET | RHRR_DAY_SET;
767
+ if (rfc_state & RHRR_RFC_TIME_SET) {
768
+ hour = atol(t_rfc_hour);
769
+ minute = atol(t_rfc_minute);
770
+ second = atol(t_rfc_second);
771
+ state |= RHRR_HOUR_SET | RHRR_MINUTE_SET | RHRR_SECOND_SET;
772
+ if (rfc_state & RHRR_RFC_ZONE_SET) {
773
+ zone = t_rfc_zone;
774
+ zone_len = t_rfc_zone_end - zone;
775
+ state |= RHRR_ZONE_SET;
776
+ if (rfc_state & RHRR_RFC_ZONE_NUM_SET) {
777
+ offset = atol(zone);
778
+ offset = (offset/100) * 3600 + (labs(offset) % 100) * 60 * (offset < 0 ? -1 : 1);
779
+ state |= RHRR_OFFSET_SET;
780
+ } else if (rfc_state & RHRR_RFC_ZONE_NAME_SET) {
781
+ offset = rhrd__rfc_zone_offset(zone);
782
+ if (offset == RHRR_BAD_OFFSET) {
783
+ state = 0;
784
+ } else {
785
+ state |= RHRR_OFFSET_SET;
786
+ }
787
+ }
788
+ }
789
+ }
790
+ break;
791
+ case RHRR_CLF_PARSER:
792
+ year = atol(t_clf_year);
793
+ month = rhrd__month_num(t_clf_month);
794
+ day = atol(t_clf_day);
795
+ state |= RHRR_YEAR_SET | RHRR_MONTH_SET | RHRR_DAY_SET;
796
+ if (clf_state & RHRR_ISO_TIME_SET) {
797
+ hour = atol(t_clf_hour);
798
+ minute = atol(t_clf_minute);
799
+ second = atol(t_clf_second);
800
+ state |= RHRR_HOUR_SET | RHRR_MINUTE_SET | RHRR_SECOND_SET;
801
+ if (clf_state & RHRR_ISO_ZONE_SET) {
802
+ zone = t_clf_zone;
803
+ zone_len = t_clf_zone_end - zone;
804
+ offset = atol(zone);
805
+ offset = (offset/100) * 3600 + (labs(offset) % 100) * 60 * (offset < 0 ? -1 : 1);
806
+ state |= RHRR_ZONE_SET | RHRR_OFFSET_SET;
807
+ }
808
+ }
809
+ break;
810
+ }
811
+
812
+ if (!state) {
813
+ return Qnil;
814
+ }
815
+
816
+ hash = rb_hash_new();
817
+ if(state & RHRR_WDAY_SET) {
818
+ rb_hash_aset(hash, rhrd_sym_wday, INT2NUM(wday));
819
+ }
820
+ if(state & RHRR_YEAR_SET) {
821
+ rb_hash_aset(hash, rhrd_sym_year, INT2NUM(year));
822
+ }
823
+ if(state & RHRR_MONTH_SET) {
824
+ rb_hash_aset(hash, rhrd_sym_mon, INT2NUM(month));
825
+ }
826
+ if(state & RHRR_DAY_SET) {
827
+ rb_hash_aset(hash, rhrd_sym_mday, INT2NUM(day));
828
+ }
829
+ if(state & RHRR_HOUR_SET) {
830
+ rb_hash_aset(hash, rhrd_sym_hour, INT2NUM(hour));
831
+ }
832
+ if(state & RHRR_MINUTE_SET) {
833
+ rb_hash_aset(hash, rhrd_sym_min, INT2NUM(minute));
834
+ }
835
+ if(state & RHRR_SECOND_SET) {
836
+ rb_hash_aset(hash, rhrd_sym_sec, INT2NUM(second));
837
+ }
838
+ if(state & RHRR_ZONE_SET) {
839
+ rzone = rb_str_new(zone, zone_len);
840
+ rb_hash_aset(hash, rhrd_sym_zone, rzone);
841
+ if (state & RHRR_OFFSET_SET) {
842
+ rb_hash_aset(hash, rhrd_sym_offset, INT2NUM(offset));
843
+ } else {
844
+ rzone = rhrd_s_zone_to_diff(rzone, rzone);
845
+ if(RTEST(rzone)) {
846
+ rb_hash_aset(hash, rhrd_sym_offset, rzone);
847
+ }
848
+ }
849
+ }
850
+
851
+ return hash;
852
+ }