Added graceful fallback for date parse errors: put everything as a
authorPeter Verthez <Peter.Verthez@advalvas.be>
Sat, 29 Dec 2001 15:19:46 +0000 (15:19 +0000)
committerPeter Verthez <Peter.Verthez@advalvas.be>
Sat, 29 Dec 2001 15:19:46 +0000 (15:19 +0000)
'date phrase' if format not recognized.

gedcom/date.c
gedcom/date.h
gedcom/gedcom_date.y

index a14522ad939e64a71021e8124a0ebb252e6379aa..d05740803c95940c52c34041bbe3fdf8cb8cb64e 100644 (file)
@@ -32,6 +32,8 @@ struct date date_s;
 struct date_value def_date_val;
 struct date def_date;
 
+char* curr_line_value;
+
 int max_month[] = { 12,  /* CAL_GREGORIAN */
                    12,  /* CAL_JULIAN */
                    13,  /* CAL_HEBREW */
@@ -118,6 +120,7 @@ struct date_value gedcom_parse_date(char* line_value)
 {
   init_date(&date_s);
   init_date(&def_date);
+  curr_line_value = line_value;
   init_gedcom_date_lex(line_value);
   gedcom_date_parse();
   close_gedcom_date_lex();
index 3db5829c034d5c2738367caac06a399c7286a170..430fe7b24c1a94188a71458caf2ffa5a3bb79ab2 100644 (file)
@@ -34,6 +34,7 @@
 extern struct date_value dv_s;
 extern struct date date_s;
 extern struct date def_date;
+extern char* curr_line_value;
 
 int               gedcom_date_parse();
 int               gedcom_date_lex();
index 60b10167831c92108f32dd89181e541ba22e3b20..282b8641ddaf69e2d8b9b4fc6050ef5c57f86a01 100644 (file)
@@ -109,6 +109,10 @@ date_value   : date           { make_date_value(DV_NO_MODIFIER,
              | date_interpr
              | date_phrase    { make_date_value(DV_PHRASE,
                                                def_date, def_date, $1); }
+             | error { /* On error: put entire string in 'phrase' member
+                         as fallback */
+                      make_date_value(DV_PHRASE,
+                                      def_date, def_date, curr_line_value); }
              ;
 
 date         : ESC_DATE_GREG date_greg { copy_date(&$$, date_s);