RENDER_N_LINES
};
+/* Parameters for rendering a table_item to a device.
+
+
+ Coordinate system
+ =================
+
+ The rendering code assumes that larger 'x' is to the right and larger 'y'
+ toward the bottom of the page.
+
+ The rendering code assumes that the table being rendered has its upper left
+ corner at (0,0) in device coordinates. This is usually not the case from
+ the driver's perspective, so the driver should expect to apply its own
+ offset to coordinates passed to callback functions.
+
+
+ Callback functions
+ ==================
+
+ For each of the callback functions, AUX is passed as the 'aux' member of the
+ render_params structure.
+
+ The device is expected to transform numerical footnote index numbers into
+ footnote markers. The existing drivers use str_format_26adic() to transform
+ index 0 to "a", index 1 to "b", and so on. The FOOTNOTE_IDX supplied to
+ each function is the footnote index number for the first footnote in the
+ cell. If a cell contains more than one footnote, then the additional
+ footnote indexes increase sequentially, e.g. the second footnote has index
+ FOOTNOTE_IDX + 1.
+*/
struct render_params
{
/* Measures CELL's width. Stores in *MIN_WIDTH the minimum width required
to avoid splitting a single word across multiple lines (normally, this
is the width of the longest word in the cell) and in *MAX_WIDTH the
- minimum width required to avoid line breaks other than at new-lines. */
+ minimum width required to avoid line breaks other than at new-lines.
+ */
void (*measure_cell_width) (void *aux, const struct table_cell *cell,
+ int footnote_idx,
int *min_width, int *max_width);
/* Returns the height required to render CELL given a width of WIDTH. */
int (*measure_cell_height) (void *aux, const struct table_cell *cell,
- int width);
+ int footnote_idx, int width);
/* Given that there is space measuring WIDTH by HEIGHT to render CELL,
where HEIGHT is insufficient to render the entire height of the cell,
Optional. If NULL, the rendering engine assumes that all breakpoints
are acceptable. */
int (*adjust_break) (void *aux, const struct table_cell *cell,
- int width, int height);
+ int footnote_idx, int width, int height);
/* Draws a generalized intersection of lines in the rectangle whose
top-left corner is (BB[TABLE_HORZ][0], BB[TABLE_VERT][0]) and whose
of the cell that lies within CLIP should actually be drawn, although BB
should used to determine the layout of the cell. */
void (*draw_cell) (void *aux, const struct table_cell *cell,
+ int footnote_idx,
int bb[TABLE_N_AXES][2], int clip[TABLE_N_AXES][2]);
/* Auxiliary data passed to each of the above functions. */
points.) */
int min_break[TABLE_N_AXES];
};
-\f
-\f
+
/* An iterator for breaking render_pages into smaller chunks. */
struct render_pager *render_pager_create (const struct render_params *,
const struct table_item *);
int render_pager_get_size (const struct render_pager *, enum table_axis);
int render_pager_get_best_breakpoint (const struct render_pager *, int height);
+bool render_direction_rtl (void);
+
+
#endif /* output/render.h */