struct render_break y_break;
};
-static void
+static const struct render_page *
render_pager_add_table (struct render_pager *p, struct table *table)
{
+ struct render_page *page;
+
if (p->n_pages >= p->allocated_pages)
p->pages = x2nrealloc (p->pages, &p->allocated_pages, sizeof *p->pages);
- p->pages[p->n_pages++] = render_page_create (p->params, table);
+ page = p->pages[p->n_pages++] = render_page_create (p->params, table);
+ return page;
}
static void
render_pager_create (const struct render_params *params,
const struct table_item *table_item)
{
+ const char *caption = table_item_get_caption (table_item);
+ const char *title = table_item_get_title (table_item);
+ const struct render_page *body_page;
struct render_pager *p;
- const char *caption;
p = xzalloc (sizeof *p);
p->params = params;
- caption = table_item_get_caption (table_item);
+ /* Title. */
+ if (title)
+ render_pager_add_table (p, table_from_string (TAB_LEFT, title));
+
+ /* Body. */
+ body_page = render_pager_add_table (p, table_ref (table_item_get_table (
+ table_item)));
+
+ /* Caption. */
if (caption)
render_pager_add_table (p, table_from_string (TAB_LEFT, caption));
- render_pager_add_table (p, table_ref (table_item_get_table (table_item)));
- add_footnote_page (p, p->pages[p->n_pages - 1]);
+
+ /* Footnotes. */
+ add_footnote_page (p, body_page);
render_pager_start_page (p);
for (i = 0; i < p->n_pages; i++)
{
const struct render_page *page = p->pages[i];
+ int size = render_page_get_size (page, V);
clip[V][0] = MAX (y, ofs[V]) - ofs[V];
- clip[V][1] = MIN (y + h, ofs[V] + render_page_get_size (page, V)) - ofs[V];
+ clip[V][1] = MIN (y + h, ofs[V] + size) - ofs[V];
if (clip[V][1] > clip[V][0])
render_page_draw_region (page, ofs, clip);
+
+ ofs[V] += size;
}
}