/* 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 <Peter.Verthez@advalvas.be>, 2001.
__BEGIN_DECLS
+#ifndef GEDCOM_INTERNAL
+#include <gedcom-tags.h>
+#endif
+
/**************************************************************************/
/*** First the records and elements to subscribe upon ***/
/**************************************************************************/
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;
char phrase[MAX_PHRASE_LEN + 1];
};
+/* Type for context handling, meant to be opaque */
+typedef void* Gedcom_ctxt;
+
/**************************************************************************/
/*** Things meant to be internal, susceptible to changes ***/
/*** Use the GEDCOM_STRING/GEDCOM_DATE interface instead of relying ***/
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;
#define GV_CHECK_CAST(VAL, TYPE, MEMBER, DEFVAL) \
/*** 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;
/* 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, "<error>")
#define GEDCOM_IS_STRING(VAL) \
GV_IS_TYPE(VAL, GV_CHAR_PTR)
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);
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);