[gnumeric] xls: cleanups.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] xls: cleanups.
- Date: Mon, 12 Oct 2009 15:06:13 +0000 (UTC)
commit a66b245a1498efab88b92cf5c550607e8caba45e
Author: Morten Welinder <terra gnome org>
Date: Fri Oct 9 13:35:16 2009 -0400
xls: cleanups.
plugins/excel/ChangeLog | 3 ++
plugins/excel/ms-excel-read.c | 43 +++++++++++++++++++++------------------
plugins/excel/ms-excel-write.c | 12 ++++------
3 files changed, 31 insertions(+), 27 deletions(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 315421d..25da5ea 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -14,6 +14,9 @@
2009-10-09 Morten Welinder <terra gnome org>
+ * ms-excel-write.c (excel_write_autofilter_names): Initialize
+ nexpr.pos completely.
+
* ms-excel-read.c (excel_read_NAME): Fix FMR in debug code.
* ms-obj.c (ms_obj_read_biff8_obj): Read the macro reference too.
diff --git a/plugins/excel/ms-excel-read.c b/plugins/excel/ms-excel-read.c
index 36becd5..dd876e4 100644
--- a/plugins/excel/ms-excel-read.c
+++ b/plugins/excel/ms-excel-read.c
@@ -3108,7 +3108,6 @@ gnm_xl_importer_free (GnmXLImporter *importer)
unsigned i, j;
GSList *real_order = NULL;
Sheet *sheet;
- GnmNamedExpr *nexpr;
for (i = importer->boundsheet_sheet_by_index->len; i-- > 0 ; ) {
sheet = g_ptr_array_index (importer->boundsheet_sheet_by_index, i);
@@ -3164,9 +3163,11 @@ gnm_xl_importer_free (GnmXLImporter *importer)
for (i = 0; i < importer->v8.supbook->len; i++ ) {
ExcelSupBook *sup = &(g_array_index (importer->v8.supbook,
ExcelSupBook, i));
- for (j = 0; j < sup->externname->len; j++ )
- if (NULL != (nexpr = g_ptr_array_index (sup->externname, j)))
+ for (j = 0; j < sup->externname->len; j++ ) {
+ GnmNamedExpr *nexpr = g_ptr_array_index (sup->externname, j);
+ if (nexpr)
expr_name_unref (nexpr);
+ }
g_ptr_array_free (sup->externname, TRUE);
}
g_array_free (importer->v8.supbook, TRUE);
@@ -3186,14 +3187,19 @@ gnm_xl_importer_free (GnmXLImporter *importer)
g_free (importer->sst);
}
- for (i = importer->names->len; i-- > 0 ; )
- if (NULL != (nexpr = g_ptr_array_index (importer->names, i))) {
- /* NAME placeholders need removal, EXTERNNAME
- * placeholders will no be active */
- if (nexpr->active && nexpr->is_placeholder && nexpr->ref_count == 2)
- expr_name_remove (nexpr);
- expr_name_unref (nexpr);
+ for (i = importer->names->len; i-- > 0 ; ) {
+ GnmNamedExpr *nexpr = g_ptr_array_index (importer->names, i);
+ if (!nexpr)
+ continue;
+
+ /* NAME placeholders need removal, EXTERNNAME
+ * placeholders will no be active */
+ if (nexpr->active && nexpr->is_placeholder && nexpr->ref_count == 2) {
+ d (1, g_printerr ("Removing name %s\n", expr_name_name (nexpr)););
+ expr_name_remove (nexpr);
}
+ expr_name_unref (nexpr);
+ }
g_ptr_array_free (importer->names, TRUE);
importer->names = NULL;
@@ -3287,9 +3293,10 @@ excel_parse_name (GnmXLImporter *importer, Sheet *sheet, char *name,
g_return_val_if_fail (name != NULL, NULL);
+ parse_pos_init (&pp, importer->wb, sheet, 0, 0);
+
/* expr_len == 0 seems to indicate a placeholder for an unknown name */
if (expr_len != 0) {
-
texpr = excel_parse_formula (&importer->container, NULL, 0, 0,
expr_data, expr_len, 0 /* FIXME? */,
TRUE, NULL);
@@ -3298,13 +3305,9 @@ excel_parse_name (GnmXLImporter *importer, Sheet *sheet, char *name,
go_io_warning (importer->context, _("Failure parsing name '%s'"), name);
texpr = gnm_expr_top_new_constant (value_new_error_REF (NULL));
} else d (2, {
- char *tmp;
- GnmParsePos pp;
-
- tmp = gnm_expr_top_as_string (texpr,
- parse_pos_init (&pp, importer->wb, NULL, 0, 0),
- gnm_conventions_default);
- g_printerr ( "%s\n", tmp);
+ char *tmp = gnm_expr_top_as_string
+ (texpr, &pp, gnm_conventions_default);
+ g_printerr ("Expression: %s\n", tmp);
g_free (tmp);
});
}
@@ -3325,7 +3328,6 @@ excel_parse_name (GnmXLImporter *importer, Sheet *sheet, char *name,
}
}
- parse_pos_init (&pp, importer->wb, sheet, 0, 0);
nexpr = expr_name_add (&pp, name,
texpr,
&err, link_to_container, stub);
@@ -3557,7 +3559,8 @@ excel_read_NAME (BiffQuery *q, GnmXLImporter *importer, ExcelReadSheet *esheet)
if (name != NULL) {
Sheet *sheet = NULL;
- d (1, fprintf (stderr, "NAME : %s, sheet_index = %hu ", name, sheet_index););
+ d (1, g_printerr ("NAME=%s, sheet_index=%d flags=0x%x\n",
+ name, sheet_index, flags););
if (sheet_index > 0) {
/* NOTE : the docs lie the index for biff7 is
* indeed a reference to the externsheet
diff --git a/plugins/excel/ms-excel-write.c b/plugins/excel/ms-excel-write.c
index 7957633..c026f48 100644
--- a/plugins/excel/ms-excel-write.c
+++ b/plugins/excel/ms-excel-write.c
@@ -3841,20 +3841,18 @@ static void
excel_write_autofilter_names (ExcelWriteState *ewb)
{
unsigned i;
- Sheet *sheet;
- ExcelWriteSheet const *esheet;
- GnmFilter const *filter;
GnmNamedExpr nexpr;
nexpr.name = go_string_new ("_FilterDatabase");
nexpr.is_hidden = TRUE;
nexpr.is_placeholder = FALSE;
for (i = 0; i < ewb->esheets->len; i++) {
- esheet = g_ptr_array_index (ewb->esheets, i);
- sheet = esheet->gnum_sheet;
+ ExcelWriteSheet const *esheet =
+ g_ptr_array_index (ewb->esheets, i);
+ Sheet *sheet = esheet->gnum_sheet;
if (sheet->filters != NULL) {
- filter = sheet->filters->data;
- nexpr.pos.sheet = sheet;
+ GnmFilter const *filter = sheet->filters->data;
+ parse_pos_init_sheet (&nexpr.pos, sheet);
nexpr.texpr = gnm_expr_top_new_constant
(value_new_cellrange_r (sheet, &filter->r));
excel_write_NAME (NULL, &nexpr, ewb);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]