2000-12-08 03:42:29 +01:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* cffdrivr.c */
|
|
|
|
/* */
|
|
|
|
/* OpenType font driver implementation (body). */
|
|
|
|
/* */
|
2017-01-04 20:16:34 +01:00
|
|
|
/* Copyright 1996-2017 by */
|
2000-12-08 03:42:29 +01:00
|
|
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
|
|
|
/* */
|
|
|
|
/* 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. */
|
|
|
|
/* */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
2000-12-08 17:17:16 +01:00
|
|
|
|
2000-12-08 03:42:29 +01:00
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_FREETYPE_H
|
|
|
|
#include FT_INTERNAL_DEBUG_H
|
|
|
|
#include FT_INTERNAL_STREAM_H
|
|
|
|
#include FT_INTERNAL_SFNT_H
|
2007-07-16 22:46:05 +02:00
|
|
|
#include FT_SERVICE_CID_H
|
* include/freetype/internal/bdftypes.h: removed obsolete header
* include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
'include/freetype/internal' to 'src/cff' since no other modules needs
to known about these types
* include/freetype/internal/t42types.h,
include/freetype/internal/internal.h, src/type42/t42objs.h,
src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
'include/freetype/internal' to 'src/type42' since no other modules needs
to known about these types
* src/gzip/infblock.c: removing compiler warning
* include/freetype/internal/services/svpsinfo.h,
include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
in "svpsinfo.h", removing some sad hacks.
2003-10-29 22:43:52 +01:00
|
|
|
#include FT_SERVICE_POSTSCRIPT_INFO_H
|
2007-07-11 07:32:00 +02:00
|
|
|
#include FT_SERVICE_POSTSCRIPT_NAME_H
|
2004-01-11 11:01:08 +01:00
|
|
|
#include FT_SERVICE_TT_CMAP_H
|
2017-09-24 22:20:38 +02:00
|
|
|
#include FT_SERVICE_CFF_TABLE_LOAD_H
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2001-03-20 12:14:24 +01:00
|
|
|
#include "cffdrivr.h"
|
|
|
|
#include "cffgload.h"
|
|
|
|
#include "cffload.h"
|
2004-01-22 10:07:12 +01:00
|
|
|
#include "cffcmap.h"
|
2009-04-05 17:12:03 +02:00
|
|
|
#include "cffparse.h"
|
Move struct declarations to `freetype/internal'.
NOTE: Does not compile!
This is so that the CFF functions moved to `psaux' can access the
same structs that they need.
* src/cff/cfftypes.h: Moved to...
* include/freetype/internal/cfftypes.h: ...Here.
* src/cff/cffobjs.h: Moved the struct declarations to...
* include/freetype/internal/cffotypes.h: ... this new file.
* include/freetype/internal/internal.h (FT_INTERNAL_CFF_TYPES_H,
FT_INTERNAL_CFF_OBJECT_TYPES_H): New macros.
* src/cff/cffcmap.h, src/cff/cffdrivr.c, src/cff/cffgload.c,
src/cff/cffgload.h, src/cff/cffload.h, src/cff/cffobjs.c,
src/cff/cffobjs.h, src/cff/cffparse.h, src/psaux/psobjs.h,
include/freetype/internal/psaux.h,
include/freetype/internal/services/svcfftl.h: Update includes.
* src/cff/rules.mk (CFF_DRV_H): Updated.
2017-09-24 22:28:07 +02:00
|
|
|
#include "cffobjs.h"
|
2000-12-08 17:17:16 +01:00
|
|
|
|
2016-12-14 19:31:42 +01:00
|
|
|
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
|
|
|
#include FT_SERVICE_MULTIPLE_MASTERS_H
|
2017-01-31 23:06:38 +01:00
|
|
|
#include FT_SERVICE_METRICS_VARIATIONS_H
|
2016-12-14 19:31:42 +01:00
|
|
|
#endif
|
|
|
|
|
Complete redesign of error codes. Please check ftmoderr.h for more
details.
* include/freetype/internal/cfferrs.h,
include/freetype/internal/tterrors.h,
include/freetype/internal/t1errors.h: Removed. Replaced with files
local to the module. All extra error codes have been moved to
`fterrors.h'.
* src/sfnt/ttpost.h: Move error codes to `fterrors.h'.
* src/autohint/aherrors.h, src/cache/ftcerror.h, src/cff/cfferrs.h,
src/cid/ciderrs.h, src/pcf/pcferror.h, src/psaux/psauxerr.h,
src/psnames/psnamerr.h, src/raster/rasterrs.h, src/sfnt/sferrors.h,
src/smooth/ftsmerrs.h, src/truetype/tterrors.h,
src/type1/t1errors.h, src/winfonts/fnterrs.h: New files defining the
error names for the module it belongs to.
* include/freetype/ftmoderr.h: New file, defining the module error
offsets. Its structure is similar to `fterrors.h'.
* include/freetype/fterrors.h (FT_NOERRORDEF): New macro.
(FT_ERRORDEF): Redefined to use module error offsets.
All internal error codes are now public; unused error codes have
been removed, some are new.
* include/freetype/config/ftheader.h (FT_MODULE_ERRORS_H): New
macro.
* include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_USE_MODULE_ERRORS): New macro.
All other source files have been updated to use the new error codes;
some already existing (internal) error codes local to a module have
been renamed to give them the same name as in the base module.
All make files have been updated to include the local error files.
* src/cid/cidtokens.h: Replaced with...
* src/cid/cidtoken.h: This file for 8+3 consistency.
* src/raster/ftraster.c: Use macros for header file names.
2001-06-06 19:30:41 +02:00
|
|
|
#include "cfferrs.h"
|
2009-04-05 17:12:03 +02:00
|
|
|
#include "cffpic.h"
|
Complete redesign of error codes. Please check ftmoderr.h for more
details.
* include/freetype/internal/cfferrs.h,
include/freetype/internal/tterrors.h,
include/freetype/internal/t1errors.h: Removed. Replaced with files
local to the module. All extra error codes have been moved to
`fterrors.h'.
* src/sfnt/ttpost.h: Move error codes to `fterrors.h'.
* src/autohint/aherrors.h, src/cache/ftcerror.h, src/cff/cfferrs.h,
src/cid/ciderrs.h, src/pcf/pcferror.h, src/psaux/psauxerr.h,
src/psnames/psnamerr.h, src/raster/rasterrs.h, src/sfnt/sferrors.h,
src/smooth/ftsmerrs.h, src/truetype/tterrors.h,
src/type1/t1errors.h, src/winfonts/fnterrs.h: New files defining the
error names for the module it belongs to.
* include/freetype/ftmoderr.h: New file, defining the module error
offsets. Its structure is similar to `fterrors.h'.
* include/freetype/fterrors.h (FT_NOERRORDEF): New macro.
(FT_ERRORDEF): Redefined to use module error offsets.
All internal error codes are now public; unused error codes have
been removed, some are new.
* include/freetype/config/ftheader.h (FT_MODULE_ERRORS_H): New
macro.
* include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_USE_MODULE_ERRORS): New macro.
All other source files have been updated to use the new error codes;
some already existing (internal) error codes local to a module have
been renamed to give them the same name as in the base module.
All make files have been updated to include the local error files.
* src/cid/cidtokens.h: Replaced with...
* src/cid/cidtoken.h: This file for 8+3 consistency.
* src/raster/ftraster.c: Use macros for header file names.
2001-06-06 19:30:41 +02:00
|
|
|
|
2015-03-11 08:09:13 +01:00
|
|
|
#include FT_SERVICE_FONT_FORMAT_H
|
* include/freetype/ftmm.h, include/freetype/ftmodule.h,
include/freetype/tttables.h, include/freetype/config/ftconfig.h,
include/freetype/internal/ftobjs.h,
include/freetype/internal/ftserv.h,
include/freetype/internal/internal.h,
include/freetype/internal/sfnt.h,
include/freetype/internal/tttypes.h,
include/freetype/internal/services/bdf.h,
include/freetype/internal/services/glyfdict.h,
include/freetype/internal/services/multmast.h,
include/freetype/internal/services/postname.h,
include/freetype/internal/services/sfnt.h,
include/freetype/internal/services/xf86name.h,
src/base/ftbdf.c, src/base/ftmm.c, src/base/ftobjs.c,
src/base/ftxf86.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/sfnt/sfdriver.c,
src/truetype/ttdriver.c, src/type1/t1driver.c, src/type42/t42drivr.c:
heavy internal modifications to introduce the concept of
"module services". This is the first step towards a massive
simplification of the engine's internals, in order to
get rid of various numbers of hacks.
Note that this changes will break source & binary compatibility
for authors of external font drivers.
Maybe 2.1.6 will be called 2.2.0 after all :-)
2003-09-11 21:51:54 +02:00
|
|
|
#include FT_SERVICE_GLYPH_DICT_H
|
2013-04-12 19:48:06 +02:00
|
|
|
#include FT_SERVICE_PROPERTIES_H
|
2013-06-03 12:41:58 +02:00
|
|
|
#include FT_CFF_DRIVER_H
|
Complete redesign of error codes. Please check ftmoderr.h for more
details.
* include/freetype/internal/cfferrs.h,
include/freetype/internal/tterrors.h,
include/freetype/internal/t1errors.h: Removed. Replaced with files
local to the module. All extra error codes have been moved to
`fterrors.h'.
* src/sfnt/ttpost.h: Move error codes to `fterrors.h'.
* src/autohint/aherrors.h, src/cache/ftcerror.h, src/cff/cfferrs.h,
src/cid/ciderrs.h, src/pcf/pcferror.h, src/psaux/psauxerr.h,
src/psnames/psnamerr.h, src/raster/rasterrs.h, src/sfnt/sferrors.h,
src/smooth/ftsmerrs.h, src/truetype/tterrors.h,
src/type1/t1errors.h, src/winfonts/fnterrs.h: New files defining the
error names for the module it belongs to.
* include/freetype/ftmoderr.h: New file, defining the module error
offsets. Its structure is similar to `fterrors.h'.
* include/freetype/fterrors.h (FT_NOERRORDEF): New macro.
(FT_ERRORDEF): Redefined to use module error offsets.
All internal error codes are now public; unused error codes have
been removed, some are new.
* include/freetype/config/ftheader.h (FT_MODULE_ERRORS_H): New
macro.
* include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_USE_MODULE_ERRORS): New macro.
All other source files have been updated to use the new error codes;
some already existing (internal) error codes local to a module have
been renamed to give them the same name as in the base module.
All make files have been updated to include the local error files.
* src/cid/cidtokens.h: Replaced with...
* src/cid/cidtoken.h: This file for 8+3 consistency.
* src/raster/ftraster.c: Use macros for header file names.
2001-06-06 19:30:41 +02:00
|
|
|
|
2008-04-01 07:55:48 +02:00
|
|
|
|
2000-12-08 03:42:29 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */
|
|
|
|
/* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
|
|
|
|
/* messages during execution. */
|
|
|
|
/* */
|
|
|
|
#undef FT_COMPONENT
|
2001-01-03 01:21:59 +01:00
|
|
|
#define FT_COMPONENT trace_cffdriver
|
2000-12-08 03:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/**** ****/
|
|
|
|
/**** ****/
|
|
|
|
/**** F A C E S ****/
|
|
|
|
/**** ****/
|
|
|
|
/**** ****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Function> */
|
2005-02-26 01:12:04 +01:00
|
|
|
/* cff_get_kerning */
|
2000-12-08 03:42:29 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A driver method used to return the kerning vector between two */
|
|
|
|
/* glyphs of the same face. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* face :: A handle to the source face object. */
|
|
|
|
/* */
|
|
|
|
/* left_glyph :: The index of the left glyph in the kern pair. */
|
|
|
|
/* */
|
|
|
|
/* right_glyph :: The index of the right glyph in the kern pair. */
|
|
|
|
/* */
|
|
|
|
/* <Output> */
|
|
|
|
/* kerning :: The kerning vector. This is in font units for */
|
|
|
|
/* scalable formats, and in pixels for fixed-sizes */
|
|
|
|
/* formats. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
|
|
|
/* <Note> */
|
|
|
|
/* Only horizontal layouts (left-to-right & right-to-left) are */
|
|
|
|
/* supported by this function. Other layouts, or more sophisticated */
|
|
|
|
/* kernings, are out of scope of this method (the basic driver */
|
|
|
|
/* interface is meant to be simple). */
|
|
|
|
/* */
|
|
|
|
/* They can be implemented by format-specific interfaces. */
|
|
|
|
/* */
|
* src/truetype/ttobjs.c (tt_driver_done): Fix typo.
* src/bdf/bdfdrivr.c (BDF_Face_Done, BDF_Face_Init,
BDF_Set_Pixel_Size): Don't use BDF_XXX but FT_XXX arguments which
are typecast to the proper BDF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(BDF_Set_Point_Size): New wrapper function.
(bdf_driver_class): Remove casts.
* src/cff/cffdrivr.c (Get_Kerning, Load_Glyph, cff_get_interface):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(cff_driver_class): Remove casts.
* src/cff/cffobjs.h, src/cff/cffobjs.c (cff_size_done,
cff_size_init, cff_size_reset, cff_slot_done, cff_slot_init,
cff_face_init, cff_face_done, cff_driver_init, cff_driver_done):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
(cff_point_size_reset): New wrapper function.
* src/cid/cidobjs.h, src/cid/cidobjs.c (cid_slot_done,
cid_slot_init, cid_size_done, cid_size_init, cid_size_reset,
cid_face_done, cid_face_init, cid_driver_init, cid_driver_done):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
(cid_point_size_reset): New wrapper function.
* src/cid/cidgload.c, src/cid/cidgload.h (cid_slot_load_glyph):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
* src/cid/cidriver.c (cid_get_interface):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF.
(t1cid_driver_class): Remove casts.
* src/truetype/ttdriver.c (tt_get_interface): Use FT_CALLBACK_DEF.
* src/truetype/ttgxvar.c (ft_var_load_avar): Don't free non-local
variables (this is done later).
(ft_var_load_avar): Fix call to FT_FRAME_ENTER.
(TT_Get_MM_Var): Fix size for `fvar_fields'.
(TT_Vary_Get_Glyph_Deltas): Handle deallocation of local variables
correctly.
* src/base/ftdbgmem.c (ft_mem_debug_realloc): Don't abort if
current size is zero.
2004-05-06 13:48:35 +02:00
|
|
|
FT_CALLBACK_DEF( FT_Error )
|
2005-02-26 01:12:04 +01:00
|
|
|
cff_get_kerning( FT_Face ttface, /* TT_Face */
|
|
|
|
FT_UInt left_glyph,
|
|
|
|
FT_UInt right_glyph,
|
|
|
|
FT_Vector* kerning )
|
2000-12-08 03:42:29 +01:00
|
|
|
{
|
2005-02-26 01:12:04 +01:00
|
|
|
TT_Face face = (TT_Face)ttface;
|
2005-03-03 18:09:08 +01:00
|
|
|
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2005-03-01 03:13:50 +01:00
|
|
|
|
2000-12-08 03:42:29 +01:00
|
|
|
kerning->x = 0;
|
|
|
|
kerning->y = 0;
|
|
|
|
|
2005-02-26 01:12:04 +01:00
|
|
|
if ( sfnt )
|
|
|
|
kerning->x = sfnt->get_kerning( face, left_glyph, right_glyph );
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2013-03-14 11:21:17 +01:00
|
|
|
return FT_Err_Ok;
|
2000-12-08 03:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Function> */
|
2012-02-24 12:26:25 +01:00
|
|
|
/* cff_glyph_load */
|
2000-12-08 03:42:29 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A driver method used to load a glyph within a given glyph slot. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* slot :: A handle to the target slot object where the glyph */
|
|
|
|
/* will be loaded. */
|
|
|
|
/* */
|
|
|
|
/* size :: A handle to the source face size at which the glyph */
|
|
|
|
/* must be scaled, loaded, etc. */
|
|
|
|
/* */
|
|
|
|
/* glyph_index :: The index of the glyph in the font file. */
|
|
|
|
/* */
|
|
|
|
/* load_flags :: A flag indicating what to load for this glyph. The */
|
2003-07-01 09:28:55 +02:00
|
|
|
/* FT_LOAD_??? constants can be used to control the */
|
2000-12-08 03:42:29 +01:00
|
|
|
/* glyph loading process (e.g., whether the outline */
|
|
|
|
/* should be scaled, whether to load bitmaps or not, */
|
|
|
|
/* whether to hint the outline, etc). */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
* src/truetype/ttobjs.c (tt_driver_done): Fix typo.
* src/bdf/bdfdrivr.c (BDF_Face_Done, BDF_Face_Init,
BDF_Set_Pixel_Size): Don't use BDF_XXX but FT_XXX arguments which
are typecast to the proper BDF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(BDF_Set_Point_Size): New wrapper function.
(bdf_driver_class): Remove casts.
* src/cff/cffdrivr.c (Get_Kerning, Load_Glyph, cff_get_interface):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(cff_driver_class): Remove casts.
* src/cff/cffobjs.h, src/cff/cffobjs.c (cff_size_done,
cff_size_init, cff_size_reset, cff_slot_done, cff_slot_init,
cff_face_init, cff_face_done, cff_driver_init, cff_driver_done):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
(cff_point_size_reset): New wrapper function.
* src/cid/cidobjs.h, src/cid/cidobjs.c (cid_slot_done,
cid_slot_init, cid_size_done, cid_size_init, cid_size_reset,
cid_face_done, cid_face_init, cid_driver_init, cid_driver_done):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
(cid_point_size_reset): New wrapper function.
* src/cid/cidgload.c, src/cid/cidgload.h (cid_slot_load_glyph):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
* src/cid/cidriver.c (cid_get_interface):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF.
(t1cid_driver_class): Remove casts.
* src/truetype/ttdriver.c (tt_get_interface): Use FT_CALLBACK_DEF.
* src/truetype/ttgxvar.c (ft_var_load_avar): Don't free non-local
variables (this is done later).
(ft_var_load_avar): Fix call to FT_FRAME_ENTER.
(TT_Get_MM_Var): Fix size for `fvar_fields'.
(TT_Vary_Get_Glyph_Deltas): Handle deallocation of local variables
correctly.
* src/base/ftdbgmem.c (ft_mem_debug_realloc): Don't abort if
current size is zero.
2004-05-06 13:48:35 +02:00
|
|
|
FT_CALLBACK_DEF( FT_Error )
|
2012-02-24 12:26:25 +01:00
|
|
|
cff_glyph_load( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */
|
|
|
|
FT_Size cffsize, /* CFF_Size */
|
|
|
|
FT_UInt glyph_index,
|
|
|
|
FT_Int32 load_flags )
|
2000-12-08 03:42:29 +01:00
|
|
|
{
|
2008-04-13 07:55:36 +02:00
|
|
|
FT_Error error;
|
* src/truetype/ttobjs.c (tt_driver_done): Fix typo.
* src/bdf/bdfdrivr.c (BDF_Face_Done, BDF_Face_Init,
BDF_Set_Pixel_Size): Don't use BDF_XXX but FT_XXX arguments which
are typecast to the proper BDF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(BDF_Set_Point_Size): New wrapper function.
(bdf_driver_class): Remove casts.
* src/cff/cffdrivr.c (Get_Kerning, Load_Glyph, cff_get_interface):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(cff_driver_class): Remove casts.
* src/cff/cffobjs.h, src/cff/cffobjs.c (cff_size_done,
cff_size_init, cff_size_reset, cff_slot_done, cff_slot_init,
cff_face_init, cff_face_done, cff_driver_init, cff_driver_done):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
(cff_point_size_reset): New wrapper function.
* src/cid/cidobjs.h, src/cid/cidobjs.c (cid_slot_done,
cid_slot_init, cid_size_done, cid_size_init, cid_size_reset,
cid_face_done, cid_face_init, cid_driver_init, cid_driver_done):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
(cid_point_size_reset): New wrapper function.
* src/cid/cidgload.c, src/cid/cidgload.h (cid_slot_load_glyph):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
* src/cid/cidriver.c (cid_get_interface):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF.
(t1cid_driver_class): Remove casts.
* src/truetype/ttdriver.c (tt_get_interface): Use FT_CALLBACK_DEF.
* src/truetype/ttgxvar.c (ft_var_load_avar): Don't free non-local
variables (this is done later).
(ft_var_load_avar): Fix call to FT_FRAME_ENTER.
(TT_Get_MM_Var): Fix size for `fvar_fields'.
(TT_Vary_Get_Glyph_Deltas): Handle deallocation of local variables
correctly.
* src/base/ftdbgmem.c (ft_mem_debug_realloc): Don't abort if
current size is zero.
2004-05-06 13:48:35 +02:00
|
|
|
CFF_GlyphSlot slot = (CFF_GlyphSlot)cffslot;
|
|
|
|
CFF_Size size = (CFF_Size)cffsize;
|
2000-12-08 03:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
if ( !slot )
|
2013-03-14 10:27:35 +01:00
|
|
|
return FT_THROW( Invalid_Slot_Handle );
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2013-08-26 12:55:48 +02:00
|
|
|
FT_TRACE1(( "cff_glyph_load: glyph index %d\n", glyph_index ));
|
|
|
|
|
2000-12-08 03:42:29 +01:00
|
|
|
/* check whether we want a scaled outline or bitmap */
|
|
|
|
if ( !size )
|
|
|
|
load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
|
|
|
|
|
2008-04-01 07:55:48 +02:00
|
|
|
/* reset the size object if necessary */
|
2000-12-08 03:42:29 +01:00
|
|
|
if ( load_flags & FT_LOAD_NO_SCALE )
|
|
|
|
size = NULL;
|
|
|
|
|
|
|
|
if ( size )
|
|
|
|
{
|
* src/cff/cffobjs.c (cff_size_done, cff_size_init, cff_size_reset,
cff_slot_done, cff_slot_init, cff_face_init, cff_face_done): Access
root fields directly.
* src/cff/cffdrivr.c (Load_Glyph): Access root fields directly.
* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Save current
frame before calling TT_Vary_Get_Glyph_Deltas.
* src/pcf/pcfdrivr.c (PCF_CMapRec): Rename `cmap' to `root' for
consistency.
(pcf_cmap_init, pcf_cmap_done, pcf_cmap_char_index,
pcf_cmap_char_next): Don't use PCF_XXX but FT_XXX arguments which
are typecast to the proper PCF_XXX types within the function.
Update code accordingly.
(pcf_cmap_class): Remove casts.
(PCF_Face_Done, PCF_Face_Init, PCF_Set_Pixel_Size): Don't use
PCF_XXX but FT_XXX arguments which are typecast to the proper
PCF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(PCF_Set_Point_Size): New wrapper function.
(PCF_Glyph_Load, pcf_driver_requester): Use FT_CALLBACK_DEF.
(pcf_driver_class): Remove casts.
2004-05-07 09:08:14 +02:00
|
|
|
/* these two objects must have the same parent */
|
|
|
|
if ( cffsize->face != cffslot->face )
|
2013-03-14 10:27:35 +01:00
|
|
|
return FT_THROW( Invalid_Face_Handle );
|
2000-12-08 03:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* now load the glyph outline if necessary */
|
* src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added
to support charmaps for CFF fonts
* src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c,
src/cff/cffobjs.h, src/cff/cffparse.c, src/cffparse.h, src/cff/cffgload.c,
src/cff/cffgload.h: adding support for CFF charmaps, reformatting the
sources, and removing some bugs in the Encoding and Charset loaders
2002-07-10 18:52:06 +02:00
|
|
|
error = cff_slot_load( slot, size, glyph_index, load_flags );
|
2000-12-08 03:42:29 +01:00
|
|
|
|
|
|
|
/* force drop-out mode to 2 - irrelevant now */
|
|
|
|
/* slot->outline.dropout_mode = 2; */
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
FT_CALLBACK_DEF( FT_Error )
|
2009-02-24 22:34:51 +01:00
|
|
|
cff_get_advances( FT_Face face,
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
FT_UInt start,
|
|
|
|
FT_UInt count,
|
2009-01-09 12:11:53 +01:00
|
|
|
FT_Int32 flags,
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
FT_Fixed* advances )
|
|
|
|
{
|
|
|
|
FT_UInt nn;
|
2013-03-14 11:21:17 +01:00
|
|
|
FT_Error error = FT_Err_Ok;
|
2009-02-24 22:34:51 +01:00
|
|
|
FT_GlyphSlot slot = face->glyph;
|
2008-09-12 18:27:48 +02:00
|
|
|
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
|
2015-04-10 07:01:01 +02:00
|
|
|
if ( FT_IS_SFNT( face ) )
|
|
|
|
{
|
|
|
|
/* OpenType 1.7 mandates that the data from `hmtx' table be used; */
|
|
|
|
/* it is no longer necessary that those values are identical to */
|
|
|
|
/* the values in the `CFF' table */
|
|
|
|
|
|
|
|
TT_Face ttface = (TT_Face)face;
|
|
|
|
FT_Short dummy;
|
|
|
|
|
|
|
|
|
|
|
|
if ( flags & FT_LOAD_VERTICAL_LAYOUT )
|
|
|
|
{
|
2016-12-20 10:52:26 +01:00
|
|
|
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
|
|
|
/* no fast retrieval for blended MM fonts without VVAR table */
|
2016-12-21 20:27:48 +01:00
|
|
|
if ( !ttface->is_default_instance &&
|
|
|
|
!( ttface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
|
2016-12-20 10:52:26 +01:00
|
|
|
return FT_THROW( Unimplemented_Feature );
|
|
|
|
#endif
|
|
|
|
|
2015-04-10 07:01:01 +02:00
|
|
|
/* check whether we have data from the `vmtx' table at all; */
|
|
|
|
/* otherwise we extract the info from the CFF glyphstrings */
|
|
|
|
/* (instead of synthesizing a global value using the `OS/2' */
|
|
|
|
/* table) */
|
|
|
|
if ( !ttface->vertical_info )
|
|
|
|
goto Missing_Table;
|
|
|
|
|
|
|
|
for ( nn = 0; nn < count; nn++ )
|
|
|
|
{
|
|
|
|
FT_UShort ah;
|
|
|
|
|
|
|
|
|
|
|
|
( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
|
|
|
|
1,
|
|
|
|
start + nn,
|
|
|
|
&dummy,
|
|
|
|
&ah );
|
|
|
|
|
|
|
|
FT_TRACE5(( " idx %d: advance height %d font units\n",
|
|
|
|
start + nn, ah ));
|
|
|
|
advances[nn] = ah;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2016-12-20 10:52:26 +01:00
|
|
|
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
|
|
|
/* no fast retrieval for blended MM fonts without HVAR table */
|
2016-12-21 20:27:48 +01:00
|
|
|
if ( !ttface->is_default_instance &&
|
|
|
|
!( ttface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
|
2016-12-20 10:52:26 +01:00
|
|
|
return FT_THROW( Unimplemented_Feature );
|
|
|
|
#endif
|
|
|
|
|
2015-04-10 07:01:01 +02:00
|
|
|
/* check whether we have data from the `hmtx' table at all */
|
|
|
|
if ( !ttface->horizontal.number_Of_HMetrics )
|
|
|
|
goto Missing_Table;
|
|
|
|
|
|
|
|
for ( nn = 0; nn < count; nn++ )
|
|
|
|
{
|
|
|
|
FT_UShort aw;
|
|
|
|
|
|
|
|
|
|
|
|
( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
|
|
|
|
0,
|
|
|
|
start + nn,
|
|
|
|
&dummy,
|
|
|
|
&aw );
|
|
|
|
|
|
|
|
FT_TRACE5(( " idx %d: advance width %d font units\n",
|
|
|
|
start + nn, aw ));
|
|
|
|
advances[nn] = aw;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
Missing_Table:
|
2009-07-31 17:30:23 +02:00
|
|
|
flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY;
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
for ( nn = 0; nn < count; nn++ )
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
{
|
2012-02-24 12:26:25 +01:00
|
|
|
error = cff_glyph_load( slot, face->size, start + nn, flags );
|
2008-09-12 18:27:48 +02:00
|
|
|
if ( error )
|
|
|
|
break;
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
advances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT )
|
2009-02-24 22:34:51 +01:00
|
|
|
? slot->linearVertAdvance
|
|
|
|
: slot->linearHoriAdvance;
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
}
|
2008-09-12 18:27:48 +02:00
|
|
|
|
* include/freetype/ftadvanc.h, src/base/ftadvanc.c,
include/freetype/config/ftheader.h, include/freetype/freetype.h,
src/base/Jamfile, src/base/rules.mk, src/cff/cffdrivr.c,
src/cff/cffgload.c, src/cff/cffgload.h, src/truetype/ttdriver.c,
src/truetype/ttgload.h, src/truetype/ttgload.c, src/type1/t1driver.c,
src/type1/t1gload.h, src/type1/t1gload.c:
Add a new header named FT_ADVANCES_H declaring some new APIs
to extract the advances of one or more glyphs without necessarily
loading their outlines. Also provide 'fast loaders' for the
TrueType, Type1 and CFF font drivers (more to come later)
* autogen.sh: add checks for minimum version of the 'autotools'
stuff.
2008-09-01 23:35:21 +02:00
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
2008-09-12 18:27:48 +02:00
|
|
|
|
2008-04-01 07:55:48 +02:00
|
|
|
/*
|
|
|
|
* GLYPH DICT SERVICE
|
|
|
|
*
|
|
|
|
*/
|
* include/freetype/ftmm.h, include/freetype/ftmodule.h,
include/freetype/tttables.h, include/freetype/config/ftconfig.h,
include/freetype/internal/ftobjs.h,
include/freetype/internal/ftserv.h,
include/freetype/internal/internal.h,
include/freetype/internal/sfnt.h,
include/freetype/internal/tttypes.h,
include/freetype/internal/services/bdf.h,
include/freetype/internal/services/glyfdict.h,
include/freetype/internal/services/multmast.h,
include/freetype/internal/services/postname.h,
include/freetype/internal/services/sfnt.h,
include/freetype/internal/services/xf86name.h,
src/base/ftbdf.c, src/base/ftmm.c, src/base/ftobjs.c,
src/base/ftxf86.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/sfnt/sfdriver.c,
src/truetype/ttdriver.c, src/type1/t1driver.c, src/type42/t42drivr.c:
heavy internal modifications to introduce the concept of
"module services". This is the first step towards a massive
simplification of the engine's internals, in order to
get rid of various numbers of hacks.
Note that this changes will break source & binary compatibility
for authors of external font drivers.
Maybe 2.1.6 will be called 2.2.0 after all :-)
2003-09-11 21:51:54 +02:00
|
|
|
|
2001-06-27 21:46:12 +02:00
|
|
|
static FT_Error
|
2001-08-09 03:13:43 +02:00
|
|
|
cff_get_glyph_name( CFF_Face face,
|
2001-06-27 21:46:12 +02:00
|
|
|
FT_UInt glyph_index,
|
|
|
|
FT_Pointer buffer,
|
|
|
|
FT_UInt buffer_max )
|
2001-03-16 16:03:13 +01:00
|
|
|
{
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
CFF_Font font = (CFF_Font)face->extra.data;
|
|
|
|
FT_String* gname;
|
|
|
|
FT_UShort sid;
|
|
|
|
FT_Error error;
|
2002-03-30 17:41:09 +01:00
|
|
|
|
2001-03-16 16:03:13 +01:00
|
|
|
|
[cff] Implement CFF2 support (1/2).
This commit does not contain the blend code for font variation
support, which follows in another commit.
You should ignore whitespace while inspecting this commit.
* include/freetype/internal/tttypes.h (TT_Face): Add `isCFF2'
member.
* src/cff/cf2font.h (CF2_Font): Add `isCFF2' member.
* src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Handle `isCFF2'
flag.
(cf2_getMaxstack): New function.
* src/cff/cf2ft.h: Updated.
* src/cff/cf2intrp.c (cf2_escRESERVED_38): New enum.
(cf2_interpT2CharString): Handle CFF2 differences.
Add tracing message for errors.
* src/cff/cffdrivr.c (cff_get_glyph_name, cff_get_name_index):
Update for CFF2.
* src/cff/cffload.c (FT_FIXED_ONE): New macro.
(cff_index_init, cff_index_load_offsets, cff_index_access_element,
cff_index_get_name, cff_ft_select_get, cff_load_private_dict,
cff_subfont_load, cff_font_load): Handle CFF2.
* src/cff/cffload.h: Updated.
* src/cff/cffobjs.c (cff_face_init): Handle CFF2.
* src/cff/cffparse.c (cff_parse_maxstack): New function.
(CFFCODE_TOPDICT, CFFCODE_PRIVATE): Removed
* src/cff/cffparse.h (CFF2_MAX_STACK, CFF2_DEFAULT_STACK): New
macros.
(CFF2_CODE_TOPDICT, CFF2_CODE_FONTDICT, CFF2_CODE_PRIVATE): New
macros.
* src/cff/cfftoken.h: Add fields for CFF2 dictionaries (but no blend
stuff).
* src/cff/cfftypes.h (CFF_Index): Add `hdr_size' field.
(CFF_FontRecDict): Add `maxstack' field.
(CFF_Private): Add `subfont' field.
(CFF_Font): Add `top_dict_length' and `cff2' fields.
* src/sfnt/sfobjs.c (sfnt_load_face): Handle `CFF2' table.
2016-12-15 20:27:47 +01:00
|
|
|
/* CFF2 table does not have glyph names; */
|
|
|
|
/* we need to use `post' table method */
|
|
|
|
if ( font->version_major == 2 )
|
|
|
|
{
|
|
|
|
FT_Library library = FT_FACE_LIBRARY( face );
|
|
|
|
FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
|
|
|
|
FT_Service_GlyphDict service =
|
|
|
|
(FT_Service_GlyphDict)ft_module_get_service(
|
|
|
|
sfnt_module,
|
|
|
|
FT_SERVICE_ID_GLYPH_DICT,
|
|
|
|
0 );
|
|
|
|
|
|
|
|
|
|
|
|
if ( service && service->get_name )
|
|
|
|
return service->get_name( FT_FACE( face ),
|
|
|
|
glyph_index,
|
|
|
|
buffer,
|
|
|
|
buffer_max );
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FT_ERROR(( "cff_get_glyph_name:"
|
|
|
|
" cannot get glyph name from a CFF2 font\n"
|
|
|
|
" "
|
|
|
|
" without the `PSNames' module\n" ));
|
|
|
|
error = FT_THROW( Missing_Module );
|
|
|
|
goto Exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
if ( !font->psnames )
|
2001-03-16 16:03:13 +01:00
|
|
|
{
|
2009-06-26 06:15:41 +02:00
|
|
|
FT_ERROR(( "cff_get_glyph_name:"
|
|
|
|
" cannot get glyph name from CFF & CEF fonts\n"
|
|
|
|
" "
|
|
|
|
" without the `PSNames' module\n" ));
|
2013-03-14 10:27:35 +01:00
|
|
|
error = FT_THROW( Missing_Module );
|
2001-03-16 16:03:13 +01:00
|
|
|
goto Exit;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* first, locate the sid in the charset table */
|
|
|
|
sid = font->charset.sids[glyph_index];
|
|
|
|
|
|
|
|
/* now, lookup the name itself */
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
gname = cff_index_get_sid_string( font, sid );
|
2001-03-16 16:03:13 +01:00
|
|
|
|
2007-02-12 15:55:03 +01:00
|
|
|
if ( gname )
|
|
|
|
FT_STRCPYN( buffer, gname, buffer_max );
|
2001-03-16 16:03:13 +01:00
|
|
|
|
2013-03-14 11:21:17 +01:00
|
|
|
error = FT_Err_Ok;
|
2001-03-16 16:03:13 +01:00
|
|
|
|
2008-04-13 07:55:36 +02:00
|
|
|
Exit:
|
|
|
|
return error;
|
2001-03-16 16:03:13 +01:00
|
|
|
}
|
|
|
|
|
* builds/win32/detekt.mk: Fix .PHONY target for Intel compiler.
Renamed "ftnames.h" to "ftsnames.h", and FT_NAMES_H to
FT_SFNT_NAMES_H.
* docs/docmaker.py: Added generation of INDEX link in table of
contents.
* INSTALL, docs/BUILD: Updated documentation to indicate that the
compilation process has changed slightly (no more `src' required in
* builds/*/*-def.mk: Changed the objects directory from "obj" to
"objs".
* include/freetype/config/ftheader.h: Removed obsolete macros like
FT_SOURCE_FILE, etc. and added cache-specific macro definitions that
were previously defined in <freetype/ftcache.h>. Added comments to
be included in a new API Reference section.
* src/*/*: Removed the use of FT_SOURCE_FILE, etc. Now, each
component needs to add its own directory to the include path at
compile time. Modified all "rules.mk" and "descrip.mms"
accordingly.
* src/cid/cidobjs.c, src/cid/cidload.c, src/pcf/pcfread.c,
src/type1/t1load.c, src/type1/t1objs.c: Added a few casts to remove
compiler warnings in pedantic modes.
* include/config/ft2build.h, include/config/ftheader.h: The file
top-level <ft2build.h>.
* include/config/ftheader.h: Added new section describing the #include
macros.
the Type 2 glyph charstring (used by conversion programs).
* docs/docmaker.py: Added cross-references generation as well as
seac emulation provided by the Type 2 endchar operator.
* src/cid/cidafm.c, src/cid/cidafm.h: removed un-needed files,
Added support for clipped direct rendering in the smooth renderer.
* src/cff/t2objs.c (T2_Init_Face): For pure CFF fonts, set
2001-03-20 23:58:56 +01:00
|
|
|
|
2001-08-08 12:51:44 +02:00
|
|
|
static FT_UInt
|
|
|
|
cff_get_name_index( CFF_Face face,
|
|
|
|
FT_String* glyph_name )
|
|
|
|
{
|
2003-09-29 22:33:37 +02:00
|
|
|
CFF_Font cff;
|
|
|
|
CFF_Charset charset;
|
* include/freetype/internal/bdftypes.h: removed obsolete header
* include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
'include/freetype/internal' to 'src/cff' since no other modules needs
to known about these types
* include/freetype/internal/t42types.h,
include/freetype/internal/internal.h, src/type42/t42objs.h,
src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
'include/freetype/internal' to 'src/type42' since no other modules needs
to known about these types
* src/gzip/infblock.c: removing compiler warning
* include/freetype/internal/services/svpsinfo.h,
include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
in "svpsinfo.h", removing some sad hacks.
2003-10-29 22:43:52 +01:00
|
|
|
FT_Service_PsCMaps psnames;
|
2003-09-29 22:33:37 +02:00
|
|
|
FT_String* name;
|
|
|
|
FT_UShort sid;
|
|
|
|
FT_UInt i;
|
Updating to OpenType 1.3.
* include/freetype/internal/tttypes.h (TT_CMap0, TT_CMap2, TT_CMap4,
TT_CMap6): Adding field `language'.
(TT_CMapTable): Removing field `language'.
Type of `length' field changed to FT_ULong.
Adding fields for cmaps format 8, 10, and 12.
(TT_CMapGroup): New auxiliary structure.
(TT_CMap8_12, TT_CMap10): New structures.
* include/freetype/tttables.h (TT_HoriHeader, TT_VertHeader):
Removed last element of `Reserved' array.
* include/freetype/ttnameid.h (TT_PLATFORM_CUSTOM, TT_MS_ID_UCS_4,
TT_NAME_ID_CID_FINDFONT_NAME): New macros.
* src/sfnt/ttcmap.c (TT_CharMap_Load): Updated loading of `language'
field to the new structures.
Fixed freeing of arrays in case of unsuccessful loads.
Added support for loading format 8, 10, and 12 cmaps.
(TT_CharMap_Free): Added support for freeing format 8, 10, and 12
cmaps.
(code_to_index4): Small improvement.
(code_to_index6): Ditto.
(code_to_index8_12, code_to_index10): New functions.
* src/sfnt/ttload.c (TT_Load_Metrics_Header): Updated to new
structure.
(TT_Load_CMap): Ditto.
* src/sfnt/sfobjs.c (tt_encodings): Add MS UCS4 table (before MS
Unicode).
* src/type1/t1driver.c (t1_get_name_index): Fix compiler warning.
2001-08-13 13:44:29 +02:00
|
|
|
|
|
|
|
|
2002-03-14 09:57:10 +01:00
|
|
|
cff = (CFF_FontRec *)face->extra.data;
|
2001-08-08 12:51:44 +02:00
|
|
|
charset = &cff->charset;
|
|
|
|
|
[cff] Implement CFF2 support (1/2).
This commit does not contain the blend code for font variation
support, which follows in another commit.
You should ignore whitespace while inspecting this commit.
* include/freetype/internal/tttypes.h (TT_Face): Add `isCFF2'
member.
* src/cff/cf2font.h (CF2_Font): Add `isCFF2' member.
* src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Handle `isCFF2'
flag.
(cf2_getMaxstack): New function.
* src/cff/cf2ft.h: Updated.
* src/cff/cf2intrp.c (cf2_escRESERVED_38): New enum.
(cf2_interpT2CharString): Handle CFF2 differences.
Add tracing message for errors.
* src/cff/cffdrivr.c (cff_get_glyph_name, cff_get_name_index):
Update for CFF2.
* src/cff/cffload.c (FT_FIXED_ONE): New macro.
(cff_index_init, cff_index_load_offsets, cff_index_access_element,
cff_index_get_name, cff_ft_select_get, cff_load_private_dict,
cff_subfont_load, cff_font_load): Handle CFF2.
* src/cff/cffload.h: Updated.
* src/cff/cffobjs.c (cff_face_init): Handle CFF2.
* src/cff/cffparse.c (cff_parse_maxstack): New function.
(CFFCODE_TOPDICT, CFFCODE_PRIVATE): Removed
* src/cff/cffparse.h (CFF2_MAX_STACK, CFF2_DEFAULT_STACK): New
macros.
(CFF2_CODE_TOPDICT, CFF2_CODE_FONTDICT, CFF2_CODE_PRIVATE): New
macros.
* src/cff/cfftoken.h: Add fields for CFF2 dictionaries (but no blend
stuff).
* src/cff/cfftypes.h (CFF_Index): Add `hdr_size' field.
(CFF_FontRecDict): Add `maxstack' field.
(CFF_Private): Add `subfont' field.
(CFF_Font): Add `top_dict_length' and `cff2' fields.
* src/sfnt/sfobjs.c (sfnt_load_face): Handle `CFF2' table.
2016-12-15 20:27:47 +01:00
|
|
|
/* CFF2 table does not have glyph names; */
|
|
|
|
/* we need to use `post' table method */
|
|
|
|
if ( cff->version_major == 2 )
|
|
|
|
{
|
|
|
|
FT_Library library = FT_FACE_LIBRARY( face );
|
|
|
|
FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
|
|
|
|
FT_Service_GlyphDict service =
|
|
|
|
(FT_Service_GlyphDict)ft_module_get_service(
|
|
|
|
sfnt_module,
|
|
|
|
FT_SERVICE_ID_GLYPH_DICT,
|
|
|
|
0 );
|
|
|
|
|
|
|
|
|
|
|
|
if ( service && service->name_index )
|
|
|
|
return service->name_index( FT_FACE( face ), glyph_name );
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FT_ERROR(( "cff_get_name_index:"
|
|
|
|
" cannot get glyph index from a CFF2 font\n"
|
|
|
|
" "
|
|
|
|
" without the `PSNames' module\n" ));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
* include/freetype/internal/bdftypes.h: removed obsolete header
* include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
'include/freetype/internal' to 'src/cff' since no other modules needs
to known about these types
* include/freetype/internal/t42types.h,
include/freetype/internal/internal.h, src/type42/t42objs.h,
src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
'include/freetype/internal' to 'src/type42' since no other modules needs
to known about these types
* src/gzip/infblock.c: removing compiler warning
* include/freetype/internal/services/svpsinfo.h,
include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
in "svpsinfo.h", removing some sad hacks.
2003-10-29 22:43:52 +01:00
|
|
|
FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
|
2003-12-12 16:38:39 +01:00
|
|
|
if ( !psnames )
|
|
|
|
return 0;
|
|
|
|
|
2001-08-08 12:51:44 +02:00
|
|
|
for ( i = 0; i < cff->num_glyphs; i++ )
|
|
|
|
{
|
|
|
|
sid = charset->sids[i];
|
|
|
|
|
Updating to OpenType 1.3.
* include/freetype/internal/tttypes.h (TT_CMap0, TT_CMap2, TT_CMap4,
TT_CMap6): Adding field `language'.
(TT_CMapTable): Removing field `language'.
Type of `length' field changed to FT_ULong.
Adding fields for cmaps format 8, 10, and 12.
(TT_CMapGroup): New auxiliary structure.
(TT_CMap8_12, TT_CMap10): New structures.
* include/freetype/tttables.h (TT_HoriHeader, TT_VertHeader):
Removed last element of `Reserved' array.
* include/freetype/ttnameid.h (TT_PLATFORM_CUSTOM, TT_MS_ID_UCS_4,
TT_NAME_ID_CID_FINDFONT_NAME): New macros.
* src/sfnt/ttcmap.c (TT_CharMap_Load): Updated loading of `language'
field to the new structures.
Fixed freeing of arrays in case of unsuccessful loads.
Added support for loading format 8, 10, and 12 cmaps.
(TT_CharMap_Free): Added support for freeing format 8, 10, and 12
cmaps.
(code_to_index4): Small improvement.
(code_to_index6): Ditto.
(code_to_index8_12, code_to_index10): New functions.
* src/sfnt/ttload.c (TT_Load_Metrics_Header): Updated to new
structure.
(TT_Load_CMap): Ditto.
* src/sfnt/sfobjs.c (tt_encodings): Add MS UCS4 table (before MS
Unicode).
* src/type1/t1driver.c (t1_get_name_index): Fix compiler warning.
2001-08-13 13:44:29 +02:00
|
|
|
if ( sid > 390 )
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
name = cff_index_get_string( cff, sid - 391 );
|
2001-08-08 12:51:44 +02:00
|
|
|
else
|
2002-03-30 17:41:09 +01:00
|
|
|
name = (FT_String *)psnames->adobe_std_strings( sid );
|
2001-08-08 12:51:44 +02:00
|
|
|
|
2007-02-07 09:31:01 +01:00
|
|
|
if ( !name )
|
|
|
|
continue;
|
|
|
|
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
if ( !ft_strcmp( glyph_name, name ) )
|
2001-08-08 12:51:44 +02:00
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
Updating to OpenType 1.3.
* include/freetype/internal/tttypes.h (TT_CMap0, TT_CMap2, TT_CMap4,
TT_CMap6): Adding field `language'.
(TT_CMapTable): Removing field `language'.
Type of `length' field changed to FT_ULong.
Adding fields for cmaps format 8, 10, and 12.
(TT_CMapGroup): New auxiliary structure.
(TT_CMap8_12, TT_CMap10): New structures.
* include/freetype/tttables.h (TT_HoriHeader, TT_VertHeader):
Removed last element of `Reserved' array.
* include/freetype/ttnameid.h (TT_PLATFORM_CUSTOM, TT_MS_ID_UCS_4,
TT_NAME_ID_CID_FINDFONT_NAME): New macros.
* src/sfnt/ttcmap.c (TT_CharMap_Load): Updated loading of `language'
field to the new structures.
Fixed freeing of arrays in case of unsuccessful loads.
Added support for loading format 8, 10, and 12 cmaps.
(TT_CharMap_Free): Added support for freeing format 8, 10, and 12
cmaps.
(code_to_index4): Small improvement.
(code_to_index6): Ditto.
(code_to_index8_12, code_to_index10): New functions.
* src/sfnt/ttload.c (TT_Load_Metrics_Header): Updated to new
structure.
(TT_Load_CMap): Ditto.
* src/sfnt/sfobjs.c (tt_encodings): Add MS UCS4 table (before MS
Unicode).
* src/type1/t1driver.c (t1_get_name_index): Fix compiler warning.
2001-08-13 13:44:29 +02:00
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_DEFINE_SERVICE_GLYPHDICTREC(
|
|
|
|
cff_service_glyph_dict,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-10-30 08:07:56 +01:00
|
|
|
(FT_GlyphDict_GetNameFunc) cff_get_glyph_name, /* get_name */
|
|
|
|
(FT_GlyphDict_NameIndexFunc)cff_get_name_index /* name_index */
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
* include/freetype/ftmm.h, include/freetype/ftmodule.h,
include/freetype/tttables.h, include/freetype/config/ftconfig.h,
include/freetype/internal/ftobjs.h,
include/freetype/internal/ftserv.h,
include/freetype/internal/internal.h,
include/freetype/internal/sfnt.h,
include/freetype/internal/tttypes.h,
include/freetype/internal/services/bdf.h,
include/freetype/internal/services/glyfdict.h,
include/freetype/internal/services/multmast.h,
include/freetype/internal/services/postname.h,
include/freetype/internal/services/sfnt.h,
include/freetype/internal/services/xf86name.h,
src/base/ftbdf.c, src/base/ftmm.c, src/base/ftobjs.c,
src/base/ftxf86.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/sfnt/sfdriver.c,
src/truetype/ttdriver.c, src/type1/t1driver.c, src/type42/t42drivr.c:
heavy internal modifications to introduce the concept of
"module services". This is the first step towards a massive
simplification of the engine's internals, in order to
get rid of various numbers of hacks.
Note that this changes will break source & binary compatibility
for authors of external font drivers.
Maybe 2.1.6 will be called 2.2.0 after all :-)
2003-09-11 21:51:54 +02:00
|
|
|
|
2003-11-01 15:36:20 +01:00
|
|
|
|
2008-04-01 07:55:48 +02:00
|
|
|
/*
|
|
|
|
* POSTSCRIPT INFO SERVICE
|
|
|
|
*
|
|
|
|
*/
|
* include/freetype/internal/bdftypes.h: removed obsolete header
* include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
'include/freetype/internal' to 'src/cff' since no other modules needs
to known about these types
* include/freetype/internal/t42types.h,
include/freetype/internal/internal.h, src/type42/t42objs.h,
src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
'include/freetype/internal' to 'src/type42' since no other modules needs
to known about these types
* src/gzip/infblock.c: removing compiler warning
* include/freetype/internal/services/svpsinfo.h,
include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
in "svpsinfo.h", removing some sad hacks.
2003-10-29 22:43:52 +01:00
|
|
|
|
|
|
|
static FT_Int
|
|
|
|
cff_ps_has_glyph_names( FT_Face face )
|
|
|
|
{
|
2003-12-13 19:42:31 +01:00
|
|
|
return ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) > 0;
|
* include/freetype/internal/bdftypes.h: removed obsolete header
* include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
'include/freetype/internal' to 'src/cff' since no other modules needs
to known about these types
* include/freetype/internal/t42types.h,
include/freetype/internal/internal.h, src/type42/t42objs.h,
src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
'include/freetype/internal' to 'src/type42' since no other modules needs
to known about these types
* src/gzip/infblock.c: removing compiler warning
* include/freetype/internal/services/svpsinfo.h,
include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
in "svpsinfo.h", removing some sad hacks.
2003-10-29 22:43:52 +01:00
|
|
|
}
|
|
|
|
|
2003-11-01 15:36:20 +01:00
|
|
|
|
2007-01-13 15:01:36 +01:00
|
|
|
static FT_Error
|
|
|
|
cff_ps_get_font_info( CFF_Face face,
|
|
|
|
PS_FontInfoRec* afont_info )
|
|
|
|
{
|
|
|
|
CFF_Font cff = (CFF_Font)face->extra.data;
|
2013-03-14 11:21:17 +01:00
|
|
|
FT_Error error = FT_Err_Ok;
|
2007-01-13 15:01:36 +01:00
|
|
|
|
|
|
|
|
2016-12-26 17:08:17 +01:00
|
|
|
if ( cff && !cff->font_info )
|
2007-01-13 15:01:36 +01:00
|
|
|
{
|
2016-12-26 17:08:17 +01:00
|
|
|
CFF_FontRecDict dict = &cff->top_font.font_dict;
|
2011-06-14 19:48:33 +02:00
|
|
|
PS_FontInfoRec *font_info = NULL;
|
2016-12-26 17:08:17 +01:00
|
|
|
FT_Memory memory = face->root.memory;
|
2007-01-13 15:01:36 +01:00
|
|
|
|
|
|
|
|
|
|
|
if ( FT_ALLOC( font_info, sizeof ( *font_info ) ) )
|
|
|
|
goto Fail;
|
|
|
|
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
font_info->version = cff_index_get_sid_string( cff,
|
|
|
|
dict->version );
|
|
|
|
font_info->notice = cff_index_get_sid_string( cff,
|
|
|
|
dict->notice );
|
|
|
|
font_info->full_name = cff_index_get_sid_string( cff,
|
|
|
|
dict->full_name );
|
|
|
|
font_info->family_name = cff_index_get_sid_string( cff,
|
|
|
|
dict->family_name );
|
|
|
|
font_info->weight = cff_index_get_sid_string( cff,
|
|
|
|
dict->weight );
|
2007-01-13 15:01:36 +01:00
|
|
|
font_info->italic_angle = dict->italic_angle;
|
|
|
|
font_info->is_fixed_pitch = dict->is_fixed_pitch;
|
2007-01-17 13:45:26 +01:00
|
|
|
font_info->underline_position = (FT_Short)dict->underline_position;
|
2015-02-20 08:35:32 +01:00
|
|
|
font_info->underline_thickness = (FT_UShort)dict->underline_thickness;
|
2007-01-13 15:01:36 +01:00
|
|
|
|
|
|
|
cff->font_info = font_info;
|
|
|
|
}
|
|
|
|
|
2009-03-12 09:07:49 +01:00
|
|
|
if ( cff )
|
|
|
|
*afont_info = *cff->font_info;
|
2007-01-13 15:01:36 +01:00
|
|
|
|
|
|
|
Fail:
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_DEFINE_SERVICE_PSINFOREC(
|
|
|
|
cff_service_ps_info,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-10-30 08:07:56 +01:00
|
|
|
(PS_GetFontInfoFunc) cff_ps_get_font_info, /* ps_get_font_info */
|
|
|
|
(PS_GetFontExtraFunc) NULL, /* ps_get_font_extra */
|
|
|
|
(PS_HasGlyphNamesFunc) cff_ps_has_glyph_names, /* ps_has_glyph_names */
|
|
|
|
/* unsupported with CFF fonts */
|
|
|
|
(PS_GetFontPrivateFunc)NULL, /* ps_get_font_private */
|
|
|
|
/* not implemented */
|
|
|
|
(PS_GetFontValueFunc) NULL /* ps_get_font_value */
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
* include/freetype/internal/bdftypes.h: removed obsolete header
* include/freetype/internal/cfftypes.h, src/cff/cfftypes.h,
src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h,
include/freetype/internal/services/svbdf.h: moving "cfftypes.h" from
'include/freetype/internal' to 'src/cff' since no other modules needs
to known about these types
* include/freetype/internal/t42types.h,
include/freetype/internal/internal.h, src/type42/t42objs.h,
src/type42/t42drivr.c, src/type42/t42types.h: moving "t42types.h" from
'include/freetype/internal' to 'src/type42' since no other modules needs
to known about these types
* src/gzip/infblock.c: removing compiler warning
* include/freetype/internal/services/svpsinfo.h,
include/freetype/internal/ftserv.h, src/cff/cffdrivr.c,
src/cid/ciddrivr.c, src/type1/t1driver.c, src/type42/t42drivr.c,
src/base/fttype1.c: migrating to FT_SERVICE_ID_POSTSCRIPT_INFO defined
in "svpsinfo.h", removing some sad hacks.
2003-10-29 22:43:52 +01:00
|
|
|
|
|
|
|
|
2007-07-11 07:32:00 +02:00
|
|
|
/*
|
2008-04-01 07:55:48 +02:00
|
|
|
* POSTSCRIPT NAME SERVICE
|
|
|
|
*
|
|
|
|
*/
|
2007-07-11 07:32:00 +02:00
|
|
|
|
|
|
|
static const char*
|
|
|
|
cff_get_ps_name( CFF_Face face )
|
|
|
|
{
|
2015-04-28 09:16:27 +02:00
|
|
|
CFF_Font cff = (CFF_Font)face->extra.data;
|
|
|
|
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
|
|
|
|
|
|
|
|
|
|
|
/* following the OpenType specification 1.7, we return the name stored */
|
|
|
|
/* in the `name' table for a CFF wrapped into an SFNT container */
|
|
|
|
|
2015-10-06 07:55:32 +02:00
|
|
|
if ( FT_IS_SFNT( FT_FACE( face ) ) && sfnt )
|
2015-04-28 09:16:27 +02:00
|
|
|
{
|
|
|
|
FT_Library library = FT_FACE_LIBRARY( face );
|
|
|
|
FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
|
|
|
|
FT_Service_PsFontName service =
|
|
|
|
(FT_Service_PsFontName)ft_module_get_service(
|
|
|
|
sfnt_module,
|
2016-12-14 18:54:21 +01:00
|
|
|
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME,
|
|
|
|
0 );
|
2007-07-11 07:32:00 +02:00
|
|
|
|
|
|
|
|
2015-04-28 09:16:27 +02:00
|
|
|
if ( service && service->get_ps_font_name )
|
|
|
|
return service->get_ps_font_name( FT_FACE( face ) );
|
|
|
|
}
|
|
|
|
|
2007-07-11 07:32:00 +02:00
|
|
|
return (const char*)cff->font_name;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_DEFINE_SERVICE_PSFONTNAMEREC(
|
|
|
|
cff_service_ps_name,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-10-30 08:07:56 +01:00
|
|
|
(FT_PsName_GetFunc)cff_get_ps_name /* get_ps_font_name */
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
2007-07-11 07:32:00 +02:00
|
|
|
|
|
|
|
|
2004-01-11 11:01:08 +01:00
|
|
|
/*
|
2004-01-22 10:07:12 +01:00
|
|
|
* TT CMAP INFO
|
2004-01-11 11:01:08 +01:00
|
|
|
*
|
* builds/amiga/src/base/ftsystem.c, devel/ftoption.h
include/freetype/ftcache.h, include/freetype/ftoutln.h,
include/freetype/cache/ftccache.h, include/freetype/cache/ftccmap.h,
include/freetype/config/ftoption.h, include/freetype/internal/ftcalc.h,
include/freetype/internal/ftdriver.h,
include/freetype/internal/ftmemory.h,
include/freetype/internal/ftobjs.h, include/freetype/internal/ftrfork.h,
include/freetype/internal/psaux.h, include/freetype/internal/sfnt.h,
include/freetype/internal/t1types.h, include/freetype/internal/tttypes.h,
src/base/ftcalc.c, src/base/ftdbgmem.c, src/base/ftobjs.c,
src/base/ftsystem.c, src/base/ftutil.c, src/bdf/bdfdrivr.c,
src/cache/ftccache.c, src/cache/ftccback.h, src/cache/ftccmap.c,
src/cache/ftcmanag.c, src/cff/cffdrivr.c, src/cid/cidriver.c,
src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c, src/psaux/psauxmod.c,
src/sfnt/sfdriver.c, src/truetype/ttdriver.c, src/type1/t1driver.c,
src/type1/t1objs.c, src/type42/t42drivr.c, src/winfonts/winfnt.c:
massive changes to the internals to respect the internal object layouts
and exported functions of FreeType 2.1.7. Note that the cache sub-system
cannot be fully retrofitted, unfortunately.
2006-02-16 23:45:31 +01:00
|
|
|
* If the charmap is a synthetic Unicode encoding cmap or
|
|
|
|
* a Type 1 standard (or expert) encoding cmap, hide TT CMAP INFO
|
2004-01-22 10:07:12 +01:00
|
|
|
* service defined in SFNT module.
|
|
|
|
*
|
|
|
|
* Otherwise call the service function in the sfnt module.
|
2004-01-11 11:01:08 +01:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
static FT_Error
|
|
|
|
cff_get_cmap_info( FT_CharMap charmap,
|
|
|
|
TT_CMapInfo *cmap_info )
|
|
|
|
{
|
2004-01-22 10:07:12 +01:00
|
|
|
FT_CMap cmap = FT_CMAP( charmap );
|
2013-03-14 11:21:17 +01:00
|
|
|
FT_Error error = FT_Err_Ok;
|
2013-03-14 10:27:35 +01:00
|
|
|
|
|
|
|
FT_Face face = FT_CMAP_FACE( cmap );
|
|
|
|
FT_Library library = FT_FACE_LIBRARY( face );
|
2004-01-22 10:07:12 +01:00
|
|
|
|
2004-01-11 11:01:08 +01:00
|
|
|
|
2012-08-27 08:41:43 +02:00
|
|
|
if ( cmap->clazz != &CFF_CMAP_ENCODING_CLASS_REC_GET &&
|
|
|
|
cmap->clazz != &CFF_CMAP_UNICODE_CLASS_REC_GET )
|
2004-01-22 10:07:12 +01:00
|
|
|
{
|
|
|
|
FT_Module sfnt = FT_Get_Module( library, "sfnt" );
|
2004-02-20 02:39:05 +01:00
|
|
|
FT_Service_TTCMaps service =
|
|
|
|
(FT_Service_TTCMaps)ft_module_get_service( sfnt,
|
2016-12-14 18:54:21 +01:00
|
|
|
FT_SERVICE_ID_TT_CMAP,
|
|
|
|
0 );
|
2004-01-22 10:07:12 +01:00
|
|
|
|
|
|
|
|
|
|
|
if ( service && service->get_cmap_info )
|
|
|
|
error = service->get_cmap_info( charmap, cmap_info );
|
|
|
|
}
|
2016-10-26 04:31:42 +02:00
|
|
|
else
|
|
|
|
error = FT_THROW( Invalid_CharMap_Format );
|
2004-01-22 10:07:12 +01:00
|
|
|
|
|
|
|
return error;
|
2004-01-11 11:01:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_DEFINE_SERVICE_TTCMAPSREC(
|
|
|
|
cff_service_get_cmap_info,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-10-30 08:07:56 +01:00
|
|
|
(TT_CMap_Info_GetFunc)cff_get_cmap_info /* get_cmap_info */
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
2004-01-11 11:01:08 +01:00
|
|
|
|
|
|
|
|
2007-07-16 22:46:05 +02:00
|
|
|
/*
|
2008-04-01 07:55:48 +02:00
|
|
|
* CID INFO SERVICE
|
2007-07-16 22:46:05 +02:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
static FT_Error
|
|
|
|
cff_get_ros( CFF_Face face,
|
|
|
|
const char* *registry,
|
|
|
|
const char* *ordering,
|
|
|
|
FT_Int *supplement )
|
|
|
|
{
|
2013-03-14 11:21:17 +01:00
|
|
|
FT_Error error = FT_Err_Ok;
|
2007-07-16 22:46:05 +02:00
|
|
|
CFF_Font cff = (CFF_Font)face->extra.data;
|
|
|
|
|
|
|
|
|
|
|
|
if ( cff )
|
|
|
|
{
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
CFF_FontRecDict dict = &cff->top_font.font_dict;
|
2007-07-16 22:46:05 +02:00
|
|
|
|
|
|
|
|
|
|
|
if ( dict->cid_registry == 0xFFFFU )
|
|
|
|
{
|
2013-03-14 10:27:35 +01:00
|
|
|
error = FT_THROW( Invalid_Argument );
|
2007-07-16 22:46:05 +02:00
|
|
|
goto Fail;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( registry )
|
|
|
|
{
|
2016-12-26 17:08:17 +01:00
|
|
|
if ( !cff->registry )
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
cff->registry = cff_index_get_sid_string( cff,
|
|
|
|
dict->cid_registry );
|
2007-07-16 22:46:05 +02:00
|
|
|
*registry = cff->registry;
|
|
|
|
}
|
2012-01-16 18:00:24 +01:00
|
|
|
|
2007-07-16 22:46:05 +02:00
|
|
|
if ( ordering )
|
|
|
|
{
|
2016-12-26 17:08:17 +01:00
|
|
|
if ( !cff->ordering )
|
Improve CFF string (especially glyphname) lookup performance.
We do this by avoiding memory allocation and file I/O. This is
Savannah patch #7104.
* src/cff/cfftypes.h: Include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_SubFontRec): Remove `num_local_subrs'.
(CFF_FontRec): Add `num_strings', `strings', and `string_pool'
fields.
Remove `string_index' and `num_global_subrs' fields.
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
(cff_index_get_pointers): Add `pool' parameter which allows to
insert an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
(cff_font_load): Initialize `num_strings', `strings', and
`string_pool' fields in the `CFF_FontRec' structure.
(cff_index_get_sid_string): Use `cff_index_get_string' instead of
`cff_index_get_name'.
(cff_font_done): Updated.
* src/cff/cffload.h: Don't include PS cmaps service.
(cff_index_get_string): Added.
(cff_index_get_sid_string): Updated.
* src/cff/cffobjs.c: Don't include PS cmaps service and
FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_size_get_globals_funcs, cff_slot_init): Updated.
(cff_face_init): Follow `cff_index_get_name',
`cff_index_get_string', and `cff_index_get_sid_string' changes.
* src/cff/cffcmap.c (cff_sid_free_glyph_name): Removed.
(cff_sid_to_glyph_name): Use `cff_index_get_cid_string'.
(cff_cmap_unicode_init): Updated.
* src/cff/cffdrivr.c: Don't include PS cmap service.
(cff_get_glyph_name): Avoid unnecessary lookup for POSTSCRIPT_CMAPS
service.
(cff_get_glyph_name, cff_ps_get_font_info, cff_get_ros): Follow API
`cff_index_get_sid_string' change.
(cff_get_name_index): Use `cff_index_get_string' instead of
`cff_index_get_name'.
* src/cff/cffgload.c: Don't include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(cff_decoder_init, cff_decoder_prepare): Updated.
2010-03-02 13:00:55 +01:00
|
|
|
cff->ordering = cff_index_get_sid_string( cff,
|
|
|
|
dict->cid_ordering );
|
2007-07-16 22:46:05 +02:00
|
|
|
*ordering = cff->ordering;
|
|
|
|
}
|
|
|
|
|
2009-07-31 17:32:06 +02:00
|
|
|
/*
|
|
|
|
* XXX: According to Adobe TechNote #5176, the supplement in CFF
|
|
|
|
* can be a real number. We truncate it to fit public API
|
|
|
|
* since freetype-2.3.6.
|
|
|
|
*/
|
2007-07-16 22:46:05 +02:00
|
|
|
if ( supplement )
|
2009-07-31 17:32:06 +02:00
|
|
|
{
|
|
|
|
if ( dict->cid_supplement < FT_INT_MIN ||
|
|
|
|
dict->cid_supplement > FT_INT_MAX )
|
|
|
|
FT_TRACE1(( "cff_get_ros: too large supplement %d is truncated\n",
|
|
|
|
dict->cid_supplement ));
|
|
|
|
*supplement = (FT_Int)dict->cid_supplement;
|
|
|
|
}
|
2007-07-16 22:46:05 +02:00
|
|
|
}
|
2012-01-16 18:00:24 +01:00
|
|
|
|
2008-04-01 07:55:48 +02:00
|
|
|
Fail:
|
|
|
|
return error;
|
2007-07-16 22:46:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-03-11 22:29:54 +01:00
|
|
|
static FT_Error
|
|
|
|
cff_get_is_cid( CFF_Face face,
|
|
|
|
FT_Bool *is_cid )
|
|
|
|
{
|
2013-03-14 11:21:17 +01:00
|
|
|
FT_Error error = FT_Err_Ok;
|
2009-03-11 22:29:54 +01:00
|
|
|
CFF_Font cff = (CFF_Font)face->extra.data;
|
|
|
|
|
|
|
|
|
|
|
|
*is_cid = 0;
|
|
|
|
|
|
|
|
if ( cff )
|
|
|
|
{
|
|
|
|
CFF_FontRecDict dict = &cff->top_font.font_dict;
|
|
|
|
|
|
|
|
|
|
|
|
if ( dict->cid_registry != 0xFFFFU )
|
|
|
|
*is_cid = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
cff_get_cid_from_glyph_index( CFF_Face face,
|
|
|
|
FT_UInt glyph_index,
|
|
|
|
FT_UInt *cid )
|
|
|
|
{
|
2013-03-14 11:21:17 +01:00
|
|
|
FT_Error error = FT_Err_Ok;
|
2009-03-11 22:29:54 +01:00
|
|
|
CFF_Font cff;
|
|
|
|
|
|
|
|
|
|
|
|
cff = (CFF_Font)face->extra.data;
|
|
|
|
|
|
|
|
if ( cff )
|
|
|
|
{
|
|
|
|
FT_UInt c;
|
|
|
|
CFF_FontRecDict dict = &cff->top_font.font_dict;
|
|
|
|
|
|
|
|
|
|
|
|
if ( dict->cid_registry == 0xFFFFU )
|
|
|
|
{
|
2013-03-14 10:27:35 +01:00
|
|
|
error = FT_THROW( Invalid_Argument );
|
2009-03-11 22:29:54 +01:00
|
|
|
goto Fail;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( glyph_index > cff->num_glyphs )
|
|
|
|
{
|
2013-03-14 10:27:35 +01:00
|
|
|
error = FT_THROW( Invalid_Argument );
|
2009-03-11 22:29:54 +01:00
|
|
|
goto Fail;
|
|
|
|
}
|
|
|
|
|
|
|
|
c = cff->charset.sids[glyph_index];
|
|
|
|
|
|
|
|
if ( cid )
|
|
|
|
*cid = c;
|
|
|
|
}
|
|
|
|
|
|
|
|
Fail:
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_DEFINE_SERVICE_CIDREC(
|
|
|
|
cff_service_cid_info,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-10-30 08:07:56 +01:00
|
|
|
(FT_CID_GetRegistryOrderingSupplementFunc)
|
|
|
|
cff_get_ros, /* get_ros */
|
|
|
|
(FT_CID_GetIsInternallyCIDKeyedFunc)
|
|
|
|
cff_get_is_cid, /* get_is_cid */
|
|
|
|
(FT_CID_GetCIDFromGlyphIndexFunc)
|
|
|
|
cff_get_cid_from_glyph_index /* get_cid_from_glyph_index */
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
2007-07-16 22:46:05 +02:00
|
|
|
|
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
/*
|
|
|
|
* PROPERTY SERVICE
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
static FT_Error
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
cff_property_set( FT_Module module, /* CFF_Driver */
|
2013-04-12 19:48:06 +02:00
|
|
|
const char* property_name,
|
2016-07-10 07:11:45 +02:00
|
|
|
const void* value,
|
|
|
|
FT_Bool value_is_string )
|
2013-04-12 19:48:06 +02:00
|
|
|
{
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
FT_Error error = FT_Err_Ok;
|
|
|
|
CFF_Driver driver = (CFF_Driver)module;
|
|
|
|
|
2016-07-11 16:14:36 +02:00
|
|
|
#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
|
|
|
FT_UNUSED( value_is_string );
|
|
|
|
#endif
|
|
|
|
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
2013-06-25 23:28:02 +02:00
|
|
|
if ( !ft_strcmp( property_name, "darkening-parameters" ) )
|
|
|
|
{
|
2016-07-10 07:11:45 +02:00
|
|
|
FT_Int* darken_params;
|
|
|
|
FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
|
2016-07-11 16:14:36 +02:00
|
|
|
|
|
|
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
2016-07-11 15:11:38 +02:00
|
|
|
FT_Int dp[8];
|
2013-06-25 23:28:02 +02:00
|
|
|
|
|
|
|
|
2016-07-10 07:11:45 +02:00
|
|
|
if ( value_is_string )
|
2016-07-11 15:11:38 +02:00
|
|
|
{
|
|
|
|
const char* s = (const char*)value;
|
|
|
|
char* ep;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
|
|
/* eight comma-separated numbers */
|
|
|
|
for ( i = 0; i < 7; i++ )
|
|
|
|
{
|
|
|
|
dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
|
|
|
|
if ( *ep != ',' || s == ep )
|
|
|
|
return FT_THROW( Invalid_Argument );
|
|
|
|
|
|
|
|
s = ep + 1;
|
|
|
|
}
|
2016-07-10 07:11:45 +02:00
|
|
|
|
2016-07-11 15:11:38 +02:00
|
|
|
dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
|
|
|
|
if ( !( *ep == '\0' || *ep == ' ' ) || s == ep )
|
|
|
|
return FT_THROW( Invalid_Argument );
|
|
|
|
|
|
|
|
darken_params = dp;
|
|
|
|
}
|
|
|
|
else
|
2016-07-11 16:14:36 +02:00
|
|
|
#endif
|
2016-07-11 15:11:38 +02:00
|
|
|
darken_params = (FT_Int*)value;
|
2016-07-10 07:11:45 +02:00
|
|
|
|
|
|
|
x1 = darken_params[0];
|
|
|
|
y1 = darken_params[1];
|
|
|
|
x2 = darken_params[2];
|
|
|
|
y2 = darken_params[3];
|
|
|
|
x3 = darken_params[4];
|
|
|
|
y3 = darken_params[5];
|
|
|
|
x4 = darken_params[6];
|
|
|
|
y4 = darken_params[7];
|
2013-06-25 23:28:02 +02:00
|
|
|
|
2013-06-26 12:22:10 +02:00
|
|
|
if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
|
|
|
|
y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
|
|
|
|
x1 > x2 || x2 > x3 || x3 > x4 ||
|
|
|
|
y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
|
2013-06-25 23:28:02 +02:00
|
|
|
return FT_THROW( Invalid_Argument );
|
|
|
|
|
|
|
|
driver->darken_params[0] = x1;
|
|
|
|
driver->darken_params[1] = y1;
|
|
|
|
driver->darken_params[2] = x2;
|
|
|
|
driver->darken_params[3] = y2;
|
|
|
|
driver->darken_params[4] = x3;
|
|
|
|
driver->darken_params[5] = y3;
|
|
|
|
driver->darken_params[6] = x4;
|
|
|
|
driver->darken_params[7] = y4;
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
else if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
{
|
2016-07-11 16:14:36 +02:00
|
|
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
2016-07-10 07:11:45 +02:00
|
|
|
if ( value_is_string )
|
2016-07-11 15:11:38 +02:00
|
|
|
{
|
|
|
|
const char* s = (const char*)value;
|
2016-07-10 07:11:45 +02:00
|
|
|
|
|
|
|
|
2016-07-11 15:11:38 +02:00
|
|
|
if ( !ft_strcmp( s, "adobe" ) )
|
|
|
|
driver->hinting_engine = FT_CFF_HINTING_ADOBE;
|
2016-05-05 12:28:48 +02:00
|
|
|
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
|
2016-07-11 15:11:38 +02:00
|
|
|
else if ( !ft_strcmp( s, "freetype" ) )
|
|
|
|
driver->hinting_engine = FT_CFF_HINTING_FREETYPE;
|
2013-06-03 12:41:58 +02:00
|
|
|
#endif
|
2016-07-11 15:11:38 +02:00
|
|
|
else
|
|
|
|
return FT_THROW( Invalid_Argument );
|
|
|
|
}
|
2016-05-05 12:28:48 +02:00
|
|
|
else
|
2016-07-11 16:14:36 +02:00
|
|
|
#endif
|
2016-07-11 15:11:38 +02:00
|
|
|
{
|
|
|
|
FT_UInt* hinting_engine = (FT_UInt*)value;
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
2017-02-18 10:43:10 +01:00
|
|
|
|
2016-07-11 15:11:38 +02:00
|
|
|
if ( *hinting_engine == FT_CFF_HINTING_ADOBE
|
|
|
|
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
|
|
|
|
|| *hinting_engine == FT_CFF_HINTING_FREETYPE
|
|
|
|
#endif
|
|
|
|
)
|
|
|
|
driver->hinting_engine = *hinting_engine;
|
|
|
|
else
|
|
|
|
error = FT_ERR( Unimplemented_Feature );
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
}
|
|
|
|
else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
|
|
|
{
|
2016-07-11 16:14:36 +02:00
|
|
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
2016-07-11 15:11:38 +02:00
|
|
|
if ( value_is_string )
|
|
|
|
{
|
|
|
|
const char* s = (const char*)value;
|
|
|
|
long nsd = ft_strtol( s, NULL, 10 );
|
2016-07-10 07:11:45 +02:00
|
|
|
|
|
|
|
|
2017-02-18 10:42:23 +01:00
|
|
|
if ( !nsd )
|
|
|
|
driver->no_stem_darkening = FALSE;
|
2016-07-11 15:11:38 +02:00
|
|
|
else
|
2017-02-18 10:42:23 +01:00
|
|
|
driver->no_stem_darkening = TRUE;
|
2016-07-11 15:11:38 +02:00
|
|
|
}
|
|
|
|
else
|
2016-07-11 16:14:36 +02:00
|
|
|
#endif
|
2016-07-11 15:11:38 +02:00
|
|
|
{
|
|
|
|
FT_Bool* no_stem_darkening = (FT_Bool*)value;
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
|
|
|
|
2016-07-11 15:11:38 +02:00
|
|
|
driver->no_stem_darkening = *no_stem_darkening;
|
|
|
|
}
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
2017-02-20 09:01:14 +01:00
|
|
|
else if ( !ft_strcmp( property_name, "random-seed" ) )
|
|
|
|
{
|
|
|
|
FT_Int32 random_seed;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
|
|
|
if ( value_is_string )
|
|
|
|
{
|
|
|
|
const char* s = (const char*)value;
|
|
|
|
|
|
|
|
|
|
|
|
random_seed = (FT_Int32)ft_strtol( s, NULL, 10 );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
#endif
|
|
|
|
random_seed = *(FT_Int32*)value;
|
|
|
|
|
|
|
|
if ( random_seed < 0 )
|
|
|
|
random_seed = 0;
|
|
|
|
|
|
|
|
driver->random_seed = random_seed;
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
|
|
|
FT_TRACE0(( "cff_property_set: missing property `%s'\n",
|
|
|
|
property_name ));
|
|
|
|
return FT_THROW( Missing_Property );
|
2013-04-12 19:48:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static FT_Error
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
cff_property_get( FT_Module module, /* CFF_Driver */
|
2013-04-12 19:48:06 +02:00
|
|
|
const char* property_name,
|
|
|
|
const void* value )
|
|
|
|
{
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
FT_Error error = FT_Err_Ok;
|
|
|
|
CFF_Driver driver = (CFF_Driver)module;
|
|
|
|
|
|
|
|
|
2013-06-25 23:28:02 +02:00
|
|
|
if ( !ft_strcmp( property_name, "darkening-parameters" ) )
|
|
|
|
{
|
|
|
|
FT_Int* darken_params = driver->darken_params;
|
|
|
|
FT_Int* val = (FT_Int*)value;
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
2013-06-25 23:28:02 +02:00
|
|
|
|
|
|
|
val[0] = darken_params[0];
|
|
|
|
val[1] = darken_params[1];
|
|
|
|
val[2] = darken_params[2];
|
|
|
|
val[3] = darken_params[3];
|
|
|
|
val[4] = darken_params[4];
|
|
|
|
val[5] = darken_params[5];
|
|
|
|
val[6] = darken_params[6];
|
|
|
|
val[7] = darken_params[7];
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
else if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
{
|
2013-06-25 23:28:02 +02:00
|
|
|
FT_UInt hinting_engine = driver->hinting_engine;
|
|
|
|
FT_UInt* val = (FT_UInt*)value;
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
|
|
|
|
|
|
|
*val = hinting_engine;
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
|
|
|
{
|
2013-06-25 23:28:02 +02:00
|
|
|
FT_Bool no_stem_darkening = driver->no_stem_darkening;
|
|
|
|
FT_Bool* val = (FT_Bool*)value;
|
[cff] Add a new Type 2 interpreter and hinter.
This work, written by Dave Arnold <darnold@adobe.com> and fully
integrated into FreeType by me, is a donation by Adobe in
collaboration with Google. It is vastly superior to the old CFF
engine, and it will replace it soon. Right now, it is still off by
default, and you have to explicitly select it using the new
`hinting-engine' property of the cff driver.
For convenience, (most of) the new files are committed separately.
* include/freetype/config/ftheader.h (FT_CFF_DRIVER_H): New macro.
* include/freetype/ftcffdrv.h: New file to access CFF driver
properties.
* include/freetype/fterrdef.h (FT_Err_Glyph_Too_Big): New error
code.
* include/freetype/internal/fttrace.h: Add `cf2blues', `cf2hints',
and `cf2interp'.
* src/cff/cffgload.h (CFF_SubFont): New member `current_subfont'.
* src/cff/cffobjs.h (CFF_DriverRec): New members `hinting_engine'
and `no_stem_darkening'.
* src/cff/cfftypes.h (CFF_FontRec): New member `cf2_instance'.
* src/cff/cff.c: Include new files.
* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`hinting-engine' and `no-stem-darkening' properties (only the Adobe
engine listens to them).
* src/cff/cffgload.c: Include `cf2ft.h'.
(cff_decoder_prepare): Initialize `current_subfont'.
(cff_build_add_point): Handle Adobe engine which uses 16.16
coordinates.
(cff_slot_load): Handle FT_LOAD_NO_SCALE and FT_LOAD_NO_HINTING
separately.
Choose rendering engine based on `hinting_engine' property.
* src/cff/cffload.c (cff_font_done): Call finalizer of the Adobe
engine.
* src/cff/cffobjs.c: Include FT_CFF_DRIVER_H.
(cff_driver_init): Set default property values.
* src/cff/rules.mk (CFF_DRV_SRC, CFF_DRV_H): Add new files.
* src/cff/cf2*.*: New files, containing the Adobe engine.
2013-04-13 18:53:28 +02:00
|
|
|
|
|
|
|
|
|
|
|
*val = no_stem_darkening;
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
FT_TRACE0(( "cff_property_get: missing property `%s'\n",
|
|
|
|
property_name ));
|
|
|
|
return FT_THROW( Missing_Property );
|
2013-04-12 19:48:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FT_DEFINE_SERVICE_PROPERTIESREC(
|
|
|
|
cff_service_properties,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-10-30 08:07:56 +01:00
|
|
|
(FT_Properties_SetFunc)cff_property_set, /* set_property */
|
|
|
|
(FT_Properties_GetFunc)cff_property_get ) /* get_property */
|
2013-04-12 19:48:06 +02:00
|
|
|
|
|
|
|
|
2016-12-14 19:31:42 +01:00
|
|
|
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
|
|
|
|
|
|
|
/*
|
|
|
|
* MULTIPLE MASTER SERVICE
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
cff_set_mm_blend( CFF_Face face,
|
|
|
|
FT_UInt num_coords,
|
|
|
|
FT_Fixed* coords )
|
|
|
|
{
|
|
|
|
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
|
|
|
|
|
|
|
|
|
|
|
return mm->set_mm_blend( FT_FACE( face ), num_coords, coords );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
cff_get_mm_blend( CFF_Face face,
|
|
|
|
FT_UInt num_coords,
|
|
|
|
FT_Fixed* coords )
|
|
|
|
{
|
|
|
|
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
|
|
|
|
|
|
|
|
|
|
|
return mm->get_mm_blend( FT_FACE( face ), num_coords, coords );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
cff_get_mm_var( CFF_Face face,
|
|
|
|
FT_MM_Var* *master )
|
|
|
|
{
|
|
|
|
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
|
|
|
|
|
|
|
|
|
|
|
return mm->get_mm_var( FT_FACE( face ), master );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
cff_set_var_design( CFF_Face face,
|
|
|
|
FT_UInt num_coords,
|
|
|
|
FT_Fixed* coords )
|
|
|
|
{
|
|
|
|
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
|
|
|
|
|
|
|
|
|
|
|
return mm->set_var_design( FT_FACE( face ), num_coords, coords );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
cff_get_var_design( CFF_Face face,
|
|
|
|
FT_UInt num_coords,
|
|
|
|
FT_Fixed* coords )
|
|
|
|
{
|
|
|
|
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
|
|
|
|
|
|
|
|
|
|
|
return mm->get_var_design( FT_FACE( face ), num_coords, coords );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FT_DEFINE_SERVICE_MULTIMASTERSREC(
|
|
|
|
cff_service_multi_masters,
|
|
|
|
|
|
|
|
(FT_Get_MM_Func) NULL, /* get_mm */
|
|
|
|
(FT_Set_MM_Design_Func) NULL, /* set_mm_design */
|
|
|
|
(FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
|
|
|
|
(FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
|
|
|
|
(FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
|
|
|
|
(FT_Set_Var_Design_Func)cff_set_var_design, /* set_var_design */
|
|
|
|
(FT_Get_Var_Design_Func)cff_get_var_design, /* get_var_design */
|
|
|
|
|
|
|
|
(FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
|
|
|
|
(FT_Done_Blend_Func) cff_done_blend /* done_blend */
|
|
|
|
)
|
2017-01-31 23:06:38 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* METRICS VARIATIONS SERVICE
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
cff_hadvance_adjust( CFF_Face face,
|
|
|
|
FT_UInt gindex,
|
|
|
|
FT_Int *avalue )
|
|
|
|
{
|
|
|
|
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
|
|
|
|
|
|
|
|
|
|
|
|
return var->hadvance_adjust( FT_FACE( face ), gindex, avalue );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
cff_metrics_adjust( CFF_Face face )
|
|
|
|
{
|
|
|
|
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
|
|
|
|
|
|
|
|
|
|
|
|
var->metrics_adjust( FT_FACE( face ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
|
|
|
|
cff_service_metrics_variations,
|
|
|
|
|
|
|
|
(FT_HAdvance_Adjust_Func)cff_hadvance_adjust, /* hadvance_adjust */
|
|
|
|
(FT_LSB_Adjust_Func) NULL, /* lsb_adjust */
|
|
|
|
(FT_RSB_Adjust_Func) NULL, /* rsb_adjust */
|
|
|
|
|
|
|
|
(FT_VAdvance_Adjust_Func)NULL, /* vadvance_adjust */
|
|
|
|
(FT_TSB_Adjust_Func) NULL, /* tsb_adjust */
|
|
|
|
(FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
|
|
|
|
(FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
|
|
|
|
|
|
|
|
(FT_Metrics_Adjust_Func) cff_metrics_adjust /* metrics_adjust */
|
|
|
|
)
|
2016-12-14 19:31:42 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2017-09-24 22:20:38 +02:00
|
|
|
/*
|
|
|
|
* CFFLOAD SERVICE
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
FT_DEFINE_SERVICE_CFFLOADREC(
|
|
|
|
cff_service_cff_load,
|
|
|
|
|
|
|
|
(FT_Get_Standard_Encoding_Func) cff_get_standard_encoding,
|
|
|
|
(FT_Load_Private_Dict_Func) cff_load_private_dict,
|
|
|
|
(FT_FD_Select_Get_Func) cff_fd_select_get,
|
|
|
|
(FT_Blend_Check_Vector_Func) cff_blend_check_vector,
|
|
|
|
(FT_Blend_Build_Vector_Func) cff_blend_build_vector
|
|
|
|
)
|
|
|
|
|
2000-12-08 03:42:29 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/**** ****/
|
|
|
|
/**** ****/
|
|
|
|
/**** D R I V E R I N T E R F A C E ****/
|
|
|
|
/**** ****/
|
|
|
|
/**** ****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
2013-04-12 19:48:06 +02:00
|
|
|
|
2016-12-14 19:31:42 +01:00
|
|
|
#if !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES && \
|
|
|
|
defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_DEFINE_SERVICEDESCREC10(
|
2016-12-14 19:31:42 +01:00
|
|
|
cff_services,
|
|
|
|
|
|
|
|
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
|
|
|
FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
|
2017-01-31 23:06:38 +01:00
|
|
|
FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
|
2016-12-14 19:31:42 +01:00
|
|
|
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,
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
|
|
|
|
FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
|
2016-12-14 19:31:42 +01:00
|
|
|
)
|
|
|
|
#elif !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_DEFINE_SERVICEDESCREC8(
|
2013-04-12 19:48:06 +02:00
|
|
|
cff_services,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-03-11 08:09:13 +01:00
|
|
|
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
2012-08-27 08:41:43 +02:00
|
|
|
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,
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
|
|
|
|
FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
2016-12-14 19:31:42 +01:00
|
|
|
#elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_DEFINE_SERVICEDESCREC9(
|
2016-12-14 19:31:42 +01:00
|
|
|
cff_services,
|
|
|
|
|
|
|
|
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
|
|
|
FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
|
2017-01-31 23:06:38 +01:00
|
|
|
FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
|
2016-12-14 19:31:42 +01:00
|
|
|
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,
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
|
|
|
|
FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
|
2016-12-14 19:31:42 +01:00
|
|
|
)
|
2009-04-05 17:12:03 +02:00
|
|
|
#else
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_DEFINE_SERVICEDESCREC7(
|
2013-04-12 19:48:06 +02:00
|
|
|
cff_services,
|
2016-09-17 17:12:50 +02:00
|
|
|
|
2015-03-11 08:09:13 +01:00
|
|
|
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
2012-08-27 08:41:43 +02:00
|
|
|
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,
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
|
2017-09-24 22:20:38 +02:00
|
|
|
FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
|
|
|
|
FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
* include/freetype/ftmm.h, include/freetype/ftmodule.h,
include/freetype/tttables.h, include/freetype/config/ftconfig.h,
include/freetype/internal/ftobjs.h,
include/freetype/internal/ftserv.h,
include/freetype/internal/internal.h,
include/freetype/internal/sfnt.h,
include/freetype/internal/tttypes.h,
include/freetype/internal/services/bdf.h,
include/freetype/internal/services/glyfdict.h,
include/freetype/internal/services/multmast.h,
include/freetype/internal/services/postname.h,
include/freetype/internal/services/sfnt.h,
include/freetype/internal/services/xf86name.h,
src/base/ftbdf.c, src/base/ftmm.c, src/base/ftobjs.c,
src/base/ftxf86.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/sfnt/sfdriver.c,
src/truetype/ttdriver.c, src/type1/t1driver.c, src/type42/t42drivr.c:
heavy internal modifications to introduce the concept of
"module services". This is the first step towards a massive
simplification of the engine's internals, in order to
get rid of various numbers of hacks.
Note that this changes will break source & binary compatibility
for authors of external font drivers.
Maybe 2.1.6 will be called 2.2.0 after all :-)
2003-09-11 21:51:54 +02:00
|
|
|
#endif
|
2003-09-17 07:26:33 +02:00
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
|
* src/truetype/ttobjs.c (tt_driver_done): Fix typo.
* src/bdf/bdfdrivr.c (BDF_Face_Done, BDF_Face_Init,
BDF_Set_Pixel_Size): Don't use BDF_XXX but FT_XXX arguments which
are typecast to the proper BDF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(BDF_Set_Point_Size): New wrapper function.
(bdf_driver_class): Remove casts.
* src/cff/cffdrivr.c (Get_Kerning, Load_Glyph, cff_get_interface):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF throughout.
(cff_driver_class): Remove casts.
* src/cff/cffobjs.h, src/cff/cffobjs.c (cff_size_done,
cff_size_init, cff_size_reset, cff_slot_done, cff_slot_init,
cff_face_init, cff_face_done, cff_driver_init, cff_driver_done):
Don't use CFF_XXX but FT_XXX arguments which are typecast to the
proper CFF_XXX types within the function.
Update code accordingly.
(cff_point_size_reset): New wrapper function.
* src/cid/cidobjs.h, src/cid/cidobjs.c (cid_slot_done,
cid_slot_init, cid_size_done, cid_size_init, cid_size_reset,
cid_face_done, cid_face_init, cid_driver_init, cid_driver_done):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
(cid_point_size_reset): New wrapper function.
* src/cid/cidgload.c, src/cid/cidgload.h (cid_slot_load_glyph):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
* src/cid/cidriver.c (cid_get_interface):
Don't use CID_XXX but FT_XXX arguments which are typecast to the
proper CID_XXX types within the function.
Update code accordingly.
Use FT_CALLBACK_DEF.
(t1cid_driver_class): Remove casts.
* src/truetype/ttdriver.c (tt_get_interface): Use FT_CALLBACK_DEF.
* src/truetype/ttgxvar.c (ft_var_load_avar): Don't free non-local
variables (this is done later).
(ft_var_load_avar): Fix call to FT_FRAME_ENTER.
(TT_Get_MM_Var): Fix size for `fvar_fields'.
(TT_Vary_Get_Glyph_Deltas): Handle deallocation of local variables
correctly.
* src/base/ftdbgmem.c (ft_mem_debug_realloc): Don't abort if
current size is zero.
2004-05-06 13:48:35 +02:00
|
|
|
FT_CALLBACK_DEF( FT_Module_Interface )
|
|
|
|
cff_get_interface( FT_Module driver, /* CFF_Driver */
|
2002-04-30 08:37:52 +02:00
|
|
|
const char* module_interface )
|
2000-12-08 03:42:29 +01:00
|
|
|
{
|
2012-01-13 22:40:03 +01:00
|
|
|
FT_Library library;
|
2003-11-01 15:36:20 +01:00
|
|
|
FT_Module sfnt;
|
* include/freetype/ftmm.h, include/freetype/ftmodule.h,
include/freetype/tttables.h, include/freetype/config/ftconfig.h,
include/freetype/internal/ftobjs.h,
include/freetype/internal/ftserv.h,
include/freetype/internal/internal.h,
include/freetype/internal/sfnt.h,
include/freetype/internal/tttypes.h,
include/freetype/internal/services/bdf.h,
include/freetype/internal/services/glyfdict.h,
include/freetype/internal/services/multmast.h,
include/freetype/internal/services/postname.h,
include/freetype/internal/services/sfnt.h,
include/freetype/internal/services/xf86name.h,
src/base/ftbdf.c, src/base/ftmm.c, src/base/ftobjs.c,
src/base/ftxf86.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/sfnt/sfdriver.c,
src/truetype/ttdriver.c, src/type1/t1driver.c, src/type42/t42drivr.c:
heavy internal modifications to introduce the concept of
"module services". This is the first step towards a massive
simplification of the engine's internals, in order to
get rid of various numbers of hacks.
Note that this changes will break source & binary compatibility
for authors of external font drivers.
Maybe 2.1.6 will be called 2.2.0 after all :-)
2003-09-11 21:51:54 +02:00
|
|
|
FT_Module_Interface result;
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2003-11-01 15:36:20 +01:00
|
|
|
|
2014-12-07 08:17:12 +01:00
|
|
|
/* CFF_SERVICES_GET dereferences `library' in PIC mode */
|
2012-01-13 22:40:03 +01:00
|
|
|
#ifdef FT_CONFIG_OPTION_PIC
|
|
|
|
if ( !driver )
|
|
|
|
return NULL;
|
|
|
|
library = driver->library;
|
|
|
|
if ( !library )
|
|
|
|
return NULL;
|
|
|
|
#endif
|
|
|
|
|
2012-08-27 08:41:43 +02:00
|
|
|
result = ft_service_list_lookup( CFF_SERVICES_GET, module_interface );
|
2016-12-26 17:08:17 +01:00
|
|
|
if ( result )
|
2012-01-13 22:40:03 +01:00
|
|
|
return result;
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2012-01-13 22:40:03 +01:00
|
|
|
/* `driver' is not yet evaluated in non-PIC mode */
|
|
|
|
#ifndef FT_CONFIG_OPTION_PIC
|
2010-02-04 18:58:24 +01:00
|
|
|
if ( !driver )
|
|
|
|
return NULL;
|
2012-01-13 22:40:03 +01:00
|
|
|
library = driver->library;
|
|
|
|
if ( !library )
|
|
|
|
return NULL;
|
|
|
|
#endif
|
2010-02-04 18:58:24 +01:00
|
|
|
|
2003-11-01 15:36:20 +01:00
|
|
|
/* we pass our request to the `sfnt' module */
|
2012-01-13 22:40:03 +01:00
|
|
|
sfnt = FT_Get_Module( library, "sfnt" );
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2002-04-30 08:37:52 +02:00
|
|
|
return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0;
|
2000-12-08 03:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* The FT_DriverInterface structure is defined in ftdriver.h. */
|
|
|
|
|
2009-04-05 17:12:03 +02:00
|
|
|
#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
|
|
|
|
#define CFF_SIZE_SELECT cff_size_select
|
|
|
|
#else
|
|
|
|
#define CFF_SIZE_SELECT 0
|
|
|
|
#endif
|
|
|
|
|
2013-04-12 19:48:06 +02:00
|
|
|
FT_DEFINE_DRIVER(
|
|
|
|
cff_driver_class,
|
2011-11-30 10:46:53 +01:00
|
|
|
|
2015-11-10 22:33:45 +01:00
|
|
|
FT_MODULE_FONT_DRIVER |
|
|
|
|
FT_MODULE_DRIVER_SCALABLE |
|
|
|
|
FT_MODULE_DRIVER_HAS_HINTER |
|
|
|
|
FT_MODULE_DRIVER_HINTS_LIGHTLY,
|
* include/freetype/config/ftoption.h, include/freetype/internal/tttypes.h,
src/base/ftobjs.c, src/bdf/bdfdrivr.c, src/cff/cffobjs.c,
src/pcf/pcfdrivr.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c,
src/sfnt/ttcmap0.h, src/sfnt/ttload.c, src/type1/t1objs.c,
src/type42/t42objs.c, src/winfonts/winfnt.c: code cleanup,
FT_CONFIG_OPTION_USE_CMAPS is now the default
2002-07-17 23:52:20 +02:00
|
|
|
|
2011-11-30 10:46:53 +01:00
|
|
|
sizeof ( CFF_DriverRec ),
|
2000-12-08 03:42:29 +01:00
|
|
|
"cff",
|
|
|
|
0x10000L,
|
|
|
|
0x20000L,
|
|
|
|
|
2016-09-17 17:12:50 +02:00
|
|
|
NULL, /* module-specific interface */
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2015-10-19 08:49:25 +02:00
|
|
|
cff_driver_init, /* FT_Module_Constructor module_init */
|
|
|
|
cff_driver_done, /* FT_Module_Destructor module_done */
|
|
|
|
cff_get_interface, /* FT_Module_Requester get_interface */
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2011-11-30 10:46:53 +01:00
|
|
|
sizeof ( TT_FaceRec ),
|
|
|
|
sizeof ( CFF_SizeRec ),
|
|
|
|
sizeof ( CFF_GlyphSlotRec ),
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2015-10-19 08:49:25 +02:00
|
|
|
cff_face_init, /* FT_Face_InitFunc init_face */
|
|
|
|
cff_face_done, /* FT_Face_DoneFunc done_face */
|
|
|
|
cff_size_init, /* FT_Size_InitFunc init_size */
|
|
|
|
cff_size_done, /* FT_Size_DoneFunc done_size */
|
|
|
|
cff_slot_init, /* FT_Slot_InitFunc init_slot */
|
|
|
|
cff_slot_done, /* FT_Slot_DoneFunc done_slot */
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2015-10-19 08:49:25 +02:00
|
|
|
cff_glyph_load, /* FT_Slot_LoadFunc load_glyph */
|
2000-12-08 03:42:29 +01:00
|
|
|
|
2015-10-19 08:49:25 +02:00
|
|
|
cff_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
|
2016-09-17 17:12:50 +02:00
|
|
|
NULL, /* FT_Face_AttachFunc attach_file */
|
2015-10-19 08:49:25 +02:00
|
|
|
cff_get_advances, /* FT_Face_GetAdvancesFunc get_advances */
|
* builds/amiga/src/base/ftsystem.c, devel/ftoption.h
include/freetype/ftcache.h, include/freetype/ftoutln.h,
include/freetype/cache/ftccache.h, include/freetype/cache/ftccmap.h,
include/freetype/config/ftoption.h, include/freetype/internal/ftcalc.h,
include/freetype/internal/ftdriver.h,
include/freetype/internal/ftmemory.h,
include/freetype/internal/ftobjs.h, include/freetype/internal/ftrfork.h,
include/freetype/internal/psaux.h, include/freetype/internal/sfnt.h,
include/freetype/internal/t1types.h, include/freetype/internal/tttypes.h,
src/base/ftcalc.c, src/base/ftdbgmem.c, src/base/ftobjs.c,
src/base/ftsystem.c, src/base/ftutil.c, src/bdf/bdfdrivr.c,
src/cache/ftccache.c, src/cache/ftccback.h, src/cache/ftccmap.c,
src/cache/ftcmanag.c, src/cff/cffdrivr.c, src/cid/cidriver.c,
src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c, src/psaux/psauxmod.c,
src/sfnt/sfdriver.c, src/truetype/ttdriver.c, src/type1/t1driver.c,
src/type1/t1objs.c, src/type42/t42drivr.c, src/winfonts/winfnt.c:
massive changes to the internals to respect the internal object layouts
and exported functions of FreeType 2.1.7. Note that the cache sub-system
cannot be fully retrofitted, unfortunately.
2006-02-16 23:45:31 +01:00
|
|
|
|
2015-10-19 08:49:25 +02:00
|
|
|
cff_size_request, /* FT_Size_RequestFunc request_size */
|
|
|
|
CFF_SIZE_SELECT /* FT_Size_SelectFunc select_size */
|
2009-04-05 17:12:03 +02:00
|
|
|
)
|
2000-12-08 03:42:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* END */
|