1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  ttbdf.c                                                                */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    TrueType and OpenType embedded BDF properties (body).                */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  Copyright 2005, 2006, 2010, 2013 by                                    */
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  This file is part of the FreeType project, and may only be used,       */
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  modified, and distributed under the terms of the FreeType project      */
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  this file you indicate that you have read the license and              */
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  understand and accept it fully.                                        */
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h>
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_STREAM_H
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_TRUETYPE_TAGS_H
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttbdf.h"
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "sferrors.h"
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_BDF
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* messages during execution.                                            */
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef  FT_COMPONENT
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT  trace_ttbdf
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL_DEF( void )
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  tt_face_free_bdf_props( TT_Face  face )
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_BDF  bdf = &face->bdf;
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( bdf->loaded )
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_Stream  stream = FT_FACE(face)->stream;
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( bdf->table != NULL )
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        FT_FRAME_RELEASE( bdf->table );
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bdf->table_end    = NULL;
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bdf->strings      = NULL;
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bdf->strings_size = 0;
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  static FT_Error
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  tt_face_load_bdf_props( TT_Face    face,
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                          FT_Stream  stream )
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_BDF    bdf = &face->bdf;
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_ULong  length;
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Error  error;
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_ZERO( bdf );
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    error = tt_face_goto_table( face, TTAG_BDF, stream, &length );
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( error                                  ||
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project         length < 8                             ||
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project         FT_FRAME_EXTRACT( length, bdf->table ) )
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      error = FT_THROW( Invalid_Table );
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      goto Exit;
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    bdf->table_end = bdf->table + length;
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_Byte*   p           = bdf->table;
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_UInt    version     = FT_NEXT_USHORT( p );
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_UInt    num_strikes = FT_NEXT_USHORT( p );
87295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner      FT_ULong   strings     = FT_NEXT_ULONG ( p );
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_UInt    count;
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_Byte*   strike;
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( version != 0x0001                 ||
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project           strings < 8                       ||
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project           ( strings - 8 ) / 4 < num_strikes ||
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project           strings + 1 > length              )
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      {
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        goto BadTable;
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      }
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bdf->num_strikes  = num_strikes;
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bdf->strings      = bdf->table + strings;
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      bdf->strings_size = length - strings;
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      count  = bdf->num_strikes;
105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      p      = bdf->table + 8;
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      strike = p + count * 4;
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      for ( ; count > 0; count-- )
110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      {
111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        FT_UInt  num_items = FT_PEEK_USHORT( p + 2 );
112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        /*
114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project         *  We don't need to check the value sets themselves, since this
115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project         *  is done later.
116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project         */
117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        strike += 10 * num_items;
118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        p += 4;
120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      }
121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( strike > bdf->strings )
123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        goto BadTable;
124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    bdf->loaded = 1;
127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  Exit:
129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    return error;
130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  BadTable:
132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_FRAME_RELEASE( bdf->table );
133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_ZERO( bdf );
134a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    error = FT_THROW( Invalid_Table );
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    goto Exit;
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL_DEF( FT_Error )
140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  tt_face_find_bdf_prop( TT_Face           face,
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                         const char*       property_name,
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                         BDF_PropertyRec  *aprop )
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
144295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    TT_BDF     bdf   = &face->bdf;
145295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    FT_Size    size  = FT_FACE(face)->size;
146a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    FT_Error   error = FT_Err_Ok;
147295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    FT_Byte*   p;
148295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    FT_UInt    count;
149295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    FT_Byte*   strike;
150295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    FT_Offset  property_len;
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    aprop->type = BDF_PROPERTY_TYPE_NONE;
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( bdf->loaded == 0 )
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      error = tt_face_load_bdf_props( face, FT_FACE( face )->stream );
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( error )
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        goto Exit;
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    count  = bdf->num_strikes;
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    p      = bdf->table + 8;
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    strike = p + 4 * count;
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
166a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    error = FT_ERR( Invalid_Argument );
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( size == NULL || property_name == NULL )
169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      goto Exit;
170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    property_len = ft_strlen( property_name );
172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( property_len == 0 )
173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      goto Exit;
174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    for ( ; count > 0; count-- )
176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_UInt  _ppem  = FT_NEXT_USHORT( p );
178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_UInt  _count = FT_NEXT_USHORT( p );
179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( _ppem == size->metrics.y_ppem )
181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      {
182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        count = _count;
183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        goto FoundStrike;
184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      }
185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      strike += 10 * _count;
187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    goto Exit;
189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FoundStrike:
191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    p = strike;
192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    for ( ; count > 0; count-- )
193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    {
194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_UInt  type = FT_PEEK_USHORT( p + 4 );
195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      if ( ( type & 0x10 ) != 0 )
197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      {
198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        FT_UInt32  name_offset = FT_PEEK_ULONG( p     );
199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        FT_UInt32  value       = FT_PEEK_ULONG( p + 6 );
200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        /* be a bit paranoid for invalid entries here */
202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        if ( name_offset < bdf->strings_size                    &&
203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project             property_len < bdf->strings_size - name_offset     &&
204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project             ft_strncmp( property_name,
205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                         (const char*)bdf->strings + name_offset,
206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                         bdf->strings_size - name_offset ) == 0 )
207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        {
208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          switch ( type & 0x0F )
209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          {
210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          case 0x00:  /* string */
211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          case 0x01:  /* atoms */
212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            /* check that the content is really 0-terminated */
213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            if ( value < bdf->strings_size &&
214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                 ft_memchr( bdf->strings + value, 0, bdf->strings_size ) )
215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            {
216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project              aprop->type   = BDF_PROPERTY_TYPE_ATOM;
217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project              aprop->u.atom = (const char*)bdf->strings + value;
218a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang              error         = FT_Err_Ok;
219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project              goto Exit;
220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            }
221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            break;
222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          case 0x02:
224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            aprop->type      = BDF_PROPERTY_TYPE_INTEGER;
225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            aprop->u.integer = (FT_Int32)value;
226a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang            error            = FT_Err_Ok;
227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            goto Exit;
228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          case 0x03:
230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            aprop->type       = BDF_PROPERTY_TYPE_CARDINAL;
231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            aprop->u.cardinal = value;
232a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang            error             = FT_Err_Ok;
233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            goto Exit;
234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          default:
236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            ;
237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          }
238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project        }
239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      }
240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      p += 10;
241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    }
242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  Exit:
244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    return error;
245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  }
246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_BDF */
248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
251