X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftab.c;h=435fa609ce06d4547f885f07aad3ad5c6e336e08;hb=01d6db8119ca4553d61841f2a9248712d4c6e0dc;hp=23fccd6f9c035d9f29d755f3024c6e412df80eb4;hpb=6499a5881aeaa1e53b761f624e341652015d795e;p=pspp diff --git a/src/output/tab.c b/src/output/tab.c index 23fccd6f9c..435fa609ce 100644 --- a/src/output/tab.c +++ b/src/output/tab.c @@ -64,6 +64,8 @@ struct tab_joined_cell size_t n_footnotes; const struct footnote **footnotes; + + const struct cell_style *style; }; static const struct table_class tab_table_class; @@ -560,6 +562,7 @@ add_joined_cell (struct tab_table *table, int x1, int y1, int x2, int y2, 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]; @@ -618,12 +621,13 @@ tab_joint_text_format (struct tab_table *table, int x1, int y1, int x2, struct footnote * tab_create_footnote (struct tab_table *table, size_t idx, const char *content, - const char *marker) + const char *marker, struct cell_style *style) { struct footnote *f = pool_alloc (table->container, sizeof *f); f->idx = idx; f->content = pool_strdup (table->container, content); f->marker = pool_strdup (table->container, marker); + f->style = style; return f; } @@ -651,6 +655,27 @@ tab_add_footnote (struct tab_table *table, int x, int y, 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) { @@ -793,6 +818,11 @@ tab_get_cell (const struct table *table, int x, int y, 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; @@ -807,6 +837,9 @@ tab_get_cell (const struct table *table, int x, int y, 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 { @@ -826,11 +859,6 @@ tab_get_cell (const struct table *table, int x, int y, cell->n_contents = 0; } } - - int style_idx = (opt & TAB_STYLE_MASK) >> TAB_STYLE_SHIFT; - const struct cell_style *style = t->styles[style_idx]; - if (style) - cell->style = style; } static int