[gnumeric] Speed up loading of some ODF files. [#704422]
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Speed up loading of some ODF files. [#704422]
- Date: Sat, 20 Jul 2013 01:53:18 +0000 (UTC)
commit a8fffc087a409ccfd6f5ad283a412a0c3931c649
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date: Fri Jul 19 19:52:12 2013 -0600
Speed up loading of some ODF files. [#704422]
2013-07-19 Andreas J. Guelzow <aguelzow pyrshep ca>
* openoffice-read.c (oo_table_start): depends on a preparse
(odf_preparse_table_start): new
(odf_sheet_suggest_size): new
(odf_preparse_table_end): new
(odf_preparse_row_start): new
(odf_preparse_row_end): new
(odf_preparse_cell_start): new
(odf_preparse_covered_cell_start): new
(opendoc_content_preparse_dtd): new
(openoffice_file_open): preparse content.xml to create sheets of the
proper size.
NEWS | 1 +
plugins/openoffice/ChangeLog | 14 +
plugins/openoffice/openoffice-read.c | 503 +++++++++++++++++++++++++++++-----
3 files changed, 453 insertions(+), 65 deletions(-)
---
diff --git a/NEWS b/NEWS
index 5593964..7267238 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ Andreas:
* Export custom shapes. [#704421]
* Fix export to ODF of empty cells with default column styles. [#704563]
* Improve import to ODF of empty cells with default column styles. [#704563]
+ * Speed up loading of some ODF files. [#704422]
Jean:
* Fix text wrap inside sheet objects. [#704417]
diff --git a/plugins/openoffice/ChangeLog b/plugins/openoffice/ChangeLog
index 2ba843c..0e171cc 100644
--- a/plugins/openoffice/ChangeLog
+++ b/plugins/openoffice/ChangeLog
@@ -1,5 +1,19 @@
2013-07-19 Andreas J. Guelzow <aguelzow pyrshep ca>
+ * openoffice-read.c (oo_table_start): depends on a preparse
+ (odf_preparse_table_start): new
+ (odf_sheet_suggest_size): new
+ (odf_preparse_table_end): new
+ (odf_preparse_row_start): new
+ (odf_preparse_row_end): new
+ (odf_preparse_cell_start): new
+ (odf_preparse_covered_cell_start): new
+ (opendoc_content_preparse_dtd): new
+ (openoffice_file_open): preparse content.xml to create sheets of the
+ proper size.
+
+2013-07-19 Andreas J. Guelzow <aguelzow pyrshep ca>
+
* openoffice-write.c (oo_table_end): just look at the data extent to
adjust styles
(oo_update_style_extent): delete and remove all calls
diff --git a/plugins/openoffice/openoffice-read.c b/plugins/openoffice/openoffice-read.c
index c609dbb..6ac5d96 100644
--- a/plugins/openoffice/openoffice-read.c
+++ b/plugins/openoffice/openoffice-read.c
@@ -381,6 +381,7 @@ struct _OOParseState {
OOChartInfo chart;
GSList *chart_list; /* object_offset_t */
GnmParsePos pos;
+ int table_n;
GnmCellPos extent_data;
GnmComment *cell_comment;
GnmCell *curr_cell;
@@ -464,7 +465,7 @@ struct _OOParseState {
int rep_cols_to;
} print;
- char const *object_name;
+ char *object_name; /* also used for table during preparsing */
OOControl *cur_control;
OOSettings settings;
@@ -2195,10 +2196,8 @@ odf_pi_parse_expressions (GsfXMLIn *xin, PrintInformation *pi)
static void
oo_table_start (GsfXMLIn *xin, xmlChar const **attrs)
{
- /* <table:table table:name="Result" table:style-name="ta1"> */
OOParseState *state = (OOParseState *)xin->user_state;
gchar *style_name = NULL;
- gchar *table_name = NULL;
gchar *print_range = NULL;
gboolean do_not_print = FALSE, tmp_b;
@@ -2212,65 +2211,17 @@ oo_table_start (GsfXMLIn *xin, xmlChar const **attrs)
state->print.rep_cols_to = -1;
for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2)
- if (gsf_xml_in_namecmp (xin, CXML2C (attrs[0]), OO_NS_TABLE, "name")) {
- table_name = g_strdup (CXML2C (attrs[1]));
- } else if (gsf_xml_in_namecmp (xin, CXML2C (attrs[0]), OO_NS_TABLE, "style-name")) {
+ /* We need not check for the table name since we did that during pre-parsing */
+ /* if (gsf_xml_in_namecmp (xin, CXML2C (attrs[0]), OO_NS_TABLE, "name")) { */
+ if (gsf_xml_in_namecmp (xin, CXML2C (attrs[0]), OO_NS_TABLE, "style-name")) {
style_name = g_strdup (CXML2C (attrs[1]));
} else if (gsf_xml_in_namecmp (xin, CXML2C (attrs[0]), OO_NS_TABLE, "print-ranges")) {
print_range = g_strdup (CXML2C (attrs[1]));
} else if (oo_attr_bool (xin, attrs, OO_NS_TABLE, "print", &tmp_b))
do_not_print = !tmp_b;
- if (table_name != NULL) {
- state->pos.sheet = workbook_sheet_by_name (state->pos.wb, table_name);
- if (NULL == state->pos.sheet) {
- state->pos.sheet = sheet_new (state->pos.wb, table_name, 256, 65536);
- workbook_sheet_attach (state->pos.wb, state->pos.sheet);
- } else {
- /* We either have a corrupted file with a duplicate */
- /* sheet name or the sheet was created implicitly. */
- if (NULL != g_slist_find (state->sheet_order, state->pos.sheet)) {
- /* corrupted file! */
- char *new_name, *base;
-
- base = g_strdup_printf (_("%s_IN_CORRUPTED_FILE"), table_name);
- new_name = workbook_sheet_get_free_name (state->pos.wb,
- base, FALSE, FALSE);
- g_free (base);
-
- oo_warning (xin, _("This file is corrupted with a "
- "duplicate sheet name \"%s\", "
- "now renamed to \"%s\"."),
- table_name, new_name);
- state->pos.sheet = sheet_new (state->pos.wb, new_name,
- gnm_conf_get_core_workbook_n_cols (),
- gnm_conf_get_core_workbook_n_rows ());
- workbook_sheet_attach (state->pos.wb, state->pos.sheet);
- g_free (new_name);
- }
- }
- } else {
- table_name = workbook_sheet_get_free_name (state->pos.wb,
- _("SHEET_IN_CORRUPTED_FILE"),
- TRUE, FALSE);
- state->pos.sheet = sheet_new (state->pos.wb, table_name,
- gnm_conf_get_core_workbook_n_cols (),
- gnm_conf_get_core_workbook_n_rows ());
- workbook_sheet_attach (state->pos.wb, state->pos.sheet);
-
- /* We are missing the table name. This is bad! */
- oo_warning (xin, _("This file is corrupted with an "
- "unnamed sheet "
- "now named \"%s\"."),
- table_name);
- }
-
- g_free (table_name);
-
- /* Store sheets in correct order in case we implicitly
- * created one out of order */
- state->sheet_order = g_slist_prepend
- (state->sheet_order, state->pos.sheet);
+ state->pos.sheet = g_slist_nth_data (state->sheet_order, state->table_n);
+ ++state->table_n;
if (style_name != NULL) {
OOSheetStyle const *style = g_hash_table_lookup (state->styles.sheet, style_name);
@@ -10449,6 +10400,154 @@ oo_marker (GsfXMLIn *xin, xmlChar const **attrs)
}
+/****************** These are the preparse functions ***********************/
+
+
+static void
+odf_preparse_table_start (GsfXMLIn *xin, xmlChar const **attrs)
+{
+ OOParseState *state = (OOParseState *)xin->user_state;
+
+ state->pos.eval.col = 0;
+ state->pos.eval.row = 0;
+ state->extent_data.col = 0;
+ state->extent_data.row = 0;
+ state->object_name = NULL;
+
+ for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2)
+ if (gsf_xml_in_namecmp (xin, CXML2C (attrs[0]), OO_NS_TABLE, "name"))
+ state->object_name = g_strdup (CXML2C (attrs[1]));
+}
+
+static void
+odf_sheet_suggest_size (GsfXMLIn *xin, int *cols, int *rows)
+{
+ int c = GNM_MIN_COLS;
+ int r = GNM_MIN_ROWS;
+
+ while (c < *cols && c < GNM_MAX_COLS)
+ c *= 2;
+
+ while (r < *rows && r < GNM_MAX_ROWS)
+ r *= 2;
+
+ while (!gnm_sheet_valid_size (c, r))
+ gnm_sheet_suggest_size (&c, &r);
+
+ if (*cols > c || *rows > r)
+ oo_warning (xin, _("The sheet size of %i columns and %i rows used in this file "
+ "exceeds Gnumeric's maximum supported sheet size"), *cols, *rows);
+
+ *cols = c;
+ *rows = r;
+}
+
+
+static void
+odf_preparse_table_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
+{
+ OOParseState *state = (OOParseState *)xin->user_state;
+ int rows, cols;
+ char *table_name = state->object_name;
+ Sheet *sheet;
+
+ cols = state->extent_data.col + 1;
+ rows = state->extent_data.row + 1;
+ odf_sheet_suggest_size (xin, &cols, &rows);
+
+ if (table_name != NULL) {
+ sheet = workbook_sheet_by_name (state->pos.wb, table_name);
+ if (NULL == sheet) {
+ sheet = sheet_new (state->pos.wb, table_name, cols, rows);
+ workbook_sheet_attach (state->pos.wb, sheet);
+ } else {
+ /* We have a corrupted file with a duplicate sheet name */
+ char *new_name, *base;
+
+ base = g_strdup_printf (_("%s_IN_CORRUPTED_FILE"), table_name);
+ new_name = workbook_sheet_get_free_name (state->pos.wb,
+ base, FALSE, FALSE);
+ g_free (base);
+
+ oo_warning (xin, _("This file is corrupted with a "
+ "duplicate sheet name \"%s\", "
+ "now renamed to \"%s\"."),
+ table_name, new_name);
+ sheet = sheet_new (state->pos.wb, new_name, cols, rows);
+ workbook_sheet_attach (state->pos.wb, sheet);
+ g_free (new_name);
+ }
+ } else {
+ table_name = workbook_sheet_get_free_name (state->pos.wb,
+ _("SHEET_IN_CORRUPTED_FILE"),
+ TRUE, FALSE);
+ sheet = sheet_new (state->pos.wb, table_name, cols, rows);
+ workbook_sheet_attach (state->pos.wb, sheet);
+
+ /* We are missing the table name. This is bad! */
+ oo_warning (xin, _("This file is corrupted with an "
+ "unnamed sheet "
+ "now named \"%s\"."),
+ table_name);
+ }
+ g_free (table_name);
+ state->object_name = NULL;
+
+ /* Store sheets in correct order in case we implicitly
+ * created one out of order */
+ state->sheet_order = g_slist_prepend
+ (state->sheet_order, sheet);
+}
+
+
+static void
+odf_preparse_row_start (GsfXMLIn *xin, xmlChar const **attrs)
+{
+ OOParseState *state = (OOParseState *)xin->user_state;
+
+ state->pos.eval.col = 0;
+ state->row_inc = 1;
+
+ for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2)
+ if (oo_attr_int_range (xin, attrs, OO_NS_TABLE, "number-rows-repeated", &state->row_inc, 0,
INT_MAX));
+}
+
+static void
+odf_preparse_row_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
+{
+ OOParseState *state = (OOParseState *)xin->user_state;
+ state->pos.eval.row += state->row_inc;
+}
+
+static void
+odf_preparse_cell_start (GsfXMLIn *xin, xmlChar const **attrs)
+{
+ OOParseState *state = (OOParseState *)xin->user_state;
+
+ state->col_inc = 1;
+
+ for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2)
+ if (oo_attr_int_range (xin, attrs, OO_NS_TABLE, "number-columns-repeated",
+ &state->col_inc, 0, INT_MAX));
+
+ oo_update_data_extent (state, state->col_inc, state->row_inc);
+ state->pos.eval.col += state->col_inc;
+}
+
+static void
+odf_preparse_covered_cell_start (GsfXMLIn *xin, xmlChar const **attrs)
+{
+ OOParseState *state = (OOParseState *)xin->user_state;
+
+ state->col_inc = 1;
+ for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2)
+ if (oo_attr_int_range (xin, attrs, OO_NS_TABLE, "number-columns-repeated",
+ &state->col_inc, 0, INT_MAX));
+ state->pos.eval.col += state->col_inc;
+}
+
+
+
/**************************************************************************/
static void
@@ -11010,6 +11109,272 @@ static GsfXMLInNode const opendoc_content_dtd [] =
GSF_XML_IN_NODE_END
};
+static GsfXMLInNode const opendoc_content_preparse_dtd [] =
+{
+ GSF_XML_IN_NODE_FULL (START, START, -1, NULL, GSF_XML_NO_CONTENT, FALSE, TRUE, NULL, NULL, 0),
+ GSF_XML_IN_NODE (START, OFFICE, OO_NS_OFFICE, "document-content", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE, SCRIPT, OO_NS_OFFICE, "scripts", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE, OFFICE_FONTS, OO_NS_OFFICE, "font-face-decls", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (OFFICE_FONTS, FONT_FACE, OO_NS_STYLE, "font-face", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (OFFICE, OFFICE_STYLES, OO_NS_OFFICE, "automatic-styles", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, STYLE, OO_NS_STYLE, "style", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE, TABLE_CELL_PROPS, OO_NS_STYLE, "table-cell-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE, TABLE_COL_PROPS, OO_NS_STYLE, "table-column-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE, TABLE_ROW_PROPS, OO_NS_STYLE, "table-row-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE, CHART_PROPS, OO_NS_STYLE, "chart-properties", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (STYLE, TEXT_PROPS, OO_NS_STYLE, "text-properties", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (STYLE, TABLE_PROPS, OO_NS_STYLE, "table-properties", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (STYLE, PARAGRAPH_PROPS, OO_NS_STYLE, "paragraph-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (PARAGRAPH_PROPS, PARA_TABS, OO_NS_STYLE, "tab-stops", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (STYLE, GRAPHIC_PROPS, OO_NS_STYLE, "graphic-properties", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (STYLE, STYLE_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, NUMBER_STYLE, OO_NS_NUMBER, "number-style", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_NUMBER, OO_NS_NUMBER, "number",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (NUMBER_STYLE_NUMBER, NUMBER_EMBEDDED_TEXT, OO_NS_NUMBER, "embedded-text",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_TEXT, OO_NS_NUMBER, "text", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_FRACTION, OO_NS_NUMBER, "fraction",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_SCI_STYLE_PROP, OO_NS_NUMBER, "scientific-number",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, DATE_STYLE, OO_NS_NUMBER, "date-style", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_DAY, OO_NS_NUMBER, "day", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_MONTH, OO_NS_NUMBER, "month", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_YEAR, OO_NS_NUMBER, "year", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_ERA, OO_NS_NUMBER, "era", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_DAY_OF_WEEK, OO_NS_NUMBER, "day-of-week",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_WEEK_OF_YEAR, OO_NS_NUMBER, "week-of-year",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_QUARTER, OO_NS_NUMBER, "quarter",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_HOURS, OO_NS_NUMBER, "hours", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_MINUTES, OO_NS_NUMBER, "minutes",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_SECONDS, OO_NS_NUMBER, "seconds",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_TEXT, OO_NS_NUMBER, "text", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATE_STYLE, DATE_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, TIME_STYLE, OO_NS_NUMBER, "time-style", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (TIME_STYLE, TIME_HOURS, OO_NS_NUMBER, "hours", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TIME_STYLE, TIME_MINUTES, OO_NS_NUMBER, "minutes", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TIME_STYLE, TIME_SECONDS, OO_NS_NUMBER, "seconds", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TIME_STYLE, TIME_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TIME_STYLE, TIME_TEXT, OO_NS_NUMBER, "text", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TIME_STYLE, TIME_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TIME_STYLE, TIME_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, STYLE_BOOL, OO_NS_NUMBER, "boolean-style", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_BOOL, BOOL_PROP, OO_NS_NUMBER, "boolean", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, STYLE_CURRENCY, OO_NS_NUMBER, "currency-style",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_STYLE, OO_NS_NUMBER, "number", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_STYLE_PROP, OO_NS_STYLE,"properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_SYMBOL, OO_NS_NUMBER, "currency-symbol",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_TEXT, OO_NS_NUMBER, "text", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, STYLE_PERCENTAGE, OO_NS_NUMBER, "percentage-style",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_STYLE_PROP, OO_NS_NUMBER, "number",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_TEXT, OO_NS_NUMBER, "text",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_MAP, OO_NS_STYLE, "map",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_STYLES, STYLE_TEXT, OO_NS_NUMBER, "text-style",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_TEXT, STYLE_TEXT_CONTENT, OO_NS_NUMBER, "text-content",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_TEXT, STYLE_TEXT_PROP, OO_NS_NUMBER, "text", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (STYLE_TEXT, STYLE_TEXT_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
NULL, NULL),
+
+ GSF_XML_IN_NODE (OFFICE, OFFICE_BODY, OO_NS_OFFICE, "body", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_BODY, SPREADSHEET, OO_NS_OFFICE, "spreadsheet", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (SPREADSHEET, DATA_PILOT_TABLES, OO_NS_TABLE, "data-pilot-tables",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_TABLES, DATA_PILOT_TABLE, OO_NS_TABLE, "data-pilot-table",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_TABLE, DPT_SOURCE_CELL_RANGE, OO_NS_TABLE, "source-cell-range",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_TABLE, DATA_PILOT_FIELD, OO_NS_TABLE, "data-pilot-field",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_FIELD, DATA_PILOT_LEVEL, OO_NS_TABLE, "data-pilot-level",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_LEVEL, DATA_PILOT_LAYOUT_INFO, OO_NS_TABLE,
"data-pilot-layout-info", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_LEVEL, DATA_PILOT_SORT_INFO, OO_NS_TABLE,
"data-pilot-sort-info", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_LEVEL, DATA_PILOT_DISPLAY_INFO, OO_NS_TABLE,
"data-pilot-display-info", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_LEVEL, DATA_PILOT_MEMBERS, OO_NS_TABLE, "data-pilot-members",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_MEMBERS, DATA_PILOT_MEMBER, OO_NS_TABLE,
"data-pilot-member", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_LEVEL, DATA_PILOT_SUBTOTALS, OO_NS_TABLE,
"data-pilot-subtotals", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_SUBTOTALS, DATA_PILOT_SUBTOTAL, OO_NS_TABLE,
"data-pilot-subtotal", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DATA_PILOT_FIELD, DATA_PILOT_GROUPS, OO_NS_TABLE, "data-pilot-groups",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (SPREADSHEET, CONTENT_VALIDATIONS, OO_NS_TABLE, "content-validations",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CONTENT_VALIDATIONS, CONTENT_VALIDATION, OO_NS_TABLE, "content-validation",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CONTENT_VALIDATION, ERROR_MESSAGE, OO_NS_TABLE, "error-message",
GSF_XML_NO_CONTENT, NULL , NULL),
+ GSF_XML_IN_NODE (ERROR_MESSAGE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TEXT_CONTENT, TEXT_S, OO_NS_TEXT, "s", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE_FULL (TEXT_CONTENT, TEXT_LINE_BREAK, OO_NS_TEXT, "line-break",
GSF_XML_NO_CONTENT, FALSE, FALSE, NULL, NULL, .v_str = "\n"),
+ GSF_XML_IN_NODE_FULL (TEXT_CONTENT, TEXT_TAB, OO_NS_TEXT, "tab", GSF_XML_SHARED_CONTENT,
FALSE, FALSE, odf_text_symbol, NULL, .v_str = "\t"),
+ GSF_XML_IN_NODE (TEXT_CONTENT, TEXT_SPAN, OO_NS_TEXT, "span",
GSF_XML_SHARED_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TEXT_SPAN, TEXT_SPAN, OO_NS_TEXT, "span", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TEXT_SPAN, TEXT_S, OO_NS_TEXT, "s", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TEXT_SPAN, TEXT_LINE_BREAK, OO_NS_TEXT, "line-break",
GSF_XML_NO_CONTENT, NULL, NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TEXT_SPAN, TEXT_TAB, OO_NS_TEXT, "tab", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TEXT_SPAN, TEXT_ADDR, OO_NS_TEXT, "a", GSF_XML_SHARED_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TEXT_ADDR, TEXT_S, OO_NS_TEXT, "s", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TEXT_ADDR, TEXT_TAB, OO_NS_TEXT, "tab", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TEXT_ADDR, TEXT_SPAN, OO_NS_TEXT, "span", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (SPREADSHEET, CALC_SETTINGS, OO_NS_TABLE, "calculation-settings",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CALC_SETTINGS, ITERATION, OO_NS_TABLE, "iteration", GSF_XML_NO_CONTENT,
oo_iteration, NULL),
+ GSF_XML_IN_NODE (CALC_SETTINGS, DATE_CONVENTION, OO_NS_TABLE, "null-date", GSF_XML_NO_CONTENT,
oo_date_convention, NULL),
+ GSF_XML_IN_NODE (SPREADSHEET, CHART, OO_NS_CHART, "chart", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_BODY, OFFICE_CHART, OO_NS_OFFICE, "chart", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (OFFICE_CHART, CHART_CHART, OO_NS_CHART, "chart", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_CHART, CHART_TABLE, OO_NS_TABLE, "table", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (CHART_TABLE, CHART_TABLE_ROWS, OO_NS_TABLE, "table-rows",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_ROWS, CHART_TABLE_ROW, OO_NS_TABLE, "table-row",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_ROW, CHART_TABLE_CELL, OO_NS_TABLE, "table-cell",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_CELL, CHART_CELL_P, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_CELL, CHART_CELL_DRAW_G, OO_NS_DRAW, "g",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_CELL_DRAW_G, CHART_CELL_SVG_DESC, OO_NS_SVG, "desc",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE, CHART_TABLE_COLS, OO_NS_TABLE, "table-columns",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_COLS, CHART_TABLE_COL, OO_NS_TABLE, "table-column",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE, CHART_TABLE_HROWS, OO_NS_TABLE, "table-header-rows",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_HROWS, CHART_TABLE_HROW, OO_NS_TABLE, "table-header-row",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_HROWS, CHART_TABLE_ROW, OO_NS_TABLE, "table-row",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (CHART_TABLE, CHART_TABLE_HCOLS, OO_NS_TABLE, "table-header-columns",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_HCOLS, CHART_TABLE_HCOL, OO_NS_TABLE, "table-header-column",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_TABLE_HCOLS, CHART_TABLE_COL, OO_NS_TABLE, "table-column",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+
+ GSF_XML_IN_NODE_FULL (CHART_CHART, CHART_TITLE, OO_NS_CHART, "title", GSF_XML_NO_CONTENT,
FALSE, FALSE, NULL, NULL, .v_int = 0),
+ GSF_XML_IN_NODE (CHART_TITLE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd Def */
+ GSF_XML_IN_NODE_FULL (CHART_CHART, CHART_SUBTITLE, OO_NS_CHART, "subtitle", GSF_XML_NO_CONTENT,
FALSE, FALSE, NULL, NULL, .v_int = 1),
+ GSF_XML_IN_NODE (CHART_SUBTITLE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd Def */
+ GSF_XML_IN_NODE_FULL (CHART_CHART, CHART_FOOTER, OO_NS_CHART, "footer", GSF_XML_NO_CONTENT,
FALSE, FALSE, NULL, NULL, .v_int = 2),
+ GSF_XML_IN_NODE (CHART_FOOTER, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd Def */
+ GSF_XML_IN_NODE (CHART_CHART, CHART_LEGEND, OO_NS_CHART, "legend", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (CHART_LEGEND, CHART_LEGEND_TITLE, OO_GNUM_NS_EXT, "title",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_LEGEND_TITLE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT,
NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (CHART_CHART, CHART_PLOT_AREA, OO_NS_CHART, "plot-area", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (CHART_PLOT_AREA, CHART_SERIES, OO_NS_CHART, "series", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (CHART_SERIES, SERIES_DOMAIN, OO_NS_CHART, "domain", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (CHART_SERIES, SERIES_DATA_PT, OO_NS_CHART, "data-point",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_SERIES, SERIES_DATA_ERR, OO_NS_CHART, "error-indicator",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_SERIES, SERIES_REGRESSION, OO_NS_CHART, "regression-curve",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (SERIES_REGRESSION, SERIES_REG_EQ, OO_NS_CHART, "equation",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (SERIES_REGRESSION, SERIES_REG_EQ_GNM, OO_GNUM_NS_EXT, "equation",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_SERIES, SERIES_REGRESSION_MULTIPLE, OO_GNUM_NS_EXT,
"regression-curve", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (SERIES_REGRESSION_MULTIPLE, SERIES_REG_EQ, OO_NS_CHART, "equation",
GSF_XML_NO_CONTENT, NULL, NULL),/* 2nd Def */
+ GSF_XML_IN_NODE (SERIES_REGRESSION_MULTIPLE, SERIES_REG_EQ_GNM, OO_GNUM_NS_EXT,
"equation", GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (CHART_SERIES, SERIES_DROPLINES, OO_GNUM_NS_EXT, "droplines",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_PLOT_AREA, CHART_WALL, OO_NS_CHART, "wall", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (CHART_PLOT_AREA, CHART_FLOOR, OO_NS_CHART, "floor", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (CHART_PLOT_AREA, CHART_AXIS, OO_NS_CHART, "axis", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (CHART_AXIS, CHART_GRID, OO_NS_CHART, "grid", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (CHART_AXIS, CHART_AXIS_CAT, OO_NS_CHART, "categories",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE_FULL (CHART_AXIS, CHART_AXIS_TITLE, OO_NS_CHART, "title",
GSF_XML_NO_CONTENT, FALSE, FALSE, NULL, NULL, .v_int = 3),
+ GSF_XML_IN_NODE (CHART_AXIS_TITLE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT,
NULL, NULL),/* 2nd Def */
+#ifdef HAVE_OO_NS_CHART_OOO
+ GSF_XML_IN_NODE (CHART_PLOT_AREA, CHART_OOO_COORDINATE_REGION, OO_NS_CHART_OOO,
"coordinate-region", GSF_XML_NO_CONTENT, NULL, NULL),
+#endif
+ GSF_XML_IN_NODE (SPREADSHEET, TABLE, OO_NS_TABLE, "table", GSF_XML_NO_CONTENT,
&odf_preparse_table_start, &odf_preparse_table_end),
+ GSF_XML_IN_NODE (TABLE, SHEET_SELECTIONS, OO_GNUM_NS_EXT, "selections", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (SHEET_SELECTIONS, SELECTION, OO_GNUM_NS_EXT, "selection",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE, TABLE_SOURCE, OO_NS_TABLE, "table-source", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TABLE, TABLE_SHAPES, OO_NS_TABLE, "shapes", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_SHAPES, DRAW_FRAME, OO_NS_DRAW, "frame", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TABLE_SHAPES, DRAW_CAPTION, OO_NS_DRAW, "caption", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DRAW_CAPTION, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_SHAPES, DRAW_CUSTOM_SHAPE, OO_NS_DRAW, "custom-shape",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DRAW_CUSTOM_SHAPE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT,
NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (DRAW_CUSTOM_SHAPE, DRAW_ENHANCED_GEOMETRY, OO_NS_DRAW,
"enhanced-geometry", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DRAW_ENHANCED_GEOMETRY, DRAW_ENHANCED_GEOMETRY_EQUATION, OO_NS_DRAW, "equation",
GSF_XML_NO_CONTENT, odf_custom_shape_equation, NULL),
+ GSF_XML_IN_NODE (DRAW_ENHANCED_GEOMETRY, DRAW_ENHANCED_GEOMETRY_HANDLE, OO_NS_DRAW, "handle",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_SHAPES, DRAW_ELLIPSE, OO_NS_DRAW, "ellipse", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DRAW_ELLIPSE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_SHAPES, DRAW_LINE, OO_NS_DRAW, "line", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DRAW_LINE, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_SHAPES, DRAW_RECT, OO_NS_DRAW, "rect", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DRAW_RECT, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE, FORMS, OO_NS_OFFICE, "forms", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORMS, FORM, OO_NS_FORM, "form", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORM, FORM_PROPERTIES, OO_NS_FORM, "properties", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (FORM_PROPERTIES, FORM_PROPERTY, OO_NS_FORM, "property",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORM_PROPERTIES, FORM_LIST_PROPERTY, OO_NS_FORM, "list-property",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORM, FORM_BUTTON, OO_NS_FORM, "button", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORM_BUTTON, FORM_PROPERTIES, OO_NS_FORM, "properties",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (FORM_BUTTON, BUTTON_OFFICE_EVENT_LISTENERS, OO_NS_OFFICE,
"event-listeners", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (BUTTON_OFFICE_EVENT_LISTENERS, BUTTON_EVENT_LISTENER, OO_NS_SCRIPT,
"event-listener", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORM, FORM_VALUE_RANGE, OO_NS_FORM, "value-range", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (FORM_VALUE_RANGE, FORM_PROPERTIES, OO_NS_FORM, "properties",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (FORM, FORM_CHECKBOX, OO_NS_FORM, "checkbox", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (FORM_CHECKBOX, FORM_PROPERTIES, OO_NS_FORM, "properties",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (FORM, FORM_RADIO, OO_NS_FORM, "radio", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORM_RADIO, FORM_PROPERTIES, OO_NS_FORM, "properties",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (FORM, FORM_LISTBOX, OO_NS_FORM, "listbox", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FORM_LISTBOX, FORM_PROPERTIES, OO_NS_FORM, "properties",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (FORM, FORM_COMBOBOX, OO_NS_FORM, "combobox", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (FORM_COMBOBOX, FORM_PROPERTIES, OO_NS_FORM, "properties",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (FORM, FORM_GENERIC, OO_NS_FORM, "generic-control", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (FORM_GENERIC, FORM_PROPERTIES, OO_NS_FORM, "properties",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd Def */
+ GSF_XML_IN_NODE (TABLE, TABLE_ROWS, OO_NS_TABLE, "table-rows", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE, TABLE_H_ROWS, OO_NS_TABLE, "table-header-rows", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (TABLE, TABLE_COL, OO_NS_TABLE, "table-column", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE, TABLE_COLS, OO_NS_TABLE, "table-columns", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TABLE, TABLE_H_COLS, OO_NS_TABLE, "table-header-columns", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_H_COLS, TABLE_COL, OO_NS_TABLE, "table-column", GSF_XML_NO_CONTENT,
NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_COLS, TABLE_COL, OO_NS_TABLE, "table-column", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE, TABLE_ROW, OO_NS_TABLE, "table-row", GSF_XML_NO_CONTENT,
&odf_preparse_row_start, &odf_preparse_row_end),
+ GSF_XML_IN_NODE (TABLE, SOFTPAGEBREAK, OO_NS_TEXT, "soft-page-break", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TABLE_ROWS, TABLE_ROW, OO_NS_TABLE, "table-row", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_H_ROWS, TABLE_ROW, OO_NS_TABLE, "table-row", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_ROWS, SOFTPAGEBREAK, OO_NS_TEXT, "soft-page-break", GSF_XML_NO_CONTENT,
NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_H_ROWS, SOFTPAGEBREAK, OO_NS_TEXT, "soft-page-break",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_ROW, TABLE_CELL, OO_NS_TABLE, "table-cell", GSF_XML_NO_CONTENT,
&odf_preparse_cell_start, NULL),
+ GSF_XML_IN_NODE (TABLE_CELL, DRAW_CUSTOM_SHAPE, OO_NS_DRAW, "custom-shape",
GSF_XML_NO_CONTENT, NULL, NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TABLE_CELL, CELL_TEXT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CELL_TEXT, DRAW_CUSTOM_SHAPE, OO_NS_DRAW, "custom-shape",
GSF_XML_NO_CONTENT, NULL, NULL),/* 2nd def */
+ GSF_XML_IN_NODE (CELL_TEXT, TEXT_S, OO_NS_TEXT, "s", GSF_XML_NO_CONTENT, NULL, NULL),/*
2nd def */
+ GSF_XML_IN_NODE (CELL_TEXT, TEXT_ADDR, OO_NS_TEXT, "a", GSF_XML_NO_CONTENT, NULL, NULL),
/* 2nd def */
+ GSF_XML_IN_NODE (CELL_TEXT, TEXT_LINE_BREAK, OO_NS_TEXT, "line-break",
GSF_XML_NO_CONTENT, NULL, NULL),/* 2nd def */
+ GSF_XML_IN_NODE (CELL_TEXT, TEXT_TAB, OO_NS_TEXT, "tab", GSF_XML_NO_CONTENT,NULL, NULL
),/* 2nd def */
+ GSF_XML_IN_NODE (CELL_TEXT, TEXT_SPAN, OO_NS_TEXT, "span", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TEXT_SPAN, TEXT_ADDR, OO_NS_TEXT, "a", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TABLE_CELL, CELL_OBJECT, OO_NS_DRAW, "object", GSF_XML_NO_CONTENT, NULL,
NULL), /* ignore for now */
+ GSF_XML_IN_NODE (TABLE_CELL, CELL_GRAPHIC, OO_NS_DRAW, "g", GSF_XML_NO_CONTENT, NULL,
NULL), /* ignore for now */
+ GSF_XML_IN_NODE (CELL_GRAPHIC, CELL_GRAPHIC, OO_NS_DRAW, "g", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (CELL_GRAPHIC, DRAW_POLYLINE, OO_NS_DRAW, "polyline", GSF_XML_NO_CONTENT,
NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_CELL, DRAW_CONTROL, OO_NS_DRAW, "control", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (TABLE_CELL, DRAW_RECT, OO_NS_DRAW, "rect", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_CELL, DRAW_LINE, OO_NS_DRAW, "line", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_CELL, DRAW_ELLIPSE, OO_NS_DRAW, "ellipse", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_CELL, DRAW_FRAME, OO_NS_DRAW, "frame", GSF_XML_NO_CONTENT, NULL,
NULL),/* 2nd def */
+ GSF_XML_IN_NODE (DRAW_FRAME, DRAW_OBJECT, OO_NS_DRAW, "object", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DRAW_OBJECT, DRAW_OBJECT_TEXT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT,
NULL, NULL),
+
+ GSF_XML_IN_NODE (DRAW_FRAME, DRAW_IMAGE, OO_NS_DRAW, "image", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DRAW_IMAGE, DRAW_IMAGE_TEXT,OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DRAW_FRAME, SVG_DESC, OO_NS_SVG, "desc", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (DRAW_FRAME, DRAW_TEXT_BOX, OO_NS_DRAW, "text-box", GSF_XML_NO_CONTENT,
NULL, od_draw_text_frame_end),
+ GSF_XML_IN_NODE (DRAW_TEXT_BOX, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT, NULL,
NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_CELL, CELL_ANNOTATION, OO_NS_OFFICE, "annotation",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CELL_ANNOTATION, TEXT_CONTENT, OO_NS_TEXT, "p", GSF_XML_NO_CONTENT,
NULL, NULL),/* 2nd def */
+ GSF_XML_IN_NODE (CELL_ANNOTATION, CELL_ANNOTATION_AUTHOR, OO_NS_DC, "creator",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CELL_ANNOTATION, CELL_ANNOTATION_DATE, OO_NS_DC, "date",
GSF_XML_NO_CONTENT, NULL, NULL),
+
+ GSF_XML_IN_NODE (TABLE_ROW, TABLE_COVERED_CELL, OO_NS_TABLE, "covered-table-cell",
GSF_XML_NO_CONTENT, &odf_preparse_covered_cell_start, NULL),
+ GSF_XML_IN_NODE (TABLE_COVERED_CELL, COVERED_CELL_TEXT, OO_NS_TEXT, "p",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (COVERED_CELL_TEXT, COVERED_CELL_TEXT_S, OO_NS_TEXT, "s",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_COVERED_CELL, DRAW_CONTROL, OO_NS_DRAW, "control",
GSF_XML_NO_CONTENT, NULL, NULL),
+
+ GSF_XML_IN_NODE (TABLE, TABLE_COL_GROUP, OO_NS_TABLE, "table-column-group", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_COL_GROUP, TABLE_COL_GROUP, OO_NS_TABLE, "table-column-group",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_COL_GROUP, TABLE_H_COLS, OO_NS_TABLE, "table-header-columns",
GSF_XML_NO_CONTENT, NULL, NULL),/* 2nd def */
+ GSF_XML_IN_NODE (TABLE_COL_GROUP, TABLE_COL, OO_NS_TABLE, "table-column", GSF_XML_NO_CONTENT,
NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE_ROW_GROUP, TABLE_ROW_GROUP, OO_NS_TABLE, "table-row-group",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE, TABLE_ROW_GROUP, OO_NS_TABLE, "table-row-group",
GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_ROW_GROUP, TABLE_ROW, OO_NS_TABLE, "table-row",
GSF_XML_NO_CONTENT, NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (TABLE, NAMED_EXPRS, OO_NS_TABLE, "named-expressions", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (SPREADSHEET, NAMED_EXPRS, OO_NS_TABLE, "named-expressions", GSF_XML_NO_CONTENT,
NULL, NULL), /* 2nd def */
+ GSF_XML_IN_NODE (NAMED_EXPRS, NAMED_EXPR, OO_NS_TABLE, "named-expression", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (NAMED_EXPRS, NAMED_RANGE, OO_NS_TABLE, "named-range", GSF_XML_NO_CONTENT, NULL,
NULL),
+
+ GSF_XML_IN_NODE (SPREADSHEET, DB_RANGES, OO_NS_TABLE, "database-ranges", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DB_RANGES, DB_RANGE, OO_NS_TABLE, "database-range", GSF_XML_NO_CONTENT, NULL,
NULL),
+ GSF_XML_IN_NODE (DB_RANGE, FILTER, OO_NS_TABLE, "filter", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (FILTER, FILTER_COND, OO_NS_TABLE, "filter-condition", GSF_XML_NO_CONTENT,
NULL, NULL),
+ GSF_XML_IN_NODE (DB_RANGE, TABLE_SORT, OO_NS_TABLE, "sort", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (TABLE_SORT, SORT_BY, OO_NS_TABLE, "sort-by", GSF_XML_NO_CONTENT, NULL, NULL),
+
+GSF_XML_IN_NODE_END
+};
+
+
static GsfXMLInNode const *get_dtd () { return opendoc_content_dtd; }
static GsfXMLInNode const *get_styles_dtd () { return styles_dtd; }
@@ -12033,6 +12398,8 @@ openoffice_file_open (G_GNUC_UNUSED GOFileOpener const *fo, GOIOContext *io_cont
state.text_p_for_cell.gstr = NULL;
state.text_p_for_cell.attrs = NULL;
+ state.table_n = 0;
+
go_io_progress_message (state.context, _("Reading file..."));
go_io_value_progress_set (state.context, gsf_input_size (contents), 0);
@@ -12053,6 +12420,13 @@ openoffice_file_open (G_GNUC_UNUSED GOFileOpener const *fo, GOIOContext *io_cont
}
}
+ doc = gsf_xml_in_doc_new (opendoc_content_preparse_dtd,
+ gsf_odf_get_ns ());
+ content_malformed = !gsf_xml_in_doc_parse (doc, contents, &state);
+ gsf_xml_in_doc_free (doc);
+ odf_clear_conventions (&state); /* contain references to xin */
+ state.sheet_order = g_slist_reverse (state.sheet_order);
+
if (NULL != styles) {
GsfXMLInDoc *doc = gsf_xml_in_doc_new (styles_dtd,
gsf_odf_get_ns ());
@@ -12062,15 +12436,14 @@ openoffice_file_open (G_GNUC_UNUSED GOFileOpener const *fo, GOIOContext *io_cont
g_object_unref (styles);
}
- doc = gsf_xml_in_doc_new ((state.ver == OOO_VER_1)
- ? ooo1_content_dtd
- : opendoc_content_dtd,
- gsf_odf_get_ns ());
- content_malformed = !gsf_xml_in_doc_parse (doc, contents, &state);
-
- /* get the sheet in the right order (in case something was
- * created out of order implictly) */
- state.sheet_order = g_slist_reverse (state.sheet_order);
+ if (!content_malformed) {
+ gsf_input_seek (contents, 0, G_SEEK_SET);
+ doc = gsf_xml_in_doc_new ((state.ver == OOO_VER_1)
+ ? ooo1_content_dtd
+ : opendoc_content_dtd,
+ gsf_odf_get_ns ());
+ content_malformed = !gsf_xml_in_doc_parse (doc, contents, &state);
+ }
if (g_slist_length (state.sheet_order) < (guint) workbook_sheet_count (state.pos.wb)) {
/* We have seen instances of ODF files generated by */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]