}
}
-static void
-ascii_init_caption_cell (const char *caption, struct table_cell *cell)
-{
- cell->inline_contents.options = TAB_LEFT;
- cell->inline_contents.text = CONST_CAST (char *, caption);
- cell->inline_contents.table = NULL;
- cell->contents = &cell->inline_contents;
- cell->n_contents = 1;
- cell->destructor = NULL;
-}
-
static void
ascii_output_table_item (struct ascii_driver *a,
const struct table_item *table_item)
{
- const char *caption = table_item_get_caption (table_item);
struct render_params params;
- struct render_page *page;
struct render_pager *p;
- int caption_height;
int i;
update_page_size (a, false);
- if (caption != NULL)
- {
- /* XXX doesn't do well with very large captions */
- struct table_cell cell;
- ascii_init_caption_cell (caption, &cell);
- caption_height = ascii_measure_cell_height (a, &cell, a->width);
- }
- else
- caption_height = 0;
-
params.draw_line = ascii_draw_line;
params.measure_cell_width = ascii_measure_cell_width;
params.measure_cell_height = ascii_measure_cell_height;
params.draw_cell = ascii_draw_cell;
params.aux = a;
params.size[H] = a->width;
- params.size[V] = a->length - caption_height;
+ params.size[V] = a->length;
params.font_size[H] = 1;
params.font_size[V] = 1;
for (i = 0; i < RENDER_N_LINES; i++)
if (a->file == NULL && !ascii_open_page (a))
return;
- page = render_page_create (¶ms, table_item_get_table (table_item));
- p = render_pager_create (page);
+ p = render_pager_create (¶ms, table_item);
while (render_pager_has_next (p))
{
- int space = a->length - (a->y + (a->y > 0) + caption_height);
- struct render_page *slice = render_pager_next (p, space);
- if (!slice)
- {
- assert (a->y > 0);
- ascii_close_page (a);
- if (!ascii_open_page (a))
- {
- render_pager_destroy (p);
- return;
- }
- continue;
- }
+ int used;
if (a->y > 0)
a->y++;
-
- if (caption_height)
+ used = render_pager_draw_next (p, a->length - a->y);
+ if (used == 0)
{
- struct table_cell cell;
- int bb[TABLE_N_AXES][2];
-
- ascii_init_caption_cell (caption, &cell);
- bb[H][0] = 0;
- bb[H][1] = a->width;
- bb[V][0] = 0;
- bb[V][1] = caption_height;
- ascii_draw_cell (a, &cell, bb, bb);
- a->y += caption_height;
- caption_height = 0;
+ assert (a->y > 0);
+ ascii_close_page (a);
+ if (!ascii_open_page (a))
+ break;
}
- render_page_draw (slice);
- a->y += render_page_get_size (slice, V);
- render_page_unref (slice);
+ else
+ a->y += used;
}
render_pager_destroy (p);
}
int bb[TABLE_N_AXES][2], int clip[TABLE_N_AXES][2] UNUSED,
int *widthp)
{
- const struct table *table = contents->table;
struct render_params params;
- struct render_page *page;
+ struct render_pager *p;
int r[TABLE_N_AXES][2];
int width, height;
int i;
params.line_widths[V][i] = width;
}
- page = render_page_create (¶ms, table);
- width = render_page_get_size (page, TABLE_HORZ);
- height = render_page_get_size (page, TABLE_VERT);
+ p = render_pager_create (¶ms, contents->table);
+ width = render_pager_get_size (p, TABLE_HORZ);
+ height = render_pager_get_size (p, TABLE_VERT);
/* r = intersect(bb, clip) - bb. */
for (i = 0; i < TABLE_N_AXES; i++)
else if (alignment == TAB_CENTER)
a->x += (params.size[H] - width) / 2;
a->y += bb[TABLE_VERT][0];
- render_page_draw (page);
+ render_pager_draw (p);
a->y -= bb[TABLE_VERT][0];
a->x = save_x;
}
- render_page_unref (page);
+ render_pager_destroy (p);
if (width > *widthp)
*widthp = width;