#define _(msgid) gettext (msgid)
#define N_(msgid) (msgid)
-static bool parse_spreadsheet (struct lexer *lexer, struct spreadsheet_read_info *sri,
+static bool parse_spreadsheet (struct lexer *lexer, char **filename, struct spreadsheet_read_info *sri,
struct spreadsheet_read_options *opts);
static void destroy_spreadsheet_read_info (struct spreadsheet_read_info *, struct spreadsheet_read_options *);
else if (lex_match_id (lexer, "GNM") ||
lex_match_id (lexer, "ODS"))
{
+ char *filename = NULL;
struct casereader *reader = NULL;
struct dictionary *dict = NULL;
struct spreadsheet_read_info sri;
struct spreadsheet_read_options opts;
- if (!parse_spreadsheet (lexer, &sri, &opts))
+ if (!parse_spreadsheet (lexer, &filename, &sri, &opts))
goto error;
if ( 0 == strncasecmp (tok, "GNM", 3))
- reader = gnumeric_open_reader (&sri, &opts, &dict);
+ {
+ struct spreadsheet *spreadsheet = gnumeric_probe (filename, true);
+ reader = gnumeric_make_reader (spreadsheet, &sri, &opts);
+ dict = spreadsheet->dict;
+ }
else if (0 == strncasecmp (tok, "ODS", 3))
- reader = ods_open_reader (&sri, &opts, &dict);
+ {
+ struct spreadsheet *spreadsheet = ods_probe (filename, true);
+ reader = ods_make_reader (spreadsheet, &sri, &opts);
+ dict = spreadsheet->dict;
+ }
if (reader)
{
}
static bool
-parse_spreadsheet (struct lexer *lexer, struct spreadsheet_read_info *sri,
+parse_spreadsheet (struct lexer *lexer, char **filename, struct spreadsheet_read_info *sri,
struct spreadsheet_read_options *opts)
{
opts->sheet_index = 1;
opts->cell_range = NULL;
sri->read_names = true;
sri->asw = -1;
- sri->file_name = NULL;
lex_force_match (lexer, T_SLASH);
if (!lex_force_string (lexer))
goto error;
- sri->file_name = utf8_to_filename (lex_tokcstr (lexer));
+ *filename = utf8_to_filename (lex_tokcstr (lexer));
lex_get (lexer);
static void
-destroy_spreadsheet_read_info (struct spreadsheet_read_info *sri,
- struct spreadsheet_read_options *opts)
+destroy_spreadsheet_read_info (UNUSED struct spreadsheet_read_info *sri,
+ UNUSED struct spreadsheet_read_options *opts)
{
- free (opts->sheet_name);
- free (opts->cell_range);
- free (sri->file_name);
}