pivot-table: Reduce size of struct pivot_value from 80 bytes to 40.
[pspp] / src / output / spv / spv.c
index f37dff17f2173a455427afc6d3557ce715ba6e5b..2e5dd07b2bf426a2694d91a1afd5d3558ee9e56b 100644 (file)
@@ -282,17 +282,18 @@ decode_container_text (const struct spvsx_container_text *ct)
 {
   struct font_style *font_style = xmalloc (sizeof *font_style);
   char *text = decode_embedded_html (ct->html->node_.raw, font_style);
+
   struct pivot_value *value = xmalloc (sizeof *value);
   *value = (struct pivot_value) {
-    .font_style = font_style,
-    .type = PIVOT_VALUE_TEXT,
     .text = {
+      .type = PIVOT_VALUE_TEXT,
       .local = text,
       .c = text,
       .id = text,
       .user_provided = true,
     },
   };
+  pivot_value_ex_rw (value)->font_style = font_style;
 
   struct output_item *item = text_item_create_value (TEXT_ITEM_LOG,
                                                      value, NULL);
@@ -463,55 +464,6 @@ spv_read_xml_member (struct zip_reader *zip, const char *xml_member,
   return NULL;
 }
 
-#if 0
-static const char *
-identify_item (const struct output_item *item)
-{
-  return (item->label ? item->label
-          : item->command_id ? item->command_id
-          : spv_item_type_to_string (item->type));
-}
-
-void
-spv_item_format_path (const struct spv_item *item, struct string *s)
-{
-  enum { MAX_STACK = 32 };
-  const struct spv_item *stack[MAX_STACK];
-  size_t n = 0;
-
-  while (item != NULL && item->parent && n < MAX_STACK)
-    {
-      stack[n++] = item;
-      item = item->parent;
-    }
-
-  while (n > 0)
-    {
-      item = stack[--n];
-      ds_put_byte (s, '/');
-
-      const char *name = identify_item (item);
-      ds_put_cstr (s, name);
-
-      if (item->parent)
-        {
-          size_t total = 1;
-          size_t index = 1;
-          for (size_t i = 0; i < item->parent->n_children; i++)
-            {
-              const struct spv_item *sibling = item->parent->children[i];
-              if (sibling == item)
-                index = total;
-              else if (!strcmp (name, identify_item (sibling)))
-                total++;
-            }
-          if (total > 1)
-            ds_put_format (s, "[%zu]", index);
-        }
-    }
-}
-#endif
-
 static char * WARN_UNUSED_RESULT
 pivot_table_open_legacy (struct zip_reader *zip, const char *bin_member,
                          const char *xml_member, const char *subtype,
@@ -722,6 +674,10 @@ spv_decode_children (struct zip_reader *zip, const char *structure_member,
         {
           const struct spvsx_container *container
             = spvsx_cast_container (node);
+
+          if (container->page_break_before_present)
+            group_item_add_child (parent, page_break_item_create ());
+
           child = spv_decode_container (zip, container);
         }
       else if (spvsx_is_heading (node))