X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gedcom%2Fgedcom.y;h=a0481851dd4aa3e0e1ba5a2737c6f88d402744f3;hb=4fe12100984a41d439dc9b4138d6cd8df36285f8;hp=872be1271cf9eec23b6adb96334dad6ec01814b1;hpb=e33cdc26ace551aae08fcd71a9f0d460c89b789d;p=gedcom-parse.git diff --git a/gedcom/gedcom.y b/gedcom/gedcom.y index 872be12..a048185 100644 --- a/gedcom/gedcom.y +++ b/gedcom/gedcom.y @@ -1,5 +1,5 @@ /* Parser for Gedcom. - Copyright (C) 2001 The Genes Development Team + Copyright (C) 2001, 2002 The Genes Development Team This file is part of the Gedcom parser library. Contributed by Peter Verthez , 2001. @@ -188,13 +188,19 @@ int compat_mode(int flags); yyerrok; \ } \ } -#define START(PARENTTAG,PARENTCTXT) \ - { ++count_level; \ - set_parenttag(#PARENTTAG); \ - set_parentctxt(PARENTCTXT); \ +#define START1(PARENTTAG) \ + { set_parenttag(#PARENTTAG); \ + } +#define START2(PARENTCTXT) \ + { set_parentctxt(PARENTCTXT); \ + ++count_level; \ push_countarray(); \ } -#define PARENT \ +#define START(PARENTTAG,PARENTCTXT) \ + { START1(PARENTTAG); \ + START2(PARENTCTXT); \ + } +#define PARENT \ get_parentctxt() #define CHK(TAG) \ { if (!check_occurrence(TAG_##TAG)) { \ @@ -243,6 +249,7 @@ int compat_mode(int flags); %union { int number; char *string; + struct tag_struct tag; Gedcom_ctxt ctxt; } @@ -256,139 +263,144 @@ int compat_mode(int flags); %token DELIM %token ANYCHAR %token POINTER -%token USERTAG -%token TAG_ABBR -%token TAG_ADDR -%token TAG_ADR1 -%token TAG_ADR2 -%token TAG_ADOP -%token TAG_AFN -%token TAG_AGE -%token TAG_AGNC -%token TAG_ALIA -%token TAG_ANCE -%token TAG_ANCI -%token TAG_ANUL -%token TAG_ASSO -%token TAG_AUTH -%token TAG_BAPL -%token TAG_BAPM -%token TAG_BARM -%token TAG_BASM -%token TAG_BIRT -%token TAG_BLES -%token TAG_BLOB -%token TAG_BURI -%token TAG_CALN -%token TAG_CAST -%token TAG_CAUS -%token TAG_CENS -%token TAG_CHAN -%token TAG_CHAR -%token TAG_CHIL -%token TAG_CHR -%token TAG_CHRA -%token TAG_CITY -%token TAG_CONC -%token TAG_CONF -%token TAG_CONL -%token TAG_CONT -%token TAG_COPR -%token TAG_CORP -%token TAG_CREM -%token TAG_CTRY -%token TAG_DATA -%token TAG_DATE -%token TAG_DEAT -%token TAG_DESC -%token TAG_DESI -%token TAG_DEST -%token TAG_DIV -%token TAG_DIVF -%token TAG_DSCR -%token TAG_EDUC -%token TAG_EMIG -%token TAG_ENDL -%token TAG_ENGA -%token TAG_EVEN -%token TAG_FAM -%token TAG_FAMC -%token TAG_FAMF -%token TAG_FAMS -%token TAG_FCOM -%token TAG_FILE -%token TAG_FORM -%token TAG_GEDC -%token TAG_GIVN -%token TAG_GRAD -%token TAG_HEAD -%token TAG_HUSB -%token TAG_IDNO -%token TAG_IMMI -%token TAG_INDI -%token TAG_LANG -%token TAG_LEGA -%token TAG_MARB -%token TAG_MARC -%token TAG_MARL -%token TAG_MARR -%token TAG_MARS -%token TAG_MEDI -%token TAG_NAME -%token TAG_NATI -%token TAG_NATU -%token TAG_NCHI -%token TAG_NICK -%token TAG_NMR -%token TAG_NOTE -%token TAG_NPFX -%token TAG_NSFX -%token TAG_OBJE -%token TAG_OCCU -%token TAG_ORDI -%token TAG_ORDN -%token TAG_PAGE -%token TAG_PEDI -%token TAG_PHON -%token TAG_PLAC -%token TAG_POST -%token TAG_PROB -%token TAG_PROP -%token TAG_PUBL -%token TAG_QUAY -%token TAG_REFN -%token TAG_RELA -%token TAG_RELI -%token TAG_REPO -%token TAG_RESI -%token TAG_RESN -%token TAG_RETI -%token TAG_RFN -%token TAG_RIN -%token TAG_ROLE -%token TAG_SEX -%token TAG_SLGC -%token TAG_SLGS -%token TAG_SOUR -%token TAG_SPFX -%token TAG_SSN -%token TAG_STAE -%token TAG_STAT -%token TAG_SUBM -%token TAG_SUBN -%token TAG_SURN -%token TAG_TEMP -%token TAG_TEXT -%token TAG_TIME -%token TAG_TITL -%token TAG_TRLR -%token TAG_TYPE -%token TAG_VERS -%token TAG_WIFE -%token TAG_WILL - -%type anystdtag -%type anytoptag +%token USERTAG +%token TAG_ABBR +%token TAG_ADDR +%token TAG_ADR1 +%token TAG_ADR2 +%token TAG_ADOP +%token TAG_AFN +%token TAG_AGE +%token TAG_AGNC +%token TAG_ALIA +%token TAG_ANCE +%token TAG_ANCI +%token TAG_ANUL +%token TAG_ASSO +%token TAG_AUTH +%token TAG_BAPL +%token TAG_BAPM +%token TAG_BARM +%token TAG_BASM +%token TAG_BIRT +%token TAG_BLES +%token TAG_BLOB +%token TAG_BURI +%token TAG_CALN +%token TAG_CAST +%token TAG_CAUS +%token TAG_CENS +%token TAG_CHAN +%token TAG_CHAR +%token TAG_CHIL +%token TAG_CHR +%token TAG_CHRA +%token TAG_CITY +%token TAG_CONC +%token TAG_CONF +%token TAG_CONL +%token TAG_CONT +%token TAG_COPR +%token TAG_CORP +%token TAG_CREM +%token TAG_CTRY +%token TAG_DATA +%token TAG_DATE +%token TAG_DEAT +%token TAG_DESC +%token TAG_DESI +%token TAG_DEST +%token TAG_DIV +%token TAG_DIVF +%token TAG_DSCR +%token TAG_EDUC +%token TAG_EMIG +%token TAG_ENDL +%token TAG_ENGA +%token TAG_EVEN +%token TAG_FAM +%token TAG_FAMC +%token TAG_FAMF +%token TAG_FAMS +%token TAG_FCOM +%token TAG_FILE +%token TAG_FORM +%token TAG_GEDC +%token TAG_GIVN +%token TAG_GRAD +%token TAG_HEAD +%token TAG_HUSB +%token TAG_IDNO +%token TAG_IMMI +%token TAG_INDI +%token TAG_LANG +%token TAG_LEGA +%token TAG_MARB +%token TAG_MARC +%token TAG_MARL +%token TAG_MARR +%token TAG_MARS +%token TAG_MEDI +%token TAG_NAME +%token TAG_NATI +%token TAG_NATU +%token TAG_NCHI +%token TAG_NICK +%token TAG_NMR +%token TAG_NOTE +%token TAG_NPFX +%token TAG_NSFX +%token TAG_OBJE +%token TAG_OCCU +%token TAG_ORDI +%token TAG_ORDN +%token TAG_PAGE +%token TAG_PEDI +%token TAG_PHON +%token TAG_PLAC +%token TAG_POST +%token TAG_PROB +%token TAG_PROP +%token TAG_PUBL +%token TAG_QUAY +%token TAG_REFN +%token TAG_RELA +%token TAG_RELI +%token TAG_REPO +%token TAG_RESI +%token TAG_RESN +%token TAG_RETI +%token TAG_RFN +%token TAG_RIN +%token TAG_ROLE +%token TAG_SEX +%token TAG_SLGC +%token TAG_SLGS +%token TAG_SOUR +%token TAG_SPFX +%token TAG_SSN +%token TAG_STAE +%token TAG_STAT +%token TAG_SUBM +%token TAG_SUBN +%token TAG_SURN +%token TAG_TEMP +%token TAG_TEXT +%token TAG_TIME +%token TAG_TITL +%token TAG_TRLR +%token TAG_TYPE +%token TAG_VERS +%token TAG_WIFE +%token TAG_WILL + +%type anystdtag +%type anytoptag +%type fam_event_tag +%type indiv_attr_tag +%type indiv_birt_tag +%type indiv_gen_tag +%type lio_bapl_tag %type line_item %type line_value %type mand_line_item @@ -398,11 +410,6 @@ int compat_mode(int flags); %type opt_xref %type opt_value %type opt_line_item -%type fam_event_tag -%type indiv_attr_tag -%type indiv_birt_tag -%type indiv_gen_tag -%type lio_bapl_tag %type head_sect %% @@ -430,7 +437,8 @@ record : fam_rec /**** Header ****/ /*********************************************************************/ head_sect : OPEN DELIM TAG_HEAD - { $$ = start_record(REC_HEAD, $1, GEDCOM_MAKE_NULL(), $3); + { $$ = start_record(REC_HEAD, $1, GEDCOM_MAKE_NULL(), $3, + NULL, GEDCOM_MAKE_NULL()); START(HEAD, $$) } head_subs { if (compat_mode(C_FTREE)) @@ -514,7 +522,7 @@ head_sour_name_sect : OPEN DELIM TAG_NAME mand_line_item ; head_sour_corp_sect : OPEN DELIM TAG_CORP mand_line_item { $$ = start_element(ELT_HEAD_SOUR_CORP, PARENT, - $1, $3, $4, + $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(CORP, $$) } @@ -536,7 +544,7 @@ head_sour_corp_sub : addr_struc_sub /* 0:1 */ head_sour_data_sect : OPEN DELIM TAG_DATA mand_line_item { $$ = start_element(ELT_HEAD_SOUR_DATA, PARENT, - $1, $3, $4, + $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(DATA, $$) } @@ -560,7 +568,7 @@ head_sour_data_sub : head_sour_data_date_sect { OCCUR2(DATE, 0, 1) } head_sour_data_date_sect : OPEN DELIM TAG_DATE mand_line_item { struct date_value dv = gedcom_parse_date($4); $$ = start_element(ELT_HEAD_SOUR_DATA_DATE, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_DATE(dv)); START(DATE, $$) } @@ -573,7 +581,7 @@ head_sour_data_date_sect : OPEN DELIM TAG_DATE mand_line_item ; head_sour_data_copr_sect : OPEN DELIM TAG_COPR mand_line_item { $$ = start_element(ELT_HEAD_SOUR_DATA_COPR, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(COPR, $$) } @@ -588,7 +596,7 @@ head_sour_data_copr_sect : OPEN DELIM TAG_COPR mand_line_item /* HEAD.DEST */ head_dest_sect : OPEN DELIM TAG_DEST mand_line_item { $$ = start_element(ELT_HEAD_DEST, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(DEST, $$) } @@ -604,7 +612,7 @@ head_dest_sect : OPEN DELIM TAG_DEST mand_line_item head_date_sect : OPEN DELIM TAG_DATE mand_line_item { struct date_value dv = gedcom_parse_date($4); $$ = start_element(ELT_HEAD_DATE, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_DATE(dv)); START(DATE, $$) } @@ -626,7 +634,7 @@ head_date_sub : head_date_time_sect { OCCUR2(TIME, 0, 1) } head_date_time_sect : OPEN DELIM TAG_TIME mand_line_item { $$ = start_element(ELT_HEAD_DATE_TIME, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(TIME, $$) } @@ -641,7 +649,7 @@ head_date_time_sect : OPEN DELIM TAG_TIME mand_line_item /* HEAD.SUBM */ head_subm_sect : OPEN DELIM TAG_SUBM mand_pointer { $$ = start_element(ELT_HEAD_SUBM, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(SUBM, $$) } @@ -655,7 +663,7 @@ head_subm_sect : OPEN DELIM TAG_SUBM mand_pointer /* HEAD.SUBN */ head_subn_sect : OPEN DELIM TAG_SUBN mand_pointer { $$ = start_element(ELT_HEAD_SUBN, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(SUBN, $$) } @@ -669,7 +677,7 @@ head_subn_sect : OPEN DELIM TAG_SUBN mand_pointer /* HEAD.FILE */ head_file_sect : OPEN DELIM TAG_FILE mand_line_item { $$ = start_element(ELT_HEAD_FILE, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(FILE, $$) } @@ -682,7 +690,7 @@ head_file_sect : OPEN DELIM TAG_FILE mand_line_item /* HEAD.COPR */ head_copr_sect : OPEN DELIM TAG_COPR mand_line_item { $$ = start_element(ELT_HEAD_COPR, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(COPR, $$) } @@ -716,7 +724,7 @@ head_gedc_sub : head_gedc_vers_sect { OCCUR2(VERS, 1, 1) } ; head_gedc_vers_sect : OPEN DELIM TAG_VERS mand_line_item { $$ = start_element(ELT_HEAD_GEDC_VERS, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(VERS, $$) } @@ -729,7 +737,7 @@ head_gedc_vers_sect : OPEN DELIM TAG_VERS mand_line_item ; head_gedc_form_sect : OPEN DELIM TAG_FORM mand_line_item { $$ = start_element(ELT_HEAD_GEDC_FORM, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(FORM, $$) } @@ -745,7 +753,7 @@ head_gedc_form_sect : OPEN DELIM TAG_FORM mand_line_item head_char_sect : OPEN DELIM TAG_CHAR mand_line_item { if (open_conv_to_internal($4) == 0) YYERROR; $$ = start_element(ELT_HEAD_CHAR, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(CHAR, $$) } @@ -765,7 +773,7 @@ head_char_sub : head_char_vers_sect { OCCUR2(VERS, 0, 1) } ; head_char_vers_sect : OPEN DELIM TAG_VERS mand_line_item { $$ = start_element(ELT_HEAD_CHAR_VERS, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(VERS, $$) } @@ -780,7 +788,7 @@ head_char_vers_sect : OPEN DELIM TAG_VERS mand_line_item /* HEAD.LANG */ head_lang_sect : OPEN DELIM TAG_LANG mand_line_item { $$ = start_element(ELT_HEAD_LANG, - PARENT, $1, $3, $4, + PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); START(LANG, $$) } @@ -859,7 +867,8 @@ trlr_sect : OPEN DELIM TAG_TRLR CLOSE { } /*********************************************************************/ fam_rec : OPEN DELIM POINTER DELIM TAG_FAM { $$ = start_record(REC_FAM, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + NULL, GEDCOM_MAKE_NULL()); START(FAM, $$) } fam_subs { CHECK0 } @@ -961,7 +970,8 @@ fam_subm_sect : OPEN DELIM TAG_SUBM mand_pointer /*********************************************************************/ indiv_rec : OPEN DELIM POINTER DELIM TAG_INDI { $$ = start_record(REC_INDI, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + NULL, GEDCOM_MAKE_NULL()); START(INDI, $$) } indi_subs { CHECK0 } @@ -1120,7 +1130,8 @@ ftree_addr_sect : OPEN DELIM TAG_ADDR opt_line_item /*********************************************************************/ multim_rec : OPEN DELIM POINTER DELIM TAG_OBJE { $$ = start_record(REC_OBJE, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + NULL, GEDCOM_MAKE_NULL()); START(OBJE, $$) } obje_subs { CHECK2(FORM, BLOB) } @@ -1225,12 +1236,13 @@ obje_obje_sect : OPEN DELIM TAG_OBJE mand_pointer /*********************************************************************/ note_rec : OPEN DELIM POINTER DELIM TAG_NOTE note_line_item { $$ = start_record(REC_NOTE, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + $6, GEDCOM_MAKE_STRING($6)); START(NOTE, $$) } note_subs { CHECK0 } CLOSE - { end_record(REC_NOTE, $6); } + { end_record(REC_NOTE, $7); } ; note_line_item : /* empty */ @@ -1259,7 +1271,8 @@ note_sub : continuation_sub /* 0:M */ /*********************************************************************/ repos_rec : OPEN DELIM POINTER DELIM TAG_REPO { $$ = start_record(REC_REPO, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + NULL, GEDCOM_MAKE_NULL()); START(REPO, $$) } repo_subs { CHECK0 } @@ -1298,7 +1311,8 @@ repo_name_sect : OPEN DELIM TAG_NAME mand_line_item /*********************************************************************/ source_rec : OPEN DELIM POINTER DELIM TAG_SOUR { $$ = start_record(REC_SOUR, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + NULL, GEDCOM_MAKE_NULL()); START(SOUR, $$) } sour_subs { CHECK0 } @@ -1521,7 +1535,8 @@ sour_text_sub : continuation_sub /* 0:M */ /*********************************************************************/ submis_rec : OPEN DELIM POINTER DELIM TAG_SUBN { $$ = start_record(REC_SUBN, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + NULL, GEDCOM_MAKE_NULL()); START(SUBN, $$) } subn_subs { CHECK0 } @@ -1646,7 +1661,8 @@ subn_rin_sect : OPEN DELIM TAG_RIN mand_line_item /*********************************************************************/ submit_rec : OPEN DELIM POINTER DELIM TAG_SUBM { $$ = start_record(REC_SUBM, - $1, GEDCOM_MAKE_STRING($3), $5); + $1, GEDCOM_MAKE_STRING($3), $5, + NULL, GEDCOM_MAKE_NULL()); START(SUBM, $$) } subm_subs { CHECK1(NAME) } @@ -2132,8 +2148,7 @@ fam_event_sect : OPEN DELIM fam_event_tag opt_value $$ = start_element(ELT_SUB_FAM_EVT, PARENT, $1, $3, $4, GEDCOM_MAKE_NULL_OR_STRING($4)); - /* set the parent context separately from START here */ - set_parentctxt($$); + START2($$); } fam_event_subs { CHECK0 } @@ -2142,16 +2157,16 @@ fam_event_sect : OPEN DELIM fam_event_tag opt_value } ; -fam_event_tag : TAG_ANUL { $$ = $1; START(ANUL, NULL) } - | TAG_CENS { $$ = $1; START(CENS, NULL) } - | TAG_DIV { $$ = $1; START(DIV, NULL) } - | TAG_DIVF { $$ = $1; START(DIVF, NULL) } - | TAG_ENGA { $$ = $1; START(ENGA, NULL) } - | TAG_MARR { $$ = $1; START(MARR, NULL) } - | TAG_MARB { $$ = $1; START(MARB, NULL) } - | TAG_MARC { $$ = $1; START(MARC, NULL) } - | TAG_MARL { $$ = $1; START(MARL, NULL) } - | TAG_MARS { $$ = $1; START(MARS, NULL) } +fam_event_tag : TAG_ANUL { $$ = $1; START1(ANUL) } + | TAG_CENS { $$ = $1; START1(CENS) } + | TAG_DIV { $$ = $1; START1(DIV) } + | TAG_DIVF { $$ = $1; START1(DIVF) } + | TAG_ENGA { $$ = $1; START1(ENGA) } + | TAG_MARR { $$ = $1; START1(MARR) } + | TAG_MARB { $$ = $1; START1(MARB) } + | TAG_MARC { $$ = $1; START1(MARC) } + | TAG_MARL { $$ = $1; START1(MARL) } + | TAG_MARS { $$ = $1; START1(MARS) } ; fam_event_subs : /* empty */ @@ -2302,8 +2317,7 @@ indiv_attr_sect : OPEN DELIM indiv_attr_tag mand_line_item { $$ = start_element(ELT_SUB_INDIV_ATTR, PARENT, $1, $3, $4, GEDCOM_MAKE_STRING($4)); - /* set the parent context separately from START here */ - set_parentctxt($$); + START2($$); } indiv_attr_event_subs { CHECK0 } @@ -2311,18 +2325,18 @@ indiv_attr_sect : OPEN DELIM indiv_attr_tag mand_line_item { end_element(ELT_SUB_INDIV_ATTR, PARENT, $5, NULL); } -indiv_attr_tag : TAG_CAST { $$ = $1; START(CAST, NULL) } - | TAG_DSCR { $$ = $1; START(DSCR, NULL) } - | TAG_EDUC { $$ = $1; START(EDUC, NULL) } - | TAG_IDNO { $$ = $1; START(IDNO, NULL) } - | TAG_NATI { $$ = $1; START(NATI, NULL) } - | TAG_NCHI { $$ = $1; START(NCHI, NULL) } - | TAG_NMR { $$ = $1; START(NMR, NULL) } - | TAG_OCCU { $$ = $1; START(OCCU, NULL) } - | TAG_PROP { $$ = $1; START(PROP, NULL) } - | TAG_RELI { $$ = $1; START(RELI, NULL) } - | TAG_SSN { $$ = $1; START(SSN, NULL) } - | TAG_TITL { $$ = $1; START(TITL, NULL) } +indiv_attr_tag : TAG_CAST { $$ = $1; START1(CAST) } + | TAG_DSCR { $$ = $1; START1(DSCR) } + | TAG_EDUC { $$ = $1; START1(EDUC) } + | TAG_IDNO { $$ = $1; START1(IDNO) } + | TAG_NATI { $$ = $1; START1(NATI) } + | TAG_NCHI { $$ = $1; START1(NCHI) } + | TAG_NMR { $$ = $1; START1(NMR) } + | TAG_OCCU { $$ = $1; START1(OCCU) } + | TAG_PROP { $$ = $1; START1(PROP) } + | TAG_RELI { $$ = $1; START1(RELI) } + | TAG_SSN { $$ = $1; START1(SSN) } + | TAG_TITL { $$ = $1; START1(TITL) } indiv_resi_sect : OPEN DELIM TAG_RESI { $$ = start_element(ELT_SUB_INDIV_RESI, @@ -2356,8 +2370,7 @@ indiv_birt_sect : OPEN DELIM indiv_birt_tag opt_value { $$ = start_element(ELT_SUB_INDIV_BIRT, PARENT, $1, $3, $4, GEDCOM_MAKE_NULL_OR_STRING($4)); - /* set the parent context separately from START here */ - set_parentctxt($$); + START2($$); } indiv_birt_subs { CHECK0 } @@ -2366,8 +2379,8 @@ indiv_birt_sect : OPEN DELIM indiv_birt_tag opt_value } ; -indiv_birt_tag : TAG_BIRT { $$ = $1; START(BIRT, NULL) } - | TAG_CHR { $$ = $1; START(CHR, NULL) } +indiv_birt_tag : TAG_BIRT { $$ = $1; START1(BIRT) } + | TAG_CHR { $$ = $1; START1(CHR) } ; indiv_birt_subs : /* empty */ @@ -2397,8 +2410,7 @@ indiv_gen_sect : OPEN DELIM indiv_gen_tag opt_value { $$ = start_element(ELT_SUB_INDIV_GEN, PARENT, $1, $3, $4, GEDCOM_MAKE_NULL_OR_STRING($4)); - /* set the parent context separately from START here */ - set_parentctxt($$); + START2($$); } indiv_gen_subs { CHECK0 } @@ -2407,25 +2419,25 @@ indiv_gen_sect : OPEN DELIM indiv_gen_tag opt_value } ; -indiv_gen_tag : TAG_DEAT { $$ = $1; START(DEAT, NULL) } - | TAG_BURI { $$ = $1; START(BURI, NULL) } - | TAG_CREM { $$ = $1; START(CREM, NULL) } - | TAG_BAPM { $$ = $1; START(BAPM, NULL) } - | TAG_BARM { $$ = $1; START(BARM, NULL) } - | TAG_BASM { $$ = $1; START(BASM, NULL) } - | TAG_BLES { $$ = $1; START(BLES, NULL) } - | TAG_CHRA { $$ = $1; START(CHRA, NULL) } - | TAG_CONF { $$ = $1; START(CONF, NULL) } - | TAG_FCOM { $$ = $1; START(FCOM, NULL) } - | TAG_ORDN { $$ = $1; START(ORDN, NULL) } - | TAG_NATU { $$ = $1; START(NATU, NULL) } - | TAG_EMIG { $$ = $1; START(EMIG, NULL) } - | TAG_IMMI { $$ = $1; START(IMMI, NULL) } - | TAG_CENS { $$ = $1; START(CENS, NULL) } - | TAG_PROB { $$ = $1; START(PROB, NULL) } - | TAG_WILL { $$ = $1; START(WILL, NULL) } - | TAG_GRAD { $$ = $1; START(GRAD, NULL) } - | TAG_RETI { $$ = $1; START(RETI, NULL) } +indiv_gen_tag : TAG_DEAT { $$ = $1; START1(DEAT) } + | TAG_BURI { $$ = $1; START1(BURI) } + | TAG_CREM { $$ = $1; START1(CREM) } + | TAG_BAPM { $$ = $1; START1(BAPM) } + | TAG_BARM { $$ = $1; START1(BARM) } + | TAG_BASM { $$ = $1; START1(BASM) } + | TAG_BLES { $$ = $1; START1(BLES) } + | TAG_CHRA { $$ = $1; START1(CHRA) } + | TAG_CONF { $$ = $1; START1(CONF) } + | TAG_FCOM { $$ = $1; START1(FCOM) } + | TAG_ORDN { $$ = $1; START1(ORDN) } + | TAG_NATU { $$ = $1; START1(NATU) } + | TAG_EMIG { $$ = $1; START1(EMIG) } + | TAG_IMMI { $$ = $1; START1(IMMI) } + | TAG_CENS { $$ = $1; START1(CENS) } + | TAG_PROB { $$ = $1; START1(PROB) } + | TAG_WILL { $$ = $1; START1(WILL) } + | TAG_GRAD { $$ = $1; START1(GRAD) } + | TAG_RETI { $$ = $1; START1(RETI) } ; indiv_gen_subs : /* empty */ @@ -2513,8 +2525,7 @@ lio_bapl_sect : OPEN DELIM lio_bapl_tag { $$ = start_element(ELT_SUB_LIO_BAPL, PARENT, $1, $3, NULL, GEDCOM_MAKE_NULL()); - /* set the parent context separately from START here */ - set_parentctxt($$); + START2($$); } lio_bapl_subs { CHECK0 } @@ -2523,9 +2534,9 @@ lio_bapl_sect : OPEN DELIM lio_bapl_tag } ; -lio_bapl_tag : TAG_BAPL { $$ = $1; START(BAPL, NULL) } - | TAG_CONL { $$ = $1; START(CONL, NULL) } - | TAG_ENDL { $$ = $1; START(ENDL, NULL) } +lio_bapl_tag : TAG_BAPL { $$ = $1; START1(BAPL) } + | TAG_CONL { $$ = $1; START1(CONL) } + | TAG_ENDL { $$ = $1; START1(ENDL) } ; lio_bapl_subs : /* empty */ @@ -3279,8 +3290,8 @@ no_std_rec : user_rec /* 0:M */ | error error_subs CLOSE { HANDLE_ERROR } ; -user_rec : OPEN DELIM opt_xref USERTAG - { if ($4[0] != '_') { +user_rec : OPEN DELIM opt_xref USERTAG + { if ($4.string[0] != '_') { gedcom_error(_("Undefined tag (and not a valid user tag): %s"), $4); YYERROR; @@ -3288,7 +3299,8 @@ user_rec : OPEN DELIM opt_xref USERTAG } opt_value { $$ = start_record(REC_USER, - $1, GEDCOM_MAKE_STRING($3), $4); + $1, GEDCOM_MAKE_NULL_OR_STRING($3), $4, + $6, GEDCOM_MAKE_NULL_OR_STRING($6)); START($4, $$) } user_sects @@ -3296,8 +3308,8 @@ user_rec : OPEN DELIM opt_xref USERTAG CLOSE { end_record(REC_USER, $7); } ; -user_sect : OPEN DELIM opt_xref USERTAG - { if ($4[0] != '_') { +user_sect : OPEN DELIM opt_xref USERTAG + { if ($4.string[0] != '_') { gedcom_error(_("Undefined tag (and not a valid user tag): %s"), $4); YYERROR; @@ -3342,7 +3354,8 @@ mand_line_item : /* empty */ { gedcom_error(_("Missing value")); YYERROR; } ; opt_line_item : /* empty */ { } - | DELIM line_item { } + | DELIM line_item { gedcom_debug_print("==Val: %s==", $2); + $$ = $2; } ; line_item : anychar { size_t i; @@ -3588,12 +3601,12 @@ void push_countarray() void set_parenttag(char* tag) { - strncpy(tag_stack[count_level], tag, MAXSTDTAGLEN+1); + strncpy(tag_stack[count_level+1], tag, MAXSTDTAGLEN+1); } void set_parentctxt(Gedcom_ctxt ctxt) { - ctxt_stack[count_level] = ctxt; + ctxt_stack[count_level+1] = ctxt; } char* get_parenttag()