Added compatibility for PAF 4.
[gedcom-parse.git] / t / src / standalone.c
index 88b6a2854d85725b8018c6f39f61daca7617feb5..76d8f14bd8d4797e081a7da322018fd79ebd02f3 100644 (file)
@@ -30,9 +30,9 @@
 #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 ()
@@ -49,7 +49,7 @@ 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");
 }
@@ -62,12 +62,13 @@ Gedcom_ctxt header_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
   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,
@@ -76,7 +77,9 @@ 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++);
 }
@@ -102,10 +105,13 @@ Gedcom_ctxt note_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
   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,
@@ -134,6 +140,23 @@ void source_end(Gedcom_elt elt, Gedcom_ctxt parent, Gedcom_ctxt self,
         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)
@@ -207,6 +230,7 @@ void subscribe_callbacks()
   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);
@@ -310,7 +334,7 @@ int main(int argc, char* argv[])
     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);
   }