Use XREF_ANY for an association, instead of XREF_INDI.
[gedcom-parse.git] / gedcom / gedcom.y
index 911b5fdf85b0a049002b59bc80de634792efe2f1..44613d991e52eb560bbcec9a6176e68f8a1fb35f 100644 (file)
 #include "encoding.h"
 #include "interface.h"
 #include "date.h"
+#include "age.h"
 #include "xref.h"
 #include "compat.h"
 
 int  count_level    = 0;
 int  fail           = 0;
-int  compat_enabled = 1;
 int  gedcom_high_level_debug = 0; 
-int  compatibility  = 0; 
 Gedcom_err_mech error_mechanism = IMMED_FAIL;
 Gedcom_val_struct val1;
 Gedcom_val_struct val2; 
@@ -161,11 +160,6 @@ Gedcom_val_struct val2;
 char line_item_buf[MAXGEDCLINELEN * UTF_FACTOR + 1];
 char *line_item_buf_ptr;
 
-enum _COMPAT {
-  C_FTREE = 0x01,
-  C_LIFELINES = 0x02
-};
-
 /* These are defined at the bottom of the file */ 
 void push_countarray();
 void set_parenttag(char* tag);
@@ -175,8 +169,6 @@ Gedcom_ctxt get_parentctxt(int offset);
 void pop_countarray();
 int  count_tag(int tag);
 int  check_occurrence(int tag);
-void set_compatibility(char* program);
-int  compat_mode(int flags); 
 
 #define CLEAR_BUFFER(BUF)                                                     \
      memset(BUF, 0, sizeof(BUF));
@@ -2023,7 +2015,7 @@ assoc_struc_sub : asso_sect /* 0:M */
 
 asso_sect : OPEN DELIM TAG_ASSO mand_pointer
             { struct xref_value *xr = gedcom_parse_xref($4, XREF_USED,
-                                                       XREF_INDI);
+                                                       XREF_ANY);
              if (xr == NULL) HANDLE_ERROR;
              $<ctxt>$ = start_element(ELT_SUB_ASSO,
                                       PARENT, $1, $3, $4, 
@@ -2250,10 +2242,11 @@ event_detail_date_sect : OPEN DELIM TAG_DATE mand_line_item
                         }
                        ;
 event_detail_age_sect  : OPEN DELIM TAG_AGE mand_line_item 
-                         { $<ctxt>$
+                         { struct age_value age = gedcom_parse_age($4);
+                          $<ctxt>$
                             = start_element(ELT_SUB_EVT_AGE,
                                             PARENT, $1, $3, $4, 
-                                            GEDCOM_MAKE_STRING(val1, $4));
+                                            GEDCOM_MAKE_AGE(val1, age));
                           START(AGE, $<ctxt>$)  
                          }  
                          no_std_subs  
@@ -2356,9 +2349,10 @@ fam_even_husb_sub : fam_even_age_sect  { OCCUR2(AGE, 1, 1) }
                   ;
 
 fam_even_age_sect : OPEN DELIM TAG_AGE mand_line_item  
-                    { $<ctxt>$ = start_element(ELT_SUB_FAM_EVT_AGE,
+                    { struct age_value age = gedcom_parse_age($4);
+                     $<ctxt>$ = start_element(ELT_SUB_FAM_EVT_AGE,
                                               PARENT, $1, $3, $4,
-                                              GEDCOM_MAKE_STRING(val1, $4));
+                                              GEDCOM_MAKE_AGE(val1, age));
                      START(AGE, $<ctxt>$)   
                     }   
                     no_std_subs   
@@ -3908,35 +3902,3 @@ void gedcom_set_error_handling(Gedcom_err_mech mechanism)
 {
   error_mechanism = mechanism;
 }
-
-/* Compatibility handling */
-
-void gedcom_set_compat_handling(int enable_compat)
-{
-  compat_enabled = enable_compat;
-}
-
-void set_compatibility(char* program)
-{
-  if (compat_enabled) {
-    if (! strncmp(program, "ftree", 6)) {
-      gedcom_warning(_("Enabling compatibility with 'ftree'"));
-      compatibility = C_FTREE;
-    }
-    else if (! strncmp(program, "LIFELINES", 9)) {
-      /* Matches "LIFELINES 3.0.2" */
-      gedcom_warning(_("Enabling compatibility with 'Lifelines'"));
-      compatibility = C_LIFELINES;
-      compat_at = 1;
-    }
-    else {
-      compatibility = 0;
-    }
-  }
-}
-
-int compat_mode(int compat_flags)
-{
-  return (compat_flags & compatibility);
-}
-