[gnumeric] R1C1: Eliminate gnm_expr_parse_str_simple and thus many R1C1 bugs.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnumeric] R1C1: Eliminate gnm_expr_parse_str_simple and thus many R1C1 bugs.
- Date: Fri, 22 May 2009 09:13:01 -0400 (EDT)
commit e6e55e2667f41a5b2f033827bb3c42048ac4eeec
Author: Morten Welinder <terra gnome org>
Date: Fri May 22 09:12:30 2009 -0400
R1C1: Eliminate gnm_expr_parse_str_simple and thus many R1C1 bugs.
---
ChangeLog | 5 +++++
NEWS | 1 +
src/commands.c | 5 ++++-
src/parse-util.c | 6 ------
src/parse-util.h | 3 ---
src/sheet-object-widget.c | 4 +++-
src/sstest.c | 7 ++++++-
src/wbc-gtk.c | 28 ++++++++++++++++++----------
src/widgets/ChangeLog | 5 +++++
src/widgets/gnumeric-expr-entry.c | 8 ++++++--
10 files changed, 48 insertions(+), 24 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 952e643..401655c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-22 Morten Welinder <terra gnome org>
+
+ * src/parse-util.c (gnm_expr_parse_str_simple): Remove. Interface
+ invites R1C1 bugs. All callers fixed.
+
2009-05-21 Morten Welinder <terra gnome org>
* src/wbc-gtk.c (cb_graph_dim_editor_update): Suppress the initial
diff --git a/NEWS b/NEWS
index b9aa7f5..d3e25e1 100644
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,7 @@ Morten:
* Hide scrollbars as requested. [#583005]
* Fix date conventions in graphs.
* Improve GUI for date/time axes. [#574681]
+ * Fix R1C1 issues.
Paul Fitzpatrick:
* Extend ssconvert to also merge multiple sheets. [#581616]
diff --git a/src/commands.c b/src/commands.c
index 0281172..01039b8 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -1119,7 +1119,10 @@ cmd_area_set_text_redo (GnmCommand *cmd, WorkbookControl *wbc)
expr_txt = gnm_expr_char_start_p (me->text);
if (expr_txt != NULL)
- texpr = gnm_expr_parse_str_simple (expr_txt, &me->pp);
+ texpr = gnm_expr_parse_str
+ (expr_txt, &me->pp, GNM_EXPR_PARSE_DEFAULT,
+ sheet_get_conventions (me->cmd.sheet), NULL);
+
if (me->as_array) {
if (texpr == NULL)
return TRUE;
diff --git a/src/parse-util.c b/src/parse-util.c
index 4037907..649bae2 100644
--- a/src/parse-util.c
+++ b/src/parse-util.c
@@ -1404,12 +1404,6 @@ parse_util_shutdown (void)
gnm_conventions_xls_r1c1 = NULL;
}
-GnmExprTop const *
-gnm_expr_parse_str_simple (char const *str, GnmParsePos const *pp)
-{
- return gnm_expr_parse_str (str, pp, GNM_EXPR_PARSE_DEFAULT, NULL, NULL);
-}
-
/* ------------------------------------------------------------------------- */
/**
* gnm_expr_conv_quote:
diff --git a/src/parse-util.h b/src/parse-util.h
index 1c07c95..ee044ae 100644
--- a/src/parse-util.h
+++ b/src/parse-util.h
@@ -195,9 +195,6 @@ GnmExprTop const *gnm_expr_parse_str (char const *str, GnmParsePos const *pp,
GnmConventions const *convs,
GnmParseError *error);
-GnmExprTop const *gnm_expr_parse_str_simple (char const *str,
- GnmParsePos const *pp);
-
/* Is this string potentially the start of an expression */
char const *gnm_expr_char_start_p (char const *c);
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index 98a805e..2bcc57d 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -268,7 +268,9 @@ read_dep (GnmDependent *dep, char const *name,
GnmParsePos pos;
parse_pos_init_sheet (&pos, context->sheet);
- dep->texpr = gnm_expr_parse_str_simple (CC2XML (txt), &pos);
+ dep->texpr = gnm_expr_parse_str
+ (CC2XML (txt), &pos, GNM_EXPR_PARSE_DEFAULT,
+ sheet_get_conventions (pos.sheet), NULL);
xmlFree (txt);
}
}
diff --git a/src/sstest.c b/src/sstest.c
index 4a54fcf..a38c071 100644
--- a/src/sstest.c
+++ b/src/sstest.c
@@ -107,14 +107,19 @@ define_name (const char *name, const char *expr_txt, gpointer scope)
GnmParsePos pos;
GnmExprTop const *texpr;
GnmNamedExpr const *nexpr;
+ GnmConventions const *convs;
if (IS_SHEET (scope)) {
parse_pos_init_sheet (&pos, scope);
+ convs = sheet_get_conventions (pos.sheet);
} else {
parse_pos_init (&pos, WORKBOOK (scope), NULL, 0, 0);
+ convs = gnm_conventions_default;
}
- texpr = gnm_expr_parse_str_simple (expr_txt, &pos);
+ texpr = gnm_expr_parse_str (expr_txt, &pos,
+ GNM_EXPR_PARSE_DEFAULT,
+ convs, NULL);
if (!texpr) {
g_printerr ("Failed to parse %s for name %s\n",
expr_txt, name);
diff --git a/src/wbc-gtk.c b/src/wbc-gtk.c
index 9359f11..12c7731 100644
--- a/src/wbc-gtk.c
+++ b/src/wbc-gtk.c
@@ -4058,6 +4058,7 @@ cb_select_auto_expr (GtkWidget *widget, GdkEventButton *event, WBCGtk *wbcg)
};
WorkbookView *wbv = wb_control_view (WORKBOOK_CONTROL (wbcg));
+ Sheet *sheet = wb_view_cur_sheet (wbv);
GtkWidget *item, *menu;
int i;
@@ -4066,26 +4067,33 @@ cb_select_auto_expr (GtkWidget *widget, GdkEventButton *event, WBCGtk *wbcg)
menu = gtk_menu_new ();
- for (i = 0; quick_compute_routines [i].displayed_name; i++) {
+ for (i = 0; quick_compute_routines[i].displayed_name; i++) {
GnmParsePos pp;
- char const *expr = quick_compute_routines [i].function;
+ char const *fname = quick_compute_routines[i].function;
+ char const *dispname =
+ _(quick_compute_routines[i].displayed_name);
GnmExprTop const *new_auto_expr;
GtkWidget *item;
+ char *expr_txt;
/* Test the expression... */
- parse_pos_init (&pp, wb_control_get_workbook (WORKBOOK_CONTROL (wbcg)), NULL, 0, 0);
- new_auto_expr = gnm_expr_parse_str_simple (expr, &pp);
+ parse_pos_init (&pp, sheet->workbook, sheet, 0, 0);
+ expr_txt = g_strconcat (fname, "(",
+ parsepos_as_string (&pp),
+ ")", NULL);
+ new_auto_expr = gnm_expr_parse_str
+ (expr_txt, &pp, GNM_EXPR_PARSE_DEFAULT,
+ sheet_get_conventions (sheet), NULL);
+ g_free (expr_txt);
if (!new_auto_expr)
continue;
gnm_expr_top_unref (new_auto_expr);
- item = gtk_menu_item_new_with_label (
- _(quick_compute_routines [i].displayed_name));
+ item = gtk_menu_item_new_with_label (dispname);
g_object_set_data (G_OBJECT (item),
- "func",
- gnm_func_lookup (expr, NULL));
- g_object_set_data (G_OBJECT (item), "descr",
- (gpointer)_(quick_compute_routines [i].displayed_name));
+ "func", gnm_func_lookup (fname, NULL));
+ g_object_set_data (G_OBJECT (item),
+ "descr", (gpointer)dispname);
g_signal_connect (G_OBJECT (item),
"activate",
G_CALLBACK (cb_auto_expr_changed), wbcg);
diff --git a/src/widgets/ChangeLog b/src/widgets/ChangeLog
index 4fde141..caf3903 100644
--- a/src/widgets/ChangeLog
+++ b/src/widgets/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-22 Morten Welinder <terra gnome org>
+
+ * gnumeric-expr-entry.c (cb_gee_key_press_event,
+ gnm_expr_entry_parse): Fix R1C1 problem.
+
2009-05-21 Morten Welinder <terra gnome org>
* gnumeric-expr-entry.c: Add GogDataEditor interface.
diff --git a/src/widgets/gnumeric-expr-entry.c b/src/widgets/gnumeric-expr-entry.c
index 28eb975..f08b39a 100644
--- a/src/widgets/gnumeric-expr-entry.c
+++ b/src/widgets/gnumeric-expr-entry.c
@@ -590,7 +590,10 @@ cb_gee_key_press_event (GtkEntry *entry,
return FALSE;
str = gtk_editable_get_chars (editable, start, end);
- texpr = gnm_expr_parse_str_simple (str, &gee->pp);
+ texpr = gnm_expr_parse_str (str, &gee->pp,
+ GNM_EXPR_PARSE_DEFAULT,
+ gee_convs (gee),
+ NULL);
if (texpr) {
GnmValue *v;
GnmEvalPos ep;
@@ -1612,7 +1615,8 @@ gnm_expr_entry_parse (GnmExprEntry *gee, GnmParsePos const *pp,
}
if (!texpr)
- texpr = gnm_expr_parse_str (text, pp, flags, NULL, perr);
+ texpr = gnm_expr_parse_str (text, pp, flags,
+ gee_convs (gee), perr);
if (texpr == NULL)
return NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]