[CHG] FreeType updated to version 2.4.9

This commit is contained in:
Crayon2000 2012-03-10 19:55:12 +00:00
parent 65f1c09927
commit 1ba41c22c4
166 changed files with 2390 additions and 1685 deletions

View file

@ -122,6 +122,7 @@ ifdef check_platform
#
is_unix := $(strip $(wildcard /sbin/init) \
$(wildcard /usr/sbin/init) \
$(wildcard /dev/null) \
$(wildcard /hurd/auth))
ifneq ($(is_unix),)

View file

@ -120,8 +120,7 @@ FT_BEGIN_HEADER
/* This is the only necessary change, so it is defined here instead */
/* providing a new configuration file. */
/* */
#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
( defined( __MWERKS__ ) && defined( macintosh ) )
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
/* no Carbon frameworks for 64bit 10.4.x */
/* AvailabilityMacros.h is available since Mac OS X 10.2, */
/* so guess the system version by maximum errno before inclusion */
@ -131,9 +130,7 @@ FT_BEGIN_HEADER
#endif
#if defined( __LP64__ ) && \
( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
#define DARWIN_NO_CARBON 1
#else
#define FT_MACINTOSH 1
#undef FT_MACINTOSH
#endif
#elif defined( __SC__ ) || defined( __MRC__ )

View file

@ -0,0 +1,32 @@
/*
* This file registers the FreeType modules compiled into the library.
*
* If you use GNU make, this file IS NOT USED! Instead, it is created in
* the objects directory (normally `<topdir>/objs/') based on information
* from `<topdir>/modules.cfg'.
*
* Please read `docs/INSTALL.ANY' and `docs/CUSTOMIZE' how to compile
* FreeType without GNU make.
*
*/
FT_USE_MODULE( FT_Module_Class, autofit_module_class )
FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
FT_USE_MODULE( FT_Module_Class, psaux_module_class )
FT_USE_MODULE( FT_Module_Class, psnames_module_class )
FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
/* EOF */

View file

@ -4,7 +4,7 @@
/* */
/* FreeType high-level API and common types (specification only). */
/* */
/* Copyright 1996-2011 by */
/* Copyright 1996-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -958,8 +958,8 @@ FT_BEGIN_HEADER
FT_ListRec sizes_list;
FT_Generic autohint;
void* extensions;
FT_Generic autohint; /* face-specific auto-hinter data */
void* extensions; /* unused */
FT_Face_Internal internal;
@ -1668,6 +1668,9 @@ FT_BEGIN_HEADER
/* use @FT_New_Library instead, followed by a call to */
/* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module). */
/* */
/* For multi-threading applications each thread should have its own */
/* FT_Library object. */
/* */
FT_EXPORT( FT_Error )
FT_Init_FreeType( FT_Library *alibrary );
@ -1953,6 +1956,10 @@ FT_BEGIN_HEADER
/* Each new face object created with this function also owns a */
/* default @FT_Size object, accessible as `face->size'. */
/* */
/* One @FT_Library instance can have multiple face objects, this is, */
/* @FT_Open_Face and its siblings can be called multiple times using */
/* the same `library' argument. */
/* */
/* See the discussion of reference counters in the description of */
/* @FT_Reference_Face. */
/* */
@ -2445,6 +2452,11 @@ FT_BEGIN_HEADER
* during glyph loading. This is mostly used to detect broken glyphs
* in fonts. By default, FreeType tries to handle broken fonts also.
*
* In particular, errors from the TrueType bytecode engine are not
* passed to the application if this flag is not set; this might
* result in partially hinted or distorted glyphs in case a glyph's
* bytecode is buggy.
*
* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::
* Ignored. Deprecated.
*
@ -2497,26 +2509,26 @@ FT_BEGIN_HEADER
*
*/
#define FT_LOAD_DEFAULT 0x0
#define FT_LOAD_NO_SCALE 0x1
#define FT_LOAD_NO_HINTING 0x2
#define FT_LOAD_RENDER 0x4
#define FT_LOAD_NO_BITMAP 0x8
#define FT_LOAD_VERTICAL_LAYOUT 0x10
#define FT_LOAD_FORCE_AUTOHINT 0x20
#define FT_LOAD_CROP_BITMAP 0x40
#define FT_LOAD_PEDANTIC 0x80
#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 0x200
#define FT_LOAD_NO_RECURSE 0x400
#define FT_LOAD_IGNORE_TRANSFORM 0x800
#define FT_LOAD_MONOCHROME 0x1000
#define FT_LOAD_LINEAR_DESIGN 0x2000
#define FT_LOAD_NO_AUTOHINT 0x8000U
#define FT_LOAD_NO_SCALE ( 1L << 0 )
#define FT_LOAD_NO_HINTING ( 1L << 1 )
#define FT_LOAD_RENDER ( 1L << 2 )
#define FT_LOAD_NO_BITMAP ( 1L << 3 )
#define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 )
#define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 )
#define FT_LOAD_CROP_BITMAP ( 1L << 6 )
#define FT_LOAD_PEDANTIC ( 1L << 7 )
#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 )
#define FT_LOAD_NO_RECURSE ( 1L << 10 )
#define FT_LOAD_IGNORE_TRANSFORM ( 1L << 11 )
#define FT_LOAD_MONOCHROME ( 1L << 12 )
#define FT_LOAD_LINEAR_DESIGN ( 1L << 13 )
#define FT_LOAD_NO_AUTOHINT ( 1L << 15 )
/* */
/* used internally only by certain font drivers! */
#define FT_LOAD_ADVANCE_ONLY 0x100
#define FT_LOAD_SBITS_ONLY 0x4000
#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 )
#define FT_LOAD_SBITS_ONLY ( 1L << 14 )
/**************************************************************************
@ -2869,14 +2881,26 @@ FT_BEGIN_HEADER
/* */
/* point_size :: The point size in 16.16 fractional points. */
/* */
/* degree :: The degree of tightness. */
/* degree :: The degree of tightness. Increasingly negative */
/* values represent tighter track kerning, while */
/* increasingly positive values represent looser track */
/* kerning. Value zero means no track kerning. */
/* */
/* <Output> */
/* akerning :: The kerning in 16.16 fractional points. */
/* akerning :: The kerning in 16.16 fractional points, to be */
/* uniformly applied between all glyphs. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* Currently, only the Type~1 font driver supports track kerning, */
/* using data from AFM files (if attached with @FT_Attach_File or */
/* @FT_Attach_Stream). */
/* */
/* Only very few AFM files come with track kerning data; please refer */
/* to the Adobe's AFM specification for more details. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Track_Kerning( FT_Face face,
FT_Fixed point_size,
@ -3810,7 +3834,7 @@ FT_BEGIN_HEADER
*/
#define FREETYPE_MAJOR 2
#define FREETYPE_MINOR 4
#define FREETYPE_PATCH 8
#define FREETYPE_PATCH 9
/*************************************************************************/

View file

@ -4,7 +4,7 @@
/* */
/* FreeType error codes (specification). */
/* */
/* Copyright 2002, 2004, 2006, 2007, 2010 by */
/* Copyright 2002, 2004, 2006, 2007, 2010-2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -54,6 +54,8 @@
"broken offset within table" )
FT_ERRORDEF_( Array_Too_Large, 0x0A, \
"array allocation size too large" )
FT_ERRORDEF_( Missing_Module, 0x0B, \
"missing module" )
/* glyph/character errors */

View file

@ -192,12 +192,13 @@
#undef FT_NOERRORDEF_
#undef FT_NEED_EXTERN_C
#undef FT_ERR_CONCAT
#undef FT_ERR_BASE
/* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */
#ifndef FT_KEEP_ERR_PREFIX
#undef FT_ERR_PREFIX
#else
#undef FT_KEEP_ERR_PREFIX
#endif
#endif /* __FTERRORS_H__ */

View file

@ -4,7 +4,7 @@
/* */
/* FreeType simple types definitions (specification only). */
/* */
/* Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008 by */
/* Copyright 1996-2002, 2004, 2006-2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -434,7 +434,7 @@ FT_BEGIN_HEADER
/* variety of FreeType core objects. For example, a text layout API */
/* might want to associate a glyph cache to a given size object. */
/* */
/* Most FreeType object contains a `generic' field, of type */
/* Some FreeType object contains a `generic' field, of type */
/* FT_Generic, which usage is left to client applications and font */
/* servers. */
/* */

View file

@ -4,7 +4,7 @@
/* */
/* FreeType font driver interface (specification). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2006, 2008 by */
/* Copyright 1996-2003, 2006, 2008, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -162,10 +162,9 @@ FT_BEGIN_HEADER
/* starting at `first'. The `vertical' flag must */
/* be set to get vertical advance heights. The */
/* `advances' buffer is caller-allocated. */
/* Currently not implemented. The idea of this */
/* function is to be able to perform */
/* device-independent text layout without loading */
/* a single glyph image. */
/* The idea of this function is to be able to */
/* perform device-independent text layout without */
/* loading a single glyph image. */
/* */
/* request_size :: A handle to a function used to request the new */
/* character size. Can be set to 0 if the */
@ -268,7 +267,9 @@ FT_BEGIN_HEADER
/* and initialize any additional global data, like module specific */
/* interface, and put them in the global pic container defined in */
/* ftpic.h. if you don't need them just implement the functions as */
/* empty to resolve the link error. */
/* empty to resolve the link error. Also the pic_init and pic_free */
/* functions should be declared in pic.h, to be referred by driver */
/* definition calling FT_DEFINE_DRIVER() in following. */
/* */
/* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
/* allocated in the global scope (or the scope where the macro */
@ -348,8 +349,6 @@ FT_BEGIN_HEADER
old_set_char_sizes_, old_set_pixel_sizes_, \
load_glyph_, get_kerning_, attach_file_, \
get_advances_, request_size_, select_size_ ) \
void class_##_pic_free( FT_Library library ); \
FT_Error class_##_pic_init( FT_Library library ); \
\
void \
FT_Destroy_Class_##class_( FT_Library library, \

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType private base classes (specification). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008, 2010 by */
/* Copyright 1996-2006, 2008, 2010, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -436,19 +436,16 @@ FT_BEGIN_HEADER
/* */
/* memory :: A handle to the memory manager. */
/* */
/* generic :: A generic structure for user-level extensibility (?). */
/* */
typedef struct FT_ModuleRec_
{
FT_Module_Class* clazz;
FT_Library library;
FT_Memory memory;
FT_Generic generic;
} FT_ModuleRec;
/* typecast an object to a FT_Module */
/* typecast an object to an FT_Module */
#define FT_MODULE( x ) ((FT_Module)( x ))
#define FT_MODULE_CLASS( x ) FT_MODULE( x )->clazz
#define FT_MODULE_LIBRARY( x ) FT_MODULE( x )->library
@ -711,10 +708,6 @@ FT_BEGIN_HEADER
/* faces_list :: The list of faces currently opened by this */
/* driver. */
/* */
/* extensions :: A typeless pointer to the driver's extensions */
/* registry, if they are supported through the */
/* configuration macro FT_CONFIG_OPTION_EXTENSIONS. */
/* */
/* glyph_loader :: The glyph loader for all faces managed by this */
/* driver. This object isn't defined for unscalable */
/* formats. */
@ -723,10 +716,7 @@ FT_BEGIN_HEADER
{
FT_ModuleRec root;
FT_Driver_Class clazz;
FT_ListRec faces_list;
void* extensions;
FT_GlyphLoader glyph_loader;
} FT_DriverRec;
@ -776,9 +766,6 @@ FT_BEGIN_HEADER
/* memory :: The library's memory object. Manages memory */
/* allocation. */
/* */
/* generic :: Client data variable. Used to extend the */
/* Library class by higher levels and clients. */
/* */
/* version_major :: The major version number of the library. */
/* */
/* version_minor :: The minor version number of the library. */
@ -838,8 +825,6 @@ FT_BEGIN_HEADER
{
FT_Memory memory; /* library's memory manager */
FT_Generic generic;
FT_Int version_major;
FT_Int version_minor;
FT_Int version_patch;
@ -1119,7 +1104,9 @@ FT_BEGIN_HEADER
/* and initialize any additional global data, like module specific */
/* interface, and put them in the global pic container defined in */
/* ftpic.h. if you don't need them just implement the functions as */
/* empty to resolve the link error. */
/* empty to resolve the link error. Also the pic_init and pic_free */
/* functions should be declared in pic.h, to be referred by renderer */
/* definition calling FT_DEFINE_RENDERER() in following. */
/* */
/* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
/* allocated in the global scope (or the scope where the macro */
@ -1159,8 +1146,6 @@ FT_BEGIN_HEADER
interface_, init_, done_, get_interface_, \
glyph_format_, render_glyph_, transform_glyph_, \
get_glyph_cbox_, set_mode_, raster_class_ ) \
void class_##_pic_free( FT_Library library ); \
FT_Error class_##_pic_init( FT_Library library ); \
\
void \
FT_Destroy_Class_##class_( FT_Library library, \
@ -1290,7 +1275,9 @@ FT_BEGIN_HEADER
/* and initialize any additional global data, like module specific */
/* interface, and put them in the global pic container defined in */
/* ftpic.h. if you don't need them just implement the functions as */
/* empty to resolve the link error. */
/* empty to resolve the link error. Also the pic_init and pic_free */
/* functions should be declared in pic.h, to be referred by module */
/* definition calling FT_DEFINE_MODULE() in following. */
/* */
/* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
/* allocated in the global scope (or the scope where the macro */
@ -1371,8 +1358,6 @@ FT_BEGIN_HEADER
#define FT_DEFINE_MODULE(class_, flags_, size_, name_, version_, requires_, \
interface_, init_, done_, get_interface_) \
void class_##_pic_free( FT_Library library ); \
FT_Error class_##_pic_init( FT_Library library ); \
\
void \
FT_Destroy_Class_##class_( FT_Library library, \

View file

