X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Frender.c;h=94d89665b73f09cc2da9f4c367226524f47bb379;hb=0abb2b391927d3d4d5ce861f0c21b36a2fe94a2d;hp=84eef66795827dfa74f8ff59540823f0236bac1e;hpb=5b5099296b3c7212623991de8920e1459e234922;p=pspp diff --git a/src/output/render.c b/src/output/render.c index 84eef66795..94d89665b7 100644 --- a/src/output/render.c +++ b/src/output/render.c @@ -1164,7 +1164,7 @@ render_page_draw_region (const struct render_page *page, render_page_draw_cells (page, ofs, bb); } - + /* Breaking up tables to fit on a page. */ /* An iterator for breaking render_pages into smaller chunks. */ @@ -1416,12 +1416,15 @@ struct render_pager 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 @@ -1483,17 +1486,28 @@ struct render_pager * 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 *title; p = xzalloc (sizeof *p); p->params = params; - title = table_item_get_title (table_item); + /* Title. */ if (title) render_pager_add_table (p, table_from_string (TAB_LEFT, title)); - render_pager_add_table (p, table_ref (table_item_get_table (table_item))); - add_footnote_page (p, p->pages[p->n_pages - 1]); + + /* 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)); + + /* Footnotes. */ + add_footnote_page (p, body_page); render_pager_start_page (p); @@ -1599,11 +1613,14 @@ render_pager_draw_region (const struct render_pager *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; } }