Added a maxcol state
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 27 Jan 2013 10:38:18 +0000 (11:38 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 16 Feb 2013 14:03:51 +0000 (15:03 +0100)
src/data/gnumeric-reader.c
src/ui/gui/psppire-spreadsheet-model.c

index 89b7271a6791ffe895db56267f090af87ec10fda..aa0e161d4aff067d8261706cef2ff51a35a768d9 100644 (file)
@@ -81,6 +81,7 @@ enum reader_state
     STATE_SHEET_START,     /* Found the start of a sheet */
     STATE_SHEET_NAME,      /* Found the sheet name */
     STATE_MAXROW,
+    STATE_MAXCOL,
     STATE_SHEET_FOUND,     /* Found the sheet that we actually want */
     STATE_CELLS_START,     /* Found the start of the cell array */
     STATE_CELL             /* Found a cell */
@@ -89,7 +90,6 @@ enum reader_state
 struct sheet_detail
 {
   xmlChar *name;
-  char *range;
 };
 
 
@@ -106,17 +106,17 @@ struct gnumeric_reader
   int min_col;
   int node_type;
   int sheet_index;
+
+  int start_col;
+  int stop_col;
+  int start_row;
+  int stop_row;
   
   struct sheet_detail *sheets;
 
   const xmlChar *target_sheet;
   int target_sheet_index;
 
-  int start_row;
-  int start_col;
-  int stop_row;
-  int stop_col;
-
   struct caseproto *proto;
   struct dictionary *dict;
   struct ccase *first_case;
@@ -260,6 +260,11 @@ process_node (struct gnumeric_reader *r)
        {
          r->state = STATE_MAXROW;
        }
+      else if (0 == xmlStrcasecmp (name, _xml("gnm:MaxCol"))  &&
+         XML_READER_TYPE_ELEMENT  == r->node_type)
+       {
+         r->state = STATE_MAXCOL;
+       }
       else if (0 == xmlStrcasecmp (name, _xml("gnm:Sheet"))  &&
          XML_READER_TYPE_END_ELEMENT  == r->node_type)
        {
@@ -272,6 +277,24 @@ process_node (struct gnumeric_reader *r)
        {
          r->state = STATE_SHEET_FOUND;
        }
+      else if (r->node_type == XML_READER_TYPE_TEXT)
+       {
+         xmlChar *value = xmlTextReaderValue (r->xtr);
+         xmlFree (value);
+       }
+      break;
+    case STATE_MAXCOL:
+      if (0 == xmlStrcasecmp (name, _xml("gnm:MaxCol"))  &&
+         XML_READER_TYPE_END_ELEMENT  == r->node_type)
+       {
+         r->state = STATE_SHEET_FOUND;
+       }
+      else if (r->node_type == XML_READER_TYPE_TEXT)
+       {
+         xmlChar *value = xmlTextReaderValue (r->xtr);
+         xmlFree (value);
+       }
+      break;
     case STATE_CELLS_START:
       if (0 == xmlStrcasecmp (name, _xml ("gnm:Cell"))  &&
          XML_READER_TYPE_ELEMENT  == r->node_type)
index 9bdb030b233187a5edc3945c17171d20b0f1cb55..83c6a5b286b9cb4f24a5055a5a929f90127e2065 100644 (file)
@@ -267,8 +267,8 @@ tree_model_get_value (GtkTreeModel * model, GtkTreeIter * iter,
       }
       break;
     default:
-      g_error ("%s:%d Invalid column in spreadsheet model", __FILE__,
-               __LINE__);
+      g_error ("%s:%d Invalid column in spreadsheet model",
+              __FILE__, __LINE__);
       break;
     }
 }