@ -48,6 +48,57 @@ FT_BEGIN_HEADER
} FT_RFork_Ref;
#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
typedef FT_Error
(*ft_raccess_guess_func)( FT_Library library,
FT_Stream stream,
char *base_file_name,
char **result_file_name,
FT_Long *result_offset );
typedef enum FT_RFork_Rule_ {
FT_RFork_Rule_invalid = -2,
FT_RFork_Rule_uknown, /* -1 */
FT_RFork_Rule_apple_double,
FT_RFork_Rule_apple_single,
FT_RFork_Rule_darwin_ufs_export,
FT_RFork_Rule_darwin_newvfs,
FT_RFork_Rule_darwin_hfsplus,
FT_RFork_Rule_vfat,
FT_RFork_Rule_linux_cap,
FT_RFork_Rule_linux_double,
FT_RFork_Rule_linux_netatalk
} FT_RFork_Rule;
/* For fast translation between rule index and rule type,
* the macros FT_RFORK_xxx should be kept consistent with
* the raccess_guess_funcs table
*/
typedef struct ft_raccess_guess_rec_ {
ft_raccess_guess_func func;
FT_RFork_Rule type;
} ft_raccess_guess_rec;
#ifndef FT_CONFIG_OPTION_PIC
/* this array is a storage in non-PIC mode, so ; is needed in END */
#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
const type name[] = {
#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
{ raccess_guess_##func_suffix, FT_RFork_Rule_##type_suffix },
#define CONST_FT_RFORK_RULE_ARRAY_END };
#else /* FT_CONFIG_OPTION_PIC */
/* this array is a function in PIC mode, so no ; is needed in END */
#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
void FT_Init_##name ( type* storage ) { \
type *local = storage; \
int i = 0;
#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
local[i].func = raccess_guess_##func_suffix; \
local[i].type = FT_RFork_Rule_##type_suffix; \
i++;
#define CONST_FT_RFORK_RULE_ARRAY_END }
#endif /* FT_CONFIG_OPTION_PIC */
#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
/*************************************************************************/
/* */

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType services (specification only). */
/* */
/* Copyright 2003, 2004, 2005, 2006, 2007 by */
/* Copyright 2003-2007, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -163,171 +163,209 @@ FT_BEGIN_HEADER
typedef const FT_ServiceDescRec* FT_ServiceDesc;
/*************************************************************************/
/* */
/* <Macro> */
/* FT_DEFINE_SERVICEDESCREC1 .. FT_DEFINE_SERVICEDESCREC6 */
/* */
/* <Description> */
/* Used to initialize an array of FT_ServiceDescRec structs. */
/* Used to initialize an array of FT_ServiceDescRec structures. */
/* */
/* When FT_CONFIG_OPTION_PIC is defined a Create funtion will need */
/* to called with a pointer where the allocated array is returned. */
/* And when it is no longer needed a Destroy function needs */
/* to be called to release that allocation. */
/* When FT_CONFIG_OPTION_PIC is defined a `create' function needs to */
/* be called with a pointer to return an allocated array. As soon as */
/* it is no longer needed, a `destroy' function needs to be called to */
/* release that allocation. */
/* */
/* These functions should be manyally called from the pic_init and */
/* pic_free functions of your module (see FT_DEFINE_MODULE) */
/* These functions should be manually called from the `pic_init' and */
/* `pic_free' functions of your module (see FT_DEFINE_MODULE). */
/* */
/* When FT_CONFIG_OPTION_PIC is not defined the array will be */
/* allocated in the global scope (or the scope where the macro */
/* is used). */
/* allocated in the global scope (or the scope where the macro is */
/* used). */
/* */
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \
#define FT_DEFINE_SERVICEDESCREC1( class_, \
serv_id_1, serv_data_1 ) \
static const FT_ServiceDescRec class_[] = \
{ \
{serv_id_1, serv_data_1}, \
{NULL, NULL} \
{ serv_id_1, serv_data_1 }, \
{ NULL, NULL } \
};
#define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2) \
#define FT_DEFINE_SERVICEDESCREC2( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2 ) \
static const FT_ServiceDescRec class_[] = \
{ \
{serv_id_1, serv_data_1}, \
{serv_id_2, serv_data_2}, \
{NULL, NULL} \
{ serv_id_1, serv_data_1 }, \
{ serv_id_2, serv_data_2 }, \
{ NULL, NULL } \
};
#define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3) \
#define FT_DEFINE_SERVICEDESCREC3( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3 ) \
static const FT_ServiceDescRec class_[] = \
{ \
{serv_id_1, serv_data_1}, \
{serv_id_2, serv_data_2}, \
{serv_id_3, serv_data_3}, \
{NULL, NULL} \
{ serv_id_1, serv_data_1 }, \
{ serv_id_2, serv_data_2 }, \
{ serv_id_3, serv_data_3 }, \
{ NULL, NULL } \
};
#define FT_DEFINE_SERVICEDESCREC4(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
serv_id_4, serv_data_4) \
#define FT_DEFINE_SERVICEDESCREC4( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3, \
serv_id_4, serv_data_4 ) \
static const FT_ServiceDescRec class_[] = \
{ \
{serv_id_1, serv_data_1}, \
{serv_id_2, serv_data_2}, \
{serv_id_3, serv_data_3}, \
{serv_id_4, serv_data_4}, \
{NULL, NULL} \
{ serv_id_1, serv_data_1 }, \
{ serv_id_2, serv_data_2 }, \
{ serv_id_3, serv_data_3 }, \
{ serv_id_4, serv_data_4 }, \
{ NULL, NULL } \
};
#define FT_DEFINE_SERVICEDESCREC5(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
serv_id_4, serv_data_4, serv_id_5, serv_data_5) \
#define FT_DEFINE_SERVICEDESCREC5( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3, \
serv_id_4, serv_data_4, \
serv_id_5, serv_data_5 ) \
static const FT_ServiceDescRec class_[] = \
{ \
{serv_id_1, serv_data_1}, \
{serv_id_2, serv_data_2}, \
{serv_id_3, serv_data_3}, \
{serv_id_4, serv_data_4}, \
{serv_id_5, serv_data_5}, \
{NULL, NULL} \
{ serv_id_1, serv_data_1 }, \
{ serv_id_2, serv_data_2 }, \
{ serv_id_3, serv_data_3 }, \
{ serv_id_4, serv_data_4 }, \
{ serv_id_5, serv_data_5 }, \
{ NULL, NULL } \
};
#define FT_DEFINE_SERVICEDESCREC6(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
serv_id_4, serv_data_4, serv_id_5, serv_data_5, \
serv_id_6, serv_data_6) \
#define FT_DEFINE_SERVICEDESCREC6( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3, \
serv_id_4, serv_data_4, \
serv_id_5, serv_data_5, \
serv_id_6, serv_data_6 ) \
static const FT_ServiceDescRec class_[] = \
{ \
{serv_id_1, serv_data_1}, \
{serv_id_2, serv_data_2}, \
{serv_id_3, serv_data_3}, \
{serv_id_4, serv_data_4}, \
{serv_id_5, serv_data_5}, \
{serv_id_6, serv_data_6}, \
{NULL, NULL} \
{ serv_id_1, serv_data_1 }, \
{ serv_id_2, serv_data_2 }, \
{ serv_id_3, serv_data_3 }, \
{ serv_id_4, serv_data_4 }, \
{ serv_id_5, serv_data_5 }, \
{ serv_id_6, serv_data_6 }, \
{ NULL, NULL } \
};
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \
#define FT_DEFINE_SERVICEDESCREC1( class_, \
serv_id_1, serv_data_1 ) \
void \
FT_Destroy_Class_##class_( FT_Library library, \
FT_Destroy_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec* clazz ) \
{ \
FT_Memory memory = library->memory; \
\
\
if ( clazz ) \
FT_FREE( clazz ); \
} \
\
FT_Error \
FT_Create_Class_##class_( FT_Library library, \
FT_ServiceDescRec** output_class) \
FT_Create_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec** output_class ) \
{ \
FT_ServiceDescRec* clazz; \
FT_Error error; \
FT_Memory memory = library->memory; \
\
if ( FT_ALLOC( clazz, sizeof(*clazz)*2 ) ) \
\
if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 2 ) ) \
return error; \
\
clazz[0].serv_id = serv_id_1; \
clazz[0].serv_data = serv_data_1; \
clazz[1].serv_id = NULL; \
clazz[1].serv_data = NULL; \
\
*output_class = clazz; \
\
return FT_Err_Ok; \
}
#define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2) \
#define FT_DEFINE_SERVICEDESCREC2( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2 ) \
void \
FT_Destroy_Class_##class_( FT_Library library, \
FT_Destroy_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec* clazz ) \
{ \
FT_Memory memory = library->memory; \
\
\
if ( clazz ) \
FT_FREE( clazz ); \
} \
\
FT_Error \
FT_Create_Class_##class_( FT_Library library, \
FT_ServiceDescRec** output_class) \
FT_Create_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec** output_class ) \
{ \
FT_ServiceDescRec* clazz; \
FT_Error error; \
FT_Memory memory = library->memory; \
\
if ( FT_ALLOC( clazz, sizeof(*clazz)*3 ) ) \
\
if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 3 ) ) \
return error; \
\
clazz[0].serv_id = serv_id_1; \
clazz[0].serv_data = serv_data_1; \
clazz[1].serv_id = serv_id_2; \
clazz[1].serv_data = serv_data_2; \
clazz[2].serv_id = NULL; \
clazz[2].serv_data = NULL; \
\
*output_class = clazz; \
\
return FT_Err_Ok; \
}
#define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3) \
#define FT_DEFINE_SERVICEDESCREC3( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3 ) \
void \
FT_Destroy_Class_##class_( FT_Library library, \
FT_Destroy_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec* clazz ) \
{ \
FT_Memory memory = library->memory; \
\
\
if ( clazz ) \
FT_FREE( clazz ); \
} \
\
FT_Error \
FT_Create_Class_##class_( FT_Library library, \
FT_ServiceDescRec** output_class) \
FT_Create_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec** output_class ) \
{ \
FT_ServiceDescRec* clazz; \
FT_Error error; \
FT_Memory memory = library->memory; \
\
if ( FT_ALLOC( clazz, sizeof(*clazz)*4 ) ) \
\
if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 4 ) ) \
return error; \
\
clazz[0].serv_id = serv_id_1; \
clazz[0].serv_data = serv_data_1; \
clazz[1].serv_id = serv_id_2; \
@ -336,32 +374,40 @@ FT_BEGIN_HEADER
clazz[2].serv_data = serv_data_3; \
clazz[3].serv_id = NULL; \
clazz[3].serv_data = NULL; \
\
*output_class = clazz; \
\
return FT_Err_Ok; \
}
#define FT_DEFINE_SERVICEDESCREC4(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
serv_id_4, serv_data_4) \
#define FT_DEFINE_SERVICEDESCREC4( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3, \
serv_id_4, serv_data_4 ) \
void \
FT_Destroy_Class_##class_( FT_Library library, \
FT_Destroy_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec* clazz ) \
{ \
FT_Memory memory = library->memory; \
\
\
if ( clazz ) \
FT_FREE( clazz ); \
} \
\
FT_Error \
FT_Create_Class_##class_( FT_Library library, \
FT_ServiceDescRec** output_class) \
FT_Create_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec** output_class ) \
{ \
FT_ServiceDescRec* clazz; \
FT_Error error; \
FT_Memory memory = library->memory; \
\
if ( FT_ALLOC( clazz, sizeof(*clazz)*5 ) ) \
\
if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 5 ) ) \
return error; \
\
clazz[0].serv_id = serv_id_1; \
clazz[0].serv_data = serv_data_1; \
clazz[1].serv_id = serv_id_2; \
@ -372,32 +418,41 @@ FT_BEGIN_HEADER
clazz[3].serv_data = serv_data_4; \
clazz[4].serv_id = NULL; \
clazz[4].serv_data = NULL; \
\
*output_class = clazz; \
\
return FT_Err_Ok; \
}
#define FT_DEFINE_SERVICEDESCREC5(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3, serv_id_4, \
serv_data_4, serv_id_5, serv_data_5) \
#define FT_DEFINE_SERVICEDESCREC5( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3, \
serv_id_4, serv_data_4, \
serv_id_5, serv_data_5 ) \
void \
FT_Destroy_Class_##class_( FT_Library library, \
FT_Destroy_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec* clazz ) \
{ \
FT_Memory memory = library->memory; \
\
\
if ( clazz ) \
FT_FREE( clazz ); \
} \
\
FT_Error \
FT_Create_Class_##class_( FT_Library library, \
FT_ServiceDescRec** output_class) \
FT_Create_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec** output_class ) \
{ \
FT_ServiceDescRec* clazz; \
FT_Error error; \
FT_Memory memory = library->memory; \
\
if ( FT_ALLOC( clazz, sizeof(*clazz)*6 ) ) \
\
if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 6 ) ) \
return error; \
\
clazz[0].serv_id = serv_id_1; \
clazz[0].serv_data = serv_data_1; \
clazz[1].serv_id = serv_id_2; \
@ -410,33 +465,42 @@ FT_BEGIN_HEADER
clazz[4].serv_data = serv_data_5; \
clazz[5].serv_id = NULL; \
clazz[5].serv_data = NULL; \
\
*output_class = clazz; \
\
return FT_Err_Ok; \
}
#define FT_DEFINE_SERVICEDESCREC6(class_, serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, serv_id_3, serv_data_3, \
serv_id_4, serv_data_4, serv_id_5, serv_data_5, \
serv_id_6, serv_data_6) \
#define FT_DEFINE_SERVICEDESCREC6( class_, \
serv_id_1, serv_data_1, \
serv_id_2, serv_data_2, \
serv_id_3, serv_data_3, \
serv_id_4, serv_data_4, \
serv_id_5, serv_data_5, \
serv_id_6, serv_data_6 ) \
void \
FT_Destroy_Class_##class_( FT_Library library, \
FT_Destroy_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec* clazz ) \
{ \
FT_Memory memory = library->memory; \
\
\
if ( clazz ) \
FT_FREE( clazz ); \
} \
\
FT_Error \
FT_Create_Class_##class_( FT_Library library, \
FT_Create_Class_ ## class_( FT_Library library, \
FT_ServiceDescRec** output_class) \
{ \
FT_ServiceDescRec* clazz; \
FT_Error error; \
FT_Memory memory = library->memory; \
\
if ( FT_ALLOC( clazz, sizeof(*clazz)*7 ) ) \
\
if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 7 ) ) \
return error; \
\
clazz[0].serv_id = serv_id_1; \
clazz[0].serv_data = serv_data_1; \
clazz[1].serv_id = serv_id_2; \
@ -451,11 +515,15 @@ FT_BEGIN_HEADER
clazz[5].serv_data = serv_data_6; \
clazz[6].serv_id = NULL; \
clazz[6].serv_data = NULL; \
\
*output_class = clazz; \
\
return FT_Err_Ok; \
}
#endif /* FT_CONFIG_OPTION_PIC */
/*
* Parse a list of FT_ServiceDescRec descriptors and look for
* a specific service by ID. Note that the last element in the

View file

@ -1,56 +0,0 @@
/* pcftypes.h
FreeType font driver for pcf fonts
Copyright (C) 2000, 2001, 2002 by
Francesco Zappa Nardelli
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef __PCFTYPES_H__
#define __PCFTYPES_H__
#include <ft2build.h>
#include FT_FREETYPE_H
FT_BEGIN_HEADER
typedef struct PCF_Public_FaceRec_
{
FT_FaceRec root;
FT_StreamRec gzip_stream;
FT_Stream gzip_source;
char* charset_encoding;
char* charset_registry;
} PCF_Public_FaceRec, *PCF_Public_Face;
FT_END_HEADER
#endif /* __PCFTYPES_H__ */
/* END */

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType BDF services (specification). */
/* */
/* Copyright 2003 by */
/* Copyright 2003, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -45,9 +45,12 @@ FT_BEGIN_HEADER
FT_BDF_GetPropertyFunc get_property;
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_BDFRec(class_, get_charset_id_, get_property_) \
#define FT_DEFINE_SERVICE_BDFRec( class_, \
get_charset_id_, \
get_property_ ) \
static const FT_Service_BDFRec class_ = \
{ \
get_charset_id_, get_property_ \
@ -55,9 +58,11 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_BDFRec(class_, get_charset_id_, get_property_) \
#define FT_DEFINE_SERVICE_BDFRec( class_, \
get_charset_id_, \
get_property_ ) \
void \
FT_Init_Class_##class_( FT_Service_BDFRec* clazz ) \
FT_Init_Class_ ## class_( FT_Service_BDFRec* clazz ) \
{ \
clazz->get_charset_id = get_charset_id_; \
clazz->get_property = get_property_; \

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType CID font services (specification). */
/* */
/* Copyright 2007, 2009 by Derek Clegg, Michael Toftdal. */
/* Copyright 2007, 2009, 2012 by Derek Clegg, Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@ -46,10 +46,13 @@ FT_BEGIN_HEADER
FT_CID_GetCIDFromGlyphIndexFunc get_cid_from_glyph_index;
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_CIDREC(class_, get_ros_, \
get_is_cid_, get_cid_from_glyph_index_ ) \
#define FT_DEFINE_SERVICE_CIDREC( class_, \
get_ros_, \
get_is_cid_, \
get_cid_from_glyph_index_ ) \
static const FT_Service_CIDRec class_ = \
{ \
get_ros_, get_is_cid_, get_cid_from_glyph_index_ \
@ -57,13 +60,16 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_CIDREC(class_, get_ros_, \
get_is_cid_, get_cid_from_glyph_index_ ) \
#define FT_DEFINE_SERVICE_CIDREC( class_, \
get_ros_, \
get_is_cid_, \
get_cid_from_glyph_index_ ) \
void \
FT_Init_Class_##class_( FT_Library library, \
FT_Service_CIDRec* clazz) \
FT_Init_Class_ ## class_( FT_Library library, \
FT_Service_CIDRec* clazz ) \
{ \
FT_UNUSED(library); \
FT_UNUSED( library ); \
\
clazz->get_ros = get_ros_; \
clazz->get_is_cid = get_is_cid_; \
clazz->get_cid_from_glyph_index = get_cid_from_glyph_index_; \

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType glyph dictionary services (specification). */
/* */
/* Copyright 2003 by */
/* Copyright 2003, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -51,9 +51,12 @@ FT_BEGIN_HEADER
FT_GlyphDict_NameIndexFunc name_index; /* optional */
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_GLYPHDICTREC(class_, get_name_, name_index_) \
#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
get_name_, \
name_index_) \
static const FT_Service_GlyphDictRec class_ = \
{ \
get_name_, name_index_ \
@ -61,12 +64,15 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_GLYPHDICTREC(class_, get_name_, name_index_) \
#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
get_name_, \
name_index_) \
void \
FT_Init_Class_##class_( FT_Library library, \
FT_Service_GlyphDictRec* clazz) \
FT_Init_Class_ ## class_( FT_Library library, \
FT_Service_GlyphDictRec* clazz ) \
{ \
FT_UNUSED(library); \
FT_UNUSED( library ); \
\
clazz->get_name = get_name_; \
clazz->name_index = name_index_; \
}

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType Multiple Masters and GX var services (specification). */
/* */
/* Copyright 2003, 2004 by */
/* Copyright 2003, 2004, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -68,10 +68,15 @@ FT_BEGIN_HEADER
FT_Set_Var_Design_Func set_var_design;
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_MULTIMASTERSREC(class_, get_mm_, set_mm_design_, \
set_mm_blend_, get_mm_var_, set_var_design_) \
#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
get_mm_, \
set_mm_design_, \
set_mm_blend_, \
get_mm_var_, \
set_var_design_ ) \
static const FT_Service_MultiMastersRec class_ = \
{ \
get_mm_, set_mm_design_, set_mm_blend_, get_mm_var_, set_var_design_ \
@ -79,10 +84,14 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_MULTIMASTERSREC(class_, get_mm_, set_mm_design_, \
set_mm_blend_, get_mm_var_, set_var_design_) \
#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
get_mm_, \
set_mm_design_, \
set_mm_blend_, \
get_mm_var_, \
set_var_design_ ) \
void \
FT_Init_Class_##class_( FT_Service_MultiMastersRec* clazz ) \
FT_Init_Class_ ## class_( FT_Service_MultiMastersRec* clazz ) \
{ \
clazz->get_mm = get_mm_; \
clazz->set_mm_design = set_mm_design_; \

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript name services (specification). */
/* */
/* Copyright 2003, 2007 by */
/* Copyright 2003, 2007, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -46,9 +46,10 @@ FT_BEGIN_HEADER
FT_PsName_GetFunc get_ps_font_name;
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_PSFONTNAMEREC(class_, get_ps_font_name_) \
#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
static const FT_Service_PsFontNameRec class_ = \
{ \
get_ps_font_name_ \
@ -56,12 +57,13 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_PSFONTNAMEREC(class_, get_ps_font_name_) \
#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
void \
FT_Init_Class_##class_( FT_Library library, \
FT_Service_PsFontNameRec* clazz) \
FT_Init_Class_ ## class_( FT_Library library, \
FT_Service_PsFontNameRec* clazz ) \
{ \
FT_UNUSED(library); \
FT_UNUSED( library ); \
\
clazz->get_ps_font_name = get_ps_font_name_; \
}

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript charmap service (specification). */
/* */
/* Copyright 2003, 2006 by */
/* Copyright 2003, 2006, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -120,9 +120,15 @@ FT_BEGIN_HEADER
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_PSCMAPSREC(class_, unicode_value_, unicodes_init_, \
unicodes_char_index_, unicodes_char_next_, macintosh_name_, \
adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_) \
#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
unicode_value_, \
unicodes_init_, \
unicodes_char_index_, \
unicodes_char_next_, \
macintosh_name_, \
adobe_std_strings_, \
adobe_std_encoding_, \
adobe_expert_encoding_ ) \
static const FT_Service_PsCMapsRec class_ = \
{ \
unicode_value_, unicodes_init_, \
@ -132,14 +138,21 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_PSCMAPSREC(class_, unicode_value_, unicodes_init_, \
unicodes_char_index_, unicodes_char_next_, macintosh_name_, \
adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_) \
#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
unicode_value_, \
unicodes_init_, \
unicodes_char_index_, \
unicodes_char_next_, \
macintosh_name_, \
adobe_std_strings_, \
adobe_std_encoding_, \
adobe_expert_encoding_ ) \
void \
FT_Init_Class_##class_( FT_Library library, \
FT_Service_PsCMapsRec* clazz) \
FT_Init_Class_ ## class_( FT_Library library, \
FT_Service_PsCMapsRec* clazz ) \
{ \
FT_UNUSED(library); \
FT_UNUSED( library ); \
\
clazz->unicode_value = unicode_value_; \
clazz->unicodes_init = unicodes_init_; \
clazz->unicodes_char_index = unicodes_char_index_; \

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript info service (specification). */
/* */
/* Copyright 2003, 2004, 2009, 2011 by */
/* Copyright 2003, 2004, 2009, 2011, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -61,11 +61,15 @@ FT_BEGIN_HEADER
PS_GetFontValueFunc ps_get_font_value;
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_PSINFOREC(class_, get_font_info_, \
ps_get_font_extra_, has_glyph_names_, get_font_private_, \
get_font_value_) \
#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
get_font_info_, \
ps_get_font_extra_, \
has_glyph_names_, \
get_font_private_, \
get_font_value_ ) \
static const FT_Service_PsInfoRec class_ = \
{ \
get_font_info_, ps_get_font_extra_, has_glyph_names_, \
@ -74,14 +78,18 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_PSINFOREC(class_, get_font_info_, \
ps_get_font_extra_, has_glyph_names_, get_font_private_, \
get_font_value_) \
#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
get_font_info_, \
ps_get_font_extra_, \
has_glyph_names_, \
get_font_private_, \
get_font_value_ ) \
void \
FT_Init_Class_##class_( FT_Library library, \
FT_Service_PsInfoRec* clazz) \
FT_Init_Class_ ## class_( FT_Library library, \
FT_Service_PsInfoRec* clazz ) \
{ \
FT_UNUSED(library); \
FT_UNUSED( library ); \
\
clazz->ps_get_font_info = get_font_info_; \
clazz->ps_get_font_extra = ps_get_font_extra_; \
clazz->ps_has_glyph_names = has_glyph_names_; \

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType SFNT table loading service (specification). */
/* */
/* Copyright 2003, 2004 by */
/* Copyright 2003, 2004, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -69,9 +69,10 @@ FT_BEGIN_HEADER
FT_SFNT_TableInfoFunc table_info;
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_SFNT_TABLEREC(class_, load_, get_, info_) \
#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
static const FT_Service_SFNT_TableRec class_ = \
{ \
load_, get_, info_ \
@ -79,9 +80,9 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_SFNT_TABLEREC(class_, load_, get_, info_) \
#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
void \
FT_Init_Class_##class_( FT_Service_SFNT_TableRec* clazz ) \
FT_Init_Class_ ## class_( FT_Service_SFNT_TableRec* clazz ) \
{ \
clazz->load_table = load_; \
clazz->get_table = get_; \

View file

@ -7,7 +7,7 @@
/* Copyright 2003 by */
/* Masatake YAMATO, Redhat K.K. */
/* */
/* Copyright 2003, 2008 by */
/* Copyright 2003, 2008, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -76,7 +76,7 @@ FT_BEGIN_HEADER
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_TTCMAPSREC(class_, get_cmap_info_) \
#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
static const FT_Service_TTCMapsRec class_ = \
{ \
get_cmap_info_ \
@ -84,12 +84,13 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_TTCMAPSREC(class_, get_cmap_info_) \
#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
void \
FT_Init_Class_##class_( FT_Library library, \
FT_Service_TTCMapsRec* clazz) \
FT_Init_Class_ ## class_( FT_Library library, \
FT_Service_TTCMapsRec* clazz ) \
{ \
FT_UNUSED(library); \
FT_UNUSED( library ); \
\
clazz->get_cmap_info = get_cmap_info_; \
}

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType TrueType glyph service. */
/* */
/* Copyright 2007 by David Turner. */
/* Copyright 2007, 2009, 2012 by David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@ -37,9 +37,10 @@ FT_BEGIN_HEADER
TT_Glyf_GetLocationFunc get_location;
};
#ifndef FT_CONFIG_OPTION_PIC
#define FT_DEFINE_SERVICE_TTGLYFREC(class_, get_location_ ) \
#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
static const FT_Service_TTGlyfRec class_ = \
{ \
get_location_ \
@ -47,9 +48,9 @@ FT_BEGIN_HEADER
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICE_TTGLYFREC(class_, get_location_ ) \
#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
void \
FT_Init_Class_##class_( FT_Service_TTGlyfRec* clazz ) \
FT_Init_Class_ ## class_( FT_Service_TTGlyfRec* clazz ) \
{ \
clazz->get_location = get_location_; \
}

View file

@ -570,7 +570,7 @@ FT_BEGIN_HEADER
PS_DICT_NOTICE, /* FT_String* */
PS_DICT_FULL_NAME, /* FT_String* */
PS_DICT_FAMILY_NAME, /* FT_String* */
PS_DICT_WEIGHT, /* FT_String */
PS_DICT_WEIGHT, /* FT_String* */
PS_DICT_IS_FIXED_PITCH, /* FT_Bool */
PS_DICT_UNDERLINE_POSITION, /* FT_Short */
PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */

