1 |
|
/* |
2 |
|
Copyright 2002 Cyril Picard |
3 |
|
|
4 |
|
This file is part of the GEDCOMParser library |
5 |
|
(developed within the Genealogy Free Software Tools project). |
6 |
|
|
7 |
|
The GEDCOMParser library is free software; you can redistribute it and/or modify |
8 |
|
it under the terms of the GNU General Public License as published by |
9 |
|
the Free Software Foundation; either version 2 of the License, or |
10 |
|
(at your option) any later version. |
11 |
|
|
12 |
|
The GEDCOMParser library is distributed in the hope that it will be useful, |
13 |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 |
|
GNU General Public License for more details. |
16 |
|
|
17 |
|
You should have received a copy of the GNU General Public License |
18 |
|
along with the GEDCOMParser library ; if not, write to the Free Software |
19 |
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
20 |
|
|
21 |
|
*/ |
22 |
|
|
23 |
|
%{ |
24 |
|
#include "GEDCOMParser/DateManagement/datevalueparser_decl.hh" |
25 |
|
#include "GEDCOMParser/DateManagement/datevalueparser.h" |
26 |
|
|
27 |
|
#include <string.h> |
28 |
|
#include <iostream> |
29 |
|
|
30 |
|
void datevalue_error(char * const s); |
31 |
|
#define yylex datevaluelex |
32 |
|
int datevaluelex(void); |
33 |
|
|
34 |
|
#include <iostream> |
35 |
|
#include <string> |
36 |
|
|
37 |
|
GEDCOMParser::DateManagement::DateValue * _date_value; |
38 |
|
GEDCOMParser::DateManagement::Date * _date; |
39 |
|
GEDCOMParser::DateManagement::Period * _date_period; |
40 |
|
GEDCOMParser::DateManagement::Range * _date_range; |
41 |
|
GEDCOMParser::DateManagement::DatePhrase * _date_phrase; |
42 |
|
std::string _parsed_string; |
43 |
|
int error_cpt; |
44 |
|
|
45 |
|
%} |
46 |
|
|
47 |
|
%token CAL_GREGORIAN |
48 |
|
%token CAL_JULIAN |
49 |
|
%token CAL_HEBREW |
50 |
|
%token CAL_FRENCH |
51 |
|
%token CAL_ROMAN |
52 |
|
%token CAL_UNKNOWN |
53 |
|
%token MONTH_JAN |
54 |
|
%token MONTH_FEB |
55 |
|
%token MONTH_MAR |
56 |
|
%token MONTH_APR |
57 |
|
%token MONTH_MAY |
58 |
|
%token MONTH_JUN |
59 |
|
%token MONTH_JUL |
60 |
|
%token MONTH_AUG |
61 |
|
%token MONTH_SEP |
62 |
|
%token MONTH_OCT |
63 |
|
%token MONTH_NOV |
64 |
|
%token MONTH_DEC |
65 |
|
%token MONTH_HEBR_TSH |
66 |
|
%token MONTH_HEBR_CSH |
67 |
|
%token MONTH_HEBR_KSL |
68 |
|
%token MONTH_HEBR_TVT |
69 |
|
%token MONTH_HEBR_SHV |
70 |
|
%token MONTH_HEBR_ADR |
71 |
|
%token MONTH_HEBR_ADS |
72 |
|
%token MONTH_HEBR_NSN |
73 |
|
%token MONTH_HEBR_IYR |
74 |
|
%token MONTH_HEBR_SVN |
75 |
|
%token MONTH_HEBR_TMZ |
76 |
|
%token MONTH_HEBR_AAV |
77 |
|
%token MONTH_HEBR_ELL |
78 |
|
%token MONTH_FREN_VEND |
79 |
|
%token MONTH_FREN_BRUM |
80 |
|
%token MONTH_FREN_FRIM |
81 |
|
%token MONTH_FREN_NIVO |
82 |
|
%token MONTH_FREN_PLUV |
83 |
|
%token MONTH_FREN_VENT |
84 |
|
%token MONTH_FREN_GERM |
85 |
|
%token MONTH_FREN_FLOR |
86 |
|
%token MONTH_FREN_PRAI |
87 |
|
%token MONTH_FREN_MESS |
88 |
|
%token MONTH_FREN_THER |
89 |
|
%token MONTH_FREN_FRUC |
90 |
|
%token MONTH_FREN_COMP |
91 |
|
%token AN |
92 |
|
%token FRENCH_YEAR |
93 |
|
%token FROM |
94 |
|
%token TO |
95 |
|
%token BEF |
96 |
|
%token AFT |
97 |
|
%token BET |
98 |
|
%token AND |
99 |
|
%token INT |
100 |
|
%token ABT |
101 |
|
%token CAL |
102 |
|
%token EST |
103 |
|
%token SLASH |
104 |
|
%token BC |
105 |
|
%token SPACE |
106 |
|
%token NUMBER |
107 |
|
%token DATEPHRASE |
108 |
|
|
109 |
|
%% |
110 |
|
|
111 |
|
date_value: |
112 |
|
date |
113 |
|
{ |
114 |
|
_date_value->setType(GEDCOMParser::DateManagement::DateValue::e_Date); |
115 |
|
_date_value->setDate(*_date); |
116 |
|
delete _date; _date = 0; |
117 |
|
} |
118 |
|
| date_period |
119 |
|
{ |
120 |
|
_date_value->setType(GEDCOMParser::DateManagement::DateValue::e_Period); |
121 |
|
_date_value->setPeriod(*_date_period); |
122 |
|
delete _date_period; _date_period = 0; |
123 |
|
} |
124 |
|
| date_range |
125 |
|
{ |
126 |
|
_date_value->setType(GEDCOMParser::DateManagement::DateValue::e_Range); |
127 |
|
_date_value->setRange(*_date_range); |
128 |
|
delete _date_range; _date_range = 0; |
129 |
|
} |
130 |
|
| date_approximated |
131 |
|
{ |
132 |
|
_date_value->setType(GEDCOMParser::DateManagement::DateValue::e_Date); |
133 |
|
_date_value->setDate(*_date); |
134 |
|
delete _date; _date = 0; |
135 |
|
} |
136 |
|
|
137 |
|
| INT date SPACE DATEPHRASE |
138 |
|
{ |
139 |
|
_date_phrase = new GEDCOMParser::DateManagement::DatePhrase($4); |
140 |
|
_date_value->setType(GEDCOMParser::DateManagement::DateValue::e_Interpreted); |
141 |
|
_date_value->setDatePhrase(*_date_phrase); |
142 |
|
_date_value->setDate(*_date); |
143 |
|
delete _date_phrase; _date_phrase = 0; |
144 |
|
delete _date; _date = 0; |
145 |
|
} |
146 |
|
| DATEPHRASE |
147 |
|
{ |
148 |
|
_date_phrase = new GEDCOMParser::DateManagement::DatePhrase($1); |
149 |
|
_date_value->setType(GEDCOMParser::DateManagement::DateValue::e_DatePhrase); |
150 |
|
_date_value->setDatePhrase(*_date_phrase); |
151 |
|
delete _date_phrase; _date_phrase = 0; |
152 |
|
} |
153 |
|
; |
154 |
|
|
155 |
|
date: |
156 |
|
SPACE date |
157 |
|
| SPACE date SPACE |
158 |
|
| date_greg |
159 |
|
| CAL_GREGORIAN date_greg |
160 |
|
| CAL_JULIAN date_juln |
161 |
|
{ |
162 |
|
_date->setCalendar(GEDCOMParser::DateManagement::Date::e_Julian); |
163 |
|
} |
164 |
|
| CAL_HEBREW date_hebr |
165 |
|
{ |
166 |
|
_date->setCalendar(GEDCOMParser::DateManagement::Date::e_Hebrew); |
167 |
|
} |
168 |
|
| CAL_FRENCH date_fren |
169 |
|
{ |
170 |
|
_date->setCalendar(GEDCOMParser::DateManagement::Date::e_French); |
171 |
|
} |
172 |
|
| CAL_ROMAN date_future |
173 |
|
{ |
174 |
|
_date->setCalendar(GEDCOMParser::DateManagement::Date::e_Unknown); |
175 |
|
} |
176 |
|
| CAL_UNKNOWN date_future |
177 |
|
{ |
178 |
|
_date->setCalendar(GEDCOMParser::DateManagement::Date::e_Unknown); |
179 |
|
} |
180 |
|
; |
181 |
|
|
182 |
|
date_greg: |
183 |
|
| NUMBER SPACE month SPACE NUMBER |
184 |
|
{ |
185 |
|
if (_date == 0) |
186 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
187 |
|
_date->setDay($1); |
188 |
|
_date->setYear($5); |
189 |
|
} |
190 |
|
| month SPACE NUMBER |
191 |
|
{ |
192 |
|
if (_date == 0) |
193 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
194 |
|
_date->setYear($3); |
195 |
|
} |
196 |
|
| NUMBER |
197 |
|
{ |
198 |
|
if (_date == 0) |
199 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
200 |
|
_date->setYear($1); |
201 |
|
} |
202 |
|
| date_greg SLASH NUMBER // TO DO : ACTION |
203 |
|
| date_greg BC |
204 |
|
{ |
205 |
|
if (_date == 0) |
206 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
207 |
|
_date->setBeforeChrist(true); |
208 |
|
} |
209 |
|
; |
210 |
|
|
211 |
|
month: |
212 |
|
MONTH_JAN |
213 |
|
{ |
214 |
|
if (_date == 0) |
215 |
|
{ |
216 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
217 |
|
} |
218 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Jan); |
219 |
|
} |
220 |
|
| MONTH_FEB |
221 |
|
{ |
222 |
|
if (_date == 0) |
223 |
|
{ |
224 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
225 |
|
} |
226 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Feb); |
227 |
|
} |
228 |
|
| MONTH_MAR |
229 |
|
{ |
230 |
|
if (_date == 0) |
231 |
|
{ |
232 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
233 |
|
} |
234 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Mar); |
235 |
|
} |
236 |
|
| MONTH_APR |
237 |
|
{ |
238 |
|
if (_date == 0) |
239 |
|
{ |
240 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
241 |
|
} |
242 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Apr); |
243 |
|
} |
244 |
|
| MONTH_MAY |
245 |
|
{ |
246 |
|
if (_date == 0) |
247 |
|
{ |
248 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
249 |
|
} |
250 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_May); |
251 |
|
} |
252 |
|
| MONTH_JUN |
253 |
|
{ |
254 |
|
if (_date == 0) |
255 |
|
{ |
256 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
257 |
|
} |
258 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Jun); |
259 |
|
} |
260 |
|
| MONTH_JUL |
261 |
|
{ |
262 |
|
if (_date == 0) |
263 |
|
{ |
264 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
265 |
|
} |
266 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Jul); |
267 |
|
} |
268 |
|
| MONTH_AUG |
269 |
|
{ |
270 |
|
if (_date == 0) |
271 |
|
{ |
272 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
273 |
|
} |
274 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Aug); |
275 |
|
} |
276 |
|
| MONTH_SEP |
277 |
|
{ |
278 |
|
if (_date == 0) |
279 |
|
{ |
280 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
281 |
|
} |
282 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Sep); |
283 |
|
} |
284 |
|
| MONTH_OCT |
285 |
|
{ |
286 |
|
if (_date == 0) |
287 |
|
{ |
288 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
289 |
|
} |
290 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Oct); |
291 |
|
} |
292 |
|
| MONTH_NOV |
293 |
|
{ |
294 |
|
if (_date == 0) |
295 |
|
{ |
296 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
297 |
|
} |
298 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Nov); |
299 |
|
} |
300 |
|
| MONTH_DEC |
301 |
|
{ |
302 |
|
if (_date == 0) |
303 |
|
{ |
304 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
305 |
|
} |
306 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Dec); |
307 |
|
} |
308 |
|
; |
309 |
|
|
310 |
|
date_hebr: |
311 |
|
NUMBER |
312 |
|
{ |
313 |
|
if (_date == 0) |
314 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
315 |
|
_date->setYear($1); |
316 |
|
} |
317 |
|
| month_hebr SPACE NUMBER |
318 |
|
{ |
319 |
|
if (_date == 0) |
320 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
321 |
|
_date->setYear($3); |
322 |
|
} |
323 |
|
| NUMBER SPACE month_hebr SPACE NUMBER |
324 |
|
{ |
325 |
|
if (_date == 0) |
326 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
327 |
|
_date->setDay($1); |
328 |
|
_date->setYear($5); |
329 |
|
} |
330 |
|
; |
331 |
|
|
332 |
|
month_hebr: |
333 |
|
MONTH_HEBR_TSH |
334 |
|
{ |
335 |
|
if (_date == 0) |
336 |
|
{ |
337 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
338 |
|
} |
339 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Tsh); |
340 |
|
} |
341 |
|
| MONTH_HEBR_CSH |
342 |
|
{ |
343 |
|
if (_date == 0) |
344 |
|
{ |
345 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
346 |
|
} |
347 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Csh); |
348 |
|
} |
349 |
|
| MONTH_HEBR_KSL |
350 |
|
{ |
351 |
|
if (_date == 0) |
352 |
|
{ |
353 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
354 |
|
} |
355 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Ksl); |
356 |
|
} |
357 |
|
| MONTH_HEBR_TVT |
358 |
|
{ |
359 |
|
if (_date == 0) |
360 |
|
{ |
361 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
362 |
|
} |
363 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Tvt); |
364 |
|
} |
365 |
|
| MONTH_HEBR_SHV |
366 |
|
{ |
367 |
|
if (_date == 0) |
368 |
|
{ |
369 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
370 |
|
} |
371 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Shv); |
372 |
|
} |
373 |
|
| MONTH_HEBR_ADR |
374 |
|
{ |
375 |
|
if (_date == 0) |
376 |
|
{ |
377 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
378 |
|
} |
379 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Adr); |
380 |
|
} |
381 |
|
| MONTH_HEBR_ADS |
382 |
|
{ |
383 |
|
if (_date == 0) |
384 |
|
{ |
385 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
386 |
|
} |
387 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Ads); |
388 |
|
} |
389 |
|
| MONTH_HEBR_NSN |
390 |
|
{ |
391 |
|
if (_date == 0) |
392 |
|
{ |
393 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
394 |
|
} |
395 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Nsn); |
396 |
|
} |
397 |
|
| MONTH_HEBR_IYR |
398 |
|
{ |
399 |
|
if (_date == 0) |
400 |
|
{ |
401 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
402 |
|
} |
403 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Iyr); |
404 |
|
} |
405 |
|
| MONTH_HEBR_SVN |
406 |
|
{ |
407 |
|
if (_date == 0) |
408 |
|
{ |
409 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
410 |
|
} |
411 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Svn); |
412 |
|
} |
413 |
|
| MONTH_HEBR_TMZ |
414 |
|
{ |
415 |
|
if (_date == 0) |
416 |
|
{ |
417 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
418 |
|
} |
419 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Tmz); |
420 |
|
} |
421 |
|
| MONTH_HEBR_AAV |
422 |
|
{ |
423 |
|
if (_date == 0) |
424 |
|
{ |
425 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
426 |
|
} |
427 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Aav); |
428 |
|
} |
429 |
|
| MONTH_HEBR_ELL |
430 |
|
{ |
431 |
|
if (_date == 0) |
432 |
|
{ |
433 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
434 |
|
} |
435 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Hebr_Ell); |
436 |
|
} |
437 |
|
; |
438 |
|
|
439 |
|
date_juln: |
440 |
|
NUMBER |
441 |
|
{ |
442 |
|
if (_date == 0) |
443 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
444 |
|
_date->setYear($1); |
445 |
|
} |
446 |
|
| month SPACE NUMBER |
447 |
|
{ |
448 |
|
if (_date == 0) |
449 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
450 |
|
_date->setYear($3); |
451 |
|
} |
452 |
|
| NUMBER SPACE month SPACE NUMBER |
453 |
|
{ |
454 |
|
if (_date == 0) |
455 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
456 |
|
_date->setDay($1); |
457 |
|
_date->setYear($5); |
458 |
|
} |
459 |
|
; |
460 |
|
date_fren: |
461 |
|
NUMBER SPACE month_fren SPACE NUMBER |
462 |
|
{ |
463 |
|
if (_date == 0) |
464 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
465 |
|
_date->setDay($1); |
466 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Decimal); |
467 |
|
_date->setYear($5); |
468 |
|
} |
469 |
|
| month_fren SPACE NUMBER |
470 |
|
{ |
471 |
|
if (_date == 0) |
472 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
473 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Decimal); |
474 |
|
_date->setYear($3); |
475 |
|
} |
476 |
|
|NUMBER |
477 |
|
{ |
478 |
|
if (_date == 0) |
479 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
480 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Decimal); |
481 |
|
_date->setYear($1); |
482 |
|
} |
483 |
|
| NUMBER SPACE month_fren SPACE AN FRENCH_YEAR |
484 |
|
{ |
485 |
|
if (_date == 0) |
486 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
487 |
|
_date->setDay($1); |
488 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Roman); |
489 |
|
_date->setYear($6); |
490 |
|
} |
491 |
|
| month_fren SPACE AN FRENCH_YEAR |
492 |
|
{ |
493 |
|
if (_date == 0) |
494 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
495 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Roman); |
496 |
|
_date->setYear($4); |
497 |
|
} |
498 |
|
| AN FRENCH_YEAR |
499 |
|
{ |
500 |
|
if (_date == 0) |
501 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
502 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Roman); |
503 |
|
_date->setYear($2); |
504 |
|
} |
505 |
|
| NUMBER SPACE month_fren SPACE FRENCH_YEAR |
506 |
|
{ |
507 |
|
if (_date == 0) |
508 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
509 |
|
_date->setDay($1); |
510 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Roman); |
511 |
|
_date->setYear($5); |
512 |
|
} |
513 |
|
| month_fren SPACE FRENCH_YEAR |
514 |
|
{ |
515 |
|
if (_date == 0) |
516 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
517 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Roman); |
518 |
|
_date->setYear($3); |
519 |
|
} |
520 |
|
| FRENCH_YEAR |
521 |
|
{ |
522 |
|
if (_date == 0) |
523 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
524 |
|
_date->setFrenchYearFormat(GEDCOMParser::DateManagement::Date::e_FrenchYearFormat_Roman); |
525 |
|
_date->setYear($1); |
526 |
|
} |
527 |
|
|
528 |
|
|
529 |
|
|
530 |
|
; |
531 |
|
|
532 |
|
month_fren: |
533 |
|
MONTH_FREN_VEND |
534 |
|
{ |
535 |
|
if (_date == 0) |
536 |
|
{ |
537 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
538 |
|
} |
539 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Vend); |
540 |
|
} |
541 |
|
| MONTH_FREN_BRUM |
542 |
|
{ |
543 |
|
if (_date == 0) |
544 |
|
{ |
545 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
546 |
|
} |
547 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Brum); |
548 |
|
} |
549 |
|
| MONTH_FREN_FRIM |
550 |
|
{ |
551 |
|
if (_date == 0) |
552 |
|
{ |
553 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
554 |
|
} |
555 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Frim); |
556 |
|
} |
557 |
|
| MONTH_FREN_NIVO |
558 |
|
{ |
559 |
|
if (_date == 0) |
560 |
|
{ |
561 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
562 |
|
} |
563 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Nivo); |
564 |
|
} |
565 |
|
| MONTH_FREN_PLUV |
566 |
|
{ |
567 |
|
if (_date == 0) |
568 |
|
{ |
569 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
570 |
|
} |
571 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Pluv); |
572 |
|
} |
573 |
|
| MONTH_FREN_VENT |
574 |
|
{ |
575 |
|
if (_date == 0) |
576 |
|
{ |
577 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
578 |
|
} |
579 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Vent); |
580 |
|
} |
581 |
|
| MONTH_FREN_GERM |
582 |
|
{ |
583 |
|
if (_date == 0) |
584 |
|
{ |
585 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
586 |
|
} |
587 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Germ); |
588 |
|
} |
589 |
|
| MONTH_FREN_FLOR |
590 |
|
{ |
591 |
|
if (_date == 0) |
592 |
|
{ |
593 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
594 |
|
} |
595 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Flor); |
596 |
|
} |
597 |
|
| MONTH_FREN_PRAI |
598 |
|
{ |
599 |
|
if (_date == 0) |
600 |
|
{ |
601 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
602 |
|
} |
603 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Prai); |
604 |
|
} |
605 |
|
| MONTH_FREN_MESS |
606 |
|
{ |
607 |
|
if (_date == 0) |
608 |
|
{ |
609 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
610 |
|
} |
611 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Mess); |
612 |
|
} |
613 |
|
| MONTH_FREN_THER |
614 |
|
{ |
615 |
|
if (_date == 0) |
616 |
|
{ |
617 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
618 |
|
} |
619 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Ther); |
620 |
|
} |
621 |
|
| MONTH_FREN_FRUC |
622 |
|
{ |
623 |
|
if (_date == 0) |
624 |
|
{ |
625 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
626 |
|
} |
627 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Fruc); |
628 |
|
} |
629 |
|
| MONTH_FREN_COMP |
630 |
|
{ |
631 |
|
if (_date == 0) |
632 |
|
{ |
633 |
|
_date = new GEDCOMParser::DateManagement::Date(); |
634 |
|
} |
635 |
|
_date->setMonth(GEDCOMParser::DateManagement::Date::e_Fren_Comp); |
636 |
|
} |
637 |
|
; |
638 |
|
|
639 |
|
date_future: |
640 |
|
DATEPHRASE |
641 |
|
{ |
642 |
|
if (_date_phrase == 0) |
643 |
|
_date_phrase = new GEDCOMParser::DateManagement::DatePhrase($1); |
644 |
|
} |
645 |
|
; |
646 |
|
|
647 |
|
date_period: |
648 |
|
SPACE date_period |
649 |
|
| date_period SPACE TO date |
650 |
|
{ |
651 |
|
if (_date_period == 0) |
652 |
|
{ |
653 |
|
_date_period = new GEDCOMParser::DateManagement::Period(); |
654 |
|
} |
655 |
|
_date_period->setDateTo(*_date); |
656 |
|
delete _date; _date = 0; |
657 |
|
} |
658 |
|
| FROM date |
659 |
|
{ |
660 |
|
if (_date_period == 0) |
661 |
|
{ |
662 |
|
_date_period = new GEDCOMParser::DateManagement::Period(); |
663 |
|
} |
664 |
|
_date_period->setDateFrom(*_date); |
665 |
|
delete _date; _date = 0; |
666 |
|
} |
667 |
|
| TO date |
668 |
|
{ |
669 |
|
if (_date_period == 0) |
670 |
|
{ |
671 |
|
_date_period = new GEDCOMParser::DateManagement::Period(); |
672 |
|
} |
673 |
|
_date_period->setDateTo(*_date); |
674 |
|
delete _date; _date = 0; |
675 |
|
} |
676 |
|
; |
677 |
|
|
678 |
|
date_range: |
679 |
|
SPACE date_range |
680 |
|
| date_range AND date |
681 |
|
{ |
682 |
|
if (_date_range == 0) |
683 |
|
{ |
684 |
|
_date_range = new GEDCOMParser::DateManagement::Range(); |
685 |
|
} |
686 |
|
_date_range->setBound2(*_date); |
687 |
|
_date_range->setType(GEDCOMParser::DateManagement::Range::e_Between); |
688 |
|
delete _date; _date = 0; |
689 |
|
} |
690 |
|
| BEF date |
691 |
|
{ |
692 |
|
if (_date_range == 0) |
693 |
|
{ |
694 |
|
_date_range = new GEDCOMParser::DateManagement::Range(); |
695 |
|
} |
696 |
|
_date_range->setBound1(*_date); |
697 |
|
_date_range->setType(GEDCOMParser::DateManagement::Range::e_Before); |
698 |
|
delete _date; _date = 0; |
699 |
|
} |
700 |
|
| AFT date |
701 |
|
{ |
702 |
|
if (_date_range == 0) |
703 |
|
{ |
704 |
|
_date_range = new GEDCOMParser::DateManagement::Range(); |
705 |
|
} |
706 |
|
_date_range->setBound1(*_date); |
707 |
|
_date_range->setType(GEDCOMParser::DateManagement::Range::e_After); |
708 |
|
delete _date; _date = 0; |
709 |
|
} |
710 |
|
| BET date |
711 |
|
{ |
712 |
|
if (_date_range == 0) |
713 |
|
{ |
714 |
|
_date_range = new GEDCOMParser::DateManagement::Range(); |
715 |
|
} |
716 |
|
_date_range->setBound1(*_date); |
717 |
|
_date_range->setType(GEDCOMParser::DateManagement::Range::e_Between); |
718 |
|
delete _date; _date = 0; |
719 |
|
} |
720 |
|
; |
721 |
|
|
722 |
|
date_approximated: |
723 |
|
ABT date |
724 |
|
{ |
725 |
|
_date->setPrecision(GEDCOMParser::DateManagement::Date::e_About); |
726 |
|
} |
727 |
|
| CAL date |
728 |
|
{ |
729 |
|
_date->setPrecision(GEDCOMParser::DateManagement::Date::e_Calculated); |
730 |
|
} |
731 |
|
| EST date |
732 |
|
{ |
733 |
|
_date->setPrecision(GEDCOMParser::DateManagement::Date::e_Estimated); |
734 |
|
} |
735 |
|
; |
736 |
|
|
737 |
|
%% |
738 |
|
|
739 |
|
void datevalue_error(char * const s) |
740 |
|
{ |
741 |
|
std::cerr << s << " (DateManagement parsing) : " << _parsed_string << std::endl; |
742 |
|
return ; |
743 |
|
} |
744 |
|
|
745 |
|
void datevalue_runparse(std::string const &s, GEDCOMParser::DateManagement::DateValue * date_value, int debug = 0) |
746 |
|
{ |
747 |
|
_parsed_string = s; |
748 |
|
yydebug = debug; |
749 |
|
error_cpt = 0; |
750 |
|
_date = 0; |
751 |
|
_date_period = 0; |
752 |
|
_date_range = 0; |
753 |
|
_date_phrase = 0; |
754 |
|
_date_value = date_value; |
755 |
|
datevalue_scan_string(s.c_str()); |
756 |
|
datevalue_parse(); |
757 |
|
delete _date; _date = 0; |
758 |
|
delete _date_period; _date_period = 0; |
759 |
|
_date_range = 0; |
760 |
|
_date_phrase = 0; |
761 |
|
if (error_cpt > 0) |
762 |
|
{ |
763 |
|
_date_value->setParseError(true); |
764 |
|
} |
765 |
|
else |
766 |
|
{ |
767 |
|
_date_value->setParseError(false); |
768 |
|
} |
769 |
|
error_cpt = 0; |
770 |
|
return; |
771 |
|
} |