str: Add function xstrdup_if_nonnull() and introduce many users.
[pspp] / src / output / spv / spv-output.c
index f83ff4542b2f0627c90c03ecea2b04b19d54c0d5..49cc195341d8c77351939f8c7d9fa10204701f08 100644 (file)
@@ -28,24 +28,11 @@ void
 spv_text_submit (const struct spv_item *in)
 {
   enum spv_item_class class = spv_item_get_class (in);
-  enum text_item_type type
-    = (class == SPV_CLASS_HEADINGS ? TEXT_ITEM_TITLE
-       : class == SPV_CLASS_PAGETITLE ? TEXT_ITEM_PAGE_TITLE
-       : TEXT_ITEM_LOG);
-  const struct pivot_value *value = spv_item_get_text (in);
-  char *text = pivot_value_to_string (value, SETTINGS_VALUE_SHOW_DEFAULT,
-                                      SETTINGS_VALUE_SHOW_DEFAULT);
-  struct text_item *item = text_item_create_nocopy (type, text);
-  const struct font_style *font = value->font_style;
-  if (font)
-    {
-      item->bold = font->bold;
-      item->italic = font->italic;
-      item->underline = font->underline;
-      item->markup = font->markup;
-      if (font->typeface)
-        item->typeface = xstrdup (font->typeface);
-      item->size = font->size;
-    }
+  struct text_item *item = text_item_create_value (
+    (class == SPV_CLASS_HEADINGS ? TEXT_ITEM_TITLE
+     : class == SPV_CLASS_PAGETITLE ? TEXT_ITEM_PAGE_TITLE
+     : TEXT_ITEM_LOG),
+    pivot_value_clone (spv_item_get_text (in)),
+    xstrdup_if_nonnull (in->label));
   text_item_submit (item);
 }