From 7a68d8bfb3588cb1a71c122bf09fcee3f45100c1 Mon Sep 17 00:00:00 2001 From: Peter Breitenlohner Date: Tue, 21 Apr 2015 07:06:03 +0000 Subject: texk/dvipdfm-x: Fixed a dfont bug, from Akira git-svn-id: svn://tug.org/texlive/trunk@36978 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/dvipdfm-x/ChangeLog | 5 +++++ Build/source/texk/dvipdfm-x/dvi.c | 16 +++++++++++----- Build/source/texk/dvipdfm-x/tt_cmap.c | 16 +++++++++------- 3 files changed, 25 insertions(+), 12 deletions(-) (limited to 'Build') diff --git a/Build/source/texk/dvipdfm-x/ChangeLog b/Build/source/texk/dvipdfm-x/ChangeLog index bb72892d19f..22603862204 100644 --- a/Build/source/texk/dvipdfm-x/ChangeLog +++ b/Build/source/texk/dvipdfm-x/ChangeLog @@ -1,3 +1,8 @@ +2015-04-21 Peter Breitenlohner + + * dvi.c, tt_cmap.c: Fixed a dfont bug, from Akira, + bug found by Dohyun Kim . + 2015-04-19 Shunsaku Hirata * pngimage.c: Ask libpng to do gamma correction with assumed diff --git a/Build/source/texk/dvipdfm-x/dvi.c b/Build/source/texk/dvipdfm-x/dvi.c index 21196544235..6c028b2815f 100644 --- a/Build/source/texk/dvipdfm-x/dvi.c +++ b/Build/source/texk/dvipdfm-x/dvi.c @@ -929,16 +929,17 @@ dvi_locate_native_font (const char *filename, uint32_t index, struct tt_head_table *head; struct tt_maxp_table *maxp; struct tt_hhea_table *hhea; + int is_dfont = 0; if (verbose) MESG("<%s@%.2fpt", filename, ptsize * dvi2pts); - if ((fp = fopen(filename, "rb")) != NULL) - path = strdup(filename); + if ((path = dpx_find_dfont_file(filename)) != NULL && + (fp = fopen(path, "rb")) != NULL) + is_dfont = 1; else if (((path = dpx_find_opentype_file(filename)) == NULL && (path = dpx_find_truetype_file(filename)) == NULL - && (path = dpx_find_type1_file(filename)) == NULL - && (path = dpx_find_dfont_file(filename)) == NULL) + && (path = dpx_find_type1_file(filename)) == NULL) || (fp = fopen(path, "rb")) == NULL) { ERROR("Cannot proceed without the font: %s", filename); } @@ -962,9 +963,14 @@ dvi_locate_native_font (const char *filename, uint32_t index, loaded_fonts[cur_id].type = NATIVE; free(fontmap_key); - sfont = sfnt_open(fp); + if (is_dfont) + sfont = dfont_open(fp, index); + else + sfont = sfnt_open(fp); if (sfont->type == SFNT_TYPE_TTC) offset = ttc_read_offset(sfont, index); + else if (sfont->type == SFNT_TYPE_DFONT) + offset = sfont->offset; sfnt_read_table_directory(sfont, offset); head = tt_read_head_table(sfont); maxp = tt_read_maxp_table(sfont); diff --git a/Build/source/texk/dvipdfm-x/tt_cmap.c b/Build/source/texk/dvipdfm-x/tt_cmap.c index e2602319c14..8a8d9ec52d9 100644 --- a/Build/source/texk/dvipdfm-x/tt_cmap.c +++ b/Build/source/texk/dvipdfm-x/tt_cmap.c @@ -1208,23 +1208,25 @@ otf_create_ToUnicode_stream (const char *font_name, MESG("otf_cmap>> Creating ToUnicode CMap for \"%s\"...\n", font_name); } - fp = DPXFOPEN(font_name, DPX_RES_TYPE_TTFONT); - if (!fp) { - fp = DPXFOPEN(font_name, DPX_RES_TYPE_OTFONT); - } - if (!fp) { + if ((fp = DPXFOPEN(font_name, DPX_RES_TYPE_TTFONT)) || + (fp = DPXFOPEN(font_name, DPX_RES_TYPE_OTFONT))) { + sfont = sfnt_open(fp); + } else if ((fp = DPXFOPEN(font_name, DPX_RES_TYPE_DFONT))) { + sfont = dfont_open(fp, ttc_index); + } else { RELEASE(cmap_name); return NULL; } - sfont = sfnt_open(fp); - if (!sfont) { ERROR("Could not open OpenType/TrueType font file \"%s\"", font_name); } switch (sfont->type) { + case SFNT_TYPE_DFONT: + offset = sfont->offset; + break; case SFNT_TYPE_TTC: offset = ttc_read_offset(sfont, ttc_index); if (offset == 0) { -- cgit v1.2.3