From 01d6db8119ca4553d61841f2a9248712d4c6e0dc Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 23 Nov 2018 14:50:13 -0800 Subject: [PATCH] output: Add support for layer info in table output. --- src/output/html.c | 10 ++++++++-- src/output/odt.c | 1 + src/output/render.c | 3 +++ src/output/table-item.c | 28 ++++++++++++++++++++++++++-- src/output/table-item.h | 6 ++++++ 5 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/output/html.c b/src/output/html.c index 7cc2fecab7..0b61486bd6 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -480,10 +480,16 @@ html_output_table (struct html_driver *html, const struct table_item *item) fputs ("\n", html->file); const struct table_item_text *title = table_item_get_title (item); - if (title) + const struct table_item_text *layers = table_item_get_layers (item); + if (title || layers) { fputs (" ", html->file); - html_put_table_item_text (html, title); + if (title) + html_put_table_item_text (html, title); + if (title && layers) + fputs ("
\n", html->file); + if (layers) + html_put_table_item_text (html, layers); fputs ("\n", html->file); } diff --git a/src/output/odt.c b/src/output/odt.c index 153cd393c1..1d430eac5a 100644 --- a/src/output/odt.c +++ b/src/output/odt.c @@ -467,6 +467,7 @@ write_table (struct odt_driver *odt, const struct table_item *item) /* Write a heading for the table */ write_table_item_text (odt, table_item_get_title (item)); + write_table_item_text (odt, table_item_get_layers (item)); /* Start table */ xmlTextWriterStartElement (odt->content_wtr, _xml("table:table")); diff --git a/src/output/render.c b/src/output/render.c index bb4b4ad996..eb5f1cfe1a 100644 --- a/src/output/render.c +++ b/src/output/render.c @@ -1481,6 +1481,9 @@ render_pager_create (const struct render_params *params, /* Title. */ add_text_page (p, table_item_get_title (table_item), title_width); + /* Layers. */ + add_text_page (p, table_item_get_layers (table_item), title_width); + /* Body. */ render_pager_add_table (p, table_ref (table_item_get_table (table_item)), 0); diff --git a/src/output/table-item.c b/src/output/table-item.c index 6d4927326c..1308cb8650 100644 --- a/src/output/table-item.c +++ b/src/output/table-item.c @@ -80,6 +80,7 @@ table_item_create (struct table *table, const char *title, const char *caption) output_item_init (&item->output_item, &table_item_class); item->table = table; item->title = table_item_text_create (title); + item->layers = NULL; item->caption = table_item_text_create (caption); return item; } @@ -113,6 +114,28 @@ table_item_set_title (struct table_item *item, item->title = table_item_text_clone (title); } +/* Returns ITEM's layers, which will be a null pointer if no layers have been + set. */ +const struct table_item_text * +table_item_get_layers (const struct table_item *item) +{ + return item->layers; +} + +/* Sets ITEM's layers to LAYERS, replacing any previous layers. Specify NULL + for LAYERS to clear any layers from ITEM. The caller retains ownership of + LAYERS. + + This function may only be used on a table_item that is unshared. */ +void +table_item_set_layers (struct table_item *item, + const struct table_item_text *layers) +{ + assert (!table_item_is_shared (item)); + table_item_text_destroy (item->layers); + item->layers = table_item_text_clone (layers); +} + /* Returns ITEM's caption, which is a null pointer if no caption has been set. */ const struct table_item_text * @@ -147,8 +170,9 @@ static void table_item_destroy (struct output_item *output_item) { struct table_item *item = to_table_item (output_item); - free (item->title); - free (item->caption); + table_item_text_destroy (item->title); + table_item_text_destroy (item->layers); + table_item_text_destroy (item->caption); table_unref (item->table); free (item); } diff --git a/src/output/table-item.h b/src/output/table-item.h index 3b8c09d759..ffdc4b682c 100644 --- a/src/output/table-item.h +++ b/src/output/table-item.h @@ -51,6 +51,7 @@ struct table_item struct output_item output_item; /* Superclass. */ struct table *table; /* The table to be rendered. */ struct table_item_text *title; /* Null if there is no title. */ + struct table_item_text *layers; /* Null if there is no layer info. */ struct table_item_text *caption; /* Null if there is no caption. */ }; @@ -63,6 +64,11 @@ const struct table_item_text *table_item_get_title (const struct table_item *); void table_item_set_title (struct table_item *, const struct table_item_text *); +const struct table_item_text *table_item_get_layers ( + const struct table_item *); +void table_item_set_layers (struct table_item *, + const struct table_item_text *); + const struct table_item_text *table_item_get_caption ( const struct table_item *); void table_item_set_caption (struct table_item *, -- 2.30.2