summaryrefslogtreecommitdiff
path: root/Build/source/texk/xdvipdfmx/src/fontmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/xdvipdfmx/src/fontmap.c')
-rw-r--r--Build/source/texk/xdvipdfmx/src/fontmap.c39
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;
}