#include "output/spv/spv-writer.h"
+#include <cairo.h>
#include <inttypes.h>
#include <libxml/xmlwriter.h>
#include <math.h>
#include "libpspp/temp-file.h"
#include "libpspp/version.h"
#include "libpspp/zip-writer.h"
+#include "output/cairo-chart.h"
+#include "output/chart-item.h"
+#include "output/driver.h"
+#include "output/group-item.h"
+#include "output/image-item.h"
+#include "output/page-eject-item.h"
#include "output/page-setup-item.h"
#include "output/pivot-table.h"
+#include "output/table-item.h"
#include "output/text-item.h"
#include "gl/xalloc.h"
bool need_page_break;
};
+static void spv_writer_close_heading (struct spv_writer *);
+
char * WARN_UNUSED_RESULT
spv_writer_open (const char *filename, struct spv_writer **writerp)
{
return error;
}
-void
-spv_writer_set_page_setup (struct spv_writer *w,
- const struct page_setup *page_setup)
-{
- page_setup_destroy (w->page_setup);
- w->page_setup = page_setup_clone (page_setup);
-}
-
static void
write_attr (struct spv_writer *w, const char *name, const char *value)
{
return true;
}
-void
+static void
spv_writer_open_heading (struct spv_writer *w, const char *command_id,
const char *label)
{
w->heading = NULL;
}
-void
+static void
spv_writer_close_heading (struct spv_writer *w)
{
const char *infix = "";
}
}
-void
+static void
spv_writer_put_text (struct spv_writer *w, const struct text_item *text,
const char *command_id)
{
return CAIRO_STATUS_SUCCESS;
}
-void
+static void
spv_writer_put_image (struct spv_writer *w, cairo_surface_t *image)
{
bool initial_depth = w->heading_depth;
free (uri);
}
-
-void
-spv_writer_eject_page (struct spv_writer *w)
-{
- w->need_page_break = true;
-}
\f
#define H TABLE_HORZ
#define V TABLE_VERT
}
}
-void
+static void
spv_writer_put_table (struct spv_writer *w, const struct pivot_table *table)
{
struct pivot_table *table_rw = CONST_CAST (struct pivot_table *, table);
free (data_path);
}
+\f
+void
+spv_writer_write (struct spv_writer *w, const struct output_item *item)
+{
+ if (is_group_open_item (item))
+ spv_writer_open_heading (w,
+ to_group_open_item (item)->command_name,
+ to_group_open_item (item)->command_name);
+ else if (is_group_close_item (item))
+ spv_writer_close_heading (w);
+ else if (is_table_item (item))
+ {
+ const struct table_item *table_item = to_table_item (item);
+ if (table_item->pt)
+ spv_writer_put_table (w, table_item->pt);
+ }
+ else if (is_chart_item (item))
+ {
+ cairo_surface_t *surface = xr_draw_image_chart (
+ to_chart_item (item),
+ &(struct cell_color) CELL_COLOR_BLACK,
+ &(struct cell_color) CELL_COLOR_WHITE);
+ if (cairo_surface_status (surface) == CAIRO_STATUS_SUCCESS)
+ spv_writer_put_image (w, surface);
+ cairo_surface_destroy (surface);
+ }
+ else if (is_image_item (item))
+ spv_writer_put_image (w, to_image_item (item)->image);
+ else if (is_text_item (item))
+ {
+ char *command_id = output_get_command_name ();
+ spv_writer_put_text (w, to_text_item (item),
+ command_id);
+ free (command_id);
+ }
+ else if (is_page_eject_item (item))
+ w->need_page_break = true;
+ else if (is_page_setup_item (item))
+ {
+ page_setup_destroy (w->page_setup);
+ w->page_setup = page_setup_clone (to_page_setup_item (item)->page_setup);
+ }
+}