1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  cidriver.c                                                             */
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*    CID driver interface (body).                                         */
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by                   */
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  This file is part of the FreeType project, and may only be used,       */
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  modified, and distributed under the terms of the FreeType project      */
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  this file you indicate that you have read the license and              */
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  understand and accept it fully.                                        */
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/ft2build.h"
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "cidriver.h"
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "cidgload.h"
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/ftdebug.h"
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "ciderrs.h"
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/services/svpostnm.h"
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/services/svxf86nm.h"
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/services/svpsinfo.h"
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/services/svcid.h"
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /*************************************************************************/
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /*                                                                       */
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* messages during execution.                                            */
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /*                                                                       */
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#undef  FT_COMPONENT
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_COMPONENT  trace_ciddriver
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /*
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *  POSTSCRIPT NAME SERVICE
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   */
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static const char*
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  cid_get_postscript_name( CID_Face  face )
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const char*  result = face->cid.cid_font_name;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( result && result[0] == '/' )
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      result++;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return result;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static const FT_Service_PsFontNameRec  cid_service_ps_name =
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    (FT_PsName_GetFunc) cid_get_postscript_name
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  };
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /*
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *  POSTSCRIPT INFO SERVICE
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   */
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static FT_Error
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  cid_ps_get_font_info( FT_Face          face,
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        PS_FontInfoRec*  afont_info )
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    *afont_info = ((CID_Face)face)->cid.font_info;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return FT_Err_Ok;
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static FT_Error
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  cid_ps_get_font_extra( FT_Face          face,
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        PS_FontExtraRec*  afont_extra )
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    *afont_extra = ((CID_Face)face)->font_extra;
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return FT_Err_Ok;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static const FT_Service_PsInfoRec  cid_service_ps_info =
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    (PS_GetFontInfoFunc)   cid_ps_get_font_info,
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    (PS_GetFontExtraFunc)  cid_ps_get_font_extra,
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    (PS_HasGlyphNamesFunc) NULL,        /* unsupported with CID fonts */
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    (PS_GetFontPrivateFunc)NULL,        /* unsupported                */
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    (PS_GetFontValueFunc)  NULL         /* not implemented            */
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  };
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /*
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *  CID INFO SERVICE
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   */
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static FT_Error
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  cid_get_ros( CID_Face      face,
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov               const char*  *registry,
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov               const char*  *ordering,
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov               FT_Int       *supplement )
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CID_FaceInfo  cid = &face->cid;
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( registry )
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *registry = cid->registry;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( ordering )
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *ordering = cid->ordering;
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( supplement )
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *supplement = cid->supplement;
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return FT_Err_Ok;
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static FT_Error
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  cid_get_is_cid( CID_Face  face,
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                  FT_Bool  *is_cid )
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error  error = FT_Err_Ok;
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_UNUSED( face );
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( is_cid )
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *is_cid = 1; /* cid driver is only used for CID keyed fonts */
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static FT_Error
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  cid_get_cid_from_glyph_index( CID_Face  face,
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                FT_UInt   glyph_index,
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                FT_UInt  *cid )
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error  error = FT_Err_Ok;
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_UNUSED( face );
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( cid )
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *cid = glyph_index; /* identity mapping */
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static const FT_Service_CIDRec  cid_service_cid_info =
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov     (FT_CID_GetRegistryOrderingSupplementFunc)cid_get_ros,
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov     (FT_CID_GetIsInternallyCIDKeyedFunc)      cid_get_is_cid,
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov     (FT_CID_GetCIDFromGlyphIndexFunc)         cid_get_cid_from_glyph_index
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  };
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /*
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *  SERVICE LIST
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   *
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   */
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  static const FT_ServiceDescRec  cid_services[] =
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    { FT_SERVICE_ID_XF86_NAME,            FT_XF86_FORMAT_CID },
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    { FT_SERVICE_ID_POSTSCRIPT_INFO,      &cid_service_ps_info },
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    { FT_SERVICE_ID_CID,                  &cid_service_cid_info },
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    { NULL, NULL }
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  };
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_CALLBACK_DEF( FT_Module_Interface )
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  cid_get_interface( FT_Module    module,
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                     const char*  cid_interface )
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_UNUSED( module );
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return ft_service_list_lookup( cid_services, cid_interface );
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_CALLBACK_TABLE_DEF
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  const FT_Driver_ClassRec  t1cid_driver_class =
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    /* first of all, the FT_Module_Class fields */
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_MODULE_FONT_DRIVER       |
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_MODULE_DRIVER_SCALABLE   |
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_MODULE_DRIVER_HAS_HINTER,
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      sizeof ( FT_DriverRec ),
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      "t1cid",   /* module name           */
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      0x10000L,  /* version 1.0 of driver */
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      0x20000L,  /* requires FreeType 2.0 */
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      0,
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      cid_driver_init,
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      cid_driver_done,
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      cid_get_interface
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    },
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    /* then the other font drivers fields */
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    sizeof ( CID_FaceRec ),
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    sizeof ( CID_SizeRec ),
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    sizeof ( CID_GlyphSlotRec ),
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_face_init,
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_face_done,
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_size_init,
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_size_done,
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_slot_init,
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_slot_done,
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_slot_load_glyph,
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    0,                      /* FT_Face_GetKerningFunc  */
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    0,                      /* FT_Face_AttachFunc      */
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    0,                      /* FT_Face_GetAdvancesFunc */
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cid_size_request,
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    0                       /* FT_Size_SelectFunc      */
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  };
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */
237