sack works
[pspp] / src / output / spv / spv.c
index 2085d183e64124244dd3993fe9892661c52b586f..7a3dae4d3d4a733834bf534534a1483b9ae9772e 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);
@@ -320,6 +321,9 @@ decode_page_paragraph (const struct spvsx_page_paragraph *page_paragraph,
 {
   memset (ph, 0, sizeof *ph);
 
+  if (!page_paragraph)
+    return;
+
   const struct spvsx_page_paragraph_text *page_paragraph_text
     = page_paragraph->page_paragraph_text;
   if (!page_paragraph_text)
@@ -673,6 +677,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))
@@ -834,7 +842,6 @@ spv_read (const char *filename, struct output_item **outp,
   if (psp)
     *psp = NULL;
 
-  struct spv_reader *spv = xzalloc (sizeof *spv);
   struct zip_reader *zip;
   char *error = zip_reader_create (filename, &zip);
   if (error)
@@ -878,15 +885,13 @@ spv_decode_fmt_spec (uint32_t u32, struct fmt_spec *out)
   uint8_t w = u32 >> 8;
   uint8_t d = u32;
 
-  msg_disable ();
   *out = (struct fmt_spec) { .type = FMT_F, .w = w, .d = d };
   bool ok = raw_type >= 40 || fmt_from_io (raw_type, &out->type);
   if (ok)
     {
       fmt_fix_output (out);
-      ok = fmt_check_width_compat (out, 0);
+      ok = fmt_check_width_compat (*out, 0);
     }
-  msg_enable ();
 
   if (!ok)
     {