X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftab.c;h=8ef077e38fae99f8a8b2d8c54b4c3b22f541e296;hb=d3fef25674baf4f4e25502f257c680b5090535c6;hp=bb6b82a2da5e843e47b3ac123eb26d23caead909;hpb=f1db96caae465cb7daaf6efbe69ae17069ea1198;p=pspp diff --git a/src/output/tab.c b/src/output/tab.c index bb6b82a2da..8ef077e38f 100644 --- a/src/output/tab.c +++ b/src/output/tab.c @@ -59,6 +59,9 @@ struct tab_joined_cell struct table_item *subtable; } u; + + size_t n_footnotes; + char **footnotes; }; static const struct table_class tab_table_class; @@ -544,6 +547,8 @@ add_joined_cell (struct tab_table *table, int x1, int y1, int x2, int y2, j->d[TABLE_VERT][0] = y1 + table->row_ofs; j->d[TABLE_HORZ][1] = ++x2 + table->col_ofs; j->d[TABLE_VERT][1] = ++y2 + table->row_ofs; + j->n_footnotes = 0; + j->footnotes = NULL; { void **cc = &table->cc[x1 + y1 * table->cf]; @@ -597,6 +602,32 @@ tab_joint_text_format (struct tab_table *table, int x1, int y1, int x2, int y2, add_joined_cell (table, x1, y1, x2, y2, opt)->u.text = s; } +void +tab_footnote (struct tab_table *table, int x, int y, const char *format, ...) +{ + int index = x + y * table->cf; + unsigned char opt = table->ct[index]; + struct tab_joined_cell *j; + va_list args; + + 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->footnotes = xrealloc (j->footnotes, + (j->n_footnotes + 1) * sizeof *j->footnotes); + + va_start (args, format); + j->footnotes[j->n_footnotes++] = pool_vasprintf (table->container, format, args); + va_end (args); +} + static void subtable_unref (void *subtable) { @@ -752,6 +783,7 @@ tab_get_cell (const struct table *table, int x, int y, struct table_cell *cell) cell->inline_contents.options = opt; cell->inline_contents.table = NULL; + cell->inline_contents.n_footnotes = 0; cell->destructor = NULL; if (opt & TAB_JOIN) @@ -777,6 +809,9 @@ tab_get_cell (const struct table *table, int x, int y, struct table_cell *cell) cell->inline_contents.text = jc->u.text; } + cell->inline_contents.footnotes = jc->footnotes; + cell->inline_contents.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_VERT][0] = jc->d[TABLE_VERT][0];