Keep parsed values in date if parse was OK, but no valid date.
authorPeter Verthez <Peter.Verthez@advalvas.be>
Wed, 5 Feb 2003 19:37:35 +0000 (19:37 +0000)
committerPeter Verthez <Peter.Verthez@advalvas.be>
Wed, 5 Feb 2003 19:37:35 +0000 (19:37 +0000)
ChangeLog
NEWS
doc/interface.html
gedcom/compat.c
gedcom/compat.h
gedcom/date.c
t/output/compat-famorig.ref
t/output/dates.ref
t/output/dates_gom.ref

index f2f5dfafafdec9cd6fcaba9e8f78cb2d62a67a7d..63891397e169fd3c6421cdd9cf9583a800bc0579 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-02-05  Peter Verthez  <Peter.Verthez@advalvas.be>
+
+       * gedcom/date.c (gedcom_parse_date): Keep parsed values in date if
+       parse was OK, but didn't result in a valid date.
+
 2003-02-02  Peter Verthez  <Peter.Verthez@advalvas.be>
 
        * release 0.90.0
diff --git a/NEWS b/NEWS
index f5402a7ba4bf2b46946aedb62ebb3b2ae1f8b492..e55f7115d6f0059aac94830c27e594fd805097ec 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,12 @@
 NOTE: NO BACKWARD COMPATIBILITY IS GUARANTEED FOR 0.x RELEASES !!
 
+release 0.91.0 (NOT RELEASED YET):
+
+ - If a date is parsed fine, but cannot be successfully converted to an
+   SDN, the parsed values are now kept in the returned date_value.  This means
+   that a date of DV_PHRASE type can have meaningful values in the string
+   and number values (the sdn value will still be -1).
+
 release 0.90.0 (2 February 2003):
 
  - The interface of libgedcom and libgedcom_gom should now be functionally
index 2a90537e327764db7a3f8b760026c3658e68e00f..34f8b073c214ec5f3f381ae9d9d356f0eec41723 100644 (file)
@@ -2303,7 +2303,9 @@ the value    that is returned by <code>GEDCOM_STRING(val)</code> is always the s
            <tr>
              <td valign="top"><code>DV_PHRASE</code><br>
              </td>
-             <td valign="top">a free form date phrase<br>
+             <td valign="top">a free form date phrase
+(date1 and date2 can contain meaningful values, if the dates could be parsed,
+but did not result in a valid date; the sdn values will then still be -1)<br>
              </td>
              <td valign="top">phrase<br>
              </td>
@@ -2692,4 +2694,5 @@ An example would thus be: "@This is an xref_val@".<br>
 <br>
 <br>
 <br>
+<br>
 </body></html>
\ No newline at end of file
index ef319ae844e4db76748468f5c9ed437128a0b48f..3997fe695278d589e838a7f0e470125339b20f78 100644 (file)
@@ -96,11 +96,13 @@ struct program_data data[] = {
        - no FAMC field in SLGC
        - uses tab character (will be converted to 8 spaces here)
        - lines too long
+       - non-standard date formats
 
     - Personal Ancestral File 2:
         - '@' not written as '@@' in values
        - COMM tag in submitter record
        - double dates written as e.g. '1815/1816' instead of '1815/16'
+       - non-standard date formats
 
     - Family Origins:
         - '@' not written as '@@' in values
@@ -118,6 +120,7 @@ struct program_data data[] = {
         - '@' not written as '@@' in values
        - SUBM.CTRY instead of SUBM.ADDR.CTRY
        - lines too long
+       - non-standard date formats
  */
 
 int compat_matrix[] =
@@ -142,7 +145,8 @@ int compat_matrix[] =
   /* C_SUBM_CTRY */           C_PAF4,
   /* C_NOTE_TOO_LONG */       C_PAF4 | C_PAF5,
   /* C_NOTE_CONC_SOUR */      C_EASYTREE,
-  /* C_NONSTD_SOUR_TAGS */    C_EASYTREE
+  /* C_NONSTD_SOUR_TAGS */    C_EASYTREE,
+  /* C_PAF_DATES */           C_PAF2 | C_PAF4 | C_PAF5
 };
 
 union _COMPAT_STATE {
index 088da5adcfa4337590141232b9b6d8703ee2ba1c..aaf8c49d2b637279b147316f2e381abbf8797f52 100644 (file)
@@ -49,6 +49,7 @@ typedef enum _COMPAT_RULES {
   C_NOTE_TOO_LONG,
   C_NOTE_CONC_SOUR,
   C_NONSTD_SOUR_TAGS,
+  C_PAF_DATES,
   C_NR_OF_RULES
 } Compat_rule;
 
index 4f9878fb624553fd7255fce6ad84a1bcf15b86da..9c086e7e2494ccb4de39d7517826ff574acbe710 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;
@@ -424,7 +426,7 @@ struct date_value gedcom_parse_date(const char* line_value)
   }
   if (result != 0) {
     gedcom_date_error(_("Putting date in 'phrase' member"));
-    make_date_value(DV_PHRASE, &def_date, &def_date, curr_line_value);
+    make_date_value(DV_PHRASE, &dv_s.date1, &dv_s.date2, curr_line_value);
   }
   return dv_s;
 }
index 1b338f79cfe143c27ddcb48c688adae5c63fc1d7..5c6987bacc0a8eed71b156335514964cdea8999f 100644 (file)
@@ -146,11 +146,11 @@ Contents of the date_value:
   raw value: 29 FEB 1739
   type: 11
   date1:
-    calendar type: 4
-    day: 
-    month: 
-    year: 
-    date type: 0
+    calendar type: 0
+    day: 29
+    month: FEB
+    year: 1739
+    date type: 1
     sdn1: -1
     sdn2: -1
   date2:
@@ -360,11 +360,11 @@ Contents of the date_value:
   raw value: 29 FEB 1739
   type: 11
   date1:
-    calendar type: 4
-    day: 
-    month: 
-    year: 
-    date type: 0
+    calendar type: 0
+    day: 29
+    month: FEB
+    year: 1739
+    date type: 1
     sdn1: -1
     sdn2: -1
   date2:
index cbbfde09c91b33b618af05d075cbea89d9b295f8..b21599fa25395901c6bd82c6d9d2e4cc85920171 100644 (file)
@@ -276,11 +276,11 @@ Contents of the date_value:
   raw value: 29 FEB 1739
   type: 11
   date1:
-    calendar type: 4
-    day: 
-    month: 
-    year: 
-    date type: 0
+    calendar type: 0
+    day: 29
+    month: FEB
+    year: 1739
+    date type: 1
     sdn1: -1
     sdn2: -1
   date2:
@@ -584,11 +584,11 @@ Contents of the date_value:
   raw value: 29 FEB 1739
   type: 11
   date1:
-    calendar type: 4
-    day: 
-    month: 
-    year: 
-    date type: 0
+    calendar type: 0
+    day: 29
+    month: FEB
+    year: 1739
+    date type: 1
     sdn1: -1
     sdn2: -1
   date2:
index fb8a00258cae853f12af773d12f542a5964bc987..576504f896891fd7a258ab4d0a9d8722c1c9b631 100644 (file)
@@ -892,12 +892,12 @@ Individual events:
     Date: 
       type: 11
       date1:
-        calendar type: 4
-        day: '', -1
-        month: '', -1
-        year: '', -1
+        calendar type: 0
+        day: '29', 29
+        month: 'FEB', 2
+        year: '1739', 1739
         year type: 0
-        date type: 0
+        date type: 1
         sdn1: -1
         sdn2: -1
       date2: