From ac0b46916cf9c10ebe85bc51d83c9fb713903284 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 28 Oct 2020 22:40:10 -0700 Subject: [PATCH] output: New HTML driver option "bare". --- NEWS | 2 ++ doc/automake.mk | 3 +- doc/invoking.texi | 5 ++++ src/output/html.c | 76 +++++++++++++++++++++++++++-------------------- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/NEWS b/NEWS index 694ec94f62..07e2e20234 100644 --- a/NEWS +++ b/NEWS @@ -17,6 +17,8 @@ Changes from 1.4.1 to 1.5.2: The new interface provides the user with a preview of the data to be imported and interactive methods to select the desired ranges. + * The html output driver has a new option "bare". + * New features in pspp-output: - New --table-look and --nth-commands options. diff --git a/doc/automake.mk b/doc/automake.mk index 801f278ce6..c94608e98a 100644 --- a/doc/automake.mk +++ b/doc/automake.mk @@ -194,8 +194,7 @@ $(EXAMPLE_TXTS) $(EXAMPLE_HTML): $(pspp_output) .spv.txt: $(AM_V_GEN)utilities/pspp-output convert $< $@ .spv.html: - $(AM_V_GEN)utilities/pspp-output convert $< - -O format=html \ - | $(SED) -e '\% $@.tmp + $(AM_V_GEN)utilities/pspp-output convert $< - -O format=html -O bare=true > $@.tmp $(AM_V_at)mv $@.tmp $@ # Convert a text file into a Texinfo file. diff --git a/doc/invoking.texi b/doc/invoking.texi index 22754c9d12..9590f093b8 100644 --- a/doc/invoking.texi +++ b/doc/invoking.texi @@ -378,6 +378,11 @@ for details. Decorate the tables with borders. If set to false, the tables produced will have no borders. The default value is true. +@item @option{-O bare=@var{boolean}} +The HTML output driver ordinarily outputs a complete HTML document. +If set to true, the driver instead outputs only what would normally be +the contents of the @code{body} element. The default value is false. + @item @option{-O css=@var{boolean}} Use cascading style sheets. Cascading style sheets give an improved appearance and can be used to produce pages which fit a certain web site's style. diff --git a/src/output/html.c b/src/output/html.c index 3fb6bb83b5..eb9e91e1ca 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -62,6 +62,7 @@ struct html_driver FILE *file; size_t chart_cnt; + bool bare; bool css; bool borders; }; @@ -88,36 +89,9 @@ opt (struct output_driver *d, struct string_map *options, const char *key, return driver_option_get (d, options, key, default_value); } -static struct output_driver * -html_create (struct file_handle *fh, enum settings_output_devices device_type, - struct string_map *o) +static void +put_header (struct html_driver *html) { - struct output_driver *d; - struct html_driver *html; - - html = xzalloc (sizeof *html); - d = &html->driver; - 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->handle = fh; - html->chart_file_name = parse_chart_file_name (opt (d, o, "charts", - 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->handle, "w"); - if (html->file == NULL) - { - msg_error (errno, _("error opening output file `%s'"), fh_get_file_name (html->handle)); - goto error; - } - fputs ("\n", html->file); fprintf (html->file, "\n", html->file); fputs ("\n", html->file); +} + +static struct output_driver * +html_create (struct file_handle *fh, enum settings_output_devices device_type, + struct string_map *o) +{ + struct output_driver *d; + struct html_driver *html; + + html = xzalloc (sizeof *html); + d = &html->driver; + output_driver_init (&html->driver, &html_driver_class, fh_get_file_name (fh), + device_type); + html->bare = parse_boolean (opt (d, o, "bare", "false")); + html->css = parse_boolean (opt (d, o, "css", "true")); + html->borders = parse_boolean (opt (d, o, "borders", "true")); + + html->handle = fh; + html->chart_file_name = parse_chart_file_name (opt (d, o, "charts", + 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->handle, "w"); + if (html->file == NULL) + { + msg_error (errno, _("error opening output file `%s'"), fh_get_file_name (html->handle)); + goto error; + } + + if (!html->bare) + put_header (html); return d; @@ -226,10 +235,11 @@ html_destroy (struct output_driver *driver) if (html->file != NULL) { - fprintf (html->file, - "\n" - "\n" - "\n"); + if (!html->bare) + fprintf (html->file, + "\n" + "\n" + "\n"); fn_close (html->handle, html->file); } free (html->chart_file_name); -- 2.30.2