1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* ftnames.c */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* Simple interface to access SFNT name tables (which are used */ 6*37da2899SCharles.Forsyth /* to hold font names, copyright info, notices, etc.) (body). */ 7*37da2899SCharles.Forsyth /* */ 8*37da2899SCharles.Forsyth /* This is _not_ used to retrieve glyph names! */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* Copyright 1996-2001, 2002 by */ 11*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 12*37da2899SCharles.Forsyth /* */ 13*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 14*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 15*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 16*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 17*37da2899SCharles.Forsyth /* understand and accept it fully. */ 18*37da2899SCharles.Forsyth /* */ 19*37da2899SCharles.Forsyth /***************************************************************************/ 20*37da2899SCharles.Forsyth 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth #include <ft2build.h> 23*37da2899SCharles.Forsyth #include FT_SFNT_NAMES_H 24*37da2899SCharles.Forsyth #include FT_INTERNAL_TRUETYPE_TYPES_H 25*37da2899SCharles.Forsyth #include FT_INTERNAL_STREAM_H 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsyth #ifdef TT_CONFIG_OPTION_SFNT_NAMES 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth 31*37da2899SCharles.Forsyth /* documentation is in ftnames.h */ 32*37da2899SCharles.Forsyth 33*37da2899SCharles.Forsyth FT_EXPORT_DEF( FT_UInt ) FT_Get_Sfnt_Name_Count(FT_Face face)34*37da2899SCharles.Forsyth FT_Get_Sfnt_Name_Count( FT_Face face ) 35*37da2899SCharles.Forsyth { 36*37da2899SCharles.Forsyth return (face && FT_IS_SFNT( face )) ? ((TT_Face)face)->num_names : 0; 37*37da2899SCharles.Forsyth } 38*37da2899SCharles.Forsyth 39*37da2899SCharles.Forsyth 40*37da2899SCharles.Forsyth /* documentation is in ftnames.h */ 41*37da2899SCharles.Forsyth 42*37da2899SCharles.Forsyth FT_EXPORT_DEF( FT_Error ) FT_Get_Sfnt_Name(FT_Face face,FT_UInt idx,FT_SfntName * aname)43*37da2899SCharles.Forsyth FT_Get_Sfnt_Name( FT_Face face, 44*37da2899SCharles.Forsyth FT_UInt idx, 45*37da2899SCharles.Forsyth FT_SfntName *aname ) 46*37da2899SCharles.Forsyth { 47*37da2899SCharles.Forsyth FT_Error error = FT_Err_Invalid_Argument; 48*37da2899SCharles.Forsyth 49*37da2899SCharles.Forsyth 50*37da2899SCharles.Forsyth if ( aname && face && FT_IS_SFNT( face ) ) 51*37da2899SCharles.Forsyth { 52*37da2899SCharles.Forsyth TT_Face ttface = (TT_Face)face; 53*37da2899SCharles.Forsyth 54*37da2899SCharles.Forsyth 55*37da2899SCharles.Forsyth if ( idx < (FT_UInt)ttface->num_names ) 56*37da2899SCharles.Forsyth { 57*37da2899SCharles.Forsyth TT_NameEntryRec* entry = ttface->name_table.names + idx; 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth 60*37da2899SCharles.Forsyth /* load name on demand */ 61*37da2899SCharles.Forsyth if ( entry->stringLength > 0 && entry->string == NULL ) 62*37da2899SCharles.Forsyth { 63*37da2899SCharles.Forsyth FT_Memory memory = face->memory; 64*37da2899SCharles.Forsyth FT_Stream stream = face->stream; 65*37da2899SCharles.Forsyth 66*37da2899SCharles.Forsyth 67*37da2899SCharles.Forsyth if ( FT_NEW_ARRAY ( entry->string, entry->stringLength ) || 68*37da2899SCharles.Forsyth FT_STREAM_SEEK( entry->stringOffset ) || 69*37da2899SCharles.Forsyth FT_STREAM_READ( entry->string, entry->stringLength ) ) 70*37da2899SCharles.Forsyth { 71*37da2899SCharles.Forsyth FT_FREE( entry->string ); 72*37da2899SCharles.Forsyth entry->stringLength = 0; 73*37da2899SCharles.Forsyth } 74*37da2899SCharles.Forsyth } 75*37da2899SCharles.Forsyth 76*37da2899SCharles.Forsyth aname->platform_id = entry->platformID; 77*37da2899SCharles.Forsyth aname->encoding_id = entry->encodingID; 78*37da2899SCharles.Forsyth aname->language_id = entry->languageID; 79*37da2899SCharles.Forsyth aname->name_id = entry->nameID; 80*37da2899SCharles.Forsyth aname->string = (FT_Byte*)entry->string; 81*37da2899SCharles.Forsyth aname->string_len = entry->stringLength; 82*37da2899SCharles.Forsyth 83*37da2899SCharles.Forsyth error = FT_Err_Ok; 84*37da2899SCharles.Forsyth } 85*37da2899SCharles.Forsyth } 86*37da2899SCharles.Forsyth 87*37da2899SCharles.Forsyth return error; 88*37da2899SCharles.Forsyth } 89*37da2899SCharles.Forsyth 90*37da2899SCharles.Forsyth 91*37da2899SCharles.Forsyth #endif /* TT_CONFIG_OPTION_SFNT_NAMES */ 92*37da2899SCharles.Forsyth 93*37da2899SCharles.Forsyth 94*37da2899SCharles.Forsyth /* END */ 95