summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/source/texk/dvipdfm-x/ChangeLog4
-rw-r--r--Build/source/texk/dvipdfm-x/cff.c15
-rw-r--r--Build/source/texk/dvipdfm-x/cff.h1
-rw-r--r--Build/source/texk/dvipdfm-x/pdfdev.c20
4 files changed, 26 insertions, 14 deletions
diff --git a/Build/source/texk/dvipdfm-x/ChangeLog b/Build/source/texk/dvipdfm-x/ChangeLog
index 1504839cfa5..77fb6a8fdf5 100644
--- a/Build/source/texk/dvipdfm-x/ChangeLog
+++ b/Build/source/texk/dvipdfm-x/ChangeLog
@@ -3,6 +3,10 @@
* tt_cmap.c (sfnt_get_glyphname, handle_subst_glyphs): Fix error on
glyph name lookup.
+ * cff.c (cff_glyph_lookup), pdfdev.c (pdf_dev_set_string): Correctly
+ handles the dvi file when Unicode to CID mapping file is specified,
+ where pdf_dev_set_string() got string of cids instead of glyphs.
+
2014-08-03 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
* pdfobj.c: Fix a typo in check_for_pdf().
diff --git a/Build/source/texk/dvipdfm-x/cff.c b/Build/source/texk/dvipdfm-x/cff.c
index 596b1cc4848..f122044b921 100644
--- a/Build/source/texk/dvipdfm-x/cff.c
+++ b/Build/source/texk/dvipdfm-x/cff.c
@@ -1054,23 +1054,24 @@ card16 cff_glyph_lookup (cff_font *cff, const char *glyph)
card16
cff_charsets_lookup (cff_font *cff, card16 cid)
{
- card16 gid = 0;
- cff_charsets *charset;
- card16 i;
-
if (cff->flag & (CHARSETS_ISOADOBE|CHARSETS_EXPERT|CHARSETS_EXPSUB)) {
ERROR("Predefined CFF charsets not supported yet");
} else if (cff->charsets == NULL) {
ERROR("Charsets data not available");
}
+ return cff_charsets_lookup_gid(cff->charsets, cid);
+}
+
+card16 cff_charsets_lookup_gid (cff_charsets *charset, card16 cid)
+{
+ card16 gid = 0;
+ card16 i;
+
if (cid == 0) {
return 0; /* GID 0 (.notdef) */
}
- charset = cff->charsets;
-
- gid = 0;
switch (charset->format) {
case 0:
for (i = 0; i <charset->num_entries; i++) {
diff --git a/Build/source/texk/dvipdfm-x/cff.h b/Build/source/texk/dvipdfm-x/cff.h
index 50d019df746..4339d02ab85 100644
--- a/Build/source/texk/dvipdfm-x/cff.h
+++ b/Build/source/texk/dvipdfm-x/cff.h
@@ -121,6 +121,7 @@ extern card16 cff_glyph_lookup (cff_font *cff, const char *glyph);
extern char* cff_get_glyphname (cff_font *cff, card16 gid);
/* Returns GID of glyph with SID/CID "cid" */
extern card16 cff_charsets_lookup (cff_font *cff, card16 cid);
+extern card16 cff_charsets_lookup_gid (cff_charsets *charset, card16 cid);
extern void cff_release_charsets (cff_charsets *charset);
/* Returns SID or CID */
extern card16 cff_charsets_lookup_inverse (cff_font *cff, card16 gid);
diff --git a/Build/source/texk/dvipdfm-x/pdfdev.c b/Build/source/texk/dvipdfm-x/pdfdev.c
index 6c2d1c5b4f3..2819a3e79af 100644
--- a/Build/source/texk/dvipdfm-x/pdfdev.c
+++ b/Build/source/texk/dvipdfm-x/pdfdev.c
@@ -1158,19 +1158,25 @@ pdf_dev_set_string (spt_t xpos, spt_t ypos,
length = instr_len;
if (font->format == PDF_FONTTYPE_COMPOSITE) {
- if (real_font->used_glyphs != NULL) {
- for (i = 0; i < length; i += 2)
- add_to_used_chars2(real_font->used_glyphs,
- (unsigned short) (str_ptr[i] << 8)|str_ptr[i+1]);
+ if (real_font->used_glyphs != NULL && ctype == -1) {
+ for (i = 0; i < length; i += 2) {
+ unsigned short gid = (str_ptr[i] << 8) | str_ptr[i + 1];
+ add_to_used_chars2(real_font->used_glyphs, gid);
+ }
}
if (handle_multibyte_string(font, &str_ptr, &length, ctype) < 0) {
ERROR("Error in converting input string...");
return;
}
if (real_font->used_chars != NULL) {
- for (i = 0; i < length; i += 2)
- add_to_used_chars2(real_font->used_chars,
- (unsigned short) (str_ptr[i] << 8)|str_ptr[i+1]);
+ for (i = 0; i < length; i += 2) {
+ unsigned short cid = (str_ptr[i] << 8) | str_ptr[i + 1];
+ if (ctype == 2 && font->cff_charsets) {
+ unsigned short gid = cff_charsets_lookup_gid(font->cff_charsets, cid);
+ add_to_used_chars2(real_font->used_glyphs, gid);
+ }
+ add_to_used_chars2(real_font->used_chars, cid);
+ }
}
} else {
if (real_font->used_chars != NULL) {