X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=t%2Fsrc%2Fstandalone.c;h=76d8f14bd8d4797e081a7da322018fd79ebd02f3;hb=ea81accae13a4617cc46f5256dad50e2732cc206;hp=2a734dd4ff48702a93ce86993049a2550e88f1e7;hpb=eb3ea5be256bf47cc58e0b48f825e32808dc0e20;p=gedcom-parse.git diff --git a/t/src/standalone.c b/t/src/standalone.c index 2a734dd..76d8f14 100644 --- a/t/src/standalone.c +++ b/t/src/standalone.c @@ -30,7 +30,7 @@ #include #include #include -#include "utf8-locale.h" +#include "utf8tools.h" #define BOGUS_FILE_NAME "bogus.ged" int total_conv_fails = 0; @@ -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 = ""; + 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);