New files: specifying the callback interface.
[gedcom-parse.git] / interface.c
1 #include "interface.h"
2
3 Gedcom_rec_start_cb record_start_callback[] =
4   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
5
6 Gedcom_rec_end_cb record_end_callback[] =
7   { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
8
9
10 void subscribe_to_record(Gedcom_rec rec,
11                          Gedcom_rec_start_cb cb_start,
12                          Gedcom_rec_end_cb cb_end)
13 {
14   record_start_callback[rec] = cb_start;
15   record_end_callback[rec]   = cb_end;
16 }
17
18 Gedcom_ctxt start_record(Gedcom_rec rec, char *xreftag)
19 {
20   Gedcom_rec_start_cb cb = record_start_callback[rec];
21   if (cb != NULL)
22     return (*cb)(xreftag);
23   else
24     return NULL;
25 }
26
27 void end_record(Gedcom_rec rec, Gedcom_ctxt self)
28 {
29   Gedcom_rec_end_cb cb = record_end_callback[rec];
30   if (cb != NULL)
31     (*cb)(self);
32 }
33
34 Gedcom_ctxt start_element(Gedcom_elt elt, Gedcom_ctxt parent, 
35                           int level, char *tag, char *raw_value,
36                           void *parsed_value)
37 {
38   printf("Start of element %d, parent context is %d\n", elt, (int)parent);
39   printf("  value is: %d %s %s\n", level, tag, raw_value);
40   return (Gedcom_ctxt)(elt+100);
41 }
42
43 void end_element(Gedcom_ctxt parent, Gedcom_ctxt self)
44 {
45   printf("End of element, context is %d, parent context is %d\n",
46          (int)self, (int)parent);
47 }
48