Moved gedcom_set_error_handling to interface.c to make conversion of docs
[gedcom-parse.git] / gedcom / date.c
index 4f9878fb624553fd7255fce6ad84a1bcf15b86da..a6a8eb52a62d278828e21eb99f8c69a2983881fb 100644 (file)
@@ -405,6 +405,8 @@ struct date_value* gedcom_new_date_value(const struct date_value* copy_from)
 struct date_value gedcom_parse_date(const char* line_value)
 {
   int result = 0;
+  init_date(&dv_s.date1);
+  init_date(&dv_s.date2);
   init_date(&date_s);
   init_date(&def_date);
   curr_line_value = line_value;
@@ -414,17 +416,24 @@ struct date_value gedcom_parse_date(const char* line_value)
     result = 1;
   }
   else {
+    compat_date_start();
     init_gedcom_date_lex(line_value);
     gedcom_date_parse();
     close_gedcom_date_lex();
+    if (compat_date_check(&dv_s, &curr_line_value)) {
+      init_gedcom_date_lex(curr_line_value);
+      gedcom_date_parse();
+      close_gedcom_date_lex();
+    }
     if (dv_s.date1.cal != CAL_UNKNOWN)
       result |= numbers_to_sdn(&dv_s.date1);
     if (dv_s.date2.cal != CAL_UNKNOWN)
       result |= numbers_to_sdn(&dv_s.date2);
   }
   if (result != 0) {
-    gedcom_date_error(_("Putting date in 'phrase' member"));
-    make_date_value(DV_PHRASE, &def_date, &def_date, curr_line_value);
+    gedcom_date_error(_("Putting date '%s' in 'phrase' member"),
+                     curr_line_value);
+    make_date_value(DV_PHRASE, &dv_s.date1, &dv_s.date2, curr_line_value);
   }
   return dv_s;
 }