X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=include%2Fgedcom.h;h=2b962dae797ec2e452c7f63bf87530452320611f;hb=9b4b646eafd90dcff38ab9ed9d89bba0a4a8c62d;hp=b2f7e69908508afa7aa9adcfa22c20ddaf3b5ab7;hpb=706c9bfcdfc8d16c3a65243d708af135c2e7c894;p=gedcom-parse.git diff --git a/include/gedcom.h b/include/gedcom.h index b2f7e69..2b962da 100644 --- a/include/gedcom.h +++ b/include/gedcom.h @@ -1,5 +1,5 @@ /* External header for the Gedcom parser library. - Copyright (C) 2001 The Genes Development Team + Copyright (C) 2001,2002 The Genes Development Team This file is part of the Gedcom parser library. Contributed by Peter Verthez , 2001. @@ -28,6 +28,10 @@ __BEGIN_DECLS +#ifndef GEDCOM_INTERNAL +#include +#endif + /**************************************************************************/ /*** First the records and elements to subscribe upon ***/ /**************************************************************************/ @@ -276,10 +280,14 @@ typedef enum _DATE_VAL_MOD { DV_PHRASE /* Only phrase is given */ } Date_value_type; +/* All Unicode characters between U+0000 and U+FFFF can be encoded in + UTF-8 with 3 or less bytes */ +#define UTF_FACTOR 3 + #define MAX_DAY_LEN 2 #define MAX_MONTH_LEN 4 #define MAX_YEAR_LEN 7 -#define MAX_PHRASE_LEN 35 +#define MAX_PHRASE_LEN 35 * UTF_FACTOR struct date { Calendar_type cal; @@ -302,6 +310,28 @@ struct date_value { char phrase[MAX_PHRASE_LEN + 1]; }; +/* Type for context handling, meant to be opaque */ +typedef void* Gedcom_ctxt; + +typedef enum _XREF_TYPE { + XREF_NONE, + XREF_FAM, + XREF_INDI, + XREF_NOTE, + XREF_OBJE, + XREF_REPO, + XREF_SOUR, + XREF_SUBM, + XREF_SUBN, + XREF_USER +} Xref_type; + +struct xref_value { + Xref_type type; + char *string; + Gedcom_ctxt object; +}; + /**************************************************************************/ /*** Things meant to be internal, susceptible to changes ***/ /*** Use the GEDCOM_STRING/GEDCOM_DATE interface instead of relying ***/ @@ -311,12 +341,14 @@ struct date_value { typedef enum _GEDCOM_VAL_TYPE { GV_NULL, GV_CHAR_PTR, - GV_DATE_VALUE + GV_DATE_VALUE, + GV_XREF_PTR } Gedcom_val_type; union _Gedcom_val_union { char* string_val; struct date_value date_val; + struct xref_value *xref_val; }; typedef struct _Gedcom_val_struct { @@ -327,7 +359,9 @@ typedef struct _Gedcom_val_struct { void gedcom_cast_error(char* file, int line, Gedcom_val_type tried_type, Gedcom_val_type real_type); + extern struct date_value def_date_val; +extern struct xref_value def_xref_val; #define GV_CHECK_CAST(VAL, TYPE, MEMBER, DEFVAL) \ ((VAL->type == TYPE) ? \ @@ -341,9 +375,6 @@ extern struct date_value def_date_val; /*** Function interface ***/ /**************************************************************************/ -/* Type for context handling, meant to be opaque */ -typedef void* Gedcom_ctxt; - /* Type for parsed values, meant to be opaque */ typedef Gedcom_val_struct* Gedcom_val; @@ -354,7 +385,7 @@ typedef Gedcom_val_struct* Gedcom_val; /* This returns the char* from a Gedcom_val, if appropriate */ /* It gives a gedcom_warning if the cast is not correct */ #define GEDCOM_STRING(VAL) \ - GV_CHECK_CAST(VAL, GV_CHAR_PTR, string_val, "") + GV_CHECK_CAST(VAL, GV_CHAR_PTR, string_val, "") #define GEDCOM_IS_STRING(VAL) \ GV_IS_TYPE(VAL, GV_CHAR_PTR) @@ -365,13 +396,21 @@ typedef Gedcom_val_struct* Gedcom_val; #define GEDCOM_IS_DATE(VAL) \ GV_IS_TYPE(VAL, GV_DATE_VALUE) +/* This returns the (struct xref_value *) from a Gedcom_val, if appropriate */ +/* It gives a gedcom_warning if the cast is not correct */ +#define GEDCOM_XREF_PTR(VAL) \ + GV_CHECK_CAST(VAL, GV_XREF_PTR, xref_val, &def_xref_val) +#define GEDCOM_IS_XREF_PTR(VAL) \ + GV_IS_TYPE(VAL, GV_XREF_PTR) + typedef void (*Gedcom_msg_handler) (Gedcom_msg_type type, char *msg); typedef Gedcom_ctxt (*Gedcom_rec_start_cb) - (int level, char *xref, char *tag); + (int level, Gedcom_val xref, char *tag, char *raw_value, + int tag_value, Gedcom_val parsed_value); typedef void (*Gedcom_rec_end_cb) (Gedcom_ctxt self); @@ -379,14 +418,16 @@ typedef void typedef Gedcom_ctxt (*Gedcom_elt_start_cb) (Gedcom_ctxt parent, - int level, char *tag, char *raw_value, Gedcom_val parsed_value); + int level, char *tag, char *raw_value, + int tag_value, Gedcom_val parsed_value); typedef void (*Gedcom_elt_end_cb) (Gedcom_ctxt parent, Gedcom_ctxt self, Gedcom_val parsed_value); typedef void (*Gedcom_def_cb) - (Gedcom_ctxt parent, int level, char *tag, char *raw_value); + (Gedcom_ctxt parent, int level, char *tag, char *raw_value, + int tag_value); int gedcom_parse_file(char* file_name); void gedcom_set_debug_level(int level, FILE* trace_output);