X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fhtml.c;h=55bcb6daa09d95064e87a6d600c3e83047f8d644;hb=395cd4395449dbdff7c9ba0d56ba14529063d350;hp=e79cd8afea34180dfa279dc2ff6adfc0f98aa38f;hpb=759eaa063b918bd7defe91e53d3ce102901b3e53;p=pspp diff --git a/src/output/html.c b/src/output/html.c index e79cd8afea..55bcb6daa0 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -382,67 +382,76 @@ put_tfoot (struct html_driver *html, const struct table *t, bool *tfoot) fputs ("\n
", html->file); } +static void +html_put_footnote_markers (struct html_driver *html, + const struct footnote **footnotes, + size_t n_footnotes) +{ + if (n_footnotes > 0) + { + fputs ("", html->file); + for (size_t i = 0; i < n_footnotes; i++) + { + const struct footnote *f = footnotes[i]; + + if (i > 0) + putc (',', html->file); + escape_string (html->file, f->marker, + strlen (f->marker), " ", "
"); + } + fputs ("
", html->file); + } +} + +static void +html_put_table_item_text (struct html_driver *html, + const struct table_item_text *text) +{ + escape_string (html->file, text->content, strlen (text->content), + " ", "
"); + html_put_footnote_markers (html, text->footnotes, text->n_footnotes); +} + static void html_output_table (struct html_driver *html, const struct table_item *item) { const struct table *t = table_item_get_table (item); - const char *title = table_item_get_title (item); - const char *caption = table_item_get_caption (item); - int footnote_idx = 0; bool tfoot = false; int y; fputs ("", html->file); + const struct table_item_text *caption = table_item_get_caption (item); if (caption) { put_tfoot (html, t, &tfoot); - escape_string (html->file, caption, strlen (caption), " ", "
"); - } - footnote_idx = 0; - for (y = 0; y < table_nr (t); y++) - { - int x; - for (x = 0; x < table_nc (t); ) - { - const struct cell_contents *c; - struct table_cell cell; - - table_get_cell (t, x, y, &cell); - if (y != cell.d[TABLE_VERT][0]) - goto next_0; - - for (c = cell.contents; c < &cell.contents[cell.n_contents]; c++) - { - int i; - - for (i = 0; i < c->n_footnotes; i++) - { - char marker[16]; - - put_tfoot (html, t, &tfoot); - str_format_26adic (++footnote_idx, false, marker, sizeof marker); - fprintf (html->file, "%s ", marker); - escape_string (html->file, c->footnotes[i], - strlen (c->footnotes[i]), " ", "
"); - } - } - - next_0: - x = cell.d[TABLE_HORZ][1]; - table_cell_free (&cell); - } + html_put_table_item_text (html, caption); } + const struct footnote **f; + size_t n_footnotes = table_collect_footnotes (item, &f); + + for (size_t i = 0; i < n_footnotes; i++) + if (f[i]) + { + put_tfoot (html, t, &tfoot); + fputs ("", html->file); + escape_string (html->file, f[i]->marker, strlen (f[i]->marker), + " ", "
"); + fputs ("
", html->file); + escape_string (html->file, f[i]->content, strlen (f[i]->content), + " ", "
"); + } + free (f); if (tfoot) fputs ("\n", html->file); - footnote_idx = 0; fputs ("\n", html->file); - if (title != NULL) + const struct table_item_text *title = table_item_get_title (item); + if (title) { fputs (" \n", html->file); } @@ -524,7 +533,6 @@ html_output_table (struct html_driver *html, const struct table_item *item) for (c = cell.contents; c < &cell.contents[cell.n_contents]; c++) { const char *s = c->text; - int i; if (c->options & TAB_EMPH) fputs ("", html->file); @@ -542,21 +550,7 @@ html_output_table (struct html_driver *html, const struct table_item *item) if (c->options & TAB_EMPH) fputs ("", html->file); - if (c->n_footnotes > 0) - { - fputs ("", html->file); - for (i = 0; i < c->n_footnotes; i++) - { - char marker[16]; - - if (i > 0) - putc (',', html->file); - str_format_26adic (++footnote_idx, false, - marker, sizeof marker); - fputs (marker, html->file); - } - fputs ("", html->file); - } + html_put_footnote_markers (html, c->footnotes, c->n_footnotes); } /* Output or . */
", html->file); - escape_string (html->file, title, strlen (title), " ", "
"); + html_put_table_item_text (html, title); fputs ("