aboutsummaryrefslogtreecommitdiff
path: root/print/ghostscript7-base/files/patch-src_gdevpdfs.c
blob: 0378f15c88abea246a194f47bd399a0ec184a1d5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
--- src/gdevpdfs.c.org	2003-09-20 00:11:16.000000000 +0900
+++ src/gdevpdfs.c	2003-09-25 17:44:10.000000000 +0900
@@ -481,15 +481,21 @@
 
 	    if (cid < pfd->chars_count) {
 		int index = cid >> 3, mask = 0x80 >> (cid & 7);
+		int gid;
+
+		if (!(pfd->chars_used.data[index] & mask) ||
+		    !(psubf->widths_known[index] & mask)) {
 
-		if (!(pfd->chars_used.data[index] & mask)) {
-		    pfd->chars_used.data[index] |= mask;
 		    if (psubf->CIDToGIDMap) {
 			gs_font_cid2 *const subfont2 =
 			    (gs_font_cid2 *)subfont;
-			int gid =
-			    subfont2->cidata.CIDMap_proc(subfont2, glyph);
 
+			gid = subfont2->cidata.CIDMap_proc(subfont2, glyph);
+		    }
+		}
+		if (!(pfd->chars_used.data[index] & mask)) {
+		    pfd->chars_used.data[index] |= mask;
+		    if (psubf->CIDToGIDMap) {
 			if (gid >= 0) {
 			    psubf->CIDToGIDMap[cid] = gid;
 			    mark_glyphs_used(subfont, gid + gs_min_cid_glyph,
@@ -500,7 +506,11 @@
 		if (!(psubf->widths_known[index] & mask)) {
 		    int width;
 
-		    code = pdf_glyph_width(psubf, glyph, subfont, &width);
+		    if (psubf->CIDToGIDMap)
+			code = pdf_glyph_width(psubf, gid + gs_min_cid_glyph,
+					       subfont, &width);
+		    else
+		        code = pdf_glyph_width(psubf, glyph, subfont, &width);
 		    if (code == 0) {
 			psubf->Widths[cid] = width;
 			psubf->widths_known[index] |= mask;