[w3m-dev 02909] wrong table width calculation (sf.net Bug#506949)
* table.c (correct_table_matrix4): added * table.c (set_table_matrix0): use correct_table_matrix4() From: Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2002-01-26 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
|
* [w3m-dev 02909] wrong table width calculation (sf.net Bug#506949)
|
||||||
|
* table.c (correct_table_matrix4): added
|
||||||
|
* table.c (set_table_matrix0): use correct_table_matrix4()
|
||||||
|
|
||||||
2002-01-25 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
|
2002-01-25 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
* [w3m-dev 02908] document code of frame
|
* [w3m-dev 02908] document code of frame
|
||||||
@@ -2291,4 +2297,4 @@
|
|||||||
* release-0-2-1
|
* release-0-2-1
|
||||||
* import w3m-0.2.1
|
* import w3m-0.2.1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.261 2002/01/25 14:59:14 ukai Exp $
|
$Id: ChangeLog,v 1.262 2002/01/25 15:10:14 ukai Exp $
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: table.c,v 1.14 2002/01/23 17:57:10 ukai Exp $ */
|
/* $Id: table.c,v 1.15 2002/01/25 15:10:14 ukai Exp $ */
|
||||||
/*
|
/*
|
||||||
* HTML table
|
* HTML table
|
||||||
*/
|
*/
|
||||||
@@ -3179,12 +3179,39 @@ correct_table_matrix3(struct table *t, int col, char *flags, double s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
correct_table_matrix4(struct table *t, int col, int cspan, char *flags,
|
||||||
|
double s, double b)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
double ss;
|
||||||
|
int ecol = col + cspan;
|
||||||
|
int size = t->maxcol + 1;
|
||||||
|
double w = 1. / (b * b);
|
||||||
|
|
||||||
|
for (i = 0; i < size; i++) {
|
||||||
|
if (flags[i] && !(i >= col && i < ecol))
|
||||||
|
continue;
|
||||||
|
for (j = i; j < size; j++) {
|
||||||
|
if (flags[j] && !(j >= col && j < ecol))
|
||||||
|
continue;
|
||||||
|
if (i >= col && i < ecol && j >= col && j < ecol)
|
||||||
|
ss = (1. - s) * (1. - s);
|
||||||
|
else if ((i >= col && i < ecol) || (j >= col && j < ecol))
|
||||||
|
ss = -(1. - s) * s;
|
||||||
|
else
|
||||||
|
ss = s * s;
|
||||||
|
m_add_val(t->matrix, i, j, w * ss);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_table_matrix0(struct table *t, int maxwidth)
|
set_table_matrix0(struct table *t, int maxwidth)
|
||||||
{
|
{
|
||||||
int size = t->maxcol + 1;
|
int size = t->maxcol + 1;
|
||||||
int i, j, k, bcol, ecol;
|
int i, j, k, bcol, ecol;
|
||||||
int swidth, width, a;
|
int width, a;
|
||||||
double w0, w1, w, s, b;
|
double w0, w1, w, s, b;
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
double we[size];
|
double we[size];
|
||||||
@@ -3218,26 +3245,27 @@ set_table_matrix0(struct table *t, int maxwidth)
|
|||||||
j = cell->eindex[k];
|
j = cell->eindex[k];
|
||||||
bcol = cell->col[j];
|
bcol = cell->col[j];
|
||||||
ecol = bcol + cell->colspan[j];
|
ecol = bcol + cell->colspan[j];
|
||||||
swidth = 0;
|
|
||||||
for (i = bcol; i < ecol; i++) {
|
for (i = bcol; i < ecol; i++) {
|
||||||
swidth += t->tabwidth[i];
|
|
||||||
expand[i]++;
|
expand[i]++;
|
||||||
}
|
}
|
||||||
width = cell->width[j] - (cell->colspan[j] - 1) * t->cellspacing;
|
|
||||||
w = weight(width);
|
|
||||||
w1 = 0.;
|
|
||||||
for (i = bcol; i < ecol; i++)
|
|
||||||
w1 += we[i];
|
|
||||||
s = w / (w0 + w - w1);
|
|
||||||
a = (int)(s * maxwidth);
|
|
||||||
b = sigma_td_nw(a);
|
|
||||||
correct_table_matrix2(t, bcol, cell->colspan[j], s, b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
w1 = 0.;
|
w1 = 0.;
|
||||||
for (i = 0; i < size; i++)
|
for (i = 0; i < size; i++)
|
||||||
if (expand[i] == 0)
|
if (expand[i] == 0)
|
||||||
w1 += we[i];
|
w1 += we[i];
|
||||||
|
|
||||||
|
for (k = 0; k < cell->necell; k++) {
|
||||||
|
j = cell->eindex[k];
|
||||||
|
bcol = cell->col[j];
|
||||||
|
width = cell->width[j] - (cell->colspan[j] - 1) * t->cellspacing;
|
||||||
|
w = weight(width);
|
||||||
|
s = w / (w1 + w);
|
||||||
|
a = (int)(s * maxwidth);
|
||||||
|
b = sigma_td_nw(a);
|
||||||
|
correct_table_matrix4(t, bcol, cell->colspan[j], expand, s, b);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < size; i++) {
|
for (i = 0; i < size; i++) {
|
||||||
if (expand[i] == 0) {
|
if (expand[i] == 0) {
|
||||||
s = we[i] / max(w1, 1.);
|
s = we[i] / max(w1, 1.);
|
||||||
|
|||||||
Reference in New Issue
Block a user