#include <locale.h>
#include <errno.h>
#include <iconv.h>
-#include "utf8-locale.h"
+#include "utf8tools.h"
-#define BOGUS_FILE_NAME "Makefile.am"
+#define BOGUS_FILE_NAME "bogus.ged"
int total_conv_fails = 0;
void show_help ()
printf(" -da Debug setting: libgedcom + yacc debug messages\n");
printf(" -2 Run the test parse 2 times instead of once\n");
printf(" -3 Run the test parse 3 times instead of once\n");
- printf(" -b Parse a bogus file before parsing the main file\n");
+ printf(" -b Parse a bogus file (bogus.ged) before parsing the main file\n");
printf(" -q No output to standard output\n");
printf(" -o <outfile> File to generate output to (def. testgedcom.out)\n");
}
return (Gedcom_ctxt)1;
}
-void header_end(Gedcom_rec rec, Gedcom_ctxt self)
+void header_end(Gedcom_rec rec, Gedcom_ctxt self, Gedcom_val parsed_value)
{
output(1, "Header end, context is %ld\n", void_ptr_to_int(self));
}
-char family_xreftags[100][255];
+#define MAXFAMILY 100
+char family_xreftags[MAXFAMILY][255];
int family_nr = 1;
Gedcom_ctxt family_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
{
struct xref_value *xr = GEDCOM_XREF_PTR(xref);
output(1, "Family start, xref is %s\n", xr->string);
- strcpy(family_xreftags[family_nr], xr->string);
+ if (family_nr < MAXFAMILY) {
+ strcpy(family_xreftags[family_nr], xr->string);
+ }
xr->object = (Gedcom_ctxt)int_to_void_ptr(family_nr);
return (Gedcom_ctxt)int_to_void_ptr(family_nr++);
}
return (Gedcom_ctxt)int_to_void_ptr(tag_value);
}
-void family_end(Gedcom_rec rec, Gedcom_ctxt self)
+void family_end(Gedcom_rec rec, Gedcom_ctxt self, Gedcom_val parsed_value)
{
- output(1, "Family end, xref is %s\n",
- family_xreftags[void_ptr_to_int(self)]);
+ char* family_xref = "<NOTSAVED>";
+ int family_nr = void_ptr_to_int(self);
+ if (family_nr < MAXFAMILY)
+ family_xref = family_xreftags[void_ptr_to_int(self)];
+ output(1, "Family end, xref is %s\n", family_xref);
}
Gedcom_ctxt submit_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
void_ptr_to_int(self), void_ptr_to_int(parent));
}
+Gedcom_ctxt head_note_start(Gedcom_elt elt, Gedcom_ctxt parent, int level,
+ char *tag, char* raw_value,
+ int tag_value, Gedcom_val parsed_value)
+{
+ Gedcom_ctxt self = (Gedcom_ctxt)(void_ptr_to_int(parent));
+ output(1, "Note: %s (ctxt is %ld, parent is %ld)\n",
+ GEDCOM_STRING(parsed_value), void_ptr_to_int(self),
+ void_ptr_to_int(parent));
+ return self;
+}
+
+void head_note_end(Gedcom_elt elt, Gedcom_ctxt parent, Gedcom_ctxt self,
+ Gedcom_val parsed_value)
+{
+ output(1, "Complete note:\n%s\n", GEDCOM_STRING(parsed_value));
+}
+
Gedcom_ctxt date_start(Gedcom_elt elt, Gedcom_ctxt parent, int level,
char *tag, char* raw_value,
int tag_value, Gedcom_val parsed_value)
gedcom_subscribe_to_record(REC_SUBM, submit_start, NULL);
gedcom_subscribe_to_record(REC_USER, rec_start, NULL);
gedcom_subscribe_to_element(ELT_HEAD_SOUR, source_start, source_end);
+ gedcom_subscribe_to_element(ELT_HEAD_NOTE, head_note_start, head_note_end);
gedcom_subscribe_to_element(ELT_SOUR_DATA_EVEN_DATE,
date_start, NULL);
gedcom_subscribe_to_element(ELT_SUB_EVT_DATE, date_start, NULL);
setlocale(LC_ALL, "");
gedcom_set_debug_level(debug_level, NULL);
gedcom_set_compat_handling(compat_enabled);
+ gedcom_set_compat_options(COMPAT_ALLOW_OUT_OF_CONTEXT);
gedcom_set_error_handling(mech);
gedcom_set_message_handler(gedcom_message_handler);
gedcom_set_default_callback(default_cb);
gedcom_parse_file(BOGUS_FILE_NAME);
}
while (run_times-- > 0) {
- output(0, "\n=== Parsing file %s\n", file_name);
+ output(0, "\n=== Parsing file %s\n", simple_base_name(file_name));
result |= gedcom_parse_file(file_name);
output(0, "\n=== Total conversion failures: %d\n", total_conv_fails);
}