Use Gedcom_val for the xref in the record start callback too.
[gedcom-parse.git] / gedcom / interface.c
index 5f7ceee13c06398cf0b90d399490155ecccb8548..58604442e4671c4533ce32c228775913a21f1f7c 100644 (file)
@@ -39,20 +39,24 @@ void gedcom_subscribe_to_record(Gedcom_rec rec,
                                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)
@@ -89,7 +93,15 @@ void end_element(Gedcom_elt elt, Gedcom_ctxt parent, Gedcom_ctxt self,
     (*cb)(parent, self, parsed_value);
 }
 
-void gedcom_cast_error(char* file, int line)
+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"), file, line);
+  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]));
 }