summaryrefslogtreecommitdiff
path: root/util/cairo-script/csi-exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/cairo-script/csi-exec.c')
-rwxr-xr-xutil/cairo-script/csi-exec.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/util/cairo-script/csi-exec.c b/util/cairo-script/csi-exec.c
new file mode 100755
index 000000000..d30b1c9c8
--- /dev/null
+++ b/util/cairo-script/csi-exec.c
@@ -0,0 +1,41 @@
+#include <cairo.h>
+#include <cairo-script-interpreter.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static cairo_surface_t *
+_surface_create (void *closure,
+ cairo_content_t content,
+ double width, double height,
+ long uid)
+{
+ return cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+}
+
+int
+main (int argc, char **argv)
+{
+ const cairo_script_interpreter_hooks_t hooks = {
+ .surface_create = _surface_create
+ };
+ cairo_script_interpreter_t *csi;
+ int i;
+
+ for (i = 1; i < argc; i++) {
+ int status, line;
+
+ csi = cairo_script_interpreter_create ();
+ cairo_script_interpreter_install_hooks (csi, &hooks);
+ cairo_script_interpreter_run (csi, argv[i]);
+ line = cairo_script_interpreter_get_line_number (csi);
+ status = cairo_script_interpreter_destroy (csi);
+ if (status) {
+ fprintf (stderr, "Error during replay of '%s', line %d: %d\n",
+ argv[i], line, status);
+ return 1;
+ }
+ }
+
+ return 0;
+}