-#define REC_CB(STRUCTTYPE,CB_NAME,FUNC) \
- Gedcom_ctxt CB_NAME(_REC_PARAMS_) \
- { \
- struct xref_value* xr = GEDCOM_XREF_PTR(xref); \
- if (! xr->object) \
- xr->object = (Gedcom_ctxt) FUNC(xr->string); \
- return (Gedcom_ctxt) MAKE_GOM_CTXT(rec, STRUCTTYPE, xr->object); \
- }
-
-#define GET_REC_BY_XREF(STRUCTTYPE,XREF_TYPE,FUNC_NAME) \
- struct STRUCTTYPE *FUNC_NAME(char *xrefstr) \
- { \
- struct xref_value* xr = gedcom_get_by_xref(xrefstr); \
- if (xr && (xr->type == XREF_TYPE) && xr->object) \
- return (struct STRUCTTYPE*)(xr->object); \
- else \
- return NULL; \
- }
-
-#define STRING_CB(STRUCTTYPE,CB_NAME,FIELD) \
- Gedcom_ctxt CB_NAME(_ELT_PARAMS_) \
- { \
- char *str = GEDCOM_STRING(parsed_value); \
- struct STRUCTTYPE *obj \
- = SAFE_CTXT_CAST(STRUCTTYPE, (Gom_ctxt)parent); \
- if (obj) obj->FIELD = strdup(str); \
- return (Gedcom_ctxt) MAKE_GOM_CTXT(elt, STRUCTTYPE, obj); \
- }
-
-#define DATE_CB(STRUCTTYPE,CB_NAME,FIELD) \
- Gedcom_ctxt CB_NAME(_ELT_PARAMS_) \
- { \
- struct date_value dv = GEDCOM_DATE(parsed_value); \
- struct STRUCTTYPE *obj \
- = SAFE_CTXT_CAST(STRUCTTYPE, (Gom_ctxt)parent); \
- if (obj) obj->FIELD = dup_date(dv); \
- return (Gedcom_ctxt) MAKE_GOM_CTXT(elt, STRUCTTYPE, obj); \
- }
-
-#define AGE_CB(STRUCTTYPE,CB_NAME,FIELD) \
- Gedcom_ctxt CB_NAME(_ELT_PARAMS_) \
- { \
- struct age_value age = GEDCOM_AGE(parsed_value); \
- struct STRUCTTYPE *obj \
- = SAFE_CTXT_CAST(STRUCTTYPE, (Gom_ctxt)parent); \
- if (obj) obj->FIELD = dup_age(age); \
- return (Gedcom_ctxt) MAKE_GOM_CTXT(elt, STRUCTTYPE, obj); \
- }
-
-#define XREF_CB(STRUCTTYPE,CB_NAME,FIELD,FUNC) \
- Gedcom_ctxt CB_NAME(_ELT_PARAMS_) \
- { \
- struct xref_value *xr = GEDCOM_XREF_PTR(parsed_value); \
- struct STRUCTTYPE *obj \
- = SAFE_CTXT_CAST(STRUCTTYPE, (Gom_ctxt)parent); \
- if (! xr->object) \
- xr->object = (Gedcom_ctxt) FUNC(xr->string); \
- if (obj) obj->FIELD = xr; \
- return (Gedcom_ctxt) MAKE_GOM_CTXT(elt, STRUCTTYPE, obj); \
- }