output: New HTML driver option "bare".
authorBen Pfaff <blp@cs.stanford.edu>
Thu, 29 Oct 2020 05:40:10 +0000 (22:40 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Thu, 29 Oct 2020 05:40:10 +0000 (22:40 -0700)
NEWS
doc/automake.mk
doc/invoking.texi
src/output/html.c

diff --git a/NEWS b/NEWS
index 694ec94f62d38f69757ba1696d424afa20102830..07e2e20234334fcbea69a5970fc556a840c3b9aa 100644 (file)
--- 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.
index 801f278ce653a1fb8956a6c362b227befdd9d390..c94608e98a3cd63917caf3dc285037626679aeb1 100644 (file)
@@ -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 '\%</body%,$$d' -e '0,/<body/d' > $@.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.
index 22754c9d122fa770004179a5757c6f0a0b8ac091..9590f093b887f8f6e1b53cca1f6bd6772a0e2d13 100644 (file)
@@ -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.
index 3fb6bb83b5dc49a157c45f72627f21c6a0228243..eb9e91e1ca9f9d3a01f425ec534c16f0281b4cff 100644 (file)
@@ -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 ("<!doctype html>\n", html->file);
   fprintf (html->file, "<html");
   char *ln = get_language ();
@@ -198,6 +172,41 @@ html_create (struct file_handle *fh, enum settings_output_devices device_type,
     }
   fputs ("</head>\n", html->file);
   fputs ("<body>\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,
-               "</body>\n"
-               "</html>\n"
-               "<!-- end of file -->\n");
+      if (!html->bare)
+        fprintf (html->file,
+                 "</body>\n"
+                 "</html>\n"
+                 "<!-- end of file -->\n");
       fn_close (html->handle, html->file);
     }
   free (html->chart_file_name);