- if (lex_match_id (lexer, "GNM"))
- return parse_get_gnm (lexer, ds);
- else if (lex_match_id (lexer, "TXT"))
- return parse_get_txt (lexer, ds);
+ tok = strdup (lex_tokcstr (lexer));
+ if (lex_match_id (lexer, "TXT"))
+ {
+ free (tok);
+ return parse_get_txt (lexer, ds);
+ }
+ else if (lex_match_id (lexer, "PSQL"))
+ {
+ free (tok);
+ return parse_get_psql (lexer, ds);
+ }
+ else if (lex_match_id (lexer, "GNM") ||
+ lex_match_id (lexer, "ODS"))
+ {
+ struct casereader *reader = NULL;
+ struct dictionary *dict = NULL;
+ struct spreadsheet_read_info sri;
+ struct spreadsheet_read_options opts;
+ if (!parse_spreadsheet (lexer, &sri, &opts))
+ goto error;
+
+ if ( 0 == strncasecmp (tok, "GNM", 3))
+ {
+ 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))
+ {
+ reader = ods_open_reader (&sri, &opts, &dict);
+ }