-#define _REC_PARAMS_ Gedcom_rec rec, int level, Gedcom_val xref, char *tag, \
- char *raw_value, int parsed_tag, Gedcom_val parsed_value
-
-#define _ELT_PARAMS_ Gedcom_elt elt, Gedcom_ctxt parent, int level, char *tag,\
- char *raw_value, int parsed_tag, Gedcom_val parsed_value
-
-#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); \
- if (! obj->FIELD) { \
- MEMORY_ERROR; \
- return NULL; \
- } \
- } \
- 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); \
- if (! obj->FIELD) { \
- MEMORY_ERROR; \
- return NULL; \
- } \
- } \
- 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); \
- if (! obj->FIELD) { \
- MEMORY_ERROR; \
- return NULL; \
- } \
- } \
- 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); \
- }
-
-#define XREF_LIST_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); \
- struct xref_list *xrl; \
- if (! xr->object) \
- xr->object = (Gedcom_ctxt) FUNC(xr->string); \
- MAKE_CHAIN_ELT(xref_list, obj->FIELD, xrl); \
- xrl->xref = xr; \
- return (Gedcom_ctxt) MAKE_GOM_CTXT(elt, STRUCTTYPE, obj); \
- }
-
-#define NULL_CB(STRUCTTYPE,CB_NAME) \
- Gedcom_ctxt CB_NAME(_ELT_PARAMS_) \
- { \
- struct STRUCTTYPE *obj \
- = SAFE_CTXT_CAST(STRUCTTYPE, (Gom_ctxt)parent); \
- return (Gedcom_ctxt) MAKE_GOM_CTXT(elt, STRUCTTYPE, obj); \
- }