From 085811c026897c8deedd5b1e1786c8b51443383f Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 9 Feb 2019 14:58:37 -0800 Subject: [PATCH] output: Reimplement table_from_string in terms of tab. With this change, there is only a single table_class in the tree. --- src/output/ascii.c | 3 +- src/output/cairo.c | 3 +- src/output/table.c | 80 ++++------------------------------------------ src/output/table.h | 2 +- 4 files changed, 10 insertions(+), 78 deletions(-) diff --git a/src/output/ascii.c b/src/output/ascii.c index 2193f35224..6f8644ba3f 100644 --- a/src/output/ascii.c +++ b/src/output/ascii.c @@ -461,8 +461,7 @@ static void ascii_output_text (struct ascii_driver *a, const char *text) { ascii_output_table_item_unref ( - a, table_item_create (table_from_string (TABLE_HALIGN_LEFT, text), - NULL, NULL)); + a, table_item_create (table_from_string (text), NULL, NULL)); } static void diff --git a/src/output/cairo.c b/src/output/cairo.c index 56919b8d77..4794fe25e1 100644 --- a/src/output/cairo.c +++ b/src/output/cairo.c @@ -1585,8 +1585,7 @@ xr_rendering_create_text (struct xr_driver *xr, const char *text, cairo_t *cr) struct table_item *table_item; struct xr_rendering *r; - table_item = table_item_create (table_from_string (TABLE_HALIGN_LEFT, text), - NULL, NULL); + table_item = table_item_create (table_from_string (text), NULL, NULL); r = xr_rendering_create (xr, &table_item->output_item, cr); table_item_unref (table_item); diff --git a/src/output/table.c b/src/output/table.c index 3690df3bd6..8f717ead56 100644 --- a/src/output/table.c +++ b/src/output/table.c @@ -30,6 +30,7 @@ #include "libpspp/pool.h" #include "libpspp/str.h" #include "output/table-item.h" +#include "output/tab.h" #include "gl/xalloc.h" @@ -297,82 +298,15 @@ table_collect_footnotes (const struct table_item *item, return n; } -struct table_string - { - struct table table; - char *string; - enum table_halign halign; - }; - -static const struct table_class table_string_class; - -/* Returns a table that contains a single cell, whose contents are S with - options OPTIONS (a combination of TAB_* values). */ +/* Returns a table that contains a single cell, whose contents are the + left-aligned TEXT. */ struct table * -table_from_string (enum table_halign halign, const char *s) -{ - struct table_string *ts = xmalloc (sizeof *ts); - table_init (&ts->table, &table_string_class); - ts->table.n[TABLE_HORZ] = ts->table.n[TABLE_VERT] = 1; - ts->string = xstrdup (s); - ts->halign = halign; - return &ts->table; -} - -static struct table_string * -table_string_cast (const struct table *table) -{ - assert (table->klass == &table_string_class); - return UP_CAST (table, struct table_string, table); -} - -static void -table_string_destroy (struct table *ts_) +table_from_string (const char *text) { - struct table_string *ts = table_string_cast (ts_); - free (ts->string); - free (ts); + struct tab_table *t = tab_create (1, 1); + tab_text (t, 0, 0, TAB_LEFT, text); + return &t->table; } - -static void -table_string_get_cell (const struct table *ts_, int x UNUSED, int y UNUSED, - struct table_cell *cell) -{ - static const struct area_style styles[] = { -#define S(H) [H] = { AREA_STYLE_INITIALIZER__, .cell_style.halign = H } - S(TABLE_HALIGN_LEFT), - S(TABLE_HALIGN_CENTER), - S(TABLE_HALIGN_RIGHT), - S(TABLE_HALIGN_MIXED), - S(TABLE_HALIGN_DECIMAL), - }; - struct table_string *ts = table_string_cast (ts_); - cell->d[TABLE_HORZ][0] = 0; - cell->d[TABLE_HORZ][1] = 1; - cell->d[TABLE_VERT][0] = 0; - cell->d[TABLE_VERT][1] = 1; - cell->options = 0; - cell->style = &styles[table_halign_interpret (ts->halign, false)]; - cell->text = ts->string; - cell->n_footnotes = 0; - cell->destructor = NULL; -} - - -static int -table_string_get_rule (const struct table *ts UNUSED, - enum table_axis axis UNUSED, int x UNUSED, int y UNUSED, - struct cell_color *color UNUSED) -{ - return TAL_0; -} - -static const struct table_class table_string_class = - { - table_string_destroy, - table_string_get_cell, - table_string_get_rule, - }; const char * table_halign_to_string (enum table_halign halign) diff --git a/src/output/table.h b/src/output/table.h index 040e89dcc7..5331aa3438 100644 --- a/src/output/table.h +++ b/src/output/table.h @@ -266,6 +266,6 @@ void table_set_hb (struct table *, int hb); /* Table classes. */ /* Simple kinds of tables. */ -struct table *table_from_string (enum table_halign, const char *); +struct table *table_from_string (const char *); #endif /* output/table.h */ -- 2.30.2