CSS describes two ways of layouting tables. Auto layout (the NS4
compliant HTML table layout) and fixed layout. The fixed layout
strategy is described in detail in the CSS specs and will not be
repeated here.

Due to the fact that two layout strategies exist, it is rather natural
to encapsulate the layouting 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-layout 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 layouting algorithm (AutoTableLayout)
------------------------------------------------------------------

The table layout algorithm computes a set of layout 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 layout 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 layout()).

A set of hinted widths are used to determine the final table layout in
the layouting 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 layouted. The layouting 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:
-----------------