View file

@ -1,6 +1,6 @@
# modules.cfg
#
# Copyright 2005, 2006, 2007, 2009, 2010 by
# Copyright 2005-2007, 2009-2011 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@ -54,7 +54,7 @@ FONT_MODULES += pfr
# PostScript Type 42 font driver.
#
# This driver needs the `truetype' module.
# This driver needs the `truetype' and `psaux' modules.
FONT_MODULES += type42
# Windows FONT/FNT font driver. See optional extension ftwinfnt.c below

View file

@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for CJK script (body). */
/* */
/* Copyright 2006-2011 by */
/* Copyright 2006-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -1610,7 +1610,7 @@
goto Exit;
}
offset = cur_len % 64;
offset = cur_len & 63;
if ( offset < 32 )
{
@ -2225,11 +2225,11 @@
};
AF_DEFINE_SCRIPT_CLASS(af_cjk_script_class,
AF_DEFINE_SCRIPT_CLASS( af_cjk_script_class,
AF_SCRIPT_CJK,
af_cjk_uniranges,
sizeof( AF_CJKMetricsRec ),
sizeof ( AF_CJKMetricsRec ),
(AF_Script_InitMetricsFunc) af_cjk_metrics_init,
(AF_Script_ScaleMetricsFunc)af_cjk_metrics_scale,
@ -2247,11 +2247,11 @@
};
AF_DEFINE_SCRIPT_CLASS(af_cjk_script_class,
AF_DEFINE_SCRIPT_CLASS( af_cjk_script_class,
AF_SCRIPT_CJK,
af_cjk_uniranges,
sizeof( AF_CJKMetricsRec ),
sizeof ( AF_CJKMetricsRec ),
(AF_Script_InitMetricsFunc) NULL,
(AF_Script_ScaleMetricsFunc)NULL,

View file

@ -47,7 +47,7 @@
AF_SCRIPT_NONE,
NULL,
sizeof( AF_ScriptMetricsRec ),
sizeof ( AF_ScriptMetricsRec ),
(AF_Script_InitMetricsFunc) NULL,
(AF_Script_ScaleMetricsFunc)NULL,

View file

@ -4,7 +4,7 @@
/* */
/* Autofitter error codes (specification only). */
/* */
/* Copyright 2005 by */
/* Copyright 2005, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -30,6 +30,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX AF_Err_
#define FT_ERR_BASE FT_Mod_Err_Autofit

View file

@ -113,11 +113,11 @@
};
AF_DEFINE_SCRIPT_CLASS(af_indic_script_class,
AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
AF_SCRIPT_INDIC,
af_indic_uniranges,
sizeof( AF_CJKMetricsRec ),
sizeof ( AF_CJKMetricsRec ),
(AF_Script_InitMetricsFunc) af_indic_metrics_init,
(AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
@ -135,11 +135,11 @@
};
AF_DEFINE_SCRIPT_CLASS(af_indic_script_class,
AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
AF_SCRIPT_INDIC,
af_indic_uniranges,
sizeof( AF_CJKMetricsRec ),
sizeof ( AF_CJKMetricsRec ),
(AF_Script_InitMetricsFunc) NULL,
(AF_Script_ScaleMetricsFunc)NULL,

View file

@ -2341,11 +2341,11 @@
};
AF_DEFINE_SCRIPT_CLASS(af_latin_script_class,
AF_DEFINE_SCRIPT_CLASS( af_latin_script_class,
AF_SCRIPT_LATIN,
af_latin_uniranges,
sizeof( AF_LatinMetricsRec ),
sizeof ( AF_LatinMetricsRec ),
(AF_Script_InitMetricsFunc) af_latin_metrics_init,
(AF_Script_ScaleMetricsFunc)af_latin_metrics_scale,

View file

@ -133,7 +133,7 @@
dist = -dist;
if ( num_widths < AF_LATIN_MAX_WIDTHS )
axis->widths[ num_widths++ ].org = dist;
axis->widths[num_widths++].org = dist;
}
}
@ -1359,10 +1359,10 @@
af_latin2_hints_compute_blue_edges( AF_GlyphHints hints,
AF_LatinMetrics metrics )
{
AF_AxisHints axis = &hints->axis[ AF_DIMENSION_VERT ];
AF_AxisHints axis = &hints->axis[AF_DIMENSION_VERT];
AF_Edge edge = axis->edges;
AF_Edge edge_limit = edge + axis->num_edges;
AF_LatinAxis latin = &metrics->axis[ AF_DIMENSION_VERT ];
AF_LatinAxis latin = &metrics->axis[AF_DIMENSION_VERT];
FT_Fixed scale = latin->scale;
FT_Pos best_dist0; /* initial threshold */
@ -2356,11 +2356,11 @@
};
AF_DEFINE_SCRIPT_CLASS(af_latin2_script_class,
AF_DEFINE_SCRIPT_CLASS( af_latin2_script_class,
AF_SCRIPT_LATIN2,
af_latin2_uniranges,
sizeof( AF_LatinMetricsRec ),
sizeof ( AF_LatinMetricsRec ),
(AF_Script_InitMetricsFunc) af_latin2_metrics_init,
(AF_Script_ScaleMetricsFunc)af_latin2_metrics_scale,

View file

@ -4,7 +4,7 @@
/* */
/* Auto-fitter glyph loading routines (body). */
/* */
/* Copyright 2003-2009, 2011 by */
/* Copyright 2003-2009, 2011-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -433,9 +433,10 @@
slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
x_scale );
#else
if ( FT_IS_FIXED_WIDTH( slot->face ) ||
if ( scaler->render_mode != FT_RENDER_MODE_LIGHT &&
( FT_IS_FIXED_WIDTH( slot->face ) ||
( af_face_globals_is_digit( loader->globals, glyph_index ) &&
metrics->digits_have_same_width ) )
metrics->digits_have_same_width ) ) )
{
slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
metrics->scaler.x_scale );
@ -465,7 +466,13 @@
if ( error )
goto Exit;
slot->outline = internal->loader->base.outline;
/* reassign all outline fields except flags to protect them */
slot->outline.n_contours = internal->loader->base.outline.n_contours;
slot->outline.n_points = internal->loader->base.outline.n_points;
slot->outline.points = internal->loader->base.outline.points;
slot->outline.tags = internal->loader->base.outline.tags;
slot->outline.contours = internal->loader->base.outline.contours;
slot->format = FT_GLYPH_FORMAT_OUTLINE;
}
@ -480,7 +487,7 @@
af_loader_load_glyph( AF_Loader loader,
FT_Face face,
FT_UInt gindex,
FT_UInt32 load_flags )
FT_Int32 load_flags )
{
FT_Error error;
FT_Size size = face->size;

View file

@ -4,7 +4,7 @@
/* */
/* Auto-fitter glyph loading routines (specification). */
/* */
/* Copyright 2003-2005, 2011 by */
/* Copyright 2003-2005, 2011-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -60,7 +60,7 @@ FT_BEGIN_HEADER
af_loader_load_glyph( AF_Loader loader,
FT_Face face,
FT_UInt gindex,
FT_UInt32 load_flags );
FT_Int32 load_flags );
/* */

View file

@ -20,16 +20,20 @@
#include FT_FREETYPE_H
#include FT_INTERNAL_OBJECTS_H
#include "afpic.h"
#include "aferrors.h"
#ifdef FT_CONFIG_OPTION_PIC
/* forward declaration of PIC init functions from afmodule.c */
void FT_Init_Class_af_autofitter_service( FT_Library,
FT_AutoHinter_ServiceRec* );
void FT_Init_Class_af_autofitter_service(
FT_Library library,
FT_AutoHinter_ServiceRec* clazz );
/* forward declaration of PIC init functions from script classes */
#include "aflatin.h"
#ifdef FT_OPTION_AUTOFIT2
#include "aflatin2.h"
#endif
#include "afcjk.h"
#include "afdummy.h"
#include "afindic.h"

View file

@ -57,6 +57,13 @@ FT_BEGIN_HEADER
#define AF_AF_AUTOFITTER_SERVICE_GET \
( GET_PIC( library )->af_autofitter_service )
/* see afpic.c for the implementation */
void
autofit_module_class_pic_free( FT_Library library );
FT_Error
autofit_module_class_pic_init( FT_Library library );
#endif /* FT_CONFIG_OPTION_PIC */
/* */

View file

@ -24,12 +24,18 @@
#ifdef FT_CONFIG_OPTION_PIC
/* forward declaration of PIC init functions from ftglyph.c */
void FT_Init_Class_ft_outline_glyph_class(FT_Glyph_Class*);
void FT_Init_Class_ft_bitmap_glyph_class(FT_Glyph_Class*);
void FT_Init_Class_ft_outline_glyph_class( FT_Glyph_Class* clazz );
void FT_Init_Class_ft_bitmap_glyph_class( FT_Glyph_Class* clazz );
/* forward declaration of PIC init function from ftrfork.c (not modularized) */
void FT_Init_Table_raccess_guess_table( ft_raccess_guess_rec* record );
/* forward declaration of PIC init functions from ftinit.c */
FT_Error ft_create_default_module_classes(FT_Library);
void ft_destroy_default_module_classes(FT_Library);
FT_Error
ft_create_default_module_classes( FT_Library library );
void
ft_destroy_default_module_classes( FT_Library library );
void
ft_base_pic_free( FT_Library library )
@ -58,7 +64,7 @@
/* allocate pointer, clear and set global container pointer */
if ( FT_ALLOC ( container, sizeof ( *container ) ) )
return error;
FT_MEM_SET( container, 0, sizeof(*container) );
FT_MEM_SET( container, 0, sizeof ( *container ) );
pic_container->base = container;
/* initialize default modules list and pointers */
@ -67,12 +73,16 @@
goto Exit;
/* initialize pointer table - this is how the module usually expects this data */
FT_Init_Class_ft_outline_glyph_class(&container->ft_outline_glyph_class);
FT_Init_Class_ft_bitmap_glyph_class(&container->ft_bitmap_glyph_class);
FT_Init_Class_ft_outline_glyph_class(
&container->ft_outline_glyph_class );
FT_Init_Class_ft_bitmap_glyph_class(
&container->ft_bitmap_glyph_class );
FT_Init_Table_raccess_guess_table(
(ft_raccess_guess_rec*)&container->ft_raccess_guess_table);
Exit:
if(error)
ft_base_pic_free(library);
if( error )
ft_base_pic_free( library );
return error;
}

View file

