};
const char *pivot_area_to_string (enum pivot_area);
-void pivot_area_get_default_style (enum pivot_area, struct area_style *);
/* Table borders for styling purposes. */
enum pivot_border
};
const char *pivot_border_to_string (enum pivot_border);
-void pivot_border_get_default_style (enum pivot_border,
- struct table_border_style *);
/* Sizing for rows or columns of a rendered table. The comments below talk
about columns and their widths but they apply equally to rows and their
heights. */
struct pivot_table_sizing
{
- /* Minimum and maximum column width, in 1/96" units. */
- int range[2];
-
/* Specific column widths, in 1/96" units. */
int *widths;
size_t n_widths;
breaks out of the loop prematurely, it needs to free it with free(). */
#define PIVOT_AXIS_FOR_EACH(INDEXES, AXIS) \
for ((INDEXES) = NULL; \
- ((INDEXES) = pivot_axis_iterator_next (INDEXES, AXIS)) != NULL; )
+ ((INDEXES) = pivot_axis_iterator_next (INDEXES, AXIS)) != NULL;)
size_t *pivot_axis_iterator_next (size_t *indexes, const struct pivot_axis *);
\f
/* Dimensions.
bool pivot_result_class_change (const char *, const struct fmt_spec *);
\f
+/* Styling for a pivot table.
+
+ The division between this and the style information in struct pivot_table
+ seems fairly arbitrary. The ultimate reason for the division is simply
+ because that's how SPSS documentation and file formats do it. */
+struct pivot_table_look
+ {
+ /* Reference count. A pivot_table_look may be shared between multiple
+ owners, indicated by a reference count greater than 1. When this is the
+ case, the pivot_table must not be modified. */
+ int ref_cnt;
+
+ char *name; /* May be null. */
+
+ /* General properties. */
+ bool omit_empty;
+ bool row_labels_in_corner;
+ int width_ranges[TABLE_N_AXES][2]; /* In 1/96" units. */
+
+ /* Footnote display settings. */
+ bool show_numeric_markers;
+ bool footnote_marker_superscripts;
+
+ /* Styles. */
+ struct table_area_style areas[PIVOT_N_AREAS];
+ struct table_border_style borders[PIVOT_N_BORDERS];
+
+ /* Print settings. */
+ bool print_all_layers;
+ bool paginate_layers;
+ bool shrink_to_fit[TABLE_N_AXES];
+ bool top_continuation, bottom_continuation;
+ char *continuation;
+ size_t n_orphan_lines;
+ };
+
+const struct pivot_table_look *pivot_table_look_get_default (void);
+void pivot_table_look_set_default (const struct pivot_table_look *);
+
+char *pivot_table_look_read (const char *, struct pivot_table_look **)
+ WARN_UNUSED_RESULT;
+
+const struct pivot_table_look *pivot_table_look_builtin_default (void);
+struct pivot_table_look *pivot_table_look_new_builtin_default (void);
+struct pivot_table_look *pivot_table_look_ref (
+ const struct pivot_table_look *);
+void pivot_table_look_unref (struct pivot_table_look *);
+struct pivot_table_look *pivot_table_look_unshare (struct pivot_table_look *);
+\f
/* A pivot table. See the top of this file for more information. */
struct pivot_table
{
the pivot_table must not be modified. */
int ref_cnt;
+ /* Styling. */
+ struct pivot_table_look *look;
+
/* Display settings. */
bool rotate_inner_column_labels;
bool rotate_outer_row_labels;
- bool row_labels_in_corner;
bool show_grid_lines;
- bool omit_empty; /* Omit empty rows and columns? */
+ bool show_title;
+ bool show_caption;
size_t *current_layer; /* axis[PIVOT_AXIS_LAYER].n_dimensions elements. */
- char *table_look;
enum settings_value_show show_values;
enum settings_value_show show_variables;
struct fmt_spec weight_format;
- /* Footnote display settings. */
- bool show_numeric_markers;
- bool footnote_marker_superscripts;
-
/* Column and row sizing and page breaks.
sizing[TABLE_HORZ] is for columns, sizing[TABLE_VERT] is for rows. */
struct pivot_table_sizing sizing[TABLE_N_AXES];
- /* Print settings. */
- bool print_all_layers;
- bool paginate_layers;
- bool shrink_to_fit[TABLE_N_AXES];
- bool top_continuation, bottom_continuation;
- char *continuation;
- size_t n_orphan_lines;
-
/* Format settings. */
int epoch;
char decimal; /* Usually ',' or '.'. */
/* Titles. */
struct pivot_value *title;
- struct pivot_value *subtype; /* Same as pivot_item's subtype. */
+ struct pivot_value *subtype; /* Same as spv_item's subtype. */
struct pivot_value *corner_text;
struct pivot_value *caption;
- char *notes;
-
- /* Styles. */
- struct area_style areas[PIVOT_N_AREAS];
- struct table_border_style borders[PIVOT_N_BORDERS];
+ char *notes; /* Shown as tooltip. */
/* Dimensions. */
struct pivot_dimension **dimensions;
/* Creating and destroy pivot tables. */
struct pivot_table *pivot_table_create (const char *title);
-struct pivot_table *pivot_table_create__ (struct pivot_value *title);
+struct pivot_table *pivot_table_create__ (struct pivot_value *title,
+ const char *subtype);
struct pivot_table *pivot_table_create_for_text (struct pivot_value *title,
struct pivot_value *content);
void pivot_table_unref (struct pivot_table *);
bool pivot_table_is_shared (const struct pivot_table *);
+/* Styling. */
+const struct pivot_table_look *pivot_table_get_look (
+ const struct pivot_table *);
+void pivot_table_set_look (struct pivot_table *,
+ const struct pivot_table_look *);
+
/* Format of PIVOT_RC_COUNT cells. */
void pivot_table_set_weight_var (struct pivot_table *,
const struct variable *);
size_t idx;
struct pivot_value *content;
struct pivot_value *marker;
+ bool show;
};
struct pivot_footnote *pivot_table_create_footnote (
{
struct font_style *font_style;
struct cell_style *cell_style;
- char *subscript;
+
+ char **subscripts;
+ size_t n_subscripts;
+
char *superscript;
const struct pivot_footnote **footnotes;
/* PIVOT_VALUE_TEMPLATE. */
struct
{
- char *s;
+ char *local; /* Localized. */
+ char *id; /* Identifier. */
struct pivot_argument *args;
size_t n_args;
}
/* Values from text strings. */
struct pivot_value *pivot_value_new_text (const char *);
struct pivot_value *pivot_value_new_text_format (const char *, ...)
- PRINTF_FORMAT (1, 2);
+#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__>= 4) || __GNUC__ > 4)
+ __attribute__((format(gnu_printf, 1, 2)));
+#else
+ __attribute__((format(__printf__, 1, 2)));
+#endif
struct pivot_value *pivot_value_new_user_text (const char *, size_t length);
struct pivot_value *pivot_value_new_user_text_nocopy (char *);
/* Styling. */
void pivot_value_get_style (struct pivot_value *,
- const struct area_style *default_style,
- struct area_style *);
-void pivot_value_set_style (struct pivot_value *, const struct area_style *);
+ const struct font_style *base_font_style,
+ const struct cell_style *base_cell_style,
+ struct table_area_style *);
+void pivot_value_set_style (struct pivot_value *,
+ const struct table_area_style *);
/* Template arguments. */
struct pivot_argument