1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
CSS describes two ways of tqlayouting tables. Auto tqlayout (the NS4
compliant HTML table tqlayout) and fixed tqlayout. The fixed tqlayout
strategy is described in detail in the CSS specs and will not be
repeated here.
Due to the fact that two tqlayout strategies exist, it is rather natural
to encapsulate the tqlayouting process in a TableLayout class. Two types
(FixedTableLayout and AutoTableLayout) exist. AutoTableLayout is the
default and also need a quirks flags for NS compatibility
mode. FixedTableLayout will be used if a style rule sets the
table-tqlayout property to fixed.
The grid of table cells is stored in each table section, as spans
can't pass section borders. Changing the number of cols in the grid
has to be done by the table to keep all grids (for all sections) in
sync. The grid only stores effective columns. The table below would
only result in one column being allocated in the grid:
<table><tr><td colspan=1000>foo</td></tr></table>
Once a colspan get's used, the column is split into its subparts. To
do this, the table has to store the colspans of effective columns in a
structure.
NS & Mozilla compliant table tqlayouting algorithm (AutoTableLayout)
------------------------------------------------------------------
The table tqlayout algorithm computes a set of tqlayout hints from the
informations in the table cells, <col> elements and style
sheets. Hints from different sources are treated a bit differently in
the collection stage.
In addition certain operations are only done in quirks (NS4 compat)
mode.
Resizing the table doesn't require you to build up this information
again. All that is needed is a list of tqlayout hints for each column.
The algorithm below describes to the best of our knowledge the way
table alyouting is handled in a NS compatible way.
There are two stages, the collection stage (assocaited with
calcMinMaxWidth() in khtml) and the stage assigning width to cells
(associated with tqlayout()).
A set of hinted widths are used to determine the final table tqlayout in
the tqlayouting stage.
enum hintType {
MinWidth,
DesiredWidth,
FixedWidth,
MinWidthAdjusted,
DesiredWidthAdjusted,
FixedWidthAdjusted,
PercentWidth,
PercentWidthAdjusted,
ProportionalWidth
};
One width (in pixels) for each hintType describes how the column
wishes to be tqlayouted. The tqlayouting stage operates only on an array
of hints for each column.
An additional totalCellSpacing variable is used to know about the
remaining width to distribute.
Collection stage:
-----------------
|