6 #include <cairo-script-interpreter.h>
11 static cairo_surface_t *
12 _surface_create (void *_closure,
13 cairo_content_t content,
14 double width, double height,
17 cairo_surface_t **closure = _closure;
18 cairo_surface_t *surface;
19 cairo_rectangle_t extents;
21 extents.x = extents.y = 0;
22 extents.width = width;
23 extents.height = height;
24 surface = cairo_recording_surface_create (content, &extents);
26 *closure = cairo_surface_reference (surface);
32 stdio_write (void *closure, const unsigned char *data, unsigned len)
34 if (fwrite (data, len, 1, closure) == 1)
35 return CAIRO_STATUS_SUCCESS;
37 return CAIRO_STATUS_WRITE_ERROR;
41 main (int argc, char **argv)
43 cairo_surface_t *surface = NULL;
44 const cairo_script_interpreter_hooks_t hooks = {
46 .surface_create = _surface_create,
48 cairo_script_interpreter_t *csi;
49 FILE *in = stdin, *out = stdout;
51 if (argc >= 2 && strcmp (argv[1], "-"))
52 in = fopen (argv[1], "r");
53 if (argc >= 3 && strcmp (argv[2], "-"))
54 out = fopen (argv[2], "w");
56 csi = cairo_script_interpreter_create ();
57 cairo_script_interpreter_install_hooks (csi, &hooks);
58 cairo_script_interpreter_feed_stream (csi, in);
59 cairo_script_interpreter_finish (csi);
60 cairo_script_interpreter_destroy (csi);
62 if (surface != NULL) {
65 xml = cairo_xml_create_for_stream (stdio_write, out);
66 cairo_xml_for_recording_surface (xml, surface);
67 cairo_device_destroy (xml);
69 cairo_surface_destroy (surface);