+ fputs (" <TR>\n", html->file);
+ for (x = 0; x < table_nc (t); x++)
+ {
+ struct table_cell cell;
+ const char *tag;
+ bool is_header;
+ int alignment, colspan, rowspan;
+ int top, left, right, bottom, n_borders;
+ const char *s;
+
+ table_get_cell (t, x, y, &cell);
+ if (x != cell.d[TABLE_HORZ][0] || y != cell.d[TABLE_VERT][0])
+ continue;
+
+ /* Output <TD> or <TH> tag. */
+ is_header = (y < table_ht (t)
+ || y >= table_nr (t) - table_hb (t)
+ || x < table_hl (t)
+ || x >= table_nc (t) - table_hr (t));
+ tag = is_header ? "TH" : "TD";
+ fprintf (html->file, " <%s", tag);
+
+ alignment = cell.options & TAB_ALIGNMENT;
+ if (alignment != TAB_LEFT)
+ fprintf (html->file, " ALIGN=\"%s\"",
+ alignment == TAB_RIGHT ? "RIGHT" : "CENTER");
+
+ colspan = table_cell_colspan (&cell);
+ if (colspan > 1)
+ fprintf (html->file, " COLSPAN=\"%d\"", colspan);
+
+ rowspan = table_cell_rowspan (&cell);
+ if (rowspan > 1)
+ fprintf (html->file, " ROWSPAN=\"%d\"", rowspan);
+
+ if (html->borders)
+ {
+ /* Cell borders. */
+ n_borders = 0;
+
+ top = table_get_rule (t, TABLE_VERT, x, y);
+ if (top > TAL_GAP)
+ put_border (html->file, n_borders++, top, "top");
+
+ if (y == table_nr (t) - 1)
+ {
+ bottom = table_get_rule (t, TABLE_VERT, x, y + 1);
+ if (bottom > TAL_GAP)
+ put_border (html->file, n_borders++, bottom, "bottom");
+ }
+
+ left = table_get_rule (t, TABLE_HORZ, x, y);
+ if (left > TAL_GAP)
+ put_border (html->file, n_borders++, left, "left");
+
+ if (x == table_nc (t) - 1)
+ {
+ right = table_get_rule (t, TABLE_HORZ, x + 1, y);
+ if (right > TAL_GAP)
+ put_border (html->file, n_borders++, right, "right");
+ }
+
+ if (n_borders > 0)
+ fputs ("\"", html->file);
+ }
+
+ putc ('>', html->file);
+
+ /* Output cell contents. */
+ s = cell.contents;
+ if (cell.options & TAB_EMPH)
+ fputs ("<EM>", html->file);
+ if (cell.options & TAB_FIX)
+ {
+ fputs ("<TT>", html->file);
+ escape_string (html->file, s, strlen (s), " ");
+ fputs ("</TT>", html->file);
+ }
+ else
+ {
+ s += strspn (s, CC_SPACES);
+ escape_string (html->file, s, strlen (s), " ");
+ }
+ if (cell.options & TAB_EMPH)
+ fputs ("</EM>", html->file);
+
+ /* Output </TH> or </TD>. */
+ fprintf (html->file, "</%s>\n", tag);
+
+ table_cell_free (&cell);
+ }
+ fputs (" </TR>\n", html->file);