1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  ftcid.c                                                                */
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*    FreeType API for accessing CID font information.                     */
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/*  Copyright 2007-2015 by                                                 */
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/*  Derek Clegg and Michael Toftdal.                                       */
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
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include <ft2build.h>
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_CID_H
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_OBJECTS_H
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_SERVICE_CID_H
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* documentation is in ftcid.h */
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( FT_Error )
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Get_CID_Registry_Ordering_Supplement( FT_Face       face,
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           const char*  *registry,
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           const char*  *ordering,
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           FT_Int       *supplement)
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error     error;
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const char*  r = NULL;
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const char*  o = NULL;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Int       s = 0;
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    error = FT_ERR( Invalid_Argument );
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( face )
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_Service_CID  service;
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_FACE_FIND_SERVICE( face, service, CID );
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      if ( service && service->get_ros )
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        error = service->get_ros( face, &r, &o, &s );
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( registry )
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *registry = r;
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( ordering )
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *ordering = o;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( supplement )
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *supplement = s;
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( FT_Error )
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Get_CID_Is_Internally_CID_Keyed( FT_Face   face,
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                      FT_Bool  *is_cid )
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error  error = FT_ERR( Invalid_Argument );
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Bool   ic = 0;
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( face )
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_Service_CID  service;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_FACE_FIND_SERVICE( face, service, CID );
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      if ( service && service->get_is_cid )
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        error = service->get_is_cid( face, &ic);
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( is_cid )
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *is_cid = ic;
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( FT_Error )
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Get_CID_From_Glyph_Index( FT_Face   face,
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                               FT_UInt   glyph_index,
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                               FT_UInt  *cid )
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error  error = FT_ERR( Invalid_Argument );
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_UInt   c = 0;
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( face )
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_Service_CID  service;
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_FACE_FIND_SERVICE( face, service, CID );
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      if ( service && service->get_cid_from_glyph_index )
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        error = service->get_cid_from_glyph_index( face, glyph_index, &c);
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( cid )
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *cid = c;
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */
119