Add support for reading and writing SPV files.
[pspp] / src / output / html.c
index 05fc08eb62f55dbfe407140a634d82fd4c8748f7..307f6c223d83bb3fea6040da6e7f04d8d30ada13 100644 (file)
@@ -50,8 +50,8 @@ struct html_driver
   {
     struct output_driver driver;
 #ifdef HAVE_CAIRO
-    struct xr_color fg;
-    struct xr_color bg;
+    struct cell_color fg;
+    struct cell_color bg;
 #endif
     struct file_handle *handle;
     char *chart_file_name;
@@ -279,18 +279,10 @@ html_submit (struct output_driver *driver,
           fprintf (html->file, "</PRE>\n");
           break;
 
-        case TEXT_ITEM_PARAGRAPH:
-          print_title_tag (html->file, "P", s);
-          break;
-
         case TEXT_ITEM_LOG:
           print_title_tag (html->file, "PRE", s); /* should be <P><TT> */
           break;
 
-        case TEXT_ITEM_BLANK_LINE:
-          fputs ("<BR>", html->file);
-          break;
-
         case TEXT_ITEM_EJECT_PAGE:
           /* Nothing to do. */
           break;
@@ -427,6 +419,22 @@ html_put_table_item_text (struct html_driver *html,
   html_put_footnote_markers (html, text->footnotes, text->n_footnotes);
 }
 
+static void
+html_put_table_item_layers (struct html_driver *html,
+                            const struct table_item_layers *layers)
+{
+  for (size_t i = 0; i < layers->n_layers; i++)
+    {
+      if (i)
+        fputs ("<BR>\n", html->file);
+
+      const struct table_item_layer *layer = &layers->layers[i];
+      escape_string (html->file, layer->content, strlen (layer->content),
+                     " ", "<BR>");
+      html_put_footnote_markers (html, layer->footnotes, layer->n_footnotes);
+    }
+}
+
 static void
 html_output_table (struct html_driver *html, const struct table_item *item)
 {
@@ -446,16 +454,15 @@ html_output_table (struct html_driver *html, const struct table_item *item)
   size_t n_footnotes = table_collect_footnotes (item, &f);
 
   for (size_t i = 0; i < n_footnotes; i++)
-    if (f[i])
-      {
-        put_tfoot (html, t, &tfoot);
-        fputs ("<SUP>", html->file);
-        escape_string (html->file, f[i]->marker, strlen (f[i]->marker),
-                       " ", "<BR>");
-        fputs ("</SUP> ", html->file);
-        escape_string (html->file, f[i]->content, strlen (f[i]->content),
-                       " ", "<BR>");
-      }
+    {
+      put_tfoot (html, t, &tfoot);
+      fputs ("<SUP>", html->file);
+      escape_string (html->file, f[i]->marker, strlen (f[i]->marker),
+                     " ", "<BR>");
+      fputs ("</SUP> ", html->file);
+      escape_string (html->file, f[i]->content, strlen (f[i]->content),
+                     " ", "<BR>");
+    }
   free (f);
   if (tfoot)
     fputs ("</TD></TR></TFOOT>\n", html->file);
@@ -463,7 +470,7 @@ html_output_table (struct html_driver *html, const struct table_item *item)
   fputs ("<TBODY VALIGN=\"TOP\">\n", html->file);
 
   const struct table_item_text *title = table_item_get_title (item);
-  const struct table_item_text *layers = table_item_get_layers (item);
+  const struct table_item_layers *layers = table_item_get_layers (item);
   if (title || layers)
     {
       fputs ("  <CAPTION>", html->file);
@@ -472,7 +479,7 @@ html_output_table (struct html_driver *html, const struct table_item *item)
       if (title && layers)
         fputs ("<BR>\n", html->file);
       if (layers)
-        html_put_table_item_text (html, layers);
+        html_put_table_item_layers (html, layers);
       fputs ("</CAPTION>\n", html->file);
     }
 
@@ -561,8 +568,6 @@ html_output_table (struct html_driver *html, const struct table_item *item)
 
           /* Output cell contents. */
           const char *s = cell.text;
-          if (cell.options & TAB_EMPH)
-            fputs ("<EM>", html->file);
           if (cell.options & TAB_FIX)
             {
               fputs ("<TT>", html->file);
@@ -574,8 +579,6 @@ html_output_table (struct html_driver *html, const struct table_item *item)
               s += strspn (s, CC_SPACES);
               escape_string (html->file, s, strlen (s), " ", "<BR>");
             }
-          if (cell.options & TAB_EMPH)
-            fputs ("</EM>", html->file);
 
           html_put_footnote_markers (html, cell.footnotes, cell.n_footnotes);