void pivot_table_unref (struct pivot_table *);
bool pivot_table_is_shared (const struct pivot_table *);
+/* Titles. */
+void pivot_table_set_title (struct pivot_table *, struct pivot_value *);
+void pivot_table_set_subtype (struct pivot_table *, struct pivot_value *);
+void pivot_table_set_corner_text (struct pivot_table *, struct pivot_value *);
+void pivot_table_set_caption (struct pivot_table *, struct pivot_value *);
+
/* Axes. */
void pivot_table_swap_axes (struct pivot_table *,
enum pivot_axis_type, enum pivot_axis_type);
*/
struct pivot_value
{
- struct font_style *font_style;
- struct cell_style *cell_style;
-
- char **subscripts;
- size_t n_subscripts;
-
- size_t *footnote_indexes;
- size_t n_footnotes;
-
+ struct pivot_value_ex *ex;
union
{
enum pivot_value_type type;
/* Values from variable names. */
struct pivot_value *pivot_value_new_variable (const struct variable *);
+struct pivot_value *pivot_value_new_variable__ (const char *name,
+ const char *label);
/* Values from text strings. */
struct pivot_value *pivot_value_new_text (const char *);
void pivot_argument_copy (struct pivot_argument *,
const struct pivot_argument *);
\f
+/* Extra styling for a pivot_value.
+
+ This is logically part of pivot_value itself. It is broken into a separate
+ structure to save memory because it is rarely used. */
+struct pivot_value_ex
+ {
+ struct font_style *font_style;
+ struct cell_style *cell_style;
+
+ char **subscripts;
+ size_t n_subscripts;
+
+ size_t *footnote_indexes;
+ size_t n_footnotes;
+ };
+
+static inline const struct pivot_value_ex *
+pivot_value_ex (const struct pivot_value *value)
+{
+ static const struct pivot_value_ex empty_ex = { .font_style = NULL };
+ return value->ex ? value->ex : &empty_ex;
+}
+
+struct pivot_value_ex *pivot_value_ex_rw (struct pivot_value *);
+struct pivot_value_ex *pivot_value_ex_clone (const struct pivot_value_ex *);
+void pivot_value_ex_destroy (struct pivot_value_ex *);
+\f
/* One piece of data within a pivot table. */
struct pivot_cell
{