X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gedcom%2Fwrite.c;h=f04697e6fb03ed4e56fcdaf2b6010937483daa45;hb=HEAD;hp=ed17f1380e1ed615242dca6d25a3bff7c6122ee8;hpb=3d1822cb295202993c11564f7dd64442d8b67d2f;p=gedcom-parse.git diff --git a/gedcom/write.c b/gedcom/write.c index ed17f13..f04697e 100644 --- a/gedcom/write.c +++ b/gedcom/write.c @@ -154,8 +154,13 @@ int write_long(Gedcom_write_hndl hndl, int elt_or_rec, if (prefix_len + line_len + term_len > MAXWRITELEN) { line_len = MAXWRITELEN - prefix_len - term_len; - if (!cont_as_conc) + if (!cont_as_conc) { cont_tag = "CONC"; + while (value_ptr[line_len] == ' ' + || value_ptr[line_len-1] == ' ') { + line_len--; + } + } } memset(value_part, 0, sizeof(value_part)); @@ -184,6 +189,13 @@ int write_long(Gedcom_write_hndl hndl, int elt_or_rec, return 0; } +/** The basic function for opening a GEDCOM file for writing. + + \param filename The name of the file to write + + \return A write handle, which needs to be used in the writing functions, + or \c NULL in case of errors. + */ Gedcom_write_hndl gedcom_write_open(const char *filename) { Gedcom_write_hndl hndl; @@ -232,6 +244,16 @@ Gedcom_write_hndl gedcom_write_open(const char *filename) return hndl; } +/** The basic function for closing a GEDCOM file for writing. + + \param hndl The write handle as returned by gedcom_write_open(). + \param total_conv_fails If you pass an actual integer pointer for this, + the function will write in it the total number of conversion failures; + you can pass \c NULL if you're not interested + + \retval 0 in case of success + \retval >0 in case of failure. + */ int gedcom_write_close(Gedcom_write_hndl hndl, int* total_conv_fails) { int result = 0; @@ -342,6 +364,21 @@ int _gedcom_write_val(Gedcom_write_hndl hndl, return result; } +/** Function for writing lines corresponding to standard records (i.e. on + level 0). + + \param hndl The write handle that was returned by gedcom_write_open(). + \param rec One of the identifiers given in the first column in + this table (except REC_USER). + \param xrefstr The cross-reference key of the record (something like + \c "@FAM01@". + \param val The value of the record line, which should be \c NULL for some + record types, according to + this table. + + \retval 0 on success + \retval >0 on failure +*/ int gedcom_write_record_str(Gedcom_write_hndl hndl, Gedcom_rec rec, const char* xrefstr, const char* val) @@ -352,6 +389,31 @@ int gedcom_write_record_str(Gedcom_write_hndl hndl, return result; } +/** Function for writing lines corresponding to standard elements (i.e. on + level bigger than 0), with a string as value. + + \param hndl The write handle that was returned by gedcom_write_open(). + \param elt One of the identifiers given in the first column in + this table + (except ELT_USER). + \param tag Some of the \c elt identifiers can actually stand for different + tags. For this reason, the \c tag has to be passed for some of them. This + parsed tag is the same as was returned by the callback functions, and is + an identifier of the form TAG_name. This parameter + is needed whenever the second column in + this table shows several + possible tags (this is e.g. the case for \c ELT_SUB_FAM_EVT). Otherwise, + you can pass 0. + \param parent_rec_or_elt The corresponding \c rec or \c elt identifier of + the logically enclosing statement: this will determine the level number + written on the line, as the level number of the parent + 1. + \param val The value of the element line, which should be \c NULL for some + element types, according to + this table. + + \retval 0 on success + \retval >0 on failure +*/ int gedcom_write_element_str(Gedcom_write_hndl hndl, Gedcom_elt elt, int tag, int parent_rec_or_elt, const char* val) @@ -363,6 +425,11 @@ int gedcom_write_element_str(Gedcom_write_hndl hndl, return result; } +/** Function for writing lines corresponding to standard elements (i.e. on + level bigger than 0), with a cross-reference as value. + + See gedcom_write_element_str() for details. +*/ int gedcom_write_element_xref(Gedcom_write_hndl hndl, Gedcom_elt elt, int tag, int parent_rec_or_elt, const struct xref_value* val) @@ -374,6 +441,11 @@ int gedcom_write_element_xref(Gedcom_write_hndl hndl, return result; } +/** Function for writing lines corresponding to standard elements (i.e. on + level bigger than 0), with a date as value. + + See gedcom_write_element_str() for details. +*/ int gedcom_write_element_date(Gedcom_write_hndl hndl, Gedcom_elt elt, int tag, int parent_rec_or_elt, const struct date_value* val) @@ -385,6 +457,11 @@ int gedcom_write_element_date(Gedcom_write_hndl hndl, return result; } +/** Function for writing lines corresponding to standard elements (i.e. on + level bigger than 0), with an age as value. + + See gedcom_write_element_str() for details. +*/ int gedcom_write_element_age(Gedcom_write_hndl hndl, Gedcom_elt elt, int tag, int parent_rec_or_elt, const struct age_value* val) @@ -396,6 +473,23 @@ int gedcom_write_element_age(Gedcom_write_hndl hndl, return result; } +/** Function for writing lines corresponding to user-defined records and + elements, with a string as value. + + In the case of user-defined tags, the + level and tag string are passed verbatim (not controlled by the library). + This allows to write any extra data that doesn't use a standard tag, but + is only allowed for tags starting with an underscore. + + \param hndl The write handle that was returned by gedcom_write_open(). + \param level The integer level of the GEDCOM line + \param tag The tag, as a literal string + \param xrefstr An optional cross-reference of the record or element. + \param value The value of the record or element line. + + \retval 0 on success + \retval >0 on failure +*/ int gedcom_write_user_str(Gedcom_write_hndl hndl, int level, const char* tag, const char* xrefstr, const char* value) { @@ -405,6 +499,11 @@ int gedcom_write_user_str(Gedcom_write_hndl hndl, int level, const char* tag, return result; } +/** Function for writing lines corresponding to user-defined records and + elements, with a cross-reference as value. + + See gedcom_write_user_str() for details. +*/ int gedcom_write_user_xref(Gedcom_write_hndl hndl, int level, const char* tag, const char* xrefstr, const struct xref_value* val) {