1 /* This program is free software; you can redistribute it and/or modify *
2 * it under the terms of the GNU General Public License as published by *
3 * the Free Software Foundation; either version 2 of the License, or *
4 * (at your option) any later version. *
6 (C) 2001 by The Genes Development Team
7 Original author: Peter Verthez (Peter.Verthez@advalvas.be)
13 #include "gedcom_internal.h"
14 #include "interface.h"
16 static Gedcom_rec_start_cb record_start_callback [LAST_REC] = { NULL };
17 static Gedcom_rec_end_cb record_end_callback [LAST_REC] = { NULL };
18 static Gedcom_elt_start_cb element_start_callback[LAST_ELT] = { NULL };
19 static Gedcom_elt_end_cb element_end_callback [LAST_ELT] = { NULL };
20 static Gedcom_def_cb default_cb = NULL;
22 void gedcom_set_default_callback(Gedcom_def_cb func)
27 void gedcom_subscribe_to_record(Gedcom_rec rec,
28 Gedcom_rec_start_cb cb_start,
29 Gedcom_rec_end_cb cb_end)
31 record_start_callback[rec] = cb_start;
32 record_end_callback[rec] = cb_end;
35 void gedcom_subscribe_to_element(Gedcom_elt elt,
36 Gedcom_elt_start_cb cb_start,
37 Gedcom_elt_end_cb cb_end)
39 element_start_callback[elt] = cb_start;
40 element_end_callback[elt] = cb_end;
43 Gedcom_ctxt start_record(Gedcom_rec rec,
44 int level, char *xref, char *tag)
46 Gedcom_rec_start_cb cb = record_start_callback[rec];
48 return (*cb)(level, xref, tag);
53 void end_record(Gedcom_rec rec, Gedcom_ctxt self)
55 Gedcom_rec_end_cb cb = record_end_callback[rec];
60 Gedcom_ctxt start_element(Gedcom_elt elt, Gedcom_ctxt parent,
61 int level, char *tag, char *raw_value,
62 Gedcom_val parsed_value)
64 Gedcom_elt_start_cb cb = element_start_callback[elt];
65 Gedcom_ctxt ctxt = parent;
67 ctxt = (*cb)(parent, level, tag, raw_value, parsed_value);
68 else if (default_cb != NULL)
69 (*default_cb)(parent, level, tag, raw_value);
73 void end_element(Gedcom_elt elt, Gedcom_ctxt parent, Gedcom_ctxt self,
74 Gedcom_val parsed_value)
76 Gedcom_elt_end_cb cb = element_end_callback[elt];
78 (*cb)(parent, self, parsed_value);