n_RC
};
+#define TAB_STYLE_MASK (7u << (TAB_FIRST_AVAILABLE + 3))
+#define TAB_STYLE_SHIFT (TAB_FIRST_AVAILABLE + 3)
+
+/* Rule masks. */
+#define TAB_RULE_TYPE_MASK 7
+#define TAB_RULE_TYPE_SHIFT 0
+#define TAB_RULE_STYLE_MASK (31 << TAB_RULE_STYLE_SHIFT)
+#define TAB_RULE_STYLE_SHIFT 3
+
/* A table. */
struct tab_table
{
however, it is a joined cell and the corresponding element of cc[]
points to a struct tab_joined_cell. */
void **cc; /* Cell contents; void *[nr][nc]. */
- unsigned char *ct; /* Cell types; unsigned char[nr][nc]. */
+ unsigned short *ct; /* Cell types; unsigned short[nr][nc]. */
+ struct cell_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 cell_color *rule_colors[32];
/* X and Y offsets. */
int col_ofs, row_ofs;
struct fmt_spec;
struct dictionary;
union value;
-void tab_value (struct tab_table *, int c, int r, unsigned char opt,
+void tab_value (struct tab_table *, int c, int r, unsigned short opt,
const union value *, const struct variable *,
const struct fmt_spec *);
-void tab_double (struct tab_table *, int c, int r, unsigned char opt,
+void tab_double (struct tab_table *, int c, int r, unsigned short opt,
double v, const struct fmt_spec *, enum result_class );
void tab_text (struct tab_table *, int c, int r, unsigned opt, const char *);
unsigned opt, const char *, ...)
PRINTF_FORMAT (7, 8);
-void tab_footnote (struct tab_table *, int x, int y, const char *format, ...)
- PRINTF_FORMAT (4, 5);
+struct footnote *tab_create_footnote (struct tab_table *, size_t idx,
+ const char *content, const char *marker,
+ struct cell_style *);
+void tab_add_footnote (struct tab_table *, int x, int y,
+ const struct footnote *);
+
+void tab_add_style (struct tab_table *, int x, int y,
+ const struct cell_style *);
bool tab_cell_is_empty (const struct tab_table *, int c, int r);