@ -28,23 +28,38 @@ FT_BEGIN_HEADER
#define FT_OUTLINE_GLYPH_CLASS_GET &ft_outline_glyph_class
#define FT_BITMAP_GLYPH_CLASS_GET &ft_bitmap_glyph_class
#define FT_DEFAULT_MODULES_GET ft_default_modules
#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
#define FT_RACCESS_GUESS_TABLE_GET ft_raccess_guess_table
#endif
#else /* FT_CONFIG_OPTION_PIC */
#include FT_GLYPH_H
#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
#include FT_INTERNAL_RFORK_H
#endif
typedef struct BasePIC_
{
FT_Module_Class** default_module_classes;
FT_Glyph_Class ft_outline_glyph_class;
FT_Glyph_Class ft_bitmap_glyph_class;
#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
ft_raccess_guess_rec ft_raccess_guess_table[FT_RACCESS_N_RULES];
#endif
} BasePIC;
#define GET_PIC(lib) ((BasePIC*)((lib)->pic_container.base))
#define FT_OUTLINE_GLYPH_CLASS_GET (&GET_PIC(library)->ft_outline_glyph_class)
#define FT_BITMAP_GLYPH_CLASS_GET (&GET_PIC(library)->ft_bitmap_glyph_class)
#define FT_DEFAULT_MODULES_GET (GET_PIC(library)->default_module_classes)
#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
#define FT_RACCESS_GUESS_TABLE_GET (GET_PIC(library)->ft_raccess_guess_table)
#endif
/* see basepic.c for the implementation. */
void
ft_base_pic_free( FT_Library library );

View file

@ -4,7 +4,7 @@
/* */
/* Quick computation of advance widths (body). */
/* */
/* Copyright 2008, 2009 by */
/* Copyright 2008, 2009, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -129,7 +129,7 @@
{
error = func( face, start, count, flags, padvances );
if ( !error )
goto Exit;
return _ft_face_scale_advances( face, padvances, count, flags );
if ( error != FT_ERROR_BASE( FT_Err_Unimplemented_Feature ) )
return error;
@ -147,16 +147,13 @@
if ( error )
break;
/* scale from 26.6 to 16.16 */
padvances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT )
? face->glyph->advance.y
: face->glyph->advance.x;
? face->glyph->advance.y << 10
: face->glyph->advance.x << 10;
}
if ( error )
return error;
Exit:
return _ft_face_scale_advances( face, padvances, count, flags );
}

View file

@ -34,7 +34,7 @@
#include "fttrigon.c"
#include "ftutil.c"
#if defined( FT_MACINTOSH ) && !defined ( DARWIN_NO_CARBON )
#ifdef FT_MACINTOSH
#include "ftmac.c"
#endif

View file

@ -50,14 +50,14 @@ FT_BEGIN_HEADER
#if defined( FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK ) && \
( !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON ) )
!defined( FT_MACINTOSH )
/* Mac OS X/Darwin kernel often changes recommended method to access */
/* the resource fork and older methods makes the kernel issue the */
/* warning of deprecated method. To calm it down, the methods based */
/* on Darwin VFS should be grouped and skip the rest methods after */
/* the case the resource is opened but found to lack a font in it. */
FT_LOCAL( FT_Bool )
raccess_rule_by_darwin_vfs( FT_UInt rule_index );
ft_raccess_rule_by_darwin_vfs( FT_Library library, FT_UInt rule_index );
#endif

View file

