#define _(msgid) gettext (msgid)
\f
-#if DEBUGGING
static const bool debugging = true;
-#else
-static const bool debugging = false;
-#endif
+
/* Cell options. */
#define TAB_JOIN (1u << TAB_FIRST_AVAILABLE)
size_t n_footnotes;
const struct footnote **footnotes;
+
+ const struct cell_style *style;
};
static const struct table_class tab_table_class;
t->fmtmap[RC_INTEGER] = ugly[RC_INTEGER];
t->fmtmap[RC_OTHER] = *settings_get_format ();
+ memset (t->styles, 0, sizeof t->styles);
+ memset (t->rule_colors, 0, sizeof t->rule_colors);
+
t->col_ofs = t->row_ofs = 0;
return t;
j->d[TABLE_VERT][1] = ++y2 + table->row_ofs;
j->n_footnotes = 0;
j->footnotes = NULL;
+ j->style = NULL;
{
void **cc = &table->cc[x1 + y1 * table->cf];
j->footnotes[j->n_footnotes++] = f;
}
+void
+tab_add_style (struct tab_table *table, int x, int y,
+ const struct cell_style *style)
+{
+ int index = x + y * table->cf;
+ unsigned short opt = table->ct[index];
+ struct tab_joined_cell *j;
+
+ if (opt & TAB_JOIN)
+ j = table->cc[index];
+ else
+ {
+ char *text = table->cc[index];
+
+ j = add_joined_cell (table, x, y, x, y, table->ct[index]);
+ j->u.text = text ? text : xstrdup ("");
+ }
+
+ j->style = style;
+}
+
bool
tab_cell_is_empty (const struct tab_table *table, int c, int r)
{
cell->inline_contents.n_footnotes = 0;
cell->destructor = NULL;
+ int style_idx = (opt & TAB_STYLE_MASK) >> TAB_STYLE_SHIFT;
+ const struct cell_style *style = t->styles[style_idx];
+ if (style)
+ cell->style = style;
+
if (opt & TAB_JOIN)
{
const struct tab_joined_cell *jc = cc;
cell->d[TABLE_HORZ][1] = jc->d[TABLE_HORZ][1];
cell->d[TABLE_VERT][0] = jc->d[TABLE_VERT][0];
cell->d[TABLE_VERT][1] = jc->d[TABLE_VERT][1];
+
+ if (jc->style)
+ cell->style = jc->style;
}
else
{
}
static int
-tab_get_rule (const struct table *table, enum table_axis axis, int x, int y)
+tab_get_rule (const struct table *table, enum table_axis axis, int x, int y,
+ struct cell_color *color)
{
const struct tab_table *t = tab_cast (table);
- return (axis == TABLE_VERT
- ? t->rh[x + t->cf * y] : t->rv[x + (t->cf + 1) * y]);
+ uint8_t raw = (axis == TABLE_VERT
+ ? t->rh[x + t->cf * y] : t->rv[x + (t->cf + 1) * y]);
+ struct cell_color *p = t->rule_colors[(raw & TAB_RULE_STYLE_MASK)
+ >> TAB_RULE_STYLE_SHIFT];
+ if (p)
+ *color = *p;
+ return (raw & TAB_RULE_TYPE_MASK) >> TAB_RULE_TYPE_SHIFT;
}
static const struct table_class tab_table_class = {