[gnumeric] ods: be more careful with quoting of text parts in formats.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] ods: be more careful with quoting of text parts in formats.
- Date: Tue, 2 Jul 2019 12:46:32 +0000 (UTC)
commit 590c2a3b1b5ed66fd77ecbcf71386a143c6731a9
Author: Morten Welinder <terra gnome org>
Date: Tue Jul 2 08:45:21 2019 -0400
ods: be more careful with quoting of text parts in formats.
NEWS | 2 +-
plugins/openoffice/ChangeLog | 7 ++
plugins/openoffice/openoffice-read.c | 167 ++++++++++++++++-------------------
3 files changed, 82 insertions(+), 94 deletions(-)
---
diff --git a/NEWS b/NEWS
index f75cb0ed3..bd7dc3006 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,7 @@
Gnumeric 1.12.46
Andreas:
- * Fix format import from ODF. [#403]
+ * Fix format import from ODF. [#403]
Morten:
* Fix over-eager guessing of dates in csv. [#401]
diff --git a/plugins/openoffice/ChangeLog b/plugins/openoffice/ChangeLog
index 7c9628227..1469a0fe5 100644
--- a/plugins/openoffice/ChangeLog
+++ b/plugins/openoffice/ChangeLog
@@ -1,3 +1,10 @@
+2019-07-02 Morten Welinder <terra gnome org>
+
+ * openoffice-read.c (oo_format_text_append): Avoid relying on tail
+ recursion being efficient. Be more careful about what to quote.
+ (oo_format_text_append_unquoted): Take a string instead of a
+ single character. Use to fix a few potential string quoting bugs.
+
2019-06-27 Andreas J. Guelzow <aguelzow pyrshep ca>
* openoffice-read.c (oo_format_text_append): new, use unless we are dealing with dates or times.
diff --git a/plugins/openoffice/openoffice-read.c b/plugins/openoffice/openoffice-read.c
index 5ba89c075..2942b50b3 100644
--- a/plugins/openoffice/openoffice-read.c
+++ b/plugins/openoffice/openoffice-read.c
@@ -5168,7 +5168,7 @@ odf_embedded_text_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
}
static void
-odf_date_text_start (GsfXMLIn *xin, G_GNUC_UNUSED xmlChar const **attrs)
+odf_format_text_start (GsfXMLIn *xin, G_GNUC_UNUSED xmlChar const **attrs)
{
OOParseState *state = (OOParseState *)xin->user_state;
state->cur_format.offset = 0;
@@ -5176,7 +5176,7 @@ odf_date_text_start (GsfXMLIn *xin, G_GNUC_UNUSED xmlChar const **attrs)
}
static void
-oo_date_text_append_quoted (OOParseState *state, char const *cnt, int cnt_len)
+oo_format_text_append_quoted (OOParseState *state, char const *cnt, int cnt_len)
{
if (!state->cur_format.string_opened)
g_string_append_c (state->cur_format.accum, '"');
@@ -5185,60 +5185,64 @@ oo_date_text_append_quoted (OOParseState *state, char const *cnt, int cnt_len)
}
static void
-oo_date_text_append_unquoted (OOParseState *state, char cnt)
+oo_format_text_append_unquoted (OOParseState *state, char const *cnt, int cnt_len)
{
if (state->cur_format.string_opened)
g_string_append_c (state->cur_format.accum, '"');
state->cur_format.string_opened = FALSE;
- g_string_append_c (state->cur_format.accum, cnt);
+ g_string_append_len (state->cur_format.accum, cnt, cnt_len);
}
-static void
-oo_date_text_append (OOParseState *state, char const *cnt, int cnt_len)
-{
- if (cnt_len > 0) {
- if (NULL != strchr (" /-(),:",*cnt)) {
- oo_date_text_append_unquoted (state, *cnt);
- oo_date_text_append (state, cnt + 1, cnt_len - 1);
- return;
- } else if (state->cur_format.percentage && *cnt == '%') {
- oo_date_text_append_unquoted (state, '%');
- state->cur_format.percent_sign_seen = TRUE;
- oo_date_text_append (state, cnt + 1, cnt_len - 1);
- return;
- } else if (*cnt == '"') {
- oo_date_text_append_unquoted (state, '\\');
- oo_date_text_append_unquoted (state, '"');
- oo_date_text_append (state, cnt + 1, cnt_len - 1);
- return;
- } else {
- oo_date_text_append_quoted (state, cnt, 1);
- oo_date_text_append (state, cnt + 1, cnt_len - 1);
- }
+// 0: must not; 1: must; -1: don't care; -2: escape outside quote
+static int
+xl_format_quoting_needs (char c, GOFormatFamily fam)
+{
+ gboolean numeric = (fam != GO_FORMAT_DATE &&
+ fam != GO_FORMAT_TIME &&
+ fam != GO_FORMAT_TEXT);
+
+ switch (c) {
+ case '$': case '+': case '(': case ')':
+ case ':': case '^': case '\'': case '=':
+ case '{': case '}': case '<': case '>':
+ case '-': case '!': case '&': case '~':
+ case ' ':
+ return -1;
+ case '"':
+ return -2;
+ default:
+ return 1;
+
+ case '/': case ',':
+ return numeric ? 1 : -1;
+ case '%':
+ return fam == GO_FORMAT_PERCENTAGE ? 0 : 1;
}
}
static void
-oo_format_text_append (OOParseState *state, char const *cnt, int cnt_len)
+oo_format_text_append (OOParseState *state, char const *cnt, int cnt_len,
+ GOFormatFamily fam)
{
- if (cnt_len > 0) {
- if (NULL != strchr (" -(),:",*cnt)) {
- oo_date_text_append_unquoted (state, *cnt);
- oo_format_text_append (state, cnt + 1, cnt_len - 1);
- return;
- } else if (state->cur_format.percentage && *cnt == '%') {
- oo_date_text_append_unquoted (state, '%');
+ for (; cnt_len > 0; cnt++, cnt_len--) {
+ if (fam == GO_FORMAT_PERCENTAGE && *cnt == '%')
state->cur_format.percent_sign_seen = TRUE;
- oo_format_text_append (state, cnt + 1, cnt_len - 1);
- return;
- } else if (*cnt == '"') {
- oo_date_text_append_unquoted (state, '\\');
- oo_date_text_append_unquoted (state, '"');
- oo_format_text_append (state, cnt + 1, cnt_len - 1);
- return;
- } else {
- oo_date_text_append_quoted (state, cnt, 1);
- oo_format_text_append (state, cnt + 1, cnt_len - 1);
+
+ switch (xl_format_quoting_needs (*cnt, fam)) {
+ case 0:
+ oo_format_text_append_unquoted (state, cnt, 1);
+ break;
+ case 1:
+ oo_format_text_append_quoted (state, cnt, 1);
+ break;
+ case -2:
+ oo_format_text_append_unquoted (state, "\\", 1);
+ // Fall through
+ case -1:
+ g_string_append_c (state->cur_format.accum, *cnt);
+ break;
+ default:
+ g_assert_not_reached ();
}
}
}
@@ -5247,37 +5251,17 @@ static void
oo_format_text_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
{
OOParseState *state = (OOParseState *)xin->user_state;
+ GOFormatFamily fam = xin->node->user_data.v_int;
if (state->cur_format.accum == NULL)
return;
if (xin->content->len > state->cur_format.offset)
oo_format_text_append (state, xin->content->str + state->cur_format.offset,
- xin->content->len - state->cur_format.offset);
-
- if (state->cur_format.string_opened) {
- g_string_append_c (state->cur_format.accum, '"');
- state->cur_format.string_opened = FALSE;
- }
- state->cur_format.offset = 0;
-}
-
-static void
-oo_date_text_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
-{
- OOParseState *state = (OOParseState *)xin->user_state;
-
- if (state->cur_format.accum == NULL)
- return;
+ xin->content->len - state->cur_format.offset,
+ fam);
- if (xin->content->len > state->cur_format.offset)
- oo_date_text_append (state, xin->content->str + state->cur_format.offset,
- xin->content->len - state->cur_format.offset);
-
- if (state->cur_format.string_opened) {
- g_string_append_c (state->cur_format.accum, '"');
- state->cur_format.string_opened = FALSE;
- }
+ oo_format_text_append_unquoted (state, "", 0); // Close quoting
state->cur_format.offset = 0;
}
@@ -5550,10 +5534,10 @@ odf_currency_symbol_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
if (state->cur_format.accum == NULL)
return;
if (0 == strcmp (xin->content->str, "$")) {
- g_string_append_c (state->cur_format.accum, '$');
+ oo_format_text_append_unquoted (state, "$", 1);
return;
}
- g_string_append (state->cur_format.accum, "[$");
+ oo_format_text_append_unquoted (state, "[$", 2);
go_string_append_gstring (state->cur_format.accum, xin->content);
g_string_append_c (state->cur_format.accum, ']');
}
@@ -5589,12 +5573,13 @@ odf_format_invisible_text (GsfXMLIn *xin, xmlChar const **attrs)
char const *cnt = xin->content->str + state->cur_format.offset;
int cnt_len = xin->content->len - state->cur_format.offset;
char const *text = NULL;
+ GOFormatFamily fam = xin->node->user_data.v_int;
if (cnt_len == 1) {
state->cur_format.offset += 1;
} else if (cnt_len > 1) {
- oo_date_text_append (state, cnt, cnt_len - 1);
+ oo_format_text_append (state, cnt, cnt_len - 1, fam);
state->cur_format.offset += cnt_len;
}
@@ -5603,11 +5588,7 @@ odf_format_invisible_text (GsfXMLIn *xin, xmlChar const **attrs)
text = CXML2C (attrs[1]);
if (text != NULL) {
- if (state->cur_format.string_opened) {
- g_string_append_c (state->cur_format.accum, '"');
- state->cur_format.string_opened = FALSE;
- }
- g_string_append_c (state->cur_format.accum, '_');
+ oo_format_text_append_unquoted (state, "_", 1);
g_string_append (state->cur_format.accum, text);
}
}
@@ -5618,7 +5599,7 @@ odf_format_repeated_text_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
OOParseState *state = (OOParseState *)xin->user_state;
/* This really only works for a single character. */
- g_string_append_c (state->cur_format.accum, '*');
+ oo_format_text_append_unquoted (state, "*", 1);
g_string_append (state->cur_format.accum, xin->content->str);
}
@@ -5634,7 +5615,7 @@ odf_number_color (GsfXMLIn *xin, xmlChar const **attrs)
GOColor col = GO_COLOR_FROM_RGB (r, g, b);
int i = go_format_palette_index_from_color (col);
char *color = go_format_palette_name_of_index (i);
- g_string_append_c (state->cur_format.accum, '[');
+ oo_format_text_append_unquoted (state, "[", 1);
g_string_append (state->cur_format.accum, color);
g_string_append_c (state->cur_format.accum, ']');
g_free (color);
@@ -5739,7 +5720,7 @@ odf_number_style_end (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
g_return_if_fail (state->cur_format.accum != NULL);
if (state->cur_format.percentage && !state->cur_format.percent_sign_seen)
- g_string_append_c (state->cur_format.accum, '%');
+ oo_format_text_append_unquoted (state, "%", 1);
state->cur_format.percentage = FALSE;
if (state->cur_format.name == NULL) {
@@ -11955,8 +11936,8 @@ GSF_XML_IN_NODE (OFFICE_DOC_STYLES, OFFICE_STYLES, OO_NS_OFFICE, "styles", GSF_X
#endif
GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_NUMBER, OO_NS_NUMBER, "number", GSF_XML_NO_CONTENT,
&odf_number, NULL),
GSF_XML_IN_NODE (NUMBER_STYLE_NUMBER, NUMBER_EMBEDDED_TEXT, OO_NS_NUMBER, "embedded-text", GSF_XML_CONTENT,
&odf_embedded_text_start, &odf_embedded_text_end),
- GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_format_text_end),
- GSF_XML_IN_NODE (NUMBER_STYLE_TEXT, FORMAT_TEXT_INVISIBLE, OO_GNUM_NS_EXT, "invisible",
GSF_XML_NO_CONTENT, &odf_format_invisible_text, NULL),
+ GSF_XML_IN_NODE_FULL (NUMBER_STYLE, NUMBER_STYLE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
FALSE, FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_NUMBER),
+ GSF_XML_IN_NODE_FULL (NUMBER_STYLE_TEXT, FORMAT_TEXT_INVISIBLE, OO_GNUM_NS_EXT, "invisible",
GSF_XML_NO_CONTENT, FALSE, FALSE, &odf_format_invisible_text, NULL, GO_FORMAT_NUMBER),
GSF_XML_IN_NODE (NUMBER_STYLE_TEXT, FORMAT_TEXT_REPEATED, OO_GNUM_NS_EXT, "repeated",
GSF_XML_NO_CONTENT, NULL, &odf_format_repeated_text_end),
GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_FRACTION, OO_NS_NUMBER, "fraction", GSF_XML_NO_CONTENT,
&odf_fraction, NULL),
GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_SCI_STYLE_PROP, OO_NS_NUMBER, "scientific-number",
GSF_XML_NO_CONTENT, &odf_scientific, NULL),
@@ -11978,7 +11959,7 @@ GSF_XML_IN_NODE (NUMBER_STYLE_NUMBER, NUMBER_EMBEDDED_TEXT, OO_NS_NUMBER, "embed
GSF_XML_IN_NODE (DATE_STYLE, DATE_MINUTES, OO_NS_NUMBER, "minutes", GSF_XML_NO_CONTENT,
&oo_date_minutes, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_SECONDS, OO_NS_NUMBER, "seconds", GSF_XML_NO_CONTENT,
&oo_date_seconds, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT,
&oo_date_am_pm, NULL),
- GSF_XML_IN_NODE (DATE_STYLE, DATE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_date_text_end),
+ GSF_XML_IN_NODE_FULL (DATE_STYLE, DATE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_DATE),
GSF_XML_IN_NODE (DATE_STYLE, DATE_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
NULL, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_FILL_CHARACTER, OO_NS_NUMBER, "fill-character", GSF_XML_NO_CONTENT,
NULL, NULL),
@@ -11988,7 +11969,7 @@ GSF_XML_IN_NODE (NUMBER_STYLE_NUMBER, NUMBER_EMBEDDED_TEXT, OO_NS_NUMBER, "embed
GSF_XML_IN_NODE (TIME_STYLE, TIME_MINUTES, OO_NS_NUMBER, "minutes", GSF_XML_NO_CONTENT,
&oo_date_minutes, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_SECONDS, OO_NS_NUMBER, "seconds", GSF_XML_NO_CONTENT,
&oo_date_seconds, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT,
&oo_date_am_pm, NULL),
- GSF_XML_IN_NODE (TIME_STYLE, TIME_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_date_text_end),
+ GSF_XML_IN_NODE_FULL (TIME_STYLE, TIME_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_TIME),
GSF_XML_IN_NODE (TIME_STYLE, TIME_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
NULL, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_FILL_CHARACTER, OO_NS_NUMBER, "fill-character", GSF_XML_NO_CONTENT,
NULL, NULL),
@@ -12001,7 +11982,7 @@ GSF_XML_IN_NODE (NUMBER_STYLE_NUMBER, NUMBER_EMBEDDED_TEXT, OO_NS_NUMBER, "embed
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,
&odf_map, NULL),
GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_SYMBOL, OO_NS_NUMBER, "currency-symbol", GSF_XML_CONTENT,
NULL, &odf_currency_symbol_end),
- GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_format_text_end),
+ GSF_XML_IN_NODE_FULL (STYLE_CURRENCY, CURRENCY_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_CURRENCY),
GSF_XML_IN_NODE (CURRENCY_TEXT, FORMAT_TEXT_INVISIBLE, OO_GNUM_NS_EXT, "invisible", GSF_XML_2ND, NULL,
NULL),
GSF_XML_IN_NODE (CURRENCY_TEXT, FORMAT_TEXT_REPEATED, OO_GNUM_NS_EXT, "repeated", GSF_XML_2ND, NULL,
NULL),
GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
@@ -12009,14 +11990,14 @@ GSF_XML_IN_NODE (NUMBER_STYLE_NUMBER, NUMBER_EMBEDDED_TEXT, OO_NS_NUMBER, "embed
GSF_XML_IN_NODE (OFFICE_STYLES, STYLE_PERCENTAGE, OO_NS_NUMBER, "percentage-style", GSF_XML_NO_CONTENT,
&odf_number_percentage_style, &odf_number_style_end),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_STYLE_PROP, OO_NS_NUMBER, "number", GSF_XML_NO_CONTENT,
&odf_number, NULL),
- GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_format_text_end),
+ GSF_XML_IN_NODE_FULL (STYLE_PERCENTAGE, PERCENTAGE_TEXT, OO_NS_NUMBER, "text",
GSF_XML_CONTENT, FALSE, FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_PERCENTAGE),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
&odf_map, NULL),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_FILL_CHARACTER, OO_NS_NUMBER, "fill-character",
GSF_XML_NO_CONTENT, NULL, NULL),
GSF_XML_IN_NODE (OFFICE_STYLES, STYLE_TEXT, OO_NS_NUMBER, "text-style", GSF_XML_NO_CONTENT,
&odf_number_style, &odf_number_style_end),
GSF_XML_IN_NODE (STYLE_TEXT, STYLE_TEXT_CONTENT, OO_NS_NUMBER, "text-content", GSF_XML_NO_CONTENT,
&odf_text_content, NULL),
- GSF_XML_IN_NODE (STYLE_TEXT, STYLE_TEXT_PROP, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_format_text_end),
+GSF_XML_IN_NODE_FULL (STYLE_TEXT, STYLE_TEXT_PROP, OO_NS_NUMBER, "text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_TEXT),
GSF_XML_IN_NODE (STYLE_TEXT_PROP, FORMAT_TEXT_INVISIBLE, OO_GNUM_NS_EXT, "invisible", GSF_XML_2ND,
NULL, NULL),
GSF_XML_IN_NODE (STYLE_TEXT, STYLE_TEXT_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT, &odf_map,
NULL),
GSF_XML_IN_NODE (STYLE_TEXT, STYLE_TEXT_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
@@ -12128,7 +12109,7 @@ GSF_XML_IN_NODE (OFFICE_STYLES, PAGE_MASTER, OO_NS_STYLE, "page-master", GSF_XML
GSF_XML_IN_NODE (DATE_STYLE, DATE_MINUTES, OO_NS_NUMBER, "minutes", GSF_XML_NO_CONTENT,
&oo_date_minutes, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_SECONDS, OO_NS_NUMBER, "seconds", GSF_XML_NO_CONTENT,
&oo_date_seconds, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT,
&oo_date_am_pm, NULL),
- GSF_XML_IN_NODE (DATE_STYLE, DATE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_date_text_end),
+ GSF_XML_IN_NODE_FULL (DATE_STYLE, DATE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
FALSE, FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_DATE),
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 (DATE_STYLE, DATE_FILL_CHARACTER, OO_NS_NUMBER, "fill-character", GSF_XML_NO_CONTENT,
NULL, NULL),
@@ -12138,7 +12119,7 @@ GSF_XML_IN_NODE (OFFICE_STYLES, PAGE_MASTER, OO_NS_STYLE, "page-master", GSF_XML
GSF_XML_IN_NODE (TIME_STYLE, TIME_MINUTES, OO_NS_NUMBER, "minutes", GSF_XML_NO_CONTENT,
&oo_date_minutes, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_SECONDS, OO_NS_NUMBER, "seconds", GSF_XML_NO_CONTENT,
&oo_date_seconds, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT,
&oo_date_am_pm, NULL),
- GSF_XML_IN_NODE (TIME_STYLE, TIME_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_date_text_end),
+ GSF_XML_IN_NODE_FULL (TIME_STYLE, TIME_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
FALSE, FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_TIME),
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 (TIME_STYLE, TIME_FILL_CHARACTER, OO_NS_NUMBER, "fill-character", GSF_XML_NO_CONTENT,
NULL, NULL),
@@ -12253,7 +12234,7 @@ static GsfXMLInNode const opendoc_content_dtd [] =
#endif
GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_NUMBER, OO_NS_NUMBER, "number",
GSF_XML_NO_CONTENT, &odf_number, 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_CONTENT,
&odf_date_text_start, &oo_format_text_end),
+ GSF_XML_IN_NODE_FULL (NUMBER_STYLE, NUMBER_STYLE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_NUMBER),
GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_STYLE_FRACTION, OO_NS_NUMBER, "fraction",
GSF_XML_NO_CONTENT, &odf_fraction, NULL),
GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_SCI_STYLE_PROP, OO_NS_NUMBER, "scientific-number",
GSF_XML_NO_CONTENT, &odf_scientific, NULL),
GSF_XML_IN_NODE (NUMBER_STYLE, NUMBER_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
&odf_map, NULL),
@@ -12271,7 +12252,7 @@ static GsfXMLInNode const opendoc_content_dtd [] =
GSF_XML_IN_NODE (DATE_STYLE, DATE_MINUTES, OO_NS_NUMBER, "minutes",
GSF_XML_NO_CONTENT, &oo_date_minutes, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_SECONDS, OO_NS_NUMBER, "seconds",
GSF_XML_NO_CONTENT, &oo_date_seconds, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT,
&oo_date_am_pm, NULL),
- GSF_XML_IN_NODE (DATE_STYLE, DATE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_date_text_end),
+ GSF_XML_IN_NODE_FULL (DATE_STYLE, DATE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_DATE),
GSF_XML_IN_NODE (DATE_STYLE, DATE_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT,
NULL, NULL),
GSF_XML_IN_NODE (DATE_STYLE, DATE_FILL_CHARACTER, OO_NS_NUMBER, "fill-character",
GSF_XML_NO_CONTENT, NULL, NULL),
@@ -12280,7 +12261,7 @@ static GsfXMLInNode const opendoc_content_dtd [] =
GSF_XML_IN_NODE (TIME_STYLE, TIME_MINUTES, OO_NS_NUMBER, "minutes", GSF_XML_NO_CONTENT,
&oo_date_minutes, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_SECONDS, OO_NS_NUMBER, "seconds", GSF_XML_NO_CONTENT,
&oo_date_seconds, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_AM_PM, OO_NS_NUMBER, "am-pm", GSF_XML_NO_CONTENT,
&oo_date_am_pm, NULL),
- GSF_XML_IN_NODE (TIME_STYLE, TIME_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_date_text_end),
+ GSF_XML_IN_NODE_FULL (TIME_STYLE, TIME_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_TIME),
GSF_XML_IN_NODE (TIME_STYLE, TIME_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_MAP, OO_NS_STYLE, "map", GSF_XML_NO_CONTENT, NULL,
NULL),
GSF_XML_IN_NODE (TIME_STYLE, TIME_FILL_CHARACTER, OO_NS_NUMBER, "fill-character",
GSF_XML_NO_CONTENT, NULL, NULL),
@@ -12291,12 +12272,12 @@ static GsfXMLInNode const opendoc_content_dtd [] =
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,
&odf_map, NULL),
GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_SYMBOL, OO_NS_NUMBER, "currency-symbol",
GSF_XML_CONTENT, NULL, &odf_currency_symbol_end),
- GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
&odf_date_text_start, &oo_format_text_end),
+ GSF_XML_IN_NODE_FULL (STYLE_CURRENCY, CURRENCY_TEXT, OO_NS_NUMBER,"text", GSF_XML_CONTENT, FALSE,
FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_CURRENCY),
GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
GSF_XML_IN_NODE (STYLE_CURRENCY, CURRENCY_FILL_CHARACTER, OO_NS_NUMBER, "fill-character",
GSF_XML_NO_CONTENT, NULL, NULL),
GSF_XML_IN_NODE (OFFICE_STYLES, STYLE_PERCENTAGE, OO_NS_NUMBER, "percentage-style",
GSF_XML_NO_CONTENT, &odf_number_percentage_style, &odf_number_style_end),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_STYLE_PROP, OO_NS_NUMBER, "number",
GSF_XML_NO_CONTENT, &odf_number, NULL),
- GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_TEXT, OO_NS_NUMBER, "text",
GSF_XML_CONTENT, &odf_date_text_start, &oo_format_text_end),
+ GSF_XML_IN_NODE_FULL (STYLE_PERCENTAGE, PERCENTAGE_TEXT, OO_NS_NUMBER, "text", GSF_XML_CONTENT,
FALSE, FALSE, &odf_format_text_start, &oo_format_text_end, GO_FORMAT_PERCENTAGE),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_MAP, OO_NS_STYLE, "map",
GSF_XML_NO_CONTENT, &odf_map, NULL),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_TEXT_PROP, OO_NS_STYLE, "text-properties",
GSF_XML_NO_CONTENT, &odf_number_color, NULL),
GSF_XML_IN_NODE (STYLE_PERCENTAGE, PERCENTAGE_FILL_CHARACTER, OO_NS_NUMBER, "fill-character",
GSF_XML_NO_CONTENT, NULL, NULL),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]