Table Rendering Algorithm

Does anybody have or know where to find a table rendering algorithm. I need to implement a simple <table>,<tr> and <td> system to render a HTML like table on a fixed font printer.
LVL 27
Who is Participating?
Eddie ShipmanConnect With a Mentor All-around developerCommented:
In row 1, the colwidths are 33% and 67%
In row 2 the colwidths are 67% and 33%
Eddie ShipmanAll-around developerCommented:
in what language?
BigRatAuthor Commented:
It can be in any language you like, Eddie. In fact I will rewrite it into RatScript.

I have simply the elements TR and TD, the TABLE element just starts it off. The contents of TD is fixed font, so the width=length of the text, height = constant. But I allow a column span on TD, so I now need another algorithm to render the table.
Never miss a deadline with

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

Eddie ShipmanAll-around developerCommented:
I'm really not sure what you're after here. Are you taking a data table
and iterating the records to create an HTML table to print on a fixed font

What options do you want as far as styles is concerned? do you want to control
the width of the columns, colspan, etc?

This is a pretty broad question that can lead to loads of ineffective code.
BigRatAuthor Commented:
I have explained a bit about what I'm doing in the HTML barcode question, to which you have recently contributed.

I started off with something like :-

<tr><td>Order Number:</td><td>$mbest_nr$</td></tr>
<tr><td>Order Type:</td><td>$type$</td></tr>
<tr><td>Description:</td><td><format type="short" format="6"/></td></tr>

(The contents are irrelevant, they get fetched out of databases etc...)

This produced a table with a fixed number of columns and I was able to write an algorithm to format it onto a printer, or into a fixed font document. The HTML version is just a simple translation.

Next if I have a table like :-


I fill out the relevant rows, BUT I'd like to add a row like :-

    <tr><td cols="3">--> order 3 months outstanding!!!</td></tr>

The question now arises, how do you implement column spanning?

I thought, since most browsers have to implement this sort of complexity, somenbody might know of a link or a document which broaches the subject and can give me a start without having to re-invent the wheel.
Eddie ShipmanAll-around developerCommented:
<tr><td colspan="3">--> order 3 months outstanding!!!</td></tr>

is how to do the column spanning.
BigRatAuthor Commented:
It is irrelevant whether one writes cols="3" or colspan="3", the point is in :-

<tr><td>some text</td><td colspan="2">some other text</td></tr>
<tr><td colspan="2">some more text</td><td>even more text</td></tr>

The table has three columns. What are the widths of columns 1,2,3 given the withds of the cells above? And please generalize the algorithm for an arbitary number of rows and columns.
BigRatAuthor Commented:
Of course, one works out a percentage of the whole!

1. Determine the width of each row, by adding the width of each "td".
2. Determine the max-width (or allow to be set somewhere)
3. Determine the rows "cell" count (cell = <td colspan=1>)
4. Each cell has a width of max-width/count
5. Each td has a width of colspan*cell-width
6. Fit the text in the td accoding to it's width and properties.

I'll implement that and get back in a couple of hours!
Eddie ShipmanAll-around developerCommented:
It is no different that dynamically resizing columns on a TStringGrid
and I know you've done that before... ;-)
BigRatAuthor Commented:
I have implemented it with border selection as well. I can't think why I did not see the solution before?! Thanks for the pointer!
All Courses

From novice to tech pro — start learning today.