summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Jamfile1
-rw-r--r--filter/jbig2d.c7
-rw-r--r--include/mupdf/rsrc.h5
-rw-r--r--mupdf/build.c14
-rw-r--r--mupdf/colorspace.c8
-rw-r--r--mupdf/fontfile.c3
-rw-r--r--mupdf/image.c2
-rw-r--r--object/simple.c2
-rw-r--r--render/pixmap.c16
-rw-r--r--render/render.c2
-rw-r--r--test/x11pdf.c4
-rw-r--r--tree/font.c1
12 files changed, 52 insertions, 13 deletions
diff --git a/Jamfile b/Jamfile
index 7f53cbe5..d7790384 100644
--- a/Jamfile
+++ b/Jamfile
@@ -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;