summaryrefslogtreecommitdiff
path: root/source/fitz/svg-device.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2017-07-26 15:58:33 +0200
committerTor Andersson <tor.andersson@artifex.com>2017-07-27 14:44:04 +0200
commit44cff76eb82cf11097e4e01348240e3556e22a7f (patch)
tree9289a3eea90f621846a6c31d0ae82bb6394a0789 /source/fitz/svg-device.c
parent1840cf480522ee03e22a0f36b76a85dde62c4c8f (diff)
downloadmupdf-44cff76eb82cf11097e4e01348240e3556e22a7f.tar.xz
Add fz_write_base64 function.
Diffstat (limited to 'source/fitz/svg-device.c')
-rw-r--r--source/fitz/svg-device.c46
1 files changed, 4 insertions, 42 deletions
diff --git a/source/fitz/svg-device.c b/source/fitz/svg-device.c
index 036c8563..4279761c 100644
--- a/source/fitz/svg-device.c
+++ b/source/fitz/svg-device.c
@@ -819,44 +819,6 @@ svg_dev_ignore_text(fz_context *ctx, fz_device *dev, const fz_text *text, const
}
}
-static void
-send_data_base64(fz_context *ctx, fz_output *out, fz_buffer *buffer)
-{
- size_t i, len;
- static const char set[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
- len = buffer->len/3;
- for (i = 0; i < len; i++)
- {
- int c = buffer->data[3*i];
- int d = buffer->data[3*i+1];
- int e = buffer->data[3*i+2];
- if ((i & 15) == 0)
- fz_write_printf(ctx, out, "\n");
- fz_write_printf(ctx, out, "%c%c%c%c", set[c>>2], set[((c&3)<<4)|(d>>4)], set[((d&15)<<2)|(e>>6)], set[e & 63]);
- }
- i *= 3;
- switch (buffer->len-i)
- {
- case 2:
- {
- int c = buffer->data[i];
- int d = buffer->data[i+1];
- fz_write_printf(ctx, out, "%c%c%c=", set[c>>2], set[((c&3)<<4)|(d>>4)], set[((d&15)<<2)]);
- break;
- }
- case 1:
- {
- int c = buffer->data[i];
- fz_write_printf(ctx, out, "%c%c==", set[c>>2], set[(c&3)<<4]);
- break;
- }
- default:
- case 0:
- break;
- }
-}
-
/* We spot repeated images, and send them just once using
* symbols. Unfortunately, for pathological files, such
* as the example in Bug695988, this can cause viewers to
@@ -904,14 +866,14 @@ svg_send_image(fz_context *ctx, svg_device *sdev, fz_image *img, const fz_color_
{
case FZ_IMAGE_PNG:
fz_write_printf(ctx, out, "image/png;base64,");
- send_data_base64(ctx, out, buffer->buffer);
+ fz_write_base64_buffer(ctx, out, buffer->buffer, 1);
break;
case FZ_IMAGE_JPEG:
/* SVG cannot cope with CMYK images */
if (img->colorspace != fz_device_cmyk(ctx))
{
fz_write_printf(ctx, out, "image/jpeg;base64,");
- send_data_base64(ctx, out, buffer->buffer);
+ fz_write_base64_buffer(ctx, out, buffer->buffer, 1);
break;
}
/*@fallthough@*/
@@ -919,7 +881,7 @@ svg_send_image(fz_context *ctx, svg_device *sdev, fz_image *img, const fz_color_
{
fz_buffer *buf = fz_new_buffer_from_image_as_png(ctx, img, color_params);
fz_write_printf(ctx, out, "image/png;base64,");
- send_data_base64(ctx, out, buf);
+ fz_write_base64_buffer(ctx, out, buf, 1);
fz_drop_buffer(ctx, buf);
break;
}
@@ -990,7 +952,7 @@ svg_dev_fill_shade(fz_context *ctx, fz_device *dev, fz_shade *shade, const fz_ma
if (alpha != 1.0f)
fz_write_printf(ctx, out, "<g opacity=\"%g\">\n", alpha);
fz_write_printf(ctx, out, "<image x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" xlink:href=\"data:image/png;base64,", pix->x, pix->y, pix->w, pix->h);
- send_data_base64(ctx, out, buf);
+ fz_write_base64_buffer(ctx, out, buf, 1);
fz_write_printf(ctx, out, "\"/>\n");
if (alpha != 1.0f)
fz_write_printf(ctx, out, "</g>\n");