X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Foutput%2Ftable.h;h=516db6a52a7f44e5fe9e6a853aaf1fb63294587b;hb=ab249f50e9f994b9a92a74b148f596f47fee0de9;hp=2777c59db6c8f4043ecce47a9a8755b2df0a7ff7;hpb=c6fe58a22249f4f486b42f35fd8bd537c91e8e6e;p=pspp-builds.git diff --git a/src/output/table.h b/src/output/table.h index 2777c59d..516db6a5 100644 --- a/src/output/table.h +++ b/src/output/table.h @@ -67,8 +67,10 @@ struct tab_joined_cell struct outp_driver; struct tab_table; -typedef void tab_dim_func (struct tab_table *, struct outp_driver *, - void *aux); +struct tab_rendering; + +typedef void tab_dim_func (struct tab_rendering *, void *aux); +typedef void tab_dim_free_func (void *aux); /* A table. */ struct tab_table @@ -87,37 +89,42 @@ struct tab_table unsigned char *ct; /* Cell types; unsigned char[nr][nc]. */ unsigned char *rh; /* Horiz rules; unsigned char[nr+1][nc]. */ unsigned char *rv; /* Vert rules; unsigned char[nr][nc+1]. */ + + /* Calculating row and column dimensions. */ tab_dim_func *dim; /* Calculates cell widths and heights. */ + tab_dim_free_func *dim_free; /* Frees space allocated for dim function. */ void *dim_aux; /* Auxiliary data for dim function. */ - /* Calculated during output. */ - int *w; /* Column widths; [nc]. */ - int *h; /* Row heights; [nr]. */ - int *hrh; /* Heights of horizontal rules; [nr+1]. */ - int *wrv; /* Widths of vertical rules; [nc+1]. */ - int wl, wr, ht, hb; /* Width/height of header rows/columns. */ - /* Editing info. */ int col_ofs, row_ofs; /* X and Y offsets. */ }; -/* Number of rows in TABLE. */ -#define tab_nr(TABLE) ((TABLE)->nr) +/* Number of rows or columns in TABLE. */ +static inline int tab_nr (const struct tab_table *table) { return table->nr; } +static inline int tab_nc (const struct tab_table *table) { return table->nc; } -/* Number of columns in TABLE. */ -#define tab_nc(TABLE) ((TABLE)->nc) +/* Number of left/right/top/bottom header columns/rows in TABLE. */ +static inline int tab_l (const struct tab_table *table) { return table->l; } +static inline int tab_r (const struct tab_table *table) { return table->r; } +static inline int tab_t (const struct tab_table *table) { return table->t; } +static inline int tab_b (const struct tab_table *table) { return table->b; } -/* Number of left header columns in TABLE. */ -#define tab_l(TABLE) ((TABLE)->l) - -/* Number of right header columns in TABLE. */ -#define tab_r(TABLE) ((TABLE)->r) +struct tab_rendering + { + const struct tab_table *table; + struct outp_driver *driver; -/* Number of top header rows in TABLE. */ -#define tab_t(TABLE) ((TABLE)->t) + int *w; /* Column widths; [nc]. */ + int *h; /* Row heights; [nr]. */ + int *hrh; /* Heights of horizontal rules; [nr+1]. */ + int *wrv; /* Widths of vertical rules; [nc+1]. */ -/* Number of bottom header rows in TABLE. */ -#define tab_b(TABLE) ((TABLE)->b) + /* These fields would be redundant with those in struct tab_table, except + that a table will be rendered with fewer header rows or columns than + requested when we are pressed for space. */ + int l, r, t, b; /* Number of header rows/columns. */ + int wl, wr, ht, hb; /* Width/height of header rows/columns. */ + }; /* Tables. */ struct tab_table *tab_create (int nc, int nr, int reallocable); @@ -133,9 +140,10 @@ void tab_submit (struct tab_table *); /* Dimensioning. */ tab_dim_func tab_natural_dimensions; -int tab_natural_width (struct tab_table *t, struct outp_driver *d, int c); -int tab_natural_height (struct tab_table *t, struct outp_driver *d, int r); -void tab_dim (struct tab_table *, tab_dim_func *, void *aux); +int tab_natural_width (const struct tab_rendering *, int c); +int tab_natural_height (const struct tab_rendering *, int r); +void tab_dim (struct tab_table *, + tab_dim_func *, tab_dim_free_func *, void *aux); /* Rules. */ void tab_hline (struct tab_table *, int style, int x1, int x2, int y);