diff options
Diffstat (limited to 'Build/source/texk/xdvipdfmx/src/fontmap.c')
-rw-r--r-- | Build/source/texk/xdvipdfmx/src/fontmap.c | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/Build/source/texk/xdvipdfmx/src/fontmap.c b/Build/source/texk/xdvipdfmx/src/fontmap.c index 267767f5aaa..24d0f366806 100644 --- a/Build/source/texk/xdvipdfmx/src/fontmap.c +++ b/Build/source/texk/xdvipdfmx/src/fontmap.c @@ -981,7 +981,7 @@ pdf_load_fontmap_file (const char *filename, int mode) static int pdf_insert_native_fontmap_record (const char *name, const char *path, int index, FT_Face face, - int layout_dir, int extend, int slant) + int layout_dir, int extend, int slant, int embolden) { char *fontmap_key; fontmap_rec *mrec; @@ -989,8 +989,8 @@ pdf_insert_native_fontmap_record (const char *name, const char *path, int index, ASSERT(name); ASSERT(path || face); - fontmap_key = malloc(strlen(name) + 30); // CHECK - sprintf(fontmap_key, "%s/%c/%d/%d", name, layout_dir == 0 ? 'H' : 'V', extend, slant); + fontmap_key = malloc(strlen(name) + 40); // CHECK + sprintf(fontmap_key, "%s/%c/%d/%d/%d", name, layout_dir == 0 ? 'H' : 'V', extend, slant, embolden); if (verbose) MESG("<NATIVE-FONTMAP:%s", fontmap_key); @@ -1009,8 +1009,9 @@ pdf_insert_native_fontmap_record (const char *name, const char *path, int index, fill_in_defaults(mrec, fontmap_key); - mrec->opt.extend = extend / 65536.0; - mrec->opt.slant = slant / 65536.0; + mrec->opt.extend = extend / 65536.0; + mrec->opt.slant = slant / 65536.0; + mrec->opt.bold = embolden / 65536.0; pdf_insert_fontmap_record(mrec->map_name, mrec); pdf_clear_fontmap_record(mrec); @@ -1025,7 +1026,7 @@ pdf_insert_native_fontmap_record (const char *name, const char *path, int index, static FT_Library ftLib; static int -pdf_load_native_font_from_path(const char *ps_name, int layout_dir, int extend, int slant) +pdf_load_native_font_from_path(const char *ps_name, int layout_dir, int extend, int slant, int embolden) { const char *p; char *filename = NEW(strlen(ps_name), char); @@ -1065,7 +1066,7 @@ pdf_load_native_font_from_path(const char *ps_name, int layout_dir, int extend, if (error == 0) return pdf_insert_native_fontmap_record(ps_name, filename, index, face, - layout_dir, extend, slant); + layout_dir, extend, slant, embolden); else return error; } @@ -1077,7 +1078,7 @@ FT_Int ft_patch; int pdf_load_native_font (const char *ps_name, const char *fam_name, const char *sty_name, - int layout_dir, int extend, int slant) + int layout_dir, int extend, int slant, int embolden) { static int sInitialized = 0; int error = -1; @@ -1094,36 +1095,36 @@ pdf_load_native_font (const char *ps_name, } if (ps_name[0] == '[') { - error = pdf_load_native_font_from_path(ps_name, layout_dir, extend, slant); + error = pdf_load_native_font_from_path(ps_name, layout_dir, extend, slant, embolden); } else { - ATSFontRef fontRef; CFStringRef theName = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, ps_name, kCFStringEncodingASCII, kCFAllocatorNull); - fontRef = ATSFontFindFromPostScriptName(theName, kATSOptionFlagsDefault); + ATSFontRef fontRef = ATSFontFindFromPostScriptName(theName, kATSOptionFlagsDefault); CFRelease(theName); if (fontRef != 0) { CFStringRef atsName = NULL; OSStatus status = ATSFontGetName(fontRef, kATSOptionFlagsDefault, &atsName); if (status == noErr) { - FSSpec pathSpec; - FT_Long index; int bufferSize = CFStringGetLength(atsName) * 4 + 1; char* fontName = NEW(bufferSize, char); if (CFStringGetCString(atsName, fontName, bufferSize, kCFStringEncodingUTF8)) { - FT_Error ftErr = FT_GetFile_From_Mac_ATS_Name(fontName, &pathSpec, &index); + FT_Long index; + UInt8 path[PATH_MAX + 1]; + FT_Error ftErr = FT_GetFilePath_From_Mac_ATS_Name(fontName, path, PATH_MAX, &index); if (ftErr == 0) { FT_Face face; - ftErr = FT_New_Face_From_FSSpec(ftLib, &pathSpec, index, &face); + ftErr = FT_New_Face(ftLib, (char*)path, index, &face); if (ftErr == 0) { error = pdf_insert_native_fontmap_record(ps_name, NULL, 0, face, - layout_dir, extend, slant); + layout_dir, extend, slant, embolden); } } } RELEASE(fontName); } - CFRelease(atsName); + if (atsName != NULL) + CFRelease(atsName); } } @@ -1149,7 +1150,7 @@ pdf_load_native_font (const char *ps_name, } if (ps_name[0] == '[') { - error = pdf_load_native_font_from_path(ps_name, layout_dir, extend, slant); + error = pdf_load_native_font_from_path(ps_name, layout_dir, extend, slant, embolden); } else { os = FcObjectSetBuild(FC_FILE, FC_INDEX, FC_FAMILY, FC_STYLE, NULL); @@ -1173,7 +1174,7 @@ pdf_load_native_font (const char *ps_name, name = (char *)FT_Get_Postscript_Name(face); if (!strcmp(name, ps_name)) { error = pdf_insert_native_fontmap_record(ps_name, (char*)path, index, face, - layout_dir, extend, slant); + layout_dir, extend, slant, embolden); /* don't dispose of the FT_Face, as we'll be using it to retrieve font data */ break; } |