output: Replace OUTPUT_ITEM_PAGE_SETUP by a new driver function.
[pspp] / src / output / spv / spv-writer.c
index 270f6beb87ff95c63b2757673f0cdc0a43cbce5a..f1f9b969563f7fab49cf785ae01b19b621212035 100644 (file)
@@ -234,6 +234,8 @@ spv_writer_open_heading (struct spv_writer *w, const struct output_item *item)
   start_elem (w, "heading");
   if (item->command_name)
     write_attr (w, "commandName", item->command_name);
+  if (!item->show)
+    write_attr (w, "visibility", "collapsed");
   /* XXX locale */
   /* XXX olang */
 
@@ -280,7 +282,7 @@ open_container (struct spv_writer *w, const struct output_item *item,
                 const char *inner_elem)
 {
   start_elem (w, "container");
-  write_attr (w, "visibility", "visible");
+  write_attr (w, "visibility", item->show ? "visible" : "hidden");
   if (w->need_page_break)
     {
       write_attr (w, "page-break-before", "always");
@@ -1104,11 +1106,10 @@ spv_writer_write (struct spv_writer *w, const struct output_item *item)
       }
       break;
 
-    case OUTPUT_ITEM_GROUP_OPEN:
+    case OUTPUT_ITEM_GROUP:
       spv_writer_open_heading (w, item);
-      break;
-
-    case OUTPUT_ITEM_GROUP_CLOSE:
+      for (size_t i = 0; i < item->group.n_children; i++)
+        spv_writer_write (w, item->group.children[i]);
       spv_writer_close_heading (w);
       break;
 
@@ -1125,11 +1126,6 @@ spv_writer_write (struct spv_writer *w, const struct output_item *item)
       w->need_page_break = true;
       break;
 
-    case OUTPUT_ITEM_PAGE_SETUP:
-      page_setup_destroy (w->page_setup);
-      w->page_setup = page_setup_clone (item->page_setup);
-      break;
-
     case OUTPUT_ITEM_TABLE:
       spv_writer_put_table (w, item);
       break;
@@ -1139,3 +1135,11 @@ spv_writer_write (struct spv_writer *w, const struct output_item *item)
       break;
     }
 }
+
+void
+spv_writer_set_page_setup (struct spv_writer *w,
+                           const struct page_setup *ps)
+{
+  page_setup_destroy (w->page_setup);
+  w->page_setup = page_setup_clone (ps);
+}