size_t n_footnotes;
const struct footnote **footnotes;
- const struct cell_style *style;
+ const struct area_style *style;
};
static const struct table_class tab_table_class;
struct footnote *
tab_create_footnote (struct tab_table *table, size_t idx, const char *content,
- const char *marker, struct cell_style *style)
+ const char *marker, struct area_style *style)
{
struct footnote *f = pool_alloc (table->container, sizeof *f);
f->idx = idx;
void
tab_add_style (struct tab_table *table, int x, int y,
- const struct cell_style *style)
+ const struct area_style *style)
{
int index = x + y * table->cf;
unsigned short opt = table->ct[index];
void
tab_output_text (int options, const char *string)
{
- enum text_item_type type = (options & TAB_EMPH ? TEXT_ITEM_SUBHEAD
- : options & TAB_FIX ? TEXT_ITEM_MONOSPACE
+ enum text_item_type type = (options & TAB_EMPH ? TEXT_ITEM_TITLE
+ : options & TAB_FIX ? TEXT_ITEM_LOG
: TEXT_ITEM_PARAGRAPH);
text_item_submit (text_item_create (type, string));
}
unsigned short opt = t->ct[index];
const void *cc = t->cc[index];
- cell->inline_contents.options = opt;
- cell->inline_contents.n_footnotes = 0;
+ cell->options = opt;
+ cell->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];
+ const struct area_style *style = t->styles[style_idx];
if (style)
cell->style = style;
+ else
+ {
+ static const struct area_style styles[3][3] = {
+#define S(H,V) [H][V] = { AREA_STYLE_INITIALIZER__, \
+ .cell_style.halign = H, \
+ .cell_style.valign = V }
+ S(TABLE_HALIGN_LEFT, TABLE_VALIGN_TOP),
+ S(TABLE_HALIGN_LEFT, TABLE_VALIGN_CENTER),
+ S(TABLE_HALIGN_LEFT, TABLE_VALIGN_BOTTOM),
+ S(TABLE_HALIGN_CENTER, TABLE_VALIGN_TOP),
+ S(TABLE_HALIGN_CENTER, TABLE_VALIGN_CENTER),
+ S(TABLE_HALIGN_CENTER, TABLE_VALIGN_BOTTOM),
+ S(TABLE_HALIGN_RIGHT, TABLE_VALIGN_TOP),
+ S(TABLE_HALIGN_RIGHT, TABLE_VALIGN_CENTER),
+ S(TABLE_HALIGN_RIGHT, TABLE_VALIGN_BOTTOM),
+ };
+
+ enum table_halign halign
+ = ((opt & TAB_HALIGN) == TAB_LEFT ? TABLE_HALIGN_LEFT
+ : (opt & TAB_HALIGN) == TAB_CENTER ? TABLE_HALIGN_CENTER
+ : TABLE_HALIGN_RIGHT);
+ enum table_valign valign
+ = ((opt & TAB_VALIGN) == TAB_TOP ? TABLE_VALIGN_TOP
+ : (opt & TAB_VALIGN) == TAB_CENTER ? TABLE_VALIGN_CENTER
+ : TABLE_VALIGN_BOTTOM);
+
+ cell->style = &styles[halign][valign];
+ }
if (opt & TAB_JOIN)
{
const struct tab_joined_cell *jc = cc;
- cell->contents = &cell->inline_contents;
- cell->n_contents = 1;
- cell->inline_contents.text = jc->u.text;
+ cell->text = jc->u.text;
- cell->inline_contents.footnotes = jc->footnotes;
- cell->inline_contents.n_footnotes = jc->n_footnotes;
+ cell->footnotes = jc->footnotes;
+ cell->n_footnotes = jc->n_footnotes;
cell->d[TABLE_HORZ][0] = jc->d[TABLE_HORZ][0];
cell->d[TABLE_HORZ][1] = jc->d[TABLE_HORZ][1];
cell->d[TABLE_HORZ][1] = x + 1;
cell->d[TABLE_VERT][0] = y;
cell->d[TABLE_VERT][1] = y + 1;
- if (cc != NULL)
- {
- cell->contents = &cell->inline_contents;
- cell->n_contents = 1;
- cell->inline_contents.text = CONST_CAST (char *, cc);
- }
- else
- {
- cell->contents = NULL;
- cell->n_contents = 0;
- }
+ cell->text = CONST_CAST (char *, cc ? cc : "");
}
}