}
}
-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_break x_break;
- int caption_height;
+ struct render_pager *p;
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));
- for (render_break_init (&x_break, page, H);
- render_break_has_next (&x_break); )
+ p = render_pager_create (¶ms, table_item);
+ while (render_pager_has_next (p))
{
- struct render_page *x_slice;
- struct render_break y_break;
+ int used;
- x_slice = render_break_next (&x_break, a->width);
- for (render_break_init (&y_break, x_slice, V);
- render_break_has_next (&y_break); )
+ if (a->y > 0)
+ a->y++;
+ used = render_pager_draw_next (p, a->length - a->y);
+ if (used == 0)
{
- struct render_page *y_slice;
- int space;
-
- if (a->y > 0)
- a->y++;
-
- space = a->length - a->y - caption_height;
- if (render_break_next_size (&y_break) > space)
- {
- assert (a->y > 0);
- ascii_close_page (a);
- if (!ascii_open_page (a))
- return;
- continue;
- }
-
- y_slice = render_break_next (&y_break, space);
- if (caption_height)
- {
- 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;
- }
- render_page_draw (y_slice);
- a->y += render_page_get_size (y_slice, V);
- render_page_unref (y_slice);
+ assert (a->y > 0);
+ ascii_close_page (a);
+ if (!ascii_open_page (a))
+ break;
}
- render_break_destroy (&y_break);
+ else
+ a->y += used;
}
- render_break_destroy (&x_break);
+ render_pager_destroy (p);
}
static void
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;