/* HEAD.SOUR */
head_sour_sect : OPEN DELIM TAG_SOUR mand_line_item
- { set_compatibility($4);
+ { set_compatibility_program($4);
$<ctxt>$ = start_element(ELT_HEAD_SOUR, PARENT,
$1, $3, $4,
GEDCOM_MAKE_STRING(val1, $4));
head_sour_subs
{ CHECK0 }
CLOSE
- { end_element(ELT_HEAD_SOUR, PARENT, $<ctxt>5,
+ { compute_compatibility();
+ end_element(ELT_HEAD_SOUR, PARENT, $<ctxt>5,
GEDCOM_MAKE_NULL(val1)); }
;
;
head_sour_vers_sect : OPEN DELIM TAG_VERS mand_line_item
- { $<ctxt>$ = start_element(ELT_HEAD_SOUR_VERS, PARENT,
+ { set_compatibility_version($4);
+ $<ctxt>$ = start_element(ELT_HEAD_SOUR_VERS, PARENT,
$1, $3, $4,
GEDCOM_MAKE_STRING(val1, $4));
START(VERS, $1, $<ctxt>$)
&& compat_check_551_tag($4.string, &usertag_buffer)) {
$4.string = get_buf_string(&usertag_buffer);
}
+ else if (compat_mode(C_SUBM_COMM) &&
+ compat_check_subm_comm($4.string, get_parenttag(0),
+ &usertag_buffer)) {
+ $4.string = get_buf_string(&usertag_buffer);
+ }
else {
gedcom_error(_("Undefined tag (and not a valid user tag): %s"),
$4);
CLOSE
{ end_element(ELT_USER, PARENT, $<ctxt>7,
GEDCOM_MAKE_NULL(val1));
+ if (compat_mode(C_SUBM_COMM))
+ compat_close_subm_comm();
}
;
user_sects : /* empty */ { }
| user_sects user_sect { }
+ | user_sects gen_sect
+ { if (compat_mode(C_SUBM_COMM)) {
+ }
+ else {
+ gedcom_error(_("Standard tag not allowed in user section"));
+ YYERROR;
+ }
+ }
;
opt_xref : /* empty */ { $$ = NULL; }
;
gen_sect : OPEN DELIM opt_xref anystdtag
- { INVALID_TAG($4.string); }
- opt_value opt_sects CLOSE
- { }
+ { if (compat_mode(C_SUBM_COMM)
+ && compat_check_subm_comm_cont($4.string)) {
+ /* Will pass here */
+ }
+ else {
+ INVALID_TAG($4.string);
+ }
+ }
+ opt_value
+ { if (compat_mode(C_SUBM_COMM)) {
+ $<ctxt>$ = compat_subm_comm_cont_start(PARENT, $6);
+ }
+ }
+ opt_sects CLOSE
+ { if (compat_mode(C_SUBM_COMM))
+ compat_subm_comm_cont_end(PARENT, $<ctxt>7);
+ }
;
gen_rec : gen_rec_top