From: Ben Pfaff Date: Thu, 26 Dec 2019 01:14:32 +0000 (+0000) Subject: render: Fix up layer violation in add_footnote_page(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=902e361601700747d94ce44cf2426feb53ddd35b;p=pspp render: Fix up layer violation in add_footnote_page(). The layering violation came from having to look up the default style for a footer, so we fix it by forbidding footnotes from using the default style. --- diff --git a/src/output/render.c b/src/output/render.c index 423940b068..d26fc46ebc 100644 --- a/src/output/render.c +++ b/src/output/render.c @@ -26,7 +26,6 @@ #include "libpspp/hash-functions.h" #include "libpspp/hmap.h" #include "libpspp/pool.h" -#include "output/pivot-table.h" /* XXX for PIVOT_AREA_FOOTER */ #include "output/render.h" #include "output/table-item.h" #include "output/table.h" @@ -1510,17 +1509,10 @@ add_footnote_page (struct render_pager *p, const struct table_item *item) struct table *t = table_create (1, n_footnotes, 0, 0, 0, 0); - const struct area_style *style = item->table->styles[PIVOT_AREA_FOOTER]; - if (!style) - style = pivot_area_get_default_style (PIVOT_AREA_FOOTER); - t->styles[PIVOT_AREA_FOOTER] = area_style_clone (t->container, style); - for (size_t i = 0; i < n_footnotes; i++) { - table_text_format (t, 0, i, PIVOT_AREA_FOOTER << TAB_STYLE_SHIFT, - "%s. %s", f[i]->marker, f[i]->content); - if (f[i]->style) - table_add_style (t, 0, i, f[i]->style); + table_text_format (t, 0, i, 0, "%s. %s", f[i]->marker, f[i]->content); + table_add_style (t, 0, i, f[i]->style); } render_pager_add_table (p, t, 0); diff --git a/src/output/table.c b/src/output/table.c index 2fa40c9091..a4730f85e5 100644 --- a/src/output/table.c +++ b/src/output/table.c @@ -644,6 +644,8 @@ struct footnote * table_create_footnote (struct table *table, size_t idx, const char *content, const char *marker, struct area_style *style) { + assert (style); + struct footnote *f = pool_alloc (table->container, sizeof *f); f->idx = idx; f->content = pool_strdup (table->container, content); @@ -654,8 +656,10 @@ table_create_footnote (struct table *table, size_t idx, const char *content, void table_add_footnote (struct table *table, int x, int y, - const struct footnote *f) + const struct footnote *f) { + assert (f->style); + int index = x + y * table_nc (table); unsigned short opt = table->ct[index]; struct table_joined_cell *j; diff --git a/tests/output/render-test.c b/tests/output/render-test.c index 90b5867f87..49a76a66ad 100644 --- a/tests/output/render-test.c +++ b/tests/output/render-test.c @@ -475,7 +475,8 @@ read_table (FILE *stream) { char marker[2] = { 'a' + n_footnotes, '\0' }; struct footnote *f = table_create_footnote ( - tab, n_footnotes, content, marker, NULL); + tab, n_footnotes, content, marker, + area_style_clone (tab->container, &left_style)); table_add_footnote (tab, c, r, f); n_footnotes++; }