commit 2ad6d4f263e00ab4883379efe7d7397231cf2ae6
parent c39231cffea5187ff4b01afe9e28df0716a2289e
Author: ukai <ukai>
Date: Tue, 9 Apr 2002 14:53:54 +0000
[w3m-dev 03169] Can't calculate table height if number of cells > 20.
* table.c (check_table_height): change row, rowspan, indexarray, height
from array to pointer
From: Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
Diffstat:
M | ChangeLog | | | 6 | ++++++ |
M | table.c | | | 51 | ++++++++++++++++++++++++++++++++++----------------- |
2 files changed, 40 insertions(+), 17 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,5 +1,11 @@
2002-04-09 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
+ * [w3m-dev 03169] Can't calculate table height if number of cells > 20.
+ * table.c (check_table_height): change row, rowspan, indexarray, height
+ from array to pointer
+
+2002-04-09 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
+
* [w3m-dev 03167] xface2xbm -> xface2xpm (current imlib can't handle XBM)
* configure: s/XFACE2XBM/XFACE2XPM/
* config.h.dist: ditto
diff --git a/table.c b/table.c
@@ -1475,14 +1475,16 @@ check_table_height(struct table *t)
{
int i, j, k;
struct {
- short row[MAXCELL];
- short rowspan[MAXCELL];
- char indexarray[MAXCELL];
+ short *row;
+ short *rowspan;
+ char *indexarray;
short maxcell;
- short height[MAXCELL];
+ short size;
+ short *height;
} cell;
int space = 0;
+ cell.size = 0;
cell.maxcell = -1;
for (j = 0; j <= t->maxrow; j++) {
@@ -1509,21 +1511,36 @@ check_table_height(struct table *t)
if (cell.row[idx] == j && cell.rowspan[idx] == rowspan)
c = idx;
}
- if (c < MAXCELL) {
- if (c > cell.maxcell) {
- cell.maxcell++;
- cell.row[cell.maxcell] = j;
- cell.rowspan[cell.maxcell] = rowspan;
- cell.height[cell.maxcell] = 0;
- if (cell.maxcell > k)
- bcopy(cell.indexarray + k, cell.indexarray + k + 1,
- cell.maxcell - k);
- cell.indexarray[k] = cell.maxcell;
+ if (c >= cell.size) {
+ if (cell.size == 0) {
+ cell.size = max(MAXCELL, c + 1);
+ cell.row = NewAtom_N(short, cell.size);
+ cell.rowspan = NewAtom_N(short, cell.size);
+ cell.indexarray = NewAtom_N(char, cell.size);
+ cell.height = NewAtom_N(short, cell.size);
+ } else {
+ cell.size = max(cell.size + MAXCELL, c + 1);
+ cell.row = New_Reuse(short, cell.row, cell.size);
+ cell.rowspan = New_Reuse(short, cell.rowspan,
+ cell.size);
+ cell.indexarray = New_Reuse(char, cell.indexarray,
+ cell.size);
+ cell.height = New_Reuse(short, cell.height, cell.size);
}
-
- if (cell.height[c] < t_dep)
- cell.height[c] = t_dep;
}
+ if (c > cell.maxcell) {
+ cell.maxcell++;
+ cell.row[cell.maxcell] = j;
+ cell.rowspan[cell.maxcell] = rowspan;
+ cell.height[cell.maxcell] = 0;
+ if (cell.maxcell > k)
+ bcopy(cell.indexarray + k, cell.indexarray + k + 1,
+ cell.maxcell - k);
+ cell.indexarray[k] = cell.maxcell;
+ }
+
+ if (cell.height[c] < t_dep)
+ cell.height[c] = t_dep;
continue;
}
if (t->tabheight[j] < t_dep)