+ {
+ /* Functional parameters and auxiliary data to pass to them. */
+ const struct render_ops *ops;
+ void *aux;
+
+ /* Page size to try to fit the rendering into. Some tables will, of
+ course, overflow this size. */
+ int size[TABLE_N_AXES];
+
+ /* Nominal size of a character in the most common font:
+ font_size[TABLE_HORZ]: Em width.
+ font_size[TABLE_VERT]: Line spacing. */
+ int font_size[TABLE_N_AXES];
+
+ /* Width of different kinds of lines. */
+ const int *line_widths; /* RENDER_N_LINES members. */
+
+ /* Minimum cell width or height before allowing the cell to be broken
+ across two pages. (Joined cells may always be broken at join
+ points.) */
+ int min_break[TABLE_N_AXES];
+
+ /* True if the driver supports cell margins. (If false, the rendering
+ engine will insert a small space betweeen adjacent cells that don't have
+ an intervening rule.) */
+ bool supports_margins;
+
+ /* True if the local language has a right-to-left direction, otherwise
+ false. (Use render_direction_rtl() to find out.) */
+ bool rtl;
+
+ /* True if the table is being rendered for printing (as opposed to
+ on-screen display). */
+ bool printing;
+ };
+
+struct render_ops