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 "interface.h"
15 static Gedcom_rec_start_cb record_start_callback [LAST_REC] = { NULL };
16 static Gedcom_rec_end_cb record_end_callback [LAST_REC] = { NULL };
17 static Gedcom_elt_start_cb element_start_callback[LAST_ELT] = { NULL };
18 static Gedcom_elt_end_cb element_end_callback [LAST_ELT] = { NULL };
19 static Gedcom_def_cb default_cb = NULL;
21 void gedcom_set_default_callback(Gedcom_def_cb func)
26 void gedcom_subscribe_to_record(Gedcom_rec rec,
27 Gedcom_rec_start_cb cb_start,
28 Gedcom_rec_end_cb cb_end)
30 record_start_callback[rec] = cb_start;
31 record_end_callback[rec] = cb_end;
34 void gedcom_subscribe_to_element(Gedcom_elt elt,
35 Gedcom_elt_start_cb cb_start,
36 Gedcom_elt_end_cb cb_end)
38 element_start_callback[elt] = cb_start;
39 element_end_callback[elt] = cb_end;
42 Gedcom_ctxt start_record(Gedcom_rec rec,
43 int level, char *xref, char *tag)
45 Gedcom_rec_start_cb cb = record_start_callback[rec];
47 return (*cb)(level, xref, tag);
52 void end_record(Gedcom_rec rec, Gedcom_ctxt self)
54 Gedcom_rec_end_cb cb = record_end_callback[rec];
59 Gedcom_ctxt start_element(Gedcom_elt elt, Gedcom_ctxt parent,
60 int level, char *tag, char *raw_value,
61 Gedcom_val parsed_value)
63 Gedcom_elt_start_cb cb = element_start_callback[elt];
64 Gedcom_ctxt ctxt = parent;
66 ctxt = (*cb)(parent, level, tag, raw_value, parsed_value);
67 else if (default_cb != NULL)
68 (*default_cb)(parent, level, tag, raw_value);
72 void end_element(Gedcom_elt elt, Gedcom_ctxt parent, Gedcom_ctxt self,
73 Gedcom_val parsed_value)
75 Gedcom_elt_end_cb cb = element_end_callback[elt];
77 (*cb)(parent, self, parsed_value);