diff options
Diffstat (limited to 'util/cairo-script')
28 files changed, 82 insertions, 15 deletions
diff --git a/util/cairo-script/.gitignore b/util/cairo-script/.gitignore index 8ecaee3e5..8ecaee3e5 100755..100644 --- a/util/cairo-script/.gitignore +++ b/util/cairo-script/.gitignore diff --git a/util/cairo-script/COPYING b/util/cairo-script/COPYING index 66ad7840f..66ad7840f 100755..100644 --- a/util/cairo-script/COPYING +++ b/util/cairo-script/COPYING diff --git a/util/cairo-script/Makefile.am b/util/cairo-script/Makefile.am index d5c2998ac..d5c2998ac 100755..100644 --- a/util/cairo-script/Makefile.am +++ b/util/cairo-script/Makefile.am diff --git a/util/cairo-script/Makefile.sources b/util/cairo-script/Makefile.sources index fd73a17cf..fd73a17cf 100755..100644 --- a/util/cairo-script/Makefile.sources +++ b/util/cairo-script/Makefile.sources diff --git a/util/cairo-script/Makefile.win32 b/util/cairo-script/Makefile.win32 index 0aef981c1..0aef981c1 100755..100644 --- a/util/cairo-script/Makefile.win32 +++ b/util/cairo-script/Makefile.win32 diff --git a/util/cairo-script/cairo-script-file.c b/util/cairo-script/cairo-script-file.c index 85d292c47..0274a3e7c 100755..100644 --- a/util/cairo-script/cairo-script-file.c +++ b/util/cairo-script/cairo-script-file.c @@ -176,21 +176,21 @@ csi_file_new_from_string (csi_t *ctx, status = _csi_error (CAIRO_STATUS_NO_MEMORY); break; -#if HAVE_ZLIB case ZLIB: +#if HAVE_ZLIB if (uncompress ((Bytef *) tmp_str->string, &len, (Bytef *) src->string, src->len) != Z_OK) +#endif status = _csi_error (CAIRO_STATUS_NO_MEMORY); break; -#endif -#if HAVE_LZO case LZO: +#if HAVE_LZO if (lzo2a_decompress ((lzo_bytep) src->string, src->len, (lzo_bytep) tmp_str->string, &len, NULL)) +#endif status = _csi_error (CAIRO_STATUS_NO_MEMORY); break; -#endif } if (_csi_unlikely (status)) { csi_string_free (ctx, tmp_str); @@ -1063,7 +1063,6 @@ _csi_file_as_string (csi_t *ctx, unsigned int allocated; csi_status_t status; - len = 0; allocated = 16384; bytes = _csi_alloc (ctx, allocated); if (bytes == NULL) diff --git a/util/cairo-script/cairo-script-hash.c b/util/cairo-script/cairo-script-hash.c index 0a230e8d7..0a230e8d7 100755..100644 --- a/util/cairo-script/cairo-script-hash.c +++ b/util/cairo-script/cairo-script-hash.c diff --git a/util/cairo-script/cairo-script-interpreter.c b/util/cairo-script/cairo-script-interpreter.c index bdd525542..50170fc29 100755..100644 --- a/util/cairo-script/cairo-script-interpreter.c +++ b/util/cairo-script/cairo-script-interpreter.c @@ -634,7 +634,7 @@ cairo_script_interpreter_finish (csi_t *ctx) if (! ctx->finished) { _csi_finish (ctx); ctx->finished = 1; - } else if (status == CAIRO_STATUS_SUCCESS) { + } else if (status == CSI_STATUS_SUCCESS) { status = ctx->status = CSI_STATUS_INTERPRETER_FINISHED; } diff --git a/util/cairo-script/cairo-script-interpreter.h b/util/cairo-script/cairo-script-interpreter.h index 27fb98661..27fb98661 100755..100644 --- a/util/cairo-script/cairo-script-interpreter.h +++ b/util/cairo-script/cairo-script-interpreter.h diff --git a/util/cairo-script/cairo-script-objects.c b/util/cairo-script/cairo-script-objects.c index a625489b1..a625489b1 100755..100644 --- a/util/cairo-script/cairo-script-objects.c +++ b/util/cairo-script/cairo-script-objects.c diff --git a/util/cairo-script/cairo-script-operators.c b/util/cairo-script/cairo-script-operators.c index b14579c4a..d7cd203f5 100755..100644 --- a/util/cairo-script/cairo-script-operators.c +++ b/util/cairo-script/cairo-script-operators.c @@ -1769,28 +1769,28 @@ inflate_string (csi_t *ctx, csi_string_t *src) free (bytes); return NULL; -#if HAVE_ZLIB case ZLIB: +#if HAVE_ZLIB if (uncompress ((Bytef *) bytes, &len, (Bytef *) src->string, src->len) != Z_OK) +#endif { _csi_free (ctx, bytes); return NULL; } break; -#endif -#if HAVE_LZO case LZO: +#if HAVE_LZO if (lzo2a_decompress ((Bytef *) src->string, src->len, (Bytef *) bytes, &len, NULL)) +#endif { _csi_free (ctx, bytes); return NULL; } break; -#endif } bytes[len] = '\0'; @@ -1949,6 +1949,18 @@ _ft_create_for_pattern (csi_t *ctx, } pattern = FcNameParse (bytes); + if (!pattern) + { + /* Fontconfig's representation of charset changed mid 2014; + * We used to record charset before that. Remove everything + * after charset if that's present, and try again. */ + char *s = strstr ((char *) bytes, ":charset="); + if (s) + { + *s = '\0'; + pattern = FcNameParse (bytes); + } + } if (bytes != tmpl.bytes) _csi_free (ctx, bytes); @@ -2983,22 +2995,22 @@ err_decompress: cairo_surface_destroy (image); return _csi_error (CSI_STATUS_READ_ERROR); -#if HAVE_ZLIB case ZLIB: +#if HAVE_ZLIB if (uncompress ((Bytef *) data, &out, (Bytef *) s->string, s->len) != Z_OK) +#endif goto err_decompress; break; -#endif -#if HAVE_LZO case LZO: +#if HAVE_LZO if (lzo2a_decompress ((Bytef *) s->string, s->len, (Bytef *) data, &out, NULL)) +#endif goto err_decompress; break; -#endif } } else @@ -4866,6 +4878,30 @@ _set_device_offset (csi_t *ctx) } static csi_status_t +_set_device_scale (csi_t *ctx) +{ + csi_status_t status; + cairo_surface_t *surface; + double x, y; + + check (3); + + status = _csi_ostack_get_number (ctx, 0, &y); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_number (ctx, 1, &x); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 2, &surface); + if (_csi_unlikely (status)) + return status; + + cairo_surface_set_device_scale (surface, x, y); + pop (2); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t _set_extend (csi_t *ctx) { csi_status_t status; @@ -6146,6 +6182,29 @@ _surface (csi_t *ctx) } } + status = csi_name_new_static (ctx, &key, "device-scale"); + if (_csi_unlikely (status)) { + cairo_surface_destroy (surface); + return status; + } + if (csi_dictionary_has (dict, key.datum.name)) { + status = csi_dictionary_get (ctx, dict, key.datum.name, &obj); + if (_csi_unlikely (status)) + return status; + + if (csi_object_get_type (&obj) == CSI_OBJECT_TYPE_ARRAY) { + csi_array_t *array = obj.datum.array; + + if (array->stack.len == 2) { + cairo_surface_set_device_scale (surface, + csi_number_get_value + (&array->stack.objects[0]), + csi_number_get_value + (&array->stack.objects[1])); + } + } + } + obj.type = CSI_OBJECT_TYPE_SURFACE; obj.datum.surface = surface; pop (1); @@ -6582,6 +6641,7 @@ _defs[] = { { "set-antialias", _set_antialias }, { "set-dash", _set_dash }, { "set-device-offset", _set_device_offset }, + { "set-device-scale", _set_device_scale }, { "set-extend", _set_extend }, { "set-fallback-resolution", _set_fallback_resolution }, { "set-fill-rule", _set_fill_rule }, diff --git a/util/cairo-script/cairo-script-private.h b/util/cairo-script/cairo-script-private.h index 6bf41b4e5..6bf41b4e5 100755..100644 --- a/util/cairo-script/cairo-script-private.h +++ b/util/cairo-script/cairo-script-private.h diff --git a/util/cairo-script/cairo-script-scanner.c b/util/cairo-script/cairo-script-scanner.c index b9d445bb3..b9d445bb3 100755..100644 --- a/util/cairo-script/cairo-script-scanner.c +++ b/util/cairo-script/cairo-script-scanner.c diff --git a/util/cairo-script/cairo-script-stack.c b/util/cairo-script/cairo-script-stack.c index b1d146c52..b1d146c52 100755..100644 --- a/util/cairo-script/cairo-script-stack.c +++ b/util/cairo-script/cairo-script-stack.c diff --git a/util/cairo-script/csi-bind.c b/util/cairo-script/csi-bind.c index 91b58fb95..91b58fb95 100755..100644 --- a/util/cairo-script/csi-bind.c +++ b/util/cairo-script/csi-bind.c diff --git a/util/cairo-script/csi-exec.c b/util/cairo-script/csi-exec.c index d30b1c9c8..d30b1c9c8 100755..100644 --- a/util/cairo-script/csi-exec.c +++ b/util/cairo-script/csi-exec.c diff --git a/util/cairo-script/csi-replay.c b/util/cairo-script/csi-replay.c index 67fed3b33..67fed3b33 100755..100644 --- a/util/cairo-script/csi-replay.c +++ b/util/cairo-script/csi-replay.c diff --git a/util/cairo-script/csi-trace.c b/util/cairo-script/csi-trace.c index c57a56b18..a0466a35b 100755..100644 --- a/util/cairo-script/csi-trace.c +++ b/util/cairo-script/csi-trace.c @@ -2,6 +2,7 @@ #include <cairo-script-interpreter.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <libgen.h> @@ -22,11 +23,18 @@ main (int argc, char **argv) .surface_create = _script_surface_create, }; int i; + char buf[4096]; csi = cairo_script_interpreter_create (); for (i = 1; i < argc; i++) { - char buf[4096]; + if (strcmp (argv[i], "--version")) { + printf ("%s: version %s\n", argv[0], __DATE__); + exit (0); + } else if (strcmp (argv[i], "--help")) { + printf ("usage: %s < in > out\n", argv[0]); + exit (0); + } snprintf (buf, sizeof (buf), "%s.trace", basename (argv[i])); cairo_device_destroy (hooks.closure); diff --git a/util/cairo-script/examples/Makefile.am b/util/cairo-script/examples/Makefile.am index a87f02d9a..a87f02d9a 100755..100644 --- a/util/cairo-script/examples/Makefile.am +++ b/util/cairo-script/examples/Makefile.am diff --git a/util/cairo-script/examples/dragon.cs b/util/cairo-script/examples/dragon.cs index 1060ca699..1060ca699 100755..100644 --- a/util/cairo-script/examples/dragon.cs +++ b/util/cairo-script/examples/dragon.cs diff --git a/util/cairo-script/examples/hilbert.cs b/util/cairo-script/examples/hilbert.cs index 4278bf74c..4278bf74c 100755..100644 --- a/util/cairo-script/examples/hilbert.cs +++ b/util/cairo-script/examples/hilbert.cs diff --git a/util/cairo-script/examples/infinichess.cs b/util/cairo-script/examples/infinichess.cs index f82b10278..f82b10278 100755..100644 --- a/util/cairo-script/examples/infinichess.cs +++ b/util/cairo-script/examples/infinichess.cs diff --git a/util/cairo-script/examples/interference.cs b/util/cairo-script/examples/interference.cs index 6d2ee2200..6d2ee2200 100755..100644 --- a/util/cairo-script/examples/interference.cs +++ b/util/cairo-script/examples/interference.cs diff --git a/util/cairo-script/examples/pythagoras-tree.cs b/util/cairo-script/examples/pythagoras-tree.cs index 96b4b39bc..96b4b39bc 100755..100644 --- a/util/cairo-script/examples/pythagoras-tree.cs +++ b/util/cairo-script/examples/pythagoras-tree.cs diff --git a/util/cairo-script/examples/sierpinski.cs b/util/cairo-script/examples/sierpinski.cs index 6f959083b..6f959083b 100755..100644 --- a/util/cairo-script/examples/sierpinski.cs +++ b/util/cairo-script/examples/sierpinski.cs diff --git a/util/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs b/util/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs index 5aeb97f6e..5aeb97f6e 100755..100644 --- a/util/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs +++ b/util/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs diff --git a/util/cairo-script/examples/world-map.cs b/util/cairo-script/examples/world-map.cs index 54d9a8f31..54d9a8f31 100755..100644 --- a/util/cairo-script/examples/world-map.cs +++ b/util/cairo-script/examples/world-map.cs diff --git a/util/cairo-script/examples/zrusin.cs b/util/cairo-script/examples/zrusin.cs index 8efc24bbe..8efc24bbe 100755..100644 --- a/util/cairo-script/examples/zrusin.cs +++ b/util/cairo-script/examples/zrusin.cs |