FT_New_Face( FT_Library library, const char* pathname, FT_Long face_index, FT_Face* aface ) { FT_Open_Args args; FT_Error error; /* test for valid `library' and `aface' delayed to FT_Open_Face() */ if ( !pathname ) return FT_Err_Invalid_Argument; error = FT_Err_Ok; *aface = NULL; /* try resourcefork based font: LWFN, FFIL */ error = FT_New_Face_From_Resource( library, (UInt8 *)pathname, face_index, aface ); if ( error != 0 || *aface != NULL ) return error; /* let it fall through to normal loader (.ttf, .otf, etc.) */ args.flags = FT_OPEN_PATHNAME; args.pathname = (char*)pathname; return FT_Open_Face( library, &args, face_index, aface ); }
FT_New_Face_From_FSRef( FT_Library library, const FSRef* ref, FT_Long face_index, FT_Face* aface ) { FT_Error error; FT_Open_Args args; OSErr err; UInt8 pathname[PATH_MAX]; if ( !ref ) return FT_Err_Invalid_Argument; err = FSRefMakePath( ref, pathname, sizeof ( pathname ) ); 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; /* fallback to datafork font */ args.flags = FT_OPEN_PATHNAME; args.pathname = (char*)pathname; return FT_Open_Face( library, &args, face_index, aface ); }
FT_New_Face_From_FSRef( FT_Library library, const FSRef* ref, FT_Long face_index, FT_Face* aface ) { FT_Error error; FT_Open_Args args; OSErr err; UInt8 pathname[PATH_MAX]; /* check of `library' and `aface' delayed to */ /* `FT_New_Face_From_Resource' */ if ( !ref ) return FT_THROW( Invalid_Argument ); err = FSRefMakePath( ref, pathname, sizeof ( pathname ) ); if ( err ) error = FT_THROW( Cannot_Open_Resource ); error = FT_New_Face_From_Resource( library, pathname, face_index, aface ); if ( error || *aface ) return error; /* fallback to datafork font */ args.flags = FT_OPEN_PATHNAME; args.pathname = (char*)pathname; return FT_Open_Face( library, &args, face_index, aface ); }
FT_New_Face_From_FSSpec( FT_Library library, const FSSpec* spec, FT_Long face_index, FT_Face* aface ) { #if HAVE_FSREF FSRef ref; if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr ) return FT_THROW( 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[PATH_MAX]; if ( !spec ) return FT_THROW( Invalid_Argument ); err = FT_FSpMakePath( spec, pathname, sizeof ( pathname ) ); if ( err ) error = FT_ERR( Cannot_Open_Resource ); error = FT_New_Face_From_Resource( library, pathname, face_index, aface ); if ( error || *aface ) 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 FT_UNUSED( library ); FT_UNUSED( spec ); FT_UNUSED( face_index ); FT_UNUSED( aface ); return FT_THROW( Unimplemented_Feature ); #endif /* HAVE_FSREF, HAVE_FSSPEC */ }
FT_New_Face_From_FSRef( FT_Library library, const FSRef* ref, FT_Long face_index, FT_Face* aface ) { #if !HAVE_FSREF FT_UNUSED( library ); FT_UNUSED( ref ); FT_UNUSED( face_index ); FT_UNUSED( aface ); return FT_THROW( Unimplemented_Feature ); #else FT_Error error; FT_Open_Args args; OSErr err; UInt8 pathname[PATH_MAX]; /* test for valid `library' and `aface' delayed to `FT_Open_Face' */ if ( !ref ) return FT_THROW( Invalid_Argument ); err = FSRefMakePath( ref, pathname, sizeof ( pathname ) ); if ( err ) error = FT_ERR( Cannot_Open_Resource ); error = FT_New_Face_From_Resource( library, pathname, face_index, aface ); if ( error || *aface ) return error; /* fallback to datafork font */ args.flags = FT_OPEN_PATHNAME; args.pathname = (char*)pathname; return FT_Open_Face( library, &args, face_index, aface ); #endif /* HAVE_FSREF */ }
FT_New_Face_From_FSRef( FT_Library library, const FSRef* ref, FT_Long face_index, FT_Face* aface ) { #if !HAVE_FSREF FT_UNUSED( library ); FT_UNUSED( ref ); FT_UNUSED( face_index ); FT_UNUSED( aface ); return FT_Err_Unimplemented_Feature; #else FT_Error error; FT_Open_Args args; OSErr err; UInt8 pathname[HFS_MAXPATHLEN]; if ( !ref ) return FT_Err_Invalid_Argument; err = FSRefMakePath( ref, pathname, sizeof ( pathname ) ); 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; /* fallback to datafork font */ args.flags = FT_OPEN_PATHNAME; args.pathname = (char*)pathname; return FT_Open_Face( library, &args, face_index, aface ); #endif /* HAVE_FSREF */ }
FT_New_Face( FT_Library library, const FT_Open_Args* args, FT_Long face_index, FT_Face* aface ) { FT_Error error; /* test for valid `library' and `aface' delayed to FT_Open_Face() */ if ( !args || !args->pathname ) return FT_THROW( Invalid_Argument ); *aface = NULL; /* try resourcefork based font: LWFN, FFIL */ error = FT_New_Face_From_Resource( library, (UInt8 *)args->pathname, face_index, aface ); if ( error || *aface ) return error; /* let it fall through to normal loader (.ttf, .otf, etc.) */ return FT_Open_Face( library, args, face_index, aface ); }