xref: /inferno-os/libfreetype/ftnames.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
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