forked from minhngoc25a/freetype2
Formatting, improving comments.
This commit is contained in:
parent
adf828ff95
commit
435046b54b
|
@ -1173,7 +1173,7 @@
|
|||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
Copyright 2005 by
|
||||
Copyright 2005, 2006 by
|
||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
|
||||
This file is part of the FreeType project, and may only be used, modified,
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
#
|
||||
# Copyright 2001, 2002, 2003, 2004, 2005 by
|
||||
# Copyright 2001, 2002, 2003, 2004, 2005, 2006 by
|
||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#
|
||||
# This file is part of the FreeType project, and may only be used, modified,
|
||||
|
@ -133,7 +133,7 @@ if test x$with_zlib != xno && test -n "$LIBZ"; then
|
|||
fi
|
||||
|
||||
|
||||
# Whether to use Mac OS resource-based fonts or not
|
||||
# Whether to use Mac OS resource-based fonts.
|
||||
|
||||
AC_ARG_WITH([old-mac-fonts],
|
||||
dnl don't quote AS_HELP_STRING!
|
||||
|
@ -147,7 +147,7 @@ else
|
|||
fi
|
||||
|
||||
|
||||
# Whether to use FileManager which is deprecated since Mac OS X 10.4
|
||||
# Whether to use FileManager which is deprecated since Mac OS X 10.4.
|
||||
|
||||
AC_ARG_WITH([fsspec],
|
||||
AS_HELP_STRING([--with-fsspec],
|
||||
|
@ -157,6 +157,7 @@ if test x$with_fsspec = xno; then
|
|||
elif test x$with_old_mac_fonts = xyes; then
|
||||
AC_MSG_CHECKING([FSSpec-based FileManager])
|
||||
AC_TRY_LINK([
|
||||
|
||||
#if defined(__GNUC__) && defined(__APPLE_CC__)
|
||||
# include <Carbon/Carbon.h>
|
||||
# include <ApplicationServices/ApplicationServices.h>
|
||||
|
@ -164,27 +165,30 @@ elif test x$with_old_mac_fonts = xyes; then
|
|||
# include <ConditionalMacros.h>
|
||||
# include <Files.h>
|
||||
#endif
|
||||
], [
|
||||
FCBPBPtr paramBlock;
|
||||
short vRefNum;
|
||||
long dirID;
|
||||
ConstStr255Param fileName;
|
||||
FSSpec* spec;
|
||||
|
||||
],
|
||||
[
|
||||
|
||||
FCBPBPtr paramBlock;
|
||||
short vRefNum;
|
||||
long dirID;
|
||||
ConstStr255Param fileName;
|
||||
FSSpec* spec;
|
||||
|
||||
|
||||
/* FSSpec functions: deprecated sicne Mac OS X 10.4 */
|
||||
PBGetFCBInfoSync( paramBlock );
|
||||
FSMakeFSSpec( vRefNum, dirID, fileName, spec );
|
||||
|
||||
], [
|
||||
AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"
|
||||
], [
|
||||
AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
|
||||
])
|
||||
],
|
||||
[AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"],
|
||||
[AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"])
|
||||
fi
|
||||
|
||||
# Whether to use FileManager in Carbon since MacOS 9.x
|
||||
|
||||
# Whether to use FileManager in Carbon since MacOS 9.x.
|
||||
|
||||
AC_ARG_WITH([fsref],
|
||||
AS_HELP_STRING([--with-fsref],
|
||||
|
@ -199,6 +203,7 @@ if test x$with_fsref = xno; then
|
|||
elif test x$with_old_mac_fonts = xyes; then
|
||||
AC_MSG_CHECKING([FSRef-based FileManager])
|
||||
AC_TRY_LINK([
|
||||
|
||||
#if defined(__GNUC__) && defined(__APPLE_CC__)
|
||||
# include <Carbon/Carbon.h>
|
||||
# include <ApplicationServices/ApplicationServices.h>
|
||||
|
@ -206,7 +211,10 @@ elif test x$with_old_mac_fonts = xyes; then
|
|||
# include <ConditionalMacros.h>
|
||||
# include <Files.h>
|
||||
#endif
|
||||
], [
|
||||
|
||||
],
|
||||
[
|
||||
|
||||
FCBPBPtr paramBlock;
|
||||
short vRefNum;
|
||||
long dirID;
|
||||
|
@ -235,16 +243,15 @@ elif test x$with_old_mac_fonts = xyes; then
|
|||
outForkName, spec, ref );
|
||||
FSPathMakeRef( path, ref, isDirectory );
|
||||
|
||||
], [
|
||||
AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSREF=1"
|
||||
], [
|
||||
AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSREF=0"
|
||||
])
|
||||
],
|
||||
[AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSREF=1"],
|
||||
[AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_FSREF=0"])
|
||||
fi
|
||||
|
||||
# Whether to use QuickDraw API in ToolBox which is deprecated since Mac OS X 10.4
|
||||
|
||||
# Whether to use QuickDraw API in ToolBox which is deprecated since Mac OS X 10.4.
|
||||
|
||||
AC_ARG_WITH([quickdraw-toolbox],
|
||||
AS_HELP_STRING([--with-quickdraw-toolbox],
|
||||
|
@ -254,6 +261,7 @@ if test x$with_quickdraw_toolbox = xno; then
|
|||
elif test x$with_old_mac_fonts = xyes; then
|
||||
AC_MSG_CHECKING([QuickDraw FontManager functions in ToolBox])
|
||||
AC_TRY_LINK([
|
||||
|
||||
#if defined(__GNUC__) && defined(__APPLE_CC__)
|
||||
# include <Carbon/Carbon.h>
|
||||
# include <ApplicationServices/ApplicationServices.h>
|
||||
|
@ -261,7 +269,10 @@ elif test x$with_old_mac_fonts = xyes; then
|
|||
# include <ConditionalMacros.h>
|
||||
# include <Fonts.h>
|
||||
#endif
|
||||
], [
|
||||
|
||||
],
|
||||
[
|
||||
|
||||
Str255 familyName;
|
||||
SInt16 familyID = 0;
|
||||
FMInput* fmIn = NULL;
|
||||
|
@ -272,17 +283,15 @@ elif test x$with_old_mac_fonts = xyes; then
|
|||
GetFNum( familyName, &familyID );
|
||||
fmOut = FMSwapFont( fmIn );
|
||||
|
||||
], [
|
||||
AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"
|
||||
], [
|
||||
AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
|
||||
])
|
||||
],
|
||||
[AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"],
|
||||
[AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"])
|
||||
fi
|
||||
|
||||
|
||||
# Whether to use QuickDraw API in Carbon which is deprecated since Mac OS X 10.4
|
||||
# Whether to use QuickDraw API in Carbon which is deprecated since Mac OS X 10.4.
|
||||
|
||||
AC_ARG_WITH([quickdraw-carbon],
|
||||
AS_HELP_STRING([--with-quickdraw-carbon],
|
||||
|
@ -292,6 +301,7 @@ if test x$with_quickdraw_carbon = xno; then
|
|||
elif test x$with_old_mac_fonts = xyes; then
|
||||
AC_MSG_CHECKING([QuickDraw FontManager functions in Carbon])
|
||||
AC_TRY_LINK([
|
||||
|
||||
#if defined(__GNUC__) && defined(__APPLE_CC__)
|
||||
# include <Carbon/Carbon.h>
|
||||
# include <ApplicationServices/ApplicationServices.h>
|
||||
|
@ -299,7 +309,10 @@ elif test x$with_old_mac_fonts = xyes; then
|
|||
# include <ConditionalMacros.h>
|
||||
# include <Fonts.h>
|
||||
#endif
|
||||
], [
|
||||
|
||||
],
|
||||
[
|
||||
|
||||
FMFontFamilyIterator famIter;
|
||||
FMFontFamily family;
|
||||
Str255 famNameStr;
|
||||
|
@ -318,17 +331,17 @@ elif test x$with_old_mac_fonts = xyes; then
|
|||
FMDisposeFontFamilyInstanceIterator( &instIter );
|
||||
FMDisposeFontFamilyIterator( &famIter );
|
||||
FMGetFontContainer( font, pathSpec );
|
||||
], [
|
||||
AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"
|
||||
], [
|
||||
AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
|
||||
])
|
||||
|
||||
],
|
||||
[AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"],
|
||||
[AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"])
|
||||
fi
|
||||
|
||||
|
||||
# Whether to use AppleTypeService since Mac OS X
|
||||
# Whether to use AppleTypeService since Mac OS X.
|
||||
|
||||
AC_ARG_WITH([ats],
|
||||
dnl don't quote AS_HELP_STRING!
|
||||
AS_HELP_STRING([--with-ats],
|
||||
|
@ -338,22 +351,24 @@ if test x$with_ats = xno; then
|
|||
elif test x$with_old_mac_fonts = xyes; then
|
||||
AC_MSG_CHECKING([AppleTypeService functions])
|
||||
AC_TRY_LINK([
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
], [
|
||||
|
||||
],
|
||||
[
|
||||
|
||||
FSSpec* pathSpec;
|
||||
|
||||
|
||||
ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
|
||||
ATSFontGetFileSpecification( 0, pathSpec );
|
||||
], [
|
||||
AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_ATS=1"
|
||||
], [
|
||||
AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_ATS=0"
|
||||
])
|
||||
fi
|
||||
|
||||
],
|
||||
[AC_MSG_RESULT([ok])
|
||||
CFLAGS="$CFLAGS -DHAVE_ATS=1"],
|
||||
[AC_MSG_RESULT([not found])
|
||||
CFLAGS="$CFLAGS -DHAVE_ATS=0"])
|
||||
fi
|
||||
|
||||
|
||||
AC_SUBST([LIBZ])
|
||||
|
|
30
docs/CHANGES
30
docs/CHANGES
|
@ -12,6 +12,7 @@ LATEST CHANGES BETWEEN 2.2.0 and 2.1.10
|
|||
- If FreeType was compiled without hinters, all font formats based
|
||||
on PS outlines weren't scaled correctly.
|
||||
|
||||
|
||||
II. IMPORTANT CHANGES
|
||||
|
||||
- The LIGHT hinting algorithm produces more pleasant results.
|
||||
|
@ -45,11 +46,12 @@ LATEST CHANGES BETWEEN 2.2.0 and 2.1.10
|
|||
|
||||
Note that this doesn't affect binary backwards compatibility.
|
||||
|
||||
- On MacOS, new APIs are added as replacements for legacy APIs:
|
||||
`FT_New_Face_From_FSRef' for FT_New_Face_From_FSSpec, and
|
||||
`FT_GetFile_From_Mac_ATS_Name' for FT_GetFile_From_Mac_Name.
|
||||
Legacy APIs are still available, if FreeType is built without
|
||||
disabling them.
|
||||
- On MacOS, new APIs have been added as replacements for legacy
|
||||
APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec',
|
||||
and `FT_GetFile_From_Mac_ATS_Name' for
|
||||
`FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if
|
||||
FreeType is built without disabling them.
|
||||
|
||||
|
||||
III. MISCELLANEOUS
|
||||
|
||||
|
@ -63,14 +65,16 @@ LATEST CHANGES BETWEEN 2.2.0 and 2.1.10
|
|||
returns the number of available faces via face->num_faces.
|
||||
Unsupported bitmap faces (fbit, NFNT) are ignored.
|
||||
|
||||
- builds/unix/configure is improved for MacOS X. It automatically
|
||||
checks available functions in Carbon library, and prepare to use
|
||||
newest functions by default. Also options to specify dependency
|
||||
of each Carbon APIs (FSSpec, FSRef, old/new QuickDraw, ATS) are
|
||||
available. By manual disabling of all QuickDraw, FreeType can be
|
||||
built without "deprecated function" warning on MacOS 10.4.x, but
|
||||
FT_GetFile_Mac_Name in ftmac.c is changed to dummy function, and
|
||||
returns unimplemented error. For detail, see builds/mac/README.
|
||||
- builds/unix/configure has been improved for MacOS X. It now
|
||||
automatically checks available functions in Carbon library, and
|
||||
prepare to use newest functions by default. Options to specify
|
||||
the dependencies of each Carbon APIs (FSSpec, FSRef, old/new
|
||||
QuickDraw, ATS) are available too. By manual disabling of all
|
||||
QuickDraw functionality, FreeType can be built without
|
||||
`deprecated function' warnings on MacOS 10.4.x, but
|
||||
FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy
|
||||
function, and returns an `unimplemented' error. For details see
|
||||
builds/mac/README.
|
||||
|
||||
- SFNT cmap handling has been improved, mainly to run faster.
|
||||
|
||||
|
|
333
src/base/ftmac.c
333
src/base/ftmac.c
|
@ -5,7 +5,7 @@
|
|||
/* Mac FOND support. Written by just@letterror.com. */
|
||||
/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005 by */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
|
||||
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -24,35 +24,35 @@
|
|||
support this I use the face_index argument of FT_(Open|New)_Face()
|
||||
functions, and pretend the suitcase file is a collection.
|
||||
|
||||
Warning: fbit and NFNT bitmap resources are not supported yet.
|
||||
In old sfnt fonts, bitmap glyph data for each size is stored in
|
||||
each NFNT resources, instead of bdat table in sfnt resource.
|
||||
Therefore, face->num_fixed_sizes is set to 0, because bitmap
|
||||
data in NFNT resource is unavailable at present.
|
||||
Warning: fbit and NFNT bitmap resources are not supported yet. In old
|
||||
sfnt fonts, bitmap glyph data for each size is stored in each `NFNT'
|
||||
resources instead of the `bdat' table in the sfnt resource. Therefore,
|
||||
face->num_fixed_sizes is set to 0, because bitmap data in `NFNT'
|
||||
resource is unavailable at present.
|
||||
|
||||
The Mac FOND support works roughly like this:
|
||||
|
||||
- Check whether the offered stream points to a Mac suitcase file.
|
||||
This is done by checking the file type: it has to be 'FFIL' or 'tfil'.
|
||||
The stream that gets passed to our init_face() routine is a stdio
|
||||
stream, which isn't usable for us, since the FOND resources live
|
||||
in the resource fork. So we just grab the stream->pathname field.
|
||||
- Check whether the offered stream points to a Mac suitcase file. This
|
||||
is done by checking the file type: it has to be 'FFIL' or 'tfil'. The
|
||||
stream that gets passed to our init_face() routine is a stdio stream,
|
||||
which isn't usable for us, since the FOND resources live in the
|
||||
resource fork. So we just grab the stream->pathname field.
|
||||
|
||||
- Read the FOND resource into memory, then check whether there is
|
||||
a TrueType font and/or(!) a Type 1 font available.
|
||||
- Read the FOND resource into memory, then check whether there is a
|
||||
TrueType font and/or(!) a Type 1 font available.
|
||||
|
||||
- If there is a Type 1 font available (as a separate 'LWFN' file),
|
||||
read its data into memory, massage it slightly so it becomes
|
||||
PFB data, wrap it into a memory stream, load the Type 1 driver
|
||||
and delegate the rest of the work to it by calling FT_Open_Face().
|
||||
(XXX TODO: after this has been done, the kerning data from the FOND
|
||||
resource should be appended to the face: On the Mac there are usually
|
||||
no AFM files available. However, this is tricky since we need to map
|
||||
Mac char codes to ps glyph names to glyph ID's...)
|
||||
- If there is a Type 1 font available (as a separate `LWFN' file), read
|
||||
its data into memory, massage it slightly so it becomes PFB data, wrap
|
||||
it into a memory stream, load the Type 1 driver and delegate the rest
|
||||
of the work to it by calling FT_Open_Face(). (XXX TODO: after this
|
||||
has been done, the kerning data from the FOND resource should be
|
||||
appended to the face: On the Mac there are usually no AFM files
|
||||
available. However, this is tricky since we need to map Mac char
|
||||
codes to ps glyph names to glyph ID's...)
|
||||
|
||||
- If there is a TrueType font (an 'sfnt' resource), read it into
|
||||
memory, wrap it into a memory stream, load the TrueType driver
|
||||
and delegate the rest of the work to it, by calling FT_Open_Face().
|
||||
- If there is a TrueType font (an `sfnt' resource), read it into memory,
|
||||
wrap it into a memory stream, load the TrueType driver and delegate
|
||||
the rest of the work to it, by calling FT_Open_Face().
|
||||
*/
|
||||
|
||||
|
||||
|
@ -64,7 +64,7 @@
|
|||
/* This is for Mac OS X. Without redefinition, OS_INLINE */
|
||||
/* expands to `static inline' which doesn't survive the */
|
||||
/* -ansi compilation flag of GCC. */
|
||||
#define OS_INLINE static __inline__
|
||||
#define OS_INLINE static __inline__
|
||||
#include <Carbon/Carbon.h>
|
||||
#else
|
||||
#include <Resources.h>
|
||||
|
@ -81,44 +81,44 @@
|
|||
#include FT_MAC_H
|
||||
|
||||
|
||||
/* FSSpec functions are depricated since Mac OS X 10.4 */
|
||||
/* FSSpec functions are deprecated since Mac OS X 10.4 */
|
||||
#ifndef HAVE_FSSPEC
|
||||
#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
|
||||
#define HAVE_FSSPEC 1
|
||||
#define HAVE_FSSPEC 1
|
||||
#else
|
||||
#define HAVE_FSSPEC 0
|
||||
#define HAVE_FSSPEC 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* most FSRef functions were introduced since Mac OS 9 */
|
||||
#ifndef HAVE_FSREF
|
||||
#if TARGET_API_MAC_OSX
|
||||
#define HAVE_FSREF 1
|
||||
#define HAVE_FSREF 1
|
||||
#else
|
||||
#define HAVE_FSREF 0
|
||||
#define HAVE_FSREF 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef HFS_MAXPATHLEN
|
||||
#define HFS_MAXPATHLEN 1024
|
||||
#define HFS_MAXPATHLEN 1024
|
||||
#endif
|
||||
|
||||
|
||||
/* QuickDraw is depricated since Mac OS X 10.4 */
|
||||
/* QuickDraw is deprecated since Mac OS X 10.4 */
|
||||
#ifndef HAVE_QUICKDRAW_CARBON
|
||||
#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
|
||||
#define HAVE_QUICKDRAW_CARBON 1
|
||||
#define HAVE_QUICKDRAW_CARBON 1
|
||||
#else
|
||||
#define HAVE_QUICKDRAW_CARBON 0
|
||||
#define HAVE_QUICKDRAW_CARBON 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* AppleTypeService is available since Mac OS X */
|
||||
#ifndef HAVE_ATS
|
||||
#if TARGET_API_MAC_OSX
|
||||
#define HAVE_ATS 1
|
||||
#define HAVE_ATS 1
|
||||
#else
|
||||
#define HAVE_ATS 0
|
||||
#define HAVE_ATS 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -126,11 +126,12 @@
|
|||
TrueType in case *both* are available (this is not common,
|
||||
but it *is* possible). */
|
||||
#ifndef PREFER_LWFN
|
||||
#define PREFER_LWFN 1
|
||||
#define PREFER_LWFN 1
|
||||
#endif
|
||||
|
||||
|
||||
#if !HAVE_QUICKDRAW_CARBON /* QuickDraw is deprecated since Mac OS X 10.4 */
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_GetFile_From_Mac_Name( const char* fontName,
|
||||
FSSpec* pathSpec,
|
||||
|
@ -138,7 +139,9 @@
|
|||
{
|
||||
return FT_Err_Unimplemented_Feature;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_GetFile_From_Mac_Name( const char* fontName,
|
||||
FSSpec* pathSpec,
|
||||
|
@ -174,7 +177,8 @@
|
|||
FMCreateFontFamilyInstanceIterator( family, &instIter );
|
||||
|
||||
*face_index = 0;
|
||||
stat2 = 0;
|
||||
stat2 = 0;
|
||||
|
||||
while ( stat2 == 0 && !the_font )
|
||||
{
|
||||
FMFontStyle style;
|
||||
|
@ -221,10 +225,12 @@
|
|||
else
|
||||
return FT_Err_Unknown_File_Format;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_QUICKDRAW_CARBON */
|
||||
|
||||
|
||||
#if !HAVE_ATS
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
||||
FSSpec* pathSpec,
|
||||
|
@ -232,7 +238,9 @@
|
|||
{
|
||||
return FT_Err_Unimplemented_Feature;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
||||
FSSpec* pathSpec,
|
||||
|
@ -240,24 +248,28 @@
|
|||
{
|
||||
CFStringRef cf_fontName;
|
||||
ATSFontRef ats_font_id;
|
||||
|
||||
|
||||
|
||||
*face_index = 0;
|
||||
|
||||
cf_fontName = CFStringCreateWithCString( NULL, fontName, kCFStringEncodingMacRoman );
|
||||
ats_font_id = ATSFontFindFromName( cf_fontName, kATSOptionFlagsUnRestrictedScope );
|
||||
|
||||
if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFF )
|
||||
|
||||
cf_fontName = CFStringCreateWithCString( NULL, fontName,
|
||||
kCFStringEncodingMacRoman );
|
||||
ats_font_id = ATSFontFindFromName( cf_fontName,
|
||||
kATSOptionFlagsUnRestrictedScope );
|
||||
|
||||
if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
|
||||
return FT_Err_Unknown_File_Format;
|
||||
|
||||
if ( 0 != ATSFontGetFileSpecification( ats_font_id, pathSpec ))
|
||||
|
||||
if ( 0 != ATSFontGetFileSpecification( ats_font_id, pathSpec ) )
|
||||
return FT_Err_Unknown_File_Format;
|
||||
|
||||
/* face_index calculation by searching preceding fontIDs with same FSRef */
|
||||
|
||||
/* face_index calculation by searching preceding fontIDs */
|
||||
/* with same FSRef */
|
||||
{
|
||||
int i;
|
||||
FSSpec f;
|
||||
|
||||
|
||||
|
||||
|
||||
for ( i = 1; i < ats_font_id; i++ )
|
||||
{
|
||||
if ( 0 != ATSFontGetFileSpecification( ats_font_id - i,
|
||||
|
@ -274,7 +286,8 @@
|
|||
}
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_ATS */
|
||||
|
||||
|
||||
#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
|
||||
|
@ -313,10 +326,11 @@
|
|||
|
||||
|
||||
#if HAVE_FSSPEC && !HAVE_FSREF
|
||||
|
||||
static OSErr
|
||||
FT_FSPathMakeSpec( const UInt8* pathname,
|
||||
FSSpec* spec_p,
|
||||
Boolean isDirectory )
|
||||
FT_FSPathMakeSpec( const UInt8* pathname,
|
||||
FSSpec* spec_p,
|
||||
Boolean isDirectory )
|
||||
{
|
||||
const char *p, *q;
|
||||
short vRefNum;
|
||||
|
@ -330,10 +344,10 @@
|
|||
vRefNum = 0;
|
||||
|
||||
while ( 1 )
|
||||
{
|
||||
{
|
||||
q = p + FT_MIN( 255, ft_strlen( p ) );
|
||||
|
||||
if ( q == p )
|
||||
if ( q == p )
|
||||
return 0;
|
||||
|
||||
if ( 255 < ft_strlen( (char *)pathname ) )
|
||||
|
@ -388,7 +402,7 @@
|
|||
FT_MEM_MOVE( path + node_namelen + 1, path, child_namelen );
|
||||
FT_MEM_COPY( path, node_name, node_namelen );
|
||||
if ( child_namelen > 0 )
|
||||
path[ node_namelen ] = ':';
|
||||
path[node_namelen] = ':';
|
||||
|
||||
vRefNum = spec.vRefNum;
|
||||
dirID = spec.parID;
|
||||
|
@ -399,21 +413,25 @@
|
|||
}
|
||||
return noErr;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_FSSPEC && !HAVE_FSREF */
|
||||
|
||||
|
||||
static OSErr
|
||||
FT_FSPathMakeRes( const UInt8* pathname,
|
||||
short* res )
|
||||
{
|
||||
|
||||
#if HAVE_FSREF
|
||||
|
||||
OSErr err;
|
||||
FSRef ref;
|
||||
|
||||
|
||||
if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
|
||||
return FT_Err_Cannot_Open_Resource;
|
||||
|
||||
/* at present, so support for dfont format */
|
||||
/* at present, no support for dfont format */
|
||||
err = FSOpenResourceFile( &ref, 0, NULL, fsRdPerm, res );
|
||||
if ( noErr == err )
|
||||
return err;
|
||||
|
@ -421,18 +439,23 @@
|
|||
/* fallback to original resource-fork font */
|
||||
*res = FSOpenResFile( &ref, fsRdPerm );
|
||||
err = ResError();
|
||||
|
||||
#else
|
||||
OSErr err;
|
||||
|
||||
OSErr err;
|
||||
FSSpec spec;
|
||||
|
||||
|
||||
if ( noErr != FT_FSPathMakeSpec( pathname, &spec, FALSE ) )
|
||||
return FT_Err_Cannot_Open_Resource;
|
||||
|
||||
/* at present, so support for dfont format without FSRef */
|
||||
/* (see above), try original resource-fork font */
|
||||
/* at present, no support for dfont format without FSRef */
|
||||
/* (see above), try original resource-fork font */
|
||||
*res = FSpOpenResFile( &spec, fsRdPerm );
|
||||
err = ResError();
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_FSREF */
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -441,7 +464,9 @@
|
|||
static OSType
|
||||
get_file_type_from_path( const UInt8* pathname )
|
||||
{
|
||||
|
||||
#if HAVE_FSREF
|
||||
|
||||
FSRef ref;
|
||||
FSCatalogInfo info;
|
||||
|
||||
|
@ -453,8 +478,10 @@
|
|||
NULL, NULL, NULL ) )
|
||||
return ( OSType ) 0;
|
||||
|
||||
return ((FInfo *) (info.finderInfo))->fdType;
|
||||
return ((FInfo *)(info.finderInfo))->fdType;
|
||||
|
||||
#else
|
||||
|
||||
FSSpec spec;
|
||||
FInfo finfo;
|
||||
|
||||
|
@ -466,7 +493,9 @@
|
|||
return ( OSType ) 0;
|
||||
|
||||
return finfo.fdType;
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_FSREF */
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -519,10 +548,10 @@
|
|||
short i, face, face_all;
|
||||
|
||||
|
||||
fond = (FamRec*)fond_data;
|
||||
face_all = *( (short *)( fond_data + sizeof ( FamRec ) ) ) + 1;
|
||||
assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
|
||||
face = 0;
|
||||
fond = (FamRec*)fond_data;
|
||||
face_all = *( (short *)( fond_data + sizeof ( FamRec ) ) ) + 1;
|
||||
assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
|
||||
face = 0;
|
||||
|
||||
for ( i = 0; i < face_all; i++ )
|
||||
{
|
||||
|
@ -596,10 +625,10 @@
|
|||
string_count = *(unsigned short*)(p);
|
||||
p += sizeof ( short );
|
||||
|
||||
for ( i = 0 ; i < string_count && i < 64; i++ )
|
||||
for ( i = 0; i < string_count && i < 64; i++ )
|
||||
{
|
||||
names[i] = p;
|
||||
p += names[i][0];
|
||||
p += names[i][0];
|
||||
p++;
|
||||
}
|
||||
|
||||
|
@ -647,16 +676,18 @@
|
|||
static FT_Error
|
||||
lookup_lwfn_by_fond( const UInt8* path_fond,
|
||||
const StringPtr base_lwfn,
|
||||
UInt8* path_lwfn,
|
||||
UInt8* path_lwfn,
|
||||
int path_size )
|
||||
{
|
||||
|
||||
#if HAVE_FSREF
|
||||
|
||||
FSRef ref, par_ref;
|
||||
int dirname_len;
|
||||
|
||||
|
||||
/* pathname for FSRef can be various format: HFS, HFS+ and POSIX. */
|
||||
/* we should not extract parent directory by string manipulation */
|
||||
/* Pathname for FSRef can be in various formats: HFS, HFS+, and POSIX. */
|
||||
/* We should not extract parent directory by string manipulation. */
|
||||
|
||||
if ( noErr != FSPathMakeRef( path_fond, &ref, FALSE ) )
|
||||
return FT_Err_Invalid_Argument;
|
||||
|
@ -679,9 +710,8 @@
|
|||
|
||||
dirname_len = ft_strlen( (char *)path_lwfn );
|
||||
ft_strcat( (char *)path_lwfn, (char *)base_lwfn + 1 );
|
||||
path_lwfn[ dirname_len + base_lwfn[0] ] = '\0';
|
||||
path_lwfn[dirname_len + base_lwfn[0]] = '\0';
|
||||
|
||||
|
||||
if ( noErr != FSPathMakeRef( path_lwfn, &ref, FALSE ) )
|
||||
return FT_Err_Cannot_Open_Resource;
|
||||
|
||||
|
@ -690,7 +720,9 @@
|
|||
return FT_Err_Cannot_Open_Resource;
|
||||
|
||||
return FT_Err_Ok;
|
||||
|
||||
#else
|
||||
|
||||
int i;
|
||||
FSSpec spec;
|
||||
|
||||
|
@ -703,7 +735,7 @@
|
|||
|
||||
i = ft_strlen( (char *)path_lwfn ) - 1;
|
||||
while ( i > 0 && ':' != path_lwfn[i] )
|
||||
i-- ;
|
||||
i--;
|
||||
|
||||
if ( i + 1 + base_lwfn[0] > path_size )
|
||||
return FT_Err_Invalid_Argument;
|
||||
|
@ -711,20 +743,21 @@
|
|||
if ( ':' == path_lwfn[i] )
|
||||
{
|
||||
ft_strcpy( (char *)path_lwfn + i + 1, (char *)base_lwfn + 1 );
|
||||
path_lwfn[ i + 1 + base_lwfn[0] ] = '\0';
|
||||
path_lwfn[i + 1 + base_lwfn[0]] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
ft_strcpy( (char *)path_lwfn, (char *)base_lwfn + 1 );
|
||||
path_lwfn[ base_lwfn[0] ] = '\0';
|
||||
path_lwfn[base_lwfn[0]] = '\0';
|
||||
}
|
||||
|
||||
|
||||
if ( noErr != FT_FSPathMakeSpec( path_lwfn, &spec, FALSE ) )
|
||||
return FT_Err_Cannot_Open_Resource;
|
||||
|
||||
return FT_Err_Ok;
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_FSREF */
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -734,9 +767,9 @@
|
|||
{
|
||||
short sfnt_id;
|
||||
short have_sfnt, have_lwfn;
|
||||
Str255 lwfn_file_name;
|
||||
Str255 lwfn_file_name;
|
||||
UInt8 buff[HFS_MAXPATHLEN];
|
||||
FT_Error err;
|
||||
FT_Error err;
|
||||
|
||||
|
||||
have_sfnt = have_lwfn = 0;
|
||||
|
@ -748,7 +781,7 @@
|
|||
if ( lwfn_file_name[0] )
|
||||
{
|
||||
err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
|
||||
buff, sizeof( buff ) );
|
||||
buff, sizeof ( buff ) );
|
||||
if ( FT_Err_Ok == err )
|
||||
have_lwfn = 1;
|
||||
}
|
||||
|
@ -761,9 +794,9 @@
|
|||
|
||||
|
||||
/* Read Type 1 data from the POST resources inside the LWFN file,
|
||||
return a PFB buffer. This is somewhat convoluted because the FT2
|
||||
return a PFB buffer. This is somewhat convoluted because the FT2
|
||||
PFB parser wants the ASCII header as one chunk, and the LWFN
|
||||
chunks are often not organized that way, so we'll glue chunks
|
||||
chunks are often not organized that way, so we glue chunks
|
||||
of the same type together. */
|
||||
static FT_Error
|
||||
read_lwfn( FT_Memory memory,
|
||||
|
@ -791,7 +824,7 @@
|
|||
{
|
||||
post_data = Get1Resource( 'POST', res_id++ );
|
||||
if ( post_data == NULL )
|
||||
break; /* we're done */
|
||||
break; /* we are done */
|
||||
|
||||
code = (*post_data)[0];
|
||||
|
||||
|
@ -821,7 +854,7 @@
|
|||
{
|
||||
post_data = Get1Resource( 'POST', res_id++ );
|
||||
if ( post_data == NULL )
|
||||
break; /* we're done */
|
||||
break; /* we are done */
|
||||
|
||||
post_size = (FT_ULong)GetHandleSize( post_data ) - 2;
|
||||
code = (*post_data)[0];
|
||||
|
@ -830,7 +863,7 @@
|
|||
{
|
||||
if ( last_code != -1 )
|
||||
{
|
||||
/* we're done adding a chunk, fill in the size field */
|
||||
/* we are done adding a chunk, fill in the size field */
|
||||
if ( size_p != NULL )
|
||||
{
|
||||
*size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF );
|
||||
|
@ -948,11 +981,11 @@
|
|||
return error;
|
||||
}
|
||||
|
||||
args.flags = FT_OPEN_STREAM;
|
||||
args.flags = FT_OPEN_STREAM;
|
||||
args.stream = stream;
|
||||
if ( driver_name )
|
||||
{
|
||||
args.flags = args.flags | FT_OPEN_DRIVER;
|
||||
args.flags = args.flags | FT_OPEN_DRIVER;
|
||||
args.driver = FT_Get_Module( library, driver_name );
|
||||
}
|
||||
|
||||
|
@ -974,9 +1007,9 @@
|
|||
|
||||
/* Create a new FT_Face from a file spec to an LWFN file. */
|
||||
static FT_Error
|
||||
FT_New_Face_From_LWFN( FT_Library library,
|
||||
FT_New_Face_From_LWFN( FT_Library library,
|
||||
const UInt8* pathname,
|
||||
FT_Long face_index,
|
||||
FT_Long face_index,
|
||||
FT_Face* aface )
|
||||
{
|
||||
FT_Byte* pfb_data;
|
||||
|
@ -1014,7 +1047,7 @@
|
|||
Handle sfnt = NULL;
|
||||
FT_Byte* sfnt_data;
|
||||
size_t sfnt_size;
|
||||
FT_Error error = 0;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
FT_Memory memory = library->memory;
|
||||
int is_cff;
|
||||
|
||||
|
@ -1051,9 +1084,9 @@
|
|||
|
||||
/* Create a new FT_Face from a file spec to a suitcase file. */
|
||||
static FT_Error
|
||||
FT_New_Face_From_Suitcase( FT_Library library,
|
||||
FT_New_Face_From_Suitcase( FT_Library library,
|
||||
const UInt8* pathname,
|
||||
FT_Long face_index,
|
||||
FT_Long face_index,
|
||||
FT_Face* aface )
|
||||
{
|
||||
FT_Error error = FT_Err_Cannot_Open_Resource;
|
||||
|
@ -1081,7 +1114,7 @@
|
|||
|
||||
if ( 0 <= face_index && face_index < num_faces_in_fond && error )
|
||||
error = FT_New_Face_From_FOND( library, fond, face_index, aface );
|
||||
|
||||
|
||||
face_index -= num_faces_in_fond;
|
||||
}
|
||||
|
||||
|
@ -1100,10 +1133,10 @@
|
|||
FT_Long face_index,
|
||||
FT_Face* aface )
|
||||
{
|
||||
short sfnt_id, have_sfnt, have_lwfn = 0;
|
||||
short fond_id;
|
||||
OSType fond_type;
|
||||
Str255 fond_name;
|
||||
short sfnt_id, have_sfnt, have_lwfn = 0;
|
||||
short fond_id;
|
||||
OSType fond_type;
|
||||
Str255 fond_name;
|
||||
Str255 lwfn_file_name;
|
||||
UInt8 path_lwfn[HFS_MAXPATHLEN];
|
||||
OSErr err;
|
||||
|
@ -1128,34 +1161,39 @@
|
|||
goto found_no_lwfn_file;
|
||||
|
||||
#if HAVE_FSREF
|
||||
{
|
||||
|
||||
{
|
||||
UInt8 path_fond[HFS_MAXPATHLEN];
|
||||
FSRef ref;
|
||||
|
||||
|
||||
err = FSGetForkCBInfo( res, kFSInvalidVolumeRefNum,
|
||||
NULL, NULL, NULL, &ref, NULL );
|
||||
if ( noErr != err )
|
||||
goto found_no_lwfn_file;
|
||||
|
||||
err = FSRefMakePath( &ref, path_fond, sizeof( path_fond ) );
|
||||
err = FSRefMakePath( &ref, path_fond, sizeof ( path_fond ) );
|
||||
if ( noErr != err )
|
||||
goto found_no_lwfn_file;
|
||||
|
||||
error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
|
||||
path_lwfn, sizeof( path_lwfn ) );
|
||||
path_lwfn, sizeof ( path_lwfn ) );
|
||||
if ( FT_Err_Ok == error )
|
||||
have_lwfn = 1;
|
||||
}
|
||||
|
||||
#elif HAVE_FSSPEC
|
||||
{
|
||||
|
||||
{
|
||||
UInt8 path_fond[HFS_MAXPATHLEN];
|
||||
FCBPBRec pb;
|
||||
Str255 fond_file_name;
|
||||
FSSpec spec;
|
||||
|
||||
|
||||
FT_MEM_SET( &spec, 0, sizeof( FSSpec ) );
|
||||
FT_MEM_SET( &pb, 0, sizeof( FCBPBRec ) );
|
||||
FT_MEM_SET( &spec, 0, sizeof ( FSSpec ) );
|
||||
FT_MEM_SET( &pb, 0, sizeof ( FCBPBRec ) );
|
||||
|
||||
pb.ioNamePtr = fond_file_name;
|
||||
pb.ioVRefNum = 0;
|
||||
pb.ioRefNum = res;
|
||||
|
@ -1165,21 +1203,24 @@
|
|||
if ( noErr != err )
|
||||
goto found_no_lwfn_file;
|
||||
|
||||
err = FSMakeFSSpec( pb.ioFCBVRefNum, pb.ioFCBParID, fond_file_name, &spec );
|
||||
err = FSMakeFSSpec( pb.ioFCBVRefNum, pb.ioFCBParID,
|
||||
fond_file_name, &spec );
|
||||
if ( noErr != err )
|
||||
goto found_no_lwfn_file;
|
||||
|
||||
err = FT_FSpMakePath( &spec, path_fond, sizeof( path_fond ) );
|
||||
err = FT_FSpMakePath( &spec, path_fond, sizeof ( path_fond ) );
|
||||
if ( noErr != err )
|
||||
goto found_no_lwfn_file;
|
||||
|
||||
error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
|
||||
path_lwfn, sizeof( path_lwfn ) );
|
||||
path_lwfn, sizeof ( path_lwfn ) );
|
||||
if ( FT_Err_Ok == error )
|
||||
have_lwfn = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* HAVE_FSREF, HAVE_FSSPEC */
|
||||
|
||||
}
|
||||
|
||||
if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
|
||||
return FT_New_Face_From_LWFN( library,
|
||||
|
@ -1187,40 +1228,40 @@
|
|||
face_index,
|
||||
aface );
|
||||
|
||||
found_no_lwfn_file:
|
||||
found_no_lwfn_file:
|
||||
if ( have_sfnt )
|
||||
return FT_New_Face_From_SFNT( library,
|
||||
sfnt_id,
|
||||
face_index,
|
||||
aface );
|
||||
|
||||
return FT_Err_Unknown_File_Format;
|
||||
return FT_Err_Unknown_File_Format;
|
||||
}
|
||||
|
||||
|
||||
/* Common function to load a new FT_Face from a resource file. */
|
||||
static FT_Error
|
||||
FT_New_Face_From_Resource( FT_Library library,
|
||||
FT_New_Face_From_Resource( FT_Library library,
|
||||
const UInt8* pathname,
|
||||
FT_Long face_index,
|
||||
FT_Long face_index,
|
||||
FT_Face* aface )
|
||||
{
|
||||
OSType file_type;
|
||||
FT_Error error;
|
||||
|
||||
|
||||
/* LWFN is a (very) specific file format, check for it explicitly */
|
||||
/* LWFN is a (very) specific file format, check for it explicitly */
|
||||
file_type = get_file_type_from_path( pathname );
|
||||
if ( file_type == 'LWFN' )
|
||||
if ( file_type == 'LWFN' )
|
||||
return FT_New_Face_From_LWFN( library, pathname, face_index, aface );
|
||||
|
||||
/* Otherwise the file type doesn't matter (there are more than */
|
||||
/* `FFIL' and `tfil'). Just try opening it as a font suitcase; */
|
||||
/* if it works, fine. */
|
||||
|
||||
/* Otherwise the file type doesn't matter (there are more than */
|
||||
/* `FFIL' and `tfil'). Just try opening it as a font suitcase; */
|
||||
/* if it works, fine. */
|
||||
|
||||
error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface );
|
||||
if ( error == 0 )
|
||||
return error;
|
||||
if ( error == 0 )
|
||||
return error;
|
||||
|
||||
/* let it fall through to normal loader (.ttf, .otf, etc.); */
|
||||
/* we signal this by returning no error and no FT_Face */
|
||||
|
@ -1254,11 +1295,12 @@ found_no_lwfn_file:
|
|||
if ( !pathname )
|
||||
return FT_Err_Invalid_Argument;
|
||||
|
||||
error = 0;
|
||||
error = FT_Err_Ok;
|
||||
*aface = NULL;
|
||||
|
||||
/* try resourcefork based font: LWFN, FFIL */
|
||||
error = FT_New_Face_From_Resource( library, (UInt8 *)pathname, face_index, aface );
|
||||
error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
|
||||
face_index, aface );
|
||||
if ( error != 0 || *aface != NULL )
|
||||
return error;
|
||||
|
||||
|
@ -1281,12 +1323,16 @@ found_no_lwfn_file:
|
|||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_New_Face_From_FSRef( FT_Library library,
|
||||
const FSRef* ref,
|
||||
FT_Long face_index,
|
||||
FT_Long face_index,
|
||||
FT_Face* aface )
|
||||
{
|
||||
|
||||
#if !HAVE_FSREF
|
||||
|
||||
return FT_Err_Unimplemented_Feature;
|
||||
|
||||
#else
|
||||
|
||||
FT_Error error;
|
||||
FT_Open_Args args;
|
||||
OSErr err;
|
||||
|
@ -1308,7 +1354,9 @@ found_no_lwfn_file:
|
|||
args.flags = FT_OPEN_PATHNAME;
|
||||
args.pathname = (char*)pathname;
|
||||
return FT_Open_Face( library, &args, face_index, aface );
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_FSREF */
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1326,41 +1374,48 @@ found_no_lwfn_file:
|
|||
const FSSpec* spec,
|
||||
FT_Long face_index,
|
||||
FT_Face* aface )
|
||||
{
|
||||
{
|
||||
|
||||
#if HAVE_FSREF
|
||||
FSRef ref;
|
||||
|
||||
FSRef ref;
|
||||
|
||||
|
||||
if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr )
|
||||
return FT_Err_Invalid_Argument;
|
||||
else
|
||||
return FT_New_Face_From_FSRef( library, &ref, face_index, aface );
|
||||
|
||||
#elif HAVE_FSSPEC
|
||||
|
||||
FT_Error error;
|
||||
FT_Open_Args args;
|
||||
OSErr err;
|
||||
UInt8 pathname[HFS_MAXPATHLEN];
|
||||
OSErr err;
|
||||
UInt8 pathname[HFS_MAXPATHLEN];
|
||||
|
||||
|
||||
if ( !spec )
|
||||
return FT_Err_Invalid_Argument;
|
||||
|
||||
err = FT_FSpMakePath( spec, pathname, sizeof ( pathname ) );
|
||||
if ( err )
|
||||
error = FT_Err_Cannot_Open_Resource;
|
||||
if ( err )
|
||||
error = FT_Err_Cannot_Open_Resource;
|
||||
|
||||
error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
|
||||
if ( error != 0 || *aface != NULL )
|
||||
return error;
|
||||
|
||||
return error;
|
||||
|
||||
/* fallback to datafork font */
|
||||
args.flags = FT_OPEN_PATHNAME;
|
||||
args.pathname = (char*)pathname;
|
||||
return FT_Open_Face( library, &args, face_index, aface );
|
||||
|
||||
#else
|
||||
|
||||
return FT_Err_Unimplemented_Feature;
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_FSREF, HAVE_FSSPEC */
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue