[gnumeric] Add chartDrawing namespace in xlsx import



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]