X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftab.h;h=b83e178ed8cd7b872f9b84cd195173adad914dd0;hb=b4953e577f4b83b16f3329e7ff22d60950f3b0d5;hp=db38b6b8144d0b94cb638a7abe0c65174d1b7b48;hpb=dfd1972f7bcb550a4fc3b05dbe7e71d12334b0a7;p=pspp diff --git a/src/output/tab.h b/src/output/tab.h index db38b6b814..b83e178ed8 100644 --- a/src/output/tab.h +++ b/src/output/tab.h @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997, 1998, 1999, 2000, 2009 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2009, 2011, 2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,25 +21,35 @@ This is a type of table (see output/table.h) whose content is composed manually by the code that generates it, by filling in cells one by one. +*/ - Some of the features of this type of table are obsolete but have not yet - been removed, because some code still uses them. These features are: - - - The title. The title (or caption, actually) is a property of the - table_item (see output/table-item.h) in which a table is embedded, - not a property of the table itself. +#include "libpspp/compiler.h" +#include "output/table.h" +#include "data/format.h" - - Row and columns offsets (via tab_offset(), tab_next_row()). This - feature simply isn't used enough to justify keeping it. +#define TAB_STYLE_MASK (7u << (TAB_FIRST_AVAILABLE + 1)) +#define TAB_STYLE_SHIFT (TAB_FIRST_AVAILABLE + 1) - - Table resizing. The code that does use this feature is just as well - served by creating multiple tables and pasting them together with - table_paste(). Eliminating this feature would also slightly simplify - the table code here. -*/ +enum + { + /* Horizontal alignment of cell contents. */ + TAB_RIGHT = 0 << (TAB_FIRST_AVAILABLE + 4), + TAB_LEFT = 1 << (TAB_FIRST_AVAILABLE + 4), + TAB_CENTER = 2 << (TAB_FIRST_AVAILABLE + 4), + TAB_HALIGN = 3 << (TAB_FIRST_AVAILABLE + 4), /* Alignment mask. */ + + /* Vertical alignment of cell contents. */ + TAB_TOP = 0 << (TAB_FIRST_AVAILABLE + 6), + TAB_MIDDLE = 1 << (TAB_FIRST_AVAILABLE + 6), + TAB_BOTTOM = 2 << (TAB_FIRST_AVAILABLE + 6), + TAB_VALIGN = 3 << (TAB_FIRST_AVAILABLE + 6), /* Alignment mask. */ + }; -#include -#include +/* 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 /* A table. */ struct tab_table @@ -47,12 +57,6 @@ struct tab_table struct table table; struct pool *container; - /* Table title, or a null pointer if no title has been set. - - The table title is properly part of struct table_item, not struc*/ - char *title; - int cf; /* Column factor for indexing purposes. */ - /* Table contents. Each array element in cc[] is ordinarily a "char *" pointer to a @@ -60,14 +64,13 @@ struct tab_table however, it is a joined cell and the corresponding element of cc[] points to a struct tab_joined_cell. */ void **cc; /* Cell contents; void *[nr][nc]. */ - unsigned char *ct; /* Cell types; unsigned char[nr][nc]. */ + unsigned short *ct; /* Cell types; unsigned short[nr][nc]. */ + struct 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]. */ - - /* X and Y offsets. */ - int col_ofs, row_ofs; + struct cell_color *rule_colors[32]; }; struct tab_table *tab_cast (const struct table *); @@ -90,12 +93,7 @@ static inline int tab_b (const struct tab_table *table) /* Tables. */ struct tab_table *tab_create (int nc, int nr); -void tab_resize (struct tab_table *, int nc, int nr); -void tab_realloc (struct tab_table *, int nc, int nr); void tab_headers (struct tab_table *, int l, int r, int t, int b); -void tab_title (struct tab_table *, const char *, ...) - PRINTF_FORMAT (2, 3); -void tab_submit (struct tab_table *); /* Rules. */ void tab_hline (struct tab_table *, int style, int x1, int x2, int y); @@ -103,23 +101,7 @@ void tab_vline (struct tab_table *, int style, int x, int y1, int y2); void tab_box (struct tab_table *, int f_h, int f_v, int i_h, int i_v, int x1, int y1, int x2, int y2); -/* Obsolete cell options. */ -#define TAT_TITLE TAB_EMPH /* Title attributes. */ - /* Cells. */ -struct fmt_spec; -struct dictionary; -union value; -void tab_value (struct tab_table *, int c, int r, unsigned char opt, - const union value *, const struct dictionary *dict, - const struct fmt_spec *); - -void tab_fixed (struct tab_table *, int c, int r, unsigned char opt, - double v, int w, int d); - -void tab_double (struct tab_table *, int c, int r, unsigned char opt, - double v, const struct fmt_spec *); - void tab_text (struct tab_table *, int c, int r, unsigned opt, const char *); void tab_text_format (struct tab_table *, int c, int r, unsigned opt, const char *, ...) @@ -127,19 +109,17 @@ void tab_text_format (struct tab_table *, int c, int r, unsigned opt, void tab_joint_text (struct tab_table *, int x1, int y1, int x2, int y2, unsigned opt, const char *); -void tab_joint_text_format (struct tab_table *, int x1, int y1, int x2, int y2, - unsigned opt, const char *, ...) - PRINTF_FORMAT (7, 8); -bool tab_cell_is_empty (const struct tab_table *, int c, int r); +struct footnote *tab_create_footnote (struct tab_table *, size_t idx, + const char *content, const char *marker, + struct area_style *); +void tab_add_footnote (struct tab_table *, int x, int y, + const struct footnote *); -/* Editing. */ -void tab_offset (struct tab_table *, int col, int row); -void tab_next_row (struct tab_table *); +void tab_add_style (struct tab_table *, int x, int y, + const struct area_style *); -/* Current row/column offset. */ -#define tab_row(TABLE) ((TABLE)->row_ofs) -#define tab_col(TABLE) ((TABLE)->col_ofs) +bool tab_cell_is_empty (const struct tab_table *, int c, int r); /* Simple output. */ void tab_output_text (int options, const char *string);