pivot-table: Allow all pivot_value formatting functions to use defaults.
[pspp] / src / output / output-item.c
index a46fdf8020b9c904641c78328e30b3d7f3cef966..6b7c11121c588d998e09797d569122ed1fe565fb 100644 (file)
@@ -86,6 +86,7 @@ output_item_unref (struct output_item *item)
             case OUTPUT_ITEM_GROUP:
               for (size_t i = 0; i < item->group.n_children; i++)
                 output_item_unref (item->group.children[i]);
+              free (item->group.children);
               break;
 
             case OUTPUT_ITEM_IMAGE:
@@ -164,7 +165,7 @@ output_item_unshare (struct output_item *old)
         = old->group.n_children;
 
       for (size_t i = 0; i < new->group.n_children; i++)
-        output_item_ref (new->group.children[i]);
+        new->group.children[i] = output_item_ref (new->group.children[i]);
       break;
 
     case OUTPUT_ITEM_IMAGE:
@@ -359,13 +360,17 @@ output_item_dump (const struct output_item *item, int indentation)
       break;
 
     case OUTPUT_ITEM_TABLE:
+      printf ("table\n");
       pivot_table_dump (item->table, indentation + 1);
       break;
 
     case OUTPUT_ITEM_TEXT:
-      printf ("text %s \"%s\"\n",
-              text_item_subtype_to_string (item->text.subtype),
-              pivot_value_to_string_defaults (item->text.content));
+      {
+        char *s = pivot_value_to_string (item->text.content, NULL);
+        printf ("text %s \"%s\"\n",
+                text_item_subtype_to_string (item->text.subtype), s);
+        free (s);
+      }
       break;
     }
 }
@@ -586,17 +591,18 @@ text_item_create_value (enum text_item_subtype subtype,
 {
   if (subtype == TEXT_ITEM_SYNTAX || subtype == TEXT_ITEM_LOG)
     {
-      if (!value->font_style)
+      struct pivot_value_ex *ex = pivot_value_ex_rw (value);
+      if (!ex->font_style)
         {
-          value->font_style = xmalloc (sizeof *value->font_style);
-          *value->font_style = (struct font_style) FONT_STYLE_INITIALIZER;
+          ex->font_style = xmalloc (sizeof *value->ex->font_style);
+          *ex->font_style = (struct font_style) FONT_STYLE_INITIALIZER;
         }
 
-      free (value->font_style->typeface);
-      value->font_style->typeface = xstrdup ("Monospaced");
+      free (ex->font_style->typeface);
+      ex->font_style->typeface = xstrdup ("Monospaced");
     }
 
-  struct output_item *item = xzalloc (sizeof *item);
+  struct output_item *item = XZALLOC (struct output_item);
   *item = (struct output_item) {
     OUTPUT_ITEM_INITIALIZER (OUTPUT_ITEM_TEXT),
     .command_name = xstrdup_if_nonnull (output_get_command_name ()),
@@ -619,7 +625,7 @@ char *
 text_item_get_plain_text (const struct output_item *item)
 {
   assert (item->type == OUTPUT_ITEM_TEXT);
-  return pivot_value_to_string_defaults (item->text.content);
+  return pivot_value_to_string (item->text.content, NULL);
 }
 
 static bool
@@ -652,8 +658,9 @@ text_item_append (struct output_item *dst, const struct output_item *src)
   if (ds != ss
       || (ds != TEXT_ITEM_SYNTAX && ds != TEXT_ITEM_LOG)
       || strcmp (output_item_get_label (dst), output_item_get_label (src))
-      || !nullable_font_style_equal (dc->font_style, sc->font_style)
-      || (dc->font_style && dc->font_style->markup)
+      || !nullable_font_style_equal (dc->ex ? dc->ex->font_style : NULL,
+                                     sc->ex ? sc->ex->font_style : NULL)
+      || (dc->ex && dc->ex->font_style && dc->ex->font_style->markup)
       || sc->type != PIVOT_VALUE_TEXT
       || dc->type != PIVOT_VALUE_TEXT)
     return false;