1 /* PSPP - a program for statistical analysis.
2 Copyright (C) 2018 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 #include "output/page-setup-item.h"
23 #include "output/driver-provider.h"
24 #include "output/output-item-provider.h"
26 #include "gl/xalloc.h"
29 page_paragraph_equals (const struct page_paragraph *a,
30 const struct page_paragraph *b)
32 return (!a || !b ? a == b
33 : !a->markup || !b->markup ? a->markup == b->markup
34 : !strcmp (a->markup, b->markup) && a->halign == b->halign);
38 page_heading_copy (struct page_heading *dst, const struct page_heading *src)
41 dst->paragraphs = xmalloc (dst->n * sizeof *dst->paragraphs);
42 for (size_t i = 0; i < dst->n; i++)
44 dst->paragraphs[i].markup = xstrdup (src->paragraphs[i].markup);
45 dst->paragraphs[i].halign = src->paragraphs[i].halign;
50 page_heading_uninit (struct page_heading *ph)
55 for (size_t i = 0; i < ph->n; i++)
56 free (ph->paragraphs[i].markup);
57 free (ph->paragraphs);
61 page_heading_equals (const struct page_heading *a,
62 const struct page_heading *b)
70 for (size_t i = 0; i < a->n; i++)
71 if (!page_paragraph_equals (&a->paragraphs[i], &b->paragraphs[i]))
78 page_setup_clone (const struct page_setup *old)
80 struct page_setup *new = xmalloc (sizeof *new);
82 for (int i = 0; i < 2; i++)
83 page_heading_copy (&new->headings[i], &old->headings[i]);
85 new->file_name = xstrdup (new->file_name);
90 page_setup_destroy (struct page_setup *ps)
94 for (int i = 0; i < 2; i++)
95 page_heading_uninit (&ps->headings[i]);
101 struct page_setup_item *
102 page_setup_item_create (const struct page_setup *ps)
104 struct page_setup_item *item = xmalloc (sizeof *item);
105 output_item_init (&item->output_item, &page_setup_item_class);
106 item->page_setup = page_setup_clone (ps);
110 /* Submits ITEM to the configured output drivers, and transfers ownership to
111 the output subsystem. */
113 page_setup_item_submit (struct page_setup_item *item)
115 output_submit (&item->output_item);
119 page_setup_item_destroy (struct output_item *output_item)
121 struct page_setup_item *item = to_page_setup_item (output_item);
122 page_setup_destroy (item->page_setup);
126 const struct output_item_class page_setup_item_class =
129 page_setup_item_destroy,