OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* cidriver.c */ | |
4 /* */ | |
5 /* CID driver interface (body). */ | |
6 /* */ | |
7 /* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by */ | |
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ | |
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 "../../include/ft2build.h" | |
20 #include "cidriver.h" | |
21 #include "cidgload.h" | |
22 #include "../../include/freetype/internal/ftdebug.h" | |
23 | |
24 #include "ciderrs.h" | |
25 | |
26 #include "../../include/freetype/internal/services/svpostnm.h" | |
27 #include "../../include/freetype/internal/services/svxf86nm.h" | |
28 #include "../../include/freetype/internal/services/svpsinfo.h" | |
29 #include "../../include/freetype/internal/services/svcid.h" | |
30 | |
31 | |
32 /*************************************************************************/ | |
33 /* */ | |
34 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ | |
35 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ | |
36 /* messages during execution. */ | |
37 /* */ | |
38 #undef FT_COMPONENT | |
39 #define FT_COMPONENT trace_ciddriver | |
40 | |
41 | |
42 /* | |
43 * POSTSCRIPT NAME SERVICE | |
44 * | |
45 */ | |
46 | |
47 static const char* | |
48 cid_get_postscript_name( CID_Face face ) | |
49 { | |
50 const char* result = face->cid.cid_font_name; | |
51 | |
52 | |
53 if ( result && result[0] == '/' ) | |
54 result++; | |
55 | |
56 return result; | |
57 } | |
58 | |
59 | |
60 static const FT_Service_PsFontNameRec cid_service_ps_name = | |
61 { | |
62 (FT_PsName_GetFunc) cid_get_postscript_name | |
63 }; | |
64 | |
65 | |
66 /* | |
67 * POSTSCRIPT INFO SERVICE | |
68 * | |
69 */ | |
70 | |
71 static FT_Error | |
72 cid_ps_get_font_info( FT_Face face, | |
73 PS_FontInfoRec* afont_info ) | |
74 { | |
75 *afont_info = ((CID_Face)face)->cid.font_info; | |
76 | |
77 return FT_Err_Ok; | |
78 } | |
79 | |
80 static FT_Error | |
81 cid_ps_get_font_extra( FT_Face face, | |
82 PS_FontExtraRec* afont_extra ) | |
83 { | |
84 *afont_extra = ((CID_Face)face)->font_extra; | |
85 | |
86 return FT_Err_Ok; | |
87 } | |
88 | |
89 static const FT_Service_PsInfoRec cid_service_ps_info = | |
90 { | |
91 (PS_GetFontInfoFunc) cid_ps_get_font_info, | |
92 (PS_GetFontExtraFunc) cid_ps_get_font_extra, | |
93 (PS_HasGlyphNamesFunc) NULL, /* unsupported with CID fonts */ | |
94 (PS_GetFontPrivateFunc)NULL, /* unsupported */ | |
95 (PS_GetFontValueFunc) NULL /* not implemented */ | |
96 }; | |
97 | |
98 | |
99 /* | |
100 * CID INFO SERVICE | |
101 * | |
102 */ | |
103 static FT_Error | |
104 cid_get_ros( CID_Face face, | |
105 const char* *registry, | |
106 const char* *ordering, | |
107 FT_Int *supplement ) | |
108 { | |
109 CID_FaceInfo cid = &face->cid; | |
110 | |
111 | |
112 if ( registry ) | |
113 *registry = cid->registry; | |
114 | |
115 if ( ordering ) | |
116 *ordering = cid->ordering; | |
117 | |
118 if ( supplement ) | |
119 *supplement = cid->supplement; | |
120 | |
121 return FT_Err_Ok; | |
122 } | |
123 | |
124 | |
125 static FT_Error | |
126 cid_get_is_cid( CID_Face face, | |
127 FT_Bool *is_cid ) | |
128 { | |
129 FT_Error error = FT_Err_Ok; | |
130 FT_UNUSED( face ); | |
131 | |
132 | |
133 if ( is_cid ) | |
134 *is_cid = 1; /* cid driver is only used for CID keyed fonts */ | |
135 | |
136 return error; | |
137 } | |
138 | |
139 | |
140 static FT_Error | |
141 cid_get_cid_from_glyph_index( CID_Face face, | |
142 FT_UInt glyph_index, | |
143 FT_UInt *cid ) | |
144 { | |
145 FT_Error error = FT_Err_Ok; | |
146 FT_UNUSED( face ); | |
147 | |
148 | |
149 if ( cid ) | |
150 *cid = glyph_index; /* identity mapping */ | |
151 | |
152 return error; | |
153 } | |
154 | |
155 | |
156 static const FT_Service_CIDRec cid_service_cid_info = | |
157 { | |
158 (FT_CID_GetRegistryOrderingSupplementFunc)cid_get_ros, | |
159 (FT_CID_GetIsInternallyCIDKeyedFunc) cid_get_is_cid, | |
160 (FT_CID_GetCIDFromGlyphIndexFunc) cid_get_cid_from_glyph_index | |
161 }; | |
162 | |
163 | |
164 /* | |
165 * SERVICE LIST | |
166 * | |
167 */ | |
168 | |
169 static const FT_ServiceDescRec cid_services[] = | |
170 { | |
171 { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CID }, | |
172 { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name }, | |
173 { FT_SERVICE_ID_POSTSCRIPT_INFO, &cid_service_ps_info }, | |
174 { FT_SERVICE_ID_CID, &cid_service_cid_info }, | |
175 { NULL, NULL } | |
176 }; | |
177 | |
178 | |
179 FT_CALLBACK_DEF( FT_Module_Interface ) | |
180 cid_get_interface( FT_Module module, | |
181 const char* cid_interface ) | |
182 { | |
183 FT_UNUSED( module ); | |
184 | |
185 return ft_service_list_lookup( cid_services, cid_interface ); | |
186 } | |
187 | |
188 | |
189 | |
190 FT_CALLBACK_TABLE_DEF | |
191 const FT_Driver_ClassRec t1cid_driver_class = | |
192 { | |
193 /* first of all, the FT_Module_Class fields */ | |
194 { | |
195 FT_MODULE_FONT_DRIVER | | |
196 FT_MODULE_DRIVER_SCALABLE | | |
197 FT_MODULE_DRIVER_HAS_HINTER, | |
198 | |
199 sizeof ( FT_DriverRec ), | |
200 "t1cid", /* module name */ | |
201 0x10000L, /* version 1.0 of driver */ | |
202 0x20000L, /* requires FreeType 2.0 */ | |
203 | |
204 0, | |
205 | |
206 cid_driver_init, | |
207 cid_driver_done, | |
208 cid_get_interface | |
209 }, | |
210 | |
211 /* then the other font drivers fields */ | |
212 sizeof ( CID_FaceRec ), | |
213 sizeof ( CID_SizeRec ), | |
214 sizeof ( CID_GlyphSlotRec ), | |
215 | |
216 cid_face_init, | |
217 cid_face_done, | |
218 | |
219 cid_size_init, | |
220 cid_size_done, | |
221 cid_slot_init, | |
222 cid_slot_done, | |
223 | |
224 cid_slot_load_glyph, | |
225 | |
226 0, /* FT_Face_GetKerningFunc */ | |
227 0, /* FT_Face_AttachFunc */ | |
228 | |
229 0, /* FT_Face_GetAdvancesFunc */ | |
230 | |
231 cid_size_request, | |
232 0 /* FT_Size_SelectFunc */ | |
233 }; | |
234 | |
235 | |
236 /* END */ | |
OLD | NEW |