From 675a90354833973b76d4619e5d4af0b880209aee Mon Sep 17 00:00:00 2001 From: David Turner Date: Mon, 13 Apr 2009 03:13:29 +0200 Subject: [PATCH] introduce service and service list template files, modify cff driver to use them --- include/freetype/internal/ftobjs.h | 5 ++ include/freetype/internal/internal.h | 6 ++ include/freetype/internal/services/declare.h | 57 +++++++++++++++ include/freetype/internal/services/define.h | 65 +++++++++++++++++ include/freetype/internal/services/listdecl.h | 58 +++++++++++++++ include/freetype/internal/services/listdef.h | 70 +++++++++++++++++++ include/freetype/internal/services/svpsinfo.h | 42 +++-------- src/base/ftfstype.c | 4 +- src/base/fttype1.c | 12 ++-- src/cff/cffdrivr.c | 34 +++++---- src/cff/cffpic.c | 32 ++------- src/cff/cffpic.h | 34 +++++++-- 12 files changed, 333 insertions(+), 86 deletions(-) create mode 100644 include/freetype/internal/services/declare.h create mode 100644 include/freetype/internal/services/define.h create mode 100644 include/freetype/internal/services/listdecl.h create mode 100644 include/freetype/internal/services/listdef.h diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h index 46f52bc79..a9959fdf5 100644 --- a/include/freetype/internal/ftobjs.h +++ b/include/freetype/internal/ftobjs.h @@ -62,6 +62,11 @@ FT_BEGIN_HEADER #endif +#define FT_GLUE(x,y) FT_GLUE_(x,y) +#define FT_GLUE_(x,y) x##y + +#define FT_GLUE3(x,y,z) FT_GLUE(FT_GLUE(x,y),z) + /*************************************************************************/ /* */ /* The min and max functions missing in C. As usual, be careful not to */ diff --git a/include/freetype/internal/internal.h b/include/freetype/internal/internal.h index f500a651c..6916e71a2 100644 --- a/include/freetype/internal/internal.h +++ b/include/freetype/internal/internal.h @@ -47,5 +47,11 @@ #define FT_INTERNAL_AUTOHINT_H +#define FT_INTERNAL_SERVICE_DECLARE_H +#define FT_INTERNAL_SERVICE_DEFINE_H + +#define FT_INTERNAL_SERVICE_LIST_DECLARE_H +#define FT_INTERNAL_SERVICE_LIST_DEFINE_H + /* END */ diff --git a/include/freetype/internal/services/declare.h b/include/freetype/internal/services/declare.h new file mode 100644 index 000000000..88297c6f9 --- /dev/null +++ b/include/freetype/internal/services/declare.h @@ -0,0 +1,57 @@ +/***************************************************************************/ +/* */ +/* services/declare.h */ +/* */ +/* The FreeType PostScript info service (specification). */ +/* */ +/* Copyright 2009 by David Turner */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + +/* this header file can be included multipled times and is used + * to declare the types corresponding to a given service described + * by FT_SERVICE_NAME and FT_SERVICE_FIELDS + * + * FT_SERVICE_NAME is the name of the service + * FT_SERVICE_FIELDS is a list of _FT_SERVICE_FIELD(type,varname) + * statements that will be used to define the corresponding service + * structure and pointer types. + */ + +#ifndef FT_SERVICE_FIELDS +#error FT_SERVICE_FIELDS must be defined +#endif + +#ifndef FT_SERVICE_NAME +#error FT_SERVICE_NAME must be defined +#endif + +/* define the service structure and pointer types */ + +typedef struct FT_GLUE3(FT_Service_,FT_SERVICE_NAME,Rec_) + FT_GLUE3(FT_Service_,FT_SERVICE_NAME,Rec); + +typedef struct FT_GLUE3(FT_Service_,FT_SERVICE_NAME,Rec_) const* + FT_GLUE(FT_Service_,FT_SERVICE_NAME); + +struct FT_GLUE3(FT_Service_,FT_SERVICE_NAME,Rec_) +{ +#define _FT_SERVICE_FIELD(type_,name_) type_ name_; + FT_SERVICE_FIELDS +#undef _FT_SERVICE_FIELD +}; + +/* declare initialization function for PIC code */ +#ifdef FT_CONFIG_OPTION_PIC +void FT_GLUE(ft_pic_service_init_,FT_SERVICE_NAME) + ( FT_GLUE3(FT_Service_,FT_SERVICE_NAME,Rec)* clazz ); +#endif /* FT_CONFIG_OPTION_PIC */ + +#undef FT_SERVICE_NAME +#undef FT_SERVICE_FIELDS diff --git a/include/freetype/internal/services/define.h b/include/freetype/internal/services/define.h new file mode 100644 index 000000000..5c5247b40 --- /dev/null +++ b/include/freetype/internal/services/define.h @@ -0,0 +1,65 @@ +/***************************************************************************/ +/* */ +/* services/define.h */ +/* */ +/* The FreeType PostScript info service (specification). */ +/* */ +/* Copyright 2009 by David Turner */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + +/* this header file can be included multipled times and is used + * to declare the types corresponding to a given service described + * by FT_SERVICE_NAME and FT_SERVICE_FIELDS + * + * FT_SERVICE_NAME is the name of the service + * FT_SERVICE_FIELDS is a list of _FT_SERVICE_FIELD(type,varname) + * statements that will be used to define the corresponding service + * structure and pointer types. + */ + +#ifndef FT_SERVICE_FIELDS +#error FT_SERVICE_FIELDS must be defined +#endif + +#ifndef FT_SERVICE_PREFIX +#error FT_SERVICE_PREFIX must be defined +#endif + +#ifndef FT_SERVICE_NAME +#error FT_SERVICE_NAME must be defined +#endif + +#ifndef FT_CONFIG_OPTION_PIC + + static const FT_GLUE3(FT_Service_,FT_SERVICE_NAME,Rec) + FT_GLUE(ft_service_,FT_SERVICE_NAME) = + { +#define _FT_SERVICE_FIELD(type_,name_) \ + FT_GLUE(FT_SERVICE_PREFIX,name_), + FT_SERVICE_FIELDS +#undef _FT_SERVICE_FIELD + }; + +#else /* FT_CONFIG_OPTION_PIC */ + + void FT_GLUE(ft_pic_service_init_,FT_SERVICE_NAME)( + FT_GLUE3(FT_Service_,FT_SERVICE_NAME,Rec)* clazz ) + { +#define _FT_SERVICE_FIELD(type_,name_) \ + clazz->name_ = FT_GLUE(FT_SERVICE_PREFIX,name_); + FT_SERVICE_FIELDS +#undef _FT_SERVICE_FIELD + } + +#endif /* FT_CONFIG_OPTION_PIC */ + +#undef FT_SERVICE_NAME +#undef FT_SERVICE_FIELDS +#undef FT_SERVICE_PREFIX diff --git a/include/freetype/internal/services/listdecl.h b/include/freetype/internal/services/listdecl.h new file mode 100644 index 000000000..71f7cd0ff --- /dev/null +++ b/include/freetype/internal/services/listdecl.h @@ -0,0 +1,58 @@ +/***************************************************************************/ +/* */ +/* services/listdecl.h */ +/* */ +/* Service list declaration template */ +/* */ +/* Copyright 2009 by David Turner */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + +/* this header file can be included multipled times and is used + * to declare a list of services in a given module. It relies on + * FT_SERVICE_LIST_NAME and FT_SERVICE_LIST_FIELDS being defined + * + * FT_SERVICE_NAME is the name of the service list + * FT_SERVICE_ITEMS is a list of _FT_SERVICE_ITEM(id,value) + * statements that will be used to define the corresponding service + * item in the list + */ + +#ifndef FT_SERVICE_ITEMS +#error FT_SERVICE_ITEMS must be defined +#endif + +#ifndef FT_SERVICE_NAME +#error FT_SERVICE_NAME must be defined +#endif + +#ifdef FT_CONFIG_OPTION_PIC + +/* For PIC mode, count the number of items in the list + * and define the appropriate array type. + */ + /* compute number of active items in array */ + enum { + FT_GLUE(_ft_service_count_,FT_SERVICE_NAME) = 0 + #define _FT_SERVICE_ITEM(x,y) +1 + FT_SERVICE_ITEMS + #undef _FT_SERVICE_ITEM + }; + + typedef FT_ServiceDescRec FT_GLUE(FT_ServiceItems_,FT_SERVICE_NAME) + [ FT_GLUE(_ft_service_count_,FT_SERVICE_NAME)+1 ]; + + void + FT_GLUE(ft_pic_services_init_,FT_SERVICE_NAME) + ( FT_ServiceDescRec* items, FT_Library library ); + +#endif /* FT_CONFIG_OPTION_PIC */ + +#undef FT_SERVICE_NAME +#undef FT_SERVICE_ITEMS diff --git a/include/freetype/internal/services/listdef.h b/include/freetype/internal/services/listdef.h new file mode 100644 index 000000000..a12e521f7 --- /dev/null +++ b/include/freetype/internal/services/listdef.h @@ -0,0 +1,70 @@ +/***************************************************************************/ +/* */ +/* services/listdef.h */ +/* */ +/* Service list definition template */ +/* */ +/* Copyright 2009 by David Turner */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + +/* this header file can be included multipled times and is used + * to declare a list of services in a given module. It relies on + * FT_SERVICE_LIST_NAME and FT_SERVICE_LIST_FIELDS being defined + * + * FT_SERVICE_NAME is the name of the service list + * FT_SERVICE_ITEMS is a list of _FT_SERVICE_ITEM(id,value) + * statements that will be used to define the corresponding service + * item in the list + */ + +#ifndef FT_SERVICE_ITEMS +#error FT_SERVICE_ITEMS must be defined +#endif + +#ifndef FT_SERVICE_NAME +#error FT_SERVICE_NAME must be defined +#endif + +#ifndef FT_SERVICE_VARNAME +#error FT_SERVICE_VARNAME must be defined +#endif + +#ifndef FT_CONFIG_OPTION_PIC + + static const FT_ServiceDescRec FT_SERVICE_VARNAME[] = + { + #define _FT_SERVICE_ITEM(id_,value_) { id_, value_ }, + FT_SERVICE_ITEMS + #undef _FT_SERVICE_ITEM + { NULL, NULL } + }; + +#else /* FT_CONFIG_OPTION_PIC */ + + void + FT_GLUE(ft_pic_services_init_,FT_SERVICE_NAME) + ( FT_ServiceDescRec* items, FT_Library library ) + { + FT_ServiceDescRec* desc = items; + #define _FT_SERVICE_ITEM(id_,value_) \ + desc->serv_id = FT_GLUE(FT_SERVICE_ID_,id_); \ + desc->serv_data = value_; \ + desc ++; + FT_SERVICE_ITEMS + #undef _FT_SERVICE_ITEM + desc->serv_id = NULL; + desc->serv_data = NULL; + } + +#endif /* FT_CONFIG_OPTION_PIC */ + +#undef FT_SERVICE_NAME +#undef FT_SERVICE_VARNAME +#undef FT_SERVICE_ITEMS diff --git a/include/freetype/internal/services/svpsinfo.h b/include/freetype/internal/services/svpsinfo.h index cf90e227d..bf47d7f38 100644 --- a/include/freetype/internal/services/svpsinfo.h +++ b/include/freetype/internal/services/svpsinfo.h @@ -25,7 +25,6 @@ FT_BEGIN_HEADER - #define FT_SERVICE_ID_POSTSCRIPT_INFO "postscript-info" @@ -44,41 +43,16 @@ FT_BEGIN_HEADER (*PS_GetFontPrivateFunc)( FT_Face face, PS_PrivateRec* afont_private ); +#define FT_PSINFO_SERVICE_FIELDS \ + _FT_SERVICE_FIELD( PS_GetFontInfoFunc, get_font_info ) \ + _FT_SERVICE_FIELD( PS_GetFontExtraFunc, get_font_extra ) \ + _FT_SERVICE_FIELD( PS_HasGlyphNamesFunc, has_glyph_names ) \ + _FT_SERVICE_FIELD( PS_GetFontPrivateFunc, get_font_private ) \ - FT_DEFINE_SERVICE( PsInfo ) - { - PS_GetFontInfoFunc ps_get_font_info; - PS_GetFontExtraFunc ps_get_font_extra; - PS_HasGlyphNamesFunc ps_has_glyph_names; - PS_GetFontPrivateFunc ps_get_font_private; - }; +#define FT_SERVICE_NAME PsInfo +#define FT_SERVICE_FIELDS FT_PSINFO_SERVICE_FIELDS -#ifndef FT_CONFIG_OPTION_PIC - -#define FT_DEFINE_SERVICE_PSINFOREC(class_, get_font_info_, \ - ps_get_font_extra_, has_glyph_names_, get_font_private_) \ - static const FT_Service_PsInfoRec class_ = \ - { \ - get_font_info_, ps_get_font_extra_, has_glyph_names_, \ - get_font_private_ \ - }; - -#else /* FT_CONFIG_OPTION_PIC */ - -#define FT_DEFINE_SERVICE_PSINFOREC(class_, get_font_info_, \ - ps_get_font_extra_, has_glyph_names_, get_font_private_) \ - void \ - ft_pic_init_##class_( FT_Library library, \ - FT_Service_PsInfoRec* clazz) \ - { \ - FT_UNUSED(library); \ - clazz->ps_get_font_info = get_font_info_; \ - clazz->ps_get_font_extra = ps_get_font_extra_; \ - clazz->ps_has_glyph_names = has_glyph_names_; \ - clazz->ps_get_font_private = get_font_private_; \ - } - -#endif /* FT_CONFIG_OPTION_PIC */ +#include FT_INTERNAL_SERVICE_DECLARE_H /* */ diff --git a/src/base/ftfstype.c b/src/base/ftfstype.c index d0ef7b7c1..d4934cc78 100644 --- a/src/base/ftfstype.c +++ b/src/base/ftfstype.c @@ -38,12 +38,12 @@ FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); - if ( service && service->ps_get_font_extra ) + if ( service && service->get_font_extra ) { PS_FontExtraRec extra; - if ( !service->ps_get_font_extra( face, &extra ) && + if ( !service->get_font_extra( face, &extra ) && extra.fs_type != 0 ) return extra.fs_type; } diff --git a/src/base/fttype1.c b/src/base/fttype1.c index 3975584db..e84f8de43 100644 --- a/src/base/fttype1.c +++ b/src/base/fttype1.c @@ -38,8 +38,8 @@ FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); - if ( service && service->ps_get_font_info ) - error = service->ps_get_font_info( face, afont_info ); + if ( service && service->get_font_info ) + error = service->get_font_info( face, afont_info ); } return error; @@ -59,8 +59,8 @@ { FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); - if ( service && service->ps_has_glyph_names ) - result = service->ps_has_glyph_names( face ); + if ( service && service->has_glyph_names ) + result = service->has_glyph_names( face ); } return result; @@ -83,8 +83,8 @@ FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO ); - if ( service && service->ps_get_font_private ) - error = service->ps_get_font_private( face, afont_private ); + if ( service && service->get_font_private ) + error = service->get_font_private( face, afont_private ); } return error; diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c index 8e99b73ea..3daa65ec2 100644 --- a/src/cff/cffdrivr.c +++ b/src/cff/cffdrivr.c @@ -329,9 +329,10 @@ static FT_Error - cff_ps_get_font_info( CFF_Face face, + cff_ps_get_font_info( FT_Face face_, PS_FontInfoRec* afont_info ) { + CFF_Face face = (CFF_Face)face_; CFF_Font cff = (CFF_Font)face->extra.data; FT_Error error = FT_Err_Ok; @@ -378,13 +379,22 @@ } +#define FT_SERVICE_FIELDS FT_PSINFO_SERVICE_FIELDS +#define FT_SERVICE_NAME PsInfo +#define FT_SERVICE_PREFIX cff_ps_ +#define cff_ps_get_font_extra NULL +#define cff_ps_get_font_private NULL + +#include FT_INTERNAL_SERVICE_DEFINE_H + +#if 0 FT_DEFINE_SERVICE_PSINFOREC(cff_service_ps_info, (PS_GetFontInfoFunc) cff_ps_get_font_info, (PS_GetFontExtraFunc) NULL, (PS_HasGlyphNamesFunc) cff_ps_has_glyph_names, (PS_GetFontPrivateFunc)NULL /* unsupported with CFF fonts */ ) - +#endif /* * POSTSCRIPT NAME SERVICE @@ -585,20 +595,20 @@ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ -#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES +#define FT_SERVICE_ITEMS CFF_SERVICE_ITEMS +#define FT_SERVICE_NAME cff +#define FT_SERVICE_VARNAME cff_services + +#include FT_INTERNAL_SERVICE_LIST_DEFINE_H + +#if 0 FT_DEFINE_SERVICEDESCREC6(cff_services, FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CFF, FT_SERVICE_ID_POSTSCRIPT_INFO, &FT_CFF_SERVICE_PS_INFO_GET, FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_CFF_SERVICE_PS_NAME_GET, - FT_SERVICE_ID_GLYPH_DICT, &FT_CFF_SERVICE_GLYPH_DICT_GET, - FT_SERVICE_ID_TT_CMAP, &FT_CFF_SERVICE_GET_CMAP_INFO_GET, - FT_SERVICE_ID_CID, &FT_CFF_SERVICE_CID_INFO_GET - ) -#else - FT_DEFINE_SERVICEDESCREC5(cff_services, - FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CFF, - FT_SERVICE_ID_POSTSCRIPT_INFO, &FT_CFF_SERVICE_PS_INFO_GET, - FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_CFF_SERVICE_PS_NAME_GET, + IF_GLYPH_NAMES( + FT_SERVICE_ID_GLYPH_DICT, &FT_CFF_SERVICE_GLYPH_DICT_GET, + ) FT_SERVICE_ID_TT_CMAP, &FT_CFF_SERVICE_GET_CMAP_INFO_GET, FT_SERVICE_ID_CID, &FT_CFF_SERVICE_CID_INFO_GET ) diff --git a/src/cff/cffpic.c b/src/cff/cffpic.c index d7767f4d7..d846a7f58 100644 --- a/src/cff/cffpic.c +++ b/src/cff/cffpic.c @@ -24,8 +24,6 @@ #ifdef FT_CONFIG_OPTION_PIC /* forward declaration of PIC init functions from cffdrivr.c */ - FT_Error ft_library_pic_alloc_cff_services( FT_Library, FT_ServiceDescRec**); - void ft_library_pic_free_cff_services( FT_Library, FT_ServiceDescRec*); void ft_pic_init_cff_service_ps_info( FT_Library, FT_Service_PsInfoRec*); void ft_pic_init_cff_service_glyph_dict( FT_Library, FT_Service_GlyphDictRec*); void ft_pic_init_cff_service_ps_name( FT_Library, FT_Service_PsFontNameRec*); @@ -41,20 +39,6 @@ void ft_pic_init_cff_cmap_unicode_class_rec( FT_Library, FT_CMap_ClassRec*); #endif - static void - pic_cff_done( void* _cff, FT_PicTable pic ) - { - CffModulePIC* container = (CffModulePIC*) _cff; - - - if (container->cff_services) - { - ft_library_pic_free_cff_services(pic->library, container->cff_services); - container->cff_services = NULL; - } - } - - static FT_Error pic_cff_init( void* _cff, FT_PicTable pic ) { @@ -62,13 +46,6 @@ FT_Error error = FT_Err_Ok; CffModulePIC* container = (CffModulePIC*) _cff; - /* initialize pointer table - this is how the module usually expects this data */ - error = ft_library_pic_alloc_cff_services(library, &container->cff_services); - if(error) - goto Exit; - - cff_pic_field_handlers_init(container->cff_field_handlers); - ft_pic_init_cff_service_ps_info (library, &container->cff_service_ps_info); ft_pic_init_cff_service_glyph_dict (library, &container->cff_service_glyph_dict); ft_pic_init_cff_service_ps_name (library, &container->cff_service_ps_name); @@ -80,8 +57,11 @@ &container->cff_cmap_encoding_class_rec); ft_pic_init_cff_cmap_unicode_class_rec (library, &container->cff_cmap_unicode_class_rec); -Exit: - return error; + + cff_pic_field_handlers_init(container->cff_field_handlers); + ft_pic_services_init_Cff( &container->cff_services, library ); + + return 0; } @@ -93,7 +73,7 @@ Exit: return ft_pic_table_init_data( pic, pic->cff, sizeof(CffModulePIC), pic_cff_init, - pic_cff_done ); + NULL ); } #endif /* FT_CONFIG_OPTION_PIC */ diff --git a/src/cff/cffpic.h b/src/cff/cffpic.h index 6038e1dcb..217864890 100644 --- a/src/cff/cffpic.h +++ b/src/cff/cffpic.h @@ -19,9 +19,34 @@ #ifndef __CFFPIC_H__ #define __CFFPIC_H__ - FT_BEGIN_HEADER +#include FT_INTERNAL_OBJECTS_H + +/* CFF services list */ +#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES +# define IF_GLYPH_NAMES(x) x +#else +# define IF_GLYPH_NAMES(x) /* nothing */ +#endif + +#define CFF_SERVICE_ITEMS \ + _FT_SERVICE_ITEM( XF86_NAME, FT_XF86_FORMAT_CFF ) \ + _FT_SERVICE_ITEM( POSTSCRIPT_INFO, &FT_CFF_SERVICE_PS_INFO_GET ) \ + _FT_SERVICE_ITEM( POSTSCRIPT_FONT_NAME, &FT_CFF_SERVICE_PS_NAME_GET ) \ + IF_GLYPH_NAMES( \ + _FT_SERVICE_ITEM( GLYPH_DICT, &FT_CFF_SERVICE_GLYPH_DICT_GET ) \ + ) \ + _FT_SERVICE_ITEM( TT_CMAP, &FT_CFF_SERVICE_GET_CMAP_INFO_GET ) \ + _FT_SERVICE_ITEM( CID, &FT_CFF_SERVICE_CID_INFO_GET ) \ + +#define FT_SERVICE_NAME Cff +#define FT_SERVICE_ITEMS CFF_SERVICE_ITEMS + +#include FT_INTERNAL_SERVICE_LIST_DECLARE_H + + + #include FT_INTERNAL_PIC_H #ifndef FT_CONFIG_OPTION_PIC @@ -36,9 +61,6 @@ FT_BEGIN_HEADER #include FT_SERVICE_TT_CMAP_H #include FT_SERVICE_CID_H -#define COUNT__(prefix_) prefix_##__LINE__ -#define COUNT_(prefix_) COUNT__(prefix_) - /* count the number of items declared by cfftoken.h */ enum { CFF_FIELD_HANDLER_COUNT = 0 @@ -50,7 +72,6 @@ enum { typedef struct CffModulePIC_ { - FT_ServiceDescRec* cff_services; FT_Service_PsInfoRec cff_service_ps_info; FT_Service_GlyphDictRec cff_service_glyph_dict; FT_Service_PsFontNameRec cff_service_ps_name; @@ -59,9 +80,10 @@ enum { FT_CMap_ClassRec cff_cmap_encoding_class_rec; FT_CMap_ClassRec cff_cmap_unicode_class_rec; CFF_Field_Handler cff_field_handlers[CFF_FIELD_HANDLER_COUNT+1]; + FT_ServiceItems_Cff cff_services; } CffModulePIC; -#define CFF_GET_PIC(lib) ((CffModulePIC*)((lib)->pic_table.cff)) +#define CFF_GET_PIC(lib) ((CffModulePIC*)FT_LIBRARY_GET_PIC_DATA(lib,cff)) #define FT_CFF_CONST_(name_) (CFF_GET_PIC(library)->cff_##name_) #endif /* FT_CONFIG_OPTION_PIC */