1/****************************************************************************
2 *
3 * ftcid.c
4 *
5 * FreeType API for accessing CID font information.
6 *
7 * Copyright (C) 2007-2023 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 )
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