diff options
-rw-r--r-- | include/mupdf/fitz/output-svg.h | 4 | ||||
-rw-r--r-- | source/fitz/output-svg.c | 3 | ||||
-rw-r--r-- | source/fitz/svg-device.c | 9 | ||||
-rw-r--r-- | source/tools/mudraw.c | 2 |
4 files changed, 13 insertions, 5 deletions
diff --git a/include/mupdf/fitz/output-svg.h b/include/mupdf/fitz/output-svg.h index 16e2102b..4189feab 100644 --- a/include/mupdf/fitz/output-svg.h +++ b/include/mupdf/fitz/output-svg.h @@ -24,7 +24,9 @@ enum { FZ_SVG_TEXT_AS_PATH: As <path> elements with exact visual appearance. reuse_images: Share image resources using <symbol> definitions. + + id: Optional in-out ID parameter to keep generated IDs unique across SVG files. */ -fz_device *fz_new_svg_device(fz_context *ctx, fz_output *out, float page_width, float page_height, int text_format, int reuse_images); +fz_device *fz_new_svg_device(fz_context *ctx, fz_output *out, float page_width, float page_height, int text_format, int reuse_images, int *id); #endif diff --git a/source/fitz/output-svg.c b/source/fitz/output-svg.c index 92d158e9..c5215775 100644 --- a/source/fitz/output-svg.c +++ b/source/fitz/output-svg.c @@ -16,6 +16,7 @@ struct fz_svg_writer_s fz_output *out; int text_format; int reuse_images; + int id; }; const char *fz_svg_write_options_usage = @@ -39,7 +40,7 @@ svg_begin_page(fz_context *ctx, fz_document_writer *wri_, fz_rect mediabox) fz_format_output_path(ctx, path, sizeof path, wri->path, wri->count); wri->out = fz_new_output_with_path(ctx, path, 0); - return fz_new_svg_device(ctx, wri->out, w, h, wri->text_format, wri->reuse_images); + return fz_new_svg_device(ctx, wri->out, w, h, wri->text_format, wri->reuse_images, &wri->id); } static void diff --git a/source/fitz/svg-device.c b/source/fitz/svg-device.c index d0d9f50e..7d2c7ee3 100644 --- a/source/fitz/svg-device.c +++ b/source/fitz/svg-device.c @@ -53,6 +53,7 @@ struct svg_device_s fz_buffer *defs_buffer; int def_count; + int *save_id; int id; int num_tiles; @@ -1196,6 +1197,9 @@ svg_dev_close_device(fz_context *ctx, fz_device *dev) sdev->layers--; } + if (sdev->save_id) + *sdev->save_id = sdev->id; + fz_write_printf(ctx, out, "</svg>\n"); } @@ -1221,7 +1225,7 @@ svg_dev_drop_device(fz_context *ctx, fz_device *dev) fz_free(ctx, sdev->images); } -fz_device *fz_new_svg_device(fz_context *ctx, fz_output *out, float page_width, float page_height, int text_format, int reuse_images) +fz_device *fz_new_svg_device(fz_context *ctx, fz_output *out, float page_width, float page_height, int text_format, int reuse_images, int *id) { svg_device *dev = fz_new_derived_device(ctx, svg_device); @@ -1261,7 +1265,8 @@ fz_device *fz_new_svg_device(fz_context *ctx, fz_output *out, float page_width, dev->out = out; dev->out_store = out; - dev->id = 0; + dev->save_id = id; + dev->id = id ? *id : 0; dev->layers = 0; dev->text_as_text = (text_format == FZ_SVG_TEXT_AS_TEXT); dev->reuse_images = reuse_images; diff --git a/source/tools/mudraw.c b/source/tools/mudraw.c index ecf45ae4..720deeb7 100644 --- a/source/tools/mudraw.c +++ b/source/tools/mudraw.c @@ -683,7 +683,7 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in out = fz_new_output_with_path(ctx, buf, 0); } - dev = fz_new_svg_device(ctx, out, tbounds.x1-tbounds.x0, tbounds.y1-tbounds.y0, FZ_SVG_TEXT_AS_PATH, 1); + dev = fz_new_svg_device(ctx, out, tbounds.x1-tbounds.x0, tbounds.y1-tbounds.y0, FZ_SVG_TEXT_AS_PATH, 1, NULL); if (lowmemory) fz_enable_device_hints(ctx, dev, FZ_NO_CACHE); if (list) |