static void put_string(fz_context *ctx, fz_output *out, const unsigned char *str, int len) { int i; for (i = 0; i < len; ++i) if (str[i] < 32 || str[i] >= 127) break; if (i < len) { fz_printf(ctx, out, "<"); for (i = 0; i < len; ++i) fz_printf(ctx, out, "%02x", str[i]); fz_printf(ctx, out, ">"); } else { fz_printf(ctx, out, "("); for (i = 0; i < len; ++i) { unsigned char c = str[i]; if (c == '(' || c == ')' || c == '\\') fz_putc(ctx, out, '\\'); fz_putc(ctx, out, c); } fz_printf(ctx, out, ")"); } }
static void emit_indent (fz_context *ctx, emitter *e) { for (unsigned i= 0; i < e->indent_level * 4; ++i) fz_putc (ctx, e->out, ' '); }
static void pdf_out_BI(fz_context *ctx, pdf_processor *proc, fz_image *img) { fz_output *out = ((pdf_output_processor*)proc)->out; int ahx = ((pdf_output_processor*)proc)->ahxencode; fz_compressed_buffer *cbuf; fz_buffer *buf; int i; if (img == NULL) return; cbuf = fz_compressed_image_buffer(ctx, img); if (cbuf == NULL) return; buf = cbuf->buffer; if (buf == NULL) return; fz_printf(ctx, out, "BI\n"); fz_printf(ctx, out, "/W %d\n", img->w); fz_printf(ctx, out, "/H %d\n", img->h); fz_printf(ctx, out, "/BPC %d\n", img->bpc); if (img->imagemask) fz_printf(ctx, out, "/IM true\n"); else if (img->colorspace == fz_device_gray(ctx)) fz_printf(ctx, out, "/CS/G\n"); else if (img->colorspace == fz_device_rgb(ctx)) fz_printf(ctx, out, "/CS/RGB\n"); else if (img->colorspace == fz_device_cmyk(ctx)) fz_printf(ctx, out, "/CS/CMYK\n"); else if (fz_colorspace_is_indexed(ctx, img->colorspace)) fz_printf(ctx, out, "/CS/I\n"); if (img->interpolate) fz_printf(ctx, out, "/I true\n"); fz_printf(ctx, out, "/D["); for (i = 0; i < img->n * 2; ++i) { if (i > 0) fz_putc(ctx, out, ' '); fz_printf(ctx, out, "%g", img->decode[i]); } fz_printf(ctx, out, "]\n"); switch (cbuf->params.type) { default: fz_throw(ctx, FZ_ERROR_GENERIC, "unknown compressed buffer type"); break; case FZ_IMAGE_JPEG: fz_printf(ctx, out, ahx ? "/F[/AHx/DCT]\n" : "/F/DCT\n"); if (cbuf->params.u.jpeg.color_transform != -1) fz_printf(ctx, out, "/DP<</ColorTransform %d>>\n", cbuf->params.u.jpeg.color_transform); break; case FZ_IMAGE_FAX: fz_printf(ctx, out, ahx ? "/F[/AHx/CCF]\n/DP[null<<\n" : "/F/CCF\n/DP<<\n"); fz_printf(ctx, out, "/K %d\n", cbuf->params.u.fax.k); if (cbuf->params.u.fax.columns != 1728) fz_printf(ctx, out, "/Columns %d\n", cbuf->params.u.fax.columns); if (cbuf->params.u.fax.rows > 0) fz_printf(ctx, out, "/Rows %d\n", cbuf->params.u.fax.rows); if (cbuf->params.u.fax.end_of_line) fz_printf(ctx, out, "/EndOfLine true\n"); if (cbuf->params.u.fax.encoded_byte_align) fz_printf(ctx, out, "/EncodedByteAlign true\n"); if (!cbuf->params.u.fax.end_of_block) fz_printf(ctx, out, "/EndOfBlock false\n"); if (cbuf->params.u.fax.black_is_1) fz_printf(ctx, out, "/BlackIs1 true\n"); if (cbuf->params.u.fax.damaged_rows_before_error > 0) fz_printf(ctx, out, "/DamagedRowsBeforeError %d\n", cbuf->params.u.fax.damaged_rows_before_error); fz_printf(ctx, out, ahx ? ">>]\n" : ">>\n"); break; case FZ_IMAGE_RAW: if (ahx) fz_printf(ctx, out, "/F/AHx\n"); break; case FZ_IMAGE_RLD: fz_printf(ctx, out, ahx ? "/F[/AHx/RL]\n" : "/F/RL\n"); break; case FZ_IMAGE_FLATE: fz_printf(ctx, out, ahx ? "/F[/AHx/Fl]\n" : "/F/Fl\n"); if (cbuf->params.u.flate.predictor > 1) { fz_printf(ctx, out, ahx ? "/DP[null<<\n" : "/DP<<\n"); fz_printf(ctx, out, "/Predictor %d\n", cbuf->params.u.flate.predictor); if (cbuf->params.u.flate.columns != 1) fz_printf(ctx, out, "/Columns %d\n", cbuf->params.u.flate.columns); if (cbuf->params.u.flate.colors != 1) fz_printf(ctx, out, "/Colors %d\n", cbuf->params.u.flate.colors); if (cbuf->params.u.flate.bpc != 8) fz_printf(ctx, out, "/BitsPerComponent %d\n", cbuf->params.u.flate.bpc); fz_printf(ctx, out, ahx ? ">>]\n" : ">>\n"); } break; case FZ_IMAGE_LZW: fz_printf(ctx, out, ahx ? "/F[/AHx/LZW]\n" : "/F/LZW\n"); if (cbuf->params.u.lzw.predictor > 1) { fz_printf(ctx, out, ahx ? "/DP[<<null\n" : "/DP<<\n"); fz_printf(ctx, out, "/Predictor %d\n", cbuf->params.u.lzw.predictor); if (cbuf->params.u.lzw.columns != 1) fz_printf(ctx, out, "/Columns %d\n", cbuf->params.u.lzw.columns); if (cbuf->params.u.lzw.colors != 1) fz_printf(ctx, out, "/Colors %d\n", cbuf->params.u.lzw.colors); if (cbuf->params.u.lzw.bpc != 8) fz_printf(ctx, out, "/BitsPerComponent %d\n", cbuf->params.u.lzw.bpc); if (cbuf->params.u.lzw.early_change != 1) fz_printf(ctx, out, "/EarlyChange %d\n", cbuf->params.u.lzw.early_change); fz_printf(ctx, out, ahx ? ">>]\n" : ">>\n"); } break; } fz_printf(ctx, out, "ID\n"); if (ahx) { size_t z; for (z = 0; z < buf->len; ++z) { int c = buf->data[z]; fz_putc(ctx, out, "0123456789abcdef"[(c >> 4) & 0xf]); fz_putc(ctx, out, "0123456789abcdef"[c & 0xf]); if ((z & 31) == 31) fz_putc(ctx, out, '\n'); } fz_putc(ctx, out, '>'); } else {