[gnumeric] R1C1 parsing: fix sheet size handling.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnumeric] R1C1 parsing: fix sheet size handling.
- Date: Fri, 1 May 2009 19:20:27 -0400 (EDT)
commit 1ff0790df2f0d3099d2f4bf5588b33408128de4a
Author: Morten Welinder <terra gnome org>
Date: Fri May 1 19:21:28 2009 -0400
R1C1 parsing: fix sheet size handling.
---
ChangeLog | 2 ++
src/parse-util.c | 28 +++++++++++++++++++---------
2 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index bd19a19..7ddb6f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
2009-05-01 Morten Welinder <terra gnome org>
+ * src/parse-util.c (r1c1_rangeref_parse): Fix sheet size handling.
+
* src/sheet-style.c (sheet_style_sanity_check): New function.
(sheet_style_init): Call sheet_style_sanity_check.
(tile_widths, tile_heights): Add extra element.
diff --git a/src/parse-util.c b/src/parse-util.c
index ef0d7ff..fb254f7 100644
--- a/src/parse-util.c
+++ b/src/parse-util.c
@@ -953,9 +953,19 @@ static char const *
r1c1_rangeref_parse (GnmRangeRef *res, char const *ptr, GnmParsePos const *pp)
{
char const *tmp;
+ GnmSheetSize const *a_ss, *b_ss;
+ Sheet const *a_sheet, *b_sheet;
+
+ a_sheet = eval_sheet (res->a.sheet, pp->sheet);
+ b_sheet = eval_sheet (res->b.sheet, a_sheet);
+
+ a_ss = a_sheet
+ ? gnm_sheet_get_size (a_sheet)
+ : workbook_get_sheet_size (pp->wb);
+ b_ss = b_sheet ? gnm_sheet_get_size (b_sheet) : a_ss;
if (*ptr == 'R' || *ptr == 'r') {
- ptr = r1c1_get_index (ptr, gnm_sheet_get_size (pp->sheet),
+ ptr = r1c1_get_index (ptr, a_ss,
&res->a.row, &res->a.row_relative,
FALSE);
if (!ptr)
@@ -967,17 +977,17 @@ r1c1_rangeref_parse (GnmRangeRef *res, char const *ptr, GnmParsePos const *pp)
res->a.col_relative = FALSE;
res->a.col = 0;
res->b = res->a;
- res->b.col = gnm_sheet_get_last_col (res->b.sheet);
+ res->b.col = a_ss->max_cols - 1;
if (ptr[0] != ':' || (ptr[1] != 'R' && ptr[1] != 'r'))
return ptr;
- tmp = r1c1_get_index (ptr+1, gnm_sheet_get_size (res->b.sheet),
+ tmp = r1c1_get_index (ptr+1, a_ss,
&res->b.row, &res->b.row_relative,
FALSE);
if (!tmp)
return ptr; /* fallback to just the initial R */
return tmp;
} else {
- ptr = r1c1_get_index (ptr, gnm_sheet_get_size (pp->sheet),
+ ptr = r1c1_get_index (ptr, a_ss,
&res->a.col, &res->a.col_relative,
TRUE);
if (!ptr)
@@ -986,15 +996,15 @@ r1c1_rangeref_parse (GnmRangeRef *res, char const *ptr, GnmParsePos const *pp)
res->b = res->a;
if (ptr[0] != ':' || (ptr[1] != 'R' && ptr[1] != 'r') ||
- NULL == (tmp = r1c1_get_index (ptr+1, gnm_sheet_get_size (res->b.sheet),
+ NULL == (tmp = r1c1_get_index (ptr+1, b_ss,
&res->b.row, &res->b.row_relative, FALSE)) ||
(*tmp != 'C' && *tmp != 'c') ||
- NULL == (tmp = r1c1_get_index (tmp, gnm_sheet_get_size (res->b.sheet),
+ NULL == (tmp = r1c1_get_index (tmp, b_ss,
&res->b.col, &res->b.col_relative, FALSE)))
return ptr;
return tmp;
} else if (*ptr == 'C' || *ptr == 'c') {
- if (NULL == (ptr = r1c1_get_index (ptr, gnm_sheet_get_size (pp->sheet),
+ if (NULL == (ptr = r1c1_get_index (ptr, a_ss,
&res->a.col, &res->a.col_relative, TRUE)))
return NULL;
if (g_ascii_isalpha (*ptr))
@@ -1003,10 +1013,10 @@ r1c1_rangeref_parse (GnmRangeRef *res, char const *ptr, GnmParsePos const *pp)
res->a.row_relative = FALSE;
res->a.row = 0;
res->b = res->a;
- res->b.row = gnm_sheet_get_last_row (res->b.sheet);
+ res->b.row = b_ss->max_rows - 1;
if (ptr[0] != ':' || (ptr[1] != 'C' && ptr[1] != 'c'))
return ptr;
- tmp = r1c1_get_index (ptr, gnm_sheet_get_size (res->b.sheet),
+ tmp = r1c1_get_index (ptr, b_ss,
&res->b.col, &res->b.col_relative,
TRUE);
if (!tmp)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]