1 /****************************************************************************
2  *
3  * ftcid.c
4  *
5  *   FreeType API for accessing CID font information.
6  *
7  * Copyright (C) 2007-2020 by
8  * Derek Clegg and Michael Toftdal.
9  *
10  * This file is part of the FreeType project, and may only be used,
11  * modified, and distributed under the terms of the FreeType project
12  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
13  * this file you indicate that you have read the license and
14  * understand and accept it fully.
15  *
16  */
17 
18 
19 #include <freetype/ftcid.h>
20 #include <freetype/internal/ftobjs.h>
21 #include <freetype/internal/services/svcid.h>
22 
23 
24   /* documentation is in ftcid.h */
25 
26   FT_EXPORT_DEF( FT_Error )
FT_Get_CID_Registry_Ordering_Supplement(FT_Face face,const char ** registry,const char ** ordering,FT_Int * supplement)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 )
FT_Get_CID_Is_Internally_CID_Keyed(FT_Face face,FT_Bool * is_cid)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 )
FT_Get_CID_From_Glyph_Index(FT_Face face,FT_UInt glyph_index,FT_UInt * cid)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