static void svg_dev_clip_text(fz_device *dev, fz_text *text, const fz_matrix *ctm, int accumulate) { svg_device *sdev = dev->user; fz_output *out = sdev->out; fz_context *ctx = dev->ctx; fz_rect bounds; int num = sdev->id++; float white[3] = { 1, 1, 1 }; font *fnt; fz_bound_text(ctx, text, NULL, ctm, &bounds); out = start_def(sdev); fz_printf(out, "<mask id=\"ma%d\" x=\"%g\" y=\"%g\" width=\"%g\" height=\"%g\" maskUnits=\"userSpaceOnUse\" maskContentUnits=\"userSpaceOnUse\">\n", num, bounds.x0, bounds.y0, bounds.x1 - bounds.x0, bounds.y1 - bounds.y0); fz_printf(out, "<text"); svg_dev_fill_color(sdev, fz_device_rgb(ctx), white, 0.0f); svg_dev_text(sdev, ctm, text); fnt = svg_dev_text_as_paths_defs(dev, text, ctm); svg_dev_text_as_paths_fill(dev, text, ctm, fz_device_rgb(ctx), white, 1.0f, fnt); fz_printf(out, "</mask>\n"); out = end_def(sdev); fz_printf(out, "<g mask=\"url(#ma%d)\">\n", num); }
static void svg_dev_clip_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm) { svg_device *sdev = (svg_device*)dev; fz_output *out; fz_rect bounds; int num = sdev->id++; float white[3] = { 255, 255, 255 }; font *fnt; fz_text_span *span; fz_bound_text(ctx, text, NULL, ctm, &bounds); out = start_def(ctx, sdev); fz_printf(ctx, out, "<mask id=\"ma%d\" x=\"%g\" y=\"%g\" width=\"%g\" height=\"%g\" maskUnits=\"userSpaceOnUse\" maskContentUnits=\"userSpaceOnUse\">\n", num, bounds.x0, bounds.y0, bounds.x1 - bounds.x0, bounds.y1 - bounds.y0); fz_printf(ctx, out, "<text"); svg_dev_stroke_state(ctx, sdev, stroke, &fz_identity); svg_dev_stroke_color(ctx, sdev, fz_device_rgb(ctx), white, 0.0f); svg_dev_text(ctx, sdev, ctm, text); 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); } fz_printf(ctx, out, "</mask>\n"); out = end_def(ctx, sdev); fz_printf(ctx, out, "<g mask=\"url(#ma%d)\">\n", num); }
static void svg_dev_fill_text(fz_device *dev, fz_text *text, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { svg_device *sdev = dev->user; fz_output *out = sdev->out; fz_printf(out, "<text"); svg_dev_fill_color(sdev, colorspace, color, alpha); svg_dev_text(sdev, ctm, text); }
static void svg_dev_ignore_text(fz_device *dev, fz_text *text, const fz_matrix *ctm) { svg_device *sdev = dev->user; fz_output *out = sdev->out; float black[3] = { 0, 0, 0}; fz_printf(out, "<text"); svg_dev_fill_color(sdev, fz_device_rgb(sdev->ctx), black, 0.0f); svg_dev_text(sdev, ctm, text); }
static void svg_dev_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { svg_device *sdev = dev->user; fz_output *out = sdev->out; font *fnt; fz_printf(out, "<text"); svg_dev_fill_color(sdev, colorspace, color, 0.0f); svg_dev_text(sdev, ctm, text); fnt = svg_dev_text_as_paths_defs(dev, text, ctm); svg_dev_text_as_paths_stroke(dev, text, stroke, ctm, colorspace, color, alpha, fnt); }
static void svg_dev_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { svg_device *sdev = (svg_device*)dev; fz_output *out = sdev->out; font *fnt; fz_text_span *span; fz_printf(ctx, out, "<text"); svg_dev_fill_color(ctx, sdev, colorspace, color, 0.0f); svg_dev_text(ctx, sdev, ctm, text); 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); } }
static void svg_dev_clip_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm) { svg_device *sdev = dev->user; fz_output *out = sdev->out; fz_context *ctx = dev->ctx; fz_rect bounds; int num = sdev->id++; float white[3] = { 255, 255, 255 }; fz_bound_text(ctx, text, NULL, ctm, &bounds); fz_printf(out, "<mask id=\"ma%d\" x=\"%g\" y=\"%g\" width=\"%g\" height=\"%g\" maskUnits=\"userSpaceOnUse\" maskContentUnits=\"userSpaceOnUse\">\n", num, bounds.x0, bounds.y0, bounds.x1 - bounds.x0, bounds.y1 - bounds.y0); fz_printf(out, "<text"); svg_dev_stroke_state(sdev, stroke); svg_dev_stroke_color(sdev, fz_device_rgb(ctx), white, 1.0f); svg_dev_text(sdev, ctm, text); fz_printf(out, "</mask>\n<g mask=\"url(#ma%d)\">\n", num); }