79#if !HAVE_ANSI_OS_INLINE
81#define OS_INLINE static __inline__
88#ifndef HAVE_TYPE_RESOURCE_INDEX
89#if !defined( MAC_OS_X_VERSION_10_5 ) || \
90 ( MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 )
91#define HAVE_TYPE_RESOURCE_INDEX 0
93#define HAVE_TYPE_RESOURCE_INDEX 1
97#if ( HAVE_TYPE_RESOURCE_INDEX == 0 )
98 typedef short ResourceIndex;
101#include <CoreServices/CoreServices.h>
102#include <ApplicationServices/ApplicationServices.h>
103#include <sys/syslimits.h>
106#define FT_DEPRECATED_ATTRIBUTE
110#ifndef kATSOptionFlagsUnRestrictedScope
111#define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault
133 return FT_THROW( Unimplemented_Feature );
143 FT_ATSFontGetFileReference( ATSFontRef ats_font_id,
144 FSRef* ats_font_ref )
146#if defined( MAC_OS_X_VERSION_10_5 ) && \
147 ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
151 err = ATSFontGetFileReference( ats_font_id, ats_font_ref );
165 err = ATSFontGetFileSpecification( ats_font_id, &spec );
167 err = FSpMakeFSRef( &spec, ats_font_ref );
175 FT_GetFileRef_From_Mac_ATS_Name(
const char*
fontName,
179 CFStringRef cf_fontName;
180 ATSFontRef ats_font_id;
185 cf_fontName = CFStringCreateWithCString(
NULL,
fontName,
186 kCFStringEncodingMacRoman );
187 ats_font_id = ATSFontFindFromName( cf_fontName,
188 kATSOptionFlagsUnRestrictedScope );
189 CFRelease( cf_fontName );
191 if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
192 return FT_THROW( Unknown_File_Format );
194 if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
195 return FT_THROW( Unknown_File_Format );
200 ATSFontRef id2 = ats_font_id - 1;
206 if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) )
208 if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) )
213 *face_index = ats_font_id - ( id2 + 1 );
233 err = FT_GetFileRef_From_Mac_ATS_Name(
fontName, &
ref, face_index );
237 if ( noErr != FSRefMakePath( &
ref,
path, maxPathSize ) )
238 return FT_THROW( Unknown_File_Format );
250#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \
251 ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) )
256 return FT_THROW( Unimplemented_Feature );
263 return FT_THROW( Invalid_Argument );
265 err = FT_GetFileRef_From_Mac_ATS_Name(
fontName, &
ref, face_index );
269 if ( noErr != FSGetCatalogInfo( &
ref, kFSCatInfoNone,
NULL,
NULL,
271 return FT_THROW( Unknown_File_Format );
287 return FT_THROW( Cannot_Open_Resource );
295 *
res = FSOpenResFile( &
ref, fsRdPerm );
313 if ( noErr != FSGetCatalogInfo( &
ref, kFSCatInfoFinderInfo, &
info,
317 return ((FInfo *)(
info.finderInfo))->fdType;
323 create_lwfn_name(
char* ps_name,
324 Str255 lwfn_file_name )
331 lwfn_file_name[0] = 0;
353 count_faces_sfnt(
char* fond_data )
358 return EndianS16_BtoN( *( (
short*)( fond_data +
359 sizeof ( FamRec ) ) ) ) + 1;
364 count_faces_scalable(
char* fond_data )
367 short i,
face, face_all;
370 face_all = EndianS16_BtoN( *( (
short *)( fond_data +
371 sizeof ( FamRec ) ) ) ) + 1;
372 assoc = (AsscEntry*)( fond_data +
sizeof ( FamRec ) + 2 );
375 for (
i = 0;
i < face_all;
i++ )
377 if ( 0 == EndianS16_BtoN( assoc[
i].fontSize ) )
393 parse_fond(
char* fond_data,
396 Str255 lwfn_file_name,
400 AsscEntry* base_assoc;
406 lwfn_file_name[0] = 0;
408 fond = (FamRec*)fond_data;
409 assoc = (AsscEntry*)( fond_data +
sizeof ( FamRec ) + 2 );
413 if ( 47 < face_index )
417 if ( face_index < count_faces_sfnt( fond_data ) )
423 if ( EndianS16_BtoN( assoc->fontSize ) == 0 )
426 *sfnt_id = EndianS16_BtoN( assoc->fontID );
428 else if ( base_assoc->fontSize == 0 )
431 *sfnt_id = EndianS16_BtoN( base_assoc->fontID );
435 if ( EndianS32_BtoN( fond->ffStylOff ) )
437 unsigned char*
p = (
unsigned char*)fond_data;
439 unsigned short string_count;
441 unsigned char*
names[64];
445 p += EndianS32_BtoN( fond->ffStylOff );
447 p +=
sizeof ( StyleTable );
448 string_count = EndianS16_BtoN( *(
short*)(
p) );
449 string_count =
FT_MIN( 64, string_count );
452 for (
i = 0;
i < string_count;
i++ )
463 if ( ps_name_len != 0 )
466 ps_name[ps_name_len] = 0;
468 if (
style->indexes[face_index] > 1 &&
469 style->indexes[face_index] <= string_count )
471 unsigned char* suffixes =
names[
style->indexes[face_index] - 1];
474 for (
i = 1;
i <= suffixes[0];
i++ )
477 size_t j = suffixes[
i] - 1;
485 if ( s_len != 0 && ps_name_len + s_len <
sizeof ( ps_name ) )
487 ft_memcpy( ps_name + ps_name_len,
s + 1, s_len );
488 ps_name_len += s_len;
489 ps_name[ps_name_len] = 0;
496 create_lwfn_name( ps_name, lwfn_file_name );
502 lookup_lwfn_by_fond(
const UInt8* path_fond,
503 ConstStr255Param base_lwfn,
514 if ( noErr != FSPathMakeRef( path_fond, &
ref,
FALSE ) )
515 return FT_THROW( Invalid_Argument );
517 if ( noErr != FSGetCatalogInfo( &
ref, kFSCatInfoNone,
519 return FT_THROW( Invalid_Argument );
521 if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) )
522 return FT_THROW( Invalid_Argument );
524 if (
ft_strlen( (
char *)path_lwfn ) + 1 + base_lwfn[0] > path_size )
525 return FT_THROW( Invalid_Argument );
529 dirname_len =
ft_strlen( (
char *)path_lwfn );
530 ft_strcat( (
char *)path_lwfn, (
char *)base_lwfn + 1 );
531 path_lwfn[dirname_len + base_lwfn[0]] =
'\0';
533 if ( noErr != FSPathMakeRef( path_lwfn, &
ref,
FALSE ) )
534 return FT_THROW( Cannot_Open_Resource );
536 if ( noErr != FSGetCatalogInfo( &
ref, kFSCatInfoNone,
538 return FT_THROW( Cannot_Open_Resource );
549 short have_sfnt, have_lwfn;
550 Str255 lwfn_file_name;
556 have_sfnt = have_lwfn = 0;
558 parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, 0 );
560 if ( lwfn_file_name[0] )
562 err = lookup_lwfn_by_fond(
pathname, lwfn_file_name,
568 if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
571 num_faces = count_faces_scalable( *fond );
595 char code, last_code;
611 code = (*post_data)[0];
613 if (
code != last_code )
625 if ( FT_MAC_RFORK_MAX_LEN < total_size )
631 old_total_size = total_size;
651 code = (*post_data)[0];
653 if (
code != last_code )
655 if ( last_code != -1 )
671 else if (
code == 2 )
684 pfb_chunk_size += post_size;
712 return FT_THROW( Cannot_Open_Resource );
721 return open_face_from_buffer(
library,
742 int is_cff, is_sfnt_ps;
752 if ( FT_MAC_RFORK_MAX_LEN < sfnt_size )
757 ReleaseResource(
sfnt );
762 ReleaseResource(
sfnt );
764 is_cff = sfnt_size > 4 && !
ft_memcmp( sfnt_data,
"OTTO", 4 );
765 is_sfnt_ps = sfnt_size > 4 && !
ft_memcmp( sfnt_data,
"typ1", 4 );
776 if ( !open_face_PS_from_sfnt_stream(
library,
795 is_cff ?
"cff" :
"truetype",
810 ResFileRefNum res_ref;
811 ResourceIndex res_index;
813 short num_faces_in_res;
816 if ( noErr != FT_FSPathMakeRes(
pathname, &res_ref ) )
817 return FT_THROW( Cannot_Open_Resource );
819 UseResFile( res_ref );
821 return FT_THROW( Cannot_Open_Resource );
823 num_faces_in_res = 0;
824 for ( res_index = 1; ; res_index++ )
826 short num_faces_in_fond;
829 fond = Get1IndResource(
TTAG_FOND, res_index );
833 num_faces_in_fond = count_faces( fond,
pathname );
834 num_faces_in_res += num_faces_in_fond;
836 if ( 0 <= face_index && face_index < num_faces_in_fond &&
error )
839 face_index -= num_faces_in_fond;
842 CloseResFile( res_ref );
843 if ( !
error && aface && *aface )
844 (*aface)->num_faces = num_faces_in_res;
857 short have_sfnt, have_lwfn = 0;
858 ResID sfnt_id, fond_id;
861 Str255 lwfn_file_name;
869 GetResInfo( fond, &fond_id, &fond_type, fond_name );
870 if ( ResError() != noErr || fond_type !=
TTAG_FOND )
871 return FT_THROW( Invalid_File_Format );
873 parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, face_index );
875 if ( lwfn_file_name[0] )
880 res = HomeResFile( fond );
881 if ( noErr != ResError() )
882 goto found_no_lwfn_file;
889 err = FSGetForkCBInfo(
res, kFSInvalidVolumeRefNum,
892 goto found_no_lwfn_file;
894 err = FSRefMakePath( &
ref, path_fond,
sizeof ( path_fond ) );
896 goto found_no_lwfn_file;
898 error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
899 path_lwfn,
sizeof ( path_lwfn ) );
905 if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
914 if ( have_sfnt &&
error )
979 return FT_THROW( Invalid_Argument );
986 if (
error || *aface )
1026 return FT_THROW( Invalid_Argument );
1033 if (
error || *aface )
1060#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \
1061 ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) )
1067 return FT_THROW( Unimplemented_Feature );
1074 if ( !spec || FSpMakeFSRef( spec, &
ref ) != noErr )
1075 return FT_THROW( Invalid_Argument );
static LPVOID GetResource(LPCWSTR FontName, LPDWORD Size)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
static unsigned char buff[32768]
FT_New_Face(FT_Library library, const char *filepathname, FT_Long face_index, FT_Face *aface)
FT_Open_Face(FT_Library library, const FT_Open_Args *args, FT_Long face_index, FT_Face *aface)
FT_GetFile_From_Mac_ATS_Name(const char *fontName, FSSpec *pathSpec, FT_Long *face_index) FT_DEPRECATED_ATTRIBUTE
FT_GetFile_From_Mac_Name(const char *fontName, FSSpec *pathSpec, FT_Long *face_index) FT_DEPRECATED_ATTRIBUTE
FT_GetFilePath_From_Mac_ATS_Name(const char *fontName, UInt8 *path, UInt32 maxPathSize, FT_Long *face_index) FT_DEPRECATED_ATTRIBUTE
FT_New_Face_From_FSSpec(FT_Library library, const FSSpec *spec, FT_Long face_index, FT_Face *aface) FT_DEPRECATED_ATTRIBUTE
FT_New_Face_From_FSRef(FT_Library library, const FSRef *ref, FT_Long face_index, FT_Face *aface) FT_DEPRECATED_ATTRIBUTE
FT_New_Face_From_FOND(FT_Library library, Handle fond, FT_Long face_index, FT_Face *aface) FT_DEPRECATED_ATTRIBUTE
#define FT_ALLOC(ptr, size)
FT_Stream_Close(FT_Stream stream)
FT_Stream_OpenMemory(FT_Stream stream, const FT_Byte *base, FT_ULong size)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble GLdouble q
GLenum GLuint GLint GLenum face
GLenum const GLvoid * fontName
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static char memory[1024 *256]
static const CHAR post_data[]
FD_TYPE file_type(FDSC **curr, char *fixed)