1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/*  ftsnames.c                                                             */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    Simple interface to access SFNT name tables (which are used          */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    to hold font names, copyright info, notices, etc.) (body).           */
7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    This is _not_ used to retrieve glyph names!                          */
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
10295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/*  Copyright 1996-2001, 2002, 2009 by                                     */
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  This file is part of the FreeType project, and may only be used,       */
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  modified, and distributed under the terms of the FreeType project      */
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  this file you indicate that you have read the license and              */
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  understand and accept it fully.                                        */
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h>
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SFNT_NAMES_H
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_TRUETYPE_TYPES_H
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_STREAM_H
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_SFNT_NAMES
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
31295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  /* documentation is in ftsnames.h */
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_EXPORT_DEF( FT_UInt )
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_Get_Sfnt_Name_Count( FT_Face  face )
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
36295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    return ( face && FT_IS_SFNT( face ) ) ? ((TT_Face)face)->num_names : 0;
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
40295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  /* documentation is in ftsnames.h */
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_EXPORT_DEF( FT_Error )
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_Get_Sfnt_Name( FT_Face       face,
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                    FT_UInt       idx,
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                    FT_SfntName  *aname )
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
47727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Error  error = FT_ERR( Invalid_Argument );
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( aname && face && FT_IS_SFNT( face ) )
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      TT_Face  ttface = (TT_Face)face;
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( idx < (FT_UInt)ttface->num_names )
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      {
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        TT_NameEntryRec*  entry = ttface->name_table.names + idx;
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        /* load name on demand */
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        if ( entry->stringLength > 0 && entry->string == NULL )
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        {
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          FT_Memory  memory = face->memory;
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          FT_Stream  stream = face->stream;
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          if ( FT_NEW_ARRAY  ( entry->string, entry->stringLength ) ||
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project               FT_STREAM_SEEK( entry->stringOffset )                ||
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project               FT_STREAM_READ( entry->string, entry->stringLength ) )
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          {
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            FT_FREE( entry->string );
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            entry->stringLength = 0;
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          }
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        }
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        aname->platform_id = entry->platformID;
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        aname->encoding_id = entry->encodingID;
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        aname->language_id = entry->languageID;
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        aname->name_id     = entry->nameID;
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        aname->string      = (FT_Byte*)entry->string;
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        aname->string_len  = entry->stringLength;
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        error = FT_Err_Ok;
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      }
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    return error;
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_SFNT_NAMES */
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
95