X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Faddress.c;h=ed2ae35a41d70cc4ac452fa215e138ff4a14ab08;hb=5b045164f4a11b1f4d709820e784e1ca77b61b3f;hp=f8972e616f73f7dc290a728bfaf496ba5fcc733f;hpb=bdf47fdee469d5a1d7ddfd06a0e4b26f3b40b0f4;p=gedcom-parse.git diff --git a/gom/address.c b/gom/address.c index f8972e6..ed2ae35 100644 --- a/gom/address.c +++ b/gom/address.c @@ -45,61 +45,61 @@ Gedcom_ctxt sub_addr_start(_ELT_PARAMS_) if (!addr) MEMORY_ERROR; else { - char *str = GEDCOM_STRING(parsed_value); memset (addr, 0, sizeof(struct address)); - addr->full_label = strdup(str); - - if (! addr->full_label) { - MEMORY_ERROR; - free(addr); - } - else { - switch (ctxt->ctxt_type) { - case ELT_HEAD_SOUR_CORP: - header_add_address(ctxt, addr); break; - case ELT_SUB_FAM_EVT: - case ELT_SUB_FAM_EVT_EVEN: - case ELT_SUB_INDIV_ATTR: - case ELT_SUB_INDIV_RESI: - case ELT_SUB_INDIV_BIRT: - case ELT_SUB_INDIV_GEN: - case ELT_SUB_INDIV_ADOP: - case ELT_SUB_INDIV_EVEN: - event_add_address(ctxt, addr); break; - case REC_REPO: - repository_add_address(ctxt, addr); break; - case REC_SUBM: - submitter_add_address(ctxt, addr); break; - default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); - } - result = MAKE_GOM_CTXT(elt, address, addr); + switch (ctxt->ctxt_type) { + case ELT_HEAD_SOUR_CORP: + header_add_address(ctxt, addr); break; + case ELT_SUB_FAM_EVT: + case ELT_SUB_FAM_EVT_EVEN: + case ELT_SUB_INDIV_ATTR: + case ELT_SUB_INDIV_RESI: + case ELT_SUB_INDIV_BIRT: + case ELT_SUB_INDIV_GEN: + case ELT_SUB_INDIV_ADOP: + case ELT_SUB_INDIV_EVEN: + event_add_address(ctxt, addr); break; + case REC_REPO: + repository_add_address(ctxt, addr); break; + case REC_SUBM: + submitter_add_address(ctxt, addr); break; + default: + UNEXPECTED_CONTEXT(ctxt->ctxt_type); } + result = MAKE_GOM_CTXT(elt, address, addr); } } return (Gedcom_ctxt)result; } -Gedcom_ctxt sub_addr_cont_start(_ELT_PARAMS_) +void sub_addr_end(_ELT_END_PARAMS_) { - Gom_ctxt ctxt = (Gom_ctxt)parent; - Gom_ctxt result = NULL; + Gom_ctxt ctxt = (Gom_ctxt)self; + if (! ctxt) NO_CONTEXT; else { struct address *addr = SAFE_CTXT_CAST(address, ctxt); if (addr) { char *str = GEDCOM_STRING(parsed_value); - char *newvalue = concat_strings (WITH_NL, addr->full_label, str); + char *newvalue = strdup(str); if (! newvalue) MEMORY_ERROR; - else { + else addr->full_label = newvalue; - result = MAKE_GOM_CTXT(elt, address, addr); - } } } +} + +Gedcom_ctxt sub_addr_cont_start(_ELT_PARAMS_) +{ + Gom_ctxt ctxt = (Gom_ctxt)parent; + Gom_ctxt result = NULL; + if (! ctxt) + NO_CONTEXT; + else { + result = make_gom_ctxt(elt, ctxt->ctxt_type, ctxt->ctxt_ptr); + } return (Gedcom_ctxt)result; } @@ -144,7 +144,7 @@ Gedcom_ctxt sub_phon_start(_ELT_PARAMS_) void address_subscribe() { - gedcom_subscribe_to_element(ELT_SUB_ADDR, sub_addr_start, def_elt_end); + gedcom_subscribe_to_element(ELT_SUB_ADDR, sub_addr_start, sub_addr_end); gedcom_subscribe_to_element(ELT_SUB_ADDR_CONT, sub_addr_cont_start, def_elt_end); gedcom_subscribe_to_element(ELT_SUB_ADDR_ADR1,