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 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.
  * 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:
 .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.
        $(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.
 
 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.
 @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;
 
     FILE *file;
     size_t chart_cnt;
 
+    bool bare;
     bool css;
     bool borders;
   };
     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);
 }
 
   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 ();
   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);
     }
   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;
 
 
   return d;
 
@@ -226,10 +235,11 @@ html_destroy (struct output_driver *driver)
 
   if (html->file != NULL)
     {
 
   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);
       fn_close (html->handle, html->file);
     }
   free (html->chart_file_name);