[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>
This commit is contained in:
Fumitoshi UKAI
2002-04-09 14:53:54 +00:00
parent c2c01b60dd
commit 4745005121
2 changed files with 42 additions and 19 deletions

View File

@@ -1,3 +1,9 @@
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)
@@ -3334,4 +3340,4 @@
* release-0-2-1
* import w3m-0.2.1
$Id: ChangeLog,v 1.368 2002/04/09 14:45:58 ukai Exp $
$Id: ChangeLog,v 1.369 2002/04/09 14:53:54 ukai Exp $

53
table.c
View File

@@ -1,4 +1,4 @@
/* $Id: table.c,v 1.22 2002/03/12 16:59:50 ukai Exp $ */
/* $Id: table.c,v 1.23 2002/04/09 14:53:54 ukai Exp $ */
/*
* HTML table
*/
@@ -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)