macOS: update freetype to 2.11.1 plus a fixed Info.plist binary name

This commit is contained in:
Alex Szpakowski
2022-02-05 17:15:20 -04:00
parent 0722f25522
commit 402eed62c2
57 changed files with 2175 additions and 543 deletions
@@ -4,7 +4,7 @@
*
* ANSI-specific configuration file (specification only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* Build macros of the FreeType 2 library.
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -19,12 +19,14 @@ 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_Driver_ClassRec, bdf_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_Driver_ClassRec, bdf_driver_class )
FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_bitmap_sdf_renderer_class )
/* EOF */
@@ -4,7 +4,7 @@
*
* User-selectable configuration macros (specification only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -105,8 +105,7 @@ FT_BEGIN_HEADER
*
* ```
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
* cff:no-stem-darkening=1 \
* autofitter:warping=1
* cff:no-stem-darkening=1
* ```
*
*/
@@ -431,6 +430,23 @@ FT_BEGIN_HEADER
/* #define FT_DEBUG_LEVEL_TRACE */
/**************************************************************************
*
* Logging
*
* Compiling FreeType in debug or trace mode makes FreeType write error
* and trace log messages to `stderr`. Enabling this macro
* automatically forces the `FT_DEBUG_LEVEL_ERROR` and
* `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and
* trace log messages to a file instead of `stderr`. For writing logs
* to a file, FreeType uses an the external `dlg` library (the source
* code is in `src/dlg`).
*
* This option needs a C99 compiler.
*/
/* #define FT_DEBUG_LOGGING */
/**************************************************************************
*
* Autofitter debugging
@@ -892,24 +908,6 @@ FT_BEGIN_HEADER
#endif
/**************************************************************************
*
* Compile 'autofit' module with warp hinting. The idea of the warping
* code is to slightly scale and shift a glyph within a single dimension so
* that as much of its segments are aligned (more or less) on the grid. To
* find out the optimal scaling and shifting value, various parameter
* combinations are tried and scored.
*
* You can switch warping on and off with the `warping` property of the
* auto-hinter (see file `ftdriver.h` for more information; by default it
* is switched off).
*
* This experimental option is not active if the rendering mode is
* `FT_RENDER_MODE_LIGHT`.
*/
#define AF_CONFIG_OPTION_USE_WARPER
/**************************************************************************
*
* Use TrueType-like size metrics for 'light' auto-hinting.
@@ -961,6 +959,21 @@ FT_BEGIN_HEADER
#endif
/*
* The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this
* version of FreeType has support for 'COLR' v1 API. This definition is
* useful to FreeType clients that want to build in support for 'COLR' v1
* depending on a tip-of-tree checkout before it is officially released in
* FreeType, and while the feature cannot yet be tested against using
* version macros. Don't change this macro. This may be removed once the
* feature is in a FreeType release version and version macros can be used
* to test for availability.
*/
#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
#define TT_SUPPORT_COLRV1
#endif
/*
* Check CFF darkening parameters. The checks are the same as in function
* `cff_property_set` in file `cffdrivr.c`.
@@ -5,7 +5,7 @@
* ANSI-specific library and header configuration file (specification
* only).
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -43,7 +43,8 @@
*
* `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of
* `int` and `long` in bytes at compile-time. So far, this works for all
* platforms the library has been tested on.
* platforms the library has been tested on. We also check `ULLONG_MAX`
* to see whether we can use 64-bit `long long` later on.
*
* Note that on the extremely rare platforms that do not provide integer
* types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where
@@ -66,6 +67,15 @@
#define FT_LONG_MIN LONG_MIN
#define FT_LONG_MAX LONG_MAX
#define FT_ULONG_MAX ULONG_MAX
#ifdef LLONG_MAX
#define FT_LLONG_MAX LLONG_MAX
#endif
#ifdef LLONG_MIN
#define FT_LLONG_MIN LLONG_MIN
#endif
#ifdef ULLONG_MAX
#define FT_ULLONG_MAX ULLONG_MAX
#endif
/**************************************************************************
@@ -4,7 +4,7 @@
*
* FreeType integer types definitions.
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -60,6 +60,18 @@
#endif /* !defined(FT_SIZEOF_LONG) */
#ifndef FT_SIZEOF_LONG_LONG
/* The size of a `long long` type if available */
#if defined( FT_ULLONG_MAX ) && FT_ULLONG_MAX >= 0xFFFFFFFFFFFFFFFFULL
#define FT_SIZEOF_LONG_LONG ( 64 / FT_CHAR_BIT )
#else
#define FT_SIZEOF_LONG_LONG 0
#endif
#endif /* !defined(FT_SIZEOF_LONG_LONG) */
/**************************************************************************
*
* @section:
@@ -174,15 +186,17 @@
#endif
/* determine whether we have a 64-bit `int` type for platforms without */
/* Autoconf */
/* determine whether we have a 64-bit integer type */
#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
/* `FT_LONG64` must be defined if a 64-bit type is available */
#define FT_LONG64
#define FT_INT64 long
#define FT_UINT64 unsigned long
#elif FT_SIZEOF_LONG_LONG >= ( 64 / FT_CHAR_BIT )
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
/**************************************************************************
*
* A 64-bit data type may create compilation problems if you compile in
@@ -192,16 +206,9 @@
*/
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
/* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
@@ -211,7 +218,6 @@
/* to test the compiler version. */
/* this compiler provides the `__int64` type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
@@ -221,22 +227,20 @@
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#elif defined( __GNUC__ )
/* GCC provides the `long long` type */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#endif /* __STDC_VERSION__ >= 199901L */
#endif /* !__STDC__ */
#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
#ifdef FT_LONG64
#ifdef FT_INT64
typedef FT_INT64 FT_Int64;
typedef FT_UINT64 FT_UInt64;
#endif
@@ -4,7 +4,7 @@
*
* Mac/OS X support configuration header.
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* Define a set of compiler macros used in public FreeType headers.
*
* Copyright (C) 2020 by
* Copyright (C) 2020-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -103,6 +103,7 @@ FT_BEGIN_HEADER
*/
#define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x
/*
* `FT_UNUSED` indicates that a given parameter is not used -- this is
* only used to get rid of unpleasant compiler warnings.
@@ -115,6 +116,23 @@ FT_BEGIN_HEADER
#endif
/*
* Support for casts in both C and C++.
*/
#ifdef __cplusplus
#define FT_STATIC_CAST( type, var ) static_cast<type>(var)
#define FT_REINTERPRET_CAST( type, var ) reinterpret_cast<type>(var)
#define FT_STATIC_BYTE_CAST( type, var ) \
static_cast<type>( static_cast<unsigned char>( var ) )
#else
#define FT_STATIC_CAST( type, var ) (type)(var)
#define FT_REINTERPRET_CAST( type, var ) (type)(var)
#define FT_STATIC_BYTE_CAST( type, var ) (type)(unsigned char)(var)
#endif
FT_END_HEADER
#endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */
@@ -4,7 +4,7 @@
*
* FreeType high-level API and common types (specification only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -30,6 +30,34 @@ FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* preamble
*
* @title:
* Preamble
*
* @abstract:
* What FreeType is and isn't
*
* @description:
* FreeType is a library that provides access to glyphs in font files. It
* scales the glyph images and their metrics to a requested size, and it
* rasterizes the glyph images to produce pixel or subpixel alpha coverage
* bitmaps.
*
* Note that FreeType is _not_ a text layout engine. You have to use
* higher-level libraries like HarfBuzz, Pango, or ICU for that.
*
* Note also that FreeType does _not_ perform alpha blending or
* compositing the resulting bitmaps or pixmaps by itself. Use your
* favourite graphics library (for example, Cairo or Skia) to further
* process FreeType's output.
*
*/
/**************************************************************************
*
* @section:
@@ -176,6 +204,7 @@ FT_BEGIN_HEADER
* FT_Size_RequestRec
* FT_Size_Request
* FT_Set_Transform
* FT_Get_Transform
* FT_Load_Glyph
* FT_Get_Char_Index
* FT_Get_First_Char
@@ -587,11 +616,12 @@ FT_BEGIN_HEADER
*/
#ifndef FT_ENC_TAG
#define FT_ENC_TAG( value, a, b, c, d ) \
value = ( ( (FT_UInt32)(a) << 24 ) | \
( (FT_UInt32)(b) << 16 ) | \
( (FT_UInt32)(c) << 8 ) | \
(FT_UInt32)(d) )
value = ( ( FT_STATIC_BYTE_CAST( FT_UInt32, a ) << 24 ) | \
( FT_STATIC_BYTE_CAST( FT_UInt32, b ) << 16 ) | \
( FT_STATIC_BYTE_CAST( FT_UInt32, c ) << 8 ) | \
FT_STATIC_BYTE_CAST( FT_UInt32, d ) )
#endif /* FT_ENC_TAG */
@@ -701,11 +731,16 @@ FT_BEGIN_HEADER
* Same as FT_ENCODING_JOHAB. Deprecated.
*
* @note:
* By default, FreeType enables a Unicode charmap and tags it with
* `FT_ENCODING_UNICODE` when it is either provided or can be generated
* from PostScript glyph name dictionaries in the font file. All other
* encodings are considered legacy and tagged only if explicitly defined
* in the font file. Otherwise, `FT_ENCODING_NONE` is used.
* When loading a font, FreeType makes a Unicode charmap active if
* possible (either if the font provides such a charmap, or if FreeType
* can synthesize one from PostScript glyph name dictionaries; in either
* case, the charmap is tagged with `FT_ENCODING_UNICODE`). If such a
* charmap is synthesized, it is placed at the first position of the
* charmap array.
*
* All other encodings are considered legacy and tagged only if
* explicitly defined in the font file. Otherwise, `FT_ENCODING_NONE` is
* used.
*
* `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is
* neither Unicode nor ISO-8859-1 (otherwise it is set to
@@ -2065,7 +2100,8 @@ FT_BEGIN_HEADER
* The size in bytes of the file in memory.
*
* pathname ::
* A pointer to an 8-bit file pathname. The pointer is not owned by
* A pointer to an 8-bit file pathname, which must be a C~string (i.e.,
* no null bytes except at the very end). The pointer is not owned by
* FreeType.
*
* stream ::
@@ -2084,8 +2120,7 @@ FT_BEGIN_HEADER
* Extra parameters passed to the font driver when opening a new face.
*
* @note:
* The stream type is determined by the contents of `flags` that are
* tested in the following order by @FT_Open_Face:
* The stream type is determined by the contents of `flags`:
*
* If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file
* of `memory_size` bytes, located at `memory_address`. The data are not
@@ -2098,6 +2133,9 @@ FT_BEGIN_HEADER
* Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a
* normal file and use `pathname` to open it.
*
* If none of the above bits are set or if multiple are set at the same
* time, the flags are invalid and @FT_Open_Face fails.
*
* If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open
* the file with the driver whose handler is in `driver`.
*
@@ -2150,6 +2188,13 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success.
*
* @note:
* The `pathname` string should be recognizable as such by a standard
* `fopen` call on your system; in particular, this means that `pathname`
* must not contain null bytes. If that is not sufficient to address all
* file name possibilities (for example, to handle wide character file
* names on Windows in UTF-16 encoding) you might use @FT_Open_Face to
* pass a memory array or a stream object instead.
*
* Use @FT_Done_Face to destroy the created @FT_Face object (along with
* its slot and sizes).
*/
@@ -2270,6 +2315,10 @@ FT_BEGIN_HEADER
* See the discussion of reference counters in the description of
* @FT_Reference_Face.
*
* If `FT_OPEN_STREAM` is set in `args->flags`, the stream in
* `args->stream` is automatically closed before this function returns
* any error (including `FT_Err_Invalid_Argument`).
*
* @example:
* To loop over all faces, use code similar to the following snippet
* (omitting the error handling).
@@ -2428,6 +2477,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.4.2
*
*/
FT_EXPORT( FT_Error )
FT_Reference_Face( FT_Face face );
@@ -3132,7 +3182,7 @@ FT_BEGIN_HEADER
* necessary to empty the cache after a mode switch to avoid false hits.
*
*/
#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 )
#define FT_LOAD_TARGET_( x ) ( FT_STATIC_CAST( FT_Int32, (x) & 15 ) << 16 )
#define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL )
#define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT )
@@ -3151,7 +3201,8 @@ FT_BEGIN_HEADER
* @FT_LOAD_TARGET_XXX value.
*
*/
#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )
#define FT_LOAD_TARGET_MODE( x ) \
FT_STATIC_CAST( FT_Render_Mode, ( (x) >> 16 ) & 15 )
/**************************************************************************
@@ -3172,11 +3223,12 @@ FT_BEGIN_HEADER
* A pointer to the transformation's 2x2 matrix. Use `NULL` for the
* identity matrix.
* delta ::
* A pointer to the translation vector. Use `NULL` for the null vector.
* A pointer to the translation vector. Use `NULL` for the null
* vector.
*
* @note:
* This function is provided as a convenience, but keep in mind that
* @FT_Matrix coefficients are only 16.16 fixed point values, which can
* @FT_Matrix coefficients are only 16.16 fixed-point values, which can
* limit the accuracy of the results. Using floating-point computations
* to perform the transform directly in client code instead will always
* yield better numbers.
@@ -3195,6 +3247,39 @@ FT_BEGIN_HEADER
FT_Vector* delta );
/**************************************************************************
*
* @function:
* FT_Get_Transform
*
* @description:
* Return the transformation that is applied to glyph images when they
* are loaded into a glyph slot through @FT_Load_Glyph. See
* @FT_Set_Transform for more details.
*
* @input:
* face ::
* A handle to the source face object.
*
* @output:
* matrix ::
* A pointer to a transformation's 2x2 matrix. Set this to NULL if you
* are not interested in the value.
*
* delta ::
* A pointer a translation vector. Set this to NULL if you are not
* interested in the value.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Get_Transform( FT_Face face,
FT_Matrix* matrix,
FT_Vector* delta );
/**************************************************************************
*
* @enum:
@@ -3213,6 +3298,10 @@ FT_BEGIN_HEADER
* correction to correctly render non-monochrome glyph bitmaps onto a
* surface; see @FT_Render_Glyph.
*
* The @FT_RENDER_MODE_SDF is a special render mode that uses up to 256
* distance values, indicating the signed distance from the grid position
* to the nearest outline.
*
* @values:
* FT_RENDER_MODE_NORMAL ::
* Default render mode; it corresponds to 8-bit anti-aliased bitmaps.
@@ -3238,11 +3327,49 @@ FT_BEGIN_HEADER
* bitmaps that are 3~times the height of the original glyph outline in
* pixels and use the @FT_PIXEL_MODE_LCD_V mode.
*
* FT_RENDER_MODE_SDF ::
* This mode corresponds to 8-bit, single-channel signed distance field
* (SDF) bitmaps. Each pixel in the SDF grid is the value from the
* pixel's position to the nearest glyph's outline. The distances are
* calculated from the center of the pixel and are positive if they are
* filled by the outline (i.e., inside the outline) and negative
* otherwise. Check the note below on how to convert the output values
* to usable data.
*
* @note:
* The selected render mode only affects vector glyphs of a font.
* Embedded bitmaps often have a different pixel mode like
* @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform them
* into 8-bit pixmaps.
*
* For @FT_RENDER_MODE_SDF the output bitmap buffer contains normalized
* distances that are packed into unsigned 8-bit values. To get pixel
* values in floating point representation use the following pseudo-C
* code for the conversion.
*
* ```
* // Load glyph and render using FT_RENDER_MODE_SDF,
* // then use the output buffer as follows.
*
* ...
* FT_Byte buffer = glyph->bitmap->buffer;
*
*
* for pixel in buffer
* {
* // `sd` is the signed distance and `spread` is the current spread;
* // the default spread is 2 and can be changed.
*
* float sd = (float)pixel - 128.0f;
*
*
* // Convert to pixel values.
* sd = ( sd / 128.0f ) * spread;
*
* // Store `sd` in a buffer or use as required.
* }
*
* ```
*/
typedef enum FT_Render_Mode_
{
@@ -3251,6 +3378,7 @@ FT_BEGIN_HEADER
FT_RENDER_MODE_MONO,
FT_RENDER_MODE_LCD,
FT_RENDER_MODE_LCD_V,
FT_RENDER_MODE_SDF,
FT_RENDER_MODE_MAX
@@ -3338,7 +3466,8 @@ FT_BEGIN_HEADER
*
* which is known as the OVER operator.
*
* To correctly composite an antialiased pixel of a glyph onto a surface,
* To correctly composite an anti-aliased pixel of a glyph onto a
* surface,
*
* 1. take the foreground and background colors (e.g., in sRGB space)
* and apply gamma to get them in a linear space,
@@ -4015,168 +4144,6 @@ FT_BEGIN_HEADER
FT_Matrix *p_transform );
/**************************************************************************
*
* @section:
* layer_management
*
* @title:
* Glyph Layer Management
*
* @abstract:
* Retrieving and manipulating OpenType's 'COLR' table data.
*
* @description:
* The functions described here allow access of colored glyph layer data
* in OpenType's 'COLR' tables.
*/
/**************************************************************************
*
* @struct:
* FT_LayerIterator
*
* @description:
* This iterator object is needed for @FT_Get_Color_Glyph_Layer.
*
* @fields:
* num_layers ::
* The number of glyph layers for the requested glyph index. Will be
* set by @FT_Get_Color_Glyph_Layer.
*
* layer ::
* The current layer. Will be set by @FT_Get_Color_Glyph_Layer.
*
* p ::
* An opaque pointer into 'COLR' table data. The caller must set this
* to `NULL` before the first call of @FT_Get_Color_Glyph_Layer.
*/
typedef struct FT_LayerIterator_
{
FT_UInt num_layers;
FT_UInt layer;
FT_Byte* p;
} FT_LayerIterator;
/**************************************************************************
*
* @function:
* FT_Get_Color_Glyph_Layer
*
* @description:
* This is an interface to the 'COLR' table in OpenType fonts to
* iteratively retrieve the colored glyph layers associated with the
* current glyph slot.
*
* https://docs.microsoft.com/en-us/typography/opentype/spec/colr
*
* The glyph layer data for a given glyph index, if present, provides an
* alternative, multi-color glyph representation: Instead of rendering
* the outline or bitmap with the given glyph index, glyphs with the
* indices and colors returned by this function are rendered layer by
* layer.
*
* The returned elements are ordered in the z~direction from bottom to
* top; the 'n'th element should be rendered with the associated palette
* color and blended on top of the already rendered layers (elements 0,
* 1, ..., n-1).
*
* @input:
* face ::
* A handle to the parent face object.
*
* base_glyph ::
* The glyph index the colored glyph layers are associated with.
*
* @inout:
* iterator ::
* An @FT_LayerIterator object. For the first call you should set
* `iterator->p` to `NULL`. For all following calls, simply use the
* same object again.
*
* @output:
* aglyph_index ::
* The glyph index of the current layer.
*
* acolor_index ::
* The color index into the font face's color palette of the current
* layer. The value 0xFFFF is special; it doesn't reference a palette
* entry but indicates that the text foreground color should be used
* instead (to be set up by the application outside of FreeType).
*
* The color palette can be retrieved with @FT_Palette_Select.
*
* @return:
* Value~1 if everything is OK. If there are no more layers (or if there
* are no layers at all), value~0 gets returned. In case of an error,
* value~0 is returned also.
*
* @note:
* This function is necessary if you want to handle glyph layers by
* yourself. In particular, functions that operate with @FT_GlyphRec
* objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access
* to this information.
*
* Note that @FT_Render_Glyph is able to handle colored glyph layers
* automatically if the @FT_LOAD_COLOR flag is passed to a previous call
* to @FT_Load_Glyph. [This is an experimental feature.]
*
* @example:
* ```
* FT_Color* palette;
* FT_LayerIterator iterator;
*
* FT_Bool have_layers;
* FT_UInt layer_glyph_index;
* FT_UInt layer_color_index;
*
*
* error = FT_Palette_Select( face, palette_index, &palette );
* if ( error )
* palette = NULL;
*
* iterator.p = NULL;
* have_layers = FT_Get_Color_Glyph_Layer( face,
* glyph_index,
* &layer_glyph_index,
* &layer_color_index,
* &iterator );
*
* if ( palette && have_layers )
* {
* do
* {
* FT_Color layer_color;
*
*
* if ( layer_color_index == 0xFFFF )
* layer_color = text_foreground_color;
* else
* layer_color = palette[layer_color_index];
*
* // Load and render glyph `layer_glyph_index', then
* // blend resulting pixmap (using color `layer_color')
* // with previously created pixmaps.
*
* } while ( FT_Get_Color_Glyph_Layer( face,
* glyph_index,
* &layer_glyph_index,
* &layer_color_index,
* &iterator ) );
* }
* ```
*/
FT_EXPORT( FT_Bool )
FT_Get_Color_Glyph_Layer( FT_Face face,
FT_UInt base_glyph,
FT_UInt *aglyph_index,
FT_UInt *acolor_index,
FT_LayerIterator* iterator );
/**************************************************************************
*
* @section:
@@ -4267,6 +4234,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.8
*
*/
FT_EXPORT( FT_UShort )
FT_Get_FSType_Flags( FT_Face face );
@@ -4360,6 +4328,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.6
*
*/
FT_EXPORT( FT_UInt )
FT_Face_GetCharVariantIndex( FT_Face face,
@@ -4396,6 +4365,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.6
*
*/
FT_EXPORT( FT_Int )
FT_Face_GetCharVariantIsDefault( FT_Face face,
@@ -4427,6 +4397,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.6
*
*/
FT_EXPORT( FT_UInt32* )
FT_Face_GetVariantSelectors( FT_Face face );
@@ -4460,6 +4431,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.6
*
*/
FT_EXPORT( FT_UInt32* )
FT_Face_GetVariantsOfChar( FT_Face face,
@@ -4494,6 +4466,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.6
*
*/
FT_EXPORT( FT_UInt32* )
FT_Face_GetCharsOfVariant( FT_Face face,
@@ -4766,8 +4739,8 @@ FT_BEGIN_HEADER
*
*/
#define FREETYPE_MAJOR 2
#define FREETYPE_MINOR 10
#define FREETYPE_PATCH 4
#define FREETYPE_MINOR 11
#define FREETYPE_PATCH 1
/**************************************************************************
@@ -4829,6 +4802,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.5
*
*/
FT_EXPORT( FT_Bool )
FT_Face_CheckTrueTypePatents( FT_Face face );
@@ -4857,6 +4831,7 @@ FT_BEGIN_HEADER
*
* @since:
* 2.3.5
*
*/
FT_EXPORT( FT_Bool )
FT_Face_SetUnpatentedHinting( FT_Face face,
@@ -4,7 +4,7 @@
*
* FreeType 2 build and setup macros.
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* Quick computation of advance widths (specification only).
*
* Copyright (C) 2008-2020 by
* Copyright (C) 2008-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType exact bbox computation (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType API for accessing BDF-specific strings (specification).
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType utility functions for bitmaps (specification).
*
* Copyright (C) 2004-2020 by
* Copyright (C) 2004-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* Bzip2-compressed stream support.
*
* Copyright (C) 2010-2020 by
* Copyright (C) 2010-2021 by
* Joel Klinghed.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType Cache subsystem (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -86,8 +86,8 @@ FT_BEGIN_HEADER
* later use @FTC_CMapCache_Lookup to perform the equivalent of
* @FT_Get_Char_Index, only much faster.
*
* If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then
* later use @FTC_ImageCache_Lookup to retrieve the corresponding
* If you want to use the @FT_Glyph caching, call @FTC_ImageCache_New,
* then later use @FTC_ImageCache_Lookup to retrieve the corresponding
* @FT_Glyph objects from the cache.
*
* If you need lots of small bitmaps, it is much more memory efficient to
@@ -15,6 +15,7 @@
* General Remarks
*
* @sections:
* preamble
* header_inclusion
* user_allocation
*
@@ -123,6 +124,7 @@
* gzip
* lzw
* bzip2
* debugging_apis
*
*/
@@ -4,7 +4,7 @@
*
* FreeType API for accessing CID font information (specification).
*
* Copyright (C) 2007-2020 by
* Copyright (C) 2007-2021 by
* Dereg Clegg and Michael Toftdal.
*
* This file is part of the FreeType project, and may only be used,
File diff suppressed because it is too large Load Diff
@@ -4,7 +4,7 @@
*
* FreeType API for controlling driver modules (specification only).
*
* Copyright (C) 2017-2020 by
* Copyright (C) 2017-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -53,10 +53,10 @@ FT_BEGIN_HEADER
* reasons.
*
* Available properties are @increase-x-height, @no-stem-darkening
* (experimental), @darkening-parameters (experimental), @warping
* (experimental), @glyph-to-script-map (experimental), @fallback-script
* (experimental), and @default-script (experimental), as documented in
* the @properties section.
* (experimental), @darkening-parameters (experimental),
* @glyph-to-script-map (experimental), @fallback-script (experimental),
* and @default-script (experimental), as documented in the @properties
* section.
*
*/
@@ -84,15 +84,15 @@ FT_BEGIN_HEADER
* @properties section.
*
*
* **Hinting and antialiasing principles of the new engine**
* **Hinting and anti-aliasing principles of the new engine**
*
* The rasterizer is positioning horizontal features (e.g., ascender
* height & x-height, or crossbars) on the pixel grid and minimizing the
* amount of antialiasing applied to them, while placing vertical
* amount of anti-aliasing applied to them, while placing vertical
* features (vertical stems) on the pixel grid without hinting, thus
* representing the stem position and weight accurately. Sometimes the
* vertical stems may be only partially black. In this context,
* 'antialiasing' means that stems are not positioned exactly on pixel
* 'anti-aliasing' means that stems are not positioned exactly on pixel
* borders, causing a fuzzy appearance.
*
* There are two principles behind this approach.
@@ -108,7 +108,7 @@ FT_BEGIN_HEADER
* sizes are comparable to kerning values and thus would be noticeable
* (and distracting) while reading if hinting were applied.
*
* One of the reasons to not hint horizontally is antialiasing for LCD
* One of the reasons to not hint horizontally is anti-aliasing for LCD
* screens: The pixel geometry of modern displays supplies three vertical
* subpixels as the eye moves horizontally across each visible pixel. On
* devices where we can be certain this characteristic is present a
@@ -116,7 +116,7 @@ FT_BEGIN_HEADER
* weight. In Western writing systems this turns out to be the more
* critical direction anyway; the weights and spacing of vertical stems
* (see above) are central to Armenian, Cyrillic, Greek, and Latin type
* designs. Even when the rasterizer uses greyscale antialiasing instead
* designs. Even when the rasterizer uses greyscale anti-aliasing instead
* of color (a necessary compromise when one doesn't know the screen
* characteristics), the unhinted vertical features preserve the design's
* weight and spacing much better than aliased type would.
@@ -362,12 +362,8 @@ FT_BEGIN_HEADER
* The same holds for the Type~1 and CID modules if compiled with
* `T1_CONFIG_OPTION_OLD_ENGINE`.
*
* For the 'cff' module, the default engine is 'freetype' if
* `CFF_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe' otherwise.
*
* For both the 'type1' and 't1cid' modules, the default engine is
* 'freetype' if `T1_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe'
* otherwise.
* For the 'cff' module, the default engine is 'adobe'. For both the
* 'type1' and 't1cid' modules, the default engine is 'adobe', too.
*
* @note:
* This property can be used with @FT_Property_Get also.
@@ -1166,48 +1162,18 @@ FT_BEGIN_HEADER
* warping
*
* @description:
* **Experimental only**
* **Obsolete**
*
* If FreeType gets compiled with option `AF_CONFIG_OPTION_USE_WARPER` to
* activate the warp hinting code in the auto-hinter, this property
* switches warping on and off.
* This property was always experimental and probably never worked
* correctly. It was entirely removed from the FreeType~2 sources. This
* entry is only here for historical reference.
*
* Warping only works in 'normal' auto-hinting mode replacing it. The
* idea of the code is to slightly scale and shift a glyph along the
* Warping only worked in 'normal' auto-hinting mode replacing it. The
* idea of the code was to slightly scale and shift a glyph along the
* non-hinted dimension (which is usually the horizontal axis) so that as
* much of its segments are aligned (more or less) to the grid. To find
* much of its segments were aligned (more or less) to the grid. To find
* out a glyph's optimal scaling and shifting value, various parameter
* combinations are tried and scored.
*
* By default, warping is off.
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* This property can be set via the `FREETYPE_PROPERTIES` environment
* variable (using values 1 and 0 for 'on' and 'off', respectively).
*
* The warping code can also change advance widths. Have a look at the
* `lsb_delta` and `rsb_delta` fields in the @FT_GlyphSlotRec structure
* for details on improving inter-glyph distances while rendering.
*
* Since warping is a global property of the auto-hinter it is best to
* change its value before rendering any face. Otherwise, you should
* reload all faces that get auto-hinted in 'normal' hinting mode.
*
* @example:
* This example shows how to switch on warping (omitting the error
* handling).
*
* ```
* FT_Library library;
* FT_Bool warping = 1;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "autofitter", "warping", &warping );
* ```
* combinations were tried and scored.
*
* @since:
* 2.6
@@ -4,7 +4,7 @@
*
* FreeType error codes (specification).
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType error code handling (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -281,6 +281,8 @@ FT_BEGIN_HEADER
FT_EXPORT( const char* )
FT_Error_String( FT_Error error_code );
/* */
FT_END_HEADER
@@ -4,7 +4,7 @@
*
* Support functions for font formats.
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* Access of TrueType's 'gasp' table (specification).
*
* Copyright (C) 2007-2020 by
* Copyright (C) 2007-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType convenience functions to handle glyphs (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -338,8 +338,8 @@ FT_BEGIN_HEADER
*/
FT_EXPORT( FT_Error )
FT_Glyph_Transform( FT_Glyph glyph,
FT_Matrix* matrix,
FT_Vector* delta );
const FT_Matrix* matrix,
const FT_Vector* delta );
/**************************************************************************
@@ -571,7 +571,7 @@ FT_BEGIN_HEADER
FT_EXPORT( FT_Error )
FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
FT_Render_Mode render_mode,
FT_Vector* origin,
const FT_Vector* origin,
FT_Bool destroy );
@@ -4,7 +4,7 @@
*
* FreeType API for validating TrueTypeGX/AAT tables (specification).
*
* Copyright (C) 2004-2020 by
* Copyright (C) 2004-2021 by
* Masatake YAMATO, Redhat K.K,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -4,7 +4,7 @@
*
* Gzip-compressed stream support.
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -5,7 +5,7 @@
* FreeType glyph image formats and default raster interface
* (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -28,11 +28,6 @@
#define FTIMAGE_H_
/* STANDALONE_ is from ftgrays.c */
#ifndef STANDALONE_
#endif
FT_BEGIN_HEADER
@@ -201,6 +196,11 @@ FT_BEGIN_HEADER
#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2
#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4
/* */
/* For debugging, the @FT_Pixel_Mode enumeration must stay in sync */
/* with the `pixel_modes` array in file `ftobjs.c`. */
/**************************************************************************
*
@@ -695,11 +695,13 @@ FT_BEGIN_HEADER
* to get a simple enumeration without assigning special numbers.
*/
#ifndef FT_IMAGE_TAG
#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \
value = ( ( (unsigned long)_x1 << 24 ) | \
( (unsigned long)_x2 << 16 ) | \
( (unsigned long)_x3 << 8 ) | \
(unsigned long)_x4 )
value = ( ( FT_STATIC_BYTE_CAST( unsigned long, _x1 ) << 24 ) | \
( FT_STATIC_BYTE_CAST( unsigned long, _x2 ) << 16 ) | \
( FT_STATIC_BYTE_CAST( unsigned long, _x3 ) << 8 ) | \
FT_STATIC_BYTE_CAST( unsigned long, _x4 ) )
#endif /* FT_IMAGE_TAG */
@@ -772,17 +774,6 @@ FT_BEGIN_HEADER
/*************************************************************************/
/**************************************************************************
*
* A raster is a scan converter, in charge of rendering an outline into a
* bitmap. This section contains the public API for rasters.
*
* Note that in FreeType 2, all rasters are now encapsulated within
* specific modules called 'renderers'. See `ftrender.h` for more details
* on renderers.
*
*/
/**************************************************************************
*
@@ -796,16 +787,35 @@ FT_BEGIN_HEADER
* How vectorial outlines are converted into bitmaps and pixmaps.
*
* @description:
* This section contains technical definitions.
* A raster or a rasterizer is a scan converter in charge of producing a
* pixel coverage bitmap that can be used as an alpha channel when
* compositing a glyph with a background. FreeType comes with two
* rasterizers: bilevel `raster1` and anti-aliased `smooth` are two
* separate modules. They are usually called from the high-level
* @FT_Load_Glyph or @FT_Render_Glyph functions and produce the entire
* coverage bitmap at once, while staying largely invisible to users.
*
* Instead of working with complete coverage bitmaps, it is also possible
* to intercept consecutive pixel runs on the same scanline with the same
* coverage, called _spans_, and process them individually. Only the
* `smooth` rasterizer permits this when calling @FT_Outline_Render with
* @FT_Raster_Params as described below.
*
* Working with either complete bitmaps or spans it is important to think
* of them as colorless coverage objects suitable as alpha channels to
* blend arbitrary colors with a background. For best results, it is
* recommended to use gamma correction, too.
*
* This section also describes the public API needed to set up alternative
* @FT_Renderer modules.
*
* @order:
* FT_Raster
* FT_Span
* FT_SpanFunc
*
* FT_Raster_Params
* FT_RASTER_FLAG_XXX
*
* FT_Raster
* FT_Raster_NewFunc
* FT_Raster_DoneFunc
* FT_Raster_ResetFunc
@@ -816,26 +826,14 @@ FT_BEGIN_HEADER
*/
/**************************************************************************
*
* @type:
* FT_Raster
*
* @description:
* An opaque handle (pointer) to a raster object. Each object can be
* used independently to convert an outline into a bitmap or pixmap.
*/
typedef struct FT_RasterRec_* FT_Raster;
/**************************************************************************
*
* @struct:
* FT_Span
*
* @description:
* A structure used to model a single span of gray pixels when rendering
* an anti-aliased bitmap.
* A structure to model a single span of consecutive pixels when
* rendering an anti-aliased bitmap.
*
* @fields:
* x ::
@@ -852,8 +850,8 @@ FT_BEGIN_HEADER
* This structure is used by the span drawing callback type named
* @FT_SpanFunc that takes the y~coordinate of the span as a parameter.
*
* The coverage value is always between 0 and 255. If you want less gray
* values, the callback function has to reduce them.
* The anti-aliased rasterizer produces coverage values from 0 to 255,
* this is, from completely transparent to completely opaque.
*/
typedef struct FT_Span_
{
@@ -871,8 +869,8 @@ FT_BEGIN_HEADER
*
* @description:
* A function used as a call-back by the anti-aliased renderer in order
* to let client applications draw themselves the gray pixel spans on
* each scan line.
* to let client applications draw themselves the pixel spans on each
* scan line.
*
* @input:
* y ::
@@ -888,11 +886,12 @@ FT_BEGIN_HEADER
* User-supplied data that is passed to the callback.
*
* @note:
* This callback allows client applications to directly render the gray
* spans of the anti-aliased bitmap to any kind of surfaces.
* This callback allows client applications to directly render the spans
* of the anti-aliased bitmap to any kind of surfaces.
*
* This can be used to write anti-aliased outlines directly to a given
* background bitmap, and even perform translucency.
* background bitmap using alpha compositing. It can also be used for
* oversampling and averaging.
*/
typedef void
(*FT_SpanFunc)( int y,
@@ -962,11 +961,17 @@ FT_BEGIN_HEADER
* will be clipped to a box specified in the `clip_box` field of the
* @FT_Raster_Params structure. Otherwise, the `clip_box` is
* effectively set to the bounding box and all spans are generated.
*
* FT_RASTER_FLAG_SDF ::
* This flag is set to indicate that a signed distance field glyph
* image should be generated. This is only used while rendering with
* the @FT_RENDER_MODE_SDF render mode.
*/
#define FT_RASTER_FLAG_DEFAULT 0x0
#define FT_RASTER_FLAG_AA 0x1
#define FT_RASTER_FLAG_DIRECT 0x2
#define FT_RASTER_FLAG_CLIP 0x4
#define FT_RASTER_FLAG_SDF 0x8
/* these constants are deprecated; use the corresponding */
/* `FT_RASTER_FLAG_XXX` values instead */
@@ -1047,6 +1052,23 @@ FT_BEGIN_HEADER
} FT_Raster_Params;
/**************************************************************************
*
* @type:
* FT_Raster
*
* @description:
* An opaque handle (pointer) to a raster object. Each object can be
* used independently to convert an outline into a bitmap or pixmap.
*
* @note:
* In FreeType 2, all rasters are now encapsulated within specific
* @FT_Renderer modules and only used in their context.
*
*/
typedef struct FT_RasterRec_* FT_Raster;
/**************************************************************************
*
* @functype:
@@ -4,7 +4,7 @@
*
* FreeType incremental loading (specification).
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -213,9 +213,14 @@ FT_BEGIN_HEADER
*
* @description:
* A function used to retrieve the basic metrics of a given glyph index
* before accessing its data. This is necessary because, in certain
* formats like TrueType, the metrics are stored in a different place
* from the glyph images proper.
* before accessing its data. This allows for handling font types such
* as PCL~XL Format~1, Class~2 downloaded TrueType fonts, where the glyph
* metrics (`hmtx` and `vmtx` tables) are permitted to be omitted from
* the font, and the relevant metrics included in the header of the glyph
* outline data. Importantly, this is not intended to allow custom glyph
* metrics (for example, Postscript Metrics dictionaries), because that
* conflicts with the requirements of outline hinting. Such custom
* metrics must be handled separately, by the calling application.
*
* @input:
* incremental ::
@@ -235,7 +240,7 @@ FT_BEGIN_HEADER
*
* @output:
* ametrics ::
* The replacement glyph metrics in font units.
* The glyph metrics in font units.
*
*/
typedef FT_Error
@@ -264,7 +269,7 @@ FT_BEGIN_HEADER
*
* get_glyph_metrics ::
* The function to get glyph metrics. May be null if the font does not
* provide overriding glyph metrics.
* require it.
*
*/
typedef struct FT_Incremental_FuncsRec_
@@ -5,7 +5,7 @@
* FreeType API for color filtering of subpixel bitmap glyphs
* (specification).
*
* Copyright (C) 2006-2020 by
* Copyright (C) 2006-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -55,13 +55,12 @@ FT_BEGIN_HEADER
* ClearType-style LCD rendering exploits the color-striped structure of
* LCD pixels, increasing the available resolution in the direction of
* the stripe (usually horizontal RGB) by a factor of~3. Using the
* subpixels coverages unfiltered can create severe color fringes
* subpixel coverages unfiltered can create severe color fringes
* especially when rendering thin features. Indeed, to produce
* black-on-white text, the nearby color subpixels must be dimmed
* equally.
*
* A good 5-tap FIR filter should be applied to subpixel coverages
* regardless of pixel boundaries and should have these properties:
* evenly. Therefore, an equalizing 5-tap FIR filter should be applied
* to subpixel coverages regardless of pixel boundaries and should have
* these properties:
*
* 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid
* any shifts in appearance.
@@ -84,7 +83,7 @@ FT_BEGIN_HEADER
* Harmony LCD rendering is suitable to panels with any regular subpixel
* structure, not just monitors with 3 color striped subpixels, as long
* as the color subpixels have fixed positions relative to the pixel
* center. In this case, each color channel is then rendered separately
* center. In this case, each color channel can be rendered separately
* after shifting the outline opposite to the subpixel shift so that the
* coverage maps are aligned. This method is immune to color fringes
* because the shifts do not change integral coverage.
@@ -101,9 +100,9 @@ FT_BEGIN_HEADER
* clockwise. Harmony with default LCD geometry is equivalent to
* ClearType with light filter.
*
* As a result of ClearType filtering or Harmony rendering, the
* dimensions of LCD bitmaps can be either wider or taller than the
* dimensions of the corresponding outline with regard to the pixel grid.
* As a result of ClearType filtering or Harmony shifts, the resulting
* dimensions of LCD bitmaps can be slightly wider or taller than the
* dimensions the original outline with regard to the pixel grid.
* For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to
* the left, and 2~subpixels to the right. The bitmap offset values are
* adjusted accordingly, so clients shouldn't need to modify their layout
@@ -4,7 +4,7 @@
*
* Generic list support for FreeType (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -0,0 +1,184 @@
/****************************************************************************
*
* ftlogging.h
*
* Additional debugging APIs.
*
* Copyright (C) 2020-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
* modified, and distributed under the terms of the FreeType project
* license, LICENSE.TXT. By continuing to use, modify, or distribute
* this file you indicate that you have read the license and
* understand and accept it fully.
*
*/
#ifndef FTLOGGING_H_
#define FTLOGGING_H_
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* debugging_apis
*
* @title:
* External Debugging APIs
*
* @abstract:
* Public APIs to control the `FT_DEBUG_LOGGING` macro.
*
* @description:
* This section contains the declarations of public functions that
* enables fine control of what the `FT_DEBUG_LOGGING` macro outputs.
*
*/
/**************************************************************************
*
* @function:
* FT_Trace_Set_Level
*
* @description:
* Change the levels of tracing components of FreeType at run time.
*
* @input:
* tracing_level ::
* New tracing value.
*
* @example:
* The following call makes FreeType trace everything but the 'memory'
* component.
*
* ```
* FT_Trace_Set_Level( "any:7 memory:0 );
* ```
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Trace_Set_Level( const char* tracing_level );
/**************************************************************************
*
* @function:
* FT_Trace_Set_Default_Level
*
* @description:
* Reset tracing value of FreeType's components to the default value
* (i.e., to the value of the `FT2_DEBUG` environment value or to NULL
* if `FT2_DEBUG` is not set).
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Trace_Set_Default_Level( void );
/**************************************************************************
*
* @functype:
* FT_Custom_Log_Handler
*
* @description:
* A function typedef that is used to handle the logging of tracing and
* debug messages on a file system.
*
* @input:
* ft_component ::
* The name of `FT_COMPONENT` from which the current debug or error
* message is produced.
*
* fmt ::
* Actual debug or tracing message.
*
* args::
* Arguments of debug or tracing messages.
*
* @since:
* 2.11
*
*/
typedef void
(*FT_Custom_Log_Handler)( const char* ft_component,
const char* fmt,
va_list args );
/**************************************************************************
*
* @function:
* FT_Set_Log_Handler
*
* @description:
* A function to set a custom log handler.
*
* @input:
* handler ::
* New logging function.
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Set_Log_Handler( FT_Custom_Log_Handler handler );
/**************************************************************************
*
* @function:
* FT_Set_Default_Log_Handler
*
* @description:
* A function to undo the effect of @FT_Set_Log_Handler, resetting the
* log handler to FreeType's built-in version.
*
* @note:
* This function does nothing if compilation option `FT_DEBUG_LOGGING`
* isn't set.
*
* @since:
* 2.11
*
*/
FT_EXPORT( void )
FT_Set_Default_Log_Handler( void );
/* */
FT_END_HEADER
#endif /* FTLOGGING_H_ */
/* END */
@@ -4,7 +4,7 @@
*
* LZW-compressed stream support.
*
* Copyright (C) 2004-2020 by
* Copyright (C) 2004-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* Additional Mac-specific API.
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType Multiple Master font interface (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType modules public interface (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -45,10 +45,12 @@ FT_BEGIN_HEADER
*
* @description:
* The definitions below are used to manage modules within FreeType.
* Modules can be added, upgraded, and removed at runtime. Additionally,
* some module properties can be controlled also.
* Internal and external modules can be added, upgraded, and removed at
* runtime. For example, an alternative renderer or proprietary font
* driver can be registered and prioritized. Additionally, some module
* properties can also be controlled.
*
* Here is a list of possible values of the `module_name` field in the
* Here is a list of existing values of the `module_name` field in the
* @FT_Module_Class structure.
*
* ```
@@ -86,6 +88,7 @@ FT_BEGIN_HEADER
* FT_Remove_Module
* FT_Add_Default_Modules
*
* FT_FACE_DRIVER_NAME
* FT_Property_Set
* FT_Property_Get
* FT_Set_Default_Properties
@@ -328,6 +331,27 @@ FT_BEGIN_HEADER
FT_Module module );
/**************************************************************************
*
* @macro:
* FT_FACE_DRIVER_NAME
*
* @description:
* A macro that retrieves the name of a font driver from a face object.
*
* @note:
* The font driver name is a valid `module_name` for @FT_Property_Set
* and @FT_Property_Get. This is not the same as @FT_Get_Font_Format.
*
* @since:
* 2.11
*
*/
#define FT_FACE_DRIVER_NAME( face ) \
( ( *FT_REINTERPRET_CAST( FT_Module_Class**, \
( face )->driver ) )->module_name )
/**************************************************************************
*
* @function:
@@ -485,8 +509,7 @@ FT_BEGIN_HEADER
*
* ```
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
* cff:no-stem-darkening=0 \
* autofitter:warping=1
* cff:no-stem-darkening=0
* ```
*
* @inout:
@@ -4,7 +4,7 @@
*
* FreeType module error offsets (specification).
*
* Copyright (C) 2001-2020 by
* Copyright (C) 2001-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -171,6 +171,7 @@
FT_MODERRDEF( Type42, 0x1400, "Type 42 module" )
FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" )
FT_MODERRDEF( Sdf, 0x1700, "Signed distance field raster module" )
#ifdef FT_MODERR_END_LIST
@@ -4,7 +4,7 @@
*
* FreeType API for validating OpenType tables (specification).
*
* Copyright (C) 2004-2020 by
* Copyright (C) 2004-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -5,7 +5,7 @@
* Support for the FT_Outline type used to store glyph shapes of
* most scalable font formats (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType API for possible FT_Parameter tags (specification only).
*
* Copyright (C) 2017-2020 by
* Copyright (C) 2017-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType API for accessing PFR-specific data (specification only).
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType renderer modules public interface (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType size objects management (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -7,7 +7,7 @@
*
* This is _not_ used to retrieve glyph names!
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType path stroker (specification).
*
* Copyright (C) 2002-2020 by
* Copyright (C) 2002-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -5,7 +5,7 @@
* FreeType synthesizing code for emboldening and slanting
* (specification).
*
* Copyright (C) 2000-2020 by
* Copyright (C) 2000-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType low-level system interface definition (specification).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType trigonometric functions (specification).
*
* Copyright (C) 2001-2020 by
* Copyright (C) 2001-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* FreeType simple types definitions (specification only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -413,7 +413,7 @@ FT_BEGIN_HEADER
typedef struct FT_Data_
{
const FT_Byte* pointer;
FT_Int length;
FT_UInt length;
} FT_Data;
@@ -479,18 +479,17 @@ FT_BEGIN_HEADER
*
* @description:
* This macro converts four-letter tags that are used to label TrueType
* tables into an unsigned long, to be used within FreeType.
* tables into an `FT_Tag` type, to be used within FreeType.
*
* @note:
* The produced values **must** be 32-bit integers. Don't redefine this
* macro.
*/
#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
(FT_Tag) \
( ( (FT_ULong)_x1 << 24 ) | \
( (FT_ULong)_x2 << 16 ) | \
( (FT_ULong)_x3 << 8 ) | \
(FT_ULong)_x4 )
( ( FT_STATIC_BYTE_CAST( FT_Tag, _x1 ) << 24 ) | \
( FT_STATIC_BYTE_CAST( FT_Tag, _x2 ) << 16 ) | \
( FT_STATIC_BYTE_CAST( FT_Tag, _x3 ) << 8 ) | \
FT_STATIC_BYTE_CAST( FT_Tag, _x4 ) )
/*************************************************************************/
@@ -588,7 +587,7 @@ FT_BEGIN_HEADER
#define FT_IS_EMPTY( list ) ( (list).head == 0 )
#define FT_BOOL( x ) ( (FT_Bool)( (x) != 0 ) )
#define FT_BOOL( x ) FT_STATIC_CAST( FT_Bool, (x) != 0 )
/* concatenate C tokens */
#define FT_ERR_XCAT( x, y ) x ## y
@@ -4,7 +4,7 @@
*
* FreeType API for accessing Windows fnt-specific data.
*
* Copyright (C) 2003-2020 by
* Copyright (C) 2003-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -5,7 +5,7 @@
* Basic Type 1/Type 2 tables definitions and interface (specification
* only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -360,7 +360,7 @@ FT_BEGIN_HEADER
FT_UInt num_subrs;
FT_ULong subrmap_offset;
FT_Int sd_bytes;
FT_UInt sd_bytes;
} CID_FaceDictRec;
@@ -415,11 +415,11 @@ FT_BEGIN_HEADER
FT_ULong xuid[16];
FT_ULong cidmap_offset;
FT_Int fd_bytes;
FT_Int gd_bytes;
FT_UInt fd_bytes;
FT_UInt gd_bytes;
FT_ULong cid_count;
FT_Int num_dicts;
FT_UInt num_dicts;
CID_FaceDict font_dicts;
FT_ULong data_offset;
@@ -4,7 +4,7 @@
*
* TrueType name ID definitions (specification only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -5,7 +5,7 @@
* Basic SFNT/TrueType tables definitions and interface
* (specification only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -4,7 +4,7 @@
*
* Tags for TrueType and OpenType tables (specification only).
*
* Copyright (C) 1996-2020 by
* Copyright (C) 1996-2021 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -3,17 +3,17 @@
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>20D91</string>
<string>21D49</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>FreeType</string>
<string>freetype</string>
<key>CFBundleGetInfoString</key>
<string>FreeType </string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>FreeType</string>
<string>freetype</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
@@ -25,19 +25,19 @@
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>12E262</string>
<string>13C100</string>
<key>DTPlatformName</key>
<string>macosx</string>
<key>DTPlatformVersion</key>
<string>11.3</string>
<string>12.1</string>
<key>DTSDKBuild</key>
<string>20E214</string>
<string>21C46</string>
<key>DTSDKName</key>
<string>macosx11.3</string>
<string>macosx12.1</string>
<key>DTXcode</key>
<string>1250</string>
<string>1321</string>
<key>DTXcodeBuild</key>
<string>12E262</string>
<string>13C100</string>
<key>LSMinimumSystemVersion</key>
<string>10.7</string>
</dict>
@@ -6,7 +6,7 @@
<dict>
<key>Resources/Info.plist</key>
<data>
A7vPvl9HGdWKCpuKZSVd5LP0RBQ=
BDnKG0oEdXCs06inDQLZf/Lix/4=
</data>
</dict>
<key>files2</key>
@@ -15,605 +15,607 @@
<dict>
<key>hash</key>
<data>
uWLFex48AtanUQloDFfDO7lbDxU=
mrtl0os0x6ug736mRyuBFZebaEY=
</data>
<key>hash2</key>
<data>
eMoKzRQCzkxL6Cf4Tgl6xHEFdwWl4VPlK6PNNURKGYc=
WqQpC27/Kh7U+BHecaE4S82Svr93FitKZUhiLTDNrXQ=
</data>
</dict>
<key>Headers/config/ftheader.h</key>
<dict>
<key>hash</key>
<data>
m9ES2PZUcRiQp39bPQLzsfuPCIQ=
s2AsdDkP/xXK1ygOe2ae6uru2Ps=
</data>
<key>hash2</key>
<data>
PKFHpYWPBLFn0ADL27Gln0Y/k+lRXe8bA29TvkEfdg8=
OblPmdowPubogWZvp1m6PSI9ajeX2k3M28FMKO4JJUg=
</data>
</dict>
<key>Headers/config/ftmodule.h</key>
<dict>
<key>hash</key>
<data>
6T7CTMJ1ux0GkLZNYleAkNZ6oMk=
YNEGAdxVYDIWXV7QMBx3nHWlI9c=
</data>
<key>hash2</key>
<data>
m84J8p9PZt6j5mrG2k0GcFZ4kREDyNEiuUncnD9xZ20=
+njvZ/l9jrTZGgZ4qKRu78vH0d1H6FKHZK4pORWBvOg=
</data>
</dict>
<key>Headers/config/ftoption.h</key>
<dict>
<key>hash</key>
<data>
tZHxCylDQrTVeFQY/csh85UYZWw=
mcxbVCpSswQe16mP7hYv/Cb0gNw=
</data>
<key>hash2</key>
<data>
2EqqcJV5PsPSrWqg8nzS5ddqDiWvbNmrJW4JDJ7wX3s=
ugvBhpHT57UWp+Nc87qjAN3gThE37HMjWbZVaWrh2+Y=
</data>
</dict>
<key>Headers/config/ftstdlib.h</key>
<dict>
<key>hash</key>
<data>
+bzAd2jUX6O1bCUgCmoyrs3y/JM=
5t5BJv8ACFUK4JI0PoltDEHBVsU=
</data>
<key>hash2</key>
<data>
OEJjS1BGkiy08a+dC9BynLXAeWwya1ClSEHyENZ1tkg=
uTtlVqQCtGrfagTMur5YhLOW5qz9eqTPr95kR7h83wQ=
</data>
</dict>
<key>Headers/config/integer-types.h</key>
<dict>
<key>hash</key>
<data>
pQi2AAvOXR73ODd32hz/hillap4=
O7zgYgZ1qe8Anequ9etpgFbOZsA=
</data>
<key>hash2</key>
<data>
xovLqdaHvC5gTZi7IxD1kUHljbfj+wy7HsHhjwo9LhU=
1MzeKbiUwGiqAmz/PUjt9D/9kILURY059RjA/4j+lnk=
</data>
</dict>
<key>Headers/config/mac-support.h</key>
<dict>
<key>hash</key>
<data>
BzhCw2BvBC2ykzBYGYiwcW//Ht4=
lB/c/6UZk8uT2e6jYulDz3gjEOA=
</data>
<key>hash2</key>
<data>
HEJdXdLUgsZBxbXhSgHasmSrtGXI6WzusGZRS+SislY=
OwKps5BeLuj5yX9Uy02teGdCGjYus61IupCWx0AX9ko=
</data>
</dict>
<key>Headers/config/public-macros.h</key>
<dict>
<key>hash</key>
<data>
Y2xjdLnEfOEL8sLb/hjLDbjR4wE=
qzkjim50RJj95BpXKY1Lxgcx2cE=
</data>
<key>hash2</key>
<data>
ZO+lduYb7wBIqasJsOxduJ7kNobgaAn7ZPA7pApCoss=
wFLmXRZDhenUX2W4+l/4ya8Xx8NK789BkUox1yTqYhk=
</data>
</dict>
<key>Headers/freetype.h</key>
<dict>
<key>hash</key>
<data>
qmyOmY8MtAFGIvGtfuqyVjTbMYU=
Otl7Q6Q61XyOZOzfGFqNQqZ8ZR4=
</data>
<key>hash2</key>
<data>
Yr6gbxTC7dQmsSnRSw5XpNNlD2wjDquOyLhe7eFWxT8=
q21Z8eSj6JHoVBwi+ufkV6IFV2nY47AgEZd3vK4DDD4=
</data>
</dict>
<key>Headers/ft2build.h</key>
<dict>
<key>hash</key>
<data>
BCzyg6bCWTQevfMQ8geyrGoq+Qw=
btLG2hzyD8MaC5QZYJDFMTodN4Q=
</data>
<key>hash2</key>
<data>
Q0fMG4CFky6x6pMTxHvfh1VgNHkAAFF3HHVAICjwsFY=
Zp3EKiN1hwYWr1wyZ/xJ4eCsf5B5zVsLct5iSQrrPz8=
</data>
</dict>
<key>Headers/ftadvanc.h</key>
<dict>
<key>hash</key>
<data>
dQHRIx2MR+vpvz8d5ow+pWNv0V4=
K6znxUd2msK646KrNWQiMKOF/Mo=
</data>
<key>hash2</key>
<data>
J5ufwzTikWm0V7uqhc9VUJO8VU+Ld5UljH0nnJ8vfJo=
wvCuKMo2l+UlQy9OyouFTtWpIORe5W7p5xdVTruz97c=
</data>
</dict>
<key>Headers/ftbbox.h</key>
<dict>
<key>hash</key>
<data>
D6+JvRdbyXdgwku1tyuaQYh8UiQ=
iEIK4EBDszPKEEbzw6l0b4o+L1A=
</data>
<key>hash2</key>
<data>
za89rmDhikMYL7kmdANpT96EZR1k/8kKo8MRvzXsFRM=
aSeXCqNfePbTcir39XxUchraAa+NPQZnZkiKIliupz4=
</data>
</dict>
<key>Headers/ftbdf.h</key>
<dict>
<key>hash</key>
<data>
z8cg8a6O4ej73GrAIsa/PGItYu4=
ThRAMRqLTW7XNLJHEJVEi9twZpo=
</data>
<key>hash2</key>
<data>
WStZV6TIeQrvV/6/LMAzOlBsoF/xR6HS1jOk6ttQRNA=
DaAtVcV1OIvKhIjZVazmxxH9caNQ2Jfl/6VwcvN8A98=
</data>
</dict>
<key>Headers/ftbitmap.h</key>
<dict>
<key>hash</key>
<data>
Q18Xi7J3F5ci2NCyvJeU9+zuyBI=
RJiQ7KjhJwgzG+lyn0uQy60C58A=
</data>
<key>hash2</key>
<data>
su44/dxbohQHPJg2728Ez8EVg9Cmd3sMW5wUpPgQDi8=
O+nGS6PFrOX0cJ3kTB9LXxGubjx4AmLT++TOZO41amQ=
</data>
</dict>
<key>Headers/ftbzip2.h</key>
<dict>
<key>hash</key>
<data>
a7m0ByW//6kVi5soaADxv9f4Ros=
ZkGMuc7CnufqfT0ucqpLZJ/MXj8=
</data>
<key>hash2</key>
<data>
wqwceeLiEK990lB7U/NwqNm59HFpbsRo+3kExEJgOtY=
X6DevuQWWfHNHhZElwKU+3HiB8u/wb1D6vLggeWdm0A=
</data>
</dict>
<key>Headers/ftcache.h</key>
<dict>
<key>hash</key>
<data>
5NE4FTvl+4G2xJJ40+OHSfk7E3w=
g5RL0B/iUeFrsi5FdyVTmVZYdss=
</data>
<key>hash2</key>
<data>
MeGaQW3wMsIFs7SDcm9e/bp+WfwF8GZeVPZ6gpQJqd8=
jZgbh1fe9ZJygZWgYCyGx8xK3h8URXSL4vVc/apj2DE=
</data>
</dict>
<key>Headers/ftchapters.h</key>
<dict>
<key>hash</key>
<data>
5aY7LWarPpWPuhP4ItMPe8LpJ8Q=
KjmFEMwXS6iMo0pwb9BIo/C8YQ4=
</data>
<key>hash2</key>
<data>
wNdKU+7WFRPVM0qW8xiSGFg5hrJAFoXFo7d7VTck7WE=
a05YjtsOQeuKT4LZmsdeyB9Ui9qeTMXVnjQmLAgv9C0=
</data>
</dict>
<key>Headers/ftcid.h</key>
<dict>
<key>hash</key>
<data>
QIzJvJQToJn63BqvUVq19ONnXWQ=
kGDANqAoy4lSoSofIfW6S8Q4/0I=
</data>
<key>hash2</key>
<data>
V+xy/uH9alfYBOEc+UaDj6ylp32j+SSNpqkYolLBmBs=
zpDk4KjtA5VBAbC/aH+rhPrtKPRejvEHOF2qUwgSUdI=
</data>
</dict>
<key>Headers/ftcolor.h</key>
<dict>
<key>hash</key>
<data>
5LNm78w/BVBnMM+hDnAUN05nTMc=
BIIxtPqK83sZBVbH4knYJp5QnFM=
</data>
<key>hash2</key>
<data>
9QJ3YBmxMi+4P4d8NKFH+O+OZQlXJtOx25ViQk2iy6U=
XjGUazII3wlO5p5AdXbM6eX6mxqZo4kBrCCgW4WTA50=
</data>
</dict>
<key>Headers/ftdriver.h</key>
<dict>
<key>hash</key>
<data>
dRVly4NpXPuFh3IprVqt3J002UU=
OfjvnXuLa3z5t8IYqYXYRAuvkd4=
</data>
<key>hash2</key>
<data>
Bcr8DUa8w4R3rNozDQlbACHaFcAzNVUwuvZ5qjZWIPo=
2zLEOG8wxStZiZnH6y5o4rDRfp3ilj04XpUS0xWQbyM=
</data>
</dict>
<key>Headers/fterrdef.h</key>
<dict>
<key>hash</key>
<data>
VVbq+Fqk6Zc51mo7DVEGoK1AQCc=
LAUwVgYcWU6+tePK3QEMuF7xAK0=
</data>
<key>hash2</key>
<data>
JUG0FIG1ThyUMVlws6j05wUHJdGB+Gm+WurkreL15ms=
mSY5OLDb6MxaS/1Asgmh0nWBKEvJvSIVfYDxMUSaKvw=
</data>
</dict>
<key>Headers/fterrors.h</key>
<dict>
<key>hash</key>
<data>
b2gVefuSa93jh9eq29ARWv00C7o=
K9WGJ9/+Qq4NougNnUvCkGdc1nM=
</data>
<key>hash2</key>
<data>
AUDC4aXj8UutUYSm/8h4xcK4+Tk8UPXPSJI/nCNl/5k=
+u4ul4+FOrQYrHD383wJygZY1Y7XdJqLNdshs8m6Yas=
</data>
</dict>
<key>Headers/ftfntfmt.h</key>
<dict>
<key>hash</key>
<data>
iK6zjDuACuunSxEJjnoJgqZKhyw=
3SKn698+rhyuapcwbw3H8bFp/IQ=
</data>
<key>hash2</key>
<data>
g+Ff0oDtbr4iGhvoFB9Bu//tHfZECvVyH490ha+5y3I=
60bOO+hxFZloLQZavZY6wojZbPtEs3CSuaRvrNPON9M=
</data>
</dict>
<key>Headers/ftgasp.h</key>
<dict>
<key>hash</key>
<data>
REEfWVRPSQCHNME2+sx2aMVJtOM=
r5ZLFxVtwZyxfKgfADPaSapCpZw=
</data>
<key>hash2</key>
<data>
EeAvkv3RLPvk20QaxZA0syQYL1qpbnlHsHUNXFd6tAM=
yVAZ8u7fv8cqHWh3EslqgxfvrcNBeyRQCGMLowVTaW4=
</data>
</dict>
<key>Headers/ftglyph.h</key>
<dict>
<key>hash</key>
<data>
pjdjy3mFaeJM+Q/DF5/klOdHY+g=
Sa36Q/ByjiLWODnXKzUWnKDWWrY=
</data>
<key>hash2</key>
<data>
52wnLFYUwpIcd8oQ8jQCF/BN9sjCnNK8CYnMtY+fLOc=
UVAsJyE0tuiL7FWRRwslt7qUJ4+vEiykPtg3DEaIrwM=
</data>
</dict>
<key>Headers/ftgxval.h</key>
<dict>
<key>hash</key>
<data>
vd3pAcjgdMB/MGEk0AXsB0RcQrI=
fPOmTOcIlImSS6+vWcE9JGiRNtk=
</data>
<key>hash2</key>
<data>
7WHWirk45LOiOAOEeAVhW+vm8YKKyohcYPU+6ZaeuRA=
xSPYthzqc4Ro3tU8WD8Gw1/SZHNP0Pfsuq8sWq1mXs4=
</data>
</dict>
<key>Headers/ftgzip.h</key>
<dict>
<key>hash</key>
<data>
kmxE6cfVcppWRUnSjXYZVMcZjyc=
eieMxkKJjZSv/O2dASedGEMweeM=
</data>
<key>hash2</key>
<data>
9h5MyMKDlq+vsET9wqPYcUqCpX9MKETj+dXGb35EH6Y=
c/alIOPBw/rGLOf+nuQCyOD6E0xNuNPJhmtDrP6IH94=
</data>
</dict>
<key>Headers/ftimage.h</key>
<dict>
<key>hash</key>
<data>
tBoHnH4339Ky7KHo8ira908zUKQ=
DFqJgyPkB3V+ypecsSol3BhdSfI=
</data>
<key>hash2</key>
<data>
jU3zAILvVv0m2Ikdg8yDJy2XM7HhJNDCeB9zKlIHs4I=
6kM/FWYhtCY7dYyLPIsz90G4KKHNLXUrHXm1fgHDrDQ=
</data>
</dict>
<key>Headers/ftincrem.h</key>
<dict>
<key>hash</key>
<data>
vPmQeL2l9vFlK9B4gLhrQ1NxCUU=
/Ntpsw8cm9kPL0My3HtybEPAIRA=
</data>
<key>hash2</key>
<data>
FNu7etIAWrG877Fvylu5rpG3xOZL1avzpUdBQDj+buc=
7PH1GboBeuvlbNSVYkIMC9gLrY+55fEg/8riGH9nG0Q=
</data>
</dict>
<key>Headers/ftlcdfil.h</key>
<dict>
<key>hash</key>
<data>
GuPOr7Bul4HGX3on135c8H9xwz8=
np8hIJ9IrBa0ke5LeaAKXgT/yGw=
</data>
<key>hash2</key>
<data>
Iq6s4ZF31TLCYKVjMr+bHXuDsvrS+lwueLBYtOv/t9M=
5lIjixxvlVdyJKSgv6RFDvQ4A7JgBDPymxPj75oyOa4=
</data>
</dict>
<key>Headers/ftlist.h</key>
<dict>
<key>hash</key>
<data>
nBM8WPZOzEpjCjAwKZDPjv6Q8hc=
4CBOME89zReqXLPx3/mQOIN/hCo=
</data>
<key>hash2</key>
<data>
OqEhvdCi7P20Vg+shGVP0YfiBgwviCN9OPOG90glBwk=
M2y8URh4loT2ZclbxPIbwB1wTwa5g5WTkTA0yTbpjIc=
</data>
</dict>
<key>Headers/ftlogging.h</key>
<dict>
<key>hash</key>
<data>
RH1IYoxe3pIMUN6IfKeqz1ZuhV4=
</data>
<key>hash2</key>
<data>
2nazuZCjfTDbDJojRBZXYwekL5NlaySj3X5b0yRP8Bo=
</data>
</dict>
<key>Headers/ftlzw.h</key>
<dict>
<key>hash</key>
<data>
viuosK7ltMOS5IVIAYrD5X/pJjo=
bG/89S9PErw9zatCxn3M6E4sceE=
</data>
<key>hash2</key>
<data>
mmwDnIq2GFo9irMrnEU1JNjmgGonthmQKlnmLnAna6k=
JLmdYEc2XXDCxpe99dwqUetUa8NpAdWIENVbXMdV7HE=
</data>
</dict>
<key>Headers/ftmac.h</key>
<dict>
<key>hash</key>
<data>
xPz9jlT90Yty8RtPW4+hDH9h/DM=
zM1zsz1cpuQUq0M8faNLoPeTLpk=
</data>
<key>hash2</key>
<data>
mTBrH+a7b2s4GVwvtY5B7+xzcR3HMtwVxyFrM36/NC4=
JwhRnRVDF8Cp+eRD4kU2ldENpB2BGSe2xwx8ipvg5X8=
</data>
</dict>
<key>Headers/ftmm.h</key>
<dict>
<key>hash</key>
<data>
QLM/GJ/pziJpJSpc0G72Y44uQtw=
txyRhhFdyl5MkSLpTSYPIk6Jmvo=
</data>
<key>hash2</key>
<data>
LH18avI2tG6EFo+izKYcyqqL90fW0F+hYncSDFOH5xE=
dlnE7KZIWQ5sc6ylMDf0YFZJqGmRd6saRQq7L75AQZI=
</data>
</dict>
<key>Headers/ftmodapi.h</key>
<dict>
<key>hash</key>
<data>
qFmtnyUukxBmYoq4jpmzbGTynnY=
hVwlYcUVvrcmj6riIh6J9OLOOjA=
</data>
<key>hash2</key>
<data>
4CPwbv58Y/0S0Vl6qY6vu2uw6WYZtzWRZ6X1uM0up00=
lQkgYJI2N0afI0OvxAjmS+IlJ6TK8rhCx1OVYspF92U=
</data>
</dict>
<key>Headers/ftmoderr.h</key>
<dict>
<key>hash</key>
<data>
qevyjSGS8axGbqDa7SEi6XX3PpE=
H2WeRNa3TXioTW7S15pWD0QtdK8=
</data>
<key>hash2</key>
<data>
ebyRTRAeC9tsXbibf1JrlzX+SbW02RYQiHaV28jqaPs=
aeLeEaOISHoKcHvjdKg6ObxuJ48Q1CdmOU5PboPNwPU=
</data>
</dict>
<key>Headers/ftotval.h</key>
<dict>
<key>hash</key>
<data>
wRt8ELw+urC79MyC3RjnJC79a+4=
M0VKw0J6igekCCAlSEl9kzQs5nk=
</data>
<key>hash2</key>
<data>
Z/BPcOemNhOztX5kWjOyHXqprQ8SWgnnX82K/mBnCWI=
tvrOGlpkzpUK7H5K7swJilPznd9RPYXa83N17NAB9vA=
</data>
</dict>
<key>Headers/ftoutln.h</key>
<dict>
<key>hash</key>
<data>
KRFEylouKcLzaAQWsUm2n33E0S0=
rKVneR8XPfc3uxRJZF4KXRvV4uk=
</data>
<key>hash2</key>
<data>
7PTLR2vpjGSFnN93d0m4tqIhRv/28jT9E5KRnopbs3w=
BIFdq2GD+PoqezE+ubzZYD1rXjfKadKvLc8VNbOuje0=
</data>
</dict>
<key>Headers/ftparams.h</key>
<dict>
<key>hash</key>
<data>
0EjyFWXaPAH5PxfMRTJg7XwEWnc=
lp+TF2twoNSebFYpqHiQM6WRirQ=
</data>
<key>hash2</key>
<data>
FEUobFmoAijzOJUK7XKELNDJ+9qm8+q6FZTeumamZ1Y=
0G5HYbATp6dSXemuG3jm8RS2w0VnBs34Kv0kehGW70E=
</data>
</dict>
<key>Headers/ftpfr.h</key>
<dict>
<key>hash</key>
<data>
nO/h8tFjAkTr909qVKbsjlflMOA=
xgrgwGKCeHAFjlqxChS4yvGiR8E=
</data>
<key>hash2</key>
<data>
QtCT886ccIrCt0vJ7oVsg5m+TtpJZFCGH6Gv7YP5B+Q=
3xUajkfQ8REyBPFAgvcllqnYlt7sxR47kiXUVFG4clc=
</data>
</dict>
<key>Headers/ftrender.h</key>
<dict>
<key>hash</key>
<data>
fS7mP8AGwmFjipsk2OsZ25jn4Pg=
PmiWvxT51tYNQ3pPx1X1aVh/hUI=
</data>
<key>hash2</key>
<data>
rPVXnCmaCS/wbXn/5oWImkMZV/+/sIW8pKCFb3kQMV4=
UhfYPCLPjXhGDWCV9CH6WBrdQM5Sgy8iES3LCtaQCrI=
</data>
</dict>
<key>Headers/ftsizes.h</key>
<dict>
<key>hash</key>
<data>
LQ+V6mK81S4LJKM9QydyAUiKSHQ=
9hTu7u7rGrFEEZXKltMpPzcoJl4=
</data>
<key>hash2</key>
<data>
IuaIkOiDK401bIbJe2wzMBty1Lu8IlZ31nQ075yxbzA=
VviX/PijuGOpgcYdBKWgT68hmScYl+Sr0pE3EkS4lyk=
</data>
</dict>
<key>Headers/ftsnames.h</key>
<dict>
<key>hash</key>
<data>
Y020rCa2yQhqr6vfqZdX7PURO0s=
U5/mAtAX+Fb/Q6dbs0qWvFSIc+M=
</data>
<key>hash2</key>
<data>
YIq+Jn7v//LOVoj+lUER8jKuvDi9STad9l7f3M1Sg9o=
JcjLw7/g8305KspXf/IoTEGpWem2DFIpF9Q962oggO4=
</data>
</dict>
<key>Headers/ftstroke.h</key>
<dict>
<key>hash</key>
<data>
ReuOqtoQoIFKDVxgbm77Mws4+Pc=
dsETqT6WkkZX8gGZm4x5II9w7Uk=
</data>
<key>hash2</key>
<data>
GkpA8Q43wlu8EuARm+Yb6H3faW/7y+qvfowanLbtZzM=
f8xwJTKpfZLHg1UbxaZnb14lE+PMh0hfWD86+K5EDTU=
</data>
</dict>
<key>Headers/ftsynth.h</key>
<dict>
<key>hash</key>
<data>
RpVD3dyZHtq4HPPmh8K12ANdd3M=
px3wLRVjv4dpditnTfxh9SG/xrA=
</data>
<key>hash2</key>
<data>
ao2L+DdrXBDNjGxRc1LSxytqDIKjNQMiDb2mg+Q44Kg=
wyRIwB0t7+SWLBoLvGH+uiutHJg++xjyRSRUcHbmuz0=
</data>
</dict>
<key>Headers/ftsystem.h</key>
<dict>
<key>hash</key>
<data>
r62HQpghisT4GPEJWTNr0P2IuVM=
UfggqD74VevWNTN3lLyH3zHhZUU=
</data>
<key>hash2</key>
<data>
lnYUzh7TC5VsexmSbbthGHq8zhBaiOkay3lXBEgpmCw=
eVzvKt1EbZkv/R/8KpQFFbZjKUsY+0RoNKGMiAsk7qk=
</data>
</dict>
<key>Headers/fttrigon.h</key>
<dict>
<key>hash</key>
<data>
uwyytBDnGrDJVIVO7HedFXICiIM=
ViU6p3w8W2+LGspXeSFbqQbrN4I=
</data>
<key>hash2</key>
<data>
sfegngmUUSCcz22aSM8kSRx/WB7lBlOAXayvNFf7Qf4=
bGYypIQEk7ZrcQnsKUgQlarQ7BXWkcBmANKaHksyQtg=
</data>
</dict>
<key>Headers/fttypes.h</key>
<dict>
<key>hash</key>
<data>
uDLdvQwqsG/FzGEwmy3GKI9lBxs=
K3lO3v40bYFMSDxfPC1vyfoAxvI=
</data>
<key>hash2</key>
<data>
84RSMKGRSyF1Ar4wk5xqkSnEwoGKlhQNglrR+C8qFVQ=
EHPGrDa8ir+Cr7O1UUKke7jhjLdPHhzagOPFviZykGE=
</data>
</dict>
<key>Headers/ftwinfnt.h</key>
<dict>
<key>hash</key>
<data>
/1f9x6Nil80kWIDvPhts/CdkF5k=
uTwH1KB+zUY4xg+JQjApfZzJFLo=
</data>
<key>hash2</key>
<data>
GIIocwAQQuL1rI2TvLGytfurZV6GdBwVGSVpmuOSDJk=
YrLUY5yX+4EqWqgyzjwJQhZ7QE6JATtUqrxefBAvWhQ=
</data>
</dict>
<key>Headers/t1tables.h</key>
<dict>
<key>hash</key>
<data>
fA8rkE4Y0fIYFFEtSIH28gBq9n0=
OAlQkcfceMPrZt6d+K+RgLZr8vY=
</data>
<key>hash2</key>
<data>
+MZ0y9ewfs61QdM9m+1twJ1lPF+gn3ccdgx4IvXbxmQ=
uYAHdRprIPZW0E1sUzDOUJXdKzbLYIloaYQe5zypmRU=
</data>
</dict>
<key>Headers/ttnameid.h</key>
<dict>
<key>hash</key>
<data>
cgM+YFbyVQ277CakUg/FpR0/QMc=
w3CZdZYjIpHLVWk0CXTJ+gOK0d0=
</data>
<key>hash2</key>
<data>
t0pkCJWDDxQwMoDW2XlvXx6OJqgZn/xMhZi3KGbpbok=
xvrYX8sGCdniThLprDP/5PS8wI7ybCHY3VEG4Po4Qrk=
</data>
</dict>
<key>Headers/tttables.h</key>
<dict>
<key>hash</key>
<data>
yvzs0ookKGfEV/n4+s0+uQ0vla4=
/8Zt2v3stZudTZLkiA+OUpY0ETo=
</data>
<key>hash2</key>
<data>
lOceLMrIUPjOCXDglxJqv7JYm1y9liMdi5quVD2IcSs=
ubPZsgSWbK2tDC1OFG17/Yti5N8P2hMNGB/FMqCIR4E=
</data>
</dict>
<key>Headers/tttags.h</key>
<dict>
<key>hash</key>
<data>
9vz6vudl0LISQLVmJ4URm7JD9wI=
BFut87O7LsopL6BoRvZP3U/uAaU=
</data>
<key>hash2</key>
<data>
+wbY21asGWmqq/ysfA0KVm8n/xKcWH2h+3BEPTSecHY=
Nj9DZtMJIrIXEn5Cv3aLCwOSuhOlWBW6QfEYY/BoMKs=
</data>
</dict>
<key>Resources/Info.plist</key>
<dict>
<key>hash</key>
<data>
A7vPvl9HGdWKCpuKZSVd5LP0RBQ=
BDnKG0oEdXCs06inDQLZf/Lix/4=
</data>
<key>hash2</key>
<data>
p5dKpqU5ZE2EnR86jkXDrnjCVLTFzKq28HA/shI7Lj0=
h6QcbJXF2mX/dr+2dhemTtvwZQEPRvpAYOkre1lO4Ls=
</data>
</dict>
<key>freetype</key>
<dict>
<key>cdhash</key>
<data>
A1gwCEPyBSpyW0Y3/lUBudcBYOQ=
</data>
<key>requirement</key>
<string>cdhash H"74fb24bfe21d1a72b8cb76b545171401fa0e1721" or cdhash H"0358300843f2052a725b4637fe5501b9d70160e4" or cdhash H"c6f976f0a037f20eed8f14253edded0e5cc223a8" or cdhash H"33e13e2253dd80f8de695514b1009cffbfe13d82"</string>
</dict>
</dict>
<key>rules</key>
<dict>