FT_Get_CID_Registry_Ordering_Supplement( FT_Face face, const char* *registry, const char* *ordering, FT_Int *supplement) { FT_Error error; const char* r = NULL; const char* o = NULL; FT_Int s = 0; error = FT_ERR( Invalid_Argument ); if ( face ) { FT_Service_CID service; FT_FACE_FIND_SERVICE( face, service, CID ); if ( service && service->get_ros ) error = service->get_ros( face, &r, &o, &s ); } if ( registry ) *registry = r; if ( ordering ) *ordering = o; if ( supplement ) *supplement = s; return error; }
FT_Get_FSType_Flags( FT_Face face ) { TT_OS2* os2; /* first, try to get the fs_type directly from the font */ if ( face ) { FT_Service_PsInfo service = NULL; FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); if ( service && service->ps_get_font_extra ) { PS_FontExtraRec extra; if ( !service->ps_get_font_extra( face, &extra ) && extra.fs_type != 0 ) return extra.fs_type; } } /* look at FSType before fsType for Type42 */ if ( ( os2 = (TT_OS2*)FT_Get_Sfnt_Table( face, ft_sfnt_os2 ) ) != NULL && os2->version != 0xFFFFU ) return os2->fsType; return 0; }
FT_Get_BDF_Property( FT_Face face, const char* prop_name, BDF_PropertyRec *aproperty ) { FT_Error error; FT_Service_BDF service; if ( !face ) return FT_THROW( Invalid_Face_Handle ); if ( !aproperty ) return FT_THROW( Invalid_Argument ); aproperty->type = BDF_PROPERTY_TYPE_NONE; FT_FACE_FIND_SERVICE( face, service, BDF ); if ( service && service->get_property ) error = service->get_property( face, prop_name, aproperty ); else error = FT_THROW( Invalid_Argument ); return error; }
static FT_Bool _tt_check_patents_in_table( FT_Face face, FT_ULong tag ) { FT_Stream stream = face->stream; FT_Error error = FT_Err_Ok; FT_Service_SFNT_Table service; FT_Bool result = FALSE; FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE ); if ( service ) { FT_UInt i = 0; FT_ULong tag_i = 0, offset_i = 0, length_i = 0; for ( i = 0; !error && tag_i != tag ; i++ ) error = service->table_info( face, i, &tag_i, &offset_i, &length_i ); if ( error || FT_STREAM_SEEK( offset_i ) ) goto Exit; result = _tt_check_patents_in_range( stream, length_i ); } Exit: return result; }
FT_Get_BDF_Charset_ID( FT_Face face, const char* *acharset_encoding, const char* *acharset_registry ) { FT_Error error; const char* encoding = NULL; const char* registry = NULL; FT_Service_BDF service; if ( !face ) return FT_THROW( Invalid_Face_Handle ); FT_FACE_FIND_SERVICE( face, service, BDF ); if ( service && service->get_charset_id ) error = service->get_charset_id( face, &encoding, ®istry ); else error = FT_THROW( Invalid_Argument ); if ( acharset_encoding ) *acharset_encoding = encoding; if ( acharset_registry ) *acharset_registry = registry; return error; }
static FT_Bool _tt_check_patents_in_table( FT_Face face, FT_ULong tag ) { FT_Stream stream = face->stream; FT_Error error; FT_Service_SFNT_Table service; FT_Bool result = FALSE; FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE ); if ( service ) { FT_ULong offset, size; error = service->table_info( face, tag, &offset, &size ); if ( error || FT_STREAM_SEEK( offset ) ) goto Exit; result = _tt_check_patents_in_range( stream, size ); } Exit: return result; }
FT_Get_Font_Format( FT_Face face ) { const char* result = NULL; if ( face ) FT_FACE_FIND_SERVICE( face, result, FONT_FORMAT ); return result; }
FT_Get_X11_Font_Format( FT_Face face ) { const char* result = NULL; if ( face ) FT_FACE_FIND_SERVICE( face, result, XF86_NAME ); return result; }
FT_Has_PS_Glyph_Names( FT_Face face ) { FT_Int result = 0; FT_Service_PsInfo service = NULL; if ( face ) { FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); if ( service && service->ps_has_glyph_names ) result = service->ps_has_glyph_names( face ); } return result; }
FT_Get_PS_Font_Value( FT_Face face, PS_Dict_Keys key, FT_UInt idx, void *value, FT_Long value_len ) { FT_Int result = 0; FT_Service_PsInfo service = NULL; if ( face ) { FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); if ( service && service->ps_get_font_value ) result = service->ps_get_font_value( face, key, idx, value, value_len ); } return result; }
FT_Get_PS_Font_Private( FT_Face face, PS_PrivateRec* afont_private ) { FT_Error error = FT_ERR( Invalid_Argument ); if ( face ) { FT_Service_PsInfo service = NULL; FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); if ( service && service->ps_get_font_private ) error = service->ps_get_font_private( face, afont_private ); } return error; }
FT_Get_PS_Font_Info( FT_Face face, PS_FontInfoRec* afont_info ) { FT_Error error = FT_Err_Invalid_Argument; if ( face ) { FT_Service_PsInfo service = NULL; FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); if ( service && service->ps_get_font_info ) error = service->ps_get_font_info( face, afont_info ); } return error; }
FT_Get_PS_Font_Private( FT_Face face, PS_PrivateRec* afont_private ) { FT_Error error; FT_Service_PsInfo service; if ( !face ) return FT_THROW( Invalid_Face_Handle ); if ( !afont_private ) return FT_THROW( Invalid_Argument ); FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); if ( service && service->ps_get_font_private ) error = service->ps_get_font_private( face, afont_private ); else error = FT_THROW( Invalid_Argument ); return error; }
FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face, FT_Bool *is_cid ) { FT_Error error = FT_ERR( Invalid_Argument ); FT_Bool ic = 0; if ( face ) { FT_Service_CID service; FT_FACE_FIND_SERVICE( face, service, CID ); if ( service && service->get_is_cid ) error = service->get_is_cid( face, &ic); } if ( is_cid ) *is_cid = ic; return error; }
FT_Get_BDF_Property( FT_Face face, const char* prop_name, BDF_PropertyRec *aproperty ) { FT_Error error; error = FT_ERR( Invalid_Argument ); aproperty->type = BDF_PROPERTY_TYPE_NONE; if ( face ) { FT_Service_BDF service; FT_FACE_FIND_SERVICE( face, service, BDF ); if ( service && service->get_property ) error = service->get_property( face, prop_name, aproperty ); } return error; }
FT_Get_CID_From_Glyph_Index( FT_Face face, FT_UInt glyph_index, FT_UInt *cid ) { FT_Error error = FT_ERR( Invalid_Argument ); FT_UInt c = 0; if ( face ) { FT_Service_CID service; FT_FACE_FIND_SERVICE( face, service, CID ); if ( service && service->get_cid_from_glyph_index ) error = service->get_cid_from_glyph_index( face, glyph_index, &c); } if ( cid ) *cid = c; return error; }
static FT_Bool _tt_face_check_patents( FT_Face face ) { FT_Stream stream = face->stream; FT_UInt gindex; FT_Error error; FT_Bool result; FT_Service_TTGlyf service; result = _tt_check_patents_in_table( face, TTAG_fpgm ); if ( result ) goto Exit; result = _tt_check_patents_in_table( face, TTAG_prep ); if ( result ) goto Exit; FT_FACE_FIND_SERVICE( face, service, TT_GLYF ); if ( service == NULL ) goto Exit; for ( gindex = 0; gindex < (FT_UInt)face->num_glyphs; gindex++ ) { FT_ULong offset, num_ins, size; FT_Int num_contours; offset = service->get_location( face, gindex, &size ); if ( size == 0 ) continue; if ( FT_STREAM_SEEK( offset ) || FT_READ_SHORT( num_contours ) ) continue; if ( num_contours >= 0 ) /* simple glyph */ { if ( FT_STREAM_SKIP( 8 + num_contours * 2 ) ) continue; } else /* compound glyph */ { FT_Bool has_instr = 0; if ( FT_STREAM_SKIP( 8 ) ) continue; /* now read each component */ for (;;) { FT_UInt flags, toskip; if( FT_READ_USHORT( flags ) ) break; toskip = 2 + 1 + 1; if ( ( flags & ( 1 << 0 ) ) != 0 ) /* ARGS_ARE_WORDS */ toskip += 2; if ( ( flags & ( 1 << 3 ) ) != 0 ) /* WE_HAVE_A_SCALE */ toskip += 2; else if ( ( flags & ( 1 << 6 ) ) != 0 ) /* WE_HAVE_X_Y_SCALE */ toskip += 4; else if ( ( flags & ( 1 << 7 ) ) != 0 ) /* WE_HAVE_A_2x2 */ toskip += 8; if ( ( flags & ( 1 << 8 ) ) != 0 ) /* WE_HAVE_INSTRUCTIONS */ has_instr = 1; if ( FT_STREAM_SKIP( toskip ) ) goto NextGlyph; if ( ( flags & ( 1 << 5 ) ) == 0 ) /* MORE_COMPONENTS */ break; } if ( !has_instr ) goto NextGlyph; } if ( FT_READ_USHORT( num_ins ) ) continue; result = _tt_check_patents_in_range( stream, num_ins ); if ( result ) goto Exit; NextGlyph: ; } Exit: return result; }