EXPORT_FUNC TT_Error TT_Load_Kerning_Table( TT_Face face, TT_UShort kern_index ) { TT_Error error; TT_Stream stream; TT_Kerning* kern; TT_Kern_Subtable* sub; PFace faze = HANDLE_Face( face ); if ( !faze ) return TT_Err_Invalid_Face_Handle; error = TT_Extension_Get( faze, KERNING_ID, (void**)&kern ); if ( error ) return error; if ( kern->nTables == 0 ) return TT_Err_Table_Missing; if ( kern_index >= kern->nTables ) return TT_Err_Invalid_Argument; sub = kern->tables + kern_index; if ( sub->format != 0 && sub->format != 2 ) return TT_Err_Invalid_Kerning_Table_Format; /* now access stream */ if ( USE_Stream( faze->stream, stream ) ) return error; if ( FILE_Seek( sub->offset ) ) goto Fail; if ( sub->format == 0 ) error = Subtable_Load_0( &sub->t.kern0, faze ); else if ( sub->format == 2 ) error = Subtable_Load_2( &sub->t.kern2, faze ); if ( !error ) sub->loaded = TRUE; Fail: /* release stream */ DONE_Stream( stream ); return error; }
TT_Get_Kerning_Directory( TT_Face face, TT_Kerning* directory ) { PFace faze = HANDLE_Face( face ); TT_Error error; TT_Kerning* kerning; if ( !faze ) return TT_Err_Invalid_Face_Handle; /* copy directory header */ error = TT_Extension_Get( faze, KERNING_ID, (void**)&kerning ); if ( !error ) *directory = *kerning; return error; }