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