X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fspv-driver.c;h=1eb57f7f16001a6befb951e8817c9010a6b21d94;hb=56955f4bd8b55397e12ee6410a571f0b420a9731;hp=0c9d1412a5584514d4bf45be1139bf94ae4ce7ad;hpb=35cf05a2036e9c3562d275ed812059dd7b2b5d01;p=pspp diff --git a/src/output/spv-driver.c b/src/output/spv-driver.c index 0c9d1412a5..1eb57f7f16 100644 --- a/src/output/spv-driver.c +++ b/src/output/spv-driver.c @@ -22,11 +22,8 @@ #include "data/file-handle-def.h" #include "libpspp/cast.h" -#include "output/group-item.h" -#include "output/page-eject-item.h" -#include "output/page-setup-item.h" -#include "output/table-item.h" -#include "output/text-item.h" +#include "output/cairo-chart.h" +#include "output/output-item.h" #include "output/spv/spv-writer.h" #include "gl/xalloc.h" @@ -52,7 +49,7 @@ spv_driver_cast (struct output_driver *driver) static struct output_driver * spv_create (struct file_handle *fh, enum settings_output_devices device_type, - struct string_map *o UNUSED) + struct string_map *o UNUSED) { struct output_driver *d; struct spv_driver *spv; @@ -72,7 +69,7 @@ spv_create (struct file_handle *fh, enum settings_output_devices device_type, return d; - error: +error: output_driver_destroy (d); return NULL; } @@ -91,34 +88,20 @@ spv_destroy (struct output_driver *driver) static void spv_submit (struct output_driver *driver, - const struct output_item *output_item) + const struct output_item *output_item) { struct spv_driver *spv = spv_driver_cast (driver); - if (is_group_open_item (output_item)) - spv_writer_open_heading (spv->writer, - to_group_open_item (output_item)->command_name, - to_group_open_item (output_item)->command_name); - else if (is_group_close_item (output_item)) - spv_writer_close_heading (spv->writer); - else if (is_table_item (output_item)) - { - const struct table_item *table_item = to_table_item (output_item); - if (table_item->pt) - spv_writer_put_table (spv->writer, table_item->pt); - } - else if (is_text_item (output_item)) - { - char *command_id = output_get_command_name (); - spv_writer_put_text (spv->writer, to_text_item (output_item), - command_id); - free (command_id); - } - else if (is_page_eject_item (output_item)) - spv_writer_eject_page (spv->writer); - else if (is_page_setup_item (output_item)) - spv_writer_set_page_setup (spv->writer, - to_page_setup_item (output_item)->page_setup); + spv_writer_write (spv->writer, output_item); +} + +static void +spv_setup (struct output_driver *driver, + const struct page_setup *ps) +{ + struct spv_driver *spv = spv_driver_cast (driver); + + spv_writer_set_page_setup (spv->writer, ps); } struct output_driver_factory spv_driver_factory = @@ -126,8 +109,10 @@ struct output_driver_factory spv_driver_factory = static const struct output_driver_class spv_driver_class = { - "spv", - spv_destroy, - spv_submit, - NULL, + .name = "spv", + .destroy = spv_destroy, + .submit = spv_submit, + .setup = spv_setup, + .handles_show = true, + .handles_groups = true, };