| Index: src/cff/cffdrivr.c
|
| diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c
|
| index eb4c14ee5d3578570b41d2e0beb2155d6d825862..c8ca96ba49541f3474c4d3278086c69d441ca92e 100644
|
| --- a/src/cff/cffdrivr.c
|
| +++ b/src/cff/cffdrivr.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* OpenType font driver implementation (body). */
|
| /* */
|
| -/* Copyright 1996-2012 by */
|
| +/* Copyright 1996-2013 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -37,6 +37,8 @@
|
|
|
| #include FT_SERVICE_XFREE86_NAME_H
|
| #include FT_SERVICE_GLYPH_DICT_H
|
| +#include FT_SERVICE_PROPERTIES_H
|
| +#include FT_CFF_DRIVER_H
|
|
|
|
|
| /*************************************************************************/
|
| @@ -115,7 +117,7 @@
|
| if ( sfnt )
|
| kerning->x = sfnt->get_kerning( face, left_glyph, right_glyph );
|
|
|
| - return CFF_Err_Ok;
|
| + return FT_Err_Ok;
|
| }
|
|
|
|
|
| @@ -160,7 +162,7 @@
|
|
|
|
|
| if ( !slot )
|
| - return CFF_Err_Invalid_Slot_Handle;
|
| + return FT_THROW( Invalid_Slot_Handle );
|
|
|
| /* check whether we want a scaled outline or bitmap */
|
| if ( !size )
|
| @@ -174,7 +176,7 @@
|
| {
|
| /* these two objects must have the same parent */
|
| if ( cffsize->face != cffslot->face )
|
| - return CFF_Err_Invalid_Face_Handle;
|
| + return FT_THROW( Invalid_Face_Handle );
|
| }
|
|
|
| /* now load the glyph outline if necessary */
|
| @@ -195,7 +197,7 @@
|
| FT_Fixed* advances )
|
| {
|
| FT_UInt nn;
|
| - FT_Error error = CFF_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| FT_GlyphSlot slot = face->glyph;
|
|
|
|
|
| @@ -239,7 +241,7 @@
|
| " cannot get glyph name from CFF & CEF fonts\n"
|
| " "
|
| " without the `PSNames' module\n" ));
|
| - error = CFF_Err_Missing_Module;
|
| + error = FT_THROW( Missing_Module );
|
| goto Exit;
|
| }
|
|
|
| @@ -252,7 +254,7 @@
|
| if ( gname )
|
| FT_STRCPYN( buffer, gname, buffer_max );
|
|
|
| - error = CFF_Err_Ok;
|
| + error = FT_Err_Ok;
|
|
|
| Exit:
|
| return error;
|
| @@ -298,7 +300,8 @@
|
| }
|
|
|
|
|
| - FT_DEFINE_SERVICE_GLYPHDICTREC(cff_service_glyph_dict,
|
| + FT_DEFINE_SERVICE_GLYPHDICTREC(
|
| + cff_service_glyph_dict,
|
| (FT_GlyphDict_GetNameFunc) cff_get_glyph_name,
|
| (FT_GlyphDict_NameIndexFunc)cff_get_name_index
|
| )
|
| @@ -321,7 +324,7 @@
|
| PS_FontInfoRec* afont_info )
|
| {
|
| CFF_Font cff = (CFF_Font)face->extra.data;
|
| - FT_Error error = CFF_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
|
|
|
|
| if ( cff && cff->font_info == NULL )
|
| @@ -360,7 +363,8 @@
|
| }
|
|
|
|
|
| - FT_DEFINE_SERVICE_PSINFOREC(cff_service_ps_info,
|
| + 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,
|
| @@ -384,7 +388,8 @@
|
| }
|
|
|
|
|
| - FT_DEFINE_SERVICE_PSFONTNAMEREC(cff_service_ps_name,
|
| + FT_DEFINE_SERVICE_PSFONTNAMEREC(
|
| + cff_service_ps_name,
|
| (FT_PsName_GetFunc)cff_get_ps_name
|
| )
|
|
|
| @@ -404,16 +409,17 @@
|
| TT_CMapInfo *cmap_info )
|
| {
|
| FT_CMap cmap = FT_CMAP( charmap );
|
| - FT_Error error = CFF_Err_Ok;
|
| - FT_Face face = FT_CMAP_FACE( cmap );
|
| - FT_Library library = FT_FACE_LIBRARY( face );
|
| + FT_Error error = FT_Err_Ok;
|
| +
|
| + FT_Face face = FT_CMAP_FACE( cmap );
|
| + FT_Library library = FT_FACE_LIBRARY( face );
|
|
|
|
|
| cmap_info->language = 0;
|
| cmap_info->format = 0;
|
|
|
| - if ( cmap->clazz != &FT_CFF_CMAP_ENCODING_CLASS_REC_GET &&
|
| - cmap->clazz != &FT_CFF_CMAP_UNICODE_CLASS_REC_GET )
|
| + if ( cmap->clazz != &CFF_CMAP_ENCODING_CLASS_REC_GET &&
|
| + cmap->clazz != &CFF_CMAP_UNICODE_CLASS_REC_GET )
|
| {
|
| FT_Module sfnt = FT_Get_Module( library, "sfnt" );
|
| FT_Service_TTCMaps service =
|
| @@ -429,7 +435,8 @@
|
| }
|
|
|
|
|
| - FT_DEFINE_SERVICE_TTCMAPSREC(cff_service_get_cmap_info,
|
| + FT_DEFINE_SERVICE_TTCMAPSREC(
|
| + cff_service_get_cmap_info,
|
| (TT_CMap_Info_GetFunc)cff_get_cmap_info
|
| )
|
|
|
| @@ -444,7 +451,7 @@
|
| const char* *ordering,
|
| FT_Int *supplement )
|
| {
|
| - FT_Error error = CFF_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| CFF_Font cff = (CFF_Font)face->extra.data;
|
|
|
|
|
| @@ -455,7 +462,7 @@
|
|
|
| if ( dict->cid_registry == 0xFFFFU )
|
| {
|
| - error = CFF_Err_Invalid_Argument;
|
| + error = FT_THROW( Invalid_Argument );
|
| goto Fail;
|
| }
|
|
|
| @@ -499,7 +506,7 @@
|
| cff_get_is_cid( CFF_Face face,
|
| FT_Bool *is_cid )
|
| {
|
| - FT_Error error = CFF_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| CFF_Font cff = (CFF_Font)face->extra.data;
|
|
|
|
|
| @@ -523,7 +530,7 @@
|
| FT_UInt glyph_index,
|
| FT_UInt *cid )
|
| {
|
| - FT_Error error = CFF_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| CFF_Font cff;
|
|
|
|
|
| @@ -537,13 +544,13 @@
|
|
|
| if ( dict->cid_registry == 0xFFFFU )
|
| {
|
| - error = CFF_Err_Invalid_Argument;
|
| + error = FT_THROW( Invalid_Argument );
|
| goto Fail;
|
| }
|
|
|
| if ( glyph_index > cff->num_glyphs )
|
| {
|
| - error = CFF_Err_Invalid_Argument;
|
| + error = FT_THROW( Invalid_Argument );
|
| goto Fail;
|
| }
|
|
|
| @@ -558,13 +565,100 @@
|
| }
|
|
|
|
|
| - FT_DEFINE_SERVICE_CIDREC(cff_service_cid_info,
|
| + FT_DEFINE_SERVICE_CIDREC(
|
| + cff_service_cid_info,
|
| (FT_CID_GetRegistryOrderingSupplementFunc)cff_get_ros,
|
| (FT_CID_GetIsInternallyCIDKeyedFunc) cff_get_is_cid,
|
| (FT_CID_GetCIDFromGlyphIndexFunc) cff_get_cid_from_glyph_index
|
| )
|
|
|
|
|
| + /*
|
| + * PROPERTY SERVICE
|
| + *
|
| + */
|
| + static FT_Error
|
| + cff_property_set( FT_Module module, /* CFF_Driver */
|
| + const char* property_name,
|
| + const void* value )
|
| + {
|
| + FT_Error error = FT_Err_Ok;
|
| + CFF_Driver driver = (CFF_Driver)module;
|
| +
|
| +
|
| + if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
| + {
|
| + FT_UInt* hinting_engine = (FT_UInt*)value;
|
| +
|
| +
|
| +#ifndef CFF_CONFIG_OPTION_OLD_ENGINE
|
| + if ( *hinting_engine != FT_CFF_HINTING_ADOBE )
|
| + error = FT_ERR( Unimplemented_Feature );
|
| + else
|
| +#endif
|
| + driver->hinting_engine = *hinting_engine;
|
| +
|
| + return error;
|
| + }
|
| + else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
| + {
|
| + FT_Bool* no_stem_darkening = (FT_Bool*)value;
|
| +
|
| +
|
| + driver->no_stem_darkening = *no_stem_darkening;
|
| +
|
| + return error;
|
| + }
|
| +
|
| + FT_TRACE0(( "cff_property_set: missing property `%s'\n",
|
| + property_name ));
|
| + return FT_THROW( Missing_Property );
|
| + }
|
| +
|
| +
|
| + static FT_Error
|
| + cff_property_get( FT_Module module, /* CFF_Driver */
|
| + const char* property_name,
|
| + const void* value )
|
| + {
|
| + FT_Error error = FT_Err_Ok;
|
| + CFF_Driver driver = (CFF_Driver)module;
|
| +
|
| + FT_UInt hinting_engine = driver->hinting_engine;
|
| + FT_Bool no_stem_darkening = driver->no_stem_darkening;
|
| +
|
| +
|
| + if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
| + {
|
| + FT_UInt* val = (FT_UInt*)value;
|
| +
|
| +
|
| + *val = hinting_engine;
|
| +
|
| + return error;
|
| + }
|
| + else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
| + {
|
| + FT_Bool* val = (FT_Bool*)value;
|
| +
|
| +
|
| + *val = no_stem_darkening;
|
| +
|
| + return error;
|
| + }
|
| +
|
| + FT_TRACE0(( "cff_property_get: missing property `%s'\n",
|
| + property_name ));
|
| + return FT_THROW( Missing_Property );
|
| + }
|
| +
|
| +
|
| + FT_DEFINE_SERVICE_PROPERTIESREC(
|
| + cff_service_properties,
|
| + (FT_Properties_SetFunc)cff_property_set,
|
| + (FT_Properties_GetFunc)cff_property_get )
|
| +
|
| +
|
| /*************************************************************************/
|
| /*************************************************************************/
|
| /*************************************************************************/
|
| @@ -576,25 +670,31 @@
|
| /*************************************************************************/
|
| /*************************************************************************/
|
| /*************************************************************************/
|
| +
|
| #ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
|
| - FT_DEFINE_SERVICEDESCREC6(cff_services,
|
| + FT_DEFINE_SERVICEDESCREC7(
|
| + 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
|
| + FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
|
| + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
|
| + FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
|
| + FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
|
| + FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
|
| + FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
|
| )
|
| #else
|
| - FT_DEFINE_SERVICEDESCREC5(cff_services,
|
| + 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_TT_CMAP, &FT_CFF_SERVICE_GET_CMAP_INFO_GET,
|
| - FT_SERVICE_ID_CID, &FT_CFF_SERVICE_CID_INFO_GET
|
| + FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
|
| + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
|
| + FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
|
| + FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
|
| + FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
|
| )
|
| #endif
|
|
|
| +
|
| FT_CALLBACK_DEF( FT_Module_Interface )
|
| cff_get_interface( FT_Module driver, /* CFF_Driver */
|
| const char* module_interface )
|
| @@ -604,7 +704,7 @@
|
| FT_Module_Interface result;
|
|
|
|
|
| - /* FT_CFF_SERVICES_GET derefers `library' in PIC mode */
|
| + /* CFF_SERVICES_GET derefers `library' in PIC mode */
|
| #ifdef FT_CONFIG_OPTION_PIC
|
| if ( !driver )
|
| return NULL;
|
| @@ -613,7 +713,7 @@
|
| return NULL;
|
| #endif
|
|
|
| - result = ft_service_list_lookup( FT_CFF_SERVICES_GET, module_interface );
|
| + result = ft_service_list_lookup( CFF_SERVICES_GET, module_interface );
|
| if ( result != NULL )
|
| return result;
|
|
|
| @@ -641,7 +741,8 @@
|
| #define CFF_SIZE_SELECT 0
|
| #endif
|
|
|
| - FT_DEFINE_DRIVER( cff_driver_class,
|
| + FT_DEFINE_DRIVER(
|
| + cff_driver_class,
|
|
|
| FT_MODULE_FONT_DRIVER |
|
| FT_MODULE_DRIVER_SCALABLE |
|
| @@ -670,9 +771,6 @@
|
| cff_slot_init,
|
| cff_slot_done,
|
|
|
| - ft_stub_set_char_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
| - ft_stub_set_pixel_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
| -
|
| cff_glyph_load,
|
|
|
| cff_get_kerning,
|
|
|