@ -4,7 +4,7 @@
/* */
/* Arithmetic computations (body). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008 by */
/* Copyright 1996-2006, 2008, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -307,7 +307,7 @@
q <<= 1;
r |= lo >> 31;
if ( r >= (FT_UInt32)y )
if ( r >= y )
{
r -= y;
q |= 1;
@ -373,7 +373,7 @@
if ( a <= 46340L && b <= 46340L && c <= 176095L && c > 0 )
a = ( a * b + ( c >> 1 ) ) / c;
else if ( c > 0 )
else if ( (FT_Int32)c > 0 )
{
FT_Int64 temp, temp2;
@ -412,7 +412,7 @@
if ( a <= 46340L && b <= 46340L && c > 0 )
a = a * b / c;
else if ( c > 0 )
else if ( (FT_Int32)c > 0 )
{
FT_Int64 temp;
@ -544,7 +544,7 @@
s = (FT_Int32)a; a = FT_ABS( a );
s ^= (FT_Int32)b; b = FT_ABS( b );
if ( b == 0 )
if ( (FT_UInt32)b == 0 )
{
/* check for division by 0 */
q = (FT_UInt32)0x7FFFFFFFL;
@ -552,15 +552,16 @@
else if ( ( a >> 16 ) == 0 )
{
/* compute result directly */
q = (FT_UInt32)( (a << 16) + (b >> 1) ) / (FT_UInt32)b;
q = (FT_UInt32)( ( a << 16 ) + ( b >> 1 ) ) / (FT_UInt32)b;
}
else
{
/* we need more bits; we have to do it by hand */
FT_Int64 temp, temp2;
temp.hi = (FT_Int32) (a >> 16);
temp.lo = (FT_UInt32)(a << 16);
temp.hi = (FT_Int32) ( a >> 16 );
temp.lo = (FT_UInt32)( a << 16 );
temp2.hi = 0;
temp2.lo = (FT_UInt32)( b >> 1 );
FT_Add64( &temp, &temp2, &temp );

View file

@ -512,42 +512,42 @@
FT_Error error = FT_Err_Ok;
FT_Glyph glyph;
FT_BitmapGlyph bitmap = NULL;
const FT_Glyph_Class* clazz;
#ifdef FT_CONFIG_OPTION_PIC
FT_Library library = FT_GLYPH( glyph )->library;
#endif
/* FT_BITMAP_GLYPH_CLASS_GET derefers `library' in PIC mode */
FT_Library library;
/* check argument */
if ( !the_glyph )
goto Bad;
/* we render the glyph into a glyph bitmap using a `dummy' glyph slot */
/* then calling FT_Render_Glyph_Internal() */
glyph = *the_glyph;
if ( !glyph )
goto Bad;
clazz = glyph->clazz;
library = glyph->library;
if ( !library || !clazz )
goto Bad;
/* when called with a bitmap glyph, do nothing and return successfully */
if ( clazz == FT_BITMAP_GLYPH_CLASS_GET )
goto Exit;
if ( !clazz || !clazz->glyph_prepare )
if ( !clazz->glyph_prepare )
goto Bad;
/* we render the glyph into a glyph bitmap using a `dummy' glyph slot */
/* then calling FT_Render_Glyph_Internal() */
FT_MEM_ZERO( &dummy, sizeof ( dummy ) );
FT_MEM_ZERO( &dummy_internal, sizeof ( dummy_internal ) );
dummy.internal = &dummy_internal;
dummy.library = glyph->library;
dummy.library = library;
dummy.format = clazz->glyph_format;
/* create result bitmap glyph */
error = ft_new_glyph( glyph->library, FT_BITMAP_GLYPH_CLASS_GET,
error = ft_new_glyph( library, FT_BITMAP_GLYPH_CLASS_GET,
(FT_Glyph*)(void*)&bitmap );
if ( error )
goto Exit;

View file

@ -4,7 +4,7 @@
/* */
/* FreeType initialization layer (body). */
/* */
/* Copyright 1996-2001, 2002, 2005, 2007, 2009 by */
/* Copyright 1996-2001, 2002, 2005, 2007, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -54,8 +54,10 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_init
#ifndef FT_CONFIG_OPTION_PIC
#undef FT_USE_MODULE
#ifdef __cplusplus
#define FT_USE_MODULE( type, x ) extern "C" const type x;
@ -63,10 +65,8 @@
#define FT_USE_MODULE( type, x ) extern const type x;
#endif
#include FT_CONFIG_MODULES_H
#undef FT_USE_MODULE
#define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x),
@ -77,8 +77,10 @@
0
};
#else /* FT_CONFIG_OPTION_PIC */
#ifdef __cplusplus
#define FT_EXTERNC extern "C"
#else
@ -88,15 +90,18 @@
/* declare the module's class creation/destruction functions */
#undef FT_USE_MODULE
#define FT_USE_MODULE( type, x ) \
FT_EXTERNC FT_Error FT_Create_Class_##x( FT_Library library, FT_Module_Class** output_class ); \
FT_EXTERNC void FT_Destroy_Class_##x( FT_Library library, FT_Module_Class* clazz );
FT_EXTERNC FT_Error \
FT_Create_Class_ ## x( FT_Library library, \
FT_Module_Class* *output_class ); \
FT_EXTERNC void \
FT_Destroy_Class_ ## x( FT_Library library, \
FT_Module_Class* clazz );
#include FT_CONFIG_MODULES_H
/* count all module classes */
#undef FT_USE_MODULE
#define FT_USE_MODULE( type, x ) MODULE_CLASS_##x,
#define FT_USE_MODULE( type, x ) MODULE_CLASS_ ## x,
enum
{
@ -107,17 +112,22 @@
/* destroy all module classes */
#undef FT_USE_MODULE
#define FT_USE_MODULE( type, x ) \
if ( classes[i] ) { FT_Destroy_Class_##x(library, classes[i]); } \
i++; \
if ( classes[i] ) \
{ \
FT_Destroy_Class_ ## x( library, classes[i] ); \
} \
i++;
FT_BASE_DEF( void )
ft_destroy_default_module_classes( FT_Library library )
{
FT_Module_Class** classes;
FT_Module_Class* *classes;
FT_Memory memory;
FT_UInt i;
BasePIC* pic_container = (BasePIC*)library->pic_container.base;
if ( !pic_container->default_module_classes )
return;
@ -131,30 +141,37 @@
pic_container->default_module_classes = 0;
}
/* initialize all module classes and the pointer table */
#undef FT_USE_MODULE
#define FT_USE_MODULE( type, x ) \
error = FT_Create_Class_##x(library, &clazz); \
if (error) goto Exit; \
error = FT_Create_Class_ ## x( library, &clazz ); \
if ( error ) \
goto Exit; \
classes[i++] = clazz;
FT_BASE_DEF( FT_Error )
ft_create_default_module_classes( FT_Library library )
{
FT_Error error;
FT_Memory memory;
FT_Module_Class** classes;
FT_Module_Class* *classes;
FT_Module_Class* clazz;
FT_UInt i;
BasePIC* pic_container = (BasePIC*)library->pic_container.base;
memory = library->memory;
pic_container->default_module_classes = 0;
if ( FT_ALLOC(classes, sizeof(FT_Module_Class*) * (FT_NUM_MODULE_CLASSES + 1) ) )
if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) *
( FT_NUM_MODULE_CLASSES + 1 ) ) )
return error;
/* initialize all pointers to 0, especially the last one */
for (i = 0; i < FT_NUM_MODULE_CLASSES; i++)
for ( i = 0; i < FT_NUM_MODULE_CLASSES; i++ )
classes[i] = 0;
classes[FT_NUM_MODULE_CLASSES] = 0;
@ -162,9 +179,11 @@
#include FT_CONFIG_MODULES_H
Exit:
if (error) ft_destroy_default_module_classes( library );
else pic_container->default_module_classes = classes;
Exit:
if ( error )
ft_destroy_default_module_classes( library );
else
pic_container->default_module_classes = classes;
return error;
}
@ -172,6 +191,7 @@ Exit:
#endif /* FT_CONFIG_OPTION_PIC */
/* documentation is in ftmodapi.h */
FT_EXPORT_DEF( void )
@ -181,9 +201,18 @@ Exit:
const FT_Module_Class* const* cur;
/* test for valid `library' delayed to FT_Add_Module() */
/* FT_DEFAULT_MODULES_GET dereferences `library' in PIC mode */
#ifdef FT_CONFIG_OPTION_PIC
if ( !library )
return;
#endif
cur = FT_DEFAULT_MODULES_GET;
/* GCC 4.6 warns the type difference:
* FT_Module_Class** != const FT_Module_Class* const*
*/
cur = (const FT_Module_Class* const*)FT_DEFAULT_MODULES_GET;
/* test for valid `library' delayed to FT_Add_Module() */
while ( *cur )
{
error = FT_Add_Module( library, *cur );

View file

@ -119,6 +119,8 @@
#endif
#ifdef FT_MACINTOSH
/* This function is deprecated because FSSpec is deprecated in Mac OS X */
FT_EXPORT_DEF( FT_Error )
FT_GetFile_From_Mac_Name( const char* fontName,
@ -1053,5 +1055,7 @@
#endif
}
#endif /* FT_MACINTOSH */
/* END */

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType private base classes (body). */
/* */
/* Copyright 1996-2011 by */
/* Copyright 1996-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -445,6 +445,10 @@
else
prev->next = cur->next;
/* finalize client-specific data */
if ( slot->generic.finalizer )
slot->generic.finalizer( slot );
ft_glyphslot_done( slot );
FT_FREE( slot );
break;
@ -1187,7 +1191,7 @@
/* there's a Mac-specific extended implementation of FT_New_Face() */
/* in src/base/ftmac.c */
#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON )
#ifndef FT_MACINTOSH
/* documentation is in freetype.h */
@ -1211,7 +1215,7 @@
return FT_Open_Face( library, &args, face_index, aface );
}
#endif /* defined( FT_MACINTOSH ) && !defined( DARWIN_NO_CARBON ) */
#endif
/* documentation is in freetype.h */
@ -1520,7 +1524,7 @@
}
#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON )
#ifndef FT_MACINTOSH
/* The resource header says we've got resource_cnt `POST' (type1) */
/* resources in this file. They all need to be coalesced into */
@ -1875,7 +1879,7 @@
for ( i = 0; i < FT_RACCESS_N_RULES; i++ )
{
is_darwin_vfs = raccess_rule_by_darwin_vfs( i );
is_darwin_vfs = ft_raccess_rule_by_darwin_vfs( library, i );
if ( is_darwin_vfs && vfs_rfork_has_no_font )
{
FT_TRACE3(( "Skip rule %d: darwin vfs resource fork"
@ -4098,10 +4102,6 @@
FT_Library library = module->library;
/* finalize client-data - before anything else */
if ( module->generic.finalizer )
module->generic.finalizer( module );
if ( library && library->auto_hinter == module )
library->auto_hinter = 0;
@ -4318,6 +4318,7 @@
FT_Module* cur = library->modules;
FT_Module* limit = cur + library->num_modules;
for ( ; cur < limit; cur++ )
{
if ( cur[0] != module )
@ -4511,10 +4512,6 @@
memory = library->memory;
/* Discard client-data */
if ( library->generic.finalizer )
library->generic.finalizer( library );
/*
* Close all faces in the library. If we don't do this, we can have
* some subtle memory leaks.

View file

@ -4,7 +4,7 @@
/* */
/* FreeType outline management (body). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 by */
/* Copyright 1996-2008, 2010, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -771,7 +771,7 @@
return 1;
}
return ( n % 2 );
return n & 1;
}

View file

@ -31,10 +31,10 @@
FT_PIC_Container* pic_container = &library->pic_container;
FT_Error error = FT_Err_Ok;
FT_MEM_SET( pic_container, 0, sizeof(*pic_container) );
FT_MEM_SET( pic_container, 0, sizeof ( *pic_container ) );
error = ft_base_pic_init( library );
if(error)
if ( error )
return error;
return FT_Err_Ok;

View file

@ -28,7 +28,7 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_RFORK_H
#include "basepic.h"
#undef FT_COMPONENT
#define FT_COMPONENT trace_raccess
@ -253,14 +253,6 @@
/*************************************************************************/
/*************************************************************************/
typedef FT_Error
(*raccess_guess_func)( FT_Library library,
FT_Stream stream,
char *base_file_name,
char **result_file_name,
FT_Long *result_offset );
static FT_Error
raccess_guess_apple_double( FT_Library library,
FT_Stream stream,
@ -325,6 +317,20 @@
FT_Long *result_offset );
CONST_FT_RFORK_RULE_ARRAY_BEGIN(ft_raccess_guess_table,
ft_raccess_guess_rec)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_double, apple_double)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_single, apple_single)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_ufs_export, darwin_ufs_export)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_newvfs, darwin_newvfs)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_hfsplus, darwin_hfsplus)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(vfat, vfat)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_cap, linux_cap)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_double, linux_double)
CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_netatalk, linux_netatalk)
CONST_FT_RFORK_RULE_ARRAY_END
/*************************************************************************/
/**** ****/
/**** Helper functions ****/
@ -348,43 +354,6 @@
const char *original_name,
const char *insertion );
typedef enum FT_RFork_Rule_ {
FT_RFork_Rule_invalid = -2,
FT_RFork_Rule_uknown, /* -1 */
FT_RFork_Rule_apple_double,
FT_RFork_Rule_apple_single,
FT_RFork_Rule_darwin_ufs_export,
FT_RFork_Rule_darwin_newvfs,
FT_RFork_Rule_darwin_hfsplus,
FT_RFork_Rule_vfat,
FT_RFork_Rule_linux_cap,
FT_RFork_Rule_linux_double,
FT_RFork_Rule_linux_netatalk
} FT_RFork_Rule;
/* For fast translation between rule index and rule type,
* the macros FT_RFORK_xxx should be kept consistent with
* the raccess_guess_funcs table
*/
typedef struct raccess_guess_rec_ {
raccess_guess_func func;
FT_RFork_Rule type;
} raccess_guess_rec;
static raccess_guess_rec raccess_guess_table[FT_RACCESS_N_RULES] =
{
{ raccess_guess_apple_double, FT_RFork_Rule_apple_double, },
{ raccess_guess_apple_single, FT_RFork_Rule_apple_single, },
{ raccess_guess_darwin_ufs_export, FT_RFork_Rule_darwin_ufs_export, },
{ raccess_guess_darwin_newvfs, FT_RFork_Rule_darwin_newvfs, },
{ raccess_guess_darwin_hfsplus, FT_RFork_Rule_darwin_hfsplus, },
{ raccess_guess_vfat, FT_RFork_Rule_vfat, },
{ raccess_guess_linux_cap, FT_RFork_Rule_linux_cap, },
{ raccess_guess_linux_double, FT_RFork_Rule_linux_double, },
{ raccess_guess_linux_netatalk, FT_RFork_Rule_linux_netatalk, },
};
FT_BASE_DEF( void )
FT_Raccess_Guess( FT_Library library,
FT_Stream stream,
@ -407,7 +376,7 @@
if ( errors[i] )
continue ;
errors[i] = (raccess_guess_table[i].func)( library,
errors[i] = (FT_RACCESS_GUESS_TABLE_GET[i].func)( library,
stream, base_name,
&(new_names[i]),
&(offsets[i]) );
@ -417,21 +386,28 @@
}
#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON )
#ifndef FT_MACINTOSH
static FT_RFork_Rule
raccess_get_rule_type_from_rule_index( FT_UInt rule_index )
raccess_get_rule_type_from_rule_index( FT_Library library,
FT_UInt rule_index )
{
FT_UNUSED( library );
if ( rule_index >= FT_RACCESS_N_RULES )
return FT_RFork_Rule_invalid;
return raccess_guess_table[rule_index].type;
return FT_RACCESS_GUESS_TABLE_GET[rule_index].type;
}
/*
* For this function, refer ftbase.h.
*/
FT_LOCAL_DEF( FT_Bool )
raccess_rule_by_darwin_vfs( FT_UInt rule_index )
ft_raccess_rule_by_darwin_vfs( FT_Library library,
FT_UInt rule_index )
{
switch( raccess_get_rule_type_from_rule_index( rule_index ) )
switch( raccess_get_rule_type_from_rule_index( library, rule_index ) )
{
case FT_RFork_Rule_darwin_newvfs:
case FT_RFork_Rule_darwin_hfsplus:

View file

@ -1,6 +1,6 @@
/*
* Copyright 2000 Computing Research Labs, New Mexico State University
* Copyright 2001, 2002, 2003, 2004 Francesco Zappa Nardelli
* Copyright 2001-2004, 2011 Francesco Zappa Nardelli
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@ -226,8 +226,10 @@ FT_BEGIN_HEADER
void* internal; /* Internal data for the font. */
unsigned long nmod[2048]; /* Bitmap indicating modified glyphs. */
unsigned long umod[2048]; /* Bitmap indicating modified */
/* The size of the next two arrays must be in sync with the */
/* size of the `have' array in the `bdf_parse_t' structure. */
unsigned long nmod[34816]; /* Bitmap indicating modified glyphs. */
unsigned long umod[34816]; /* Bitmap indicating modified */
/* unencoded glyphs. */
unsigned short modified; /* Boolean indicating font modified. */
unsigned short bpp; /* Bits per pixel. */

View file

@ -2,7 +2,7 @@
FreeType font driver for bdf files
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
Copyright (C) 2001-2008, 2011 by
Francesco Zappa Nardelli
Permission is hereby granted, free of charge, to any person obtaining a copy
@ -332,8 +332,6 @@ THE SOFTWARE.
FT_FREE( bdfface->available_sizes );
FT_FREE( face->bdffont );
FT_TRACE4(( "BDF_Face_Done: done face\n" ));
}
@ -356,6 +354,8 @@ THE SOFTWARE.
FT_UNUSED( face_index );
FT_TRACE2(( "BDF driver\n" ));
if ( FT_STREAM_SEEK( 0 ) )
goto Exit;
@ -367,7 +367,7 @@ THE SOFTWARE.
error = bdf_load_font( stream, memory, &options, &font );
if ( error == BDF_Err_Missing_Startfont_Field )
{
FT_TRACE2(( "[not a valid BDF file]\n" ));
FT_TRACE2(( " not a BDF file\n" ));
goto Fail;
}
else if ( error )
@ -379,10 +379,10 @@ THE SOFTWARE.
bdf_property_t* prop = NULL;
FT_TRACE4(( "number of glyphs: %d (%d)\n",
FT_TRACE4(( " number of glyphs: allocated %d (used %d)\n",
font->glyphs_size,
font->glyphs_used ));
FT_TRACE4(( "number of unencoded glyphs: %d (%d)\n",
FT_TRACE4(( " number of unencoded glyphs: allocated %d (used %d)\n",
font->unencoded_size,
font->unencoded_used ));
@ -482,7 +482,7 @@ THE SOFTWARE.
for ( n = 0; n < font->glyphs_size; n++ )
{
(face->en_table[n]).enc = cur[n].encoding;
FT_TRACE4(( "idx %d, val 0x%lX\n", n, cur[n].encoding ));
FT_TRACE4(( " idx %d, val 0x%lX\n", n, cur[n].encoding ));
(face->en_table[n]).glyph = (FT_Short)n;
if ( cur[n].encoding == font->default_char )
@ -490,7 +490,8 @@ THE SOFTWARE.
if ( n < FT_UINT_MAX )
face->default_glyph = (FT_UInt)n;
else
FT_TRACE1(( "idx %d is too large for this system\n", n ));
FT_TRACE1(( "BDF_Face_Init:"
" idx %d is too large for this system\n", n ));
}
}
}
@ -761,8 +762,8 @@ THE SOFTWARE.
case BDF_INTEGER:
if ( prop->value.l > 0x7FFFFFFFL || prop->value.l < ( -1 - 0x7FFFFFFFL ) )
{
FT_TRACE1(( "bdf_get_bdf_property: " ));
FT_TRACE1(( "too large integer 0x%x is truncated\n" ));
FT_TRACE1(( "bdf_get_bdf_property:"
" too large integer 0x%x is truncated\n" ));
}
aproperty->type = BDF_PROPERTY_TYPE_INTEGER;
aproperty->u.integer = (FT_Int32)prop->value.l;
@ -771,8 +772,8 @@ THE SOFTWARE.
case BDF_CARDINAL:
if ( prop->value.ul > 0xFFFFFFFFUL )
{
FT_TRACE1(( "bdf_get_bdf_property: " ));
FT_TRACE1(( "too large cardinal 0x%x is truncated\n" ));
FT_TRACE1(( "bdf_get_bdf_property:"
" too large cardinal 0x%x is truncated\n" ));
}
aproperty->type = BDF_PROPERTY_TYPE_CARDINAL;
aproperty->u.cardinal = (FT_UInt32)prop->value.ul;
@ -847,9 +848,9 @@ THE SOFTWARE.
0,
(FT_Module_Constructor)0,
(FT_Module_Destructor) 0,
(FT_Module_Requester) bdf_driver_requester
0, /* FT_Module_Constructor */
0, /* FT_Module_Destructor */
bdf_driver_requester
},
sizeof ( BDF_FaceRec ),

View file

@ -1,5 +1,5 @@
/*
* Copyright 2001, 2002 Francesco Zappa Nardelli
* Copyright 2001, 2002, 2012 Francesco Zappa Nardelli
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@ -33,6 +33,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX BDF_Err_
#define FT_ERR_BASE FT_Mod_Err_BDF

View file

@ -1,6 +1,6 @@
/*
* Copyright 2000 Computing Research Labs, New Mexico State University
* Copyright 2001-2011
* Copyright 2001-2012
* Francesco Zappa Nardelli
*
* Permission is hereby granted, free of charge, to any person obtaining a
@ -169,6 +169,43 @@
sizeof ( _bdf_properties[0] );
/* Auto correction messages. */
#define ACMSG1 "FONT_ASCENT property missing. " \
"Added `FONT_ASCENT %hd'.\n"
#define ACMSG2 "FONT_DESCENT property missing. " \
"Added `FONT_DESCENT %hd'.\n"
#define ACMSG3 "Font width != actual width. Old: %hd New: %hd.\n"
#define ACMSG4 "Font left bearing != actual left bearing. " \
"Old: %hd New: %hd.\n"
#define ACMSG5 "Font ascent != actual ascent. Old: %hd New: %hd.\n"
#define ACMSG6 "Font descent != actual descent. Old: %hd New: %hd.\n"
#define ACMSG7 "Font height != actual height. Old: %hd New: %hd.\n"
#define ACMSG8 "Glyph scalable width (SWIDTH) adjustments made.\n"
#define ACMSG9 "SWIDTH field missing at line %ld. Set automatically.\n"
#define ACMSG10 "DWIDTH field missing at line %ld. Set to glyph width.\n"
#define ACMSG11 "SIZE bits per pixel field adjusted to %hd.\n"
#define ACMSG12 "Duplicate encoding %ld (%s) changed to unencoded.\n"
#define ACMSG13 "Glyph %ld extra rows removed.\n"
#define ACMSG14 "Glyph %ld extra columns removed.\n"
#define ACMSG15 "Incorrect glyph count: %ld indicated but %ld found.\n"
#define ACMSG16 "Glyph %ld missing columns padded with zero bits.\n"
/* Error messages. */
#define ERRMSG1 "[line %ld] Missing `%s' line.\n"
#define ERRMSG2 "[line %ld] Font header corrupted or missing fields.\n"
#define ERRMSG3 "[line %ld] Font glyphs corrupted or missing fields.\n"
#define ERRMSG4 "[line %ld] BBX too big.\n"
#define ERRMSG5 "[line %ld] `%s' value too big.\n"
#define ERRMSG6 "[line %ld] Input line too long.\n"
#define ERRMSG7 "[line %ld] Font name too long.\n"
#define ERRMSG8 "[line %ld] Invalid `%s' value.\n"
#define ERRMSG9 "[line %ld] Invalid keyword.\n"
/* Debug messages. */
#define DBGMSG1 " [%6ld] %s" /* no \n */
#define DBGMSG2 " (0x%lX)\n"
/*************************************************************************/
/* */
/* Hash table utilities for the properties. */
@ -377,7 +414,8 @@
bdf_font_t* font;
bdf_options_t* opts;
unsigned long have[2048];
unsigned long have[34816]; /* must be in sync with `nmod' and `umod' */
/* arrays from `bdf_font_t' structure */
_bdf_list_t list;
FT_Memory memory;
@ -424,7 +462,7 @@
if ( num_items > list->size )
{
unsigned long oldsize = list->size; /* same as _bdf_list_t.size */
unsigned long newsize = oldsize + ( oldsize >> 1 ) + 4;
unsigned long newsize = oldsize + ( oldsize >> 1 ) + 5;
unsigned long bigsize = (unsigned long)( FT_INT_MAX / sizeof ( char* ) );
FT_Memory memory = list->memory;
@ -507,6 +545,10 @@
}
/* The code below ensures that we have at least 4 + 1 `field' */
/* elements in `list' (which are possibly NULL) so that we */
/* don't have to check the number of fields in most cases. */
static FT_Error
_bdf_list_split( _bdf_list_t* list,
char* separators,
@ -521,6 +563,13 @@
/* Initialize the list. */
list->used = 0;
if ( list->size )
{
list->field[0] = (char*)empty;
list->field[1] = (char*)empty;
list->field[2] = (char*)empty;
list->field[3] = (char*)empty;
}
/* If the line is empty, then simply return. */
if ( linelen == 0 || line[0] == 0 )
@ -687,6 +736,7 @@
if ( buf_size >= 65536UL ) /* limit ourselves to 64KByte */
{
FT_ERROR(( "_bdf_readstream: " ERRMSG6, lineno ));
error = BDF_Err_Invalid_Argument;
goto Exit;
}
@ -1079,33 +1129,6 @@
#define _BDF_GLYPH_HEIGHT_CHECK 0x80000000UL
/* Auto correction messages. */
#define ACMSG1 "FONT_ASCENT property missing. " \
"Added \"FONT_ASCENT %hd\".\n"
#define ACMSG2 "FONT_DESCENT property missing. " \
"Added \"FONT_DESCENT %hd\".\n"
#define ACMSG3 "Font width != actual width. Old: %hd New: %hd.\n"
#define ACMSG4 "Font left bearing != actual left bearing. " \
"Old: %hd New: %hd.\n"
#define ACMSG5 "Font ascent != actual ascent. Old: %hd New: %hd.\n"
#define ACMSG6 "Font descent != actual descent. Old: %hd New: %hd.\n"
#define ACMSG7 "Font height != actual height. Old: %hd New: %hd.\n"
#define ACMSG8 "Glyph scalable width (SWIDTH) adjustments made.\n"
#define ACMSG9 "SWIDTH field missing at line %ld. Set automatically.\n"
#define ACMSG10 "DWIDTH field missing at line %ld. Set to glyph width.\n"
#define ACMSG11 "SIZE bits per pixel field adjusted to %hd.\n"
#define ACMSG12 "Duplicate encoding %ld (%s) changed to unencoded.\n"
#define ACMSG13 "Glyph %ld extra rows removed.\n"
#define ACMSG14 "Glyph %ld extra columns removed.\n"
#define ACMSG15 "Incorrect glyph count: %ld indicated but %ld found.\n"
/* Error messages. */
#define ERRMSG1 "[line %ld] Missing \"%s\" line.\n"
#define ERRMSG2 "[line %ld] Font header corrupted or missing fields.\n"
#define ERRMSG3 "[line %ld] Font glyphs corrupted or missing fields.\n"
#define ERRMSG4 "[line %ld] BBX too big.\n"
static FT_Error
_bdf_add_comment( bdf_font_t* font,
char* comment,
@ -1137,7 +1160,8 @@
/* default specified in the options. */
static FT_Error
_bdf_set_default_spacing( bdf_font_t* font,
bdf_options_t* opts )
bdf_options_t* opts,
unsigned long lineno )
{
size_t len;
char name[256];
@ -1162,6 +1186,7 @@
/* Limit ourselves to 256 characters in the font name. */
if ( len >= 256 )
{
FT_ERROR(( "_bdf_set_default_spacing: " ERRMSG7, lineno ));
error = BDF_Err_Invalid_Argument;
goto Exit;
}
@ -1241,6 +1266,7 @@
ep = line + linelen;
/* Trim the leading whitespace if it exists. */
if ( *sp )
*sp++ = 0;
while ( *sp &&
( *sp == ' ' || *sp == '\t' ) )
@ -1267,7 +1293,8 @@
static FT_Error
_bdf_add_property( bdf_font_t* font,
char* name,
char* value )
char* value,
unsigned long lineno )
{
size_t propid;
hashnode hn;
@ -1405,6 +1432,7 @@
{
if ( !fp->value.atom )
{
FT_ERROR(( "_bdf_add_property: " ERRMSG8, lineno, "SPACING" ));
error = BDF_Err_Invalid_File_Format;
goto Exit;
}
@ -1493,8 +1521,9 @@
/* Limit ourselves to 1,114,112 glyphs in the font (this is the */
/* number of code points available in Unicode). */
if ( p->cnt >= 1114112UL )
if ( p->cnt >= 0x110000UL )
{
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "CHARS" ));
error = BDF_Err_Invalid_Argument;
goto Exit;
}
@ -1554,6 +1583,7 @@
if ( !s )
{
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG8, lineno, "STARTCHAR" ));
error = BDF_Err_Invalid_File_Format;
goto Exit;
}
@ -1565,6 +1595,8 @@
p->flags |= _BDF_GLYPH;
FT_TRACE4(( DBGMSG1, lineno, s ));
goto Exit;
}
@ -1585,11 +1617,23 @@
p->glyph_enc = _bdf_atol( p->list.field[1], 0, 10 );
/* Check that the encoding is in the range [0,65536] because */
/* Normalize negative encoding values. The specification only */
/* allows -1, but we can be more generous here. */
if ( p->glyph_enc < -1 )
p->glyph_enc = -1;
/* Check for alternative encoding format. */
if ( p->glyph_enc == -1 && p->list.used > 2 )
p->glyph_enc = _bdf_atol( p->list.field[2], 0, 10 );
FT_TRACE4(( DBGMSG2, p->glyph_enc ));
/* Check that the encoding is in the Unicode range because */
/* otherwise p->have (a bitmap with static size) overflows. */
if ( p->glyph_enc > 0 &&
(size_t)p->glyph_enc >= sizeof ( p->have ) * 8 )
{
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "ENCODING" ));
error = BDF_Err_Invalid_File_Format;
goto Exit;
}
@ -1702,18 +1746,31 @@
for ( i = 0; i < nibbles; i++ )
{
c = line[i];
if ( !isdigok( hdigits, c ) )
break;
*bp = (FT_Byte)( ( *bp << 4 ) + a2i[c] );
if ( i + 1 < nibbles && ( i & 1 ) )
*++bp = 0;
}
/* If any line has not enough columns, */
/* indicate they have been padded with zero bits. */
if ( i < nibbles &&
!( p->flags & _BDF_GLYPH_WIDTH_CHECK ) )
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG16, glyph->encoding ));
p->flags |= _BDF_GLYPH_WIDTH_CHECK;
font->modified = 1;
}
/* Remove possible garbage at the right. */
mask_index = ( glyph->bbx.width * p->font->bpp ) & 7;
if ( glyph->bbx.width )
*bp &= nibble_mask[mask_index];
/* If any line has extra columns, indicate they have been removed. */
if ( ( line[nibbles] == '0' || a2i[(int)line[nibbles]] != 0 ) &&
if ( i == nibbles &&
isdigok( hdigits, line[nibbles] ) &&
!( p->flags & _BDF_GLYPH_WIDTH_CHECK ) )
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG14, glyph->encoding ));
@ -1729,12 +1786,7 @@
if ( ft_memcmp( line, "SWIDTH", 6 ) == 0 )
{
if ( !( p->flags & _BDF_ENCODING ) )
{
/* Missing ENCODING field. */
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENCODING" ));
error = BDF_Err_Missing_Encoding_Field;
goto Exit;
}
goto Missing_Encoding;
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
@ -1749,6 +1801,9 @@
/* Expect the DWIDTH (scalable width) field next. */
if ( ft_memcmp( line, "DWIDTH", 6 ) == 0 )
{
if ( !( p->flags & _BDF_ENCODING ) )
goto Missing_Encoding;
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
goto Exit;
@ -1774,6 +1829,9 @@
/* Expect the BBX field next. */
if ( ft_memcmp( line, "BBX", 3 ) == 0 )
{
if ( !( p->flags & _BDF_ENCODING ) )
goto Missing_Encoding;
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
goto Exit;
@ -1854,7 +1912,7 @@
glyph->bpr = ( glyph->bbx.width * p->font->bpp + 7 ) >> 3;
bitmap_size = glyph->bpr * glyph->bbx.height;
if ( bitmap_size > 0xFFFFU )
if ( glyph->bpr > 0xFFFFU || bitmap_size > 0xFFFFU )
{
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG4, lineno ));
error = BDF_Err_Bbx_Too_Big;
@ -1872,7 +1930,14 @@
goto Exit;
}
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG9, lineno ));
error = BDF_Err_Invalid_File_Format;
goto Exit;
Missing_Encoding:
/* Missing ENCODING field. */
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENCODING" ));
error = BDF_Err_Missing_Encoding_Field;
Exit:
if ( error && ( p->flags & _BDF_GLYPH ) )
@ -1917,7 +1982,8 @@
{
p->font->font_ascent = p->font->bbx.ascent;
ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
error = _bdf_add_property( p->font, (char *)"FONT_ASCENT", nbuf );
error = _bdf_add_property( p->font, (char *)"FONT_ASCENT",
nbuf, lineno );
if ( error )
goto Exit;
@ -1929,7 +1995,8 @@
{
p->font->font_descent = p->font->bbx.descent;
ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
error = _bdf_add_property( p->font, (char *)"FONT_DESCENT", nbuf );
error = _bdf_add_property( p->font, (char *)"FONT_DESCENT",
nbuf, lineno );
if ( error )
goto Exit;
@ -1955,13 +2022,13 @@
value += 7;
if ( *value )
*value++ = 0;
error = _bdf_add_property( p->font, name, value );
error = _bdf_add_property( p->font, name, value, lineno );
if ( error )
goto Exit;
}
else if ( _bdf_is_atom( line, linelen, &name, &value, p->font ) )
{
error = _bdf_add_property( p->font, name, value );
error = _bdf_add_property( p->font, name, value, lineno );
if ( error )
goto Exit;
}
@ -1975,7 +2042,7 @@
_bdf_list_shift( &p->list, 1 );
value = _bdf_list_join( &p->list, ' ', &vlen );
error = _bdf_add_property( p->font, name, value );
error = _bdf_add_property( p->font, name, value, lineno );
if ( error )
goto Exit;
}
@ -2041,7 +2108,8 @@
if ( ft_memcmp( line, "STARTFONT", 9 ) != 0 )
{
/* No STARTFONT field is a good indication of a problem. */
/* we don't emit an error message since this code gets */
/* explicitly caught one level higher */
error = BDF_Err_Missing_Startfont_Field;
goto Exit;
}
@ -2154,6 +2222,7 @@
if ( !s )
{
FT_ERROR(( "_bdf_parse_start: " ERRMSG8, lineno, "FONT" ));
error = BDF_Err_Invalid_File_Format;
goto Exit;
}
@ -2167,7 +2236,7 @@
/* If the font name is an XLFD name, set the spacing to the one in */
/* the font name. If there is no spacing fall back on the default. */
error = _bdf_set_default_spacing( p->font, p->opts );
error = _bdf_set_default_spacing( p->font, p->opts, lineno );
if ( error )
goto Exit;
@ -2248,14 +2317,16 @@
/* for compiling fonts. */
p->font->font_ascent = p->font->bbx.ascent;
ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
error = _bdf_add_property( p->font, (char *)"FONT_ASCENT", nbuf );
error = _bdf_add_property( p->font, (char *)"FONT_ASCENT",
nbuf, lineno );
if ( error )
goto Exit;
FT_TRACE2(( "_bdf_parse_properties: " ACMSG1, p->font->bbx.ascent ));
p->font->font_descent = p->font->bbx.descent;
ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
error = _bdf_add_property( p->font, (char *)"FONT_DESCENT", nbuf );
error = _bdf_add_property( p->font, (char *)"FONT_DESCENT",
nbuf, lineno );
if ( error )
goto Exit;
FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
@ -2269,6 +2340,7 @@
goto Exit;
}
FT_ERROR(( "_bdf_parse_start: " ERRMSG9, lineno ));
error = BDF_Err_Invalid_File_Format;
Exit:
@ -2380,7 +2452,6 @@
}
if ( p->flags & _BDF_START )
{
{
/* The ENDFONT field was never reached or did not exist. */
if ( !( p->flags & _BDF_GLYPHS ) )
@ -2398,7 +2469,6 @@
goto Exit;
}
}
}
if ( p->font != 0 )
{

View file

@ -8,7 +8,7 @@
/* parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
/* Copyright 2010 by */
/* Copyright 2010, 2012 by */
/* Joel Klinghed. */
/* */
/* Based on src/gzip/ftgzip.c, Copyright 2002 - 2010 by */
@ -35,6 +35,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX Bzip2_Err_
#define FT_ERR_BASE FT_Mod_Err_Bzip2

View file

@ -608,7 +608,7 @@
const FTC_SFamilyClassRec ftc_basic_sbit_family_class =
{
{
sizeof( FTC_BasicFamilyRec ),
sizeof ( FTC_BasicFamilyRec ),
ftc_basic_family_compare,
ftc_basic_family_init,
0, /* FTC_MruNode_ResetFunc */

View file

@ -4,7 +4,7 @@
/* */
/* Caching sub-system error codes (specification only). */
/* */
/* Copyright 2001 by */
/* Copyright 2001, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -30,6 +30,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX FTC_Err_
#define FT_ERR_BASE FT_Mod_Err_Cache

View file

@ -4,7 +4,7 @@
/* */
/* OpenType font driver implementation (body). */
/* */
/* Copyright 1996-2011 by */
/* Copyright 1996-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -125,7 +125,7 @@
/*************************************************************************/
/* */
/* <Function> */
/* Load_Glyph */
/* cff_glyph_load */
/* */
/* <Description> */
/* A driver method used to load a glyph within a given glyph slot. */
@ -149,7 +149,7 @@
/* FreeType error code. 0 means success. */
/* */
FT_CALLBACK_DEF( FT_Error )
Load_Glyph( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */
cff_glyph_load( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */
FT_Size cffsize, /* CFF_Size */
FT_UInt glyph_index,
FT_Int32 load_flags )
@ -203,7 +203,7 @@
for ( nn = 0; nn < count; nn++ )
{
error = Load_Glyph( slot, face->size, start + nn, flags );
error = cff_glyph_load( slot, face->size, start + nn, flags );
if ( error )
break;
@ -239,7 +239,7 @@
" cannot get glyph name from CFF & CEF fonts\n"
" "
" without the `PSNames' module\n" ));
error = CFF_Err_Unknown_File_Format;
error = CFF_Err_Missing_Module;
goto Exit;
}
@ -599,19 +599,35 @@
cff_get_interface( FT_Module driver, /* CFF_Driver */
const char* module_interface )
{
FT_Library library;
FT_Module sfnt;
FT_Module_Interface result;
/* FT_CFF_SERVICES_GET derefers `library' in PIC mode */
#ifdef FT_CONFIG_OPTION_PIC
if ( !driver )
return NULL;
library = driver->library;
if ( !library )
return NULL;
#endif
result = ft_service_list_lookup( FT_CFF_SERVICES_GET, module_interface );
if ( result != NULL )
return result;
/* `driver' is not yet evaluated in non-PIC mode */
#ifndef FT_CONFIG_OPTION_PIC
if ( !driver )
return NULL;
library = driver->library;
if ( !library )
return NULL;
#endif
/* we pass our request to the `sfnt' module */
sfnt = FT_Get_Module( driver->library, "sfnt" );
sfnt = FT_Get_Module( library, "sfnt" );
return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0;
}
@ -625,12 +641,13 @@
#define CFF_SIZE_SELECT 0
#endif
FT_DEFINE_DRIVER(cff_driver_class,
FT_DEFINE_DRIVER( cff_driver_class,
FT_MODULE_FONT_DRIVER |
FT_MODULE_DRIVER_SCALABLE |
FT_MODULE_DRIVER_HAS_HINTER,
sizeof( CFF_DriverRec ),
sizeof ( CFF_DriverRec ),
"cff",
0x10000L,
0x20000L,
@ -642,9 +659,9 @@
cff_get_interface,
/* now the specific driver fields */
sizeof( TT_FaceRec ),
sizeof( CFF_SizeRec ),
sizeof( CFF_GlyphSlotRec ),
sizeof ( TT_FaceRec ),
sizeof ( CFF_SizeRec ),
sizeof ( CFF_GlyphSlotRec ),
cff_face_init,
cff_face_done,
@ -656,11 +673,11 @@
ft_stub_set_char_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */
ft_stub_set_pixel_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */
Load_Glyph,
cff_glyph_load,
cff_get_kerning,
0, /* FT_Face_AttachFunc */
cff_get_advances, /* FT_Face_GetAdvancesFunc */
cff_get_advances,
cff_size_request,

View file

@ -4,7 +4,7 @@
/* */
/* CFF error codes (specification only). */
/* */
/* Copyright 2001 by */
/* Copyright 2001, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -29,6 +29,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX CFF_Err_
#define FT_ERR_BASE FT_Mod_Err_CFF

View file

@ -4,7 +4,7 @@
/* */
/* OpenType Glyph Loader (body). */
/* */
/* Copyright 1996-2011 by */
/* Copyright 1996-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -1513,11 +1513,9 @@
goto Stack_Underflow;
/* if num_args isn't of the form 4n or 4n+1, */
/* we reduce it to 4n+1 */
/* we enforce it by clearing the second bit */
nargs = num_args - num_args % 4;
if ( num_args - nargs > 0 )
nargs += 1;
nargs = num_args & ~2;
if ( cff_builder_start_point( builder, x, y ) )
goto Fail;
@ -1560,11 +1558,9 @@
goto Stack_Underflow;
/* if num_args isn't of the form 4n or 4n+1, */
/* we reduce it to 4n+1 */
/* we enforce it by clearing the second bit */
nargs = num_args - num_args % 4;
if ( num_args - nargs > 0 )
nargs += 1;
nargs = num_args & ~2;
if ( cff_builder_start_point( builder, x, y ) )
goto Fail;
@ -1612,11 +1608,9 @@
goto Stack_Underflow;
/* if num_args isn't of the form 8n, 8n+1, 8n+4, or 8n+5, */
/* we reduce it to the largest one which fits */
/* we enforce it by clearing the second bit */
nargs = num_args - num_args % 4;
if ( num_args - nargs > 0 )
nargs += 1;
nargs = num_args & ~2;
args -= nargs;
if ( check_points( builder, ( nargs / 4 ) * 3 ) )
@ -1963,6 +1957,7 @@
/* Save glyph width so that the subglyphs don't overwrite it. */
FT_Pos glyph_width = decoder->glyph_width;
error = cff_operator_seac( decoder,
0L, args[-4], args[-3],
(FT_Int)( args[-2] >> 16 ),

View file

@ -1458,7 +1458,7 @@
font->header_size < 4 ||
font->absolute_offsize > 4 )
{
FT_TRACE2(( "[not a CFF font header]\n" ));
FT_TRACE2(( " not a CFF font header\n" ));
error = CFF_Err_Unknown_File_Format;
goto Exit;
}
@ -1576,7 +1576,7 @@
if ( dict->charstrings_offset == 0 )
{
FT_ERROR(( "cff_font_load: no charstrings offset\n" ));
error = CFF_Err_Unknown_File_Format;
error = CFF_Err_Invalid_File_Format;
goto Exit;
}

View file

@ -4,7 +4,7 @@
/* */
/* OpenType objects manager (body). */
/* */
/* Copyright 1996-2011 by */
/* Copyright 1996-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -494,13 +494,19 @@
sfnt = (SFNT_Service)FT_Get_Module_Interface(
library, "sfnt" );
if ( !sfnt )
goto Bad_Format;
{
FT_ERROR(( "cff_face_init: cannot access `sfnt' module\n" ));
error = CFF_Err_Missing_Module;
goto Exit;
}
FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
pshinter = (PSHinter_Service)FT_Get_Module_Interface(
library, "pshinter" );
FT_TRACE2(( "CFF driver\n" ));
/* create input stream from resource */
if ( FT_STREAM_SEEK( 0 ) )
goto Exit;
@ -511,8 +517,9 @@
{
if ( face->format_tag != TTAG_OTTO ) /* `OTTO'; OpenType/CFF font */
{
FT_TRACE2(( "[not a valid OpenType/CFF font]\n" ));
goto Bad_Format;
FT_TRACE2(( " not an OpenType/CFF font\n" ));
error = CFF_Err_Unknown_File_Format;
goto Exit;
}
/* if we are performing a simple font format check, exit immediately */
@ -604,7 +611,8 @@
" cannot open CFF & CEF fonts\n"
" "
" without the `PSNames' module\n" ));
goto Bad_Format;
error = CFF_Err_Missing_Module;
goto Exit;
}
#ifdef FT_DEBUG_LEVEL_TRACE
@ -847,22 +855,22 @@
/* */
/* Compute face flags. */
/* */
flags = (FT_UInt32)( FT_FACE_FLAG_SCALABLE | /* scalable outlines */
flags = FT_FACE_FLAG_SCALABLE | /* scalable outlines */
FT_FACE_FLAG_HORIZONTAL | /* horizontal data */
FT_FACE_FLAG_HINTER ); /* has native hinter */
FT_FACE_FLAG_HINTER; /* has native hinter */
if ( sfnt_format )
flags |= (FT_UInt32)FT_FACE_FLAG_SFNT;
flags |= FT_FACE_FLAG_SFNT;
/* fixed width font? */
if ( dict->is_fixed_pitch )
flags |= (FT_UInt32)FT_FACE_FLAG_FIXED_WIDTH;
flags |= FT_FACE_FLAG_FIXED_WIDTH;
/* XXX: WE DO NOT SUPPORT KERNING METRICS IN THE GPOS TABLE FOR NOW */
#if 0
/* kerning available? */
if ( face->kern_pairs )
flags |= (FT_UInt32)FT_FACE_FLAG_KERNING;
flags |= FT_FACE_FLAG_KERNING;
#endif
cffface->face_flags = flags;
@ -1014,10 +1022,6 @@
Exit:
return error;
Bad_Format:
error = CFF_Err_Unknown_File_Format;
goto Exit;
}

View file

@ -19,40 +19,78 @@
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_INTERNAL_OBJECTS_H
#include "cffcmap.h"
#include "cffpic.h"
#include "cfferrs.h"
#ifdef FT_CONFIG_OPTION_PIC
/* forward declaration of PIC init functions from cffdrivr.c */
FT_Error FT_Create_Class_cff_services( FT_Library, FT_ServiceDescRec**);
void FT_Destroy_Class_cff_services( FT_Library, FT_ServiceDescRec*);
void FT_Init_Class_cff_service_ps_info( FT_Library, FT_Service_PsInfoRec*);
void FT_Init_Class_cff_service_glyph_dict( FT_Library, FT_Service_GlyphDictRec*);
void FT_Init_Class_cff_service_ps_name( FT_Library, FT_Service_PsFontNameRec*);
void FT_Init_Class_cff_service_get_cmap_info( FT_Library, FT_Service_TTCMapsRec*);
void FT_Init_Class_cff_service_cid_info( FT_Library, FT_Service_CIDRec*);
FT_Error
FT_Create_Class_cff_services(
FT_Library library,
FT_ServiceDescRec** output_class );
void
FT_Destroy_Class_cff_services(
FT_Library library,
FT_ServiceDescRec* clazz );
void
FT_Init_Class_cff_service_ps_info(
FT_Library library,
FT_Service_PsInfoRec* clazz );
void
FT_Init_Class_cff_service_glyph_dict(
FT_Library library,
FT_Service_GlyphDictRec* clazz );
void
FT_Init_Class_cff_service_ps_name(
FT_Library library,
FT_Service_PsFontNameRec* clazz );
void
FT_Init_Class_cff_service_get_cmap_info(
FT_Library library,
FT_Service_TTCMapsRec* clazz );
void
FT_Init_Class_cff_service_cid_info(
FT_Library library,
FT_Service_CIDRec* clazz );
/* forward declaration of PIC init functions from cffparse.c */
FT_Error FT_Create_Class_cff_field_handlers( FT_Library, CFF_Field_Handler**);
void FT_Destroy_Class_cff_field_handlers( FT_Library, CFF_Field_Handler*);
FT_Error
FT_Create_Class_cff_field_handlers(
FT_Library library,
CFF_Field_Handler** output_class );
/* forward declaration of PIC init functions from cffcmap.c */
void FT_Init_Class_cff_cmap_encoding_class_rec( FT_Library, FT_CMap_ClassRec*);
void FT_Init_Class_cff_cmap_unicode_class_rec( FT_Library, FT_CMap_ClassRec*);
void
FT_Destroy_Class_cff_field_handlers(
FT_Library library,
CFF_Field_Handler* clazz );
void
cff_driver_class_pic_free( FT_Library library )
{
FT_PIC_Container* pic_container = &library->pic_container;
FT_Memory memory = library->memory;
if ( pic_container->cff )
{
CffModulePIC* container = (CffModulePIC*)pic_container->cff;
if(container->cff_services)
FT_Destroy_Class_cff_services(library, container->cff_services);
CffModulePIC* container = ( CffModulePIC* )pic_container->cff;
if ( container->cff_services )
FT_Destroy_Class_cff_services( library,
container->cff_services );
container->cff_services = NULL;
if(container->cff_field_handlers)
FT_Destroy_Class_cff_field_handlers(library, container->cff_field_handlers);
if ( container->cff_field_handlers )
FT_Destroy_Class_cff_field_handlers(
library, container->cff_field_handlers );
container->cff_field_handlers = NULL;
FT_FREE( container );
pic_container->cff = NULL;
@ -76,22 +114,31 @@
pic_container->cff = container;
/* initialize pointer table - this is how the module usually expects this data */
error = FT_Create_Class_cff_services(library, &container->cff_services);
if(error)
error = FT_Create_Class_cff_services( library,
&container->cff_services );
if ( error )
goto Exit;
error = FT_Create_Class_cff_field_handlers(library, &container->cff_field_handlers);
if(error)
error = FT_Create_Class_cff_field_handlers(
library, &container->cff_field_handlers );
if ( error )
goto Exit;
FT_Init_Class_cff_service_ps_info(library, &container->cff_service_ps_info);
FT_Init_Class_cff_service_glyph_dict(library, &container->cff_service_glyph_dict);
FT_Init_Class_cff_service_ps_name(library, &container->cff_service_ps_name);
FT_Init_Class_cff_service_get_cmap_info(library, &container->cff_service_get_cmap_info);
FT_Init_Class_cff_service_cid_info(library, &container->cff_service_cid_info);
FT_Init_Class_cff_cmap_encoding_class_rec(library, &container->cff_cmap_encoding_class_rec);
FT_Init_Class_cff_cmap_unicode_class_rec(library, &container->cff_cmap_unicode_class_rec);
FT_Init_Class_cff_service_ps_info(
library, &container->cff_service_ps_info );
FT_Init_Class_cff_service_glyph_dict(
library, &container->cff_service_glyph_dict );
FT_Init_Class_cff_service_ps_name(
library, &container->cff_service_ps_name );
FT_Init_Class_cff_service_get_cmap_info(
library, &container->cff_service_get_cmap_info );
FT_Init_Class_cff_service_cid_info(
library, &container->cff_service_cid_info );
FT_Init_Class_cff_cmap_encoding_class_rec(
library, &container->cff_cmap_encoding_class_rec );
FT_Init_Class_cff_cmap_unicode_class_rec(
library, &container->cff_cmap_unicode_class_rec );
Exit:
if(error)
cff_driver_class_pic_free(library);
if ( error )
cff_driver_class_pic_free( library );
return error;
}

View file

@ -68,6 +68,13 @@ FT_BEGIN_HEADER
#define FT_CFF_CMAP_UNICODE_CLASS_REC_GET (GET_PIC(library)->cff_cmap_unicode_class_rec)
#define FT_CFF_FIELD_HANDLERS_GET (GET_PIC(library)->cff_field_handlers)
/* see cffpic.c for the implementation */
void
cff_driver_class_pic_free( FT_Library library );
FT_Error
cff_driver_class_pic_init( FT_Library library );
#endif /* FT_CONFIG_OPTION_PIC */
/* */

View file

@ -4,7 +4,7 @@
/* */
/* CID error codes (specification only). */
/* */
/* Copyright 2001 by */
/* Copyright 2001, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -29,6 +29,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX CID_Err_
#define FT_ERR_BASE FT_Mod_Err_CID

View file

@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 font loader (body). */
/* */
/* Copyright 1996-2006, 2009, 2011 by */
/* Copyright 1996-2006, 2009, 2011-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -147,7 +147,7 @@
FT_CALLBACK_DEF( FT_Error )
parse_font_matrix( CID_Face face,
cid_parse_font_matrix( CID_Face face,
CID_Parser* parser )
{
FT_Matrix* matrix;
@ -268,7 +268,7 @@
#include "cidtoken.h"
T1_FIELD_CALLBACK( "FDArray", parse_fd_array, 0 )
T1_FIELD_CALLBACK( "FontMatrix", parse_font_matrix, 0 )
T1_FIELD_CALLBACK( "FontMatrix", cid_parse_font_matrix, 0 )
T1_FIELD_CALLBACK( "ExpansionFactor", parse_expansion_factor, 0 )
{ 0, T1_FIELD_LOCATION_CID_INFO, T1_FIELD_TYPE_NONE, 0, 0, 0, 0, 0, 0 }
@ -513,7 +513,7 @@
static void
t1_init_loader( CID_Loader* loader,
cid_init_loader( CID_Loader* loader,
CID_Face face )
{
FT_UNUSED( face );
@ -523,7 +523,7 @@
static void
t1_done_loader( CID_Loader* loader )
cid_done_loader( CID_Loader* loader )
{
CID_Parser* parser = &loader->parser;
@ -641,7 +641,7 @@
FT_Error error;
t1_init_loader( &loader, face );
cid_init_loader( &loader, face );
parser = &loader.parser;
error = cid_parser_new( parser, face->root.stream, face->root.memory,
@ -682,7 +682,7 @@
error = cid_read_subrs( face );
Exit:
t1_done_loader( &loader );
cid_done_loader( &loader );
return error;
}

View file

@ -4,7 +4,7 @@
/* */
/* CID objects manager (body). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008, 2010 by */
/* Copyright 1996-2006, 2008, 2010-2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -299,6 +299,13 @@
psaux = (PSAux_Service)FT_Get_Module_Interface(
FT_FACE_LIBRARY( face ), "psaux" );
if ( !psaux )
{
FT_ERROR(( "cid_face_init: cannot access `psaux' module\n" ));
error = CID_Err_Missing_Module;
goto Exit;
}
face->psaux = psaux;
}
@ -311,6 +318,8 @@
face->pshinter = pshinter;
}
FT_TRACE2(( "CID driver\n" ));
/* open the tokenizer; this will also check the font format */
if ( FT_STREAM_SEEK( 0 ) )
goto Exit;

View file

@ -73,7 +73,7 @@
if ( ft_strncmp( (char *)stream->cursor,
"%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )
{
FT_TRACE2(( "[not a valid CID-keyed font]\n" ));
FT_TRACE2(( " not a CID-keyed font\n" ));
error = CID_Err_Unknown_File_Format;
}
@ -99,7 +99,7 @@
if ( stream_len == 0 )
{
FT_TRACE2(( "cid_parser_new: no `StartData' keyword found\n" ));
error = CID_Err_Unknown_File_Format;
error = CID_Err_Invalid_File_Format;
goto Exit;
}

View file

@ -196,7 +196,7 @@
FT_MODULE_DRIVER_SCALABLE |
FT_MODULE_DRIVER_HAS_HINTER,
sizeof( FT_DriverRec ),
sizeof ( FT_DriverRec ),
"t1cid", /* module name */
0x10000L, /* version 1.0 of driver */
0x20000L, /* requires FreeType 2.0 */
@ -209,9 +209,9 @@
},
/* then the other font drivers fields */
sizeof( CID_FaceRec ),
sizeof( CID_SizeRec ),
sizeof( CID_GlyphSlotRec ),
sizeof ( CID_FaceRec ),
sizeof ( CID_SizeRec ),
sizeof ( CID_GlyphSlotRec ),
cid_face_init,
cid_face_done,

View file

@ -1334,7 +1334,7 @@
l[1] = stateArray_length_p;
l[2] = entryTable_length_p;
gxv_set_length_by_ulong_offset( o, l, buff, 4, table_size, valid );
gxv_set_length_by_ulong_offset( o, l, buff, 3, table_size, valid );
}
@ -1704,9 +1704,9 @@
const FT_String* name,
GXV_odtect_Range odtect )
{
odtect->range[ odtect->nRanges ].start = start;
odtect->range[ odtect->nRanges ].length = length;
odtect->range[ odtect->nRanges ].name = (FT_String*)name;
odtect->range[odtect->nRanges].start = start;
odtect->range[odtect->nRanges].length = length;
odtect->range[odtect->nRanges].name = (FT_String*)name;
odtect->nRanges++;
}

View file

@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT common tables validation (specification). */
/* */
/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* Copyright 2004, 2005, 2012 */
/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -316,7 +317,7 @@ FT_BEGIN_HEADER
#define GXV_32BIT_ALIGNMENT_VALIDATE( a ) \
FT_BEGIN_STMNT \
{ \
if ( 0 != ( (a) % 4 ) ) \
if ( (a) & 3 ) \
FT_INVALID_OFFSET ; \
} \
FT_END_STMNT

View file

@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT validation module error codes (specification only). */
/* */
/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* Copyright 2004, 2005, 2012 */
/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -38,6 +39,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX GXV_Err_
#define FT_ERR_BASE FT_Mod_Err_GXV

View file

@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT feat table validation (body). */
/* */
/* Copyright 2004, 2005, 2008 by */
/* Copyright 2004, 2005, 2008, 2012 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@ -176,7 +176,7 @@
setting = FT_NEXT_USHORT( p );
/* If we have exclusive setting, the setting should be odd. */
if ( exclusive && ( setting % 2 ) == 0 )
if ( exclusive && ( setting & 1 ) == 0 )
FT_INVALID_DATA;
gxv_feat_name_index_validate( p, limit, valid );

View file

@ -269,7 +269,7 @@
const FT_Module_Class gxv_module_class =
{
0,
sizeof( FT_ModuleRec ),
sizeof ( FT_ModuleRec ),
"gxvalid",
0x10000L,
0x20000L,

View file

@ -233,7 +233,7 @@
/* XXX: check range? */
offset = (FT_UShort)( base_value_p->u +
relative_gindex * sizeof( FT_UShort ) );
relative_gindex * sizeof ( FT_UShort ) );
p = valid->lookuptbl_head + offset;
limit = lookuptbl_limit;

View file

@ -8,7 +8,7 @@
/* parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
/* Copyright 2002-2006, 2009-2011 by */
/* Copyright 2002-2006, 2009-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -32,6 +32,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX Gzip_Err_
#define FT_ERR_BASE FT_Mod_Err_Gzip

View file

@ -8,7 +8,7 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
/* Copyright 2004, 2005, 2006, 2009, 2010 by */
/* Copyright 2004-2006, 2009, 2010, 2012 by */
/* Albert Chin-A-Young. */
/* */
/* Based on code in src/gzip/ftgzip.c, Copyright 2004 by */
@ -34,6 +34,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX LZW_Err_
#define FT_ERR_BASE FT_Mod_Err_LZW

View file

@ -4,7 +4,7 @@
/* */
/* OpenType validation module error codes (specification only). */
/* */
/* Copyright 2004, 2005 by */
/* Copyright 2004, 2005, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -30,6 +30,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX OTV_Err_
#define FT_ERR_BASE FT_Mod_Err_OTvalid

View file

@ -266,7 +266,7 @@
const FT_Module_Class otv_module_class =
{
0,
sizeof( FT_ModuleRec ),
sizeof ( FT_ModuleRec ),
"otvalid",
0x10000L,
0x20000L,

View file

@ -2,8 +2,7 @@
FreeType font driver for pcf files
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009,
2010 by
Copyright (C) 2000-2004, 2006-2011 by
Francesco Zappa Nardelli
Permission is hereby granted, free of charge, to any person obtaining a copy
@ -248,8 +247,6 @@ THE SOFTWARE.
FT_FREE( face->charset_encoding );
FT_FREE( face->charset_registry );
FT_TRACE4(( "PCF_Face_Done: done face\n" ));
/* close compressed stream if any */
if ( pcfface->stream == &face->comp_stream )
{
@ -274,6 +271,8 @@ THE SOFTWARE.
FT_UNUSED( face_index );
FT_TRACE2(( "PCF driver\n" ));
error = pcf_load_font( stream, face );
if ( error )
{
@ -405,7 +404,7 @@ THE SOFTWARE.
return error;
Fail:
FT_TRACE2(( "[not a valid PCF file]\n" ));
FT_TRACE2(( " not a PCF file\n" ));
PCF_Face_Done( pcfface );
error = PCF_Err_Unknown_File_Format; /* error */
goto Exit;
@ -684,8 +683,8 @@ THE SOFTWARE.
0,
0,
0,
0, /* FT_Module_Constructor */
0, /* FT_Module_Destructor */
pcf_driver_requester
},

View file

@ -4,7 +4,7 @@
/* */
/* PCF error codes (specification only). */
/* */
/* Copyright 2001 by */
/* Copyright 2001, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -29,6 +29,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PCF_Err_
#define FT_ERR_BASE FT_Mod_Err_PCF

View file

@ -2,8 +2,7 @@
FreeType font driver for pcf fonts
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010 by
Copyright 2000-2010, 2012 by
Francesco Zappa Nardelli
Permission is hereby granted, free of charge, to any person obtaining a copy
@ -496,7 +495,8 @@ THE SOFTWARE.
goto Bail;
}
if ( FT_NEW_ARRAY( strings, string_size ) )
/* allocate one more byte so that we have a final null byte */
if ( FT_NEW_ARRAY( strings, string_size + 1 ) )
goto Bail;
error = FT_Stream_Read( stream, (FT_Byte*)strings, string_size );

View file

@ -4,7 +4,7 @@
/* */
/* FreeType PFR driver interface (body). */
/* */
/* Copyright 2002, 2003, 2004, 2006, 2008, 2010 by */
/* Copyright 2002-2004, 2006, 2008, 2010, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -173,7 +173,7 @@
FT_MODULE_FONT_DRIVER |
FT_MODULE_DRIVER_SCALABLE,
sizeof( FT_DriverRec ),
sizeof ( FT_DriverRec ),
"pfr",
0x10000L,
@ -181,14 +181,14 @@
NULL,
0,
0,
0, /* FT_Module_Constructor */
0, /* FT_Module_Destructor */
pfr_get_service
},
sizeof( PFR_FaceRec ),
sizeof( PFR_SizeRec ),
sizeof( PFR_SlotRec ),
sizeof ( PFR_FaceRec ),
sizeof ( PFR_SizeRec ),
sizeof ( PFR_SlotRec ),
pfr_face_init,
pfr_face_done,

View file

@ -4,7 +4,7 @@
/* */
/* PFR error codes (specification only). */
/* */
/* Copyright 2002 by */
/* Copyright 2002, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -29,6 +29,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PFR_Err_
#define FT_ERR_BASE FT_Mod_Err_PFR

View file

@ -4,7 +4,7 @@
/* */
/* FreeType PFR object methods (body). */
/* */
/* Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 by */
/* Copyright 2002-2008, 2010-2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -77,6 +77,8 @@
FT_UNUSED( params );
FT_TRACE2(( "PFR driver\n" ));
/* load the header and check it */
error = pfr_header_load( &face->header, stream );
if ( error )
@ -84,7 +86,7 @@
if ( !pfr_header_check( &face->header ) )
{
FT_TRACE4(( "pfr_face_init: not a valid PFR font\n" ));
FT_TRACE2(( " not a PFR font\n" ));
error = PFR_Err_Unknown_File_Format;
goto Exit;
}

View file

@ -4,7 +4,7 @@
/* */
/* AFM parser (body). */
/* */
/* Copyright 2006, 2007, 2008, 2009, 2010 by */
/* Copyright 2006-2010, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -631,9 +631,6 @@
tk->max_ptsize = shared_vals[3].u.f;
tk->max_kern = shared_vals[4].u.f;
/* is this correct? */
if ( tk->degree < 0 && tk->min_kern > 0 )
tk->min_kern = -tk->min_kern;
break;
case AFM_TOKEN_ENDTRACKKERN:
@ -754,7 +751,7 @@
case AFM_TOKEN_ENDFONTMETRICS:
fi->NumKernPair = n + 1;
ft_qsort( fi->KernPairs, fi->NumKernPair,
sizeof( AFM_KernPairRec ),
sizeof ( AFM_KernPairRec ),
afm_compare_kern_pairs );
return PSaux_Err_Ok;

View file

@ -4,7 +4,7 @@
/* */
/* PS auxiliary module error codes (specification only). */
/* */
/* Copyright 2001 by */
/* Copyright 2001, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -30,6 +30,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PSaux_Err_
#define FT_ERR_BASE FT_Mod_Err_PSaux

View file

@ -123,7 +123,7 @@
const FT_Module_Class psaux_module_class =
{
0,
sizeof( FT_ModuleRec ),
sizeof ( FT_ModuleRec ),
"psaux",
0x20000L,
0x20000L,

View file

@ -4,7 +4,7 @@
/* */
/* Some convenience conversions (body). */
/* */
/* Copyright 2006, 2008, 2009 by */
/* Copyright 2006, 2008, 2009, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -79,7 +79,7 @@
FT_Bool sign = 0;
if ( p == limit || base < 2 || base > 36 )
if ( p >= limit || base < 2 || base > 36 )
return 0;
if ( *p == '-' || *p == '+' )
@ -150,7 +150,7 @@
FT_Bool sign = 0;
if ( p == limit )
if ( p >= limit )
return 0;
if ( *p == '-' || *p == '+' )
@ -347,6 +347,10 @@
#if 1
p = *cursor;
if ( p >= limit )
return 0;
if ( n > (FT_UInt)( limit - p ) )
n = (FT_UInt)( limit - p );
@ -434,6 +438,10 @@
#if 1
p = *cursor;
if ( p >= limit )
return 0;
if ( n > (FT_UInt)(limit - p) )
n = (FT_UInt)(limit - p);

View file

@ -4,7 +4,7 @@
/* */
/* Auxiliary functions for PostScript fonts (body). */
/* */
/* Copyright 1996-2011 by */
/* Copyright 1996-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -589,7 +589,7 @@
}
Exit:
if ( cur == parser->cursor )
if ( cur < limit && cur == parser->cursor )
{
FT_ERROR(( "ps_parser_skip_PS_token:"
" current token is `%c' which is self-delimiting\n"

View file

@ -4,7 +4,7 @@
/* */
/* Type 1 character map support (body). */
/* */
/* Copyright 2002, 2003, 2006, 2007 by */
/* Copyright 2002, 2003, 2006, 2007, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -264,7 +264,7 @@
/*************************************************************************/
FT_CALLBACK_DEF( const char * )
t1_get_glyph_name( T1_Face face,
psaux_get_glyph_name( T1_Face face,
FT_UInt idx )
{
return face->type1.glyph_names[idx];
@ -282,7 +282,7 @@
return psnames->unicodes_init( memory,
unicodes,
face->type1.num_glyphs,
(PS_GetGlyphNameFunc)&t1_get_glyph_name,
(PS_GetGlyphNameFunc)&psaux_get_glyph_name,
(PS_FreeGlyphNameFunc)NULL,
(FT_Pointer)face );
}

View file

@ -400,7 +400,7 @@
if ( decoder->buildchar && decoder->len_buildchar > 0 )
ft_memset( &decoder->buildchar[0],
0,
sizeof( decoder->buildchar[0] ) * decoder->len_buildchar );
sizeof ( decoder->buildchar[0] ) * decoder->len_buildchar );
FT_TRACE4(( "\n"
"Start charstring\n" ));
@ -880,7 +880,7 @@
ft_memcpy( &decoder->buildchar[idx],
blend->weight_vector,
blend->num_designs *
sizeof( blend->weight_vector[0] ) );
sizeof ( blend->weight_vector[0] ) );
}
break;
@ -1113,7 +1113,7 @@
FT_TRACE4(( "BuildCharArray = [ " ));
for ( i = 0; i < decoder->len_buildchar; ++i )
FT_TRACE4(( "%d ", decoder->buildchar[ i ] ));
FT_TRACE4(( "%d ", decoder->buildchar[i] ));
FT_TRACE4(( "]\n" ));
}

