X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Foutput%2Fhtml.c;h=99390f9ded51e5cebc0571f5ab4346d100c6aae0;hb=dfb794fa53a423c1f20c3a21811c0bec4a64a916;hp=60ca95e28dba029683e895dad42e0a7aac91c2a1;hpb=5ce9c6ba1502e623ec6723a8273da77e5858b8d4;p=pspp diff --git a/src/output/html.c b/src/output/html.c index 60ca95e28d..99390f9ded 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -61,7 +61,7 @@ struct html_driver char *chart_file_name; FILE *file; - size_t chart_cnt; + size_t n_charts; bool bare; bool css; @@ -84,11 +84,10 @@ html_driver_cast (struct output_driver *driver) return UP_CAST (driver, struct html_driver, driver); } -static struct driver_option * -opt (struct output_driver *d, struct string_map *options, const char *key, - const char *default_value) +static struct driver_option +opt (struct driver_options *options, const char *key, const char *default_value) { - return driver_option_get (d, options, key, default_value); + return driver_option_get (options, key, default_value); } static void @@ -177,41 +176,39 @@ put_header (struct html_driver *html) static struct output_driver * html_create (struct file_handle *fh, enum settings_output_devices device_type, - struct string_map *o) + struct driver_options *o) { - struct output_driver *d; - struct html_driver *html; - - html = xzalloc (sizeof *html); - d = &html->driver; - output_driver_init (&html->driver, &html_driver_class, fh_get_file_name (fh), - device_type); - html->bare = parse_boolean (opt (d, o, "bare", "false")); - html->css = parse_boolean (opt (d, o, "css", "true")); - html->borders = parse_boolean (opt (d, o, "borders", "true")); - - html->handle = fh; - html->chart_file_name = parse_chart_file_name (opt (d, o, "charts", - fh_get_file_name (fh))); - html->file = NULL; - html->chart_cnt = 1; - html->bg = parse_color (opt (d, o, "background-color", "#FFFFFFFFFFFF")); - html->fg = parse_color (opt (d, o, "foreground-color", "#000000000000")); - html->file = fn_open (html->handle, "w"); - if (html->file == NULL) + FILE *file = fn_open (fh, "w"); + if (!file) { - msg_error (errno, _("error opening output file `%s'"), fh_get_file_name (html->handle)); - goto error; + msg_error (errno, _("error opening output file `%s'"), + fh_get_file_name (fh)); + return NULL; } + struct html_driver *html = xmalloc (sizeof *html); + *html = (struct html_driver) { + .driver = { + .class = &html_driver_class, + .name = xstrdup (fh_get_file_name (fh)), + .device_type = device_type + }, + .bare = parse_boolean (opt (o, "bare", "false")), + .css = parse_boolean (opt (o, "css", "true")), + .borders = parse_boolean (opt (o, "borders", "true")), + .handle = fh, + .chart_file_name = parse_chart_file_name (opt (o, "charts", + fh_get_file_name (fh))), + .file = file, + .n_charts = 1, + .bg = parse_color (opt (o, "background-color", "#FFFFFFFFFFFF")), + .fg = parse_color (opt (o, "foreground-color", "#000000000000")), + }; + if (!html->bare) put_header (html); - return d; - - error: - output_driver_destroy (d); - return NULL; + return &html->driver; } /* Emits CONTENT to the output, escaping CONTENT as @@ -259,7 +256,7 @@ html_submit__ (struct output_driver *driver, const struct output_item *item, { char *file_name = xr_draw_png_chart (item->chart, html->chart_file_name, - html->chart_cnt++, + html->n_charts++, &html->fg, &html->bg); if (file_name != NULL) { @@ -280,7 +277,7 @@ html_submit__ (struct output_driver *driver, const struct output_item *item, if (html->chart_file_name) { char *file_name = xr_write_png_image ( - item->image, html->chart_file_name, ++html->chart_cnt); + item->image, html->chart_file_name, ++html->n_charts); if (file_name != NULL) { fprintf (html->file, "", file_name); @@ -456,7 +453,7 @@ format_color (const struct cell_color color, const struct cell_color default_color, char *buf, size_t bufsize) { - bool retval = !cell_color_equal (&color, &default_color); + bool retval = !cell_color_equal (color, default_color); if (retval) { if (color.alpha == 255) @@ -474,16 +471,16 @@ put_border (const struct table *table, const struct table_cell *cell, enum table_axis axis, int h, int v, const char *border_name) { - struct cell_color color; - const char *css = border_to_css ( - table_get_rule (table, axis, cell->d[H][h], cell->d[V][v], &color)); + struct table_border_style border + = table_get_rule (table, axis, cell->d[H][h], cell->d[V][v]); + const char *css = border_to_css (border.stroke); if (css) { next_style (style); fprintf (style->file, "border-%s: %s", border_name, css); char buf[32]; - if (format_color (color, (struct cell_color) CELL_COLOR_BLACK, + if (format_color (border.color, (struct cell_color) CELL_COLOR_BLACK, buf, sizeof buf)) fprintf (style->file, " %s", buf); } @@ -518,7 +515,7 @@ html_put_table_cell (struct html_driver *html, const struct pivot_table *pt, break; } - if (cell->options & TAB_ROTATE) + if (cell->options & TABLE_CELL_ROTATE) put_style (&style, "writing-mode", "sideways-lr"); if (cell->cell_style->valign != TABLE_VALIGN_TOP) @@ -675,10 +672,10 @@ html_output_table_layer (struct html_driver *html, const struct pivot_table *pt, table_get_cell (body, x, y, &cell); if (x == cell.d[TABLE_HORZ][0] && y == cell.d[TABLE_VERT][0]) { - bool is_header = (y < body->h[V][0] - || y >= body->n[V] - body->h[V][1] - || x < body->h[H][0] - || x >= body->n[H] - body->h[H][1]); + bool is_header = (y < body->h[V] + || y >= body->n[V] + || x < body->h[H] + || x >= body->n[H]); const char *tag = is_header ? "th" : "td"; html_put_table_cell (html, pt, &cell, tag, body); }