- r->xtr = xmlReaderForIO ((xmlInputReadCallback) gzread,
- (xmlInputCloseCallback) gzclose, gz,
- NULL, NULL, 0);
+ r->target_sheet = NULL;
+ r->target_sheet_index = -1;
+
+
+ /* Advance to the start of the workbook.
+ This gives us some confidence that we are actually dealing with a gnumeric
+ spreadsheet.
+ */
+ while ( (r->state != STATE_INIT )
+ && 1 == (ret = xmlTextReaderRead (r->xtr)))
+ {
+ process_node (r);
+ }
+
+ if (ret != 1)
+ {
+ /* Not a gnumeric spreadsheet */
+ xmlFreeTextReader (r->xtr);
+ free (r);
+ return NULL;
+ }
+
+ r->spreadsheet.type = SPREADSHEET_GNUMERIC;
+ r->spreadsheet.file_name = filename;
+
+ return &r->spreadsheet;
+}
+
+
+struct casereader *
+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;
+ int i;
+ struct var_spec *var_spec = NULL;
+ int n_var_specs = 0;