X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fhtml.c;h=8b16ffa780d29d07fc6cf8e9a2fdbab233ccd0ae;hb=c44153d4b047bc82852df1e5a08e099ab09b14e6;hp=19d1085e4178d20490b8a10cee5d030fea1245a2;hpb=d3fef25674baf4f4e25502f257c680b5090535c6;p=pspp diff --git a/src/output/html.c b/src/output/html.c index 19d1085e41..8b16ffa780 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -24,6 +24,7 @@ #include #include "data/file-name.h" +#include "data/file-handle-def.h" #include "libpspp/assertion.h" #include "libpspp/cast.h" #include "libpspp/compiler.h" @@ -51,7 +52,7 @@ struct html_driver struct xr_color fg; struct xr_color bg; #endif - char *file_name; + struct file_handle *handle; char *chart_file_name; char *command_name; @@ -86,7 +87,7 @@ opt (struct output_driver *d, struct string_map *options, const char *key, } static struct output_driver * -html_create (const char *file_name, enum settings_output_devices device_type, +html_create (struct file_handle *fh, enum settings_output_devices device_type, struct string_map *o) { struct output_driver *d; @@ -94,24 +95,24 @@ html_create (const char *file_name, enum settings_output_devices device_type, html = xzalloc (sizeof *html); d = &html->driver; - output_driver_init (&html->driver, &html_driver_class, file_name, + output_driver_init (&html->driver, &html_driver_class, fh_get_file_name (fh), device_type); html->css = parse_boolean (opt (d, o, "css", "true")); html->borders = parse_boolean (opt (d, o, "borders", "true")); - html->file_name = xstrdup (file_name); + html->handle = fh; html->chart_file_name = parse_chart_file_name (opt (d, o, "charts", - file_name)); + fh_get_file_name (fh))); html->file = NULL; html->chart_cnt = 1; #ifdef HAVE_CAIRO parse_color (d, o, "background-color", "#FFFFFFFFFFFF", &html->bg); parse_color (d, o, "foreground-color", "#000000000000", &html->fg); #endif - html->file = fn_open (html->file_name, "w"); + html->file = fn_open (html->handle, "w"); if (html->file == NULL) { - msg_error (errno, _("error opening output file `%s'"), html->file_name); + msg_error (errno, _("error opening output file `%s'"), fh_get_file_name (html->handle)); goto error; } @@ -216,10 +217,10 @@ html_destroy (struct output_driver *driver) "\n" "\n" "\n"); - fn_close (html->file_name, html->file); + fn_close (html->handle, html->file); } free (html->chart_file_name); - free (html->file_name); + fh_unref (html->handle); free (html->command_name); free (html); } @@ -373,16 +374,35 @@ put_border (FILE *file, int n_borders, int style, const char *border_name) style == TAL_1 ? "thin solid" : "double"); } +static void +put_tfoot (struct html_driver *html, const struct table *t, bool *tfoot) +{ + if (!*tfoot) + { + fprintf (html->file, "", table_nc (t)); + *tfoot = true; + } + else + fputs ("\n
", html->file); +} + static void html_output_table (struct html_driver *html, const struct table_item *item) { const struct table *t = table_item_get_table (item); + const char *title = table_item_get_title (item); const char *caption = table_item_get_caption (item); int footnote_idx = 0; + bool tfoot = false; int y; fputs ("", html->file); + if (caption) + { + put_tfoot (html, t, &tfoot); + escape_string (html->file, caption, strlen (caption), " ", "
"); + } footnote_idx = 0; for (y = 0; y < table_nr (t); y++) { @@ -405,11 +425,7 @@ html_output_table (struct html_driver *html, const struct table_item *item) { char marker[16]; - if (!footnote_idx) - fprintf (html->file, "\n", html->file); - footnote_idx = 0; - } + if (tfoot) + fputs ("\n", html->file); + footnote_idx = 0; fputs ("\n", html->file); - if (caption != NULL) + if (title != NULL) { fputs (" \n", html->file); }
", - table_nc (t)); - else - fputs ("\n
", html->file); + put_tfoot (html, t, &tfoot); str_format_26adic (++footnote_idx, false, marker, sizeof marker); fprintf (html->file, "%s ", marker); escape_string (html->file, c->footnotes[i], @@ -420,18 +436,16 @@ html_output_table (struct html_driver *html, const struct table_item *item) table_cell_free (&cell); } } - if (footnote_idx) - { - fputs ("
", html->file); - escape_string (html->file, caption, strlen (caption), " ", "
"); + escape_string (html->file, title, strlen (title), " ", "
"); fputs ("