From: Peter Verthez Date: Fri, 16 Aug 2002 18:41:23 +0000 (+0000) Subject: Move all compatibility handling functions to compat.c; let the default X-Git-Url: https://git.dlugolecki.net.pl/?a=commitdiff_plain;ds=sidebyside;h=5962cdcec2493fc473f86aa6077d4b420c406112;p=gedcom-parse.git Move all compatibility handling functions to compat.c; let the default charset depend on the program. --- diff --git a/gedcom/compat.c b/gedcom/compat.c index 59e61d3..f7638e6 100644 --- a/gedcom/compat.c +++ b/gedcom/compat.c @@ -28,15 +28,15 @@ #include "gedcom_internal.h" #include "gedcom.h" +int compat_enabled = 1; +int compatibility = 0; int compat_at = 0; +char* default_charset; #define SUBMITTER_LINK "@__COMPAT__SUBM__@" #define DEFAULT_SUBMITTER_NAME "Submitter" #define DEFAULT_GEDCOM_VERS "5.5" #define DEFAULT_GEDCOM_FORM "LINEAGE-LINKED" -/* Make default character set ANSI, for all 'special characters' - typically used in non-compliant gedcom generators */ -#define DEFAULT_CHAR "ANSI" /* Incompatibily list (with GEDCOM 5.5): @@ -53,6 +53,39 @@ int compat_at = 0; - '@' not written as '@@' in values */ +/* Compatibility handling */ + +void gedcom_set_compat_handling(int enable_compat) +{ + compat_enabled = enable_compat; +} + +void set_compatibility(char* program) +{ + if (compat_enabled) { + if (! strncmp(program, "ftree", 6)) { + gedcom_warning(_("Enabling compatibility with 'ftree'")); + compatibility = C_FTREE; + default_charset = "ANSI"; + } + else if (! strncmp(program, "LIFELINES", 9)) { + /* Matches "LIFELINES 3.0.2" */ + gedcom_warning(_("Enabling compatibility with 'Lifelines'")); + compatibility = C_LIFELINES; + default_charset = "ANSI"; + compat_at = 1; + } + else { + compatibility = 0; + } + } +} + +int compat_mode(int compat_flags) +{ + return (compat_flags & compatibility); +} + void compat_generate_submitter_link(Gedcom_ctxt parent) { struct xref_value *xr = gedcom_parse_xref(SUBMITTER_LINK, XREF_USED, @@ -137,12 +170,12 @@ int compat_generate_char(Gedcom_ctxt parent) /* first generate "1 CHAR " */ ts.string = "CHAR"; ts.value = TAG_CHAR; - self1 = start_element(ELT_HEAD_CHAR, parent, 1, ts, DEFAULT_CHAR, - GEDCOM_MAKE_STRING(val1, DEFAULT_CHAR)); + self1 = start_element(ELT_HEAD_CHAR, parent, 1, ts, default_charset, + GEDCOM_MAKE_STRING(val1, default_charset)); /* close "1 CHAR" */ end_element(ELT_HEAD_CHAR, parent, self1, NULL); - if (open_conv_to_internal(DEFAULT_CHAR) == 0) + if (open_conv_to_internal(default_charset) == 0) return 1; else return 0; diff --git a/gedcom/compat.h b/gedcom/compat.h index f92293c..ff2423c 100644 --- a/gedcom/compat.h +++ b/gedcom/compat.h @@ -28,6 +28,13 @@ extern int compat_at; +enum _COMPAT { + C_FTREE = 0x01, + C_LIFELINES = 0x02 +}; + +void set_compatibility(char* program); +int compat_mode(int flags); void compat_generate_submitter_link(Gedcom_ctxt parent); void compat_generate_submitter(); void compat_generate_gedcom(Gedcom_ctxt parent); diff --git a/gedcom/gedcom.y b/gedcom/gedcom.y index 911b5fd..f305257 100644 --- a/gedcom/gedcom.y +++ b/gedcom/gedcom.y @@ -151,9 +151,7 @@ int count_level = 0; int fail = 0; -int compat_enabled = 1; int gedcom_high_level_debug = 0; -int compatibility = 0; Gedcom_err_mech error_mechanism = IMMED_FAIL; Gedcom_val_struct val1; Gedcom_val_struct val2; @@ -161,11 +159,6 @@ Gedcom_val_struct val2; char line_item_buf[MAXGEDCLINELEN * UTF_FACTOR + 1]; char *line_item_buf_ptr; -enum _COMPAT { - C_FTREE = 0x01, - C_LIFELINES = 0x02 -}; - /* These are defined at the bottom of the file */ void push_countarray(); void set_parenttag(char* tag); @@ -175,8 +168,6 @@ Gedcom_ctxt get_parentctxt(int offset); void pop_countarray(); int count_tag(int tag); int check_occurrence(int tag); -void set_compatibility(char* program); -int compat_mode(int flags); #define CLEAR_BUFFER(BUF) \ memset(BUF, 0, sizeof(BUF)); @@ -3908,35 +3899,3 @@ void gedcom_set_error_handling(Gedcom_err_mech mechanism) { error_mechanism = mechanism; } - -/* Compatibility handling */ - -void gedcom_set_compat_handling(int enable_compat) -{ - compat_enabled = enable_compat; -} - -void set_compatibility(char* program) -{ - if (compat_enabled) { - if (! strncmp(program, "ftree", 6)) { - gedcom_warning(_("Enabling compatibility with 'ftree'")); - compatibility = C_FTREE; - } - else if (! strncmp(program, "LIFELINES", 9)) { - /* Matches "LIFELINES 3.0.2" */ - gedcom_warning(_("Enabling compatibility with 'Lifelines'")); - compatibility = C_LIFELINES; - compat_at = 1; - } - else { - compatibility = 0; - } - } -} - -int compat_mode(int compat_flags) -{ - return (compat_flags & compatibility); -} -