Gedcom_rec_start_cb cb_start,
Gedcom_rec_end_cb cb_end)
{
- record_start_callback[rec] = cb_start;
- record_end_callback[rec] = cb_end;
+ if (cb_start) {
+ record_start_callback[rec] = cb_start;
+ record_end_callback[rec] = cb_end;
+ }
}
void gedcom_subscribe_to_element(Gedcom_elt elt,
Gedcom_elt_start_cb cb_start,
Gedcom_elt_end_cb cb_end)
{
- element_start_callback[elt] = cb_start;
- element_end_callback[elt] = cb_end;
+ if (cb_start) {
+ element_start_callback[elt] = cb_start;
+ element_end_callback[elt] = cb_end;
+ }
}
Gedcom_ctxt start_record(Gedcom_rec rec,
- int level, char *xref, char *tag)
+ int level, Gedcom_val xref, char *tag)
{
Gedcom_rec_start_cb cb = record_start_callback[rec];
if (cb != NULL)
(*cb)(parent, self, parsed_value);
}
+char* val_type_str[] = { N_("null value"),
+ N_("character string"),
+ N_("date") };
+
+void gedcom_cast_error(char* file, int line,
+ Gedcom_val_type tried_type,
+ Gedcom_val_type real_type)
+{
+ gedcom_warning
+ (_("Wrong cast of value in file %s, at line %d: %s instead of %s"),
+ file, line, _(val_type_str[tried_type]), _(val_type_str[real_type]));
+}