X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fhtml.c;h=38b89719a443095bf3456437a05b81bb6f6c450d;hb=ad4f9604cc877272fe504234e8b9078a7ce76e17;hp=9e7f567a27274866efda6d67fddef2ca74082d3c;hpb=0df9cdd3df66caf4353128feff3008289cda8115;p=pspp diff --git a/src/output/html.c b/src/output/html.c index 9e7f567a27..38b89719a4 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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" @@ -50,8 +51,8 @@ struct html_driver #ifdef HAVE_CAIRO struct xr_color fg; struct xr_color bg; -#endif - char *file_name; +#endif + 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); } @@ -406,7 +407,6 @@ html_output_table (struct html_driver *html, const struct table_item *item) for (y = 0; y < table_nr (t); y++) { int x; - for (x = 0; x < table_nc (t); ) { const struct cell_contents *c; @@ -414,7 +414,7 @@ html_output_table (struct html_driver *html, const struct table_item *item) table_get_cell (t, x, y, &cell); if (y != cell.d[TABLE_VERT][0]) - continue; + goto next_0; for (c = cell.contents; c < &cell.contents[cell.n_contents]; c++) { @@ -431,6 +431,8 @@ html_output_table (struct html_driver *html, const struct table_item *item) strlen (c->footnotes[i]), " ", "
"); } } + + next_0: x = cell.d[TABLE_HORZ][1]; table_cell_free (&cell); } @@ -464,7 +466,7 @@ html_output_table (struct html_driver *html, const struct table_item *item) table_get_cell (t, x, y, &cell); if (x != cell.d[TABLE_HORZ][0] || y != cell.d[TABLE_VERT][0]) - continue; + goto next_1; /* Output or tag. */ is_header = (y < table_ht (t) @@ -493,7 +495,7 @@ html_output_table (struct html_driver *html, const struct table_item *item) { /* Cell borders. */ n_borders = 0; - + top = table_get_rule (t, TABLE_VERT, x, y); if (top > TAL_GAP) put_border (html->file, n_borders++, top, "top"); @@ -569,6 +571,7 @@ html_output_table (struct html_driver *html, const struct table_item *item) /* Output or . */ fprintf (html->file, "\n", tag); + next_1: x = cell.d[TABLE_HORZ][1]; table_cell_free (&cell); }