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