View file

@ -4,7 +4,7 @@
/* */
/* PS Hinter error codes (specification only). */
/* */
/* Copyright 2003 by */
/* Copyright 2003, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -29,6 +29,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PSH_Err_
#define FT_ERR_BASE FT_Mod_Err_PShinter

View file

@ -20,17 +20,22 @@
#include FT_FREETYPE_H
#include FT_INTERNAL_OBJECTS_H
#include "pshpic.h"
#include "pshnterr.h"
#ifdef FT_CONFIG_OPTION_PIC
/* forward declaration of PIC init functions from pshmod.c */
void FT_Init_Class_pshinter_interface( FT_Library, PSHinter_Interface*);
void
FT_Init_Class_pshinter_interface( FT_Library library,
PSHinter_Interface* clazz );
void
pshinter_module_class_pic_free( FT_Library library )
{
FT_PIC_Container* pic_container = &library->pic_container;
FT_Memory memory = library->memory;
if ( pic_container->pshinter )
{
FT_FREE( pic_container->pshinter );
@ -55,11 +60,12 @@
pic_container->pshinter = container;
/* add call to initialization function when you add new scripts */
FT_Init_Class_pshinter_interface(library, &container->pshinter_interface);
FT_Init_Class_pshinter_interface(
library, &container->pshinter_interface );
/*Exit:*/
if(error)
pshinter_module_class_pic_free(library);
if( error )
pshinter_module_class_pic_free( library );
return error;
}

View file

@ -40,6 +40,12 @@ FT_BEGIN_HEADER
#define GET_PIC(lib) ((PSHinterPIC*)((lib)->pic_container.autofit))
#define FTPSHINTER_INTERFACE_GET (GET_PIC(library)->pshinter_interface)
/* see pshpic.c for the implementation */
void
pshinter_module_class_pic_free( FT_Library library );
FT_Error
pshinter_module_class_pic_init( FT_Library library );
#endif /* FT_CONFIG_OPTION_PIC */

View file

@ -563,7 +563,19 @@
psnames_get_service( FT_Module module,
const char* service_id )
{
/* FT_PSCMAPS_SERVICES_GET derefers `library' in PIC mode */
#ifdef FT_CONFIG_OPTION_PIC
FT_Library library;
if ( !module )
return NULL;
library = module->library;
if ( !library )
return NULL;
#else
FT_UNUSED( module );
#endif
return ft_service_list_lookup( FT_PSCMAPS_SERVICES_GET, service_id );
}

View file

@ -4,7 +4,7 @@
/* */
/* PS names module error codes (specification only). */
/* */
/* Copyright 2001 by */
/* Copyright 2001, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -30,6 +30,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PSnames_Err_
#define FT_ERR_BASE FT_Mod_Err_PSnames

View file

@ -20,24 +20,37 @@
#include FT_FREETYPE_H
#include FT_INTERNAL_OBJECTS_H
#include "pspic.h"
#include "psnamerr.h"
#ifdef FT_CONFIG_OPTION_PIC
/* forward declaration of PIC init functions from psmodule.c */
FT_Error FT_Create_Class_pscmaps_services( FT_Library, FT_ServiceDescRec**);
void FT_Destroy_Class_pscmaps_services( FT_Library, FT_ServiceDescRec*);
void FT_Init_Class_pscmaps_interface( FT_Library, FT_Service_PsCMapsRec*);
FT_Error
FT_Create_Class_pscmaps_services( FT_Library library,
FT_ServiceDescRec** output_class );
void
FT_Destroy_Class_pscmaps_services( FT_Library library,
FT_ServiceDescRec* clazz );
void
FT_Init_Class_pscmaps_interface( FT_Library library,
FT_Service_PsCMapsRec* clazz );
void
psnames_module_class_pic_free( FT_Library library )
{
FT_PIC_Container* pic_container = &library->pic_container;
FT_Memory memory = library->memory;
if ( pic_container->psnames )
{
PSModulePIC* container = (PSModulePIC*)pic_container->psnames;
if(container->pscmaps_services)
FT_Destroy_Class_pscmaps_services(library, container->pscmaps_services);
FT_Destroy_Class_pscmaps_services( library,
container->pscmaps_services );
container->pscmaps_services = NULL;
FT_FREE( container );
pic_container->psnames = NULL;
@ -57,18 +70,20 @@
/* allocate pointer, clear and set global container pointer */
if ( FT_ALLOC ( container, sizeof ( *container ) ) )
return error;
FT_MEM_SET( container, 0, sizeof(*container) );
FT_MEM_SET( container, 0, sizeof ( *container ) );
pic_container->psnames = container;
/* initialize pointer table - this is how the module usually expects this data */
error = FT_Create_Class_pscmaps_services(library, &container->pscmaps_services);
if(error)
error = FT_Create_Class_pscmaps_services(
library, &container->pscmaps_services );
if ( error )
goto Exit;
FT_Init_Class_pscmaps_interface(library, &container->pscmaps_interface);
FT_Init_Class_pscmaps_interface( library,
&container->pscmaps_interface );
Exit:
if(error)
psnames_module_class_pic_free(library);
if ( error )
psnames_module_class_pic_free( library );
return error;
}

View file

@ -42,6 +42,13 @@ FT_BEGIN_HEADER
#define FT_PSCMAPS_SERVICES_GET (GET_PIC(library)->pscmaps_services)
#define FT_PSCMAPS_INTERFACE_GET (GET_PIC(library)->pscmaps_interface)
/* see pspic.c for the implementation */
void
psnames_module_class_pic_free( FT_Library library );
FT_Error
psnames_module_class_pic_init( FT_Library library );
#endif /* FT_CONFIG_OPTION_PIC */
/* */

View file

@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer (body). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2005, 2007, 2008, 2009, 2010, 2011 by */
/* Copyright 1996-2003, 2005, 2007-2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -369,18 +369,23 @@
/* Simple record used to implement a stack of bands, required */
/* by the sub-banding mechanism */
typedef struct TBand_
typedef struct black_TBand_
{
Short y_min; /* band's minimum */
Short y_max; /* band's maximum */
} TBand;
} black_TBand;
#define AlignProfileSize \
( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( long ) )
#undef RAS_ARG
#undef RAS_ARGS
#undef RAS_VAR
#undef RAS_VARS
#ifdef FT_STATIC_RASTER
@ -396,8 +401,8 @@
#else /* !FT_STATIC_RASTER */
#define RAS_ARGS PWorker worker,
#define RAS_ARG PWorker worker
#define RAS_ARGS black_PWorker worker,
#define RAS_ARG black_PWorker worker
#define RAS_VARS worker,
#define RAS_VAR worker
@ -408,7 +413,7 @@
#endif /* !FT_STATIC_RASTER */
typedef struct TWorker_ TWorker, *PWorker;
typedef struct black_TWorker_ black_TWorker, *black_PWorker;
/* prototypes used for sweep function dispatch */
@ -428,6 +433,10 @@
/* NOTE: These operations are only valid on 2's complement processors */
#undef FLOOR
#undef CEILING
#undef TRUNC
#undef SCALED
#define FLOOR( x ) ( (x) & -ras.precision )
#define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision )
@ -442,7 +451,7 @@
/* Thus, their offset can be coded with less opcodes, resulting in a */
/* smaller executable. */
struct TWorker_
struct black_TWorker_
{
Int precision_bits; /* precision related variables */
Int precision;
@ -515,7 +524,7 @@
TPoint arcs[3 * MaxBezier + 1]; /* The Bezier stack */
TBand band_stack[16]; /* band stack used for sub-banding */
black_TBand band_stack[16]; /* band stack used for sub-banding */
Int band_top; /* band stack top */
#ifdef FT_RASTER_OPTION_ANTI_ALIASING
@ -540,20 +549,20 @@
};
typedef struct TRaster_
typedef struct black_TRaster_
{
char* buffer;
long buffer_size;
void* memory;
PWorker worker;
black_PWorker worker;
Byte grays[5];
Short gray_width;
} TRaster, *PRaster;
} black_TRaster, *black_PRaster;
#ifdef FT_STATIC_RASTER
static TWorker cur_ras;
static black_TWorker cur_ras;
#define ras cur_ras
#else /* !FT_STATIC_RASTER */
@ -3391,7 +3400,7 @@
static void
ft_black_init( PRaster raster )
ft_black_init( black_PRaster raster )
{
#ifdef FT_RASTER_OPTION_ANTI_ALIASING
FT_UInt n;
@ -3419,7 +3428,7 @@
ft_black_new( void* memory,
FT_Raster *araster )
{
static TRaster the_raster;
static black_TRaster the_raster;
FT_UNUSED( memory );
@ -3444,10 +3453,10 @@
static int
ft_black_new( FT_Memory memory,
PRaster *araster )
black_PRaster *araster )
{
FT_Error error;
PRaster raster = NULL;
black_PRaster raster = NULL;
*araster = 0;
@ -3464,9 +3473,11 @@
static void
ft_black_done( PRaster raster )
ft_black_done( black_PRaster raster )
{
FT_Memory memory = (FT_Memory)raster->memory;
FT_FREE( raster );
}
@ -3475,15 +3486,15 @@
static void
ft_black_reset( PRaster raster,
ft_black_reset( black_PRaster raster,
char* pool_base,
long pool_size )
{
if ( raster )
{
if ( pool_base && pool_size >= (long)sizeof(TWorker) + 2048 )
if ( pool_base && pool_size >= (long)sizeof ( black_TWorker ) + 2048 )
{
PWorker worker = (PWorker)pool_base;
black_PWorker worker = (black_PWorker)pool_base;
raster->buffer = pool_base + ( ( sizeof ( *worker ) + 7 ) & ~7 );
@ -3501,7 +3512,7 @@
static void
ft_black_set_mode( PRaster raster,
ft_black_set_mode( black_PRaster raster,
unsigned long mode,
const char* palette )
{
@ -3528,12 +3539,12 @@
static int
ft_black_render( PRaster raster,
ft_black_render( black_PRaster raster,
const FT_Raster_Params* params )
{
const FT_Outline* outline = (const FT_Outline*)params->source;
const FT_Bitmap* target_map = params->target;
PWorker worker;
black_PWorker worker;
if ( !raster || !raster->buffer || !raster->buffer_size )

View file

@ -244,10 +244,10 @@
}
FT_DEFINE_RENDERER(ft_raster1_renderer_class,
FT_DEFINE_RENDERER( ft_raster1_renderer_class,
FT_MODULE_RENDERER,
sizeof( FT_RendererRec ),
sizeof ( FT_RendererRec ),
"raster1",
0x10000L,
@ -275,11 +275,10 @@
/* to register it by hand in your application. It should only be */
/* used for backwards-compatibility with FT 1.x anyway. */
/* */
FT_DEFINE_RENDERER(ft_raster5_renderer_class,
FT_DEFINE_RENDERER( ft_raster5_renderer_class,
FT_MODULE_RENDERER,
sizeof( FT_RendererRec ),
sizeof ( FT_RendererRec ),
"raster5",
0x10000L,

View file

@ -4,7 +4,7 @@
/* */
/* monochrome renderer error codes (specification only). */
/* */
/* Copyright 2001 by */
/* Copyright 2001, 2012 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -30,6 +30,7 @@
#undef __FTERRORS_H__
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX Raster_Err_
#define FT_ERR_BASE FT_Mod_Err_Raster

View file

@ -20,21 +20,25 @@
#include FT_FREETYPE_H
#include FT_INTERNAL_OBJECTS_H
#include "rastpic.h"
#include "rasterrs.h"
#ifdef FT_CONFIG_OPTION_PIC
/* forward declaration of PIC init functions from ftraster.c */
void FT_Init_Class_ft_standard_raster(FT_Raster_Funcs*);
void
FT_Init_Class_ft_standard_raster( FT_Raster_Funcs* funcs );
void
ft_raster1_renderer_class_pic_free( FT_Library library )
{
FT_PIC_Container* pic_container = &library->pic_container;
FT_Memory memory = library->memory;
if ( pic_container->raster )
{
RasterPIC* container = (RasterPIC*)pic_container->raster;
if(--container->ref_count)
if ( --container->ref_count )
return;
FT_FREE( container );
pic_container->raster = NULL;
@ -60,28 +64,31 @@
}
/* allocate pointer, clear and set global container pointer */
if ( FT_ALLOC ( container, sizeof ( *container ) ) )
if ( FT_ALLOC( container, sizeof ( *container ) ) )
return error;
FT_MEM_SET( container, 0, sizeof(*container) );
FT_MEM_SET( container, 0, sizeof ( *container ) );
pic_container->raster = container;
container->ref_count = 1;
/* initialize pointer table - this is how the module usually expects this data */
FT_Init_Class_ft_standard_raster(&container->ft_standard_raster);
FT_Init_Class_ft_standard_raster( &container->ft_standard_raster );
/*Exit:*/
if(error)
ft_raster1_renderer_class_pic_free(library);
if( error )
ft_raster1_renderer_class_pic_free( library );
return error;
}
/* re-route these init and free functions to the above functions */
FT_Error ft_raster5_renderer_class_pic_init(FT_Library library)
FT_Error
ft_raster5_renderer_class_pic_init( FT_Library library )
{
return ft_raster1_renderer_class_pic_init(library);
return ft_raster1_renderer_class_pic_init( library );
}
void ft_raster5_renderer_class_pic_free(FT_Library library)
void
ft_raster5_renderer_class_pic_free( FT_Library library )
{
ft_raster1_renderer_class_pic_free(library);
ft_raster1_renderer_class_pic_free( library );
}
#endif /* FT_CONFIG_OPTION_PIC */

Some files were not shown because too many files have changed in this diff Show more