62#define FT_FACE_FIND_SERVICE( face, ptr, id ) \
64 FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
65 FT_Pointer _tmp_ = NULL; \
66 FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
69 if ( module->clazz->get_interface ) \
70 _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
76#define FT_FACE_FIND_SERVICE( face, ptr, id ) \
78 FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
79 FT_Pointer _tmp_ = NULL; \
81 if ( module->clazz->get_interface ) \
82 _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
114#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
116 FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
118 FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
121 _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \
127#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
129 FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
133 _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \
182#define FT_DEFINE_SERVICEDESCREC1( class_, \
183 serv_id_1, serv_data_1 ) \
184 static const FT_ServiceDescRec class_[] = \
186 { serv_id_1, serv_data_1 }, \
190#define FT_DEFINE_SERVICEDESCREC2( class_, \
191 serv_id_1, serv_data_1, \
192 serv_id_2, serv_data_2 ) \
193 static const FT_ServiceDescRec class_[] = \
195 { serv_id_1, serv_data_1 }, \
196 { serv_id_2, serv_data_2 }, \
200#define FT_DEFINE_SERVICEDESCREC3( class_, \
201 serv_id_1, serv_data_1, \
202 serv_id_2, serv_data_2, \
203 serv_id_3, serv_data_3 ) \
204 static const FT_ServiceDescRec class_[] = \
206 { serv_id_1, serv_data_1 }, \
207 { serv_id_2, serv_data_2 }, \
208 { serv_id_3, serv_data_3 }, \
212#define FT_DEFINE_SERVICEDESCREC4( class_, \
213 serv_id_1, serv_data_1, \
214 serv_id_2, serv_data_2, \
215 serv_id_3, serv_data_3, \
216 serv_id_4, serv_data_4 ) \
217 static const FT_ServiceDescRec class_[] = \
219 { serv_id_1, serv_data_1 }, \
220 { serv_id_2, serv_data_2 }, \
221 { serv_id_3, serv_data_3 }, \
222 { serv_id_4, serv_data_4 }, \
226#define FT_DEFINE_SERVICEDESCREC5( class_, \
227 serv_id_1, serv_data_1, \
228 serv_id_2, serv_data_2, \
229 serv_id_3, serv_data_3, \
230 serv_id_4, serv_data_4, \
231 serv_id_5, serv_data_5 ) \
232 static const FT_ServiceDescRec class_[] = \
234 { serv_id_1, serv_data_1 }, \
235 { serv_id_2, serv_data_2 }, \
236 { serv_id_3, serv_data_3 }, \
237 { serv_id_4, serv_data_4 }, \
238 { serv_id_5, serv_data_5 }, \
242#define FT_DEFINE_SERVICEDESCREC6( class_, \
243 serv_id_1, serv_data_1, \
244 serv_id_2, serv_data_2, \
245 serv_id_3, serv_data_3, \
246 serv_id_4, serv_data_4, \
247 serv_id_5, serv_data_5, \
248 serv_id_6, serv_data_6 ) \
249 static const FT_ServiceDescRec class_[] = \
251 { serv_id_1, serv_data_1 }, \
252 { serv_id_2, serv_data_2 }, \
253 { serv_id_3, serv_data_3 }, \
254 { serv_id_4, serv_data_4 }, \
255 { serv_id_5, serv_data_5 }, \
256 { serv_id_6, serv_data_6 }, \
260#define FT_DEFINE_SERVICEDESCREC7( class_, \
261 serv_id_1, serv_data_1, \
262 serv_id_2, serv_data_2, \
263 serv_id_3, serv_data_3, \
264 serv_id_4, serv_data_4, \
265 serv_id_5, serv_data_5, \
266 serv_id_6, serv_data_6, \
267 serv_id_7, serv_data_7 ) \
268 static const FT_ServiceDescRec class_[] = \
270 { serv_id_1, serv_data_1 }, \
271 { serv_id_2, serv_data_2 }, \
272 { serv_id_3, serv_data_3 }, \
273 { serv_id_4, serv_data_4 }, \
274 { serv_id_5, serv_data_5 }, \
275 { serv_id_6, serv_data_6 }, \
276 { serv_id_7, serv_data_7 }, \
280#define FT_DEFINE_SERVICEDESCREC8( class_, \
281 serv_id_1, serv_data_1, \
282 serv_id_2, serv_data_2, \
283 serv_id_3, serv_data_3, \
284 serv_id_4, serv_data_4, \
285 serv_id_5, serv_data_5, \
286 serv_id_6, serv_data_6, \
287 serv_id_7, serv_data_7, \
288 serv_id_8, serv_data_8 ) \
289 static const FT_ServiceDescRec class_[] = \
291 { serv_id_1, serv_data_1 }, \
292 { serv_id_2, serv_data_2 }, \
293 { serv_id_3, serv_data_3 }, \
294 { serv_id_4, serv_data_4 }, \
295 { serv_id_5, serv_data_5 }, \
296 { serv_id_6, serv_data_6 }, \
297 { serv_id_7, serv_data_7 }, \
298 { serv_id_8, serv_data_8 }, \
302#define FT_DEFINE_SERVICEDESCREC9( class_, \
303 serv_id_1, serv_data_1, \
304 serv_id_2, serv_data_2, \
305 serv_id_3, serv_data_3, \
306 serv_id_4, serv_data_4, \
307 serv_id_5, serv_data_5, \
308 serv_id_6, serv_data_6, \
309 serv_id_7, serv_data_7, \
310 serv_id_8, serv_data_8, \
311 serv_id_9, serv_data_9 ) \
312 static const FT_ServiceDescRec class_[] = \
314 { serv_id_1, serv_data_1 }, \
315 { serv_id_2, serv_data_2 }, \
316 { serv_id_3, serv_data_3 }, \
317 { serv_id_4, serv_data_4 }, \
318 { serv_id_5, serv_data_5 }, \
319 { serv_id_6, serv_data_6 }, \
320 { serv_id_7, serv_data_7 }, \
321 { serv_id_8, serv_data_8 }, \
322 { serv_id_9, serv_data_9 }, \
326#define FT_DEFINE_SERVICEDESCREC10( class_, \
327 serv_id_1, serv_data_1, \
328 serv_id_2, serv_data_2, \
329 serv_id_3, serv_data_3, \
330 serv_id_4, serv_data_4, \
331 serv_id_5, serv_data_5, \
332 serv_id_6, serv_data_6, \
333 serv_id_7, serv_data_7, \
334 serv_id_8, serv_data_8, \
335 serv_id_9, serv_data_9, \
336 serv_id_10, serv_data_10 ) \
337 static const FT_ServiceDescRec class_[] = \
339 { serv_id_1, serv_data_1 }, \
340 { serv_id_2, serv_data_2 }, \
341 { serv_id_3, serv_data_3 }, \
342 { serv_id_4, serv_data_4 }, \
343 { serv_id_5, serv_data_5 }, \
344 { serv_id_6, serv_data_6 }, \
345 { serv_id_7, serv_data_7 }, \
346 { serv_id_8, serv_data_8 }, \
347 { serv_id_9, serv_data_9 }, \
348 { serv_id_10, serv_data_10 }, \
364 const char* service_id );
405#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)~(FT_PtrDist)1)
433#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \
436 FT_Pointer* Pptr = (FT_Pointer*)&(ptr); \
439 svc = FT_FACE( face )->internal->services. service_ ## id; \
440 if ( svc == FT_SERVICE_UNAVAILABLE ) \
442 else if ( svc == NULL ) \
444 FT_FACE_FIND_SERVICE( face, svc, id ); \
446 FT_FACE( face )->internal->services. service_ ## id = \
447 (FT_Pointer)( svc != NULL ? svc \
448 : FT_SERVICE_UNAVAILABLE ); \
455#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \
460 svc = FT_FACE( face )->internal->services. service_ ## id; \
461 if ( svc == FT_SERVICE_UNAVAILABLE ) \
463 else if ( svc == NULL ) \
465 FT_FACE_FIND_SERVICE( face, svc, id ); \
467 FT_FACE( face )->internal->services. service_ ## id = \
468 (FT_Pointer)( svc != NULL ? svc \
469 : FT_SERVICE_UNAVAILABLE ); \
480#define FT_DEFINE_SERVICE( name ) \
481 typedef struct FT_Service_ ## name ## Rec_ \
482 FT_Service_ ## name ## Rec ; \
483 typedef struct FT_Service_ ## name ## Rec_ \
484 const * FT_Service_ ## name ; \
485 struct FT_Service_ ## name ## Rec_
493#define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
494#define FT_SERVICE_CFF_TABLE_LOAD_H <freetype/internal/services/svcfftl.h>
495#define FT_SERVICE_CID_H <freetype/internal/services/svcid.h>
496#define FT_SERVICE_FONT_FORMAT_H <freetype/internal/services/svfntfmt.h>
497#define FT_SERVICE_GLYPH_DICT_H <freetype/internal/services/svgldict.h>
498#define FT_SERVICE_GX_VALIDATE_H <freetype/internal/services/svgxval.h>
499#define FT_SERVICE_KERNING_H <freetype/internal/services/svkern.h>
500#define FT_SERVICE_METRICS_VARIATIONS_H <freetype/internal/services/svmetric.h>
501#define FT_SERVICE_MULTIPLE_MASTERS_H <freetype/internal/services/svmm.h>
502#define FT_SERVICE_OPENTYPE_VALIDATE_H <freetype/internal/services/svotval.h>
503#define FT_SERVICE_PFR_H <freetype/internal/services/svpfr.h>
504#define FT_SERVICE_POSTSCRIPT_CMAPS_H <freetype/internal/services/svpscmap.h>
505#define FT_SERVICE_POSTSCRIPT_INFO_H <freetype/internal/services/svpsinfo.h>
506#define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
507#define FT_SERVICE_PROPERTIES_H <freetype/internal/services/svprop.h>
508#define FT_SERVICE_SFNT_H <freetype/internal/services/svsfnt.h>
509#define FT_SERVICE_TRUETYPE_ENGINE_H <freetype/internal/services/svtteng.h>
510#define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h>
511#define FT_SERVICE_TT_CMAP_H <freetype/internal/services/svttcmap.h>
512#define FT_SERVICE_WINFNT_H <freetype/internal/services/svwinfnt.h>
struct FT_ServiceCacheRec_ FT_ServiceCacheRec
struct FT_ServiceDescRec_ FT_ServiceDescRec
struct FT_ServiceCacheRec_ * FT_ServiceCache
const FT_ServiceDescRec * FT_ServiceDesc
ft_service_list_lookup(FT_ServiceDesc service_descriptors, const char *service_id)
FT_Pointer service_POSTSCRIPT_FONT_NAME
FT_Pointer service_METRICS_VARIATIONS
FT_Pointer service_WINFNT
FT_Pointer service_MULTI_MASTERS
FT_Pointer service_PFR_METRICS
FT_Pointer service_GLYPH_DICT