projects
/
pspp
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7f8a159
)
Started polymorphism of Gnumeric
author
John Darrington
<john@darrington.wattle.id.au>
Sun, 13 Jan 2013 12:08:58 +0000
(13:08 +0100)
committer
John Darrington
<john@darrington.wattle.id.au>
Sat, 16 Feb 2013 14:03:08 +0000
(15:03 +0100)
src/data/gnumeric-reader.c
patch
|
blob
|
history
src/data/gnumeric-reader.h
patch
|
blob
|
history
src/data/spreadsheet-reader.h
patch
|
blob
|
history
src/language/data-io/get-data.c
patch
|
blob
|
history
src/ui/gui/page-sheet-spec.c
patch
|
blob
|
history
diff --git
a/src/data/gnumeric-reader.c
b/src/data/gnumeric-reader.c
index cfdd45424d455481ecbd671777b7c4ef28eca8f9..9bb961a45980f8f2fe75587f3957c02a8990be44 100644
(file)
--- a/
src/data/gnumeric-reader.c
+++ b/
src/data/gnumeric-reader.c
@@
-95,9
+95,6
@@
struct gnumeric_reader
enum reader_state state;
enum reader_state state;
- /* The total number of sheets in the "workbook" */
- int sheet_total ;
-
int row;
int col;
int min_col;
int row;
int col;
int min_col;
@@
-157,7
+154,7
@@
process_node (struct gnumeric_reader *r)
XML_READER_TYPE_ELEMENT == r->node_type)
{
r->state = STATE_SHEET_COUNT;
XML_READER_TYPE_ELEMENT == r->node_type)
{
r->state = STATE_SHEET_COUNT;
- r->s
heet_total
= 0;
+ r->s
preadsheet.sheets
= 0;
}
break;
}
break;
@@
-165,7
+162,7
@@
process_node (struct gnumeric_reader *r)
if (0 == xmlStrcasecmp (name, _xml("gnm:SheetName")) &&
XML_READER_TYPE_ELEMENT == r->node_type)
{
if (0 == xmlStrcasecmp (name, _xml("gnm:SheetName")) &&
XML_READER_TYPE_ELEMENT == r->node_type)
{
- r->s
heet_total
++;
+ r->s
preadsheet.sheets
++;
}
else if (0 == xmlStrcasecmp (name, _xml("gnm:SheetNameIndex")) &&
XML_READER_TYPE_END_ELEMENT == r->node_type)
}
else if (0 == xmlStrcasecmp (name, _xml("gnm:SheetNameIndex")) &&
XML_READER_TYPE_END_ELEMENT == r->node_type)
@@
-327,7
+324,7
@@
gnumeric_probe (const char *filename)
r = xzalloc (sizeof *r);
r->xtr = xtr;
r = xzalloc (sizeof *r);
r->xtr = xtr;
- r->s
heet_total
= -1;
+ r->s
preadsheet.sheets
= -1;
r->state = STATE_PRE_INIT;
r->state = STATE_PRE_INIT;
@@
-350,18
+347,17
@@
gnumeric_probe (const char *filename)
}
r->spreadsheet.type = SPREADSHEET_GNUMERIC;
}
r->spreadsheet.type = SPREADSHEET_GNUMERIC;
- r->spreadsheet.sheets = r->sheet_total;
- r->spreadsheet.make_reader = NULL;
-
return &r->spreadsheet;
}
return &r->spreadsheet;
}
+
struct casereader *
struct casereader *
-gnumeric_
open_reader (const struct spreadsheet_read_info *gri,
- struct spreadsheet_read_options *opts,
- struct
dictionary **dict
)
+gnumeric_
make_reader (struct spreadsheet *spreadsheet,
+ const struct spreadsheet_read_info *gri,
+ struct
spreadsheet_read_options *opts
)
{
{
+ struct gnumeric_reader *r = NULL;
unsigned long int vstart = 0;
int ret;
casenumber n_cases = CASENUMBER_MAX;
unsigned long int vstart = 0;
int ret;
casenumber n_cases = CASENUMBER_MAX;
@@
-369,14
+365,6
@@
gnumeric_open_reader (const struct spreadsheet_read_info *gri,
struct var_spec *var_spec = NULL;
int n_var_specs = 0;
struct var_spec *var_spec = NULL;
int n_var_specs = 0;
- struct spreadsheet * spreadsheet = NULL;
- struct gnumeric_reader *r = NULL;
-
- spreadsheet = gnumeric_probe (gri->file_name);
-
- if (spreadsheet == NULL)
- goto error;
-
r = (struct gnumeric_reader *) (spreadsheet);
if ( opts->cell_range )
r = (struct gnumeric_reader *) (spreadsheet);
if ( opts->cell_range )
@@
-508,7
+496,7
@@
gnumeric_open_reader (const struct spreadsheet_read_info *gri,
if ( enc == NULL)
goto error;
/* Create the dictionary and populate it */
if ( enc == NULL)
goto error;
/* Create the dictionary and populate it */
-
*
dict = r->dict = dict_create (CHAR_CAST (const char *, enc));
+
spreadsheet->
dict = r->dict = dict_create (CHAR_CAST (const char *, enc));
}
for (i = 0 ; i < n_var_specs ; ++i )
}
for (i = 0 ; i < n_var_specs ; ++i )
@@
-587,8
+575,8
@@
gnumeric_open_reader (const struct spreadsheet_read_info *gri,
}
free (var_spec);
}
free (var_spec);
- dict_destroy (
*
dict);
-
*
dict = NULL;
+ dict_destroy (
spreadsheet->
dict);
+
spreadsheet->
dict = NULL;
gnm_file_casereader_destroy (NULL, r);
gnm_file_casereader_destroy (NULL, r);
diff --git
a/src/data/gnumeric-reader.h
b/src/data/gnumeric-reader.h
index 529670e35cfefed38db13d1edb7e1a0803693b33..b21ddfd558b001d4fdd0dee43fc4712f6d5255dc 100644
(file)
--- a/
src/data/gnumeric-reader.h
+++ b/
src/data/gnumeric-reader.h
@@
-27,9
+27,9
@@
struct spreadsheet_read_options;
struct spreadsheet *gnumeric_probe (const char *filename);
struct spreadsheet *gnumeric_probe (const char *filename);
-struct casereader * gnumeric_
open_reader (const struct spreadsheet_read_info *,
- struct spreadsheet_read_options *,
- struct
dictionary **
);
+struct casereader * gnumeric_
make_reader (struct spreadsheet *spreadsheet,
+ const struct spreadsheet_read_info *gri,
+ struct
spreadsheet_read_options *opts
);
#endif
#endif
diff --git
a/src/data/spreadsheet-reader.h
b/src/data/spreadsheet-reader.h
index d25aaf32f6a11c11760c20fd97ace5d64b820662..3fbbde1d21f605242ad1117b64345a155764c7e5 100644
(file)
--- a/
src/data/spreadsheet-reader.h
+++ b/
src/data/spreadsheet-reader.h
@@
-62,8
+62,6
@@
struct spreadsheet
{
enum spreadsheet_type type;
{
enum spreadsheet_type type;
- struct casereader * (*make_reader) (struct spreadsheet *);
-
/* The total number of sheets in the "workbook" */
int sheets;
/* The total number of sheets in the "workbook" */
int sheets;
diff --git
a/src/language/data-io/get-data.c
b/src/language/data-io/get-data.c
index 8f75272e2d0648c246734ce63d50e87715e9247e..723a16c8d1361cfe0d4fe832d2cc469a9b0b07c7 100644
(file)
--- a/
src/language/data-io/get-data.c
+++ b/
src/language/data-io/get-data.c
@@
-86,9
+86,15
@@
cmd_get_data (struct lexer *lexer, struct dataset *ds)
goto error;
if ( 0 == strncasecmp (tok, "GNM", 3))
goto error;
if ( 0 == strncasecmp (tok, "GNM", 3))
- reader = gnumeric_open_reader (&sri, &opts, &dict);
+ {
+ struct spreadsheet *spreadsheet = gnumeric_probe (sri.file_name);
+ reader = gnumeric_make_reader (spreadsheet, &sri, &opts);
+ dict = spreadsheet->dict;
+ }
else if (0 == strncasecmp (tok, "ODS", 3))
else if (0 == strncasecmp (tok, "ODS", 3))
- reader = ods_open_reader (&sri, &opts, &dict);
+ {
+ reader = ods_open_reader (&sri, &opts, &dict);
+ }
if (reader)
{
if (reader)
{
diff --git
a/src/ui/gui/page-sheet-spec.c
b/src/ui/gui/page-sheet-spec.c
index 8f8bb381cc2b75e76ed4098f2da90323b96fd8e4..f87bce21f6cb6afc8cc1546aba0451a404aba452 100644
(file)
--- a/
src/ui/gui/page-sheet-spec.c
+++ b/
src/ui/gui/page-sheet-spec.c
@@
-151,7
+151,10
@@
post_sheet_spec_page (struct import_assistant *ia)
creader = ods_open_reader (&ssp->sri, &ssp->opts, &dict);
break;
case FTYPE_GNUMERIC:
creader = ods_open_reader (&ssp->sri, &ssp->opts, &dict);
break;
case FTYPE_GNUMERIC:
- creader = gnumeric_open_reader (&ssp->sri, &ssp->opts, &dict);
+ {
+ creader = gnumeric_make_reader (ssp->spreadsheet, &ssp->sri, &ssp->opts);
+ dict = ssp->spreadsheet->dict;
+ }
break;
default:
g_assert_not_reached ();
break;
default:
g_assert_not_reached ();