Add support for reading and writing SPV files.
[pspp] / src / output / render.c
index 0fad329ee47aaf03849bd4adf85a3df7e32e2e08..eada45198612b05f9df72a0876807d8ba5ec5339 100644 (file)
@@ -1514,18 +1514,14 @@ add_footnote_page (struct render_pager *p, const struct table_item *item)
   if (!n_footnotes)
     return;
 
-  struct tab_table *t = tab_create (2, n_footnotes);
-
+  struct tab_table *t = tab_create (1, n_footnotes);
   for (size_t i = 0; i < n_footnotes; i++)
     if (f[i])
       {
-        tab_text_format (t, 0, i, TAB_LEFT, "%s.", f[i]->marker);
-        tab_text (t, 1, i, TAB_LEFT, f[i]->content);
+        tab_text_format (t, 0, i, TAB_LEFT, "%s. %s",
+                         f[i]->marker, f[i]->content);
         if (f[i]->style)
-          {
-            tab_add_style (t, 0, i, f[i]->style);
-            tab_add_style (t, 1, i, f[i]->style);
-          }
+          tab_add_style (t, 0, i, f[i]->style);
       }
   render_pager_add_table (p, &t->table, 0);
 
@@ -1548,6 +1544,26 @@ add_text_page (struct render_pager *p, const struct table_item_text *t,
   render_pager_add_table (p, &tab->table, min_width);
 }
 
+static void
+add_layers_page (struct render_pager *p,
+                 const struct table_item_layers *layers, int min_width)
+{
+  if (!layers)
+    return;
+
+  struct tab_table *tab = tab_create (1, layers->n_layers);
+  for (size_t i = 0; i < layers->n_layers; i++)
+    {
+      const struct table_item_layer *layer = &layers->layers[i];
+      tab_text (tab, 0, i, 0, layer->content);
+      for (size_t j = 0; j < layer->n_footnotes; j++)
+        tab_add_footnote (tab, 0, i, layer->footnotes[j]);
+    }
+  if (layers->style)
+    tab->styles[0] = area_style_clone (tab->container, layers->style);
+  render_pager_add_table (p, &tab->table, min_width);
+}
+
 /* Creates and returns a new render_pager for rendering TABLE_ITEM on the
    device with the given PARAMS. */
 struct render_pager *
@@ -1571,7 +1587,7 @@ render_pager_create (const struct render_params *params,
   add_text_page (p, table_item_get_title (table_item), title_width);
 
   /* Layers. */
-  add_text_page (p, table_item_get_layers (table_item), title_width);
+  add_layers_page (p, table_item_get_layers (table_item), title_width);
 
   /* Body. */
   render_pager_add_table (p, table_ref (table_item_get_table (table_item)), 0);