1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  ftcid.c                                                                */
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*    FreeType API for accessing CID font information.                     */
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  Copyright 2007, 2009, 2013 by Derek Clegg, Michael Toftdal.            */
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  This file is part of the FreeType project, and may only be used,       */
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  modified, and distributed under the terms of the FreeType project      */
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  this file you indicate that you have read the license and              */
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  understand and accept it fully.                                        */
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include <ft2build.h>
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_CID_H
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_OBJECTS_H
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_SERVICE_CID_H
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* documentation is in ftcid.h */
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( FT_Error )
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Get_CID_Registry_Ordering_Supplement( FT_Face       face,
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           const char*  *registry,
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           const char*  *ordering,
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           FT_Int       *supplement)
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error     error;
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const char*  r = NULL;
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const char*  o = NULL;
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Int       s = 0;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    error = FT_ERR( Invalid_Argument );
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( face )
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_Service_CID  service;
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_FACE_FIND_SERVICE( face, service, CID );
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      if ( service && service->get_ros )
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        error = service->get_ros( face, &r, &o, &s );
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( registry )
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *registry = r;
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( ordering )
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *ordering = o;
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( supplement )
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *supplement = s;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( FT_Error )
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Get_CID_Is_Internally_CID_Keyed( FT_Face   face,
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                      FT_Bool  *is_cid )
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error  error = FT_ERR( Invalid_Argument );
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Bool   ic = 0;
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( face )
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_Service_CID  service;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_FACE_FIND_SERVICE( face, service, CID );
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      if ( service && service->get_is_cid )
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        error = service->get_is_cid( face, &ic);
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( is_cid )
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *is_cid = ic;
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_EXPORT_DEF( FT_Error )
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Get_CID_From_Glyph_Index( FT_Face   face,
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                               FT_UInt   glyph_index,
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                               FT_UInt  *cid )
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error  error = FT_ERR( Invalid_Argument );
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_UInt   c = 0;
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( face )
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_Service_CID  service;
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_FACE_FIND_SERVICE( face, service, CID );
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      if ( service && service->get_cid_from_glyph_index )
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        error = service->get_cid_from_glyph_index( face, glyph_index, &c);
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( cid )
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      *cid = c;
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */
118