/src/compiler/android-ndk/jni/freetype/include/freetype/internal/ftserv.h

http://ftk.googlecode.com/ · C++ Header · 620 lines · 398 code · 55 blank · 167 comment · 26 complexity · 6145acdb74fb0c8cd2f59379d89bd738 MD5 · raw file

  1. /***************************************************************************/
  2. /* */
  3. /* ftserv.h */
  4. /* */
  5. /* The FreeType services (specification only). */
  6. /* */
  7. /* Copyright 2003, 2004, 2005, 2006, 2007 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. /* Each module can export one or more `services'. Each service is */
  20. /* identified by a constant string and modeled by a pointer; the latter */
  21. /* generally corresponds to a structure containing function pointers. */
  22. /* */
  23. /* Note that a service's data cannot be a mere function pointer because */
  24. /* in C it is possible that function pointers might be implemented */
  25. /* differently than data pointers (e.g. 48 bits instead of 32). */
  26. /* */
  27. /*************************************************************************/
  28. #ifndef __FTSERV_H__
  29. #define __FTSERV_H__
  30. FT_BEGIN_HEADER
  31. #if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
  32. /* we disable the warning `conditional expression is constant' here */
  33. /* in order to compile cleanly with the maximum level of warnings */
  34. #pragma warning( disable : 4127 )
  35. #endif /* _MSC_VER */
  36. /*
  37. * @macro:
  38. * FT_FACE_FIND_SERVICE
  39. *
  40. * @description:
  41. * This macro is used to look up a service from a face's driver module.
  42. *
  43. * @input:
  44. * face ::
  45. * The source face handle.
  46. *
  47. * id ::
  48. * A string describing the service as defined in the service's
  49. * header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
  50. * `multi-masters'). It is automatically prefixed with
  51. * `FT_SERVICE_ID_'.
  52. *
  53. * @output:
  54. * ptr ::
  55. * A variable that receives the service pointer. Will be NULL
  56. * if not found.
  57. */
  58. #ifdef __cplusplus
  59. #define FT_FACE_FIND_SERVICE( face, ptr, id ) \
  60. FT_BEGIN_STMNT \
  61. FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
  62. FT_Pointer _tmp_ = NULL; \
  63. FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
  64. \
  65. \
  66. if ( module->clazz->get_interface ) \
  67. _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
  68. *_pptr_ = _tmp_; \
  69. FT_END_STMNT
  70. #else /* !C++ */
  71. #define FT_FACE_FIND_SERVICE( face, ptr, id ) \
  72. FT_BEGIN_STMNT \
  73. FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
  74. FT_Pointer _tmp_ = NULL; \
  75. \
  76. if ( module->clazz->get_interface ) \
  77. _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
  78. ptr = _tmp_; \
  79. FT_END_STMNT
  80. #endif /* !C++ */
  81. /*
  82. * @macro:
  83. * FT_FACE_FIND_GLOBAL_SERVICE
  84. *
  85. * @description:
  86. * This macro is used to look up a service from all modules.
  87. *
  88. * @input:
  89. * face ::
  90. * The source face handle.
  91. *
  92. * id ::
  93. * A string describing the service as defined in the service's
  94. * header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
  95. * `multi-masters'). It is automatically prefixed with
  96. * `FT_SERVICE_ID_'.
  97. *
  98. * @output:
  99. * ptr ::
  100. * A variable that receives the service pointer. Will be NULL
  101. * if not found.
  102. */
  103. #ifdef __cplusplus
  104. #define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
  105. FT_BEGIN_STMNT \
  106. FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
  107. FT_Pointer _tmp_; \
  108. FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
  109. \
  110. \
  111. _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \
  112. *_pptr_ = _tmp_; \
  113. FT_END_STMNT
  114. #else /* !C++ */
  115. #define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
  116. FT_BEGIN_STMNT \
  117. FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
  118. FT_Pointer _tmp_; \
  119. \
  120. \
  121. _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \
  122. ptr = _tmp_; \
  123. FT_END_STMNT
  124. #endif /* !C++ */
  125. /*************************************************************************/
  126. /*************************************************************************/
  127. /***** *****/
  128. /***** S E R V I C E D E S C R I P T O R S *****/
  129. /***** *****/
  130. /*************************************************************************/
  131. /*************************************************************************/
  132. /*
  133. * The following structure is used to _describe_ a given service
  134. * to the library. This is useful to build simple static service lists.
  135. */
  136. typedef struct FT_ServiceDescRec_
  137. {
  138. const char* serv_id; /* service name */
  139. const void* serv_data; /* service pointer/data */
  140. } FT_ServiceDescRec;
  141. typedef const FT_ServiceDescRec* FT_ServiceDesc;
  142. /*************************************************************************/
  143. /* */
  144. /* <Macro> */
  145. /* FT_DEFINE_SERVICEDESCREC1 .. FT_DEFINE_SERVICEDESCREC6 */
  146. /* */
  147. /* <Description> */
  148. /* Used to initialize an array of FT_ServiceDescRec structs. */
  149. /* */
  150. /* When FT_CONFIG_OPTION_PIC is defined a Create funtion will need */
  151. /* to called with a pointer where the allocated array is returned. */
  152. /* And when it is no longer needed a Destroy function needs */
  153. /* to be called to release that allocation. */
  154. /* */
  155. /* These functions should be manyally called from the pic_init and */
  156. /* pic_free functions of your module (see FT_DEFINE_MODULE) */
  157. /* */
  158. /* When FT_CONFIG_OPTION_PIC is not defined the array will be */
  159. /* allocated in the global scope (or the scope where the macro */
  160. /* is used). */
  161. /* */
  162. #ifndef FT_CONFIG_OPTION_PIC
  163. #define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \
  164. static const FT_ServiceDescRec class_[] = \
  165. { \
  166. {serv_id_1, serv_data_1}, \
  167. {NULL, NULL} \
  168. };
  169. #define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \
  170. serv_id_2, serv_data_2) \
  171. static const FT_ServiceDescRec class_[] = \
  172. { \
  173. {serv_id_1, serv_data_1}, \
  174. {serv_id_2, serv_data_2}, \
  175. {NULL, NULL} \
  176. };
  177. #define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \
  178. serv_id_2, serv_data_2, serv_id_3, serv_data_3) \
  179. static const FT_ServiceDescRec class_[] = \
  180. { \
  181. {serv_id_1, serv_data_1}, \
  182. {serv_id_2, serv_data_2}, \
  183. {serv_id_3, serv_data_3}, \
  184. {NULL, NULL} \
  185. };
  186. #define FT_DEFINE_SERVICEDESCREC4(class_, serv_id_1, serv_data_1, \
  187. serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
  188. serv_id_4, serv_data_4) \
  189. static const FT_ServiceDescRec class_[] = \
  190. { \
  191. {serv_id_1, serv_data_1}, \
  192. {serv_id_2, serv_data_2}, \
  193. {serv_id_3, serv_data_3}, \
  194. {serv_id_4, serv_data_4}, \
  195. {NULL, NULL} \
  196. };
  197. #define FT_DEFINE_SERVICEDESCREC5(class_, serv_id_1, serv_data_1, \
  198. serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
  199. serv_id_4, serv_data_4, serv_id_5, serv_data_5) \
  200. static const FT_ServiceDescRec class_[] = \
  201. { \
  202. {serv_id_1, serv_data_1}, \
  203. {serv_id_2, serv_data_2}, \
  204. {serv_id_3, serv_data_3}, \
  205. {serv_id_4, serv_data_4}, \
  206. {serv_id_5, serv_data_5}, \
  207. {NULL, NULL} \
  208. };
  209. #define FT_DEFINE_SERVICEDESCREC6(class_, serv_id_1, serv_data_1, \
  210. serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
  211. serv_id_4, serv_data_4, serv_id_5, serv_data_5, \
  212. serv_id_6, serv_data_6) \
  213. static const FT_ServiceDescRec class_[] = \
  214. { \
  215. {serv_id_1, serv_data_1}, \
  216. {serv_id_2, serv_data_2}, \
  217. {serv_id_3, serv_data_3}, \
  218. {serv_id_4, serv_data_4}, \
  219. {serv_id_5, serv_data_5}, \
  220. {serv_id_6, serv_data_6}, \
  221. {NULL, NULL} \
  222. };
  223. #else /* FT_CONFIG_OPTION_PIC */
  224. #define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \
  225. void \
  226. FT_Destroy_Class_##class_( FT_Library library, \
  227. FT_ServiceDescRec* clazz ) \
  228. { \
  229. FT_Memory memory = library->memory; \
  230. if ( clazz ) \
  231. FT_FREE( clazz ); \
  232. } \
  233. \
  234. FT_Error \
  235. FT_Create_Class_##class_( FT_Library library, \
  236. FT_ServiceDescRec** output_class) \
  237. { \
  238. FT_ServiceDescRec* clazz; \
  239. FT_Error error; \
  240. FT_Memory memory = library->memory; \
  241. \
  242. if ( FT_ALLOC( clazz, sizeof(*clazz)*2 ) ) \
  243. return error; \
  244. clazz[0].serv_id = serv_id_1; \
  245. clazz[0].serv_data = serv_data_1; \
  246. clazz[1].serv_id = NULL; \
  247. clazz[1].serv_data = NULL; \
  248. *output_class = clazz; \
  249. return FT_Err_Ok; \
  250. }
  251. #define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \
  252. serv_id_2, serv_data_2) \
  253. void \
  254. FT_Destroy_Class_##class_( FT_Library library, \
  255. FT_ServiceDescRec* clazz ) \
  256. { \
  257. FT_Memory memory = library->memory; \
  258. if ( clazz ) \
  259. FT_FREE( clazz ); \
  260. } \
  261. \
  262. FT_Error \
  263. FT_Create_Class_##class_( FT_Library library, \
  264. FT_ServiceDescRec** output_class) \
  265. { \
  266. FT_ServiceDescRec* clazz; \
  267. FT_Error error; \
  268. FT_Memory memory = library->memory; \
  269. \
  270. if ( FT_ALLOC( clazz, sizeof(*clazz)*3 ) ) \
  271. return error; \
  272. clazz[0].serv_id = serv_id_1; \
  273. clazz[0].serv_data = serv_data_1; \
  274. clazz[1].serv_id = serv_id_2; \
  275. clazz[1].serv_data = serv_data_2; \
  276. clazz[2].serv_id = NULL; \
  277. clazz[2].serv_data = NULL; \
  278. *output_class = clazz; \
  279. return FT_Err_Ok; \
  280. }
  281. #define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \
  282. serv_id_2, serv_data_2, serv_id_3, serv_data_3) \
  283. void \
  284. FT_Destroy_Class_##class_( FT_Library library, \
  285. FT_ServiceDescRec* clazz ) \
  286. { \
  287. FT_Memory memory = library->memory; \
  288. if ( clazz ) \
  289. FT_FREE( clazz ); \
  290. } \
  291. \
  292. FT_Error \
  293. FT_Create_Class_##class_( FT_Library library, \
  294. FT_ServiceDescRec** output_class) \
  295. { \
  296. FT_ServiceDescRec* clazz; \
  297. FT_Error error; \
  298. FT_Memory memory = library->memory; \
  299. \
  300. if ( FT_ALLOC( clazz, sizeof(*clazz)*4 ) ) \
  301. return error; \
  302. clazz[0].serv_id = serv_id_1; \
  303. clazz[0].serv_data = serv_data_1; \
  304. clazz[1].serv_id = serv_id_2; \
  305. clazz[1].serv_data = serv_data_2; \
  306. clazz[2].serv_id = serv_id_3; \
  307. clazz[2].serv_data = serv_data_3; \
  308. clazz[3].serv_id = NULL; \
  309. clazz[3].serv_data = NULL; \
  310. *output_class = clazz; \
  311. return FT_Err_Ok; \
  312. }
  313. #define FT_DEFINE_SERVICEDESCREC4(class_, serv_id_1, serv_data_1, \
  314. serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
  315. serv_id_4, serv_data_4) \
  316. void \
  317. FT_Destroy_Class_##class_( FT_Library library, \
  318. FT_ServiceDescRec* clazz ) \
  319. { \
  320. FT_Memory memory = library->memory; \
  321. if ( clazz ) \
  322. FT_FREE( clazz ); \
  323. } \
  324. \
  325. FT_Error \
  326. FT_Create_Class_##class_( FT_Library library, \
  327. FT_ServiceDescRec** output_class) \
  328. { \
  329. FT_ServiceDescRec* clazz; \
  330. FT_Error error; \
  331. FT_Memory memory = library->memory; \
  332. \
  333. if ( FT_ALLOC( clazz, sizeof(*clazz)*5 ) ) \
  334. return error; \
  335. clazz[0].serv_id = serv_id_1; \
  336. clazz[0].serv_data = serv_data_1; \
  337. clazz[1].serv_id = serv_id_2; \
  338. clazz[1].serv_data = serv_data_2; \
  339. clazz[2].serv_id = serv_id_3; \
  340. clazz[2].serv_data = serv_data_3; \
  341. clazz[3].serv_id = serv_id_4; \
  342. clazz[3].serv_data = serv_data_4; \
  343. clazz[4].serv_id = NULL; \
  344. clazz[4].serv_data = NULL; \
  345. *output_class = clazz; \
  346. return FT_Err_Ok; \
  347. }
  348. #define FT_DEFINE_SERVICEDESCREC5(class_, serv_id_1, serv_data_1, \
  349. serv_id_2, serv_data_2, serv_id_3, serv_data_3, serv_id_4, \
  350. serv_data_4, serv_id_5, serv_data_5) \
  351. void \
  352. FT_Destroy_Class_##class_( FT_Library library, \
  353. FT_ServiceDescRec* clazz ) \
  354. { \
  355. FT_Memory memory = library->memory; \
  356. if ( clazz ) \
  357. FT_FREE( clazz ); \
  358. } \
  359. \
  360. FT_Error \
  361. FT_Create_Class_##class_( FT_Library library, \
  362. FT_ServiceDescRec** output_class) \
  363. { \
  364. FT_ServiceDescRec* clazz; \
  365. FT_Error error; \
  366. FT_Memory memory = library->memory; \
  367. \
  368. if ( FT_ALLOC( clazz, sizeof(*clazz)*6 ) ) \
  369. return error; \
  370. clazz[0].serv_id = serv_id_1; \
  371. clazz[0].serv_data = serv_data_1; \
  372. clazz[1].serv_id = serv_id_2; \
  373. clazz[1].serv_data = serv_data_2; \
  374. clazz[2].serv_id = serv_id_3; \
  375. clazz[2].serv_data = serv_data_3; \
  376. clazz[3].serv_id = serv_id_4; \
  377. clazz[3].serv_data = serv_data_4; \
  378. clazz[4].serv_id = serv_id_5; \
  379. clazz[4].serv_data = serv_data_5; \
  380. clazz[5].serv_id = NULL; \
  381. clazz[5].serv_data = NULL; \
  382. *output_class = clazz; \
  383. return FT_Err_Ok; \
  384. }
  385. #define FT_DEFINE_SERVICEDESCREC6(class_, serv_id_1, serv_data_1, \
  386. serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
  387. serv_id_4, serv_data_4, serv_id_5, serv_data_5, \
  388. serv_id_6, serv_data_6) \
  389. void \
  390. FT_Destroy_Class_##class_( FT_Library library, \
  391. FT_ServiceDescRec* clazz ) \
  392. { \
  393. FT_Memory memory = library->memory; \
  394. if ( clazz ) \
  395. FT_FREE( clazz ); \
  396. } \
  397. \
  398. FT_Error \
  399. FT_Create_Class_##class_( FT_Library library, \
  400. FT_ServiceDescRec** output_class) \
  401. { \
  402. FT_ServiceDescRec* clazz; \
  403. FT_Error error; \
  404. FT_Memory memory = library->memory; \
  405. \
  406. if ( FT_ALLOC( clazz, sizeof(*clazz)*7 ) ) \
  407. return error; \
  408. clazz[0].serv_id = serv_id_1; \
  409. clazz[0].serv_data = serv_data_1; \
  410. clazz[1].serv_id = serv_id_2; \
  411. clazz[1].serv_data = serv_data_2; \
  412. clazz[2].serv_id = serv_id_3; \
  413. clazz[2].serv_data = serv_data_3; \
  414. clazz[3].serv_id = serv_id_4; \
  415. clazz[3].serv_data = serv_data_4; \
  416. clazz[4].serv_id = serv_id_5; \
  417. clazz[4].serv_data = serv_data_5; \
  418. clazz[5].serv_id = serv_id_6; \
  419. clazz[5].serv_data = serv_data_6; \
  420. clazz[6].serv_id = NULL; \
  421. clazz[6].serv_data = NULL; \
  422. *output_class = clazz; \
  423. return FT_Err_Ok; \
  424. }
  425. #endif /* FT_CONFIG_OPTION_PIC */
  426. /*
  427. * Parse a list of FT_ServiceDescRec descriptors and look for
  428. * a specific service by ID. Note that the last element in the
  429. * array must be { NULL, NULL }, and that the function should
  430. * return NULL if the service isn't available.
  431. *
  432. * This function can be used by modules to implement their
  433. * `get_service' method.
  434. */
  435. FT_BASE( FT_Pointer )
  436. ft_service_list_lookup( FT_ServiceDesc service_descriptors,
  437. const char* service_id );
  438. /*************************************************************************/
  439. /*************************************************************************/
  440. /***** *****/
  441. /***** S E R V I C E S C A C H E *****/
  442. /***** *****/
  443. /*************************************************************************/
  444. /*************************************************************************/
  445. /*
  446. * This structure is used to store a cache for several frequently used
  447. * services. It is the type of `face->internal->services'. You
  448. * should only use FT_FACE_LOOKUP_SERVICE to access it.
  449. *
  450. * All fields should have the type FT_Pointer to relax compilation
  451. * dependencies. We assume the developer isn't completely stupid.
  452. *
  453. * Each field must be named `service_XXXX' where `XXX' corresponds to
  454. * the correct FT_SERVICE_ID_XXXX macro. See the definition of
  455. * FT_FACE_LOOKUP_SERVICE below how this is implemented.
  456. *
  457. */
  458. typedef struct FT_ServiceCacheRec_
  459. {
  460. FT_Pointer service_POSTSCRIPT_FONT_NAME;
  461. FT_Pointer service_MULTI_MASTERS;
  462. FT_Pointer service_GLYPH_DICT;
  463. FT_Pointer service_PFR_METRICS;
  464. FT_Pointer service_WINFNT;
  465. } FT_ServiceCacheRec, *FT_ServiceCache;
  466. /*
  467. * A magic number used within the services cache.
  468. */
  469. #define FT_SERVICE_UNAVAILABLE ((FT_Pointer)-2) /* magic number */
  470. /*
  471. * @macro:
  472. * FT_FACE_LOOKUP_SERVICE
  473. *
  474. * @description:
  475. * This macro is used to lookup a service from a face's driver module
  476. * using its cache.
  477. *
  478. * @input:
  479. * face::
  480. * The source face handle containing the cache.
  481. *
  482. * field ::
  483. * The field name in the cache.
  484. *
  485. * id ::
  486. * The service ID.
  487. *
  488. * @output:
  489. * ptr ::
  490. * A variable receiving the service data. NULL if not available.
  491. */
  492. #ifdef __cplusplus
  493. #define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \
  494. FT_BEGIN_STMNT \
  495. FT_Pointer svc; \
  496. FT_Pointer* Pptr = (FT_Pointer*)&(ptr); \
  497. \
  498. \
  499. svc = FT_FACE( face )->internal->services. service_ ## id; \
  500. if ( svc == FT_SERVICE_UNAVAILABLE ) \
  501. svc = NULL; \
  502. else if ( svc == NULL ) \
  503. { \
  504. FT_FACE_FIND_SERVICE( face, svc, id ); \
  505. \
  506. FT_FACE( face )->internal->services. service_ ## id = \
  507. (FT_Pointer)( svc != NULL ? svc \
  508. : FT_SERVICE_UNAVAILABLE ); \
  509. } \
  510. *Pptr = svc; \
  511. FT_END_STMNT
  512. #else /* !C++ */
  513. #define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \
  514. FT_BEGIN_STMNT \
  515. FT_Pointer svc; \
  516. \
  517. \
  518. svc = FT_FACE( face )->internal->services. service_ ## id; \
  519. if ( svc == FT_SERVICE_UNAVAILABLE ) \
  520. svc = NULL; \
  521. else if ( svc == NULL ) \
  522. { \
  523. FT_FACE_FIND_SERVICE( face, svc, id ); \
  524. \
  525. FT_FACE( face )->internal->services. service_ ## id = \
  526. (FT_Pointer)( svc != NULL ? svc \
  527. : FT_SERVICE_UNAVAILABLE ); \
  528. } \
  529. ptr = svc; \
  530. FT_END_STMNT
  531. #endif /* !C++ */
  532. /*
  533. * A macro used to define new service structure types.
  534. */
  535. #define FT_DEFINE_SERVICE( name ) \
  536. typedef struct FT_Service_ ## name ## Rec_ \
  537. FT_Service_ ## name ## Rec ; \
  538. typedef struct FT_Service_ ## name ## Rec_ \
  539. const * FT_Service_ ## name ; \
  540. struct FT_Service_ ## name ## Rec_
  541. /* */
  542. /*
  543. * The header files containing the services.
  544. */
  545. #define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
  546. #define FT_SERVICE_CID_H <freetype/internal/services/svcid.h>
  547. #define FT_SERVICE_GLYPH_DICT_H <freetype/internal/services/svgldict.h>
  548. #define FT_SERVICE_GX_VALIDATE_H <freetype/internal/services/svgxval.h>
  549. #define FT_SERVICE_KERNING_H <freetype/internal/services/svkern.h>
  550. #define FT_SERVICE_MULTIPLE_MASTERS_H <freetype/internal/services/svmm.h>
  551. #define FT_SERVICE_OPENTYPE_VALIDATE_H <freetype/internal/services/svotval.h>
  552. #define FT_SERVICE_PFR_H <freetype/internal/services/svpfr.h>
  553. #define FT_SERVICE_POSTSCRIPT_CMAPS_H <freetype/internal/services/svpscmap.h>
  554. #define FT_SERVICE_POSTSCRIPT_INFO_H <freetype/internal/services/svpsinfo.h>
  555. #define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
  556. #define FT_SERVICE_SFNT_H <freetype/internal/services/svsfnt.h>
  557. #define FT_SERVICE_TRUETYPE_ENGINE_H <freetype/internal/services/svtteng.h>
  558. #define FT_SERVICE_TT_CMAP_H <freetype/internal/services/svttcmap.h>
  559. #define FT_SERVICE_WINFNT_H <freetype/internal/services/svwinfnt.h>
  560. #define FT_SERVICE_XFREE86_NAME_H <freetype/internal/services/svxf86nm.h>
  561. #define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h>
  562. /* */
  563. FT_END_HEADER
  564. #endif /* __FTSERV_H__ */
  565. /* END */