X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fhtml.c;h=bfe0850d5f8f9bc3d53133ea52399ae8d93b7312;hb=dbd443bb33b42b00e1bb9e67e140af659a418673;hp=e07edec8773d8044ed96ee35a134fdfb0646812e;hpb=43b1296aafe7582e7dbe6c2b6a8b478d7d9b0fcf;p=pspp diff --git a/src/output/html.c b/src/output/html.c index e07edec877..bfe0850d5f 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,47 +18,54 @@ #include "chart.h" #include "htmlP.h" #include +#include #include #include #include #include -#include #include #include #include #include "error.h" -#include "getline.h" #include "output.h" #include "manager.h" #include "table.h" #include -#include "size_max.h" +#include "xalloc.h" #include "gettext.h" #define _(msgid) gettext (msgid) +/* HTML driver options: (defaults listed first) + + output-file="pspp.html" + chart-files="pspp-#.png" +*/ + static void escape_string (FILE *file, const char *text, size_t length, const char *space); -static bool handle_option (struct outp_driver *this, +static bool handle_option (void *this, const char *key, const struct string *val); static void print_title_tag (FILE *file, const char *name, const char *content); static bool -html_open_driver (struct outp_driver *this, struct substring options) +html_open_driver (const char *name, int types, struct substring options) { + struct outp_driver *this; struct html_driver_ext *x; + this = outp_allocate_driver (&html_class, name, types); this->ext = x = xmalloc (sizeof *x); x->file_name = xstrdup ("pspp.html"); x->chart_file_name = xstrdup ("pspp-#.png"); x->file = NULL; x->chart_cnt = 0; - outp_parse_options (options, handle_option, this); + outp_parse_options (name, options, handle_option, this); x->file = fn_open (x->file_name, "w"); if (x->file == NULL) @@ -83,13 +90,13 @@ html_open_driver (struct outp_driver *this, struct substring options) fputs (" LINK=\"#1f00ff\" ALINK=\"#ff0000\" VLINK=\"#9900dd\">\n", x->file); print_title_tag (x->file, "H1", outp_title); print_title_tag (x->file, "H2", outp_subtitle); - free (x->chart_file_name); + outp_register_driver (this); return true; error: - free (x->chart_file_name); this->class->close_driver (this); + outp_free_driver (this); return false; } @@ -123,6 +130,7 @@ html_close_driver (struct outp_driver *this) } else ok = true; + free (x->chart_file_name); free (x->file_name); free (x); @@ -153,9 +161,9 @@ static const struct outp_option option_tab[] = }; static bool -handle_option (struct outp_driver *this, - const char *key, const struct string *val) +handle_option (void *this_, const char *key, const struct string *val) { + struct outp_driver *this = this_; struct html_driver_ext *x = this->ext; int subcat; @@ -179,7 +187,8 @@ handle_option (struct outp_driver *this, free (x->chart_file_name); x->chart_file_name = ds_xstrdup (val); } - error (0, 0, _("`chart-files' value must contain `#'")); + else + error (0, 0, _("`chart-files' value must contain `#'")); break; default: NOT_REACHED (); @@ -359,39 +368,14 @@ output_tab_table (struct outp_driver *this, struct tab_table *t) static void html_initialise_chart (struct outp_driver *this UNUSED, struct chart *ch) { -#ifdef NO_CHARTS - ch->lp = NULL; -#else struct html_driver_ext *x = this->ext; - - FILE *fp; - int number_pos; - - x->chart_cnt++; - - number_pos = strchr (x->chart_file_name, '#') - x->chart_file_name; - ch->file_name = xasprintf ("%.*s%d%s", - number_pos, x->chart_file_name, - (int) x->chart_cnt, - x->chart_file_name + number_pos + 1); - fp = fopen (ch->file_name, "wb"); - if (fp == NULL) - { - error (0, errno, _("creating \"%s\""), ch->file_name); - free (ch->file_name); - ch->file_name = NULL; - return; - } - - ch->pl_params = pl_newplparams (); - ch->lp = pl_newpl_r ("png", 0, fp, stderr, ch->pl_params); -#endif + chart_init_separate (ch, "png", x->chart_file_name, ++x->chart_cnt); } static void html_finalise_chart(struct outp_driver *d UNUSED, struct chart *ch) { - free(ch->file_name); + chart_finalise_separate (ch); } @@ -405,6 +389,7 @@ const struct outp_class html_class = html_open_driver, html_close_driver, + NULL, NULL, NULL,