[gnumeric] Add chartDrawing namespace in xlsx import
- From: Jean Bréfort <jbrefort src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Add chartDrawing namespace in xlsx import
- Date: Fri, 18 Mar 2011 12:34:33 +0000 (UTC)
commit b460a1119fceba1a3c8b7f363189fe879cd82e5a
Author: Jean Brefort <jean brefort normalesup org>
Date: Fri Mar 18 13:33:56 2011 +0100
Add chartDrawing namespace in xlsx import
plugins/excel/ChangeLog | 7 ++++++
plugins/excel/xlsx-read-drawing.c | 39 ++++++++++++++++++++++++++++++------
plugins/excel/xlsx-read.c | 1 +
plugins/excel/xlsx-utils.h | 1 +
4 files changed, 41 insertions(+), 7 deletions(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 5c87559..ba940e9 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,5 +1,12 @@
2011-03-18 Jean Brefort <jean brefort normalesup org>
+ * xlsx-read-drawing.c (xlsx_chart_user_shapes),
+ (xlsx_chart_text_start), (xlsx_chart_text): add chartDrawing namespace.
+ * xlsx-read.c: ditto.
+ * xlsx-utils.h: ditto.
+
+2011-03-18 Jean Brefort <jean brefort normalesup org>
+
* xlsx-read-drawing.c (xlsx_chart_text_start), (xlsx_chart_text): import
text in sheet filled objects.
* xlsx-write-drawing.c (xlsx_write_series_dim): don't export strings as
diff --git a/plugins/excel/xlsx-read-drawing.c b/plugins/excel/xlsx-read-drawing.c
index 2451c75..d34ce78 100644
--- a/plugins/excel/xlsx-read-drawing.c
+++ b/plugins/excel/xlsx-read-drawing.c
@@ -20,9 +20,35 @@
* USA
*/
-/*****************************************************************************/
+/*****************************************************************************
+ * User shapes *
+ *****************************************************************************/
+
+static GsfXMLInNode const xlsx_chart_drawing_dtd[] =
+{
+GSF_XML_IN_NODE_FULL (START, START, -1, NULL, GSF_XML_NO_CONTENT, FALSE, TRUE, NULL, NULL, 0),
+GSF_XML_IN_NODE_FULL (START, USER_SHAPES, XL_NS_CHART, "userShapes", GSF_XML_NO_CONTENT, FALSE, TRUE, NULL, NULL, 0),
+ GSF_XML_IN_NODE (USER_SHAPES, REL_SIZE_ANCHOR, XL_NS_CHART_DRAW, "relSizeAnchor", GSF_XML_NO_CONTENT, NULL, NULL),
+GSF_XML_IN_NODE_END
+};
static void
+xlsx_chart_user_shapes (GsfXMLIn *xin, xmlChar const **attrs)
+{
+ XLSXReadState *state = (XLSXReadState *)xin->user_state;
+ xmlChar const *part_id = NULL;
+
+ for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2)
+ if (gsf_xml_in_namecmp (xin, attrs[0], XL_NS_DOC_REL, "id"))
+ part_id = attrs[1];
+ if (NULL != part_id) {
+ xlsx_parse_rel_by_id (xin, part_id, xlsx_chart_drawing_dtd, xlsx_ns);
+
+ }
+}
+
+/*****************************************************************************/
+static void
xlsx_chart_push_obj (XLSXReadState *state, GogObject *obj)
{
state->obj_stack = g_slist_prepend (state->obj_stack, state->cur_obj);
@@ -893,7 +919,7 @@ static void
xlsx_chart_text_start (GsfXMLIn *xin, G_GNUC_UNUSED xmlChar const **attrs)
{
XLSXReadState *state = (XLSXReadState *)xin->user_state;
- if (NULL == state->so && NULL == state->series) { /* Hmm, why? */
+ if (IS_SHEET_OBJECT_GRAPH (state->so) && NULL == state->series) { /* Hmm, why? */
GogObject *label = gog_object_add_by_name (state->cur_obj,
(state->cur_obj == (GogObject *)state->chart) ? "Title" : "Label", NULL);
xlsx_chart_push_obj (state, label);
@@ -905,10 +931,9 @@ xlsx_chart_text (GsfXMLIn *xin, G_GNUC_UNUSED GsfXMLBlob *blob)
{
XLSXReadState *state = (XLSXReadState *)xin->user_state;
- if (state->so) {
- if (IS_GNM_SO_FILLED (state->so))
- g_object_set (G_OBJECT (state->so), "text", state->chart_tx, NULL);
- } else if (NULL == state->series) {
+ if (IS_GNM_SO_FILLED (state->so))
+ g_object_set (G_OBJECT (state->so), "text", state->chart_tx, NULL);
+ else if (NULL == state->series) {
if (state->cur_obj && state->chart_tx) {
GnmValue *value = value_new_string_nocopy (state->chart_tx);
GnmExprTop const *texpr = gnm_expr_top_new_constant (value);
@@ -1346,7 +1371,7 @@ GSF_XML_IN_NODE_FULL (START, CHART_SPACE, XL_NS_CHART, "chartSpace", GSF_XML_NO_
GSF_XML_IN_NODE (HEADER_FOOTER, ODD_HEADER, XL_NS_CHART, "oddHeader", GSF_XML_NO_CONTENT, NULL, NULL),
GSF_XML_IN_NODE (HEADER_FOOTER, ODD_FOOTER, XL_NS_CHART, "oddFooter", GSF_XML_NO_CONTENT, NULL, NULL),
GSF_XML_IN_NODE (CHART_SPACE, LANG, XL_NS_CHART, "lang", GSF_XML_NO_CONTENT, NULL, NULL),
- GSF_XML_IN_NODE (CHART_SPACE, USER_SHAPE, XL_NS_CHART, "userShapes", GSF_XML_NO_CONTENT, NULL, NULL),
+ GSF_XML_IN_NODE (CHART_SPACE, USER_SHAPE, XL_NS_CHART, "userShapes", GSF_XML_NO_CONTENT, &xlsx_chart_user_shapes, NULL),
GSF_XML_IN_NODE_END
};
diff --git a/plugins/excel/xlsx-read.c b/plugins/excel/xlsx-read.c
index 5c27792..ae8258a 100644
--- a/plugins/excel/xlsx-read.c
+++ b/plugins/excel/xlsx-read.c
@@ -249,6 +249,7 @@ static GsfXMLInNS const xlsx_ns[] = {
GSF_XML_IN_NS (XL_NS_SS_DRAW, "http://schemas.openxmlformats.org/drawingml/2006/3/spreadsheetDrawing"), /* Office 12 BETA-2 Technical Refresh */
GSF_XML_IN_NS (XL_NS_CHART, "http://schemas.openxmlformats.org/drawingml/2006/3/chart"), /* Office 12 BETA-2 */
GSF_XML_IN_NS (XL_NS_CHART, "http://schemas.openxmlformats.org/drawingml/2006/chart"), /* Office 12 BETA-2 Technical Refresh */
+ GSF_XML_IN_NS (XL_NS_CHART_DRAW, "http://schemas.openxmlformats.org/drawingml/2006/chartDrawing"),
GSF_XML_IN_NS (XL_NS_DRAW, "http://schemas.openxmlformats.org/drawingml/2006/3/main"), /* Office 12 BETA-2 */
GSF_XML_IN_NS (XL_NS_DRAW, "http://schemas.openxmlformats.org/drawingml/2006/main"), /* Office 12 BETA-2 Technical Refresh */
GSF_XML_IN_NS (XL_NS_DOC_REL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships"),
diff --git a/plugins/excel/xlsx-utils.h b/plugins/excel/xlsx-utils.h
index b68792e..be3bf2f 100644
--- a/plugins/excel/xlsx-utils.h
+++ b/plugins/excel/xlsx-utils.h
@@ -30,6 +30,7 @@ enum {
XL_NS_SS,
XL_NS_SS_DRAW,
XL_NS_CHART,
+ XL_NS_CHART_DRAW,
XL_NS_DRAW,
XL_NS_DOC_REL,
XL_NS_PKG_REL
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]