summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mupdf/fitz/output-svg.h4
-rw-r--r--source/fitz/output-svg.c3
-rw-r--r--source/fitz/svg-device.c9
-rw-r--r--source/tools/mudraw.c2
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)