diff options
-rw-r--r-- | Jamfile | 1 | ||||
-rw-r--r-- | filter/jbig2d.c | 7 | ||||
-rw-r--r-- | include/mupdf/rsrc.h | 5 | ||||
-rw-r--r-- | mupdf/build.c | 14 | ||||
-rw-r--r-- | mupdf/colorspace.c | 8 | ||||
-rw-r--r-- | mupdf/fontfile.c | 3 | ||||
-rw-r--r-- | mupdf/image.c | 2 | ||||
-rw-r--r-- | object/simple.c | 2 | ||||
-rw-r--r-- | render/pixmap.c | 16 | ||||
-rw-r--r-- | render/render.c | 2 | ||||
-rw-r--r-- | test/x11pdf.c | 4 | ||||
-rw-r--r-- | tree/font.c | 1 |
12 files changed, 52 insertions, 13 deletions
@@ -161,7 +161,6 @@ Library libfonts : ; LINKLIBS = - -lfontconfig -lfreetype -ljbig2dec -ljasper diff --git a/filter/jbig2d.c b/filter/jbig2d.c index 5d762d2f..d5922804 100644 --- a/filter/jbig2d.c +++ b/filter/jbig2d.c @@ -72,6 +72,7 @@ fz_processjbig2d(fz_filter *filter, fz_buffer *in, fz_buffer *out) { fz_jbig2d *d = (fz_jbig2d*)filter; int len; + int i; while (1) { @@ -90,7 +91,11 @@ fz_processjbig2d(fz_filter *filter, fz_buffer *in, fz_buffer *out) len = out->ep - out->wp; if (d->idx + len > d->page->height * d->page->stride) len = d->page->height * d->page->stride - d->idx; - memcpy(out->wp, d->page->data + d->idx, len); + + // memcpy(out->wp, d->page->data + d->idx, len); + for (i = 0; i < len; i++) + out->wp[i] = ~ d->page->data[d->idx + i]; + out->wp += len; d->idx += len; diff --git a/include/mupdf/rsrc.h b/include/mupdf/rsrc.h index 5c9c73be..30a059b1 100644 --- a/include/mupdf/rsrc.h +++ b/include/mupdf/rsrc.h @@ -123,6 +123,11 @@ struct pdf_font_s int ncidtogid; unsigned short *cidtogid; + /* ToUnicode */ + fz_cmap *tounicode; + int ncidtoucs; + unsigned short *cidtoucs; + /* Freetype */ int substitute; void *ftface; diff --git a/mupdf/build.c b/mupdf/build.c index cd6fc92b..01a7c653 100644 --- a/mupdf/build.c +++ b/mupdf/build.c @@ -525,8 +525,12 @@ pdf_flushtext(pdf_csi *csi) pdf_gstate *gstate = csi->gstate + csi->gtop; fz_error *error; -if (gstate->render != 0) -fz_warn("unimplemented text render mode: %d", gstate->render); + /* invisible */ + if (gstate->render == 3) + return nil; + + else if (gstate->render != 0) + fz_warn("unimplemented text render mode: %d", gstate->render); if (csi->text) { @@ -545,7 +549,7 @@ showglyph(pdf_csi *csi, int cid) pdf_gstate *gstate = csi->gstate + csi->gtop; pdf_font *font = gstate->font; fz_error *error; - fz_matrix tsm, trm, tm; + fz_matrix tsm, trm; float w0, w1, tx, ty; fz_hmtx h; fz_vmtx v; @@ -557,8 +561,6 @@ showglyph(pdf_csi *csi, int cid) tsm.e = 0; tsm.f = gstate->rise; - tm = csi->tm; - if (font->super.wmode == 1) { v = fz_getvmtx((fz_font*)font, cid); @@ -566,7 +568,7 @@ showglyph(pdf_csi *csi, int cid) tsm.f -= v.y * gstate->size / 1000.0; } - trm = fz_concat(tsm, tm); + trm = fz_concat(tsm, csi->tm); /* flush buffered text if face or matrix has changed */ if (!csi->text || diff --git a/mupdf/colorspace.c b/mupdf/colorspace.c index 917e3237..eed3cc1d 100644 --- a/mupdf/colorspace.c +++ b/mupdf/colorspace.c @@ -734,10 +734,18 @@ printf("\n"); if (fz_isname(name)) { if (!strcmp(fz_toname(name), "CalGray")) + { + *csp = pdf_devicegray; + return nil; return loadcalgray(csp, xref, fz_arrayget(obj, 1)); + } if (!strcmp(fz_toname(name), "CalRGB")) + { + *csp = pdf_devicergb; + return nil; return loadcalrgb(csp, xref, fz_arrayget(obj, 1)); + } if (!strcmp(fz_toname(name), "CalCMYK")) { diff --git a/mupdf/fontfile.c b/mupdf/fontfile.c index e1997f7e..e5e154da 100644 --- a/mupdf/fontfile.c +++ b/mupdf/fontfile.c @@ -138,6 +138,9 @@ printf(" load system cid font '%s'\n", filename); strlcat(path, filename, sizeof path); strlcat(path, ".cid.cff", sizeof path); + if (access(path, R_OK)) + return fz_throw("ioerror: could not access file '%s'", path); + e = FT_New_Face(ftlib, path, 0, (FT_Face*)&font->ftface); if (e) return fz_throw("freetype: could not load font: 0x%x", e); diff --git a/mupdf/image.c b/mupdf/image.c index bcffda71..f280be89 100644 --- a/mupdf/image.c +++ b/mupdf/image.c @@ -38,7 +38,7 @@ static void loadtile1a(pdf_image *src, fz_pixmap *dst, int n) unsigned char *d = dst->samples + y * dst->w * dst->n; for (x = dst->x; x < dst->x + dst->w; x++) { - d[x * (n+1) + 0] = 255; + d[x * (n+1) + 0] = 1; for (k = 0; k < n; k++) d[x * (n+1) + k + 1] = getbit(s, x * n + k); } diff --git a/object/simple.c b/object/simple.c index 953dcfa7..9f645c89 100644 --- a/object/simple.c +++ b/object/simple.c @@ -170,6 +170,8 @@ fz_toint(fz_obj *obj) { if (fz_isint(obj)) return obj->u.i; + if (fz_isreal(obj)) + return obj->u.f; return 0; } diff --git a/render/pixmap.c b/render/pixmap.c index ed64769f..a9287ea8 100644 --- a/render/pixmap.c +++ b/render/pixmap.c @@ -21,8 +21,6 @@ fz_newpixmap(fz_pixmap **pixp, int x, int y, int w, int h, int n) return fz_outofmem; } - memset(pix->samples, 0, pix->w * pix->h * pix->n * sizeof(fz_sample)); - return nil; } @@ -195,6 +193,20 @@ fz_debugpixmap(fz_pixmap *pix) fclose(pgm); } + else if (pix->n == 2) + { + int x, y; + FILE *pgm = fopen("out.pgm", "w"); + fprintf(pgm, "P5\n%d %d\n255\n", pix->w, pix->h); + + for (y = 0; y < pix->h; y++) + for (x = 0; x < pix->w; x++) + { + putc(pix->samples[y * pix->w * 2 + x * 2 + 1], pgm); + } + fclose(pgm); + } + else if (pix->n == 1) { FILE *pgm = fopen("out.pgm", "w"); diff --git a/render/render.c b/render/render.c index e1e0e04d..ad42bdbe 100644 --- a/render/render.c +++ b/render/render.c @@ -26,7 +26,7 @@ fz_newrenderer(fz_renderer **gcp, fz_colorspace *processcolormodel) gc->tmp = nil; gc->acc = nil; - error = fz_newglyphcache(&gc->cache, 1024, 65536); + error = fz_newglyphcache(&gc->cache, 4096, 256 * 1024); if (error) goto cleanup; diff --git a/test/x11pdf.c b/test/x11pdf.c index 4784f220..0d52ff41 100644 --- a/test/x11pdf.c +++ b/test/x11pdf.c @@ -222,6 +222,10 @@ static void handlekey(int c) switch (c) { + case '8': + fz_debugglyphcache(rast->cache); + break; + case 'b': pageno--; if (pageno < 1) diff --git a/tree/font.c b/tree/font.c index 28045f5d..16626651 100644 --- a/tree/font.c +++ b/tree/font.c @@ -39,7 +39,6 @@ fz_setfontwmode(fz_font *font, int wmode) void fz_setfontbbox(fz_font *font, int xmin, int ymin, int xmax, int ymax) { -printf(" bbox [%d %d %d %d]\n", xmin, ymin, xmax, ymax); font->bbox.min.x = xmin; font->bbox.min.y = ymin; font->bbox.max.x = xmax; |