diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | table.c | 53 |
2 files changed, 42 insertions, 19 deletions
@@ -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 @@ -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 $ @@ -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) |