- TAT_NONE = 0, /* No options. */
- TAT_PRINTF = 0x0100, /* Format the text string with sprintf. */
- TAT_TITLE = 0x0200 | TAB_EMPH, /* Title attributes. */
- TAT_NOWRAP = 0x0800 /* No text wrap (tab_output_text() only). */
+ TABLE_CELL_ROTATE = 1 << 0, /* Rotate cell contents 90 degrees. */
+ TABLE_CELL_JOIN = 1 << 1, /* Joined cell (internal use only). */
+ TABLE_CELL_STYLE_SHIFT = 2,
+ TABLE_CELL_STYLE_MASK = 7 << TABLE_CELL_STYLE_SHIFT,
+ };
+
+/* A table. */
+struct table
+ {
+ struct pool *container;
+
+ /* Table size.
+
+ n[TABLE_HORZ]: Number of columns.
+ n[TABLE_VERT]: Number of rows. */
+ int n[TABLE_N_AXES];
+
+ /* Table headers.
+
+ Rows at the top and bottom of a table and columns at the left and right
+ edges of a table can be designated as headers. If the table must be
+ broken across more than one page for output, headers rows and columns
+ are repeated on each page.
+
+ h[TABLE_HORZ][0]: Left header columns.
+ h[TABLE_HORZ][1]: Right header columns.
+ h[TABLE_VERT][0]: Top header rows.
+ h[TABLE_VERT][1]: Bottom header rows. */
+ int h[TABLE_N_AXES][2];
+
+ /* Reference count. A table may be shared between multiple owners,
+ indicated by a reference count greater than 1. When this is the case,
+ the table must not be modified. */
+ int ref_cnt;
+
+ /* Table contents.
+
+ Each array element in cc[] is ordinarily a "struct pivot_value *". If
+ TABLE_CELL_JOIN is set in cp[] for the element, however, it is a joined
+ cell and the corresponding element of cc[] points to a struct
+ table_cell. */
+ void **cc; /* Cell contents; void *[nr][nc]. */
+ unsigned char *cp; /* Cell properties; unsigned char[nr][nc]. */
+ struct table_area_style *styles[8];
+
+ /* Rules. */
+ unsigned char *rh; /* Horiz rules; unsigned char[nr+1][nc]. */
+ unsigned char *rv; /* Vert rules; unsigned char[nr][nc+1]. */
+ struct table_border_style *borders;
+ size_t n_borders;