X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fgnumeric-reader.c;h=5fee6919c0a51891f5240328606086cf331eb15b;hb=66c6a01f07a24f090e9bd17358fe7110a9f481eb;hp=7033448d8b4dc23a7c63b2d967854d551e0f47d9;hpb=958e78555714e9f1847513f9cc576fa2cd7a6769;p=pspp diff --git a/src/data/gnumeric-reader.c b/src/data/gnumeric-reader.c index 7033448d8b..5fee6919c0 100644 --- a/src/data/gnumeric-reader.c +++ b/src/data/gnumeric-reader.c @@ -16,31 +16,8 @@ #include -#include "libpspp/message.h" -#include "libpspp/misc.h" - -#include "gl/minmax.h" -#include "gl/c-strtod.h" - -#include "gettext.h" -#define _(msgid) gettext (msgid) -#define N_(msgid) (msgid) - -#include "spreadsheet-reader.h" - -#if !GNM_READ_SUPPORT - -struct casereader * -gnumeric_open_reader (const struct spreadsheet_read_options *opts, struct dictionary **dict) -{ - msg (ME, _("Support for %s files was not compiled into this installation of PSPP"), "Gnumeric"); - - return NULL; -} - -#else - #include "data/gnumeric-reader.h" +#include "spreadsheet-reader.h" #include #include @@ -48,19 +25,26 @@ gnumeric_open_reader (const struct spreadsheet_read_options *opts, struct dictio #include #include -#include "data/format.h" -#include "data/data-in.h" #include "data/case.h" #include "data/casereader-provider.h" +#include "data/data-in.h" #include "data/dictionary.h" +#include "data/format.h" #include "data/identifier.h" #include "data/value.h" #include "data/variable.h" #include "libpspp/i18n.h" +#include "libpspp/message.h" +#include "libpspp/misc.h" #include "libpspp/str.h" +#include "gl/c-strtod.h" +#include "gl/minmax.h" #include "gl/xalloc.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) (msgid) /* Shamelessly lifted from the Gnumeric sources: https://git.gnome.org/browse/gnumeric/tree/src/value.h @@ -121,7 +105,7 @@ struct sheet_detail int maxrow; }; -struct state_data +struct state_data { /* The libxml reader for this instance */ xmlTextReaderPtr xtr; @@ -157,7 +141,7 @@ struct gnumeric_reader int stop_col; int start_row; int stop_row; - + struct sheet_detail *sheets; const xmlChar *target_sheet; @@ -190,7 +174,7 @@ gnumeric_unref (struct spreadsheet *s) free (r->sheets); state_data_destroy (&r->msd); - dict_destroy (r->dict); + dict_unref (r->dict); free (s->file_name); @@ -205,7 +189,7 @@ gnumeric_get_sheet_name (struct spreadsheet *s, int n) struct gnumeric_reader *gr = (struct gnumeric_reader *) s; assert (n < s->n_sheets); - return gr->sheets[n].name; + return gr->sheets[n].name; } @@ -218,12 +202,12 @@ gnumeric_get_sheet_range (struct spreadsheet *s, int n) { int ret; struct gnumeric_reader *gr = (struct gnumeric_reader *) s; - + assert (n < s->n_sheets); - while ( + while ( (gr->sheets[n].stop_col == -1) - && + && (1 == (ret = xmlTextReaderRead (gr->msd.xtr))) ) { @@ -251,7 +235,7 @@ gnm_file_casereader_destroy (struct casereader *reader UNUSED, void *r_) if (r->first_case && ! r->used_first_case ) case_unref (r->first_case); - if (r->proto) + if (r->proto) caseproto_unref (r->proto); gnumeric_unref (&r->spreadsheet); @@ -485,13 +469,13 @@ convert_xml_string_to_value (struct ccase *c, const struct variable *var, v, var_get_width (var), "UTF-8"); - + if (m) { char buf [FMT_STRING_LEN_MAX + 1]; char *cell = create_cell_ref (col, row); - - msg (MW, _("Cannot convert the value in the spreadsheet cell %s to format (%s): %s"), + + msg (MW, _("Cannot convert the value in the spreadsheet cell %s to format (%s): %s"), cell, fmt_to_string (fmt, buf), m); free (cell); } @@ -513,7 +497,7 @@ gnumeric_error_handler (void *ctx, const char *mesg, UNUSED xmlParserSeverities sev, xmlTextReaderLocatorPtr loc) { struct gnumeric_reader *r = ctx; - + msg (MW, _("There was a problem whilst reading the %s file `%s' (near line %d): `%s'"), "Gnumeric", r->spreadsheet.file_name, @@ -523,7 +507,7 @@ gnumeric_error_handler (void *ctx, const char *mesg, static struct gnumeric_reader * gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_errors) -{ +{ int ret = -1; struct state_data *sd; @@ -567,8 +551,8 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro { sd = &r->rsd; } - - if (show_errors) + + if (show_errors) xmlTextReaderSetErrorHandler (xtr, gnumeric_error_handler, r); r->target_sheet = NULL; @@ -607,7 +591,7 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro if ( XML_CHAR_ENCODING_UTF8 != xce) { - /* I have been told that ALL gnumeric files are UTF8 encoded. If that is correct, this + /* I have been told that ALL gnumeric files are UTF8 encoded. If that is correct, this can never happen. */ msg (MW, _("The gnumeric file `%s' is encoded as %s instead of the usual UTF-8 encoding. " "Any non-ascii characters will be incorrectly imported."), @@ -723,13 +707,13 @@ gnumeric_make_reader (struct spreadsheet *spreadsheet, process_node (r, &r->rsd); - if ( r->rsd.row > r->start_row ) + if ( r->rsd.row > r->start_row ) { xmlChar *attr = xmlTextReaderGetAttribute (r->rsd.xtr, _xml ("ValueType")); - + r->vtype = _xmlchar_to_int (attr); - + xmlFree (attr); break; } @@ -843,9 +827,9 @@ gnumeric_make_reader (struct spreadsheet *spreadsheet, continue; var = dict_get_var (r->dict, x++); - + convert_xml_string_to_value (r->first_case, var, - var_spec[i].first_value, + var_spec[i].first_value, var_spec[i].first_type, r->rsd.col + i - 1, r->rsd.row - 1); @@ -858,7 +842,7 @@ gnumeric_make_reader (struct spreadsheet *spreadsheet, } free (var_spec); - + return casereader_create_sequential (NULL, @@ -938,7 +922,7 @@ gnm_file_casereader_read (struct casereader *reader UNUSED, void *r_) const int idx = r->rsd.col - r->start_col; const struct variable *var = dict_get_var (r->dict, idx); - convert_xml_string_to_value (c, var, value, r->vtype, + convert_xml_string_to_value (c, var, value, r->vtype, r->rsd.col, r->rsd.row); xmlFree (value); @@ -953,6 +937,3 @@ gnm_file_casereader_read (struct casereader *reader UNUSED, void *r_) return NULL; } } - - -#endif /* GNM_READ_SUPPORT */