output-item: Make command name part of every output_item.
[pspp] / src / output / page-setup-item.c
index b4f8e4c4caead1e887c2bf891f30e4dcf2a04bd7..7be1c2c43b66eeb36ec018f3aea12ff8938b588b 100644 (file)
 
 #include "gl/xalloc.h"
 
+bool
+page_paragraph_equals (const struct page_paragraph *a,
+                       const struct page_paragraph *b)
+{
+  return (!a || !b ? a == b
+          : !a->markup || !b->markup ? a->markup == b->markup
+          : !strcmp (a->markup, b->markup) && a->halign == b->halign);
+}
+
 void
 page_heading_copy (struct page_heading *dst, const struct page_heading *src)
 {
@@ -48,6 +57,23 @@ page_heading_uninit (struct page_heading *ph)
   free (ph->paragraphs);
 }
 
+bool
+page_heading_equals (const struct page_heading *a,
+                     const struct page_heading *b)
+{
+  if (!a || !b)
+    return a == b;
+
+  if (a->n != b->n)
+    return false;
+
+  for (size_t i = 0; i < a->n; i++)
+    if (!page_paragraph_equals (&a->paragraphs[i], &b->paragraphs[i]))
+      return false;
+
+  return true;
+}
+
 struct page_setup *
 page_setup_clone (const struct page_setup *old)
 {
@@ -76,8 +102,10 @@ struct page_setup_item *
 page_setup_item_create (const struct page_setup *ps)
 {
   struct page_setup_item *item = xmalloc (sizeof *item);
-  output_item_init (&item->output_item, &page_setup_item_class);
-  item->page_setup = page_setup_clone (ps);
+  *item = (struct page_setup_item) {
+    .output_item = OUTPUT_ITEM_INITIALIZER (&page_setup_item_class),
+    .page_setup = page_setup_clone (ps),
+  };
   return item;
 }
 
@@ -89,6 +117,13 @@ page_setup_item_submit (struct page_setup_item *item)
   output_submit (&item->output_item);
 }
 
+static const char *
+page_setup_item_get_label (const struct output_item *output_item UNUSED)
+{
+  /* Not marked for translation: user should never see it. */
+  return "Page Setup";
+}
+
 static void
 page_setup_item_destroy (struct output_item *output_item)
 {
@@ -99,6 +134,6 @@ page_setup_item_destroy (struct output_item *output_item)
 
 const struct output_item_class page_setup_item_class =
   {
-    "page_setup",
+    page_setup_item_get_label,
     page_setup_item_destroy,
   };