broken across more than one page, those rows or columns are repeated on each
page.
- A table is not itself an output_item, and thus a table cannot by itself be
- used for output, but they can be embedded inside struct table_item (see
- table-item.h) for that purpose. */
+ Some drivers use tables as an implementation detail of rendering pivot
+ tables.
+*/
#include <stdbool.h>
#include <stdint.h>
struct casereader;
struct fmt_spec;
+struct pivot_footnote;
+struct pivot_value;
struct pool;
struct table_item;
struct variable;
#define CELL_COLOR_WHITE CELL_COLOR (255, 255, 255)
static inline bool
-cell_color_equal (const struct cell_color *a, const struct cell_color *b)
+cell_color_equal (const struct cell_color a, const struct cell_color b)
{
- return a->alpha == b->alpha && a->r == b->r && a->g == b->g && a->b == b->b;
+ return a.alpha == b.alpha && a.r == b.r && a.g == b.g && a.b == b.b;
}
void cell_color_dump (const struct cell_color *);
enum table_stroke
{
- TABLE_STROKE_NONE,
+ TABLE_STROKE_NONE = 0, /* Must be zero. */
TABLE_STROKE_SOLID,
TABLE_STROKE_DASHED,
TABLE_STROKE_THICK,
void table_area_style_uninit (struct table_area_style *);
void table_area_style_free (struct table_area_style *);
-/* Properties of a table cell. */
+/* Cell properties. */
enum
{
- TAB_NONE = 0,
- TAB_MARKUP = 1 << 2, /* Text contains Pango markup. */
- TAB_NUMERIC = 1 << 3, /* Cell contents are numeric. */
- TAB_ROTATE = 1 << 4, /* Rotate cell contents 90 degrees. */
-
- TAB_STYLE_SHIFT = 5,
- TAB_STYLE_MASK = 7 << TAB_STYLE_SHIFT,
-
- /* Internal use by tab.c only. */
- TAB_JOIN = 1 << 14,
+ TABLE_CELL_ROTATE = 1 << 0, /* Rotate cell contents 90 degrees. */
+ TABLE_CELL_JOIN = 1 << 1, /* Joined cell (internal use only). */
+ TABLE_CELL_STYLE_SHIFT = 2,
+ TABLE_CELL_STYLE_MASK = 7 << TABLE_CELL_STYLE_SHIFT,
};
/* A table. */
/* Table contents.
- Each array element in cc[] is ordinarily a "char *" pointer to a string.
- If TAB_JOIN (defined in table.c) is set in ct[] for the element,
- however, it is a joined cell and the corresponding element of cc[]
- points to a struct table_cell. */
+ Each array element in cc[] is ordinarily a "struct pivot_value *". If
+ TABLE_CELL_JOIN is set in cp[] for the element, however, it is a joined
+ cell and the corresponding element of cc[] points to a struct
+ table_cell. */
void **cc; /* Cell contents; void *[nr][nc]. */
- unsigned short *ct; /* Cell types; unsigned short[nr][nc]. */
+ unsigned char *cp; /* Cell properties; unsigned char[nr][nc]. */
struct table_area_style *styles[8];
/* Rules. */
unsigned char *rh; /* Horiz rules; unsigned char[nr+1][nc]. */
unsigned char *rv; /* Vert rules; unsigned char[nr][nc+1]. */
- struct cell_color *rule_colors[32];
+ struct table_border_style *borders;
+ size_t n_borders;
};
/* Reference counting. */
void table_unref (struct table *);
bool table_is_shared (const struct table *);
-/* Rule masks. */
-#define TAB_RULE_TYPE_MASK 7
-#define TAB_RULE_TYPE_SHIFT 0
-#define TAB_RULE_STYLE_MASK (31 << TAB_RULE_STYLE_SHIFT)
-#define TAB_RULE_STYLE_SHIFT 3
-
/* Tables. */
struct table *table_create (int nc, int nr, int hl, int hr, int ht, int hb);
/* Rules. */
void table_hline (struct table *, int style, int x1, int x2, int y);
void table_vline (struct table *, int style, int x, int y1, int y2);
-void table_box (struct table *, int f_h, int f_v, int i_h, int i_v,
- int x1, int y1, int x2, int y2);
/* Cells. */
-void table_text (struct table *, int c, int r, unsigned opt, const char *);
-void table_text_format (struct table *, int c, int r, unsigned opt,
- const char *, ...)
- PRINTF_FORMAT (5, 6);
-void table_joint_text (struct table *, int x1, int y1, int x2, int y2,
- unsigned opt, const char *);
-
-void table_add_subscripts (struct table *, int x, int y,
- char **subscripts, size_t n_subscripts);
-
-/* Footnotes.
-
- Use table_create_footnote() to create the footnotes themselves, then use
- table_add_footnote() to create a reference from a table cell to a footnote.
- There are two steps because a footnote may have multiple references. */
-struct footnote *table_create_footnote (struct table *, size_t idx,
- const char *content,
- const char *marker,
- struct table_area_style *);
-void table_add_footnote (struct table *, int x, int y, struct footnote *);
-
-void table_add_style (struct table *, int x, int y, struct table_area_style *);
+void table_put (struct table *, int x1, int y1, int x2, int y2,
+ unsigned opt, const struct pivot_value *);
+void table_put_owned (struct table *, int x1, int y1, int x2, int y2,
+ unsigned opt, struct pivot_value *);
bool table_cell_is_empty (const struct table *, int c, int r);