X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftable.h;h=1fe78d8e767ab2e69bd636a643cfb3737d76b439;hb=df1d194af32e35739355981252785e768f21ebb0;hp=85d063e8b6f730fda5e8957dfdeb9eec1da30385;hpb=e552b78ccafd962fc00c1092bd7e22ed6676d527;p=pspp diff --git a/src/output/table.h b/src/output/table.h index 85d063e8b6..1fe78d8e76 100644 --- a/src/output/table.h +++ b/src/output/table.h @@ -26,9 +26,9 @@ 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 #include @@ -37,6 +37,8 @@ struct casereader; struct fmt_spec; +struct pivot_footnote; +struct pivot_value; struct pool; struct table_item; struct variable; @@ -66,16 +68,16 @@ struct cell_color #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, @@ -156,6 +158,7 @@ void font_style_copy (struct pool *, struct font_style *, const struct font_style *); void font_style_uninit (struct font_style *); void font_style_dump (const struct font_style *); +bool font_style_equal (const struct font_style *, const struct font_style *); struct table_area_style { @@ -175,20 +178,13 @@ void table_area_style_copy (struct pool *, struct table_area_style *, 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_FIX = 1 << 1, /* Use fixed font. */ - 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. */ @@ -222,18 +218,19 @@ struct 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. */ @@ -241,46 +238,18 @@ struct table *table_ref (const struct table *); 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, - const struct footnote *); - -void table_add_style (struct table *, int x, int y, - const 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);