* Add FT_GetFilePath_From_Mac_ATS_Name as replacement for FT_GetFile_From_Mac_ATS_Name
This commit is contained in:
parent
027357f1c8
commit
4827e9bd2c
|
@ -1,3 +1,12 @@
|
||||||
|
2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||||
|
|
||||||
|
* include/freetype/ftmac.h (FT_GetFilePath_From_Mac_ATS_Name):
|
||||||
|
Introduced as replacement of FT_GetFile_From_Mac_ATS_Name.
|
||||||
|
* src/base/ftmac.c (FT_GetFilePath_From_Mac_ATS_Name): Ditto.
|
||||||
|
(FT_GetFile_From_Mac_ATS_Name): Rewritten as wrapper of
|
||||||
|
FT_GetFilePath_From_Mac_ATS_Name.
|
||||||
|
* builds/mac/ftmac.c: Ditto.
|
||||||
|
|
||||||
2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||||
|
|
||||||
* include/freetype/ftmac.h: Fixed wrong comment, FSSpec of
|
* include/freetype/ftmac.h: Fixed wrong comment, FSSpec of
|
||||||
|
|
|
@ -243,22 +243,34 @@
|
||||||
#endif /* HAVE_QUICKDRAW_CARBON */
|
#endif /* HAVE_QUICKDRAW_CARBON */
|
||||||
|
|
||||||
|
|
||||||
#if !HAVE_ATS
|
#if HAVE_ATS
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
/* Private function. */
|
||||||
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
/* The FSSpec type has been discouraged for a long time, */
|
||||||
FSSpec* pathSpec,
|
/* but for some reason, there is no FSRef version of */
|
||||||
FT_Long* face_index )
|
/* ATSFontGetFileSpecification(), so we made our own. */
|
||||||
|
/* Apple will provide one eventually. */
|
||||||
|
static OSStatus
|
||||||
|
FT_ATSFontGetFileReference( ATSFontRef ats_font_id,
|
||||||
|
FSRef* ats_font_ref )
|
||||||
{
|
{
|
||||||
return FT_Err_Unimplemented_Feature;
|
OSStatus err;
|
||||||
|
FSSpec spec;
|
||||||
|
|
||||||
|
err = ATSFontGetFileSpecification( ats_font_id, &spec );
|
||||||
|
if ( noErr == err )
|
||||||
|
{
|
||||||
|
err = FSpMakeFSRef( &spec, ats_font_ref );
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
static FT_Error
|
||||||
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
FT_GetFileRef_From_Mac_ATS_Name( const char* fontName,
|
||||||
FSSpec* pathSpec,
|
FSRef* ats_font_ref,
|
||||||
FT_Long* face_index )
|
FT_Long* face_index )
|
||||||
{
|
{
|
||||||
CFStringRef cf_fontName;
|
CFStringRef cf_fontName;
|
||||||
ATSFontRef ats_font_id;
|
ATSFontRef ats_font_id;
|
||||||
|
@ -274,36 +286,104 @@
|
||||||
if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
|
if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
|
||||||
return FT_Err_Unknown_File_Format;
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
if ( 0 != ATSFontGetFileSpecification( ats_font_id, pathSpec ) )
|
if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
|
||||||
return FT_Err_Unknown_File_Format;
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
/* face_index calculation by searching preceding fontIDs */
|
/* face_index calculation by searching preceding fontIDs */
|
||||||
/* with same FSRef */
|
/* with same FSRef */
|
||||||
{
|
{
|
||||||
int i;
|
ATSFontRef id2 = ats_font_id - 1;
|
||||||
FSSpec f;
|
FSRef ref2;
|
||||||
|
|
||||||
|
|
||||||
for ( i = 1; i < ats_font_id; i++ )
|
while ( id2 > 0 )
|
||||||
{
|
{
|
||||||
if ( 0 != ATSFontGetFileSpecification( ats_font_id - i,
|
if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) )
|
||||||
&f ) ||
|
|
||||||
f.vRefNum != pathSpec->vRefNum ||
|
|
||||||
f.parID != pathSpec->parID ||
|
|
||||||
f.name[0] != pathSpec->name[0] ||
|
|
||||||
0 != ft_strncmp( (char *)f.name + 1,
|
|
||||||
(char *)pathSpec->name + 1,
|
|
||||||
f.name[0] ) )
|
|
||||||
break;
|
break;
|
||||||
|
if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) )
|
||||||
|
break;
|
||||||
|
|
||||||
|
id2 --;
|
||||||
}
|
}
|
||||||
*face_index = ( i - 1 );
|
*face_index = ats_font_id - ( id2 + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return FT_Err_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_ATS
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
UInt8* path,
|
||||||
|
UInt32 maxPathSize,
|
||||||
|
FT_Long* face_index )
|
||||||
|
{
|
||||||
|
return FT_Err_Unimplemented_Feature;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
UInt8* path,
|
||||||
|
UInt32 maxPathSize,
|
||||||
|
FT_Long* face_index )
|
||||||
|
{
|
||||||
|
FSRef ref;
|
||||||
|
FT_Error err;
|
||||||
|
|
||||||
|
|
||||||
|
err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
|
||||||
|
if ( FT_Err_Ok != err )
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
|
||||||
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
return FT_Err_Ok;
|
return FT_Err_Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_ATS */
|
#endif /* HAVE_ATS */
|
||||||
|
|
||||||
|
|
||||||
|
#if !HAVE_FSSPEC
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
FSSpec* pathSpec,
|
||||||
|
FT_Long* face_index )
|
||||||
|
{
|
||||||
|
return FT_Err_Unimplemented_Feature;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* This function is deprecated because FSSpec is deprecated in Mac OS X */
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
FSSpec* pathSpec,
|
||||||
|
FT_Long* face_index )
|
||||||
|
{
|
||||||
|
FSRef ref;
|
||||||
|
FT_Error err;
|
||||||
|
|
||||||
|
err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
|
||||||
|
if ( FT_Err_Ok != err )
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
|
||||||
|
pathSpec, NULL ) )
|
||||||
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
|
return FT_Err_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
|
#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
|
||||||
|
|
||||||
#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer )
|
#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer )
|
||||||
|
|
|
@ -147,6 +147,37 @@ FT_BEGIN_HEADER
|
||||||
FT_Long* face_index );
|
FT_Long* face_index );
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* <Function> */
|
||||||
|
/* FT_GetFilePath_From_Mac_ATS_Name */
|
||||||
|
/* */
|
||||||
|
/* <Description> */
|
||||||
|
/* Return a pathname of the disk file and face index for given font */
|
||||||
|
/* name which is handled by ATS framework. */
|
||||||
|
/* */
|
||||||
|
/* <Input> */
|
||||||
|
/* fontName :: Mac OS name of the font in ATS framework. */
|
||||||
|
/* */
|
||||||
|
/* <Output> */
|
||||||
|
/* path :: Buffer to store pathname of the file. For passing */
|
||||||
|
/* to @FT_New_Face. The client must allocate this */
|
||||||
|
/* buffer before calling this function. */
|
||||||
|
/* */
|
||||||
|
/* maxPathSize :: Lengths of the buffer `path' that client allocated. */
|
||||||
|
/* */
|
||||||
|
/* face_index :: Index of the face. For passing to @FT_New_Face. */
|
||||||
|
/* */
|
||||||
|
/* <Return> */
|
||||||
|
/* FreeType error code. 0 means success. */
|
||||||
|
/* */
|
||||||
|
FT_EXPORT( FT_Error )
|
||||||
|
FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
UInt8* path,
|
||||||
|
UInt32 maxPathSize,
|
||||||
|
FT_Long* face_index );
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* <Function> */
|
/* <Function> */
|
||||||
|
|
100
src/base/ftmac.c
100
src/base/ftmac.c
|
@ -108,10 +108,32 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
/* Private function. */
|
||||||
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
/* The FSSpec type has been discouraged for a long time, */
|
||||||
FSSpec* pathSpec,
|
/* but for some reason, there is no FSRef version of */
|
||||||
FT_Long* face_index )
|
/* ATSFontGetFileSpecification(), so we made our own. */
|
||||||
|
/* Apple will provide one eventually. */
|
||||||
|
static OSStatus
|
||||||
|
FT_ATSFontGetFileReference( ATSFontRef ats_font_id,
|
||||||
|
FSRef* ats_font_ref )
|
||||||
|
{
|
||||||
|
OSStatus err;
|
||||||
|
FSSpec spec;
|
||||||
|
|
||||||
|
err = ATSFontGetFileSpecification( ats_font_id, &spec );
|
||||||
|
if ( noErr == err )
|
||||||
|
{
|
||||||
|
err = FSpMakeFSRef( &spec, ats_font_ref );
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static FT_Error
|
||||||
|
FT_GetFileRef_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
FSRef* ats_font_ref,
|
||||||
|
FT_Long* face_index )
|
||||||
{
|
{
|
||||||
CFStringRef cf_fontName;
|
CFStringRef cf_fontName;
|
||||||
ATSFontRef ats_font_id;
|
ATSFontRef ats_font_id;
|
||||||
|
@ -127,34 +149,78 @@
|
||||||
if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
|
if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
|
||||||
return FT_Err_Unknown_File_Format;
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
if ( 0 != ATSFontGetFileSpecification( ats_font_id, pathSpec ) )
|
if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
|
||||||
return FT_Err_Unknown_File_Format;
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
/* face_index calculation by searching preceding fontIDs */
|
/* face_index calculation by searching preceding fontIDs */
|
||||||
/* with same FSRef */
|
/* with same FSRef */
|
||||||
{
|
{
|
||||||
int i;
|
ATSFontRef id2 = ats_font_id - 1;
|
||||||
FSSpec f;
|
FSRef ref2;
|
||||||
|
|
||||||
|
|
||||||
for ( i = 1; i < ats_font_id; i++ )
|
while ( id2 > 0 )
|
||||||
{
|
{
|
||||||
if ( 0 != ATSFontGetFileSpecification( ats_font_id - i,
|
if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) )
|
||||||
&f ) ||
|
|
||||||
f.vRefNum != pathSpec->vRefNum ||
|
|
||||||
f.parID != pathSpec->parID ||
|
|
||||||
f.name[0] != pathSpec->name[0] ||
|
|
||||||
0 != ft_strncmp( (char *)f.name + 1,
|
|
||||||
(char *)pathSpec->name + 1,
|
|
||||||
f.name[0] ) )
|
|
||||||
break;
|
break;
|
||||||
|
if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) )
|
||||||
|
break;
|
||||||
|
|
||||||
|
id2 --;
|
||||||
}
|
}
|
||||||
*face_index = ( i - 1 );
|
*face_index = ats_font_id - ( id2 + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return FT_Err_Ok;
|
return FT_Err_Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
UInt8* path,
|
||||||
|
UInt32 maxPathSize,
|
||||||
|
FT_Long* face_index )
|
||||||
|
{
|
||||||
|
FSRef ref;
|
||||||
|
FT_Error err;
|
||||||
|
|
||||||
|
|
||||||
|
err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
|
||||||
|
if ( FT_Err_Ok != err )
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
|
||||||
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
|
return FT_Err_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* This function is deprecated because FSSpec is deprecated in Mac OS X */
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
|
||||||
|
FSSpec* pathSpec,
|
||||||
|
FT_Long* face_index )
|
||||||
|
{
|
||||||
|
#if __LP64__
|
||||||
|
return FT_Err_Unimplemented_Feature;
|
||||||
|
#else
|
||||||
|
FSRef ref;
|
||||||
|
FT_Error err;
|
||||||
|
|
||||||
|
err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
|
||||||
|
if ( FT_Err_Ok != err )
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
|
||||||
|
pathSpec, NULL ) )
|
||||||
|
return FT_Err_Unknown_File_Format;
|
||||||
|
|
||||||
|
return FT_Err_Ok;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static OSErr
|
static OSErr
|
||||||
FT_FSPathMakeRes( const UInt8* pathname,
|
FT_FSPathMakeRes( const UInt8* pathname,
|
||||||
short* res )
|
short* res )
|
||||||
|
|
Loading…
Reference in New Issue