-void def_rec_end(Gedcom_rec rec, Gedcom_ctxt self);
-void def_elt_end(Gedcom_elt elt, Gedcom_ctxt parent, Gedcom_ctxt self,
- Gedcom_val parsed_value);
-void set_xref_type(struct xref_value *xr, char* str);
-
-typedef enum {
- WITHOUT_NL,
- WITH_NL
-} NL_TYPE;
-
-char* concat_strings(NL_TYPE type, char *str1, const char *str2);
-struct date_value* dup_date(struct date_value dv);
-struct age_value* dup_age(struct age_value age);
-
-/* Doubly-linked list, but last rec->next is NULL (doesn't go to first rec) */
-#define LINK_CHAIN_ELT(STRUCTTYPE, FIRSTVAL, VAL) \
- { \
- struct STRUCTTYPE *_local_obj = VAL; \
- if (! FIRSTVAL) { \
- VAL->next = NULL; \
- VAL->previous = _local_obj; \
- FIRSTVAL = VAL; \
- } \
- else { \
- VAL->next = NULL; \
- FIRSTVAL->previous->next = VAL; \
- VAL->previous = FIRSTVAL->previous; \
- FIRSTVAL->previous = VAL; \
- } \
- }
-
-#define MAKE_CHAIN_ELT(STRUCTTYPE, FIRSTVAL, VAL) \
- { \
- VAL = (struct STRUCTTYPE*) malloc(sizeof(struct STRUCTTYPE)); \
- memset (VAL, 0, sizeof(struct STRUCTTYPE)); \
- LINK_CHAIN_ELT(STRUCTTYPE, FIRSTVAL, VAL) \
- }
-
-void NULL_DESTROY(void* anything);
-
-#define DESTROY_CHAIN_ELTS(STRUCTTYPE, FIRSTVAL, DESTROYFUNC) \
- { \
- if (FIRSTVAL) { \
- struct STRUCTTYPE *runner, *next; \
- runner = FIRSTVAL; \
- while (runner) { \
- next = runner->next; \
- DESTROYFUNC(runner); \
- SAFE_FREE(runner); \
- runner = next; \
- } \
- } \
- }
-
-#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); \
- }