Add --table-look command line option and SET TLOOK command.
[pspp] / src / output / pivot-table.h
index b6f746e6bf17703d9c838e9358583a1c3e9353c5..c613e55efc81d557c03d67b28f45ce72f23c31da 100644 (file)
@@ -107,7 +107,6 @@ enum pivot_area
   };
 
 const char *pivot_area_to_string (enum pivot_area);
-const struct table_area_style *pivot_area_get_default_style (enum pivot_area);
 
 /* Table borders for styling purposes. */
 enum pivot_border
@@ -146,17 +145,12 @@ 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;
@@ -372,6 +366,55 @@ void pivot_category_destroy (struct pivot_category *);
 
 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
   {
@@ -380,35 +423,23 @@ 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 show_caption;
-    bool omit_empty;       /* Omit empty rows and columns? */
     size_t *current_layer; /* axis[PIVOT_AXIS_LAYER].n_dimensions elements. */
-    char *table_look;      /* May be NULL. */
     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 '.'. */
@@ -438,10 +469,6 @@ struct pivot_table
     struct pivot_value *caption;
     char *notes;
 
-    /* Styles. */
-    struct table_area_style areas[PIVOT_N_AREAS];
-    struct table_border_style borders[PIVOT_N_BORDERS];
-
     /* Dimensions. */
     struct pivot_dimension **dimensions;
     size_t n_dimensions;
@@ -463,6 +490,12 @@ struct pivot_table *pivot_table_ref (const struct pivot_table *);
 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 *);
@@ -683,7 +716,11 @@ struct pivot_value *pivot_value_new_variable (const struct variable *);
 /* Values from text strings. */
 struct pivot_value *pivot_value_new_text (const char *);
 struct pivot_value *pivot_value_new_text_format (const char *, ...)
+#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 *);