From 8b2296b18b884432a4447885269482c4e111f919 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Fri, 10 Feb 2017 13:26:44 +0100 Subject: Make svg text output format a runtime option. --- source/fitz/svg-device.c | 120 +++++++++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 51 deletions(-) (limited to 'source/fitz/svg-device.c') diff --git a/source/fitz/svg-device.c b/source/fitz/svg-device.c index 3db68ada..c460df18 100644 --- a/source/fitz/svg-device.c +++ b/source/fitz/svg-device.c @@ -1,12 +1,6 @@ #include "fitz-imp.h" #include "glyph-cache-imp.h" -#ifdef SVG_TEXT_AS_TEXT -#define SVG_TEXT_ALPHA(A) A -#else -#define SVG_TEXT_ALPHA(A) 0 -#endif - typedef struct svg_device_s svg_device; typedef struct tile_s tile; @@ -47,6 +41,8 @@ struct svg_device_s { fz_device super; + int text_as_text; + fz_output *out; fz_output *out_store; fz_output *defs; @@ -598,19 +594,23 @@ svg_dev_fill_text(fz_context *ctx, fz_device *dev, const fz_text *text, const fz font *fnt; fz_text_span *span; - for (span = text->head; span; span = span->next) + if (sdev->text_as_text) { - fz_printf(ctx, out, "head; span; span = span->next) + { + fz_printf(ctx, out, "head; span; span = span->next) + else { - fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); - svg_dev_text_span_as_paths_fill(ctx, dev, span, ctm, colorspace, color, alpha, fnt); + for (span = text->head; span; span = span->next) + { + fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); + svg_dev_text_span_as_paths_fill(ctx, dev, span, ctm, colorspace, color, alpha, fnt); + } } -#endif } static void @@ -622,19 +622,23 @@ svg_dev_stroke_text(fz_context *ctx, fz_device *dev, const fz_text *text, const font *fnt; fz_text_span *span; - for (span = text->head; span; span = span->next) + if (sdev->text_as_text) { - fz_printf(ctx, out, "head; span; span = span->next) + { + fz_printf(ctx, out, "head; span; span = span->next) + else { - fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); - svg_dev_text_span_as_paths_stroke(ctx, dev, span, stroke, ctm, colorspace, color, alpha, fnt); + for (span = text->head; span; span = span->next) + { + fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); + svg_dev_text_span_as_paths_stroke(ctx, dev, span, stroke, ctm, colorspace, color, alpha, fnt); + } } -#endif } static void @@ -652,21 +656,26 @@ svg_dev_clip_text(fz_context *ctx, fz_device *dev, const fz_text *text, const fz fz_bound_text(ctx, text, NULL, ctm, &bounds); out = start_def(ctx, sdev); - fz_printf(ctx, out, "\n", - num, bounds.x0, bounds.y0, bounds.x1 - bounds.x0, bounds.y1 - bounds.y0); - for (span = text->head; span; span = span->next) + fz_printf(ctx, out, "\n"); + if (sdev->text_as_text) { - fz_printf(ctx, out, "head; span; span = span->next) + { + fz_printf(ctx, out, "head; span; span = span->next) + else { - fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); - svg_dev_text_span_as_paths_fill(ctx, dev, span, ctm, fz_device_rgb(ctx), white, 1.0f, fnt); + for (span = text->head; span; span = span->next) + { + fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); + svg_dev_text_span_as_paths_fill(ctx, dev, span, ctm, fz_device_rgb(ctx), white, 1.0f, fnt); + } } -#endif fz_printf(ctx, out, "\n"); out = end_def(ctx, sdev); fz_printf(ctx, out, "\n", num); @@ -687,22 +696,27 @@ svg_dev_clip_stroke_text(fz_context *ctx, fz_device *dev, const fz_text *text, c fz_bound_text(ctx, text, NULL, ctm, &bounds); out = start_def(ctx, sdev); - fz_printf(ctx, out, "\n", + fz_printf(ctx, out, "head; span; span = span->next) + fz_printf(ctx, out, " maskUnits=\"userSpaceOnUse\" maskContentUnits=\"userSpaceOnUse\">\n"); + if (sdev->text_as_text) { - fz_printf(ctx, out, "head; span; span = span->next) + { + fz_printf(ctx, out, "head; span; span = span->next) + else { - fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); - svg_dev_text_span_as_paths_stroke(ctx, dev, span, stroke, ctm, fz_device_rgb(ctx), white, 1.0f, fnt); + for (span = text->head; span; span = span->next) + { + fnt = svg_dev_text_span_as_paths_defs(ctx, dev, span, ctm); + svg_dev_text_span_as_paths_stroke(ctx, dev, span, stroke, ctm, fz_device_rgb(ctx), white, 1.0f, fnt); + } } -#endif fz_printf(ctx, out, "\n"); out = end_def(ctx, sdev); fz_printf(ctx, out, "\n", num); @@ -717,11 +731,14 @@ svg_dev_ignore_text(fz_context *ctx, fz_device *dev, const fz_text *text, const float black[3] = { 0, 0, 0}; - for (span = text->head; span; span = span->next) + if (sdev->text_as_text) { - fz_printf(ctx, out, "head; span; span = span->next) + { + fz_printf(ctx, out, "images); } -fz_device *fz_new_svg_device(fz_context *ctx, fz_output *out, float page_width, float page_height) +fz_device *fz_new_svg_device(fz_context *ctx, fz_output *out, float page_width, float page_height, int text_format) { svg_device *dev = fz_new_device(ctx, sizeof *dev); @@ -1196,6 +1213,7 @@ 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->text_as_text = (text_format == FZ_SVG_TEXT_AS_TEXT); fz_printf(ctx, out, "\n"); fz_printf(ctx, out, "\n"); -- cgit v1.2.3