[gnumeric] xls: export sets.



commit 32f8cb0bd3d951b13c2effd9a8cec458a3ac211e
Author: Morten Welinder <terra gnome org>
Date:   Mon Mar 12 22:13:14 2012 -0400

    xls: export sets.

 ChangeLog                        |    2 ++
 NEWS                             |    1 +
 plugins/excel/ChangeLog          |    2 ++
 plugins/excel/ms-formula-write.c |   27 ++++++++++++++++++++++++---
 src/expr.c                       |    6 +++---
 5 files changed, 32 insertions(+), 6 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index ee2017c..40558a1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2012-03-12  Morten Welinder  <terra gnome org>
 
+	* src/expr.c (do_expr_as_string): Set a precedence for set.
+
 	* src/sheet-style.c (cb_style_extent, cb_is_default)
 	(cb_most_common): Fix handling of width and height.
 
diff --git a/NEWS b/NEWS
index fea755c..573b388 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,7 @@ Morten:
 	* Fix row height xls export rounding issue.  [Part of #671513]
 	* Export paper size to xls.
 	* Improve xls export of chart legends.  [Part of #671845]
+	* Export sets to xls.
 
 --------------------------------------------------------------------------
 Gnumeric 1.11.2
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index b3c23c8..4858fa5 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,5 +1,7 @@
 2012-03-12  Morten Welinder  <terra gnome org>
 
+	* ms-formula-write.c (write_node): Handle sets.
+
 	* ms-excel-write.c (excel_write_chart_v8): Regularlize code and
 	output object name too.
 
diff --git a/plugins/excel/ms-formula-write.c b/plugins/excel/ms-formula-write.c
index 6c375eb..d7ebf3a 100644
--- a/plugins/excel/ms-formula-write.c
+++ b/plugins/excel/ms-formula-write.c
@@ -702,9 +702,9 @@ write_node (PolishData *pd, GnmExpr const *expr, int paren_level,
 		{ FORMULA_PTG_PERCENT,	 6, 0, 0 }, /* Percentage (NOT MODULO) */
 		{ 0, 0, 0, 0 },	/* Array Corner   */
 		{ 0, 0, 0, 0 },	/* Array Element  */
-		{ 0, 0, 0, 0 }, /* Set      */
-		{ FORMULA_PTG_RANGE,	 9, 1, 0 },
-		{ FORMULA_PTG_INTERSECT, 8, 1, 0 }
+		{ 0, 8, 1, 0 }, /* Set      */
+		{ FORMULA_PTG_RANGE,	 10, 1, 0 },
+		{ FORMULA_PTG_INTERSECT, 9, 1, 0 }
 	};
 	const GnmExprOp op = GNM_EXPR_GET_OPER (expr);
 
@@ -870,6 +870,27 @@ write_node (PolishData *pd, GnmExpr const *expr, int paren_level,
 		break;
 	}
 
+	case GNM_EXPR_OP_SET:
+		if (expr->set.argc > 0) {
+			int const prec = operations[op].prec;
+			int i;
+
+			write_node (pd, expr->set.argv[0],
+				    operations[op].assoc_left,
+				    target_type);
+
+			for (i = 1; i < expr->set.argc; i++) {
+				write_node (pd, expr->set.argv[i],
+					    operations[op].assoc_right,
+					    target_type);
+				push_guint8 (pd, FORMULA_PTG_UNION);
+			}
+			if (prec <= paren_level)
+				push_guint8 (pd, FORMULA_PTG_PAREN);
+			break;
+		}
+		/* Fall through for now.  */
+
 	default : {
 		gchar *err = g_strdup_printf ("Unknown Operator %d",
 					      GNM_EXPR_GET_OPER (expr));
diff --git a/src/expr.c b/src/expr.c
index 29696f9..6b7e6d0 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -1599,9 +1599,9 @@ do_expr_as_string (GnmExpr const *expr, int paren_level,
 		{ "%",  6, 0, 0, 0 }, /* Percentage (NOT MODULO) */
 		{ "",   0, 0, 0, 0 }, /* ArrayCorner    */
 		{ "",   0, 0, 0, 0 }, /* ArrayElem */
-		{ "",   0, 0, 0, 0 }, /* Set       */
-		{ ":",  9, 1, 0, 0 }, /* Range Ctor   */
-		{ " ",  8, 1, 0, 0 }  /* Intersection */
+		{ "",   8, 0, 0, 0 }, /* Set       */
+		{ ":", 10, 1, 0, 0 }, /* Range Ctor   */
+		{ " ",  9, 1, 0, 0 }  /* Intersection */
 	};
 	GnmExprOp const op = GNM_EXPR_GET_OPER (expr);
 	GString *target = out->accum;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]