From 2ec725624d637789845478a90f799e9eeb54f9ee Mon Sep 17 00:00:00 2001
From: Tor Andersson <tor@ghostscript.com>
Date: Thu, 11 Nov 2004 03:17:34 +0100
Subject: various fixes

---
 Jamfile              |  1 -
 filter/jbig2d.c      |  7 ++++++-
 include/mupdf/rsrc.h |  5 +++++
 mupdf/build.c        | 14 ++++++++------
 mupdf/colorspace.c   |  8 ++++++++
 mupdf/fontfile.c     |  3 +++
 mupdf/image.c        |  2 +-
 object/simple.c      |  2 ++
 render/pixmap.c      | 16 ++++++++++++++--
 render/render.c      |  2 +-
 test/x11pdf.c        |  4 ++++
 tree/font.c          |  1 -
 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;
-- 
cgit v1.2.3