char *line_item_buf_ptr;
enum _COMPAT {
- C_FTREE = 0x01
+ C_FTREE = 0x01,
+ C_LIFELINES = 0x02
};
/* These are defined at the bottom of the file */
}
%token_table
-%expect 303
+%expect 304
%token <string> BADTOKEN
%token <number> OPEN
file : head_sect records trlr_sect
{ if (fail == 1) YYABORT; }
+ | error
+ { }
;
records : /* empty */
CHECK3(SOUR, GEDC, CHAR);
compat_generate_submitter_link($<ctxt>4);
}
+ else if (compat_mode(C_LIFELINES)) {
+ CHECK1(SOUR);
+ compat_generate_submitter_link($<ctxt>4);
+ compat_generate_gedcom($<ctxt>4);
+ if (compat_generate_char($<ctxt>4)) YYABORT;
+ }
else
CHECK4(SOUR, SUBM, GEDC, CHAR)
}
CLOSE
{ end_record(REC_HEAD, $<ctxt>4);
- if (compat_mode(C_FTREE))
+ if (compat_mode(C_FTREE | C_LIFELINES))
compat_generate_submitter();
}
;
head_sub : head_sour_sect { OCCUR2(SOUR, 1, 1) }
| head_dest_sect { OCCUR2(DEST, 0, 1) }
| head_date_sect { OCCUR2(DATE, 0, 1) }
+ | head_time_sect { if (!compat_mode(C_LIFELINES))
+ INVALID_TAG("TIME");
+ OCCUR2(TIME, 0, 1) }
| head_subm_sect { OCCUR2(SUBM, 1, 1) }
| head_subn_sect { OCCUR2(SUBN, 0, 1) }
| head_file_sect { OCCUR2(FILE, 0, 1) }
}
;
+/* HEAD.TIME (Only for 'Lifelines' compatibility) */
+/* Just ignore the time... */
+head_time_sect : OPEN DELIM TAG_TIME opt_line_item
+ { }
+ CLOSE
+ ;
+
/* HEAD.SUBM */
head_subm_sect : OPEN DELIM TAG_SUBM mand_pointer
{ struct xref_value *xr = gedcom_parse_xref($4, XREF_USED,
$$ = $2; }
;
-mand_line_item : /* empty */ { gedcom_error(_("Missing value")); YYERROR; }
+mand_line_item : /* empty */
+ { if (compat_mode(C_LIFELINES)) {
+ /* Lifelines tends to not care about mandatory values */
+ gedcom_debug_print("==Val: ==");
+ $$ = "";
+ }
+ else {
+ gedcom_error(_("Missing value")); YYERROR;
+ }
+ }
| DELIM line_item { gedcom_debug_print("==Val: %s==", $2);
$$ = $2; }
;
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;
}