From f865d9a2ca493d77ac5035116f8b8d86d097bf90 Mon Sep 17 00:00:00 2001 From: Arnold <40414978+PatriceJiang@users.noreply.github.com> Date: Fri, 19 Jun 2020 08:51:09 +0800 Subject: [PATCH] update freetype --- win32/include/freetype/config/ftconfig.h | 498 -- win32/include/freetype/config/ftoption.h | 904 --- win32/include/freetype/config/ftstdlib.h | 174 - win32/include/freetype/freetype.h | 4284 --------------- .../freetype/freetype/config/ftconfig.h | 575 ++ .../freetype/{ => freetype}/config/ftheader.h | 480 +- .../freetype/{ => freetype}/config/ftmodule.h | 24 +- .../freetype/freetype/config/ftoption.h | 982 ++++ .../freetype/freetype/config/ftstdlib.h | 175 + win32/include/freetype/freetype/freetype.h | 4880 +++++++++++++++++ win32/include/freetype/freetype/ftadvanc.h | 188 + win32/include/freetype/freetype/ftbbox.h | 102 + win32/include/freetype/freetype/ftbdf.h | 213 + win32/include/freetype/freetype/ftbitmap.h | 330 ++ win32/include/freetype/freetype/ftbzip2.h | 102 + win32/include/freetype/freetype/ftcache.h | 1088 ++++ win32/include/freetype/freetype/ftchapters.h | 145 + win32/include/freetype/freetype/ftcid.h | 168 + win32/include/freetype/freetype/ftcolor.h | 311 ++ win32/include/freetype/freetype/ftdriver.h | 1232 +++++ .../freetype/{ => freetype}/fterrdef.h | 105 +- win32/include/freetype/freetype/fterrors.h | 285 + win32/include/freetype/freetype/ftfntfmt.h | 94 + win32/include/freetype/freetype/ftgasp.h | 144 + win32/include/freetype/freetype/ftglyph.h | 665 +++ win32/include/freetype/freetype/ftgxval.h | 355 ++ win32/include/freetype/freetype/ftgzip.h | 151 + win32/include/freetype/freetype/ftimage.h | 1240 +++++ .../freetype/{ => freetype}/ftincrem.h | 158 +- win32/include/freetype/freetype/ftlcdfil.h | 328 ++ win32/include/freetype/freetype/ftlist.h | 297 + win32/include/freetype/freetype/ftlzw.h | 100 + win32/include/freetype/freetype/ftmac.h | 290 + win32/include/freetype/freetype/ftmm.h | 753 +++ win32/include/freetype/freetype/ftmodapi.h | 785 +++ win32/include/freetype/freetype/ftmoderr.h | 203 + win32/include/freetype/freetype/ftotval.h | 207 + win32/include/freetype/freetype/ftoutln.h | 593 ++ win32/include/freetype/freetype/ftparams.h | 204 + win32/include/freetype/freetype/ftpfr.h | 180 + win32/include/freetype/freetype/ftrender.h | 245 + win32/include/freetype/freetype/ftsizes.h | 160 + win32/include/freetype/freetype/ftsnames.h | 273 + .../freetype/{ => freetype}/ftstroke.h | 439 +- .../include/freetype/{ => freetype}/ftsynth.h | 44 +- .../freetype/{ => freetype}/ftsystem.h | 142 +- .../freetype/{ => freetype}/fttrigon.h | 90 +- win32/include/freetype/freetype/fttypes.h | 615 +++ win32/include/freetype/freetype/ftwinfnt.h | 277 + win32/include/freetype/freetype/t1tables.h | 774 +++ .../freetype/{ => freetype}/ttnameid.h | 739 ++- win32/include/freetype/freetype/tttables.h | 856 +++ .../include/freetype/{ => freetype}/tttags.h | 50 +- win32/include/freetype/ft2build.h | 68 +- win32/include/freetype/ftadvanc.h | 187 - win32/include/freetype/ftautoh.h | 503 -- win32/include/freetype/ftbbox.h | 101 - win32/include/freetype/ftbdf.h | 210 - win32/include/freetype/ftbitmap.h | 240 - win32/include/freetype/ftbzip2.h | 102 - win32/include/freetype/ftcache.h | 1057 ---- win32/include/freetype/ftcffdrv.h | 262 - win32/include/freetype/ftchapters.h | 135 - win32/include/freetype/ftcid.h | 168 - win32/include/freetype/fterrors.h | 216 - win32/include/freetype/ftfntfmt.h | 92 - win32/include/freetype/ftgasp.h | 129 - win32/include/freetype/ftglyph.h | 605 -- win32/include/freetype/ftgxval.h | 357 -- win32/include/freetype/ftgzip.h | 148 - win32/include/freetype/ftimage.h | 1214 ---- win32/include/freetype/ftlcdfil.h | 293 - win32/include/freetype/ftlist.h | 276 - win32/include/freetype/ftlzw.h | 99 - win32/include/freetype/ftmac.h | 274 - win32/include/freetype/ftmm.h | 384 -- win32/include/freetype/ftmodapi.h | 672 --- win32/include/freetype/ftmoderr.h | 194 - win32/include/freetype/ftotval.h | 204 - win32/include/freetype/ftoutln.h | 574 -- win32/include/freetype/ftpfr.h | 172 - win32/include/freetype/ftrender.h | 232 - win32/include/freetype/ftsizes.h | 159 - win32/include/freetype/ftsnames.h | 200 - win32/include/freetype/ftttdrv.h | 310 -- win32/include/freetype/fttypes.h | 602 -- win32/include/freetype/ftwinfnt.h | 275 - win32/include/freetype/t1tables.h | 761 --- win32/include/freetype/tttables.h | 829 --- win32/include/freetype/ttunpat.h | 60 - win32/libs/freetype.dll | Bin 0 -> 666112 bytes win32/libs/freetype.lib | Bin 1022156 -> 47394 bytes 92 files changed, 21726 insertions(+), 19334 deletions(-) delete mode 100644 win32/include/freetype/config/ftconfig.h delete mode 100644 win32/include/freetype/config/ftoption.h delete mode 100644 win32/include/freetype/config/ftstdlib.h delete mode 100644 win32/include/freetype/freetype.h create mode 100644 win32/include/freetype/freetype/config/ftconfig.h rename win32/include/freetype/{ => freetype}/config/ftheader.h (57%) rename win32/include/freetype/{ => freetype}/config/ftmodule.h (73%) create mode 100644 win32/include/freetype/freetype/config/ftoption.h create mode 100644 win32/include/freetype/freetype/config/ftstdlib.h create mode 100644 win32/include/freetype/freetype/freetype.h create mode 100644 win32/include/freetype/freetype/ftadvanc.h create mode 100644 win32/include/freetype/freetype/ftbbox.h create mode 100644 win32/include/freetype/freetype/ftbdf.h create mode 100644 win32/include/freetype/freetype/ftbitmap.h create mode 100644 win32/include/freetype/freetype/ftbzip2.h create mode 100644 win32/include/freetype/freetype/ftcache.h create mode 100644 win32/include/freetype/freetype/ftchapters.h create mode 100644 win32/include/freetype/freetype/ftcid.h create mode 100644 win32/include/freetype/freetype/ftcolor.h create mode 100644 win32/include/freetype/freetype/ftdriver.h rename win32/include/freetype/{ => freetype}/fterrdef.h (73%) create mode 100644 win32/include/freetype/freetype/fterrors.h create mode 100644 win32/include/freetype/freetype/ftfntfmt.h create mode 100644 win32/include/freetype/freetype/ftgasp.h create mode 100644 win32/include/freetype/freetype/ftglyph.h create mode 100644 win32/include/freetype/freetype/ftgxval.h create mode 100644 win32/include/freetype/freetype/ftgzip.h create mode 100644 win32/include/freetype/freetype/ftimage.h rename win32/include/freetype/{ => freetype}/ftincrem.h (65%) create mode 100644 win32/include/freetype/freetype/ftlcdfil.h create mode 100644 win32/include/freetype/freetype/ftlist.h create mode 100644 win32/include/freetype/freetype/ftlzw.h create mode 100644 win32/include/freetype/freetype/ftmac.h create mode 100644 win32/include/freetype/freetype/ftmm.h create mode 100644 win32/include/freetype/freetype/ftmodapi.h create mode 100644 win32/include/freetype/freetype/ftmoderr.h create mode 100644 win32/include/freetype/freetype/ftotval.h create mode 100644 win32/include/freetype/freetype/ftoutln.h create mode 100644 win32/include/freetype/freetype/ftparams.h create mode 100644 win32/include/freetype/freetype/ftpfr.h create mode 100644 win32/include/freetype/freetype/ftrender.h create mode 100644 win32/include/freetype/freetype/ftsizes.h create mode 100644 win32/include/freetype/freetype/ftsnames.h rename win32/include/freetype/{ => freetype}/ftstroke.h (62%) rename win32/include/freetype/{ => freetype}/ftsynth.h (64%) rename win32/include/freetype/{ => freetype}/ftsystem.h (63%) rename win32/include/freetype/{ => freetype}/fttrigon.h (75%) create mode 100644 win32/include/freetype/freetype/fttypes.h create mode 100644 win32/include/freetype/freetype/ftwinfnt.h create mode 100644 win32/include/freetype/freetype/t1tables.h rename win32/include/freetype/{ => freetype}/ttnameid.h (74%) create mode 100644 win32/include/freetype/freetype/tttables.h rename win32/include/freetype/{ => freetype}/tttags.h (76%) delete mode 100644 win32/include/freetype/ftadvanc.h delete mode 100644 win32/include/freetype/ftautoh.h delete mode 100644 win32/include/freetype/ftbbox.h delete mode 100644 win32/include/freetype/ftbdf.h delete mode 100644 win32/include/freetype/ftbitmap.h delete mode 100644 win32/include/freetype/ftbzip2.h delete mode 100644 win32/include/freetype/ftcache.h delete mode 100644 win32/include/freetype/ftcffdrv.h delete mode 100644 win32/include/freetype/ftchapters.h delete mode 100644 win32/include/freetype/ftcid.h delete mode 100644 win32/include/freetype/fterrors.h delete mode 100644 win32/include/freetype/ftfntfmt.h delete mode 100644 win32/include/freetype/ftgasp.h delete mode 100644 win32/include/freetype/ftglyph.h delete mode 100644 win32/include/freetype/ftgxval.h delete mode 100644 win32/include/freetype/ftgzip.h delete mode 100644 win32/include/freetype/ftimage.h delete mode 100644 win32/include/freetype/ftlcdfil.h delete mode 100644 win32/include/freetype/ftlist.h delete mode 100644 win32/include/freetype/ftlzw.h delete mode 100644 win32/include/freetype/ftmac.h delete mode 100644 win32/include/freetype/ftmm.h delete mode 100644 win32/include/freetype/ftmodapi.h delete mode 100644 win32/include/freetype/ftmoderr.h delete mode 100644 win32/include/freetype/ftotval.h delete mode 100644 win32/include/freetype/ftoutln.h delete mode 100644 win32/include/freetype/ftpfr.h delete mode 100644 win32/include/freetype/ftrender.h delete mode 100644 win32/include/freetype/ftsizes.h delete mode 100644 win32/include/freetype/ftsnames.h delete mode 100644 win32/include/freetype/ftttdrv.h delete mode 100644 win32/include/freetype/fttypes.h delete mode 100644 win32/include/freetype/ftwinfnt.h delete mode 100644 win32/include/freetype/t1tables.h delete mode 100644 win32/include/freetype/tttables.h delete mode 100644 win32/include/freetype/ttunpat.h create mode 100644 win32/libs/freetype.dll diff --git a/win32/include/freetype/config/ftconfig.h b/win32/include/freetype/config/ftconfig.h deleted file mode 100644 index 7ceeae0f..00000000 --- a/win32/include/freetype/config/ftconfig.h +++ /dev/null @@ -1,498 +0,0 @@ -/* ftconfig.h. Generated from ftconfig.in by configure. */ -/***************************************************************************/ -/* */ -/* ftconfig.in */ -/* */ -/* UNIX-specific configuration file (specification only). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This header file contains a number of macro definitions that are used */ - /* by the rest of the engine. Most of the macros here are automatically */ - /* determined at compile time, and you should not need to change it to */ - /* port FreeType, except to compile the library with a non-ANSI */ - /* compiler. */ - /* */ - /* Note however that if some specific modifications are needed, we */ - /* advise you to place a modified copy in your build directory. */ - /* */ - /* The build directory is usually `builds/', and contains */ - /* system-specific files that are always included first when building */ - /* the library. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTCONFIG_H__ -#define __FTCONFIG_H__ - -#include -#include FT_CONFIG_OPTIONS_H -#include FT_CONFIG_STANDARD_LIBRARY_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* PLATFORM-SPECIFIC CONFIGURATION MACROS */ - /* */ - /* These macros can be toggled to suit a specific system. The current */ - /* ones are defaults used to compile FreeType in an ANSI C environment */ - /* (16bit compilers are also supported). Copy this file to your own */ - /* `builds/' directory, and edit it to port the engine. */ - /* */ - /*************************************************************************/ - - -#define HAVE_UNISTD_H 1 -#define HAVE_FCNTL_H 1 -#define HAVE_STDINT_H 1 - - - /* There are systems (like the Texas Instruments 'C54x) where a `char' */ - /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */ - /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */ - /* is probably unexpected. */ - /* */ - /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */ - /* `char' type. */ - -#ifndef FT_CHAR_BIT -#define FT_CHAR_BIT CHAR_BIT -#endif - - -/* #undef FT_USE_AUTOCONF_SIZEOF_TYPES */ -#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES - -#define SIZEOF_INT 4 -#define SIZEOF_LONG 4 -#define FT_SIZEOF_INT SIZEOF_INT -#define FT_SIZEOF_LONG SIZEOF_LONG - -#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */ - - /* Following cpp computation of the bit length of int and long */ - /* is copied from default include/freetype/config/ftconfig.h. */ - /* If any improvement is required for this file, it should be */ - /* applied to the original header file for the builders that */ - /* do not use configure script. */ - - /* The size of an `int' type. */ -#if FT_UINT_MAX == 0xFFFFUL -#define FT_SIZEOF_INT (16 / FT_CHAR_BIT) -#elif FT_UINT_MAX == 0xFFFFFFFFUL -#define FT_SIZEOF_INT (32 / FT_CHAR_BIT) -#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL -#define FT_SIZEOF_INT (64 / FT_CHAR_BIT) -#else -#error "Unsupported size of `int' type!" -#endif - - /* The size of a `long' type. A five-byte `long' (as used e.g. on the */ - /* DM642) is recognized but avoided. */ -#if FT_ULONG_MAX == 0xFFFFFFFFUL -#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT) -#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL -#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT) -#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL -#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT) -#else -#error "Unsupported size of `long' type!" -#endif - -#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */ - - - /* FT_UNUSED is a macro used to indicate that a given parameter is not */ - /* used -- this is only used to get rid of unpleasant compiler warnings */ -#ifndef FT_UNUSED -#define FT_UNUSED( arg ) ( (arg) = (arg) ) -#endif - - - /*************************************************************************/ - /* */ - /* AUTOMATIC CONFIGURATION MACROS */ - /* */ - /* These macros are computed from the ones defined above. Don't touch */ - /* their definition, unless you know precisely what you are doing. No */ - /* porter should need to mess with them. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Mac support */ - /* */ - /* This is the only necessary change, so it is defined here instead */ - /* providing a new configuration file. */ - /* */ -#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 */ -#include -#ifdef ECANCELED /* defined since 10.2 */ -#include "AvailabilityMacros.h" -#endif -#if defined( __LP64__ ) && \ - ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) -#undef FT_MACINTOSH -#endif - -#elif defined( __SC__ ) || defined( __MRC__ ) - /* Classic MacOS compilers */ -#include "ConditionalMacros.h" -#if TARGET_OS_MAC -#define FT_MACINTOSH 1 -#endif - -#endif - - - /* Fix compiler warning with sgi compiler */ -#if defined( __sgi ) && !defined( __GNUC__ ) -#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) -#pragma set woff 3505 -#endif -#endif - - - /*************************************************************************/ - /* */ - /*
*/ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int16 */ - /* */ - /* */ - /* A typedef for a 16bit signed integer type. */ - /* */ - typedef signed short FT_Int16; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt16 */ - /* */ - /* */ - /* A typedef for a 16bit unsigned integer type. */ - /* */ - typedef unsigned short FT_UInt16; - - /* */ - - - /* this #if 0 ... #endif clause is for documentation purposes */ -#if 0 - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int32 */ - /* */ - /* */ - /* A typedef for a 32bit signed integer type. The size depends on */ - /* the configuration. */ - /* */ - typedef signed XXX FT_Int32; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt32 */ - /* */ - /* A typedef for a 32bit unsigned integer type. The size depends on */ - /* the configuration. */ - /* */ - typedef unsigned XXX FT_UInt32; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int64 */ - /* */ - /* A typedef for a 64bit signed integer type. The size depends on */ - /* the configuration. Only defined if there is real 64bit support; */ - /* otherwise, it gets emulated with a structure (if necessary). */ - /* */ - typedef signed XXX FT_Int64; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt64 */ - /* */ - /* A typedef for a 64bit unsigned integer type. The size depends on */ - /* the configuration. Only defined if there is real 64bit support; */ - /* otherwise, it gets emulated with a structure (if necessary). */ - /* */ - typedef unsigned XXX FT_UInt64; - - /* */ - -#endif - -#if FT_SIZEOF_INT == 4 - - typedef signed int FT_Int32; - typedef unsigned int FT_UInt32; - -#elif FT_SIZEOF_LONG == 4 - - typedef signed long FT_Int32; - typedef unsigned long FT_UInt32; - -#else -#error "no 32bit type found -- please check your configuration files" -#endif - - - /* look up an integer type that is at least 32 bits */ -#if FT_SIZEOF_INT >= 4 - - typedef int FT_Fast; - typedef unsigned int FT_UFast; - -#elif FT_SIZEOF_LONG >= 4 - - typedef long FT_Fast; - typedef unsigned long FT_UFast; - -#endif - - - /* determine whether we have a 64-bit int type for platforms without */ - /* Autoconf */ -#if FT_SIZEOF_LONG == 8 - - /* FT_LONG64 must be defined if a 64-bit type is available */ -#define FT_LONG64 -#define FT_INT64 long -#define FT_UINT64 unsigned long - - /*************************************************************************/ - /* */ - /* A 64-bit data type may create compilation problems if you compile */ - /* in strict ANSI mode. To avoid them, we disable other 64-bit data */ - /* types if __STDC__ is defined. You can however ignore this rule */ - /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */ - /* */ -#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 ) - -#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 - -#elif defined( __BORLANDC__ ) /* Borland C++ */ - - /* XXXX: We should probably check the value of __BORLANDC__ in order */ - /* to test the compiler version. */ - - /* this compiler provides the __int64 type */ -#define FT_LONG64 -#define FT_INT64 __int64 -#define FT_UINT64 unsigned __int64 - -#elif defined( __WATCOMC__ ) /* Watcom C++ */ - - /* Watcom doesn't provide 64-bit data types */ - -#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 /* _MSC_VER */ - -#endif /* FT_SIZEOF_LONG == 8 */ - -#ifdef FT_LONG64 - typedef FT_INT64 FT_Int64; - typedef FT_UINT64 FT_UInt64; -#endif - - - /*************************************************************************/ - /* */ - /* miscellaneous */ - /* */ - /*************************************************************************/ - - -#define FT_BEGIN_STMNT do { -#define FT_END_STMNT } while ( 0 ) -#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT - - - /* typeof condition taken from gnulib's `intprops.h' header file */ -#if ( __GNUC__ >= 2 || \ - defined( __IBM__TYPEOF__ ) || \ - ( __SUNPRO_C >= 0x5110 && !__STDC__ ) ) -#define FT_TYPEOF( type ) (__typeof__ (type)) -#else -#define FT_TYPEOF( type ) /* empty */ -#endif - - -#ifdef FT_MAKE_OPTION_SINGLE_OBJECT - -#define FT_LOCAL( x ) static x -#define FT_LOCAL_DEF( x ) static x - -#else - -#ifdef __cplusplus -#define FT_LOCAL( x ) extern "C" x -#define FT_LOCAL_DEF( x ) extern "C" x -#else -#define FT_LOCAL( x ) extern x -#define FT_LOCAL_DEF( x ) x -#endif - -#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ - -#define FT_LOCAL_ARRAY( x ) extern const x -#define FT_LOCAL_ARRAY_DEF( x ) const x - - -#ifndef FT_BASE - -#ifdef __cplusplus -#define FT_BASE( x ) extern "C" x -#else -#define FT_BASE( x ) extern x -#endif - -#endif /* !FT_BASE */ - - -#ifndef FT_BASE_DEF - -#ifdef __cplusplus -#define FT_BASE_DEF( x ) x -#else -#define FT_BASE_DEF( x ) x -#endif - -#endif /* !FT_BASE_DEF */ - - -#ifndef FT_EXPORT - -#ifdef __cplusplus -#define FT_EXPORT( x ) extern "C" x -#else -#define FT_EXPORT( x ) extern x -#endif - -#endif /* !FT_EXPORT */ - - -#ifndef FT_EXPORT_DEF - -#ifdef __cplusplus -#define FT_EXPORT_DEF( x ) extern "C" x -#else -#define FT_EXPORT_DEF( x ) extern x -#endif - -#endif /* !FT_EXPORT_DEF */ - - -#ifndef FT_EXPORT_VAR - -#ifdef __cplusplus -#define FT_EXPORT_VAR( x ) extern "C" x -#else -#define FT_EXPORT_VAR( x ) extern x -#endif - -#endif /* !FT_EXPORT_VAR */ - - /* The following macros are needed to compile the library with a */ - /* C++ compiler and with 16bit compilers. */ - /* */ - - /* This is special. Within C++, you must specify `extern "C"' for */ - /* functions which are used via function pointers, and you also */ - /* must do that for structures which contain function pointers to */ - /* assure C linkage -- it's not possible to have (local) anonymous */ - /* functions which are accessed by (global) function pointers. */ - /* */ - /* */ - /* FT_CALLBACK_DEF is used to _define_ a callback function. */ - /* */ - /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ - /* contains pointers to callback functions. */ - /* */ - /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ - /* that contains pointers to callback functions. */ - /* */ - /* */ - /* Some 16bit compilers have to redefine these macros to insert */ - /* the infamous `_cdecl' or `__fastcall' declarations. */ - /* */ -#ifndef FT_CALLBACK_DEF -#ifdef __cplusplus -#define FT_CALLBACK_DEF( x ) extern "C" x -#else -#define FT_CALLBACK_DEF( x ) static x -#endif -#endif /* FT_CALLBACK_DEF */ - -#ifndef FT_CALLBACK_TABLE -#ifdef __cplusplus -#define FT_CALLBACK_TABLE extern "C" -#define FT_CALLBACK_TABLE_DEF extern "C" -#else -#define FT_CALLBACK_TABLE extern -#define FT_CALLBACK_TABLE_DEF /* nothing */ -#endif -#endif /* FT_CALLBACK_TABLE */ - - -FT_END_HEADER - - -#endif /* __FTCONFIG_H__ */ - - -/* END */ diff --git a/win32/include/freetype/config/ftoption.h b/win32/include/freetype/config/ftoption.h deleted file mode 100644 index b481f8fb..00000000 --- a/win32/include/freetype/config/ftoption.h +++ /dev/null @@ -1,904 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftoption.h */ -/* */ -/* User-selectable configuration macros (specification only). */ -/* */ -/* Copyright 1996-2015 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 __FTOPTION_H__ -#define __FTOPTION_H__ - - -#include - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* USER-SELECTABLE CONFIGURATION MACROS */ - /* */ - /* This file contains the default configuration macro definitions for */ - /* a standard build of the FreeType library. There are three ways to */ - /* use this file to build project-specific versions of the library: */ - /* */ - /* - You can modify this file by hand, but this is not recommended in */ - /* cases where you would like to build several versions of the */ - /* library from a single source directory. */ - /* */ - /* - You can put a copy of this file in your build directory, more */ - /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */ - /* is the name of a directory that is included _before_ the FreeType */ - /* include path during compilation. */ - /* */ - /* The default FreeType Makefiles and Jamfiles use the build */ - /* directory `builds/' by default, but you can easily change */ - /* that for your own projects. */ - /* */ - /* - Copy the file to `$BUILD/ft2build.h' and modify it */ - /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */ - /* locate this file during the build. For example, */ - /* */ - /* #define FT_CONFIG_OPTIONS_H */ - /* #include */ - /* */ - /* will use `$BUILD/myftoptions.h' instead of this file for macro */ - /* definitions. */ - /* */ - /* Note also that you can similarly pre-define the macro */ - /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */ - /* that are statically linked to the library at compile time. By */ - /* default, this file is . */ - /* */ - /* We highly recommend using the third method whenever possible. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Uncomment the line below if you want to activate sub-pixel rendering */ - /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */ - /* */ - /* Note that this feature is covered by several Microsoft patents */ - /* and should not be activated in any default build of the library. */ - /* */ - /* This macro has no impact on the FreeType API, only on its */ - /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */ - /* FT_Render_Glyph still generates a bitmap that is 3 times wider than */ - /* the original size in case this macro isn't defined; however, each */ - /* triplet of subpixels has R=G=B. */ - /* */ - /* This is done to allow FreeType clients to run unmodified, forcing */ - /* them to display normal gray-level anti-aliased glyphs. */ - /* */ -/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ - - - /*************************************************************************/ - /* */ - /* Many compilers provide a non-ANSI 64-bit data type that can be used */ - /* by FreeType to speed up some computations. However, this will create */ - /* some problems when compiling the library in strict ANSI mode. */ - /* */ - /* For this reason, the use of 64-bit integers is normally disabled when */ - /* the __STDC__ macro is defined. You can however disable this by */ - /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */ - /* */ - /* For most compilers, this will only create compilation warnings when */ - /* building the library. */ - /* */ - /* ObNote: The compiler-specific 64-bit integers are detected in the */ - /* file `ftconfig.h' either statically or through the */ - /* `configure' script on supported platforms. */ - /* */ -#undef FT_CONFIG_OPTION_FORCE_INT64 - - - /*************************************************************************/ - /* */ - /* If this macro is defined, do not try to use an assembler version of */ - /* performance-critical functions (e.g. FT_MulFix). You should only do */ - /* that to verify that the assembler function works properly, or to */ - /* execute benchmark tests of the various implementations. */ -/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ - - - /*************************************************************************/ - /* */ - /* If this macro is defined, try to use an inlined assembler version of */ - /* the `FT_MulFix' function, which is a `hotspot' when loading and */ - /* hinting glyphs, and which should be executed as fast as possible. */ - /* */ - /* Note that if your compiler or CPU is not supported, this will default */ - /* to the standard and portable implementation found in `ftcalc.c'. */ - /* */ -#define FT_CONFIG_OPTION_INLINE_MULFIX - - - /*************************************************************************/ - /* */ - /* LZW-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `compress' program. This is mostly used to parse many of the PCF */ - /* files that come with various X11 distributions. The implementation */ - /* uses NetBSD's `zopen' to partially uncompress the file on the fly */ - /* (see src/lzw/ftgzip.c). */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ -#define FT_CONFIG_OPTION_USE_LZW - - - /*************************************************************************/ - /* */ - /* Gzip-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `gzip' program. This is mostly used to parse many of the PCF files */ - /* that come with XFree86. The implementation uses `zlib' to */ - /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */ - /* */ - /* Define this macro if you want to enable this `feature'. See also */ - /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */ - /* */ -#define FT_CONFIG_OPTION_USE_ZLIB - - - /*************************************************************************/ - /* */ - /* ZLib library selection */ - /* */ - /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */ - /* It allows FreeType's `ftgzip' component to link to the system's */ - /* installation of the ZLib library. This is useful on systems like */ - /* Unix or VMS where it generally is already available. */ - /* */ - /* If you let it undefined, the component will use its own copy */ - /* of the zlib sources instead. These have been modified to be */ - /* included directly within the component and *not* export external */ - /* function names. This allows you to link any program with FreeType */ - /* _and_ ZLib without linking conflicts. */ - /* */ - /* Do not #undef this macro here since the build system might define */ - /* it for certain configurations only. */ - /* */ -/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ - - - /*************************************************************************/ - /* */ - /* Bzip2-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `bzip2' program. This is mostly used to parse many of the PCF */ - /* files that come with XFree86. The implementation uses `libbz2' to */ - /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */ - /* Contrary to gzip, bzip2 currently is not included and need to use */ - /* the system available bzip2 implementation. */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ -/* #define FT_CONFIG_OPTION_USE_BZIP2 */ - - - /*************************************************************************/ - /* */ - /* Define to disable the use of file stream functions and types, FILE, */ - /* fopen() etc. Enables the use of smaller system libraries on embedded */ - /* systems that have multiple system libraries, some with or without */ - /* file stream support, in the cases where file stream support is not */ - /* necessary such as memory loading of font files. */ - /* */ -/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ - - - /*************************************************************************/ - /* */ - /* PNG bitmap support. */ - /* */ - /* FreeType now handles loading color bitmap glyphs in the PNG format. */ - /* This requires help from the external libpng library. Uncompressed */ - /* color bitmaps do not need any external libraries and will be */ - /* supported regardless of this configuration. */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ -/* #define FT_CONFIG_OPTION_USE_PNG */ - - - /*************************************************************************/ - /* */ - /* HarfBuzz support. */ - /* */ - /* FreeType uses the HarfBuzz library to improve auto-hinting of */ - /* OpenType fonts. If available, many glyphs not directly addressable */ - /* by a font's character map will be hinted also. */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ -/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ - - - /*************************************************************************/ - /* */ - /* DLL export compilation */ - /* */ - /* When compiling FreeType as a DLL, some systems/compilers need a */ - /* special keyword in front OR after the return type of function */ - /* declarations. */ - /* */ - /* Two macros are used within the FreeType source code to define */ - /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */ - /* */ - /* FT_EXPORT( return_type ) */ - /* */ - /* is used in a function declaration, as in */ - /* */ - /* FT_EXPORT( FT_Error ) */ - /* FT_Init_FreeType( FT_Library* alibrary ); */ - /* */ - /* */ - /* FT_EXPORT_DEF( return_type ) */ - /* */ - /* is used in a function definition, as in */ - /* */ - /* FT_EXPORT_DEF( FT_Error ) */ - /* FT_Init_FreeType( FT_Library* alibrary ) */ - /* { */ - /* ... some code ... */ - /* return FT_Err_Ok; */ - /* } */ - /* */ - /* You can provide your own implementation of FT_EXPORT and */ - /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */ - /* will be later automatically defined as `extern return_type' to */ - /* allow normal compilation. */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ -/* #define FT_EXPORT(x) extern x */ -/* #define FT_EXPORT_DEF(x) x */ - - - /*************************************************************************/ - /* */ - /* Glyph Postscript Names handling */ - /* */ - /* By default, FreeType 2 is compiled with the `psnames' module. This */ - /* module is in charge of converting a glyph name string into a */ - /* Unicode value, or return a Macintosh standard glyph name for the */ - /* use with the TrueType `post' table. */ - /* */ - /* Undefine this macro if you do not want `psnames' compiled in your */ - /* build of FreeType. This has the following effects: */ - /* */ - /* - The TrueType driver will provide its own set of glyph names, */ - /* if you build it to support postscript names in the TrueType */ - /* `post' table. */ - /* */ - /* - The Type 1 driver will not be able to synthesize a Unicode */ - /* charmap out of the glyphs found in the fonts. */ - /* */ - /* You would normally undefine this configuration macro when building */ - /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */ - /* */ -#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES - - - /*************************************************************************/ - /* */ - /* Postscript Names to Unicode Values support */ - /* */ - /* By default, FreeType 2 is built with the `PSNames' module compiled */ - /* in. Among other things, the module is used to convert a glyph name */ - /* into a Unicode value. This is especially useful in order to */ - /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */ - /* through a big table named the `Adobe Glyph List' (AGL). */ - /* */ - /* Undefine this macro if you do not want the Adobe Glyph List */ - /* compiled in your `PSNames' module. The Type 1 driver will not be */ - /* able to synthesize a Unicode charmap out of the glyphs found in the */ - /* fonts. */ - /* */ -#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST - - - /*************************************************************************/ - /* */ - /* Support for Mac fonts */ - /* */ - /* Define this macro if you want support for outline fonts in Mac */ - /* format (mac dfont, mac resource, macbinary containing a mac */ - /* resource) on non-Mac platforms. */ - /* */ - /* Note that the `FOND' resource isn't checked. */ - /* */ -#define FT_CONFIG_OPTION_MAC_FONTS - - - /*************************************************************************/ - /* */ - /* Guessing methods to access embedded resource forks */ - /* */ - /* Enable extra Mac fonts support on non-Mac platforms (e.g. */ - /* GNU/Linux). */ - /* */ - /* Resource forks which include fonts data are stored sometimes in */ - /* locations which users or developers don't expected. In some cases, */ - /* resource forks start with some offset from the head of a file. In */ - /* other cases, the actual resource fork is stored in file different */ - /* from what the user specifies. If this option is activated, */ - /* FreeType tries to guess whether such offsets or different file */ - /* names must be used. */ - /* */ - /* Note that normal, direct access of resource forks is controlled via */ - /* the FT_CONFIG_OPTION_MAC_FONTS option. */ - /* */ -#ifdef FT_CONFIG_OPTION_MAC_FONTS -#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK -#endif - - - /*************************************************************************/ - /* */ - /* Allow the use of FT_Incremental_Interface to load typefaces that */ - /* contain no glyph data, but supply it via a callback function. */ - /* This is required by clients supporting document formats which */ - /* supply font data incrementally as the document is parsed, such */ - /* as the Ghostscript interpreter for the PostScript language. */ - /* */ -#define FT_CONFIG_OPTION_INCREMENTAL - - - /*************************************************************************/ - /* */ - /* The size in bytes of the render pool used by the scan-line converter */ - /* to do all of its work. */ - /* */ -#define FT_RENDER_POOL_SIZE 16384L - - - /*************************************************************************/ - /* */ - /* FT_MAX_MODULES */ - /* */ - /* The maximum number of modules that can be registered in a single */ - /* FreeType library object. 32 is the default. */ - /* */ -#define FT_MAX_MODULES 32 - - - /*************************************************************************/ - /* */ - /* Debug level */ - /* */ - /* FreeType can be compiled in debug or trace mode. In debug mode, */ - /* errors are reported through the `ftdebug' component. In trace */ - /* mode, additional messages are sent to the standard output during */ - /* execution. */ - /* */ - /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ - /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ - /* */ - /* Don't define any of these macros to compile in `release' mode! */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ -/* #define FT_DEBUG_LEVEL_ERROR */ -/* #define FT_DEBUG_LEVEL_TRACE */ - - - /*************************************************************************/ - /* */ - /* Autofitter debugging */ - /* */ - /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */ - /* control the autofitter behaviour for debugging purposes with global */ - /* boolean variables (consequently, you should *never* enable this */ - /* while compiling in `release' mode): */ - /* */ - /* _af_debug_disable_horz_hints */ - /* _af_debug_disable_vert_hints */ - /* _af_debug_disable_blue_hints */ - /* */ - /* Additionally, the following functions provide dumps of various */ - /* internal autofit structures to stdout (using `printf'): */ - /* */ - /* af_glyph_hints_dump_points */ - /* af_glyph_hints_dump_segments */ - /* af_glyph_hints_dump_edges */ - /* af_glyph_hints_get_num_segments */ - /* af_glyph_hints_get_segment_offset */ - /* */ - /* As an argument, they use another global variable: */ - /* */ - /* _af_debug_hints */ - /* */ - /* Please have a look at the `ftgrid' demo program to see how those */ - /* variables and macros should be used. */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ -/* #define FT_DEBUG_AUTOFIT */ - - - /*************************************************************************/ - /* */ - /* Memory Debugging */ - /* */ - /* FreeType now comes with an integrated memory debugger that is */ - /* capable of detecting simple errors like memory leaks or double */ - /* deletes. To compile it within your build of the library, you */ - /* should define FT_DEBUG_MEMORY here. */ - /* */ - /* Note that the memory debugger is only activated at runtime when */ - /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */ - /* */ - /* Do not #undef this macro here since the build system might define */ - /* it for certain configurations only. */ - /* */ -/* #define FT_DEBUG_MEMORY */ - - - /*************************************************************************/ - /* */ - /* Module errors */ - /* */ - /* If this macro is set (which is _not_ the default), the higher byte */ - /* of an error code gives the module in which the error has occurred, */ - /* while the lower byte is the real error code. */ - /* */ - /* Setting this macro makes sense for debugging purposes only, since */ - /* it would break source compatibility of certain programs that use */ - /* FreeType 2. */ - /* */ - /* More details can be found in the files ftmoderr.h and fterrors.h. */ - /* */ -#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS - - - /*************************************************************************/ - /* */ - /* Position Independent Code */ - /* */ - /* If this macro is set (which is _not_ the default), FreeType2 will */ - /* avoid creating constants that require address fixups. Instead the */ - /* constants will be moved into a struct and additional intialization */ - /* code will be used. */ - /* */ - /* Setting this macro is needed for systems that prohibit address */ - /* fixups, such as BREW. */ - /* */ -/* #define FT_CONFIG_OPTION_PIC */ - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** S F N T D R I V E R C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */ - /* embedded bitmaps in all formats using the SFNT module (namely */ - /* TrueType & OpenType). */ - /* */ -#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */ - /* load and enumerate the glyph Postscript names in a TrueType or */ - /* OpenType file. */ - /* */ - /* Note that when you do not compile the `PSNames' module by undefining */ - /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */ - /* contain additional code used to read the PS Names table from a font. */ - /* */ - /* (By default, the module uses `PSNames' to extract glyph names.) */ - /* */ -#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */ - /* access the internal name table in a SFNT-based format like TrueType */ - /* or OpenType. The name table contains various strings used to */ - /* describe the font, like family name, copyright, version, etc. It */ - /* does not contain any glyph name though. */ - /* */ - /* Accessing SFNT names is done through the functions declared in */ - /* `ftsnames.h'. */ - /* */ -#define TT_CONFIG_OPTION_SFNT_NAMES - - - /*************************************************************************/ - /* */ - /* TrueType CMap support */ - /* */ - /* Here you can fine-tune which TrueType CMap table format shall be */ - /* supported. */ -#define TT_CONFIG_CMAP_FORMAT_0 -#define TT_CONFIG_CMAP_FORMAT_2 -#define TT_CONFIG_CMAP_FORMAT_4 -#define TT_CONFIG_CMAP_FORMAT_6 -#define TT_CONFIG_CMAP_FORMAT_8 -#define TT_CONFIG_CMAP_FORMAT_10 -#define TT_CONFIG_CMAP_FORMAT_12 -#define TT_CONFIG_CMAP_FORMAT_13 -#define TT_CONFIG_CMAP_FORMAT_14 - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */ - /* a bytecode interpreter in the TrueType driver. */ - /* */ - /* By undefining this, you will only compile the code necessary to load */ - /* TrueType glyphs without hinting. */ - /* */ - /* Do not #undef this macro here, since the build system might */ - /* define it for certain configurations only. */ - /* */ -#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */ - /* EXPERIMENTAL subpixel hinting support into the TrueType driver. This */ - /* replaces the native TrueType hinting mechanism when anything but */ - /* FT_RENDER_MODE_MONO is requested. */ - /* */ - /* Enabling this causes the TrueType driver to ignore instructions under */ - /* certain conditions. This is done in accordance with the guide here, */ - /* with some minor differences: */ - /* */ - /* http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */ - /* */ - /* By undefining this, you only compile the code necessary to hint */ - /* TrueType glyphs with native TT hinting. */ - /* */ - /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */ - /* defined. */ - /* */ -/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - - - /*************************************************************************/ - /* */ - /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */ - /* of the TrueType bytecode interpreter is used that doesn't implement */ - /* any of the patented opcodes and algorithms. The patents related to */ - /* TrueType hinting have expired worldwide since May 2010; this option */ - /* is now deprecated. */ - /* */ - /* Note that the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* */ - /* if you define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; in other words, */ - /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */ - /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */ - /* */ - /* This macro is only useful for a small number of font files (mostly */ - /* for Asian scripts) that require bytecode interpretation to properly */ - /* load glyphs. For all other fonts, this produces unpleasant results, */ - /* thus the unpatented interpreter is never used to load glyphs from */ - /* TrueType fonts unless one of the following two options is used. */ - /* */ - /* - The unpatented interpreter is explicitly activated by the user */ - /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */ - /* when opening the FT_Face. */ - /* */ - /* - FreeType detects that the FT_Face corresponds to one of the */ - /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */ - /* contains a hard-coded list of font names and other matching */ - /* parameters (see function `tt_face_init' in file */ - /* `src/truetype/ttobjs.c'). */ - /* */ - /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */ - /* */ - /* { */ - /* FT_Parameter parameter; */ - /* FT_Open_Args open_args; */ - /* */ - /* */ - /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */ - /* */ - /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */ - /* open_args.pathname = my_font_pathname; */ - /* open_args.num_params = 1; */ - /* open_args.params = ¶meter; */ - /* */ - /* error = FT_Open_Face( library, &open_args, index, &face ); */ - /* ... */ - /* } */ - /* */ -/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */ - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */ - /* TrueType glyph loader to use Apple's definition of how to handle */ - /* component offsets in composite glyphs. */ - /* */ - /* Apple and MS disagree on the default behavior of component offsets */ - /* in composites. Apple says that they should be scaled by the scaling */ - /* factors in the transformation matrix (roughly, it's more complex) */ - /* while MS says they should not. OpenType defines two bits in the */ - /* composite flags array which can be used to disambiguate, but old */ - /* fonts will not have them. */ - /* */ - /* http://www.microsoft.com/typography/otspec/glyf.htm */ - /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */ - /* */ -#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */ - /* support for Apple's distortable font technology (fvar, gvar, cvar, */ - /* and avar tables). This has many similarities to Type 1 Multiple */ - /* Masters support. */ - /* */ -#define TT_CONFIG_OPTION_GX_VAR_SUPPORT - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_BDF if you want to include support for */ - /* an embedded `BDF ' table within SFNT-based bitmap formats. */ - /* */ -#define TT_CONFIG_OPTION_BDF - - - /*************************************************************************/ - /* */ - /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */ - /* number of bytecode instructions executed for a single run of the */ - /* bytecode interpreter, needed to prevent infinite loops. You don't */ - /* want to change this except for very special situations (e.g., making */ - /* a library fuzzer spend less time to handle broken fonts). */ - /* */ - /* It is not expected that this value is ever modified by a configuring */ - /* script; instead, it gets surrounded with #ifndef ... #endif so that */ - /* the value can be set as a preprocessor option on the compiler's */ - /* command line. */ - /* */ -#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES -#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L -#endif - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */ - /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */ - /* required. */ - /* */ -#define T1_MAX_DICT_DEPTH 5 - - - /*************************************************************************/ - /* */ - /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */ - /* calls during glyph loading. */ - /* */ -#define T1_MAX_SUBRS_CALLS 16 - - - /*************************************************************************/ - /* */ - /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */ - /* minimum of 16 is required. */ - /* */ - /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */ - /* */ -#define T1_MAX_CHARSTRINGS_OPERANDS 256 - - - /*************************************************************************/ - /* */ - /* Define this configuration macro if you want to prevent the */ - /* compilation of `t1afm', which is in charge of reading Type 1 AFM */ - /* files into an existing face. Note that if set, the T1 driver will be */ - /* unable to produce kerning distances. */ - /* */ -#undef T1_CONFIG_OPTION_NO_AFM - - - /*************************************************************************/ - /* */ - /* Define this configuration macro if you want to prevent the */ - /* compilation of the Multiple Masters font support in the Type 1 */ - /* driver. */ - /* */ -#undef T1_CONFIG_OPTION_NO_MM_SUPPORT - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** C F F D R I V E R C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */ - /* possible to set up the default values of the four control points that */ - /* define the stem darkening behaviour of the (new) CFF engine. For */ - /* more details please read the documentation of the */ - /* `darkening-parameters' property of the cff driver module (file */ - /* `ftcffdrv.h'), which allows the control at run-time. */ - /* */ - /* Do *not* undefine these macros! */ - /* */ -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 - -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000 -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275 - -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667 -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275 - -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333 -#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 - - - /*************************************************************************/ - /* */ - /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */ - /* engine gets compiled into FreeType. If defined, it is possible to */ - /* switch between the two engines using the `hinting-engine' property of */ - /* the cff driver module. */ - /* */ -/* #define CFF_CONFIG_OPTION_OLD_ENGINE */ - - - /*************************************************************************/ - /*************************************************************************/ - /**** ****/ - /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ - /**** ****/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */ - /* support. */ - /* */ -#define AF_CONFIG_OPTION_CJK - - /*************************************************************************/ - /* */ - /* Compile autofit module with Indic script support. */ - /* */ -#define AF_CONFIG_OPTION_INDIC - - /*************************************************************************/ - /* */ - /* 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. */ - /* */ - /* This experimental option is active only if the rendering mode is */ - /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */ - /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */ - /* information; by default it is switched off). */ - /* */ -#define AF_CONFIG_OPTION_USE_WARPER - - /* */ - - - /* - * This macro is obsolete. Support has been removed in FreeType - * version 2.5. - */ -/* #define FT_CONFIG_OPTION_OLD_INTERNALS */ - - - /* - * This macro is defined if either unpatented or native TrueType - * hinting is requested by the definitions above. - */ -#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER -#define TT_USE_BYTECODE_INTERPRETER -#undef TT_CONFIG_OPTION_UNPATENTED_HINTING -#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING -#define TT_USE_BYTECODE_INTERPRETER -#endif - - - /* - * Check CFF darkening parameters. The checks are the same as in function - * `cff_property_set' in file `cffdrivr.c'. - */ -#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \ - \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \ - \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \ - \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \ - CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500 -#error "Invalid CFF darkening parameters!" -#endif - -FT_END_HEADER - - -#endif /* __FTOPTION_H__ */ - - -/* END */ diff --git a/win32/include/freetype/config/ftstdlib.h b/win32/include/freetype/config/ftstdlib.h deleted file mode 100644 index 4b471d4d..00000000 --- a/win32/include/freetype/config/ftstdlib.h +++ /dev/null @@ -1,174 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftstdlib.h */ -/* */ -/* ANSI-specific library and header configuration file (specification */ -/* only). */ -/* */ -/* Copyright 2002-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file is used to group all #includes to the ANSI C library that */ - /* FreeType normally requires. It also defines macros to rename the */ - /* standard functions within the FreeType source code. */ - /* */ - /* Load a file which defines __FTSTDLIB_H__ before this one to override */ - /* it. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTSTDLIB_H__ -#define __FTSTDLIB_H__ - - -#include - -#define ft_ptrdiff_t ptrdiff_t - - - /**********************************************************************/ - /* */ - /* integer limits */ - /* */ - /* 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. */ - /* */ - /* 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 `int' is 36 bits), we do not make any guarantee */ - /* about the correct behaviour of FT2 with all fonts. */ - /* */ - /* In these case, `ftconfig.h' will refuse to compile anyway with a */ - /* message like `couldn't find 32-bit type' or something similar. */ - /* */ - /**********************************************************************/ - - -#include - -#define FT_CHAR_BIT CHAR_BIT -#define FT_USHORT_MAX USHRT_MAX -#define FT_INT_MAX INT_MAX -#define FT_INT_MIN INT_MIN -#define FT_UINT_MAX UINT_MAX -#define FT_LONG_MAX LONG_MAX -#define FT_ULONG_MAX ULONG_MAX - - - /**********************************************************************/ - /* */ - /* character and string processing */ - /* */ - /**********************************************************************/ - - -#include - -#define ft_memchr memchr -#define ft_memcmp memcmp -#define ft_memcpy memcpy -#define ft_memmove memmove -#define ft_memset memset -#define ft_strcat strcat -#define ft_strcmp strcmp -#define ft_strcpy strcpy -#define ft_strlen strlen -#define ft_strncmp strncmp -#define ft_strncpy strncpy -#define ft_strrchr strrchr -#define ft_strstr strstr - - - /**********************************************************************/ - /* */ - /* file handling */ - /* */ - /**********************************************************************/ - - -#include - -#define FT_FILE FILE -#define ft_fclose fclose -#define ft_fopen fopen -#define ft_fread fread -#define ft_fseek fseek -#define ft_ftell ftell -#define ft_sprintf sprintf - - - /**********************************************************************/ - /* */ - /* sorting */ - /* */ - /**********************************************************************/ - - -#include - -#define ft_qsort qsort - - - /**********************************************************************/ - /* */ - /* memory allocation */ - /* */ - /**********************************************************************/ - - -#define ft_scalloc calloc -#define ft_sfree free -#define ft_smalloc malloc -#define ft_srealloc realloc - - - /**********************************************************************/ - /* */ - /* miscellaneous */ - /* */ - /**********************************************************************/ - - -#define ft_atol atol - - - /**********************************************************************/ - /* */ - /* execution control */ - /* */ - /**********************************************************************/ - - -#include - -#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */ - /* jmp_buf is defined as a macro */ - /* on certain platforms */ - -#define ft_longjmp longjmp -#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */ - - - /* the following is only used for debugging purposes, i.e., if */ - /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */ - -#include - - -#endif /* __FTSTDLIB_H__ */ - - -/* END */ diff --git a/win32/include/freetype/freetype.h b/win32/include/freetype/freetype.h deleted file mode 100644 index 41379ea1..00000000 --- a/win32/include/freetype/freetype.h +++ /dev/null @@ -1,4284 +0,0 @@ -/***************************************************************************/ -/* */ -/* freetype.h */ -/* */ -/* FreeType high-level API and common types (specification only). */ -/* */ -/* Copyright 1996-2015 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 __FREETYPE_H__ -#define __FREETYPE_H__ - - -#ifndef FT_FREETYPE_H -#error "`ft2build.h' hasn't been included yet!" -#error "Please always use macros to include FreeType header files." -#error "Example:" -#error " #include " -#error " #include FT_FREETYPE_H" -#endif - - -#include -#include FT_CONFIG_CONFIG_H -#include FT_TYPES_H -#include FT_ERRORS_H - - -FT_BEGIN_HEADER - - - - /*************************************************************************/ - /* */ - /*
*/ - /* header_inclusion */ - /* */ - /* */ - /* FreeType's header inclusion scheme */ - /* */ - /* <Abstract> */ - /* How client applications should include FreeType header files. */ - /* */ - /* <Description> */ - /* To be as flexible as possible (and for historical reasons), */ - /* FreeType uses a very special inclusion scheme to load header */ - /* files, for example */ - /* */ - /* { */ - /* #include <ft2build.h> */ - /* */ - /* #include FT_FREETYPE_H */ - /* #include FT_OUTLINE_H */ - /* } */ - /* */ - /* A compiler and its preprocessor only needs an include path to find */ - /* the file `ft2build.h'; the exact locations and names of the other */ - /* FreeType header files are hidden by preprocessor macro names, */ - /* loaded by `ft2build.h'. The API documentation always gives the */ - /* header macro name needed for a particular function. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* user_allocation */ - /* */ - /* <Title> */ - /* User allocation */ - /* */ - /* <Abstract> */ - /* How client applications should allocate FreeType data structures. */ - /* */ - /* <Description> */ - /* FreeType assumes that structures allocated by the user and passed */ - /* as arguments are zeroed out except for the actual data. In other */ - /* words, it is recommended to use `calloc' (or variants of it) */ - /* instead of `malloc' for allocation. */ - /* */ - /*************************************************************************/ - - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* B A S I C T Y P E S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* base_interface */ - /* */ - /* <Title> */ - /* Base Interface */ - /* */ - /* <Abstract> */ - /* The FreeType~2 base font interface. */ - /* */ - /* <Description> */ - /* This section describes the most important public high-level API */ - /* functions of FreeType~2. */ - /* */ - /* <Order> */ - /* FT_Library */ - /* FT_Face */ - /* FT_Size */ - /* FT_GlyphSlot */ - /* FT_CharMap */ - /* FT_Encoding */ - /* FT_ENC_TAG */ - /* */ - /* FT_FaceRec */ - /* */ - /* FT_FACE_FLAG_SCALABLE */ - /* FT_FACE_FLAG_FIXED_SIZES */ - /* FT_FACE_FLAG_FIXED_WIDTH */ - /* FT_FACE_FLAG_HORIZONTAL */ - /* FT_FACE_FLAG_VERTICAL */ - /* FT_FACE_FLAG_COLOR */ - /* FT_FACE_FLAG_SFNT */ - /* FT_FACE_FLAG_CID_KEYED */ - /* FT_FACE_FLAG_TRICKY */ - /* FT_FACE_FLAG_KERNING */ - /* FT_FACE_FLAG_MULTIPLE_MASTERS */ - /* FT_FACE_FLAG_GLYPH_NAMES */ - /* FT_FACE_FLAG_EXTERNAL_STREAM */ - /* FT_FACE_FLAG_HINTER */ - /* FT_FACE_FLAG_TRICKY */ - /* */ - /* FT_HAS_HORIZONTAL */ - /* FT_HAS_VERTICAL */ - /* FT_HAS_KERNING */ - /* FT_HAS_FIXED_SIZES */ - /* FT_HAS_GLYPH_NAMES */ - /* FT_HAS_MULTIPLE_MASTERS */ - /* FT_HAS_COLOR */ - /* */ - /* FT_IS_SFNT */ - /* FT_IS_SCALABLE */ - /* FT_IS_FIXED_WIDTH */ - /* FT_IS_CID_KEYED */ - /* FT_IS_TRICKY */ - /* */ - /* FT_STYLE_FLAG_BOLD */ - /* FT_STYLE_FLAG_ITALIC */ - /* */ - /* FT_SizeRec */ - /* FT_Size_Metrics */ - /* */ - /* FT_GlyphSlotRec */ - /* FT_Glyph_Metrics */ - /* FT_SubGlyph */ - /* */ - /* FT_Bitmap_Size */ - /* */ - /* FT_Init_FreeType */ - /* FT_Done_FreeType */ - /* */ - /* FT_New_Face */ - /* FT_Done_Face */ - /* FT_Reference_Face */ - /* FT_New_Memory_Face */ - /* FT_Open_Face */ - /* FT_Open_Args */ - /* FT_Parameter */ - /* FT_Attach_File */ - /* FT_Attach_Stream */ - /* */ - /* FT_Set_Char_Size */ - /* FT_Set_Pixel_Sizes */ - /* FT_Request_Size */ - /* FT_Select_Size */ - /* FT_Size_Request_Type */ - /* FT_Size_RequestRec */ - /* FT_Size_Request */ - /* FT_Set_Transform */ - /* FT_Load_Glyph */ - /* FT_Get_Char_Index */ - /* FT_Get_First_Char */ - /* FT_Get_Next_Char */ - /* FT_Get_Name_Index */ - /* FT_Load_Char */ - /* */ - /* FT_OPEN_MEMORY */ - /* FT_OPEN_STREAM */ - /* FT_OPEN_PATHNAME */ - /* FT_OPEN_DRIVER */ - /* FT_OPEN_PARAMS */ - /* */ - /* FT_LOAD_DEFAULT */ - /* FT_LOAD_RENDER */ - /* FT_LOAD_MONOCHROME */ - /* FT_LOAD_LINEAR_DESIGN */ - /* FT_LOAD_NO_SCALE */ - /* FT_LOAD_NO_HINTING */ - /* FT_LOAD_NO_BITMAP */ - /* FT_LOAD_NO_AUTOHINT */ - /* FT_LOAD_COLOR */ - /* */ - /* FT_LOAD_VERTICAL_LAYOUT */ - /* FT_LOAD_IGNORE_TRANSFORM */ - /* FT_LOAD_FORCE_AUTOHINT */ - /* FT_LOAD_NO_RECURSE */ - /* FT_LOAD_PEDANTIC */ - /* */ - /* FT_LOAD_TARGET_NORMAL */ - /* FT_LOAD_TARGET_LIGHT */ - /* FT_LOAD_TARGET_MONO */ - /* FT_LOAD_TARGET_LCD */ - /* FT_LOAD_TARGET_LCD_V */ - /* */ - /* FT_LOAD_TARGET_MODE */ - /* */ - /* FT_Render_Glyph */ - /* FT_Render_Mode */ - /* FT_Get_Kerning */ - /* FT_Kerning_Mode */ - /* FT_Get_Track_Kerning */ - /* FT_Get_Glyph_Name */ - /* FT_Get_Postscript_Name */ - /* */ - /* FT_CharMapRec */ - /* FT_Select_Charmap */ - /* FT_Set_Charmap */ - /* FT_Get_Charmap_Index */ - /* */ - /* FT_Get_FSType_Flags */ - /* FT_Get_SubGlyph_Info */ - /* */ - /* FT_Face_Internal */ - /* FT_Size_Internal */ - /* FT_Slot_Internal */ - /* */ - /* FT_FACE_FLAG_XXX */ - /* FT_STYLE_FLAG_XXX */ - /* FT_OPEN_XXX */ - /* FT_LOAD_XXX */ - /* FT_LOAD_TARGET_XXX */ - /* FT_SUBGLYPH_FLAG_XXX */ - /* FT_FSTYPE_XXX */ - /* */ - /* FT_HAS_FAST_GLYPHS */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Glyph_Metrics */ - /* */ - /* <Description> */ - /* A structure used to model the metrics of a single glyph. The */ - /* values are expressed in 26.6 fractional pixel format; if the flag */ - /* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */ - /* are expressed in font units instead. */ - /* */ - /* <Fields> */ - /* width :: */ - /* The glyph's width. */ - /* */ - /* height :: */ - /* The glyph's height. */ - /* */ - /* horiBearingX :: */ - /* Left side bearing for horizontal layout. */ - /* */ - /* horiBearingY :: */ - /* Top side bearing for horizontal layout. */ - /* */ - /* horiAdvance :: */ - /* Advance width for horizontal layout. */ - /* */ - /* vertBearingX :: */ - /* Left side bearing for vertical layout. */ - /* */ - /* vertBearingY :: */ - /* Top side bearing for vertical layout. Larger positive values */ - /* mean further below the vertical glyph origin. */ - /* */ - /* vertAdvance :: */ - /* Advance height for vertical layout. Positive values mean the */ - /* glyph has a positive advance downward. */ - /* */ - /* <Note> */ - /* If not disabled with @FT_LOAD_NO_HINTING, the values represent */ - /* dimensions of the hinted glyph (in case hinting is applicable). */ - /* */ - /* Stroking a glyph with an outside border does not increase */ - /* `horiAdvance' or `vertAdvance'; you have to manually adjust these */ - /* values to account for the added width and height. */ - /* */ - typedef struct FT_Glyph_Metrics_ - { - FT_Pos width; - FT_Pos height; - - FT_Pos horiBearingX; - FT_Pos horiBearingY; - FT_Pos horiAdvance; - - FT_Pos vertBearingX; - FT_Pos vertBearingY; - FT_Pos vertAdvance; - - } FT_Glyph_Metrics; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Bitmap_Size */ - /* */ - /* <Description> */ - /* This structure models the metrics of a bitmap strike (i.e., a set */ - /* of glyphs for a given point size and resolution) in a bitmap font. */ - /* It is used for the `available_sizes' field of @FT_Face. */ - /* */ - /* <Fields> */ - /* height :: The vertical distance, in pixels, between two */ - /* consecutive baselines. It is always positive. */ - /* */ - /* width :: The average width, in pixels, of all glyphs in the */ - /* strike. */ - /* */ - /* size :: The nominal size of the strike in 26.6 fractional */ - /* points. This field is not very useful. */ - /* */ - /* x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional */ - /* pixels. */ - /* */ - /* y_ppem :: The vertical ppem (nominal height) in 26.6 fractional */ - /* pixels. */ - /* */ - /* <Note> */ - /* Windows FNT: */ - /* The nominal size given in a FNT font is not reliable. Thus when */ - /* the driver finds it incorrect, it sets `size' to some calculated */ - /* values and sets `x_ppem' and `y_ppem' to the pixel width and */ - /* height given in the font, respectively. */ - /* */ - /* TrueType embedded bitmaps: */ - /* `size', `width', and `height' values are not contained in the */ - /* bitmap strike itself. They are computed from the global font */ - /* parameters. */ - /* */ - typedef struct FT_Bitmap_Size_ - { - FT_Short height; - FT_Short width; - - FT_Pos size; - - FT_Pos x_ppem; - FT_Pos y_ppem; - - } FT_Bitmap_Size; - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* O B J E C T C L A S S E S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Library */ - /* */ - /* <Description> */ - /* A handle to a FreeType library instance. Each `library' is */ - /* completely independent from the others; it is the `root' of a set */ - /* of objects like fonts, faces, sizes, etc. */ - /* */ - /* It also embeds a memory manager (see @FT_Memory), as well as a */ - /* scan-line converter object (see @FT_Raster). */ - /* */ - /* In multi-threaded applications it is easiest to use one */ - /* `FT_Library' object per thread. In case this is too cumbersome, */ - /* a single `FT_Library' object across threads is possible also */ - /* (since FreeType version 2.5.6), as long as a mutex lock is used */ - /* around @FT_New_Face and @FT_Done_Face. */ - /* */ - /* <Note> */ - /* Library objects are normally created by @FT_Init_FreeType, and */ - /* destroyed with @FT_Done_FreeType. If you need reference-counting */ - /* (cf. @FT_Reference_Library), use @FT_New_Library and */ - /* @FT_Done_Library. */ - /* */ - typedef struct FT_LibraryRec_ *FT_Library; - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Module */ - /* */ - /* <Description> */ - /* A handle to a given FreeType module object. Each module can be a */ - /* font driver, a renderer, or anything else that provides services */ - /* to the formers. */ - /* */ - typedef struct FT_ModuleRec_* FT_Module; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Driver */ - /* */ - /* <Description> */ - /* A handle to a given FreeType font driver object. Each font driver */ - /* is a special module capable of creating faces from font files. */ - /* */ - typedef struct FT_DriverRec_* FT_Driver; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Renderer */ - /* */ - /* <Description> */ - /* A handle to a given FreeType renderer. A renderer is a special */ - /* module in charge of converting a glyph image to a bitmap, when */ - /* necessary. Each renderer supports a given glyph image format, and */ - /* one or more target surface depths. */ - /* */ - typedef struct FT_RendererRec_* FT_Renderer; - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* base_interface */ - /* */ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Face */ - /* */ - /* <Description> */ - /* A handle to a given typographic face object. A face object models */ - /* a given typeface, in a given style. */ - /* */ - /* <Note> */ - /* Each face object also owns a single @FT_GlyphSlot object, as well */ - /* as one or more @FT_Size objects. */ - /* */ - /* Use @FT_New_Face or @FT_Open_Face to create a new face object from */ - /* a given filepathname or a custom input stream. */ - /* */ - /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */ - /* */ - /* An `FT_Face' object can only be safely used from one thread at a */ - /* time. Similarly, creation and destruction of `FT_Face' with the */ - /* same @FT_Library object can only be done from one thread at a */ - /* time. On the other hand, functions like @FT_Load_Glyph and its */ - /* siblings are thread-safe and do not need the lock to be held as */ - /* long as the same `FT_Face' object is not used from multiple */ - /* threads at the same time. */ - /* */ - /* <Also> */ - /* See @FT_FaceRec for the publicly accessible fields of a given face */ - /* object. */ - /* */ - typedef struct FT_FaceRec_* FT_Face; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Size */ - /* */ - /* <Description> */ - /* A handle to an object used to model a face scaled to a given */ - /* character size. */ - /* */ - /* <Note> */ - /* Each @FT_Face has an _active_ @FT_Size object that is used by */ - /* functions like @FT_Load_Glyph to determine the scaling */ - /* transformation that in turn is used to load and hint glyphs and */ - /* metrics. */ - /* */ - /* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, */ - /* @FT_Request_Size or even @FT_Select_Size to change the content */ - /* (i.e., the scaling values) of the active @FT_Size. */ - /* */ - /* You can use @FT_New_Size to create additional size objects for a */ - /* given @FT_Face, but they won't be used by other functions until */ - /* you activate it through @FT_Activate_Size. Only one size can be */ - /* activated at any given time per face. */ - /* */ - /* <Also> */ - /* See @FT_SizeRec for the publicly accessible fields of a given size */ - /* object. */ - /* */ - typedef struct FT_SizeRec_* FT_Size; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_GlyphSlot */ - /* */ - /* <Description> */ - /* A handle to a given `glyph slot'. A slot is a container where it */ - /* is possible to load any of the glyphs contained in its parent */ - /* face. */ - /* */ - /* In other words, each time you call @FT_Load_Glyph or */ - /* @FT_Load_Char, the slot's content is erased by the new glyph data, */ - /* i.e., the glyph's metrics, its image (bitmap or outline), and */ - /* other control information. */ - /* */ - /* <Also> */ - /* See @FT_GlyphSlotRec for the publicly accessible glyph fields. */ - /* */ - typedef struct FT_GlyphSlotRec_* FT_GlyphSlot; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_CharMap */ - /* */ - /* <Description> */ - /* A handle to a given character map. A charmap is used to translate */ - /* character codes in a given encoding into glyph indexes for its */ - /* parent's face. Some font formats may provide several charmaps per */ - /* font. */ - /* */ - /* Each face object owns zero or more charmaps, but only one of them */ - /* can be `active' and used by @FT_Get_Char_Index or @FT_Load_Char. */ - /* */ - /* The list of available charmaps in a face is available through the */ - /* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */ - /* */ - /* The currently active charmap is available as `face->charmap'. */ - /* You should call @FT_Set_Charmap to change it. */ - /* */ - /* <Note> */ - /* When a new face is created (either through @FT_New_Face or */ - /* @FT_Open_Face), the library looks for a Unicode charmap within */ - /* the list and automatically activates it. */ - /* */ - /* <Also> */ - /* See @FT_CharMapRec for the publicly accessible fields of a given */ - /* character map. */ - /* */ - typedef struct FT_CharMapRec_* FT_CharMap; - - - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_ENC_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags into an unsigned long. It is */ - /* used to define `encoding' identifiers (see @FT_Encoding). */ - /* */ - /* <Note> */ - /* Since many 16-bit compilers don't like 32-bit enumerations, you */ - /* should redefine this macro in case of problems to something like */ - /* this: */ - /* */ - /* { */ - /* #define FT_ENC_TAG( value, a, b, c, d ) value */ - /* } */ - /* */ - /* to get a simple enumeration without assigning special numbers. */ - /* */ - -#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) ) - -#endif /* FT_ENC_TAG */ - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Encoding */ - /* */ - /* <Description> */ - /* An enumeration used to specify character sets supported by */ - /* charmaps. Used in the @FT_Select_Charmap API function. */ - /* */ - /* <Note> */ - /* Despite the name, this enumeration lists specific character */ - /* repertories (i.e., charsets), and not text encoding methods (e.g., */ - /* UTF-8, UTF-16, etc.). */ - /* */ - /* Other encodings might be defined in the future. */ - /* */ - /* <Values> */ - /* FT_ENCODING_NONE :: */ - /* The encoding value~0 is reserved. */ - /* */ - /* FT_ENCODING_UNICODE :: */ - /* Corresponds to the Unicode character set. This value covers */ - /* all versions of the Unicode repertoire, including ASCII and */ - /* Latin-1. Most fonts include a Unicode charmap, but not all */ - /* of them. */ - /* */ - /* For example, if you want to access Unicode value U+1F028 (and */ - /* the font contains it), use value 0x1F028 as the input value for */ - /* @FT_Get_Char_Index. */ - /* */ - /* FT_ENCODING_MS_SYMBOL :: */ - /* Corresponds to the Microsoft Symbol encoding, used to encode */ - /* mathematical symbols and wingdings. For more information, see */ - /* `http://www.microsoft.com/typography/otspec/recom.htm', */ - /* `http://www.kostis.net/charsets/symbol.htm', and */ - /* `http://www.kostis.net/charsets/wingding.htm'. */ - /* */ - /* This encoding uses character codes from the PUA (Private Unicode */ - /* Area) in the range U+F020-U+F0FF. */ - /* */ - /* FT_ENCODING_SJIS :: */ - /* Corresponds to Japanese SJIS encoding. More info at */ - /* at `http://en.wikipedia.org/wiki/Shift_JIS'. */ - /* See note on multi-byte encodings below. */ - /* */ - /* FT_ENCODING_GB2312 :: */ - /* Corresponds to an encoding system for Simplified Chinese as used */ - /* used in mainland China. */ - /* */ - /* FT_ENCODING_BIG5 :: */ - /* Corresponds to an encoding system for Traditional Chinese as */ - /* used in Taiwan and Hong Kong. */ - /* */ - /* FT_ENCODING_WANSUNG :: */ - /* Corresponds to the Korean encoding system known as Wansung. */ - /* For more information see */ - /* `https://msdn.microsoft.com/en-US/goglobal/cc305154'. */ - /* */ - /* FT_ENCODING_JOHAB :: */ - /* The Korean standard character set (KS~C 5601-1992), which */ - /* corresponds to MS Windows code page 1361. This character set */ - /* includes all possible Hangeul character combinations. */ - /* */ - /* FT_ENCODING_ADOBE_LATIN_1 :: */ - /* Corresponds to a Latin-1 encoding as defined in a Type~1 */ - /* PostScript font. It is limited to 256 character codes. */ - /* */ - /* FT_ENCODING_ADOBE_STANDARD :: */ - /* Corresponds to the Adobe Standard encoding, as found in Type~1, */ - /* CFF, and OpenType/CFF fonts. It is limited to 256 character */ - /* codes. */ - /* */ - /* FT_ENCODING_ADOBE_EXPERT :: */ - /* Corresponds to the Adobe Expert encoding, as found in Type~1, */ - /* CFF, and OpenType/CFF fonts. It is limited to 256 character */ - /* codes. */ - /* */ - /* FT_ENCODING_ADOBE_CUSTOM :: */ - /* Corresponds to a custom encoding, as found in Type~1, CFF, and */ - /* OpenType/CFF fonts. It is limited to 256 character codes. */ - /* */ - /* FT_ENCODING_APPLE_ROMAN :: */ - /* Corresponds to the 8-bit Apple roman encoding. Many TrueType */ - /* and OpenType fonts contain a charmap for this encoding, since */ - /* older versions of Mac OS are able to use it. */ - /* */ - /* FT_ENCODING_OLD_LATIN_2 :: */ - /* This value is deprecated and was never used nor reported by */ - /* FreeType. Don't use or test for it. */ - /* */ - /* FT_ENCODING_MS_SJIS :: */ - /* Same as FT_ENCODING_SJIS. Deprecated. */ - /* */ - /* FT_ENCODING_MS_GB2312 :: */ - /* Same as FT_ENCODING_GB2312. Deprecated. */ - /* */ - /* FT_ENCODING_MS_BIG5 :: */ - /* Same as FT_ENCODING_BIG5. Deprecated. */ - /* */ - /* FT_ENCODING_MS_WANSUNG :: */ - /* Same as FT_ENCODING_WANSUNG. Deprecated. */ - /* */ - /* FT_ENCODING_MS_JOHAB :: */ - /* Same as FT_ENCODING_JOHAB. Deprecated. */ - /* */ - /* <Note> */ - /* By default, FreeType automatically synthesizes a Unicode charmap */ - /* for PostScript fonts, using their glyph names dictionaries. */ - /* However, it also reports the encodings defined explicitly in the */ - /* font file, for the cases when they are needed, with the Adobe */ - /* values as well. */ - /* */ - /* 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 */ - /* FT_ENCODING_UNICODE). Use @FT_Get_BDF_Charset_ID to find out */ - /* which encoding is really present. If, for example, the */ - /* `cs_registry' field is `KOI8' and the `cs_encoding' field is `R', */ - /* the font is encoded in KOI8-R. */ - /* */ - /* FT_ENCODING_NONE is always set (with a single exception) by the */ - /* winfonts driver. Use @FT_Get_WinFNT_Header and examine the */ - /* `charset' field of the @FT_WinFNT_HeaderRec structure to find out */ - /* which encoding is really present. For example, */ - /* @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for */ - /* Russian). */ - /* */ - /* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */ - /* and `encoding_id' is not @TT_MAC_ID_ROMAN (otherwise it is set to */ - /* FT_ENCODING_APPLE_ROMAN). */ - /* */ - /* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function */ - /* @FT_Get_CMap_Language_ID to query the Mac language ID that may */ - /* be needed to be able to distinguish Apple encoding variants. See */ - /* */ - /* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt */ - /* */ - /* to get an idea how to do that. Basically, if the language ID */ - /* is~0, don't use it, otherwise subtract 1 from the language ID. */ - /* Then examine `encoding_id'. If, for example, `encoding_id' is */ - /* @TT_MAC_ID_ROMAN and the language ID (minus~1) is */ - /* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */ - /* @TT_MAC_ID_ARABIC with `TT_MAC_LANGID_FARSI' means the Farsi */ - /* variant the Arabic encoding. */ - /* */ - typedef enum FT_Encoding_ - { - FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ), - - FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ), - FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ), - - FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ), - FT_ENC_TAG( FT_ENCODING_GB2312, 'g', 'b', ' ', ' ' ), - FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ), - FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ), - FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ), - - /* for backwards compatibility */ - FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS, - FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312, - FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5, - FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG, - FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB, - - FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ), - FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E' ), - FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C' ), - FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1' ), - - FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ), - - FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' ) - - } FT_Encoding; - - - /* these constants are deprecated; use the corresponding `FT_Encoding' */ - /* values instead */ -#define ft_encoding_none FT_ENCODING_NONE -#define ft_encoding_unicode FT_ENCODING_UNICODE -#define ft_encoding_symbol FT_ENCODING_MS_SYMBOL -#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 -#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 -#define ft_encoding_sjis FT_ENCODING_SJIS -#define ft_encoding_gb2312 FT_ENCODING_GB2312 -#define ft_encoding_big5 FT_ENCODING_BIG5 -#define ft_encoding_wansung FT_ENCODING_WANSUNG -#define ft_encoding_johab FT_ENCODING_JOHAB - -#define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD -#define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT -#define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM -#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_CharMapRec */ - /* */ - /* <Description> */ - /* The base charmap structure. */ - /* */ - /* <Fields> */ - /* face :: A handle to the parent face object. */ - /* */ - /* encoding :: An @FT_Encoding tag identifying the charmap. Use */ - /* this with @FT_Select_Charmap. */ - /* */ - /* platform_id :: An ID number describing the platform for the */ - /* following encoding ID. This comes directly from */ - /* the TrueType specification and should be emulated */ - /* for other formats. */ - /* */ - /* encoding_id :: A platform specific encoding number. This also */ - /* comes from the TrueType specification and should be */ - /* emulated similarly. */ - /* */ - typedef struct FT_CharMapRec_ - { - FT_Face face; - FT_Encoding encoding; - FT_UShort platform_id; - FT_UShort encoding_id; - - } FT_CharMapRec; - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* B A S E O B J E C T C L A S S E S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Face_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Face_InternalRec' structure, used to */ - /* model private data of a given @FT_Face object. */ - /* */ - /* This structure might change between releases of FreeType~2 and is */ - /* not generally available to client applications. */ - /* */ - typedef struct FT_Face_InternalRec_* FT_Face_Internal; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_FaceRec */ - /* */ - /* <Description> */ - /* FreeType root face class structure. A face object models a */ - /* typeface in a font file. */ - /* */ - /* <Fields> */ - /* num_faces :: The number of faces in the font file. Some */ - /* font formats can have multiple faces in */ - /* a font file. */ - /* */ - /* face_index :: This field holds two different values. */ - /* Bits 0-15 are the index of the face in the */ - /* font file (starting with value~0). They */ - /* are set to~0 if there is only one face in */ - /* the font file. */ - /* */ - /* Bits 16-30 are relevant to GX variation */ - /* fonts only, holding the named instance */ - /* index for the current face index (starting */ - /* with value~1; value~0 indicates font access */ - /* without GX variation data). For non-GX */ - /* fonts, bits 16-30 are ignored. If we have */ - /* the third named instance of face~4, say, */ - /* `face_index' is set to 0x00030004. */ - /* */ - /* Bit 31 is always zero (this is, */ - /* `face_index' is always a positive value). */ - /* */ - /* face_flags :: A set of bit flags that give important */ - /* information about the face; see */ - /* @FT_FACE_FLAG_XXX for the details. */ - /* */ - /* style_flags :: The lower 16~bits contain a set of bit */ - /* flags indicating the style of the face; see */ - /* @FT_STYLE_FLAG_XXX for the details. Bits */ - /* 16-30 hold the number of named instances */ - /* available for the current face if we have a */ - /* GX variation (sub)font. Bit 31 is always */ - /* zero (this is, `style_flags' is always a */ - /* positive value). */ - /* */ - /* num_glyphs :: The number of glyphs in the face. If the */ - /* face is scalable and has sbits (see */ - /* `num_fixed_sizes'), it is set to the number */ - /* of outline glyphs. */ - /* */ - /* For CID-keyed fonts, this value gives the */ - /* highest CID used in the font. */ - /* */ - /* family_name :: The face's family name. This is an ASCII */ - /* string, usually in English, that describes */ - /* the typeface's family (like `Times New */ - /* Roman', `Bodoni', `Garamond', etc). This */ - /* is a least common denominator used to list */ - /* fonts. Some formats (TrueType & OpenType) */ - /* provide localized and Unicode versions of */ - /* this string. Applications should use the */ - /* format specific interface to access them. */ - /* Can be NULL (e.g., in fonts embedded in a */ - /* PDF file). */ - /* */ - /* In case the font doesn't provide a specific */ - /* family name entry, FreeType tries to */ - /* synthesize one, deriving it from other name */ - /* entries. */ - /* */ - /* style_name :: The face's style name. This is an ASCII */ - /* string, usually in English, that describes */ - /* the typeface's style (like `Italic', */ - /* `Bold', `Condensed', etc). Not all font */ - /* formats provide a style name, so this field */ - /* is optional, and can be set to NULL. As */ - /* for `family_name', some formats provide */ - /* localized and Unicode versions of this */ - /* string. Applications should use the format */ - /* specific interface to access them. */ - /* */ - /* num_fixed_sizes :: The number of bitmap strikes in the face. */ - /* Even if the face is scalable, there might */ - /* still be bitmap strikes, which are called */ - /* `sbits' in that case. */ - /* */ - /* available_sizes :: An array of @FT_Bitmap_Size for all bitmap */ - /* strikes in the face. It is set to NULL if */ - /* there is no bitmap strike. */ - /* */ - /* num_charmaps :: The number of charmaps in the face. */ - /* */ - /* charmaps :: An array of the charmaps of the face. */ - /* */ - /* generic :: A field reserved for client uses. See the */ - /* @FT_Generic type description. */ - /* */ - /* bbox :: The font bounding box. Coordinates are */ - /* expressed in font units (see */ - /* `units_per_EM'). The box is large enough */ - /* to contain any glyph from the font. Thus, */ - /* `bbox.yMax' can be seen as the `maximum */ - /* ascender', and `bbox.yMin' as the `minimum */ - /* descender'. Only relevant for scalable */ - /* formats. */ - /* */ - /* Note that the bounding box might be off by */ - /* (at least) one pixel for hinted fonts. See */ - /* @FT_Size_Metrics for further discussion. */ - /* */ - /* units_per_EM :: The number of font units per EM square for */ - /* this face. This is typically 2048 for */ - /* TrueType fonts, and 1000 for Type~1 fonts. */ - /* Only relevant for scalable formats. */ - /* */ - /* ascender :: The typographic ascender of the face, */ - /* expressed in font units. For font formats */ - /* not having this information, it is set to */ - /* `bbox.yMax'. Only relevant for scalable */ - /* formats. */ - /* */ - /* descender :: The typographic descender of the face, */ - /* expressed in font units. For font formats */ - /* not having this information, it is set to */ - /* `bbox.yMin'. Note that this field is */ - /* usually negative. Only relevant for */ - /* scalable formats. */ - /* */ - /* height :: This value is the vertical distance */ - /* between two consecutive baselines, */ - /* expressed in font units. It is always */ - /* positive. Only relevant for scalable */ - /* formats. */ - /* */ - /* If you want the global glyph height, use */ - /* `ascender - descender'. */ - /* */ - /* max_advance_width :: The maximum advance width, in font units, */ - /* for all glyphs in this face. This can be */ - /* used to make word wrapping computations */ - /* faster. Only relevant for scalable */ - /* formats. */ - /* */ - /* max_advance_height :: The maximum advance height, in font units, */ - /* for all glyphs in this face. This is only */ - /* relevant for vertical layouts, and is set */ - /* to `height' for fonts that do not provide */ - /* vertical metrics. Only relevant for */ - /* scalable formats. */ - /* */ - /* underline_position :: The position, in font units, of the */ - /* underline line for this face. It is the */ - /* center of the underlining stem. Only */ - /* relevant for scalable formats. */ - /* */ - /* underline_thickness :: The thickness, in font units, of the */ - /* underline for this face. Only relevant for */ - /* scalable formats. */ - /* */ - /* glyph :: The face's associated glyph slot(s). */ - /* */ - /* size :: The current active size for this face. */ - /* */ - /* charmap :: The current active charmap for this face. */ - /* */ - /* <Note> */ - /* Fields may be changed after a call to @FT_Attach_File or */ - /* @FT_Attach_Stream. */ - /* */ - typedef struct FT_FaceRec_ - { - FT_Long num_faces; - FT_Long face_index; - - FT_Long face_flags; - FT_Long style_flags; - - FT_Long num_glyphs; - - FT_String* family_name; - FT_String* style_name; - - FT_Int num_fixed_sizes; - FT_Bitmap_Size* available_sizes; - - FT_Int num_charmaps; - FT_CharMap* charmaps; - - FT_Generic generic; - - /*# The following member variables (down to `underline_thickness') */ - /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */ - /*# for bitmap fonts. */ - FT_BBox bbox; - - FT_UShort units_per_EM; - FT_Short ascender; - FT_Short descender; - FT_Short height; - - FT_Short max_advance_width; - FT_Short max_advance_height; - - FT_Short underline_position; - FT_Short underline_thickness; - - FT_GlyphSlot glyph; - FT_Size size; - FT_CharMap charmap; - - /*@private begin */ - - FT_Driver driver; - FT_Memory memory; - FT_Stream stream; - - FT_ListRec sizes_list; - - FT_Generic autohint; /* face-specific auto-hinter data */ - void* extensions; /* unused */ - - FT_Face_Internal internal; - - /*@private end */ - - } FT_FaceRec; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_FACE_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flags used in the `face_flags' field of the */ - /* @FT_FaceRec structure. They inform client applications of */ - /* properties of the corresponding face. */ - /* */ - /* <Values> */ - /* FT_FACE_FLAG_SCALABLE :: */ - /* Indicates that the face contains outline glyphs. This doesn't */ - /* prevent bitmap strikes, i.e., a face can have both this and */ - /* and @FT_FACE_FLAG_FIXED_SIZES set. */ - /* */ - /* FT_FACE_FLAG_FIXED_SIZES :: */ - /* Indicates that the face contains bitmap strikes. See also the */ - /* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */ - /* */ - /* FT_FACE_FLAG_FIXED_WIDTH :: */ - /* Indicates that the face contains fixed-width characters (like */ - /* Courier, Lucido, MonoType, etc.). */ - /* */ - /* FT_FACE_FLAG_SFNT :: */ - /* Indicates that the face uses the `sfnt' storage scheme. For */ - /* now, this means TrueType and OpenType. */ - /* */ - /* FT_FACE_FLAG_HORIZONTAL :: */ - /* Indicates that the face contains horizontal glyph metrics. This */ - /* should be set for all common formats. */ - /* */ - /* FT_FACE_FLAG_VERTICAL :: */ - /* Indicates that the face contains vertical glyph metrics. This */ - /* is only available in some formats, not all of them. */ - /* */ - /* FT_FACE_FLAG_KERNING :: */ - /* Indicates that the face contains kerning information. If set, */ - /* the kerning distance can be retrieved through the function */ - /* @FT_Get_Kerning. Otherwise the function always return the */ - /* vector (0,0). Note that FreeType doesn't handle kerning data */ - /* from the `GPOS' table (as present in some OpenType fonts). */ - /* */ - /* FT_FACE_FLAG_FAST_GLYPHS :: */ - /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */ - /* */ - /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */ - /* Indicates that the font contains multiple masters and is capable */ - /* of interpolating between them. See the multiple-masters */ - /* specific API for details. */ - /* */ - /* FT_FACE_FLAG_GLYPH_NAMES :: */ - /* Indicates that the font contains glyph names that can be */ - /* retrieved through @FT_Get_Glyph_Name. Note that some TrueType */ - /* fonts contain broken glyph name tables. Use the function */ - /* @FT_Has_PS_Glyph_Names when needed. */ - /* */ - /* FT_FACE_FLAG_EXTERNAL_STREAM :: */ - /* Used internally by FreeType to indicate that a face's stream was */ - /* provided by the client application and should not be destroyed */ - /* when @FT_Done_Face is called. Don't read or test this flag. */ - /* */ - /* FT_FACE_FLAG_HINTER :: */ - /* Set if the font driver has a hinting machine of its own. For */ - /* example, with TrueType fonts, it makes sense to use data from */ - /* the SFNT `gasp' table only if the native TrueType hinting engine */ - /* (with the bytecode interpreter) is available and active. */ - /* */ - /* FT_FACE_FLAG_CID_KEYED :: */ - /* Set if the font is CID-keyed. In that case, the font is not */ - /* accessed by glyph indices but by CID values. For subsetted */ - /* CID-keyed fonts this has the consequence that not all index */ - /* values are a valid argument to FT_Load_Glyph. Only the CID */ - /* values for which corresponding glyphs in the subsetted font */ - /* exist make FT_Load_Glyph return successfully; in all other cases */ - /* you get an `FT_Err_Invalid_Argument' error. */ - /* */ - /* Note that CID-keyed fonts that are in an SFNT wrapper don't */ - /* have this flag set since the glyphs are accessed in the normal */ - /* way (using contiguous indices); the `CID-ness' isn't visible to */ - /* the application. */ - /* */ - /* FT_FACE_FLAG_TRICKY :: */ - /* Set if the font is `tricky', this is, it always needs the */ - /* font format's native hinting engine to get a reasonable result. */ - /* A typical example is the Chinese font `mingli.ttf' that uses */ - /* TrueType bytecode instructions to move and scale all of its */ - /* subglyphs. */ - /* */ - /* It is not possible to auto-hint such fonts using */ - /* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */ - /* @FT_LOAD_NO_HINTING. You have to set both @FT_LOAD_NO_HINTING */ - /* and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */ - /* probably never want this except for demonstration purposes. */ - /* */ - /* Currently, there are about a dozen TrueType fonts in the list of */ - /* tricky fonts; they are hard-coded in file `ttobjs.c'. */ - /* */ - /* FT_FACE_FLAG_COLOR :: */ - /* Set if the font has color glyph tables. To access color glyphs */ - /* use @FT_LOAD_COLOR. */ - /* */ -#define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) -#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) -#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 ) -#define FT_FACE_FLAG_SFNT ( 1L << 3 ) -#define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 ) -#define FT_FACE_FLAG_VERTICAL ( 1L << 5 ) -#define FT_FACE_FLAG_KERNING ( 1L << 6 ) -#define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 ) -#define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 ) -#define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 ) -#define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 ) -#define FT_FACE_FLAG_HINTER ( 1L << 11 ) -#define FT_FACE_FLAG_CID_KEYED ( 1L << 12 ) -#define FT_FACE_FLAG_TRICKY ( 1L << 13 ) -#define FT_FACE_FLAG_COLOR ( 1L << 14 ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_HORIZONTAL( face ) - * - * @description: - * A macro that returns true whenever a face object contains - * horizontal metrics (this is true for all font formats though). - * - * @also: - * @FT_HAS_VERTICAL can be used to check for vertical metrics. - * - */ -#define FT_HAS_HORIZONTAL( face ) \ - ( face->face_flags & FT_FACE_FLAG_HORIZONTAL ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_VERTICAL( face ) - * - * @description: - * A macro that returns true whenever a face object contains real - * vertical metrics (and not only synthesized ones). - * - */ -#define FT_HAS_VERTICAL( face ) \ - ( face->face_flags & FT_FACE_FLAG_VERTICAL ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_KERNING( face ) - * - * @description: - * A macro that returns true whenever a face object contains kerning - * data that can be accessed with @FT_Get_Kerning. - * - */ -#define FT_HAS_KERNING( face ) \ - ( face->face_flags & FT_FACE_FLAG_KERNING ) - - - /************************************************************************* - * - * @macro: - * FT_IS_SCALABLE( face ) - * - * @description: - * A macro that returns true whenever a face object contains a scalable - * font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF, - * and PFR font formats. - * - */ -#define FT_IS_SCALABLE( face ) \ - ( face->face_flags & FT_FACE_FLAG_SCALABLE ) - - - /************************************************************************* - * - * @macro: - * FT_IS_SFNT( face ) - * - * @description: - * A macro that returns true whenever a face object contains a font - * whose format is based on the SFNT storage scheme. This usually - * means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded - * bitmap fonts. - * - * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and - * @FT_TRUETYPE_TABLES_H are available. - * - */ -#define FT_IS_SFNT( face ) \ - ( face->face_flags & FT_FACE_FLAG_SFNT ) - - - /************************************************************************* - * - * @macro: - * FT_IS_FIXED_WIDTH( face ) - * - * @description: - * A macro that returns true whenever a face object contains a font face - * that contains fixed-width (or `monospace', `fixed-pitch', etc.) - * glyphs. - * - */ -#define FT_IS_FIXED_WIDTH( face ) \ - ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_FIXED_SIZES( face ) - * - * @description: - * A macro that returns true whenever a face object contains some - * embedded bitmaps. See the `available_sizes' field of the - * @FT_FaceRec structure. - * - */ -#define FT_HAS_FIXED_SIZES( face ) \ - ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_FAST_GLYPHS( face ) - * - * @description: - * Deprecated. - * - */ -#define FT_HAS_FAST_GLYPHS( face ) 0 - - - /************************************************************************* - * - * @macro: - * FT_HAS_GLYPH_NAMES( face ) - * - * @description: - * A macro that returns true whenever a face object contains some glyph - * names that can be accessed through @FT_Get_Glyph_Name. - * - */ -#define FT_HAS_GLYPH_NAMES( face ) \ - ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_MULTIPLE_MASTERS( face ) - * - * @description: - * A macro that returns true whenever a face object contains some - * multiple masters. The functions provided by @FT_MULTIPLE_MASTERS_H - * are then available to choose the exact design you want. - * - */ -#define FT_HAS_MULTIPLE_MASTERS( face ) \ - ( face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) - - - /************************************************************************* - * - * @macro: - * FT_IS_CID_KEYED( face ) - * - * @description: - * A macro that returns true whenever a face object contains a CID-keyed - * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more - * details. - * - * If this macro is true, all functions defined in @FT_CID_H are - * available. - * - */ -#define FT_IS_CID_KEYED( face ) \ - ( face->face_flags & FT_FACE_FLAG_CID_KEYED ) - - - /************************************************************************* - * - * @macro: - * FT_IS_TRICKY( face ) - * - * @description: - * A macro that returns true whenever a face represents a `tricky' font. - * See the discussion of @FT_FACE_FLAG_TRICKY for more details. - * - */ -#define FT_IS_TRICKY( face ) \ - ( face->face_flags & FT_FACE_FLAG_TRICKY ) - - - /************************************************************************* - * - * @macro: - * FT_HAS_COLOR( face ) - * - * @description: - * A macro that returns true whenever a face object contains - * tables for color glyphs. - * - */ -#define FT_HAS_COLOR( face ) \ - ( face->face_flags & FT_FACE_FLAG_COLOR ) - - - /*************************************************************************/ - /* */ - /* <Const> */ - /* FT_STYLE_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flags used to indicate the style of a given face. */ - /* These are used in the `style_flags' field of @FT_FaceRec. */ - /* */ - /* <Values> */ - /* FT_STYLE_FLAG_ITALIC :: */ - /* Indicates that a given face style is italic or oblique. */ - /* */ - /* FT_STYLE_FLAG_BOLD :: */ - /* Indicates that a given face is bold. */ - /* */ - /* <Note> */ - /* The style information as provided by FreeType is very basic. More */ - /* details are beyond the scope and should be done on a higher level */ - /* (for example, by analyzing various fields of the `OS/2' table in */ - /* SFNT based fonts). */ - /* */ -#define FT_STYLE_FLAG_ITALIC ( 1 << 0 ) -#define FT_STYLE_FLAG_BOLD ( 1 << 1 ) - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Size_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Size_InternalRec' structure, used to */ - /* model private data of a given @FT_Size object. */ - /* */ - typedef struct FT_Size_InternalRec_* FT_Size_Internal; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_Metrics */ - /* */ - /* <Description> */ - /* The size metrics structure gives the metrics of a size object. */ - /* */ - /* <Fields> */ - /* x_ppem :: The width of the scaled EM square in pixels, hence */ - /* the term `ppem' (pixels per EM). It is also */ - /* referred to as `nominal width'. */ - /* */ - /* y_ppem :: The height of the scaled EM square in pixels, */ - /* hence the term `ppem' (pixels per EM). It is also */ - /* referred to as `nominal height'. */ - /* */ - /* x_scale :: A 16.16 fractional scaling value used to convert */ - /* horizontal metrics from font units to 26.6 */ - /* fractional pixels. Only relevant for scalable */ - /* font formats. */ - /* */ - /* y_scale :: A 16.16 fractional scaling value used to convert */ - /* vertical metrics from font units to 26.6 */ - /* fractional pixels. Only relevant for scalable */ - /* font formats. */ - /* */ - /* ascender :: The ascender in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* descender :: The descender in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* height :: The height in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* max_advance :: The maximum advance width in 26.6 fractional */ - /* pixels. See @FT_FaceRec for the details. */ - /* */ - /* <Note> */ - /* The scaling values, if relevant, are determined first during a */ - /* size changing operation. The remaining fields are then set by the */ - /* driver. For scalable formats, they are usually set to scaled */ - /* values of the corresponding fields in @FT_FaceRec. */ - /* */ - /* Note that due to glyph hinting, these values might not be exact */ - /* for certain fonts. Thus they must be treated as unreliable */ - /* with an error margin of at least one pixel! */ - /* */ - /* Indeed, the only way to get the exact metrics is to render _all_ */ - /* glyphs. As this would be a definite performance hit, it is up to */ - /* client applications to perform such computations. */ - /* */ - /* The FT_Size_Metrics structure is valid for bitmap fonts also. */ - /* */ - typedef struct FT_Size_Metrics_ - { - FT_UShort x_ppem; /* horizontal pixels per EM */ - FT_UShort y_ppem; /* vertical pixels per EM */ - - FT_Fixed x_scale; /* scaling values used to convert font */ - FT_Fixed y_scale; /* units to 26.6 fractional pixels */ - - FT_Pos ascender; /* ascender in 26.6 frac. pixels */ - FT_Pos descender; /* descender in 26.6 frac. pixels */ - FT_Pos height; /* text height in 26.6 frac. pixels */ - FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */ - - } FT_Size_Metrics; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SizeRec */ - /* */ - /* <Description> */ - /* FreeType root size class structure. A size object models a face */ - /* object at a given size. */ - /* */ - /* <Fields> */ - /* face :: Handle to the parent face object. */ - /* */ - /* generic :: A typeless pointer, unused by the FreeType library or */ - /* any of its drivers. It can be used by client */ - /* applications to link their own data to each size */ - /* object. */ - /* */ - /* metrics :: Metrics for this size object. This field is read-only. */ - /* */ - typedef struct FT_SizeRec_ - { - FT_Face face; /* parent face object */ - FT_Generic generic; /* generic pointer for client uses */ - FT_Size_Metrics metrics; /* size metrics */ - FT_Size_Internal internal; - - } FT_SizeRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SubGlyph */ - /* */ - /* <Description> */ - /* The subglyph structure is an internal object used to describe */ - /* subglyphs (for example, in the case of composites). */ - /* */ - /* <Note> */ - /* The subglyph implementation is not part of the high-level API, */ - /* hence the forward structure declaration. */ - /* */ - /* You can however retrieve subglyph information with */ - /* @FT_Get_SubGlyph_Info. */ - /* */ - typedef struct FT_SubGlyphRec_* FT_SubGlyph; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Slot_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Slot_InternalRec' structure, used to */ - /* model private data of a given @FT_GlyphSlot object. */ - /* */ - typedef struct FT_Slot_InternalRec_* FT_Slot_Internal; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_GlyphSlotRec */ - /* */ - /* <Description> */ - /* FreeType root glyph slot class structure. A glyph slot is a */ - /* container where individual glyphs can be loaded, be they in */ - /* outline or bitmap format. */ - /* */ - /* <Fields> */ - /* library :: A handle to the FreeType library instance */ - /* this slot belongs to. */ - /* */ - /* face :: A handle to the parent face object. */ - /* */ - /* next :: In some cases (like some font tools), several */ - /* glyph slots per face object can be a good */ - /* thing. As this is rare, the glyph slots are */ - /* listed through a direct, single-linked list */ - /* using its `next' field. */ - /* */ - /* generic :: A typeless pointer unused by the FreeType */ - /* library or any of its drivers. It can be */ - /* used by client applications to link their own */ - /* data to each glyph slot object. */ - /* */ - /* metrics :: The metrics of the last loaded glyph in the */ - /* slot. The returned values depend on the last */ - /* load flags (see the @FT_Load_Glyph API */ - /* function) and can be expressed either in 26.6 */ - /* fractional pixels or font units. */ - /* */ - /* Note that even when the glyph image is */ - /* transformed, the metrics are not. */ - /* */ - /* linearHoriAdvance :: The advance width of the unhinted glyph. */ - /* Its value is expressed in 16.16 fractional */ - /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */ - /* when loading the glyph. This field can be */ - /* important to perform correct WYSIWYG layout. */ - /* Only relevant for outline glyphs. */ - /* */ - /* linearVertAdvance :: The advance height of the unhinted glyph. */ - /* Its value is expressed in 16.16 fractional */ - /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */ - /* when loading the glyph. This field can be */ - /* important to perform correct WYSIWYG layout. */ - /* Only relevant for outline glyphs. */ - /* */ - /* advance :: This shorthand is, depending on */ - /* @FT_LOAD_IGNORE_TRANSFORM, the transformed */ - /* (hinted) advance width for the glyph, in 26.6 */ - /* fractional pixel format. As specified with */ - /* @FT_LOAD_VERTICAL_LAYOUT, it uses either the */ - /* `horiAdvance' or the `vertAdvance' value of */ - /* `metrics' field. */ - /* */ - /* format :: This field indicates the format of the image */ - /* contained in the glyph slot. Typically */ - /* @FT_GLYPH_FORMAT_BITMAP, */ - /* @FT_GLYPH_FORMAT_OUTLINE, or */ - /* @FT_GLYPH_FORMAT_COMPOSITE, but others are */ - /* possible. */ - /* */ - /* bitmap :: This field is used as a bitmap descriptor */ - /* when the slot format is */ - /* @FT_GLYPH_FORMAT_BITMAP. Note that the */ - /* address and content of the bitmap buffer can */ - /* change between calls of @FT_Load_Glyph and a */ - /* few other functions. */ - /* */ - /* bitmap_left :: The bitmap's left bearing expressed in */ - /* integer pixels. Only valid if the format is */ - /* @FT_GLYPH_FORMAT_BITMAP, this is, if the */ - /* glyph slot contains a bitmap. */ - /* */ - /* bitmap_top :: The bitmap's top bearing expressed in integer */ - /* pixels. Remember that this is the distance */ - /* from the baseline to the top-most glyph */ - /* scanline, upwards y~coordinates being */ - /* *positive*. */ - /* */ - /* outline :: The outline descriptor for the current glyph */ - /* image if its format is */ - /* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */ - /* loaded, `outline' can be transformed, */ - /* distorted, embolded, etc. However, it must */ - /* not be freed. */ - /* */ - /* num_subglyphs :: The number of subglyphs in a composite glyph. */ - /* This field is only valid for the composite */ - /* glyph format that should normally only be */ - /* loaded with the @FT_LOAD_NO_RECURSE flag. */ - /* */ - /* subglyphs :: An array of subglyph descriptors for */ - /* composite glyphs. There are `num_subglyphs' */ - /* elements in there. Currently internal to */ - /* FreeType. */ - /* */ - /* control_data :: Certain font drivers can also return the */ - /* control data for a given glyph image (e.g. */ - /* TrueType bytecode, Type~1 charstrings, etc.). */ - /* This field is a pointer to such data. */ - /* */ - /* control_len :: This is the length in bytes of the control */ - /* data. */ - /* */ - /* other :: Really wicked formats can use this pointer to */ - /* present their own glyph image to client */ - /* applications. Note that the application */ - /* needs to know about the image format. */ - /* */ - /* lsb_delta :: The difference between hinted and unhinted */ - /* left side bearing while auto-hinting is */ - /* active. Zero otherwise. */ - /* */ - /* rsb_delta :: The difference between hinted and unhinted */ - /* right side bearing while auto-hinting is */ - /* active. Zero otherwise. */ - /* */ - /* <Note> */ - /* If @FT_Load_Glyph is called with default flags (see */ - /* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */ - /* its native format (e.g., an outline glyph for TrueType and Type~1 */ - /* formats). */ - /* */ - /* This image can later be converted into a bitmap by calling */ - /* @FT_Render_Glyph. This function finds the current renderer for */ - /* the native image's format, then invokes it. */ - /* */ - /* The renderer is in charge of transforming the native image through */ - /* the slot's face transformation fields, then converting it into a */ - /* bitmap that is returned in `slot->bitmap'. */ - /* */ - /* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */ - /* to specify the position of the bitmap relative to the current pen */ - /* position (e.g., coordinates (0,0) on the baseline). Of course, */ - /* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */ - /* */ - /* <Note> */ - /* Here is a small pseudo code fragment that shows how to use */ - /* `lsb_delta' and `rsb_delta': */ - /* */ - /* { */ - /* FT_Pos origin_x = 0; */ - /* FT_Pos prev_rsb_delta = 0; */ - /* */ - /* */ - /* for all glyphs do */ - /* <compute kern between current and previous glyph and add it to */ - /* `origin_x'> */ - /* */ - /* <load glyph with `FT_Load_Glyph'> */ - /* */ - /* if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 ) */ - /* origin_x -= 64; */ - /* else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) */ - /* origin_x += 64; */ - /* */ - /* prev_rsb_delta = face->glyph->rsb_delta; */ - /* */ - /* <save glyph image, or render glyph, or ...> */ - /* */ - /* origin_x += face->glyph->advance.x; */ - /* endfor */ - /* } */ - /* */ - typedef struct FT_GlyphSlotRec_ - { - FT_Library library; - FT_Face face; - FT_GlyphSlot next; - FT_UInt reserved; /* retained for binary compatibility */ - FT_Generic generic; - - FT_Glyph_Metrics metrics; - FT_Fixed linearHoriAdvance; - FT_Fixed linearVertAdvance; - FT_Vector advance; - - FT_Glyph_Format format; - - FT_Bitmap bitmap; - FT_Int bitmap_left; - FT_Int bitmap_top; - - FT_Outline outline; - - FT_UInt num_subglyphs; - FT_SubGlyph subglyphs; - - void* control_data; - long control_len; - - FT_Pos lsb_delta; - FT_Pos rsb_delta; - - void* other; - - FT_Slot_Internal internal; - - } FT_GlyphSlotRec; - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* F U N C T I O N S */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Init_FreeType */ - /* */ - /* <Description> */ - /* Initialize a new FreeType library object. The set of modules */ - /* that are registered by this function is determined at build time. */ - /* */ - /* <Output> */ - /* alibrary :: A handle to a new library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* In case you want to provide your own memory allocating routines, */ - /* use @FT_New_Library instead, followed by a call to */ - /* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module). */ - /* */ - /* See the documentation of @FT_Library and @FT_Face for */ - /* multi-threading issues. */ - /* */ - /* If you need reference-counting (cf. @FT_Reference_Library), use */ - /* @FT_New_Library and @FT_Done_Library. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Init_FreeType( FT_Library *alibrary ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_FreeType */ - /* */ - /* <Description> */ - /* Destroy a given FreeType library object and all of its children, */ - /* including resources, drivers, faces, sizes, etc. */ - /* */ - /* <Input> */ - /* library :: A handle to the target library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_FreeType( FT_Library library ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_OPEN_XXX */ - /* */ - /* <Description> */ - /* A list of bit field constants used within the `flags' field of the */ - /* @FT_Open_Args structure. */ - /* */ - /* <Values> */ - /* FT_OPEN_MEMORY :: This is a memory-based stream. */ - /* */ - /* FT_OPEN_STREAM :: Copy the stream from the `stream' field. */ - /* */ - /* FT_OPEN_PATHNAME :: Create a new input stream from a C~path */ - /* name. */ - /* */ - /* FT_OPEN_DRIVER :: Use the `driver' field. */ - /* */ - /* FT_OPEN_PARAMS :: Use the `num_params' and `params' fields. */ - /* */ - /* <Note> */ - /* The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME' */ - /* flags are mutually exclusive. */ - /* */ -#define FT_OPEN_MEMORY 0x1 -#define FT_OPEN_STREAM 0x2 -#define FT_OPEN_PATHNAME 0x4 -#define FT_OPEN_DRIVER 0x8 -#define FT_OPEN_PARAMS 0x10 - - - /* these constants are deprecated; use the corresponding `FT_OPEN_XXX' */ - /* values instead */ -#define ft_open_memory FT_OPEN_MEMORY -#define ft_open_stream FT_OPEN_STREAM -#define ft_open_pathname FT_OPEN_PATHNAME -#define ft_open_driver FT_OPEN_DRIVER -#define ft_open_params FT_OPEN_PARAMS - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Parameter */ - /* */ - /* <Description> */ - /* A simple structure used to pass more or less generic parameters to */ - /* @FT_Open_Face. */ - /* */ - /* <Fields> */ - /* tag :: A four-byte identification tag. */ - /* */ - /* data :: A pointer to the parameter data. */ - /* */ - /* <Note> */ - /* The ID and function of parameters are driver-specific. See the */ - /* various FT_PARAM_TAG_XXX flags for more information. */ - /* */ - typedef struct FT_Parameter_ - { - FT_ULong tag; - FT_Pointer data; - - } FT_Parameter; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Open_Args */ - /* */ - /* <Description> */ - /* A structure used to indicate how to open a new font file or */ - /* stream. A pointer to such a structure can be used as a parameter */ - /* for the functions @FT_Open_Face and @FT_Attach_Stream. */ - /* */ - /* <Fields> */ - /* flags :: A set of bit flags indicating how to use the */ - /* structure. */ - /* */ - /* memory_base :: The first byte of the file in memory. */ - /* */ - /* memory_size :: The size in bytes of the file in memory. */ - /* */ - /* pathname :: A pointer to an 8-bit file pathname. */ - /* */ - /* stream :: A handle to a source stream object. */ - /* */ - /* driver :: This field is exclusively used by @FT_Open_Face; */ - /* it simply specifies the font driver to use to open */ - /* the face. If set to~0, FreeType tries to load the */ - /* face with each one of the drivers in its list. */ - /* */ - /* num_params :: The number of extra parameters. */ - /* */ - /* params :: 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: */ - /* */ - /* 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 are not copied, and the client is responsible for */ - /* releasing and destroying them _after_ the corresponding call to */ - /* @FT_Done_Face. */ - /* */ - /* Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a */ - /* custom input stream `stream' is used. */ - /* */ - /* Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this */ - /* is a normal file and use `pathname' to open it. */ - /* */ - /* 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'. */ - /* */ - /* If the @FT_OPEN_PARAMS bit is set, the parameters given by */ - /* `num_params' and `params' is used. They are ignored otherwise. */ - /* */ - /* Ideally, both the `pathname' and `params' fields should be tagged */ - /* as `const'; this is missing for API backwards compatibility. In */ - /* other words, applications should treat them as read-only. */ - /* */ - typedef struct FT_Open_Args_ - { - FT_UInt flags; - const FT_Byte* memory_base; - FT_Long memory_size; - FT_String* pathname; - FT_Stream stream; - FT_Module driver; - FT_Int num_params; - FT_Parameter* params; - - } FT_Open_Args; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face */ - /* */ - /* <Description> */ - /* This function calls @FT_Open_Face to open a font by its pathname. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* pathname :: A path to the font file. */ - /* */ - /* face_index :: See @FT_Open_Face for a detailed description of this */ - /* parameter. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Use @FT_Done_Face to destroy the created @FT_Face object (along */ - /* with its slot and sizes). */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face( FT_Library library, - const char* filepathname, - FT_Long face_index, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Memory_Face */ - /* */ - /* <Description> */ - /* This function calls @FT_Open_Face to open a font that has been */ - /* loaded into memory. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* file_base :: A pointer to the beginning of the font data. */ - /* */ - /* file_size :: The size of the memory chunk used by the font data. */ - /* */ - /* face_index :: See @FT_Open_Face for a detailed description of this */ - /* parameter. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You must not deallocate the memory before calling @FT_Done_Face. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Memory_Face( FT_Library library, - const FT_Byte* file_base, - FT_Long file_size, - FT_Long face_index, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Open_Face */ - /* */ - /* <Description> */ - /* Create a face object from a given resource described by */ - /* @FT_Open_Args. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* args :: A pointer to an `FT_Open_Args' structure that must */ - /* be filled by the caller. */ - /* */ - /* face_index :: This field holds two different values. Bits 0-15 */ - /* are the index of the face in the font file (starting */ - /* with value~0). Set it to~0 if there is only one */ - /* face in the font file. */ - /* */ - /* Bits 16-30 are relevant to GX variation fonts only, */ - /* specifying the named instance index for the current */ - /* face index (starting with value~1; value~0 makes */ - /* FreeType ignore named instances). For non-GX fonts, */ - /* bits 16-30 are ignored. Assuming that you want to */ - /* access the third named instance in face~4, */ - /* `face_index' should be set to 0x00030004. If you */ - /* want to access face~4 without GX variation handling, */ - /* simply set `face_index' to value~4. */ - /* */ - /* FT_Open_Face and its siblings can be used to quickly */ - /* check whether the font format of a given font */ - /* resource is supported by FreeType. In general, if */ - /* the `face_index' argument is negative, the */ - /* function's return value is~0 if the font format is */ - /* recognized, or non-zero otherwise. The function */ - /* allocates a more or less empty face handle in */ - /* `*aface' (if `aface' isn't NULL); the only two */ - /* useful fields in this special case are */ - /* `face->num_faces' and `face->style_flags'. For any */ - /* negative value of `face_index', `face->num_faces' */ - /* gives the number of faces within the font file. For */ - /* the negative value `-(N+1)' (with `N' a 16-bit */ - /* value), bits 16-30 in `face->style_flags' give the */ - /* number of named instances in face `N' if we have a */ - /* GX variation font (or zero otherwise). After */ - /* examination, the returned @FT_Face structure should */ - /* be deallocated with a call to @FT_Done_Face. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Unlike FreeType 1.x, this function automatically creates a glyph */ - /* slot for the face object that can be accessed directly through */ - /* `face->glyph'. */ - /* */ - /* 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. */ - /* */ - /* To loop over all faces, use code similar to the following snippet */ - /* (omitting the error handling). */ - /* */ - /* { */ - /* ... */ - /* FT_Face face; */ - /* FT_Long i, num_faces; */ - /* */ - /* */ - /* error = FT_Open_Face( library, args, -1, &face ); */ - /* if ( error ) { ... } */ - /* */ - /* num_faces = face->num_faces; */ - /* FT_Done_Face( face ); */ - /* */ - /* for ( i = 0; i < num_faces; i++ ) */ - /* { */ - /* ... */ - /* error = FT_Open_Face( library, args, i, &face ); */ - /* ... */ - /* FT_Done_Face( face ); */ - /* ... */ - /* } */ - /* } */ - /* */ - /* To loop over all valid values for `face_index', use something */ - /* similar to the following snippet, again without error handling. */ - /* The code accesses all faces immediately (thus only a single call */ - /* of `FT_Open_Face' within the do-loop), with and without named */ - /* instances. */ - /* */ - /* { */ - /* ... */ - /* FT_Face face; */ - /* */ - /* FT_Long num_faces = 0; */ - /* FT_Long num_instances = 0; */ - /* */ - /* FT_Long face_idx = 0; */ - /* FT_Long instance_idx = 0; */ - /* */ - /* */ - /* do */ - /* { */ - /* FT_Long id = ( instance_idx << 16 ) + face_idx; */ - /* */ - /* */ - /* error = FT_Open_Face( library, args, id, &face ); */ - /* if ( error ) { ... } */ - /* */ - /* num_faces = face->num_faces; */ - /* num_instances = face->style_flags >> 16; */ - /* */ - /* ... */ - /* */ - /* FT_Done_Face( face ); */ - /* */ - /* if ( instance_idx < num_instances ) */ - /* instance_idx++; */ - /* else */ - /* { */ - /* face_idx++; */ - /* instance_idx = 0; */ - /* } */ - /* */ - /* } while ( face_idx < num_faces ) */ - /* } */ - /* */ - FT_EXPORT( FT_Error ) - FT_Open_Face( FT_Library library, - const FT_Open_Args* args, - FT_Long face_index, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Attach_File */ - /* */ - /* <Description> */ - /* This function calls @FT_Attach_Stream to attach a file. */ - /* */ - /* <InOut> */ - /* face :: The target face object. */ - /* */ - /* <Input> */ - /* filepathname :: The pathname. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Attach_File( FT_Face face, - const char* filepathname ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Attach_Stream */ - /* */ - /* <Description> */ - /* `Attach' data to a face object. Normally, this is used to read */ - /* additional information for the face object. For example, you can */ - /* attach an AFM file that comes with a Type~1 font to get the */ - /* kerning values and other metrics. */ - /* */ - /* <InOut> */ - /* face :: The target face object. */ - /* */ - /* <Input> */ - /* parameters :: A pointer to @FT_Open_Args that must be filled by */ - /* the caller. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The meaning of the `attach' (i.e., what really happens when the */ - /* new file is read) is not fixed by FreeType itself. It really */ - /* depends on the font format (and thus the font driver). */ - /* */ - /* Client applications are expected to know what they are doing */ - /* when invoking this function. Most drivers simply do not implement */ - /* file attachments. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Attach_Stream( FT_Face face, - FT_Open_Args* parameters ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Reference_Face */ - /* */ - /* <Description> */ - /* A counter gets initialized to~1 at the time an @FT_Face structure */ - /* is created. This function increments the counter. @FT_Done_Face */ - /* then only destroys a face if the counter is~1, otherwise it simply */ - /* decrements the counter. */ - /* */ - /* This function helps in managing life-cycles of structures that */ - /* reference @FT_Face objects. */ - /* */ - /* <Input> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Since> */ - /* 2.4.2 */ - /* */ - FT_EXPORT( FT_Error ) - FT_Reference_Face( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Face */ - /* */ - /* <Description> */ - /* Discard a given face object, as well as all of its child slots and */ - /* sizes. */ - /* */ - /* <Input> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* See the discussion of reference counters in the description of */ - /* @FT_Reference_Face. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_Face( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Select_Size */ - /* */ - /* <Description> */ - /* Select a bitmap strike. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* strike_index :: The index of the bitmap strike in the */ - /* `available_sizes' field of @FT_FaceRec structure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Select_Size( FT_Face face, - FT_Int strike_index ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Size_Request_Type */ - /* */ - /* <Description> */ - /* An enumeration type that lists the supported size request types. */ - /* */ - /* <Values> */ - /* FT_SIZE_REQUEST_TYPE_NOMINAL :: */ - /* The nominal size. The `units_per_EM' field of @FT_FaceRec is */ - /* used to determine both scaling values. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */ - /* The real dimension. The sum of the the `ascender' and (minus */ - /* of) the `descender' fields of @FT_FaceRec are used to determine */ - /* both scaling values. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_BBOX :: */ - /* The font bounding box. The width and height of the `bbox' field */ - /* of @FT_FaceRec are used to determine the horizontal and vertical */ - /* scaling value, respectively. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_CELL :: */ - /* The `max_advance_width' field of @FT_FaceRec is used to */ - /* determine the horizontal scaling value; the vertical scaling */ - /* value is determined the same way as */ - /* @FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling */ - /* values are set to the smaller one. This type is useful if you */ - /* want to specify the font size for, say, a window of a given */ - /* dimension and 80x24 cells. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_SCALES :: */ - /* Specify the scaling values directly. */ - /* */ - /* <Note> */ - /* The above descriptions only apply to scalable formats. For bitmap */ - /* formats, the behaviour is up to the driver. */ - /* */ - /* See the note section of @FT_Size_Metrics if you wonder how size */ - /* requesting relates to scaling values. */ - /* */ - typedef enum FT_Size_Request_Type_ - { - FT_SIZE_REQUEST_TYPE_NOMINAL, - FT_SIZE_REQUEST_TYPE_REAL_DIM, - FT_SIZE_REQUEST_TYPE_BBOX, - FT_SIZE_REQUEST_TYPE_CELL, - FT_SIZE_REQUEST_TYPE_SCALES, - - FT_SIZE_REQUEST_TYPE_MAX - - } FT_Size_Request_Type; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_RequestRec */ - /* */ - /* <Description> */ - /* A structure used to model a size request. */ - /* */ - /* <Fields> */ - /* type :: See @FT_Size_Request_Type. */ - /* */ - /* width :: The desired width. */ - /* */ - /* height :: The desired height. */ - /* */ - /* horiResolution :: The horizontal resolution. If set to zero, */ - /* `width' is treated as a 26.6 fractional pixel */ - /* value. */ - /* */ - /* vertResolution :: The vertical resolution. If set to zero, */ - /* `height' is treated as a 26.6 fractional pixel */ - /* value. */ - /* */ - /* <Note> */ - /* If `width' is zero, then the horizontal scaling value is set equal */ - /* to the vertical scaling value, and vice versa. */ - /* */ - typedef struct FT_Size_RequestRec_ - { - FT_Size_Request_Type type; - FT_Long width; - FT_Long height; - FT_UInt horiResolution; - FT_UInt vertResolution; - - } FT_Size_RequestRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_Request */ - /* */ - /* <Description> */ - /* A handle to a size request structure. */ - /* */ - typedef struct FT_Size_RequestRec_ *FT_Size_Request; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Request_Size */ - /* */ - /* <Description> */ - /* Resize the scale of the active @FT_Size object in a face. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* req :: A pointer to a @FT_Size_RequestRec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Although drivers may select the bitmap strike matching the */ - /* request, you should not rely on this if you intend to select a */ - /* particular bitmap strike. Use @FT_Select_Size instead in that */ - /* case. */ - /* */ - /* The relation between the requested size and the resulting glyph */ - /* size is dependent entirely on how the size is defined in the */ - /* source face. The font designer chooses the final size of each */ - /* glyph relative to this size. For more information refer to */ - /* `http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html' */ - /* */ - /* Don't use this function if you are using the FreeType cache API. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Request_Size( FT_Face face, - FT_Size_Request req ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Char_Size */ - /* */ - /* <Description> */ - /* This function calls @FT_Request_Size to request the nominal size */ - /* (in points). */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* char_width :: The nominal width, in 26.6 fractional points. */ - /* */ - /* char_height :: The nominal height, in 26.6 fractional points. */ - /* */ - /* horz_resolution :: The horizontal resolution in dpi. */ - /* */ - /* vert_resolution :: The vertical resolution in dpi. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If either the character width or height is zero, it is set equal */ - /* to the other value. */ - /* */ - /* If either the horizontal or vertical resolution is zero, it is set */ - /* equal to the other value. */ - /* */ - /* A character width or height smaller than 1pt is set to 1pt; if */ - /* both resolution values are zero, they are set to 72dpi. */ - /* */ - /* Don't use this function if you are using the FreeType cache API. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Char_Size( FT_Face face, - FT_F26Dot6 char_width, - FT_F26Dot6 char_height, - FT_UInt horz_resolution, - FT_UInt vert_resolution ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Pixel_Sizes */ - /* */ - /* <Description> */ - /* This function calls @FT_Request_Size to request the nominal size */ - /* (in pixels). */ - /* */ - /* <InOut> */ - /* face :: A handle to the target face object. */ - /* */ - /* <Input> */ - /* pixel_width :: The nominal width, in pixels. */ - /* */ - /* pixel_height :: The nominal height, in pixels. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You should not rely on the resulting glyphs matching, or being */ - /* constrained, to this pixel size. Refer to @FT_Request_Size to */ - /* understand how requested sizes relate to actual sizes. */ - /* */ - /* Don't use this function if you are using the FreeType cache API. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Pixel_Sizes( FT_Face face, - FT_UInt pixel_width, - FT_UInt pixel_height ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Load_Glyph */ - /* */ - /* <Description> */ - /* A function used to load a single glyph into the glyph slot of a */ - /* face object. */ - /* */ - /* <InOut> */ - /* face :: A handle to the target face object where the glyph */ - /* is loaded. */ - /* */ - /* <Input> */ - /* glyph_index :: The index of the glyph in the font file. For */ - /* CID-keyed fonts (either in PS or in CFF format) */ - /* this argument specifies the CID value. */ - /* */ - /* load_flags :: A flag indicating what to load for this glyph. The */ - /* @FT_LOAD_XXX constants can be used to control the */ - /* glyph loading process (e.g., whether the outline */ - /* should be scaled, whether to load bitmaps or not, */ - /* whether to hint the outline, etc). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The loaded glyph may be transformed. See @FT_Set_Transform for */ - /* the details. */ - /* */ - /* For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is */ - /* returned for invalid CID values (this is, for CID values that */ - /* don't have a corresponding glyph in the font). See the discussion */ - /* of the @FT_FACE_FLAG_CID_KEYED flag for more details. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Load_Glyph( FT_Face face, - FT_UInt glyph_index, - FT_Int32 load_flags ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Load_Char */ - /* */ - /* <Description> */ - /* A function used to load a single glyph into the glyph slot of a */ - /* face object, according to its character code. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object where the glyph */ - /* is loaded. */ - /* */ - /* <Input> */ - /* char_code :: The glyph's character code, according to the */ - /* current charmap used in the face. */ - /* */ - /* load_flags :: A flag indicating what to load for this glyph. The */ - /* @FT_LOAD_XXX constants can be used to control the */ - /* glyph loading process (e.g., whether the outline */ - /* should be scaled, whether to load bitmaps or not, */ - /* whether to hint the outline, etc). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Load_Char( FT_Face face, - FT_ULong char_code, - FT_Int32 load_flags ); - - - /************************************************************************* - * - * @enum: - * FT_LOAD_XXX - * - * @description: - * A list of bit field constants used with @FT_Load_Glyph to indicate - * what kind of operations to perform during glyph loading. - * - * @values: - * FT_LOAD_DEFAULT :: - * Corresponding to~0, this value is used as the default glyph load - * operation. In this case, the following happens: - * - * 1. FreeType looks for a bitmap for the glyph corresponding to the - * face's current size. If one is found, the function returns. - * The bitmap data can be accessed from the glyph slot (see note - * below). - * - * 2. If no embedded bitmap is searched or found, FreeType looks for a - * scalable outline. If one is found, it is loaded from the font - * file, scaled to device pixels, then `hinted' to the pixel grid - * in order to optimize it. The outline data can be accessed from - * the glyph slot (see note below). - * - * Note that by default, the glyph loader doesn't render outlines into - * bitmaps. The following flags are used to modify this default - * behaviour to more specific and useful cases. - * - * FT_LOAD_NO_SCALE :: - * Don't scale the loaded outline glyph but keep it in font units. - * - * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and - * unsets @FT_LOAD_RENDER. - * - * If the font is `tricky' (see @FT_FACE_FLAG_TRICKY for more), using - * FT_LOAD_NO_SCALE usually yields meaningless outlines because the - * subglyphs must be scaled and positioned with hinting instructions. - * This can be solved by loading the font without FT_LOAD_NO_SCALE and - * setting the character size to `font->units_per_EM'. - * - * FT_LOAD_NO_HINTING :: - * Disable hinting. This generally generates `blurrier' bitmap glyphs - * when the glyph are rendered in any of the anti-aliased modes. See - * also the note below. - * - * This flag is implied by @FT_LOAD_NO_SCALE. - * - * FT_LOAD_RENDER :: - * Call @FT_Render_Glyph after the glyph is loaded. By default, the - * glyph is rendered in @FT_RENDER_MODE_NORMAL mode. This can be - * overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME. - * - * This flag is unset by @FT_LOAD_NO_SCALE. - * - * FT_LOAD_NO_BITMAP :: - * Ignore bitmap strikes when loading. Bitmap-only fonts ignore this - * flag. - * - * @FT_LOAD_NO_SCALE always sets this flag. - * - * FT_LOAD_VERTICAL_LAYOUT :: - * Load the glyph for vertical text layout. In particular, the - * `advance' value in the @FT_GlyphSlotRec structure is set to the - * `vertAdvance' value of the `metrics' field. - * - * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use - * this flag currently. Reason is that in this case vertical metrics - * get synthesized, and those values are not always consistent across - * various font formats. - * - * FT_LOAD_FORCE_AUTOHINT :: - * Indicates that the auto-hinter is preferred over the font's native - * hinter. See also the note below. - * - * FT_LOAD_PEDANTIC :: - * Indicates that the font driver should perform pedantic verifications - * 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_NO_RECURSE :: - * Indicate that the font driver should not load composite glyphs - * recursively. Instead, it should set the `num_subglyph' and - * `subglyphs' values of the glyph slot accordingly, and set - * `glyph->format' to @FT_GLYPH_FORMAT_COMPOSITE. The description of - * subglyphs can then be accessed with @FT_Get_SubGlyph_Info. - * - * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM. - * - * FT_LOAD_IGNORE_TRANSFORM :: - * Indicates that the transform matrix set by @FT_Set_Transform should - * be ignored. - * - * FT_LOAD_MONOCHROME :: - * This flag is used with @FT_LOAD_RENDER to indicate that you want to - * render an outline glyph to a 1-bit monochrome bitmap glyph, with - * 8~pixels packed into each byte of the bitmap data. - * - * Note that this has no effect on the hinting algorithm used. You - * should rather use @FT_LOAD_TARGET_MONO so that the - * monochrome-optimized hinting algorithm is used. - * - * FT_LOAD_LINEAR_DESIGN :: - * Indicates that the `linearHoriAdvance' and `linearVertAdvance' - * fields of @FT_GlyphSlotRec should be kept in font units. See - * @FT_GlyphSlotRec for details. - * - * FT_LOAD_NO_AUTOHINT :: - * Disable auto-hinter. See also the note below. - * - * FT_LOAD_COLOR :: - * This flag is used to request loading of color embedded-bitmap - * images. The resulting color bitmaps, if available, will have the - * @FT_PIXEL_MODE_BGRA format. When the flag is not used and color - * bitmaps are found, they will be converted to 256-level gray - * bitmaps transparently. Those bitmaps will be in the - * @FT_PIXEL_MODE_GRAY format. - * - * FT_LOAD_COMPUTE_METRICS :: - * This flag sets computing glyph metrics without the use of bundled - * metrics tables (for example, the `hdmx' table in TrueType fonts). - * Well-behaving fonts have optimized bundled metrics and these should - * be used. This flag is mainly used by font validating or font - * editing applications, which need to ignore, verify, or edit those - * tables. - * - * Currently, this flag is only implemented for TrueType fonts. - * - * FT_LOAD_CROP_BITMAP :: - * Ignored. Deprecated. - * - * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH :: - * Ignored. Deprecated. - * - * @note: - * By default, hinting is enabled and the font's native hinter (see - * @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can - * disable hinting by setting @FT_LOAD_NO_HINTING or change the - * precedence by setting @FT_LOAD_FORCE_AUTOHINT. You can also set - * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be - * used at all. - * - * See the description of @FT_FACE_FLAG_TRICKY for a special exception - * (affecting only a handful of Asian fonts). - * - * Besides deciding which hinter to use, you can also decide which - * hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details. - * - * Note that the auto-hinter needs a valid Unicode cmap (either a native - * one or synthesized by FreeType) for producing correct results. If a - * font provides an incorrect mapping (for example, assigning the - * character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a - * mathematical integral sign), the auto-hinter might produce useless - * results. - * - */ -#define FT_LOAD_DEFAULT 0x0 -#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 ) - /* Bits 16..19 are used by `FT_LOAD_TARGET_' */ -#define FT_LOAD_COLOR ( 1L << 20 ) -#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 ) - - /* */ - - /* used internally only by certain font drivers! */ -#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 ) -#define FT_LOAD_SBITS_ONLY ( 1L << 14 ) - - - /************************************************************************** - * - * @enum: - * FT_LOAD_TARGET_XXX - * - * @description: - * A list of values that are used to select a specific hinting algorithm - * to use by the hinter. You should OR one of these values to your - * `load_flags' when calling @FT_Load_Glyph. - * - * Note that font's native hinters may ignore the hinting algorithm you - * have specified (e.g., the TrueType bytecode interpreter). You can set - * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used. - * - * @values: - * FT_LOAD_TARGET_NORMAL :: - * This corresponds to the default hinting algorithm, optimized for - * standard gray-level rendering. For monochrome output, use - * @FT_LOAD_TARGET_MONO instead. - * - * FT_LOAD_TARGET_LIGHT :: - * A lighter hinting algorithm for gray-level modes. Many generated - * glyphs are fuzzier but better resemble their original shape. This - * is achieved by snapping glyphs to the pixel grid only vertically - * (Y-axis), as is done by Microsoft's ClearType and Adobe's - * proprietary font renderer. This preserves inter-glyph spacing in - * horizontal text. The snapping is done either by the native font - * driver if the driver itself and the font support it or by the - * auto-hinter. - * - * FT_LOAD_TARGET_MONO :: - * Strong hinting algorithm that should only be used for monochrome - * output. The result is probably unpleasant if the glyph is rendered - * in non-monochrome modes. - * - * FT_LOAD_TARGET_LCD :: - * A variant of @FT_LOAD_TARGET_NORMAL optimized for horizontally - * decimated LCD displays. - * - * FT_LOAD_TARGET_LCD_V :: - * A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically - * decimated LCD displays. - * - * @note: - * You should use only _one_ of the FT_LOAD_TARGET_XXX values in your - * `load_flags'. They can't be ORed. - * - * If @FT_LOAD_RENDER is also set, the glyph is rendered in the - * corresponding mode (i.e., the mode that matches the used algorithm - * best). An exeption is FT_LOAD_TARGET_MONO since it implies - * @FT_LOAD_MONOCHROME. - * - * You can use a hinting algorithm that doesn't correspond to the same - * rendering mode. As an example, it is possible to use the `light' - * hinting algorithm and have the results rendered in horizontal LCD - * pixel mode, with code like - * - * { - * FT_Load_Glyph( face, glyph_index, - * load_flags | FT_LOAD_TARGET_LIGHT ); - * - * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD ); - * } - * - */ -#define FT_LOAD_TARGET_( x ) ( (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 ) -#define FT_LOAD_TARGET_MONO FT_LOAD_TARGET_( FT_RENDER_MODE_MONO ) -#define FT_LOAD_TARGET_LCD FT_LOAD_TARGET_( FT_RENDER_MODE_LCD ) -#define FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V ) - - - /************************************************************************** - * - * @macro: - * FT_LOAD_TARGET_MODE - * - * @description: - * Return the @FT_Render_Mode corresponding to a given - * @FT_LOAD_TARGET_XXX value. - * - */ -#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) ) - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Transform */ - /* */ - /* <Description> */ - /* A function used to set the transformation that is applied to glyph */ - /* images when they are loaded into a glyph slot through */ - /* @FT_Load_Glyph. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the transformation's 2x2 matrix. Use~0 for */ - /* the identity matrix. */ - /* delta :: A pointer to the translation vector. Use~0 for the null */ - /* vector. */ - /* */ - /* <Note> */ - /* The transformation is only applied to scalable image formats after */ - /* the glyph has been loaded. It means that hinting is unaltered by */ - /* the transformation and is performed on the character size given in */ - /* the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. */ - /* */ - /* Note that this also transforms the `face.glyph.advance' field, but */ - /* *not* the values in `face.glyph.metrics'. */ - /* */ - FT_EXPORT( void ) - FT_Set_Transform( FT_Face face, - FT_Matrix* matrix, - FT_Vector* delta ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Render_Mode */ - /* */ - /* <Description> */ - /* An enumeration type that lists the render modes supported by */ - /* FreeType~2. Each mode corresponds to a specific type of scanline */ - /* conversion performed on the outline. */ - /* */ - /* For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode' */ - /* field in the @FT_GlyphSlotRec structure gives the format of the */ - /* returned bitmap. */ - /* */ - /* All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, */ - /* indicating pixel coverage. Use linear alpha blending and gamma */ - /* correction to correctly render non-monochrome glyph bitmaps onto a */ - /* surface; see @FT_Render_Glyph. */ - /* */ - /* <Values> */ - /* FT_RENDER_MODE_NORMAL :: */ - /* This is the default render mode; it corresponds to 8-bit */ - /* anti-aliased bitmaps. */ - /* */ - /* FT_RENDER_MODE_LIGHT :: */ - /* This is equivalent to @FT_RENDER_MODE_NORMAL. It is only */ - /* defined as a separate value because render modes are also used */ - /* indirectly to define hinting algorithm selectors. See */ - /* @FT_LOAD_TARGET_XXX for details. */ - /* */ - /* FT_RENDER_MODE_MONO :: */ - /* This mode corresponds to 1-bit bitmaps (with 2~levels of */ - /* opacity). */ - /* */ - /* FT_RENDER_MODE_LCD :: */ - /* This mode corresponds to horizontal RGB and BGR sub-pixel */ - /* displays like LCD screens. It produces 8-bit bitmaps that are */ - /* 3~times the width of the original glyph outline in pixels, and */ - /* which use the @FT_PIXEL_MODE_LCD mode. */ - /* */ - /* FT_RENDER_MODE_LCD_V :: */ - /* This mode corresponds to vertical RGB and BGR sub-pixel displays */ - /* (like PDA screens, rotated LCD displays, etc.). It produces */ - /* 8-bit bitmaps that are 3~times the height of the original */ - /* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */ - /* */ - /* <Note> */ - /* The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be */ - /* filtered to reduce color-fringes by using @FT_Library_SetLcdFilter */ - /* (not active in the default builds). It is up to the caller to */ - /* either call @FT_Library_SetLcdFilter (if available) or do the */ - /* filtering itself. */ - /* */ - /* 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. */ - /* */ - typedef enum FT_Render_Mode_ - { - FT_RENDER_MODE_NORMAL = 0, - FT_RENDER_MODE_LIGHT, - FT_RENDER_MODE_MONO, - FT_RENDER_MODE_LCD, - FT_RENDER_MODE_LCD_V, - - FT_RENDER_MODE_MAX - - } FT_Render_Mode; - - - /* these constants are deprecated; use the corresponding */ - /* `FT_Render_Mode' values instead */ -#define ft_render_mode_normal FT_RENDER_MODE_NORMAL -#define ft_render_mode_mono FT_RENDER_MODE_MONO - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Render_Glyph */ - /* */ - /* <Description> */ - /* Convert a given glyph image to a bitmap. It does so by inspecting */ - /* the glyph image format, finding the relevant renderer, and */ - /* invoking it. */ - /* */ - /* When FreeType outputs a bitmap of a glyph, it really outputs an */ - /* alpha coverage map. If a pixel is completely covered by a */ - /* filled-in outline, the bitmap contains 0xFF at that pixel, meaning */ - /* that 0xFF/0xFF fraction of that pixel is covered, meaning the */ - /* pixel is 100% black (or 0% bright). If a pixel is only 50% */ - /* covered (value 0x80), the pixel is made 50% black (50% bright or a */ - /* middle shade of grey). 0% covered means 0% black (100% bright or */ - /* white). */ - /* */ - /* On high-DPI screens like on smartphones and tablets, the pixels */ - /* are so small that their chance of being completely covered and */ - /* therefore completely black are fairly good. On the low-DPI */ - /* screens, however, the situation is different. The pixels are too */ - /* large for most of the details of a glyph and shades of gray are */ - /* the norm rather than the exception. */ - /* */ - /* This is relevant because all our screens have a second problem: */ - /* they are not linear. 1~+~1 is not~2. Twice the value does not */ - /* result in twice the brightness. When a pixel is only 50% covered, */ - /* the coverage map says 50% black, and this translates to a pixel */ - /* value of 128 when you use 8~bits per channel (0-255). However, */ - /* this does not translate to 50% brightness for that pixel on our */ - /* sRGB and gamma~2.2 screens. Due to their non-linearity, they */ - /* dwell longer in the darks and only a pixel value of about 186 */ - /* results in 50% brightness – 128 ends up too dark on both bright */ - /* and dark backgrounds. The net result is that dark text looks */ - /* burnt-out, pixely and blotchy on bright background, bright text */ - /* too frail on dark backgrounds, and colored text on colored */ - /* background (for example, red on green) seems to have dark halos or */ - /* `dirt' around it. The situation is especially ugly for diagonal */ - /* stems like in `w' glyph shapes where the quality of FreeType's */ - /* anti-aliasing depends on the correct display of grays. On */ - /* high-DPI screens where smaller, fully black pixels reign supreme, */ - /* this doesn't matter, but on our low-DPI screens with all the gray */ - /* shades, it does. 0% and 100% brightness are the same things in */ - /* linear and non-linear space, just all the shades in-between */ - /* aren't. */ - /* */ - /* The blending function for placing text over a background is */ - /* */ - /* { */ - /* dst = alpha * src + (1 - alpha) * dst , */ - /* } */ - /* */ - /* which is known as the OVER operator. */ - /* */ - /* To correctly composite an antialiased 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, */ - /* */ - /* 2. use OVER to blend the two linear colors using the glyph pixel */ - /* as the alpha value (remember, the glyph bitmap is an alpha */ - /* coverage bitmap), and */ - /* */ - /* 3. apply inverse gamma to the blended pixel and write it back to */ - /* the image. */ - /* */ - /* Internal testing at Adobe found that a target inverse gamma of~1.8 */ - /* for step~3 gives good results across a wide range of displays with */ - /* an sRGB gamma curve or a similar one. */ - /* */ - /* This process can cost performance. There is an approximation that */ - /* does not need to know about the background color; see */ - /* https://bel.fi/alankila/lcd/ and */ - /* https://bel.fi/alankila/lcd/alpcor.html for details. */ - /* */ - /* *ATTENTION*: Linear blending is even more important when dealing */ - /* with subpixel-rendered glyphs to prevent color-fringing! A */ - /* subpixel-rendered glyph must first be filtered with a filter that */ - /* gives equal weight to the three color primaries and does not */ - /* exceed a sum of 0x100, see section @lcd_filtering. Then the */ - /* only difference to gray linear blending is that subpixel-rendered */ - /* linear blending is done 3~times per pixel: red foreground subpixel */ - /* to red background subpixel and so on for green and blue. */ - /* */ - /* <InOut> */ - /* slot :: A handle to the glyph slot containing the image to */ - /* convert. */ - /* */ - /* <Input> */ - /* render_mode :: This is the render mode used to render the glyph */ - /* image into a bitmap. See @FT_Render_Mode for a */ - /* list of possible values. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* To get meaningful results, font scaling values must be set with */ - /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Render_Glyph( FT_GlyphSlot slot, - FT_Render_Mode render_mode ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Kerning_Mode */ - /* */ - /* <Description> */ - /* An enumeration used to specify which kerning values to return in */ - /* @FT_Get_Kerning. */ - /* */ - /* <Values> */ - /* FT_KERNING_DEFAULT :: Return grid-fitted kerning distances in */ - /* pixels (value is~0). Whether they are */ - /* scaled depends on @FT_LOAD_NO_SCALE. */ - /* */ - /* FT_KERNING_UNFITTED :: Return un-grid-fitted kerning distances in */ - /* 26.6 fractional pixels. Whether they are */ - /* scaled depends on @FT_LOAD_NO_SCALE. */ - /* */ - /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */ - /* units. */ - /* */ - /* <Note> */ - /* FT_KERNING_DEFAULT returns full pixel values; it also makes */ - /* FreeType heuristically scale down kerning distances at small ppem */ - /* values so that they don't become too big. */ - /* */ - typedef enum FT_Kerning_Mode_ - { - FT_KERNING_DEFAULT = 0, - FT_KERNING_UNFITTED, - FT_KERNING_UNSCALED - - } FT_Kerning_Mode; - - - /* these constants are deprecated; use the corresponding */ - /* `FT_Kerning_Mode' values instead */ -#define ft_kerning_default FT_KERNING_DEFAULT -#define ft_kerning_unfitted FT_KERNING_UNFITTED -#define ft_kerning_unscaled FT_KERNING_UNSCALED - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Kerning */ - /* */ - /* <Description> */ - /* Return the kerning vector between two glyphs of a same face. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* left_glyph :: The index of the left glyph in the kern pair. */ - /* */ - /* right_glyph :: The index of the right glyph in the kern pair. */ - /* */ - /* kern_mode :: See @FT_Kerning_Mode for more information. */ - /* Determines the scale and dimension of the returned */ - /* kerning vector. */ - /* */ - /* <Output> */ - /* akerning :: The kerning vector. This is either in font units, */ - /* fractional pixels (26.6 format), or pixels for */ - /* scalable formats, and in pixels for fixed-sizes */ - /* formats. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Only horizontal layouts (left-to-right & right-to-left) are */ - /* supported by this method. Other layouts, or more sophisticated */ - /* kernings, are out of the scope of this API function -- they can be */ - /* implemented through format-specific interfaces. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Kerning( FT_Face face, - FT_UInt left_glyph, - FT_UInt right_glyph, - FT_UInt kern_mode, - FT_Vector *akerning ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Track_Kerning */ - /* */ - /* <Description> */ - /* Return the track kerning for a given face object at a given size. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* point_size :: The point size in 16.16 fractional points. */ - /* */ - /* 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, 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, - FT_Int degree, - FT_Fixed* akerning ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Glyph_Name */ - /* */ - /* <Description> */ - /* Retrieve the ASCII name of a given glyph in a face. This only */ - /* works for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* glyph_index :: The glyph index. */ - /* */ - /* buffer_max :: The maximum number of bytes available in the */ - /* buffer. */ - /* */ - /* <Output> */ - /* buffer :: A pointer to a target buffer where the name is */ - /* copied to. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* An error is returned if the face doesn't provide glyph names or if */ - /* the glyph index is invalid. In all cases of failure, the first */ - /* byte of `buffer' is set to~0 to indicate an empty name. */ - /* */ - /* The glyph name is truncated to fit within the buffer if it is too */ - /* long. The returned string is always zero-terminated. */ - /* */ - /* Be aware that FreeType reorders glyph indices internally so that */ - /* glyph index~0 always corresponds to the `missing glyph' (called */ - /* `.notdef'). */ - /* */ - /* This function always returns an error if the config macro */ - /* `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoptions.h'. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Glyph_Name( FT_Face face, - FT_UInt glyph_index, - FT_Pointer buffer, - FT_UInt buffer_max ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Postscript_Name */ - /* */ - /* <Description> */ - /* Retrieve the ASCII PostScript name of a given face, if available. */ - /* This only works with PostScript and TrueType fonts. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Return> */ - /* A pointer to the face's PostScript name. NULL if unavailable. */ - /* */ - /* <Note> */ - /* The returned pointer is owned by the face and is destroyed with */ - /* it. */ - /* */ - FT_EXPORT( const char* ) - FT_Get_Postscript_Name( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Select_Charmap */ - /* */ - /* <Description> */ - /* Select a given charmap by its encoding tag (as listed in */ - /* `freetype.h'). */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* encoding :: A handle to the selected encoding. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function returns an error if no charmap in the face */ - /* corresponds to the encoding queried here. */ - /* */ - /* Because many fonts contain more than a single cmap for Unicode */ - /* encoding, this function has some special code to select the one */ - /* that covers Unicode best (`best' in the sense that a UCS-4 cmap is */ - /* preferred to a UCS-2 cmap). It is thus preferable to */ - /* @FT_Set_Charmap in this case. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Select_Charmap( FT_Face face, - FT_Encoding encoding ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Charmap */ - /* */ - /* <Description> */ - /* Select a given charmap for character code to glyph index mapping. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* charmap :: A handle to the selected charmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function returns an error if the charmap is not part of */ - /* the face (i.e., if it is not listed in the `face->charmaps' */ - /* table). */ - /* */ - /* It also fails if a type~14 charmap is selected. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Charmap( FT_Face face, - FT_CharMap charmap ); - - - /************************************************************************* - * - * @function: - * FT_Get_Charmap_Index - * - * @description: - * Retrieve index of a given charmap. - * - * @input: - * charmap :: - * A handle to a charmap. - * - * @return: - * The index into the array of character maps within the face to which - * `charmap' belongs. If an error occurs, -1 is returned. - * - */ - FT_EXPORT( FT_Int ) - FT_Get_Charmap_Index( FT_CharMap charmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Char_Index */ - /* */ - /* <Description> */ - /* Return the glyph index of a given character code. This function */ - /* uses a charmap object to do the mapping. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* charcode :: The character code. */ - /* */ - /* <Return> */ - /* The glyph index. 0~means `undefined character code'. */ - /* */ - /* <Note> */ - /* If you use FreeType to manipulate the contents of font files */ - /* directly, be aware that the glyph index returned by this function */ - /* doesn't always correspond to the internal indices used within the */ - /* file. This is done to ensure that value~0 always corresponds to */ - /* the `missing glyph'. If the first glyph is not named `.notdef', */ - /* then for Type~1 and Type~42 fonts, `.notdef' will be moved into */ - /* the glyph ID~0 position, and whatever was there will be moved to */ - /* the position `.notdef' had. For Type~1 fonts, if there is no */ - /* `.notdef' glyph at all, then one will be created at index~0 and */ - /* whatever was there will be moved to the last index -- Type~42 */ - /* fonts are considered invalid under this condition. */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Get_Char_Index( FT_Face face, - FT_ULong charcode ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_First_Char */ - /* */ - /* <Description> */ - /* This function is used to return the first character code in the */ - /* current charmap of a given face. It also returns the */ - /* corresponding glyph index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Output> */ - /* agindex :: Glyph index of first character code. 0~if charmap is */ - /* empty. */ - /* */ - /* <Return> */ - /* The charmap's first character code. */ - /* */ - /* <Note> */ - /* You should use this function with @FT_Get_Next_Char to be able to */ - /* parse all character codes available in a given charmap. The code */ - /* should look like this: */ - /* */ - /* { */ - /* FT_ULong charcode; */ - /* FT_UInt gindex; */ - /* */ - /* */ - /* charcode = FT_Get_First_Char( face, &gindex ); */ - /* while ( gindex != 0 ) */ - /* { */ - /* ... do something with (charcode,gindex) pair ... */ - /* */ - /* charcode = FT_Get_Next_Char( face, charcode, &gindex ); */ - /* } */ - /* } */ - /* */ - /* Be aware that character codes can have values up to 0xFFFFFFFF; */ - /* this might happen for non-Unicode or malformed cmaps. However, */ - /* even with regular Unicode encoding, so-called `last resort fonts' */ - /* (using SFNT cmap format 13, see function @FT_Get_CMap_Format) */ - /* normally have entries for all Unicode characters up to 0x1FFFFF, */ - /* which can cause *a lot* of iterations. */ - /* */ - /* Note that `*agindex' is set to~0 if the charmap is empty. The */ - /* result itself can be~0 in two cases: if the charmap is empty or */ - /* if the value~0 is the first valid character code. */ - /* */ - FT_EXPORT( FT_ULong ) - FT_Get_First_Char( FT_Face face, - FT_UInt *agindex ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Next_Char */ - /* */ - /* <Description> */ - /* This function is used to return the next character code in the */ - /* current charmap of a given face following the value `char_code', */ - /* as well as the corresponding glyph index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* char_code :: The starting character code. */ - /* */ - /* <Output> */ - /* agindex :: Glyph index of next character code. 0~if charmap */ - /* is empty. */ - /* */ - /* <Return> */ - /* The charmap's next character code. */ - /* */ - /* <Note> */ - /* You should use this function with @FT_Get_First_Char to walk */ - /* over all character codes available in a given charmap. See the */ - /* note for this function for a simple code example. */ - /* */ - /* Note that `*agindex' is set to~0 when there are no more codes in */ - /* the charmap. */ - /* */ - FT_EXPORT( FT_ULong ) - FT_Get_Next_Char( FT_Face face, - FT_ULong char_code, - FT_UInt *agindex ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Name_Index */ - /* */ - /* <Description> */ - /* Return the glyph index of a given glyph name. This function uses */ - /* driver specific objects to do the translation. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* glyph_name :: The glyph name. */ - /* */ - /* <Return> */ - /* The glyph index. 0~means `undefined character code'. */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Get_Name_Index( FT_Face face, - FT_String* glyph_name ); - - - /************************************************************************* - * - * @macro: - * FT_SUBGLYPH_FLAG_XXX - * - * @description: - * A list of constants used to describe subglyphs. Please refer to the - * TrueType specification for the meaning of the various flags. - * - * @values: - * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS :: - * FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES :: - * FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID :: - * FT_SUBGLYPH_FLAG_SCALE :: - * FT_SUBGLYPH_FLAG_XY_SCALE :: - * FT_SUBGLYPH_FLAG_2X2 :: - * FT_SUBGLYPH_FLAG_USE_MY_METRICS :: - * - */ -#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 -#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 -#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 -#define FT_SUBGLYPH_FLAG_SCALE 8 -#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 -#define FT_SUBGLYPH_FLAG_2X2 0x80 -#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 - - - /************************************************************************* - * - * @func: - * FT_Get_SubGlyph_Info - * - * @description: - * Retrieve a description of a given subglyph. Only use it if - * `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE; an error is - * returned otherwise. - * - * @input: - * glyph :: - * The source glyph slot. - * - * sub_index :: - * The index of the subglyph. Must be less than - * `glyph->num_subglyphs'. - * - * @output: - * p_index :: - * The glyph index of the subglyph. - * - * p_flags :: - * The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX. - * - * p_arg1 :: - * The subglyph's first argument (if any). - * - * p_arg2 :: - * The subglyph's second argument (if any). - * - * p_transform :: - * The subglyph transformation (if any). - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The values of `*p_arg1', `*p_arg2', and `*p_transform' must be - * interpreted depending on the flags returned in `*p_flags'. See the - * TrueType specification for details. - * - */ - FT_EXPORT( FT_Error ) - FT_Get_SubGlyph_Info( FT_GlyphSlot glyph, - FT_UInt sub_index, - FT_Int *p_index, - FT_UInt *p_flags, - FT_Int *p_arg1, - FT_Int *p_arg2, - FT_Matrix *p_transform ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_FSTYPE_XXX */ - /* */ - /* <Description> */ - /* A list of bit flags used in the `fsType' field of the OS/2 table */ - /* in a TrueType or OpenType font and the `FSType' entry in a */ - /* PostScript font. These bit flags are returned by */ - /* @FT_Get_FSType_Flags; they inform client applications of embedding */ - /* and subsetting restrictions associated with a font. */ - /* */ - /* See */ - /* http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */ - /* for more details. */ - /* */ - /* <Values> */ - /* FT_FSTYPE_INSTALLABLE_EMBEDDING :: */ - /* Fonts with no fsType bit set may be embedded and permanently */ - /* installed on the remote system by an application. */ - /* */ - /* FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING :: */ - /* Fonts that have only this bit set must not be modified, embedded */ - /* or exchanged in any manner without first obtaining permission of */ - /* the font software copyright owner. */ - /* */ - /* FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: */ - /* If this bit is set, the font may be embedded and temporarily */ - /* loaded on the remote system. Documents containing Preview & */ - /* Print fonts must be opened `read-only'; no edits can be applied */ - /* to the document. */ - /* */ - /* FT_FSTYPE_EDITABLE_EMBEDDING :: */ - /* If this bit is set, the font may be embedded but must only be */ - /* installed temporarily on other systems. In contrast to Preview */ - /* & Print fonts, documents containing editable fonts may be opened */ - /* for reading, editing is permitted, and changes may be saved. */ - /* */ - /* FT_FSTYPE_NO_SUBSETTING :: */ - /* If this bit is set, the font may not be subsetted prior to */ - /* embedding. */ - /* */ - /* FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: */ - /* If this bit is set, only bitmaps contained in the font may be */ - /* embedded; no outline data may be embedded. If there are no */ - /* bitmaps available in the font, then the font is unembeddable. */ - /* */ - /* <Note> */ - /* The flags are ORed together, thus more than a single value can be */ - /* returned. */ - /* */ - /* While the fsType flags can indicate that a font may be embedded, a */ - /* license with the font vendor may be separately required to use the */ - /* font in this way. */ - /* */ -#define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000 -#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002 -#define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004 -#define FT_FSTYPE_EDITABLE_EMBEDDING 0x0008 -#define FT_FSTYPE_NO_SUBSETTING 0x0100 -#define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200 - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_FSType_Flags */ - /* */ - /* <Description> */ - /* Return the fsType flags for a font. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Return> */ - /* The fsType flags, @FT_FSTYPE_XXX. */ - /* */ - /* <Note> */ - /* Use this function rather than directly reading the `fs_type' field */ - /* in the @PS_FontInfoRec structure, which is only guaranteed to */ - /* return the correct results for Type~1 fonts. */ - /* */ - /* <Since> */ - /* 2.3.8 */ - /* */ - FT_EXPORT( FT_UShort ) - FT_Get_FSType_Flags( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* glyph_variants */ - /* */ - /* <Title> */ - /* Glyph Variants */ - /* */ - /* <Abstract> */ - /* The FreeType~2 interface to Unicode Ideographic Variation */ - /* Sequences (IVS), using the SFNT cmap format~14. */ - /* */ - /* <Description> */ - /* Many CJK characters have variant forms. They are a sort of grey */ - /* area somewhere between being totally irrelevant and semantically */ - /* distinct; for this reason, the Unicode consortium decided to */ - /* introduce Ideographic Variation Sequences (IVS), consisting of a */ - /* Unicode base character and one of 240 variant selectors */ - /* (U+E0100-U+E01EF), instead of further extending the already huge */ - /* code range for CJK characters. */ - /* */ - /* An IVS is registered and unique; for further details please refer */ - /* to Unicode Technical Standard #37, the Ideographic Variation */ - /* Database: */ - /* */ - /* http://www.unicode.org/reports/tr37/ */ - /* */ - /* To date (November 2014), the character with the most variants is */ - /* U+9089, having 32 such IVS. */ - /* */ - /* Adobe and MS decided to support IVS with a new cmap subtable */ - /* (format~14). It is an odd subtable because it is not a mapping of */ - /* input code points to glyphs, but contains lists of all variants */ - /* supported by the font. */ - /* */ - /* A variant may be either `default' or `non-default'. A default */ - /* variant is the one you will get for that code point if you look it */ - /* up in the standard Unicode cmap. A non-default variant is a */ - /* different glyph. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetCharVariantIndex */ - /* */ - /* <Description> */ - /* Return the glyph index of a given character code as modified by */ - /* the variation selector. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* charcode :: */ - /* The character code point in Unicode. */ - /* */ - /* variantSelector :: */ - /* The Unicode code point of the variation selector. */ - /* */ - /* <Return> */ - /* The glyph index. 0~means either `undefined character code', or */ - /* `undefined selector code', or `no variation selector cmap */ - /* subtable', or `current CharMap is not Unicode'. */ - /* */ - /* <Note> */ - /* If you use FreeType to manipulate the contents of font files */ - /* directly, be aware that the glyph index returned by this function */ - /* doesn't always correspond to the internal indices used within */ - /* the file. This is done to ensure that value~0 always corresponds */ - /* to the `missing glyph'. */ - /* */ - /* This function is only meaningful if */ - /* a) the font has a variation selector cmap sub table, */ - /* and */ - /* b) the current charmap has a Unicode encoding. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Face_GetCharVariantIndex( FT_Face face, - FT_ULong charcode, - FT_ULong variantSelector ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetCharVariantIsDefault */ - /* */ - /* <Description> */ - /* Check whether this variant of this Unicode character is the one to */ - /* be found in the `cmap'. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* charcode :: */ - /* The character codepoint in Unicode. */ - /* */ - /* variantSelector :: */ - /* The Unicode codepoint of the variation selector. */ - /* */ - /* <Return> */ - /* 1~if found in the standard (Unicode) cmap, 0~if found in the */ - /* variation selector cmap, or -1 if it is not a variant. */ - /* */ - /* <Note> */ - /* This function is only meaningful if the font has a variation */ - /* selector cmap subtable. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ - FT_EXPORT( FT_Int ) - FT_Face_GetCharVariantIsDefault( FT_Face face, - FT_ULong charcode, - FT_ULong variantSelector ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetVariantSelectors */ - /* */ - /* <Description> */ - /* Return a zero-terminated list of Unicode variant selectors found */ - /* in the font. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* <Return> */ - /* A pointer to an array of selector code points, or NULL if there is */ - /* no valid variant selector cmap subtable. */ - /* */ - /* <Note> */ - /* The last item in the array is~0; the array is owned by the */ - /* @FT_Face object but can be overwritten or released on the next */ - /* call to a FreeType function. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ - FT_EXPORT( FT_UInt32* ) - FT_Face_GetVariantSelectors( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetVariantsOfChar */ - /* */ - /* <Description> */ - /* Return a zero-terminated list of Unicode variant selectors found */ - /* for the specified character code. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* charcode :: */ - /* The character codepoint in Unicode. */ - /* */ - /* <Return> */ - /* A pointer to an array of variant selector code points that are */ - /* active for the given character, or NULL if the corresponding list */ - /* is empty. */ - /* */ - /* <Note> */ - /* The last item in the array is~0; the array is owned by the */ - /* @FT_Face object but can be overwritten or released on the next */ - /* call to a FreeType function. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ - FT_EXPORT( FT_UInt32* ) - FT_Face_GetVariantsOfChar( FT_Face face, - FT_ULong charcode ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetCharsOfVariant */ - /* */ - /* <Description> */ - /* Return a zero-terminated list of Unicode character codes found for */ - /* the specified variant selector. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* variantSelector :: */ - /* The variant selector code point in Unicode. */ - /* */ - /* <Return> */ - /* A list of all the code points that are specified by this selector */ - /* (both default and non-default codes are returned) or NULL if there */ - /* is no valid cmap or the variant selector is invalid. */ - /* */ - /* <Note> */ - /* The last item in the array is~0; the array is owned by the */ - /* @FT_Face object but can be overwritten or released on the next */ - /* call to a FreeType function. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ - FT_EXPORT( FT_UInt32* ) - FT_Face_GetCharsOfVariant( FT_Face face, - FT_ULong variantSelector ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /* <Title> */ - /* Computations */ - /* */ - /* <Abstract> */ - /* Crunching fixed numbers and vectors. */ - /* */ - /* <Description> */ - /* This section contains various functions used to perform */ - /* computations on 16.16 fixed-float numbers or 2d vectors. */ - /* */ - /* <Order> */ - /* FT_MulDiv */ - /* FT_MulFix */ - /* FT_DivFix */ - /* FT_RoundFix */ - /* FT_CeilFix */ - /* FT_FloorFix */ - /* FT_Vector_Transform */ - /* FT_Matrix_Multiply */ - /* FT_Matrix_Invert */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_MulDiv */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation `(a*b)/c' */ - /* with maximum accuracy (it uses a 64-bit intermediate integer */ - /* whenever necessary). */ - /* */ - /* This function isn't necessarily as fast as some processor specific */ - /* operations, but is at least completely portable. */ - /* */ - /* <Input> */ - /* a :: The first multiplier. */ - /* b :: The second multiplier. */ - /* c :: The divisor. */ - /* */ - /* <Return> */ - /* The result of `(a*b)/c'. This function never traps when trying to */ - /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */ - /* on the signs of `a' and `b'. */ - /* */ - FT_EXPORT( FT_Long ) - FT_MulDiv( FT_Long a, - FT_Long b, - FT_Long c ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_MulFix */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation */ - /* `(a*b)/0x10000' with maximum accuracy. Most of the time this is */ - /* used to multiply a given value by a 16.16 fixed-point factor. */ - /* */ - /* <Input> */ - /* a :: The first multiplier. */ - /* b :: The second multiplier. Use a 16.16 factor here whenever */ - /* possible (see note below). */ - /* */ - /* <Return> */ - /* The result of `(a*b)/0x10000'. */ - /* */ - /* <Note> */ - /* This function has been optimized for the case where the absolute */ - /* value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */ - /* As this happens mainly when scaling from notional units to */ - /* fractional pixels in FreeType, it resulted in noticeable speed */ - /* improvements between versions 2.x and 1.x. */ - /* */ - /* As a conclusion, always try to place a 16.16 factor as the */ - /* _second_ argument of this function; this can make a great */ - /* difference. */ - /* */ - FT_EXPORT( FT_Long ) - FT_MulFix( FT_Long a, - FT_Long b ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_DivFix */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation */ - /* `(a*0x10000)/b' with maximum accuracy. Most of the time, this is */ - /* used to divide a given value by a 16.16 fixed-point factor. */ - /* */ - /* <Input> */ - /* a :: The numerator. */ - /* b :: The denominator. Use a 16.16 factor here. */ - /* */ - /* <Return> */ - /* The result of `(a*0x10000)/b'. */ - /* */ - FT_EXPORT( FT_Long ) - FT_DivFix( FT_Long a, - FT_Long b ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_RoundFix */ - /* */ - /* <Description> */ - /* A very simple function used to round a 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number to be rounded. */ - /* */ - /* <Return> */ - /* `a' rounded to nearest 16.16 fixed integer, halfway cases away */ - /* from zero. */ - /* */ - FT_EXPORT( FT_Fixed ) - FT_RoundFix( FT_Fixed a ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_CeilFix */ - /* */ - /* <Description> */ - /* A very simple function used to compute the ceiling function of a */ - /* 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number for which the ceiling function is to be computed. */ - /* */ - /* <Return> */ - /* `a' rounded towards plus infinity. */ - /* */ - FT_EXPORT( FT_Fixed ) - FT_CeilFix( FT_Fixed a ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_FloorFix */ - /* */ - /* <Description> */ - /* A very simple function used to compute the floor function of a */ - /* 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number for which the floor function is to be computed. */ - /* */ - /* <Return> */ - /* `a' rounded towards minus infinity. */ - /* */ - FT_EXPORT( FT_Fixed ) - FT_FloorFix( FT_Fixed a ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Vector_Transform */ - /* */ - /* <Description> */ - /* Transform a single vector through a 2x2 matrix. */ - /* */ - /* <InOut> */ - /* vector :: The target vector to transform. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the source 2x2 matrix. */ - /* */ - /* <Note> */ - /* The result is undefined if either `vector' or `matrix' is invalid. */ - /* */ - FT_EXPORT( void ) - FT_Vector_Transform( FT_Vector* vec, - const FT_Matrix* matrix ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* version */ - /* */ - /* <Title> */ - /* FreeType Version */ - /* */ - /* <Abstract> */ - /* Functions and macros related to FreeType versions. */ - /* */ - /* <Description> */ - /* Note that those functions and macros are of limited use because */ - /* even a new release of FreeType with only documentation changes */ - /* increases the version number. */ - /* */ - /* <Order> */ - /* FT_Library_Version */ - /* */ - /* FREETYPE_MAJOR */ - /* FREETYPE_MINOR */ - /* FREETYPE_PATCH */ - /* */ - /* FT_Face_CheckTrueTypePatents */ - /* FT_Face_SetUnpatentedHinting */ - /* */ - /* FREETYPE_XXX */ - /* */ - /*************************************************************************/ - - - /************************************************************************* - * - * @enum: - * FREETYPE_XXX - * - * @description: - * These three macros identify the FreeType source code version. - * Use @FT_Library_Version to access them at runtime. - * - * @values: - * FREETYPE_MAJOR :: The major version number. - * FREETYPE_MINOR :: The minor version number. - * FREETYPE_PATCH :: The patch level. - * - * @note: - * The version number of FreeType if built as a dynamic link library - * with the `libtool' package is _not_ controlled by these three - * macros. - * - */ -#define FREETYPE_MAJOR 2 -#define FREETYPE_MINOR 6 -#define FREETYPE_PATCH 2 - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Library_Version */ - /* */ - /* <Description> */ - /* Return the version of the FreeType library being used. This is */ - /* useful when dynamically linking to the library, since one cannot */ - /* use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and */ - /* @FREETYPE_PATCH. */ - /* */ - /* <Input> */ - /* library :: A source library handle. */ - /* */ - /* <Output> */ - /* amajor :: The major version number. */ - /* */ - /* aminor :: The minor version number. */ - /* */ - /* apatch :: The patch version number. */ - /* */ - /* <Note> */ - /* The reason why this function takes a `library' argument is because */ - /* certain programs implement library initialization in a custom way */ - /* that doesn't use @FT_Init_FreeType. */ - /* */ - /* In such cases, the library version might not be available before */ - /* the library object has been created. */ - /* */ - FT_EXPORT( void ) - FT_Library_Version( FT_Library library, - FT_Int *amajor, - FT_Int *aminor, - FT_Int *apatch ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_CheckTrueTypePatents */ - /* */ - /* <Description> */ - /* Parse all bytecode instructions of a TrueType font file to check */ - /* whether any of the patented opcodes are used. This is only useful */ - /* if you want to be able to use the unpatented hinter with */ - /* fonts that do *not* use these opcodes. */ - /* */ - /* Note that this function parses *all* glyph instructions in the */ - /* font file, which may be slow. */ - /* */ - /* <Input> */ - /* face :: A face handle. */ - /* */ - /* <Return> */ - /* 1~if this is a TrueType font that uses one of the patented */ - /* opcodes, 0~otherwise. */ - /* */ - /* <Note> */ - /* Since May 2010, TrueType hinting is no longer patented. */ - /* */ - /* <Since> */ - /* 2.3.5 */ - /* */ - FT_EXPORT( FT_Bool ) - FT_Face_CheckTrueTypePatents( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_SetUnpatentedHinting */ - /* */ - /* <Description> */ - /* Enable or disable the unpatented hinter for a given face. */ - /* Only enable it if you have determined that the face doesn't */ - /* use any patented opcodes (see @FT_Face_CheckTrueTypePatents). */ - /* */ - /* <Input> */ - /* face :: A face handle. */ - /* */ - /* value :: New boolean setting. */ - /* */ - /* <Return> */ - /* The old setting value. This will always be false if this is not */ - /* an SFNT font, or if the unpatented hinter is not compiled in this */ - /* instance of the library. */ - /* */ - /* <Note> */ - /* Since May 2010, TrueType hinting is no longer patented. */ - /* */ - /* <Since> */ - /* 2.3.5 */ - /* */ - FT_EXPORT( FT_Bool ) - FT_Face_SetUnpatentedHinting( FT_Face face, - FT_Bool value ); - - /* */ - - -FT_END_HEADER - -#endif /* __FREETYPE_H__ */ - - -/* END */ diff --git a/win32/include/freetype/freetype/config/ftconfig.h b/win32/include/freetype/freetype/config/ftconfig.h new file mode 100644 index 00000000..94666033 --- /dev/null +++ b/win32/include/freetype/freetype/config/ftconfig.h @@ -0,0 +1,575 @@ +/**************************************************************************** + * + * ftconfig.h + * + * ANSI-specific configuration file (specification only). + * + * Copyright (C) 1996-2019 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. + * + */ + + + /************************************************************************** + * + * This header file contains a number of macro definitions that are used by + * the rest of the engine. Most of the macros here are automatically + * determined at compile time, and you should not need to change it to port + * FreeType, except to compile the library with a non-ANSI compiler. + * + * Note however that if some specific modifications are needed, we advise + * you to place a modified copy in your build directory. + * + * The build directory is usually `builds/<system>`, and contains + * system-specific files that are always included first when building the + * library. + * + * This ANSI version should stay in `include/config/`. + * + */ + +#ifndef FTCONFIG_H_ +#define FTCONFIG_H_ + +#include <ft2build.h> +#include FT_CONFIG_OPTIONS_H +#include FT_CONFIG_STANDARD_LIBRARY_H + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * PLATFORM-SPECIFIC CONFIGURATION MACROS + * + * These macros can be toggled to suit a specific system. The current ones + * are defaults used to compile FreeType in an ANSI C environment (16bit + * compilers are also supported). Copy this file to your own + * `builds/<system>` directory, and edit it to port the engine. + * + */ + + + /* There are systems (like the Texas Instruments 'C54x) where a `char` */ + /* has 16~bits. ANSI~C says that `sizeof(char)` is always~1. Since an */ + /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which */ + /* is probably unexpected. */ + /* */ + /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a */ + /* `char` type. */ + +#ifndef FT_CHAR_BIT +#define FT_CHAR_BIT CHAR_BIT +#endif + + + /* The size of an `int` type. */ +#if FT_UINT_MAX == 0xFFFFUL +#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT ) +#elif FT_UINT_MAX == 0xFFFFFFFFUL +#define FT_SIZEOF_INT ( 32 / FT_CHAR_BIT ) +#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL +#define FT_SIZEOF_INT ( 64 / FT_CHAR_BIT ) +#else +#error "Unsupported size of `int' type!" +#endif + + /* The size of a `long` type. A five-byte `long` (as used e.g. on the */ + /* DM642) is recognized but avoided. */ +#if FT_ULONG_MAX == 0xFFFFFFFFUL +#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) +#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL +#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) +#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL +#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT ) +#else +#error "Unsupported size of `long' type!" +#endif + + + /* `FT_UNUSED` indicates that a given parameter is not used -- */ + /* this is only used to get rid of unpleasant compiler warnings. */ +#ifndef FT_UNUSED +#define FT_UNUSED( arg ) ( (arg) = (arg) ) +#endif + + + /************************************************************************** + * + * AUTOMATIC CONFIGURATION MACROS + * + * These macros are computed from the ones defined above. Don't touch + * their definition, unless you know precisely what you are doing. No + * porter should need to mess with them. + * + */ + + + /************************************************************************** + * + * Mac support + * + * This is the only necessary change, so it is defined here instead + * providing a new configuration file. + */ +#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. */ +#include <errno.h> +#ifdef ECANCELED /* defined since 10.2 */ +#include "AvailabilityMacros.h" +#endif +#if defined( __LP64__ ) && \ + ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) +#undef FT_MACINTOSH +#endif + +#elif defined( __SC__ ) || defined( __MRC__ ) + /* Classic MacOS compilers */ +#include "ConditionalMacros.h" +#if TARGET_OS_MAC +#define FT_MACINTOSH 1 +#endif + +#endif + + + /* Fix compiler warning with sgi compiler. */ +#if defined( __sgi ) && !defined( __GNUC__ ) +#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) +#pragma set woff 3505 +#endif +#endif + + + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @type: + * FT_Int16 + * + * @description: + * A typedef for a 16bit signed integer type. + */ + typedef signed short FT_Int16; + + + /************************************************************************** + * + * @type: + * FT_UInt16 + * + * @description: + * A typedef for a 16bit unsigned integer type. + */ + typedef unsigned short FT_UInt16; + + /* */ + + + /* this #if 0 ... #endif clause is for documentation purposes */ +#if 0 + + /************************************************************************** + * + * @type: + * FT_Int32 + * + * @description: + * A typedef for a 32bit signed integer type. The size depends on the + * configuration. + */ + typedef signed XXX FT_Int32; + + + /************************************************************************** + * + * @type: + * FT_UInt32 + * + * A typedef for a 32bit unsigned integer type. The size depends on the + * configuration. + */ + typedef unsigned XXX FT_UInt32; + + + /************************************************************************** + * + * @type: + * FT_Int64 + * + * A typedef for a 64bit signed integer type. The size depends on the + * configuration. Only defined if there is real 64bit support; + * otherwise, it gets emulated with a structure (if necessary). + */ + typedef signed XXX FT_Int64; + + + /************************************************************************** + * + * @type: + * FT_UInt64 + * + * A typedef for a 64bit unsigned integer type. The size depends on the + * configuration. Only defined if there is real 64bit support; + * otherwise, it gets emulated with a structure (if necessary). + */ + typedef unsigned XXX FT_UInt64; + + /* */ + +#endif + +#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT ) + + typedef signed int FT_Int32; + typedef unsigned int FT_UInt32; + +#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT ) + + typedef signed long FT_Int32; + typedef unsigned long FT_UInt32; + +#else +#error "no 32bit type found -- please check your configuration files" +#endif + + + /* look up an integer type that is at least 32~bits */ +#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT ) + + typedef int FT_Fast; + typedef unsigned int FT_UFast; + +#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT ) + + typedef long FT_Fast; + typedef unsigned long FT_UFast; + +#endif + + + /* determine whether we have a 64-bit `int` type for platforms without */ + /* Autoconf */ +#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 + + /************************************************************************** + * + * A 64-bit data type may create compilation problems if you compile in + * strict ANSI mode. To avoid them, we disable other 64-bit data types if + * `__STDC__` is defined. You can however ignore this rule by defining the + * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro. + */ +#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++) */ + + /* this compiler provides the `__int64` type */ +#define FT_LONG64 +#define FT_INT64 __int64 +#define FT_UINT64 unsigned __int64 + +#elif defined( __BORLANDC__ ) /* Borland C++ */ + + /* XXXX: We should probably check the value of `__BORLANDC__` in order */ + /* to test the compiler version. */ + + /* this compiler provides the `__int64` type */ +#define FT_LONG64 +#define FT_INT64 __int64 +#define FT_UINT64 unsigned __int64 + +#elif defined( __WATCOMC__ ) /* Watcom C++ */ + + /* Watcom doesn't provide 64-bit data types */ + +#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 /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ + +#ifdef FT_LONG64 + typedef FT_INT64 FT_Int64; + typedef FT_UINT64 FT_UInt64; +#endif + + +#ifdef _WIN64 + /* only 64bit Windows uses the LLP64 data model, i.e., */ + /* 32bit integers, 64bit pointers */ +#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x) +#else +#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x) +#endif + + + /************************************************************************** + * + * miscellaneous + * + */ + + +#define FT_BEGIN_STMNT do { +#define FT_END_STMNT } while ( 0 ) +#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT + + + /* `typeof` condition taken from gnulib's `intprops.h` header file */ +#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \ + ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \ + defined( __IBM__TYPEOF__ ) ) || \ + ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) ) +#define FT_TYPEOF( type ) ( __typeof__ ( type ) ) +#else +#define FT_TYPEOF( type ) /* empty */ +#endif + + + /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define, */ + /* respectively, a function that gets used only within the scope of a */ + /* module. Normally, both the header and source code files for such a */ + /* function are within a single module directory. */ + /* */ + /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and */ + /* `FT_LOCAL_ARRAY_DEF`. */ + /* */ +#ifdef FT_MAKE_OPTION_SINGLE_OBJECT + +#define FT_LOCAL( x ) static x +#define FT_LOCAL_DEF( x ) static x + +#else + +#ifdef __cplusplus +#define FT_LOCAL( x ) extern "C" x +#define FT_LOCAL_DEF( x ) extern "C" x +#else +#define FT_LOCAL( x ) extern x +#define FT_LOCAL_DEF( x ) x +#endif + +#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ + +#define FT_LOCAL_ARRAY( x ) extern const x +#define FT_LOCAL_ARRAY_DEF( x ) const x + + + /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */ + /* functions that are used in more than a single module. In the */ + /* current setup this implies that the declaration is in a header file */ + /* in the `include/freetype/internal` directory, and the function body */ + /* is in a file in `src/base`. */ + /* */ +#ifndef FT_BASE + +#ifdef __cplusplus +#define FT_BASE( x ) extern "C" x +#else +#define FT_BASE( x ) extern x +#endif + +#endif /* !FT_BASE */ + + +#ifndef FT_BASE_DEF + +#ifdef __cplusplus +#define FT_BASE_DEF( x ) x +#else +#define FT_BASE_DEF( x ) x +#endif + +#endif /* !FT_BASE_DEF */ + + + /* When compiling FreeType as a DLL or DSO with hidden visibility */ + /* some systems/compilers need a special attribute in front OR after */ + /* the return type of function declarations. */ + /* */ + /* Two macros are used within the FreeType source code to define */ + /* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`. */ + /* */ + /* - `FT_EXPORT( return_type )` */ + /* */ + /* is used in a function declaration, as in */ + /* */ + /* ``` */ + /* FT_EXPORT( FT_Error ) */ + /* FT_Init_FreeType( FT_Library* alibrary ); */ + /* ``` */ + /* */ + /* - `FT_EXPORT_DEF( return_type )` */ + /* */ + /* is used in a function definition, as in */ + /* */ + /* ``` */ + /* FT_EXPORT_DEF( FT_Error ) */ + /* FT_Init_FreeType( FT_Library* alibrary ) */ + /* { */ + /* ... some code ... */ + /* return FT_Err_Ok; */ + /* } */ + /* ``` */ + /* */ + /* You can provide your own implementation of `FT_EXPORT` and */ + /* `FT_EXPORT_DEF` here if you want. */ + /* */ + /* To export a variable, use `FT_EXPORT_VAR`. */ + /* */ +#ifndef FT_EXPORT + +#ifdef FT2_BUILD_LIBRARY + +#if defined( _WIN32 ) && defined( DLL_EXPORT ) +#define FT_EXPORT( x ) __declspec( dllexport ) x +#elif defined( __GNUC__ ) && __GNUC__ >= 4 +#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x +#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550 +#define FT_EXPORT( x ) __global x +#elif defined( __cplusplus ) +#define FT_EXPORT( x ) extern "C" x +#else +#define FT_EXPORT( x ) extern x +#endif + +#else + +#if defined( _WIN32 ) && defined( DLL_IMPORT ) +#define FT_EXPORT( x ) __declspec( dllimport ) x +#elif defined( __cplusplus ) +#define FT_EXPORT( x ) extern "C" x +#else +#define FT_EXPORT( x ) extern x +#endif + +#endif + +#endif /* !FT_EXPORT */ + + +#ifndef FT_EXPORT_DEF + +#ifdef __cplusplus +#define FT_EXPORT_DEF( x ) extern "C" x +#else +#define FT_EXPORT_DEF( x ) extern x +#endif + +#endif /* !FT_EXPORT_DEF */ + + +#ifndef FT_EXPORT_VAR + +#ifdef __cplusplus +#define FT_EXPORT_VAR( x ) extern "C" x +#else +#define FT_EXPORT_VAR( x ) extern x +#endif + +#endif /* !FT_EXPORT_VAR */ + + + /* The following macros are needed to compile the library with a */ + /* C++ compiler and with 16bit compilers. */ + /* */ + + /* This is special. Within C++, you must specify `extern "C"` for */ + /* functions which are used via function pointers, and you also */ + /* must do that for structures which contain function pointers to */ + /* assure C linkage -- it's not possible to have (local) anonymous */ + /* functions which are accessed by (global) function pointers. */ + /* */ + /* */ + /* FT_CALLBACK_DEF is used to _define_ a callback function, */ + /* located in the same source code file as the structure that uses */ + /* it. */ + /* */ + /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */ + /* and define a callback function, respectively, in a similar way */ + /* as FT_BASE and FT_BASE_DEF work. */ + /* */ + /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ + /* contains pointers to callback functions. */ + /* */ + /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ + /* that contains pointers to callback functions. */ + /* */ + /* */ + /* Some 16bit compilers have to redefine these macros to insert */ + /* the infamous `_cdecl` or `__fastcall` declarations. */ + /* */ +#ifndef FT_CALLBACK_DEF +#ifdef __cplusplus +#define FT_CALLBACK_DEF( x ) extern "C" x +#else +#define FT_CALLBACK_DEF( x ) static x +#endif +#endif /* FT_CALLBACK_DEF */ + +#ifndef FT_BASE_CALLBACK +#ifdef __cplusplus +#define FT_BASE_CALLBACK( x ) extern "C" x +#define FT_BASE_CALLBACK_DEF( x ) extern "C" x +#else +#define FT_BASE_CALLBACK( x ) extern x +#define FT_BASE_CALLBACK_DEF( x ) x +#endif +#endif /* FT_BASE_CALLBACK */ + +#ifndef FT_CALLBACK_TABLE +#ifdef __cplusplus +#define FT_CALLBACK_TABLE extern "C" +#define FT_CALLBACK_TABLE_DEF extern "C" +#else +#define FT_CALLBACK_TABLE extern +#define FT_CALLBACK_TABLE_DEF /* nothing */ +#endif +#endif /* FT_CALLBACK_TABLE */ + + +FT_END_HEADER + + +#endif /* FTCONFIG_H_ */ + + +/* END */ diff --git a/win32/include/freetype/config/ftheader.h b/win32/include/freetype/freetype/config/ftheader.h similarity index 57% rename from win32/include/freetype/config/ftheader.h rename to win32/include/freetype/freetype/config/ftheader.h index 55f833db..696d6ba9 100644 --- a/win32/include/freetype/config/ftheader.h +++ b/win32/include/freetype/freetype/config/ftheader.h @@ -1,22 +1,22 @@ -/***************************************************************************/ -/* */ -/* ftheader.h */ -/* */ -/* Build macros of the FreeType 2 library. */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftheader.h + * + * Build macros of the FreeType 2 library. + * + * Copyright (C) 1996-2019 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 __FT_HEADER_H__ -#define __FT_HEADER_H__ +#ifndef FTHEADER_H_ +#define FTHEADER_H_ /*@***********************************************************************/ @@ -27,7 +27,7 @@ /* <Description> */ /* This macro is used in association with @FT_END_HEADER in header */ /* files to ensure that the declarations within are properly */ - /* encapsulated in an `extern "C" { .. }' block when included from a */ + /* encapsulated in an `extern "C" { .. }` block when included from a */ /* C++ compiler. */ /* */ #ifdef __cplusplus @@ -45,7 +45,7 @@ /* <Description> */ /* This macro is used in association with @FT_BEGIN_HEADER in header */ /* files to ensure that the declarations within are properly */ - /* encapsulated in an `extern "C" { .. }' block when included from a */ + /* encapsulated in an `extern "C" { .. }` block when included from a */ /* C++ compiler. */ /* */ #ifdef __cplusplus @@ -55,54 +55,54 @@ #endif - /*************************************************************************/ - /* */ - /* Aliases for the FreeType 2 public and configuration files. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * Aliases for the FreeType 2 public and configuration files. + * + */ - /*************************************************************************/ - /* */ - /* <Section> */ - /* header_file_macros */ - /* */ - /* <Title> */ - /* Header File Macros */ - /* */ - /* <Abstract> */ - /* Macro definitions used to #include specific header files. */ - /* */ - /* <Description> */ - /* The following macros are defined to the name of specific */ - /* FreeType~2 header files. They can be used directly in #include */ - /* statements as in: */ - /* */ - /* { */ - /* #include FT_FREETYPE_H */ - /* #include FT_MULTIPLE_MASTERS_H */ - /* #include FT_GLYPH_H */ - /* } */ - /* */ - /* There are several reasons why we are now using macros to name */ - /* public header files. The first one is that such macros are not */ - /* limited to the infamous 8.3~naming rule required by DOS (and */ - /* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */ - /* */ - /* The second reason is that it allows for more flexibility in the */ - /* way FreeType~2 is installed on a given system. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * header_file_macros + * + * @title: + * Header File Macros + * + * @abstract: + * Macro definitions used to `#include` specific header files. + * + * @description: + * The following macros are defined to the name of specific FreeType~2 + * header files. They can be used directly in `#include` statements as + * in: + * + * ``` + * #include FT_FREETYPE_H + * #include FT_MULTIPLE_MASTERS_H + * #include FT_GLYPH_H + * ``` + * + * There are several reasons why we are now using macros to name public + * header files. The first one is that such macros are not limited to + * the infamous 8.3~naming rule required by DOS (and + * `FT_MULTIPLE_MASTERS_H` is a lot more meaningful than `ftmm.h`). + * + * The second reason is that it allows for more flexibility in the way + * FreeType~2 is installed on a given system. + * + */ /* configuration files */ - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_CONFIG_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * FreeType~2 configuration data. * */ @@ -111,13 +111,13 @@ #endif - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_STANDARD_LIBRARY_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * FreeType~2 interface to the standard C library functions. * */ @@ -126,13 +126,13 @@ #endif - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_OPTIONS_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * FreeType~2 project-specific configuration options. * */ @@ -141,13 +141,13 @@ #endif - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_MODULES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list of FreeType~2 modules that are statically linked to new library * instances in @FT_Init_FreeType. * @@ -160,26 +160,26 @@ /* public headers */ - /************************************************************************* + /************************************************************************** * * @macro: * FT_FREETYPE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * base FreeType~2 API. * */ #define FT_FREETYPE_H <freetype/freetype.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_ERRORS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list of FreeType~2 error codes (and messages). * * It is included by @FT_FREETYPE_H. @@ -188,26 +188,26 @@ #define FT_ERRORS_H <freetype/fterrors.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_MODULE_ERRORS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list of FreeType~2 module error offsets (and messages). * */ #define FT_MODULE_ERRORS_H <freetype/ftmoderr.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SYSTEM_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 interface to low-level operations (i.e., memory management * and stream i/o). * @@ -217,13 +217,13 @@ #define FT_SYSTEM_H <freetype/ftsystem.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_IMAGE_H * * @description: - * A macro used in #include statements to name the file containing type + * A macro used in `#include` statements to name the file containing type * definitions related to glyph images (i.e., bitmaps, outlines, * scan-converter parameters). * @@ -233,13 +233,13 @@ #define FT_IMAGE_H <freetype/ftimage.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TYPES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * basic data types defined by FreeType~2. * * It is included by @FT_FREETYPE_H. @@ -248,13 +248,13 @@ #define FT_TYPES_H <freetype/fttypes.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_LIST_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list management API of FreeType~2. * * (Most applications will never need to include this file.) @@ -263,117 +263,151 @@ #define FT_LIST_H <freetype/ftlist.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_OUTLINE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * scalable outline management API of FreeType~2. * */ #define FT_OUTLINE_H <freetype/ftoutln.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SIZES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API which manages multiple @FT_Size objects per face. * */ #define FT_SIZES_H <freetype/ftsizes.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_MODULE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * module management API of FreeType~2. * */ #define FT_MODULE_H <freetype/ftmodapi.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_RENDER_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * renderer module management API of FreeType~2. * */ #define FT_RENDER_H <freetype/ftrender.h> - /************************************************************************* + /************************************************************************** + * + * @macro: + * FT_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the driver modules. + * + */ +#define FT_DRIVER_H <freetype/ftdriver.h> + + + /************************************************************************** * * @macro: * FT_AUTOHINTER_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * structures and macros related to the auto-hinting module. * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * */ -#define FT_AUTOHINTER_H <freetype/ftautoh.h> +#define FT_AUTOHINTER_H FT_DRIVER_H - /************************************************************************* + /************************************************************************** * * @macro: * FT_CFF_DRIVER_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * structures and macros related to the CFF driver module. * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * */ -#define FT_CFF_DRIVER_H <freetype/ftcffdrv.h> +#define FT_CFF_DRIVER_H FT_DRIVER_H - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_DRIVER_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * structures and macros related to the TrueType driver module. * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * */ -#define FT_TRUETYPE_DRIVER_H <freetype/ftttdrv.h> +#define FT_TRUETYPE_DRIVER_H FT_DRIVER_H - /************************************************************************* + /************************************************************************** + * + * @macro: + * FT_PCF_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the PCF driver module. + * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * + */ +#define FT_PCF_DRIVER_H FT_DRIVER_H + + + /************************************************************************** * * @macro: * FT_TYPE1_TABLES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * types and API specific to the Type~1 format. * */ #define FT_TYPE1_TABLES_H <freetype/t1tables.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_IDS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * enumeration values which identify name strings, languages, encodings, * etc. This file really contains a _large_ set of constant macro * definitions, taken from the TrueType and OpenType specifications. @@ -382,231 +416,172 @@ #define FT_TRUETYPE_IDS_H <freetype/ttnameid.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_TABLES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * types and API specific to the TrueType (as well as OpenType) format. * */ #define FT_TRUETYPE_TABLES_H <freetype/tttables.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_TAGS_H * * @description: - * A macro used in #include statements to name the file containing the - * definitions of TrueType four-byte `tags' which identify blocks in + * A macro used in `#include` statements to name the file containing the + * definitions of TrueType four-byte 'tags' which identify blocks in * SFNT-based font formats (i.e., TrueType and OpenType). * */ #define FT_TRUETYPE_TAGS_H <freetype/tttags.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BDF_H * * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which accesses BDF-specific strings from a - * face. + * A macro used in `#include` statements to name the file containing the + * definitions of an API which accesses BDF-specific strings from a face. * */ #define FT_BDF_H <freetype/ftbdf.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_CID_H * * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which access CID font information from a - * face. + * A macro used in `#include` statements to name the file containing the + * definitions of an API which access CID font information from a face. * */ #define FT_CID_H <freetype/ftcid.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GZIP_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports gzip-compressed files. * */ #define FT_GZIP_H <freetype/ftgzip.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_LZW_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports LZW-compressed files. * */ #define FT_LZW_H <freetype/ftlzw.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BZIP2_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports bzip2-compressed files. * */ #define FT_BZIP2_H <freetype/ftbzip2.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_WINFONTS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports Windows FNT files. * */ #define FT_WINFONTS_H <freetype/ftwinfnt.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GLYPH_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional glyph management component. * */ #define FT_GLYPH_H <freetype/ftglyph.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BITMAP_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional bitmap conversion component. * */ #define FT_BITMAP_H <freetype/ftbitmap.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BBOX_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional exact bounding box computation routines. * */ #define FT_BBOX_H <freetype/ftbbox.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_CACHE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional FreeType~2 cache sub-system. * */ #define FT_CACHE_H <freetype/ftcache.h> - /************************************************************************* - * - * @macro: - * FT_CACHE_IMAGE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `glyph image' API of the FreeType~2 cache sub-system. - * - * It is used to define a cache for @FT_Glyph elements. You can also - * use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to - * store small glyph bitmaps, as it will use less memory. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * glyph image-related cache declarations. - * - */ -#define FT_CACHE_IMAGE_H FT_CACHE_H - - - /************************************************************************* - * - * @macro: - * FT_CACHE_SMALL_BITMAPS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `small bitmaps' API of the FreeType~2 cache sub-system. - * - * It is used to define a cache for small glyph bitmaps in a relatively - * memory-efficient way. You can also use the API defined in - * @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images, - * including scalable outlines. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * small bitmaps-related cache declarations. - * - */ -#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H - - - /************************************************************************* - * - * @macro: - * FT_CACHE_CHARMAP_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `charmap' API of the FreeType~2 cache sub-system. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * charmap-based cache declarations. - * - */ -#define FT_CACHE_CHARMAP_H FT_CACHE_H - - - /************************************************************************* + /************************************************************************** * * @macro: * FT_MAC_H * * @description: - * A macro used in #include statements to name the file containing the - * Macintosh-specific FreeType~2 API. The latter is used to access - * fonts embedded in resource forks. + * A macro used in `#include` statements to name the file containing the + * Macintosh-specific FreeType~2 API. The latter is used to access fonts + * embedded in resource forks. * * This header file must be explicitly included by client applications * compiled on the Mac (note that the base API still works though). @@ -615,105 +590,105 @@ #define FT_MAC_H <freetype/ftmac.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_MULTIPLE_MASTERS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * optional multiple-masters management API of FreeType~2. * */ #define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SFNT_NAMES_H * * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType~2 API which accesses embedded `name' strings in + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which accesses embedded 'name' strings in * SFNT-based font formats (i.e., TrueType and OpenType). * */ #define FT_SFNT_NAMES_H <freetype/ftsnames.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_OPENTYPE_VALIDATE_H * * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType~2 API which validates OpenType tables (BASE, GDEF, - * GPOS, GSUB, JSTF). + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which validates OpenType tables ('BASE', + * 'GDEF', 'GPOS', 'GSUB', 'JSTF'). * */ #define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GX_VALIDATE_H * * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat, - * mort, morx, bsln, just, kern, opbd, trak, prop). + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which validates TrueTypeGX/AAT tables ('feat', + * 'mort', 'morx', 'bsln', 'just', 'kern', 'opbd', 'trak', 'prop'). * */ #define FT_GX_VALIDATE_H <freetype/ftgxval.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_PFR_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which accesses PFR-specific data. * */ #define FT_PFR_H <freetype/ftpfr.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_STROKER_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which provides functions to stroke outline paths. */ #define FT_STROKER_H <freetype/ftstroke.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SYNTHESIS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which performs artificial obliquing and emboldening. */ #define FT_SYNTHESIS_H <freetype/ftsynth.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_FONT_FORMATS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which provides functions specific to font formats. */ #define FT_FONT_FORMATS_H <freetype/ftfntfmt.h> @@ -722,105 +697,110 @@ #define FT_XFREE86_H FT_FONT_FORMATS_H - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRIGONOMETRY_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which performs trigonometric computations (e.g., * cosines and arc tangents). */ #define FT_TRIGONOMETRY_H <freetype/fttrigon.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_LCD_FILTER_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which performs color filtering for subpixel rendering. */ #define FT_LCD_FILTER_H <freetype/ftlcdfil.h> - /************************************************************************* - * - * @macro: - * FT_UNPATENTED_HINTING_H - * - * @description: - * A macro used in #include statements to name the file containing the - * FreeType~2 API which performs color filtering for subpixel rendering. - */ -#define FT_UNPATENTED_HINTING_H <freetype/ttunpat.h> - - - /************************************************************************* + /************************************************************************** * * @macro: * FT_INCREMENTAL_H * * @description: - * A macro used in #include statements to name the file containing the - * FreeType~2 API which performs color filtering for subpixel rendering. + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which performs incremental glyph loading. */ #define FT_INCREMENTAL_H <freetype/ftincrem.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GASP_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which returns entries from the TrueType GASP table. */ #define FT_GASP_H <freetype/ftgasp.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_ADVANCES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which returns individual and ranged glyph advances. */ #define FT_ADVANCES_H <freetype/ftadvanc.h> + /************************************************************************** + * + * @macro: + * FT_COLOR_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which handles the OpenType 'CPAL' table. + */ +#define FT_COLOR_H <freetype/ftcolor.h> + + /* */ + /* These header files don't need to be included by the user. */ #define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h> +#define FT_PARAMETER_TAGS_H <freetype/ftparams.h> + /* Deprecated macros. */ +#define FT_UNPATENTED_HINTING_H <freetype/ftparams.h> +#define FT_TRUETYPE_UNPATENTED_H <freetype/ftparams.h> + + /* `FT_CACHE_H` is the only header file needed for the cache subsystem. */ +#define FT_CACHE_IMAGE_H FT_CACHE_H +#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H +#define FT_CACHE_CHARMAP_H FT_CACHE_H /* The internals of the cache sub-system are no longer exposed. We */ - /* default to FT_CACHE_H at the moment just in case, but we know of */ - /* no rogue client that uses them. */ + /* default to `FT_CACHE_H` at the moment just in case, but we know */ + /* of no rogue client that uses them. */ /* */ -#define FT_CACHE_MANAGER_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_MRU_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_MANAGER_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_CACHE_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_GLYPH_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_IMAGE_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_SBITS_H <freetype/ftcache.h> - - -#define FT_INCREMENTAL_H <freetype/ftincrem.h> - -#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h> +#define FT_CACHE_MANAGER_H FT_CACHE_H +#define FT_CACHE_INTERNAL_MRU_H FT_CACHE_H +#define FT_CACHE_INTERNAL_MANAGER_H FT_CACHE_H +#define FT_CACHE_INTERNAL_CACHE_H FT_CACHE_H +#define FT_CACHE_INTERNAL_GLYPH_H FT_CACHE_H +#define FT_CACHE_INTERNAL_IMAGE_H FT_CACHE_H +#define FT_CACHE_INTERNAL_SBITS_H FT_CACHE_H /* - * Include internal headers definitions from <internal/...> - * only when building the library. + * Include internal headers definitions from `<internal/...>` only when + * building the library. */ #ifdef FT2_BUILD_LIBRARY #define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h> @@ -828,7 +808,7 @@ #endif /* FT2_BUILD_LIBRARY */ -#endif /* __FT2_BUILD_H__ */ +#endif /* FTHEADER_H_ */ /* END */ diff --git a/win32/include/freetype/config/ftmodule.h b/win32/include/freetype/freetype/config/ftmodule.h similarity index 73% rename from win32/include/freetype/config/ftmodule.h rename to win32/include/freetype/freetype/config/ftmodule.h index b7299779..7c603e53 100644 --- a/win32/include/freetype/config/ftmodule.h +++ b/win32/include/freetype/freetype/config/ftmodule.h @@ -1,4 +1,16 @@ -/* This is a generated file. */ +/* + * 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 ) @@ -7,14 +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, sfnt_module_class ) -FT_USE_MODULE( FT_Module_Class, autofit_module_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_Module_Class, psaux_module_class ) -FT_USE_MODULE( FT_Module_Class, psnames_module_class ) +FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class ) + /* EOF */ diff --git a/win32/include/freetype/freetype/config/ftoption.h b/win32/include/freetype/freetype/config/ftoption.h new file mode 100644 index 00000000..12f47a82 --- /dev/null +++ b/win32/include/freetype/freetype/config/ftoption.h @@ -0,0 +1,982 @@ +/**************************************************************************** + * + * ftoption.h + * + * User-selectable configuration macros (specification only). + * + * Copyright (C) 1996-2019 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 FTOPTION_H_ +#define FTOPTION_H_ + + +#include <ft2build.h> + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * USER-SELECTABLE CONFIGURATION MACROS + * + * This file contains the default configuration macro definitions for a + * standard build of the FreeType library. There are three ways to use + * this file to build project-specific versions of the library: + * + * - You can modify this file by hand, but this is not recommended in + * cases where you would like to build several versions of the library + * from a single source directory. + * + * - You can put a copy of this file in your build directory, more + * precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is + * the name of a directory that is included _before_ the FreeType include + * path during compilation. + * + * The default FreeType Makefiles and Jamfiles use the build directory + * `builds/<system>` by default, but you can easily change that for your + * own projects. + * + * - Copy the file <ft2build.h> to `$BUILD/ft2build.h` and modify it + * slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate + * this file during the build. For example, + * + * ``` + * #define FT_CONFIG_OPTIONS_H <myftoptions.h> + * #include <freetype/config/ftheader.h> + * ``` + * + * will use `$BUILD/myftoptions.h` instead of this file for macro + * definitions. + * + * Note also that you can similarly pre-define the macro + * `FT_CONFIG_MODULES_H` used to locate the file listing of the modules + * that are statically linked to the library at compile time. By + * default, this file is `<freetype/config/ftmodule.h>`. + * + * We highly recommend using the third method whenever possible. + * + */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /*#************************************************************************ + * + * If you enable this configuration option, FreeType recognizes an + * environment variable called `FREETYPE_PROPERTIES`, which can be used to + * control the various font drivers and modules. The controllable + * properties are listed in the section @properties. + * + * You have to undefine this configuration option on platforms that lack + * the concept of environment variables (and thus don't have the `getenv` + * function), for example Windows CE. + * + * `FREETYPE_PROPERTIES` has the following syntax form (broken here into + * multiple lines for better readability). + * + * ``` + * <optional whitespace> + * <module-name1> ':' + * <property-name1> '=' <property-value1> + * <whitespace> + * <module-name2> ':' + * <property-name2> '=' <property-value2> + * ... + * ``` + * + * Example: + * + * ``` + * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ + * cff:no-stem-darkening=1 \ + * autofitter:warping=1 + * ``` + * + */ +#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + + + /************************************************************************** + * + * Uncomment the line below if you want to activate LCD rendering + * technology similar to ClearType in this build of the library. This + * technology triples the resolution in the direction color subpixels. To + * mitigate color fringes inherent to this technology, you also need to + * explicitly set up LCD filtering. + * + * Note that this feature is covered by several Microsoft patents and + * should not be activated in any default build of the library. When this + * macro is not defined, FreeType offers alternative LCD rendering + * technology that produces excellent output without LCD filtering. + */ +/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + + /************************************************************************** + * + * Many compilers provide a non-ANSI 64-bit data type that can be used by + * FreeType to speed up some computations. However, this will create some + * problems when compiling the library in strict ANSI mode. + * + * For this reason, the use of 64-bit integers is normally disabled when + * the `__STDC__` macro is defined. You can however disable this by + * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here. + * + * For most compilers, this will only create compilation warnings when + * building the library. + * + * ObNote: The compiler-specific 64-bit integers are detected in the + * file `ftconfig.h` either statically or through the `configure` + * script on supported platforms. + */ +#undef FT_CONFIG_OPTION_FORCE_INT64 + + + /************************************************************************** + * + * If this macro is defined, do not try to use an assembler version of + * performance-critical functions (e.g., @FT_MulFix). You should only do + * that to verify that the assembler function works properly, or to execute + * benchmark tests of the various implementations. + */ +/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ + + + /************************************************************************** + * + * If this macro is defined, try to use an inlined assembler version of the + * @FT_MulFix function, which is a 'hotspot' when loading and hinting + * glyphs, and which should be executed as fast as possible. + * + * Note that if your compiler or CPU is not supported, this will default to + * the standard and portable implementation found in `ftcalc.c`. + */ +#define FT_CONFIG_OPTION_INLINE_MULFIX + + + /************************************************************************** + * + * LZW-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `compress` program. This is mostly used to parse many of the PCF + * files that come with various X11 distributions. The implementation + * uses NetBSD's `zopen` to partially uncompress the file on the fly (see + * `src/lzw/ftgzip.c`). + * + * Define this macro if you want to enable this 'feature'. + */ +#define FT_CONFIG_OPTION_USE_LZW + + + /************************************************************************** + * + * Gzip-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `gzip` program. This is mostly used to parse many of the PCF files + * that come with XFree86. The implementation uses 'zlib' to partially + * uncompress the file on the fly (see `src/gzip/ftgzip.c`). + * + * Define this macro if you want to enable this 'feature'. See also the + * macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below. + */ +#define FT_CONFIG_OPTION_USE_ZLIB + + + /************************************************************************** + * + * ZLib library selection + * + * This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined. + * It allows FreeType's 'ftgzip' component to link to the system's + * installation of the ZLib library. This is useful on systems like + * Unix or VMS where it generally is already available. + * + * If you let it undefined, the component will use its own copy of the + * zlib sources instead. These have been modified to be included + * directly within the component and **not** export external function + * names. This allows you to link any program with FreeType _and_ ZLib + * without linking conflicts. + * + * Do not `#undef` this macro here since the build system might define + * it for certain configurations only. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ + + + /************************************************************************** + * + * Bzip2-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `bzip2` program. This is mostly used to parse many of the PCF files + * that come with XFree86. The implementation uses `libbz2` to partially + * uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary + * to gzip, bzip2 currently is not included and need to use the system + * available bzip2 implementation. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_BZIP2 */ + + + /************************************************************************** + * + * Define to disable the use of file stream functions and types, `FILE`, + * `fopen`, etc. Enables the use of smaller system libraries on embedded + * systems that have multiple system libraries, some with or without file + * stream support, in the cases where file stream support is not necessary + * such as memory loading of font files. + */ +/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ + + + /************************************************************************** + * + * PNG bitmap support. + * + * FreeType now handles loading color bitmap glyphs in the PNG format. + * This requires help from the external libpng library. Uncompressed + * color bitmaps do not need any external libraries and will be supported + * regardless of this configuration. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_PNG */ + + + /************************************************************************** + * + * HarfBuzz support. + * + * FreeType uses the HarfBuzz library to improve auto-hinting of OpenType + * fonts. If available, many glyphs not directly addressable by a font's + * character map will be hinted also. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ + + + /************************************************************************** + * + * Glyph Postscript Names handling + * + * By default, FreeType 2 is compiled with the 'psnames' module. This + * module is in charge of converting a glyph name string into a Unicode + * value, or return a Macintosh standard glyph name for the use with the + * TrueType 'post' table. + * + * Undefine this macro if you do not want 'psnames' compiled in your + * build of FreeType. This has the following effects: + * + * - The TrueType driver will provide its own set of glyph names, if you + * build it to support postscript names in the TrueType 'post' table, + * but will not synthesize a missing Unicode charmap. + * + * - The Type~1 driver will not be able to synthesize a Unicode charmap + * out of the glyphs found in the fonts. + * + * You would normally undefine this configuration macro when building a + * version of FreeType that doesn't contain a Type~1 or CFF driver. + */ +#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + + /************************************************************************** + * + * Postscript Names to Unicode Values support + * + * By default, FreeType~2 is built with the 'psnames' module compiled in. + * Among other things, the module is used to convert a glyph name into a + * Unicode value. This is especially useful in order to synthesize on + * the fly a Unicode charmap from the CFF/Type~1 driver through a big + * table named the 'Adobe Glyph List' (AGL). + * + * Undefine this macro if you do not want the Adobe Glyph List compiled + * in your 'psnames' module. The Type~1 driver will not be able to + * synthesize a Unicode charmap out of the glyphs found in the fonts. + */ +#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST + + + /************************************************************************** + * + * Support for Mac fonts + * + * Define this macro if you want support for outline fonts in Mac format + * (mac dfont, mac resource, macbinary containing a mac resource) on + * non-Mac platforms. + * + * Note that the 'FOND' resource isn't checked. + */ +#define FT_CONFIG_OPTION_MAC_FONTS + + + /************************************************************************** + * + * Guessing methods to access embedded resource forks + * + * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux). + * + * Resource forks which include fonts data are stored sometimes in + * locations which users or developers don't expected. In some cases, + * resource forks start with some offset from the head of a file. In + * other cases, the actual resource fork is stored in file different from + * what the user specifies. If this option is activated, FreeType tries + * to guess whether such offsets or different file names must be used. + * + * Note that normal, direct access of resource forks is controlled via + * the `FT_CONFIG_OPTION_MAC_FONTS` option. + */ +#ifdef FT_CONFIG_OPTION_MAC_FONTS +#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK +#endif + + + /************************************************************************** + * + * Allow the use of `FT_Incremental_Interface` to load typefaces that + * contain no glyph data, but supply it via a callback function. This is + * required by clients supporting document formats which supply font data + * incrementally as the document is parsed, such as the Ghostscript + * interpreter for the PostScript language. + */ +#define FT_CONFIG_OPTION_INCREMENTAL + + + /************************************************************************** + * + * The size in bytes of the render pool used by the scan-line converter to + * do all of its work. + */ +#define FT_RENDER_POOL_SIZE 16384L + + + /************************************************************************** + * + * FT_MAX_MODULES + * + * The maximum number of modules that can be registered in a single + * FreeType library object. 32~is the default. + */ +#define FT_MAX_MODULES 32 + + + /************************************************************************** + * + * Debug level + * + * FreeType can be compiled in debug or trace mode. In debug mode, + * errors are reported through the 'ftdebug' component. In trace mode, + * additional messages are sent to the standard output during execution. + * + * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode. + * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode. + * + * Don't define any of these macros to compile in 'release' mode! + * + * Do not `#undef` these macros here since the build system might define + * them for certain configurations only. + */ +/* #define FT_DEBUG_LEVEL_ERROR */ +/* #define FT_DEBUG_LEVEL_TRACE */ + + + /************************************************************************** + * + * Autofitter debugging + * + * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to + * control the autofitter behaviour for debugging purposes with global + * boolean variables (consequently, you should **never** enable this + * while compiling in 'release' mode): + * + * ``` + * _af_debug_disable_horz_hints + * _af_debug_disable_vert_hints + * _af_debug_disable_blue_hints + * ``` + * + * Additionally, the following functions provide dumps of various + * internal autofit structures to stdout (using `printf`): + * + * ``` + * af_glyph_hints_dump_points + * af_glyph_hints_dump_segments + * af_glyph_hints_dump_edges + * af_glyph_hints_get_num_segments + * af_glyph_hints_get_segment_offset + * ``` + * + * As an argument, they use another global variable: + * + * ``` + * _af_debug_hints + * ``` + * + * Please have a look at the `ftgrid` demo program to see how those + * variables and macros should be used. + * + * Do not `#undef` these macros here since the build system might define + * them for certain configurations only. + */ +/* #define FT_DEBUG_AUTOFIT */ + + + /************************************************************************** + * + * Memory Debugging + * + * FreeType now comes with an integrated memory debugger that is capable + * of detecting simple errors like memory leaks or double deletes. To + * compile it within your build of the library, you should define + * `FT_DEBUG_MEMORY` here. + * + * Note that the memory debugger is only activated at runtime when when + * the _environment_ variable `FT2_DEBUG_MEMORY` is defined also! + * + * Do not `#undef` this macro here since the build system might define it + * for certain configurations only. + */ +/* #define FT_DEBUG_MEMORY */ + + + /************************************************************************** + * + * Module errors + * + * If this macro is set (which is _not_ the default), the higher byte of + * an error code gives the module in which the error has occurred, while + * the lower byte is the real error code. + * + * Setting this macro makes sense for debugging purposes only, since it + * would break source compatibility of certain programs that use + * FreeType~2. + * + * More details can be found in the files `ftmoderr.h` and `fterrors.h`. + */ +#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS + + + /************************************************************************** + * + * Error Strings + * + * If this macro is set, `FT_Error_String` will return meaningful + * descriptions. This is not enabled by default to reduce the overall + * size of FreeType. + * + * More details can be found in the file `fterrors.h`. + */ +/* #define FT_CONFIG_OPTION_ERROR_STRINGS */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** S F N T D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support + * embedded bitmaps in all formats using the 'sfnt' module (namely + * TrueType~& OpenType). + */ +#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support coloured + * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' + * module (namely TrueType~& OpenType). + */ +#define TT_CONFIG_OPTION_COLOR_LAYERS + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to + * load and enumerate the glyph Postscript names in a TrueType or OpenType + * file. + * + * Note that when you do not compile the 'psnames' module by undefining the + * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will + * contain additional code used to read the PS Names table from a font. + * + * (By default, the module uses 'psnames' to extract glyph names.) + */ +#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access + * the internal name table in a SFNT-based format like TrueType or + * OpenType. The name table contains various strings used to describe the + * font, like family name, copyright, version, etc. It does not contain + * any glyph name though. + * + * Accessing SFNT names is done through the functions declared in + * `ftsnames.h`. + */ +#define TT_CONFIG_OPTION_SFNT_NAMES + + + /************************************************************************** + * + * TrueType CMap support + * + * Here you can fine-tune which TrueType CMap table format shall be + * supported. + */ +#define TT_CONFIG_CMAP_FORMAT_0 +#define TT_CONFIG_CMAP_FORMAT_2 +#define TT_CONFIG_CMAP_FORMAT_4 +#define TT_CONFIG_CMAP_FORMAT_6 +#define TT_CONFIG_CMAP_FORMAT_8 +#define TT_CONFIG_CMAP_FORMAT_10 +#define TT_CONFIG_CMAP_FORMAT_12 +#define TT_CONFIG_CMAP_FORMAT_13 +#define TT_CONFIG_CMAP_FORMAT_14 + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a + * bytecode interpreter in the TrueType driver. + * + * By undefining this, you will only compile the code necessary to load + * TrueType glyphs without hinting. + * + * Do not `#undef` this macro here, since the build system might define it + * for certain configurations only. + */ +#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile + * subpixel hinting support into the TrueType driver. This modifies the + * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is + * requested. + * + * In particular, it modifies the bytecode interpreter to interpret (or + * not) instructions in a certain way so that all TrueType fonts look like + * they do in a Windows ClearType (DirectWrite) environment. See [1] for a + * technical overview on what this means. See `ttinterp.h` for more + * details on the LEAN option. + * + * There are three possible values. + * + * Value 1: + * This value is associated with the 'Infinality' moniker, contributed by + * an individual nicknamed Infinality with the goal of making TrueType + * fonts render better than on Windows. A high amount of configurability + * and flexibility, down to rules for single glyphs in fonts, but also + * very slow. Its experimental and slow nature and the original + * developer losing interest meant that this option was never enabled in + * default builds. + * + * The corresponding interpreter version is v38. + * + * Value 2: + * The new default mode for the TrueType driver. The Infinality code + * base was stripped to the bare minimum and all configurability removed + * in the name of speed and simplicity. The configurability was mainly + * aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'. + * Legacy fonts are fonts that modify vertical stems to achieve clean + * black-and-white bitmaps. The new mode focuses on applying a minimal + * set of rules to all fonts indiscriminately so that modern and web + * fonts render well while legacy fonts render okay. + * + * The corresponding interpreter version is v40. + * + * Value 3: + * Compile both, making both v38 and v40 available (the latter is the + * default). + * + * By undefining these, you get rendering behavior like on Windows without + * ClearType, i.e., Windows XP without ClearType enabled and Win9x + * (interpreter version v35). Or not, depending on how much hinting blood + * and testing tears the font designer put into a given font. If you + * define one or both subpixel hinting options, you can switch between + * between v35 and the ones you define (using `FT_Property_Set`). + * + * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be + * defined. + * + * [1] + * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx + */ +/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */ +#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 +/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */ + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the + * TrueType glyph loader to use Apple's definition of how to handle + * component offsets in composite glyphs. + * + * Apple and MS disagree on the default behavior of component offsets in + * composites. Apple says that they should be scaled by the scaling + * factors in the transformation matrix (roughly, it's more complex) while + * MS says they should not. OpenType defines two bits in the composite + * flags array which can be used to disambiguate, but old fonts will not + * have them. + * + * https://www.microsoft.com/typography/otspec/glyf.htm + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html + */ +#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support + * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and + * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType + * also. This has many similarities to Type~1 Multiple Masters support. + */ +#define TT_CONFIG_OPTION_GX_VAR_SUPPORT + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an + * embedded 'BDF~' table within SFNT-based bitmap formats. + */ +#define TT_CONFIG_OPTION_BDF + + + /************************************************************************** + * + * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum + * number of bytecode instructions executed for a single run of the + * bytecode interpreter, needed to prevent infinite loops. You don't want + * to change this except for very special situations (e.g., making a + * library fuzzer spend less time to handle broken fonts). + * + * It is not expected that this value is ever modified by a configuring + * script; instead, it gets surrounded with `#ifndef ... #endif` so that + * the value can be set as a preprocessor option on the compiler's command + * line. + */ +#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES +#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L +#endif + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays + * in the Type~1 stream (see `t1load.c`). A minimum of~4 is required. + */ +#define T1_MAX_DICT_DEPTH 5 + + + /************************************************************************** + * + * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine + * calls during glyph loading. + */ +#define T1_MAX_SUBRS_CALLS 16 + + + /************************************************************************** + * + * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A + * minimum of~16 is required. + * + * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character + * set) needs 256. + */ +#define T1_MAX_CHARSTRINGS_OPERANDS 256 + + + /************************************************************************** + * + * Define this configuration macro if you want to prevent the compilation + * of the 't1afm' module, which is in charge of reading Type~1 AFM files + * into an existing face. Note that if set, the Type~1 driver will be + * unable to produce kerning distances. + */ +#undef T1_CONFIG_OPTION_NO_AFM + + + /************************************************************************** + * + * Define this configuration macro if you want to prevent the compilation + * of the Multiple Masters font support in the Type~1 driver. + */ +#undef T1_CONFIG_OPTION_NO_MM_SUPPORT + + + /************************************************************************** + * + * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1 + * engine gets compiled into FreeType. If defined, it is possible to + * switch between the two engines using the `hinting-engine` property of + * the 'type1' driver module. + */ +/* #define T1_CONFIG_OPTION_OLD_ENGINE */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** C F F D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is + * possible to set up the default values of the four control points that + * define the stem darkening behaviour of the (new) CFF engine. For more + * details please read the documentation of the `darkening-parameters` + * property (file `ftdriver.h`), which allows the control at run-time. + * + * Do **not** undefine these macros! + */ +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 + + + /************************************************************************** + * + * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine + * gets compiled into FreeType. If defined, it is possible to switch + * between the two engines using the `hinting-engine` property of the 'cff' + * driver module. + */ +/* #define CFF_CONFIG_OPTION_OLD_ENGINE */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** P C F D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * There are many PCF fonts just called 'Fixed' which look completely + * different, and which have nothing to do with each other. When selecting + * 'Fixed' in KDE or Gnome one gets results that appear rather random, the + * style changes often if one changes the size and one cannot select some + * fonts at all. This option makes the 'pcf' module prepend the foundry + * name (plus a space) to the family name. + * + * We also check whether we have 'wide' characters; all put together, we + * get family names like 'Sony Fixed' or 'Misc Fixed Wide'. + * + * If this option is activated, it can be controlled with the + * `no-long-family-names` property of the 'pcf' driver module. + */ +/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script + * support. + */ +#define AF_CONFIG_OPTION_CJK + + + /************************************************************************** + * + * Compile 'autofit' module with fallback Indic script support, covering + * some scripts that the 'latin' submodule of the 'autofit' module doesn't + * (yet) handle. + */ +#define AF_CONFIG_OPTION_INDIC + + + /************************************************************************** + * + * 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. + * + * It is strongly recommended to avoid this option, which exists only to + * help some legacy applications retain its appearance and behaviour with + * respect to auto-hinted TrueType fonts. + * + * The very reason this option exists at all are GNU/Linux distributions + * like Fedora that did not un-patch the following change (which was + * present in FreeType between versions 2.4.6 and 2.7.1, inclusive). + * + * ``` + * 2011-07-16 Steven Chu <steven.f.chu@gmail.com> + * + * [truetype] Fix metrics on size request for scalable fonts. + * ``` + * + * This problematic commit is now reverted (more or less). + */ +/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */ + + /* */ + + + /* + * This macro is obsolete. Support has been removed in FreeType version + * 2.5. + */ +/* #define FT_CONFIG_OPTION_OLD_INTERNALS */ + + + /* + * The next three macros are defined if native TrueType hinting is + * requested by the definitions above. Don't change this. + */ +#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER +#define TT_USE_BYTECODE_INTERPRETER + +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING +#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1 +#define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY +#endif + +#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2 +#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL +#endif +#endif +#endif + + + /* + * Check CFF darkening parameters. The checks are the same as in function + * `cff_property_set` in file `cffdrivr.c`. + */ +#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500 +#error "Invalid CFF darkening parameters!" +#endif + +FT_END_HEADER + + +#endif /* FTOPTION_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/config/ftstdlib.h b/win32/include/freetype/freetype/config/ftstdlib.h new file mode 100644 index 00000000..438b6145 --- /dev/null +++ b/win32/include/freetype/freetype/config/ftstdlib.h @@ -0,0 +1,175 @@ +/**************************************************************************** + * + * ftstdlib.h + * + * ANSI-specific library and header configuration file (specification + * only). + * + * Copyright (C) 2002-2019 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. + * + */ + + + /************************************************************************** + * + * This file is used to group all `#includes` to the ANSI~C library that + * FreeType normally requires. It also defines macros to rename the + * standard functions within the FreeType source code. + * + * Load a file which defines `FTSTDLIB_H_` before this one to override it. + * + */ + + +#ifndef FTSTDLIB_H_ +#define FTSTDLIB_H_ + + +#include <stddef.h> + +#define ft_ptrdiff_t ptrdiff_t + + + /************************************************************************** + * + * integer limits + * + * `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. + * + * 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 + * `int` is 36~bits), we do not make any guarantee about the correct + * behaviour of FreeType~2 with all fonts. + * + * In these cases, `ftconfig.h` will refuse to compile anyway with a + * message like 'couldn't find 32-bit type' or something similar. + * + */ + + +#include <limits.h> + +#define FT_CHAR_BIT CHAR_BIT +#define FT_USHORT_MAX USHRT_MAX +#define FT_INT_MAX INT_MAX +#define FT_INT_MIN INT_MIN +#define FT_UINT_MAX UINT_MAX +#define FT_LONG_MIN LONG_MIN +#define FT_LONG_MAX LONG_MAX +#define FT_ULONG_MAX ULONG_MAX + + + /************************************************************************** + * + * character and string processing + * + */ + + +#include <string.h> + +#define ft_memchr memchr +#define ft_memcmp memcmp +#define ft_memcpy memcpy +#define ft_memmove memmove +#define ft_memset memset +#define ft_strcat strcat +#define ft_strcmp strcmp +#define ft_strcpy strcpy +#define ft_strlen strlen +#define ft_strncmp strncmp +#define ft_strncpy strncpy +#define ft_strrchr strrchr +#define ft_strstr strstr + + + /************************************************************************** + * + * file handling + * + */ + + +#include <stdio.h> + +#define FT_FILE FILE +#define ft_fclose fclose +#define ft_fopen fopen +#define ft_fread fread +#define ft_fseek fseek +#define ft_ftell ftell +#define ft_sprintf sprintf + + + /************************************************************************** + * + * sorting + * + */ + + +#include <stdlib.h> + +#define ft_qsort qsort + + + /************************************************************************** + * + * memory allocation + * + */ + + +#define ft_scalloc calloc +#define ft_sfree free +#define ft_smalloc malloc +#define ft_srealloc realloc + + + /************************************************************************** + * + * miscellaneous + * + */ + + +#define ft_strtol strtol +#define ft_getenv getenv + + + /************************************************************************** + * + * execution control + * + */ + + +#include <setjmp.h> + +#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */ + /* `jmp_buf` is defined as a macro */ + /* on certain platforms */ + +#define ft_longjmp longjmp +#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */ + + + /* The following is only used for debugging purposes, i.e., if */ + /* `FT_DEBUG_LEVEL_ERROR` or `FT_DEBUG_LEVEL_TRACE` are defined. */ + +#include <stdarg.h> + + +#endif /* FTSTDLIB_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/freetype.h b/win32/include/freetype/freetype/freetype.h new file mode 100644 index 00000000..4f2eaca6 --- /dev/null +++ b/win32/include/freetype/freetype/freetype.h @@ -0,0 +1,4880 @@ +/**************************************************************************** + * + * freetype.h + * + * FreeType high-level API and common types (specification only). + * + * Copyright (C) 1996-2019 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 FREETYPE_H_ +#define FREETYPE_H_ + + +#ifndef FT_FREETYPE_H +#error "`ft2build.h' hasn't been included yet!" +#error "Please always use macros to include FreeType header files." +#error "Example:" +#error " #include <ft2build.h>" +#error " #include FT_FREETYPE_H" +#endif + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include FT_TYPES_H +#include FT_ERRORS_H + + +FT_BEGIN_HEADER + + + + /************************************************************************** + * + * @section: + * header_inclusion + * + * @title: + * FreeType's header inclusion scheme + * + * @abstract: + * How client applications should include FreeType header files. + * + * @description: + * To be as flexible as possible (and for historical reasons), FreeType + * uses a very special inclusion scheme to load header files, for example + * + * ``` + * #include <ft2build.h> + * + * #include FT_FREETYPE_H + * #include FT_OUTLINE_H + * ``` + * + * A compiler and its preprocessor only needs an include path to find the + * file `ft2build.h`; the exact locations and names of the other FreeType + * header files are hidden by @header_file_macros, loaded by + * `ft2build.h`. The API documentation always gives the header macro + * name needed for a particular function. + * + */ + + + /************************************************************************** + * + * @section: + * user_allocation + * + * @title: + * User allocation + * + * @abstract: + * How client applications should allocate FreeType data structures. + * + * @description: + * FreeType assumes that structures allocated by the user and passed as + * arguments are zeroed out except for the actual data. In other words, + * it is recommended to use `calloc` (or variants of it) instead of + * `malloc` for allocation. + * + */ + + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* B A S I C T Y P E S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @section: + * base_interface + * + * @title: + * Base Interface + * + * @abstract: + * The FreeType~2 base font interface. + * + * @description: + * This section describes the most important public high-level API + * functions of FreeType~2. + * + * @order: + * FT_Library + * FT_Face + * FT_Size + * FT_GlyphSlot + * FT_CharMap + * FT_Encoding + * FT_ENC_TAG + * + * FT_FaceRec + * + * FT_FACE_FLAG_SCALABLE + * FT_FACE_FLAG_FIXED_SIZES + * FT_FACE_FLAG_FIXED_WIDTH + * FT_FACE_FLAG_HORIZONTAL + * FT_FACE_FLAG_VERTICAL + * FT_FACE_FLAG_COLOR + * FT_FACE_FLAG_SFNT + * FT_FACE_FLAG_CID_KEYED + * FT_FACE_FLAG_TRICKY + * FT_FACE_FLAG_KERNING + * FT_FACE_FLAG_MULTIPLE_MASTERS + * FT_FACE_FLAG_VARIATION + * FT_FACE_FLAG_GLYPH_NAMES + * FT_FACE_FLAG_EXTERNAL_STREAM + * FT_FACE_FLAG_HINTER + * + * FT_HAS_HORIZONTAL + * FT_HAS_VERTICAL + * FT_HAS_KERNING + * FT_HAS_FIXED_SIZES + * FT_HAS_GLYPH_NAMES + * FT_HAS_COLOR + * FT_HAS_MULTIPLE_MASTERS + * + * FT_IS_SFNT + * FT_IS_SCALABLE + * FT_IS_FIXED_WIDTH + * FT_IS_CID_KEYED + * FT_IS_TRICKY + * FT_IS_NAMED_INSTANCE + * FT_IS_VARIATION + * + * FT_STYLE_FLAG_BOLD + * FT_STYLE_FLAG_ITALIC + * + * FT_SizeRec + * FT_Size_Metrics + * + * FT_GlyphSlotRec + * FT_Glyph_Metrics + * FT_SubGlyph + * + * FT_Bitmap_Size + * + * FT_Init_FreeType + * FT_Done_FreeType + * + * FT_New_Face + * FT_Done_Face + * FT_Reference_Face + * FT_New_Memory_Face + * FT_Face_Properties + * FT_Open_Face + * FT_Open_Args + * FT_Parameter + * FT_Attach_File + * FT_Attach_Stream + * + * FT_Set_Char_Size + * FT_Set_Pixel_Sizes + * FT_Request_Size + * FT_Select_Size + * FT_Size_Request_Type + * FT_Size_RequestRec + * FT_Size_Request + * FT_Set_Transform + * FT_Load_Glyph + * FT_Get_Char_Index + * FT_Get_First_Char + * FT_Get_Next_Char + * FT_Get_Name_Index + * FT_Load_Char + * + * FT_OPEN_MEMORY + * FT_OPEN_STREAM + * FT_OPEN_PATHNAME + * FT_OPEN_DRIVER + * FT_OPEN_PARAMS + * + * FT_LOAD_DEFAULT + * FT_LOAD_RENDER + * FT_LOAD_MONOCHROME + * FT_LOAD_LINEAR_DESIGN + * FT_LOAD_NO_SCALE + * FT_LOAD_NO_HINTING + * FT_LOAD_NO_BITMAP + * FT_LOAD_NO_AUTOHINT + * FT_LOAD_COLOR + * + * FT_LOAD_VERTICAL_LAYOUT + * FT_LOAD_IGNORE_TRANSFORM + * FT_LOAD_FORCE_AUTOHINT + * FT_LOAD_NO_RECURSE + * FT_LOAD_PEDANTIC + * + * FT_LOAD_TARGET_NORMAL + * FT_LOAD_TARGET_LIGHT + * FT_LOAD_TARGET_MONO + * FT_LOAD_TARGET_LCD + * FT_LOAD_TARGET_LCD_V + * + * FT_LOAD_TARGET_MODE + * + * FT_Render_Glyph + * FT_Render_Mode + * FT_Get_Kerning + * FT_Kerning_Mode + * FT_Get_Track_Kerning + * FT_Get_Glyph_Name + * FT_Get_Postscript_Name + * + * FT_CharMapRec + * FT_Select_Charmap + * FT_Set_Charmap + * FT_Get_Charmap_Index + * + * FT_Get_FSType_Flags + * FT_Get_SubGlyph_Info + * + * FT_Face_Internal + * FT_Size_Internal + * FT_Slot_Internal + * + * FT_FACE_FLAG_XXX + * FT_STYLE_FLAG_XXX + * FT_OPEN_XXX + * FT_LOAD_XXX + * FT_LOAD_TARGET_XXX + * FT_SUBGLYPH_FLAG_XXX + * FT_FSTYPE_XXX + * + * FT_HAS_FAST_GLYPHS + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Glyph_Metrics + * + * @description: + * A structure to model the metrics of a single glyph. The values are + * expressed in 26.6 fractional pixel format; if the flag + * @FT_LOAD_NO_SCALE has been used while loading the glyph, values are + * expressed in font units instead. + * + * @fields: + * width :: + * The glyph's width. + * + * height :: + * The glyph's height. + * + * horiBearingX :: + * Left side bearing for horizontal layout. + * + * horiBearingY :: + * Top side bearing for horizontal layout. + * + * horiAdvance :: + * Advance width for horizontal layout. + * + * vertBearingX :: + * Left side bearing for vertical layout. + * + * vertBearingY :: + * Top side bearing for vertical layout. Larger positive values mean + * further below the vertical glyph origin. + * + * vertAdvance :: + * Advance height for vertical layout. Positive values mean the glyph + * has a positive advance downward. + * + * @note: + * If not disabled with @FT_LOAD_NO_HINTING, the values represent + * dimensions of the hinted glyph (in case hinting is applicable). + * + * Stroking a glyph with an outside border does not increase + * `horiAdvance` or `vertAdvance`; you have to manually adjust these + * values to account for the added width and height. + * + * FreeType doesn't use the 'VORG' table data for CFF fonts because it + * doesn't have an interface to quickly retrieve the glyph height. The + * y~coordinate of the vertical origin can be simply computed as + * `vertBearingY + height` after loading a glyph. + */ + typedef struct FT_Glyph_Metrics_ + { + FT_Pos width; + FT_Pos height; + + FT_Pos horiBearingX; + FT_Pos horiBearingY; + FT_Pos horiAdvance; + + FT_Pos vertBearingX; + FT_Pos vertBearingY; + FT_Pos vertAdvance; + + } FT_Glyph_Metrics; + + + /************************************************************************** + * + * @struct: + * FT_Bitmap_Size + * + * @description: + * This structure models the metrics of a bitmap strike (i.e., a set of + * glyphs for a given point size and resolution) in a bitmap font. It is + * used for the `available_sizes` field of @FT_Face. + * + * @fields: + * height :: + * The vertical distance, in pixels, between two consecutive baselines. + * It is always positive. + * + * width :: + * The average width, in pixels, of all glyphs in the strike. + * + * size :: + * The nominal size of the strike in 26.6 fractional points. This + * field is not very useful. + * + * x_ppem :: + * The horizontal ppem (nominal width) in 26.6 fractional pixels. + * + * y_ppem :: + * The vertical ppem (nominal height) in 26.6 fractional pixels. + * + * @note: + * Windows FNT: + * The nominal size given in a FNT font is not reliable. If the driver + * finds it incorrect, it sets `size` to some calculated values, and + * `x_ppem` and `y_ppem` to the pixel width and height given in the + * font, respectively. + * + * TrueType embedded bitmaps: + * `size`, `width`, and `height` values are not contained in the bitmap + * strike itself. They are computed from the global font parameters. + */ + typedef struct FT_Bitmap_Size_ + { + FT_Short height; + FT_Short width; + + FT_Pos size; + + FT_Pos x_ppem; + FT_Pos y_ppem; + + } FT_Bitmap_Size; + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* O B J E C T C L A S S E S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @type: + * FT_Library + * + * @description: + * A handle to a FreeType library instance. Each 'library' is completely + * independent from the others; it is the 'root' of a set of objects like + * fonts, faces, sizes, etc. + * + * It also embeds a memory manager (see @FT_Memory), as well as a + * scan-line converter object (see @FT_Raster). + * + * [Since 2.5.6] In multi-threaded applications it is easiest to use one + * `FT_Library` object per thread. In case this is too cumbersome, a + * single `FT_Library` object across threads is possible also, as long as + * a mutex lock is used around @FT_New_Face and @FT_Done_Face. + * + * @note: + * Library objects are normally created by @FT_Init_FreeType, and + * destroyed with @FT_Done_FreeType. If you need reference-counting + * (cf. @FT_Reference_Library), use @FT_New_Library and @FT_Done_Library. + */ + typedef struct FT_LibraryRec_ *FT_Library; + + + /************************************************************************** + * + * @section: + * module_management + * + */ + + /************************************************************************** + * + * @type: + * FT_Module + * + * @description: + * A handle to a given FreeType module object. A module can be a font + * driver, a renderer, or anything else that provides services to the + * former. + */ + typedef struct FT_ModuleRec_* FT_Module; + + + /************************************************************************** + * + * @type: + * FT_Driver + * + * @description: + * A handle to a given FreeType font driver object. A font driver is a + * module capable of creating faces from font files. + */ + typedef struct FT_DriverRec_* FT_Driver; + + + /************************************************************************** + * + * @type: + * FT_Renderer + * + * @description: + * A handle to a given FreeType renderer. A renderer is a module in + * charge of converting a glyph's outline image to a bitmap. It supports + * a single glyph image format, and one or more target surface depths. + */ + typedef struct FT_RendererRec_* FT_Renderer; + + + /************************************************************************** + * + * @section: + * base_interface + * + */ + + /************************************************************************** + * + * @type: + * FT_Face + * + * @description: + * A handle to a typographic face object. A face object models a given + * typeface, in a given style. + * + * @note: + * A face object also owns a single @FT_GlyphSlot object, as well as one + * or more @FT_Size objects. + * + * Use @FT_New_Face or @FT_Open_Face to create a new face object from a + * given filepath or a custom input stream. + * + * Use @FT_Done_Face to destroy it (along with its slot and sizes). + * + * An `FT_Face` object can only be safely used from one thread at a time. + * Similarly, creation and destruction of `FT_Face` with the same + * @FT_Library object can only be done from one thread at a time. On the + * other hand, functions like @FT_Load_Glyph and its siblings are + * thread-safe and do not need the lock to be held as long as the same + * `FT_Face` object is not used from multiple threads at the same time. + * + * @also: + * See @FT_FaceRec for the publicly accessible fields of a given face + * object. + */ + typedef struct FT_FaceRec_* FT_Face; + + + /************************************************************************** + * + * @type: + * FT_Size + * + * @description: + * A handle to an object that models a face scaled to a given character + * size. + * + * @note: + * An @FT_Face has one _active_ @FT_Size object that is used by functions + * like @FT_Load_Glyph to determine the scaling transformation that in + * turn is used to load and hint glyphs and metrics. + * + * You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size + * or even @FT_Select_Size to change the content (i.e., the scaling + * values) of the active @FT_Size. + * + * You can use @FT_New_Size to create additional size objects for a given + * @FT_Face, but they won't be used by other functions until you activate + * it through @FT_Activate_Size. Only one size can be activated at any + * given time per face. + * + * @also: + * See @FT_SizeRec for the publicly accessible fields of a given size + * object. + */ + typedef struct FT_SizeRec_* FT_Size; + + + /************************************************************************** + * + * @type: + * FT_GlyphSlot + * + * @description: + * A handle to a given 'glyph slot'. A slot is a container that can hold + * any of the glyphs contained in its parent face. + * + * In other words, each time you call @FT_Load_Glyph or @FT_Load_Char, + * the slot's content is erased by the new glyph data, i.e., the glyph's + * metrics, its image (bitmap or outline), and other control information. + * + * @also: + * See @FT_GlyphSlotRec for the publicly accessible glyph fields. + */ + typedef struct FT_GlyphSlotRec_* FT_GlyphSlot; + + + /************************************************************************** + * + * @type: + * FT_CharMap + * + * @description: + * A handle to a character map (usually abbreviated to 'charmap'). A + * charmap is used to translate character codes in a given encoding into + * glyph indexes for its parent's face. Some font formats may provide + * several charmaps per font. + * + * Each face object owns zero or more charmaps, but only one of them can + * be 'active', providing the data used by @FT_Get_Char_Index or + * @FT_Load_Char. + * + * The list of available charmaps in a face is available through the + * `face->num_charmaps` and `face->charmaps` fields of @FT_FaceRec. + * + * The currently active charmap is available as `face->charmap`. You + * should call @FT_Set_Charmap to change it. + * + * @note: + * When a new face is created (either through @FT_New_Face or + * @FT_Open_Face), the library looks for a Unicode charmap within the + * list and automatically activates it. If there is no Unicode charmap, + * FreeType doesn't set an 'active' charmap. + * + * @also: + * See @FT_CharMapRec for the publicly accessible fields of a given + * character map. + */ + typedef struct FT_CharMapRec_* FT_CharMap; + + + /************************************************************************** + * + * @macro: + * FT_ENC_TAG + * + * @description: + * This macro converts four-letter tags into an unsigned long. It is + * used to define 'encoding' identifiers (see @FT_Encoding). + * + * @note: + * Since many 16-bit compilers don't like 32-bit enumerations, you should + * redefine this macro in case of problems to something like this: + * + * ``` + * #define FT_ENC_TAG( value, a, b, c, d ) value + * ``` + * + * to get a simple enumeration without assigning special numbers. + */ + +#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) ) + +#endif /* FT_ENC_TAG */ + + + /************************************************************************** + * + * @enum: + * FT_Encoding + * + * @description: + * An enumeration to specify character sets supported by charmaps. Used + * in the @FT_Select_Charmap API function. + * + * @note: + * Despite the name, this enumeration lists specific character + * repertories (i.e., charsets), and not text encoding methods (e.g., + * UTF-8, UTF-16, etc.). + * + * Other encodings might be defined in the future. + * + * @values: + * FT_ENCODING_NONE :: + * The encoding value~0 is reserved for all formats except BDF, PCF, + * and Windows FNT; see below for more information. + * + * FT_ENCODING_UNICODE :: + * The Unicode character set. This value covers all versions of the + * Unicode repertoire, including ASCII and Latin-1. Most fonts include + * a Unicode charmap, but not all of them. + * + * For example, if you want to access Unicode value U+1F028 (and the + * font contains it), use value 0x1F028 as the input value for + * @FT_Get_Char_Index. + * + * FT_ENCODING_MS_SYMBOL :: + * Microsoft Symbol encoding, used to encode mathematical symbols and + * wingdings. For more information, see + * 'https://www.microsoft.com/typography/otspec/recom.htm', + * 'http://www.kostis.net/charsets/symbol.htm', and + * 'http://www.kostis.net/charsets/wingding.htm'. + * + * This encoding uses character codes from the PUA (Private Unicode + * Area) in the range U+F020-U+F0FF. + * + * FT_ENCODING_SJIS :: + * Shift JIS encoding for Japanese. More info at + * 'https://en.wikipedia.org/wiki/Shift_JIS'. See note on multi-byte + * encodings below. + * + * FT_ENCODING_PRC :: + * Corresponds to encoding systems mainly for Simplified Chinese as + * used in People's Republic of China (PRC). The encoding layout is + * based on GB~2312 and its supersets GBK and GB~18030. + * + * FT_ENCODING_BIG5 :: + * Corresponds to an encoding system for Traditional Chinese as used in + * Taiwan and Hong Kong. + * + * FT_ENCODING_WANSUNG :: + * Corresponds to the Korean encoding system known as Extended Wansung + * (MS Windows code page 949). For more information see + * 'https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'. + * + * FT_ENCODING_JOHAB :: + * The Korean standard character set (KS~C 5601-1992), which + * corresponds to MS Windows code page 1361. This character set + * includes all possible Hangul character combinations. + * + * FT_ENCODING_ADOBE_LATIN_1 :: + * Corresponds to a Latin-1 encoding as defined in a Type~1 PostScript + * font. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_STANDARD :: + * Adobe Standard encoding, as found in Type~1, CFF, and OpenType/CFF + * fonts. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_EXPERT :: + * Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF + * fonts. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_CUSTOM :: + * Corresponds to a custom encoding, as found in Type~1, CFF, and + * OpenType/CFF fonts. It is limited to 256 character codes. + * + * FT_ENCODING_APPLE_ROMAN :: + * Apple roman encoding. Many TrueType and OpenType fonts contain a + * charmap for this 8-bit encoding, since older versions of Mac OS are + * able to use it. + * + * FT_ENCODING_OLD_LATIN_2 :: + * This value is deprecated and was neither used nor reported by + * FreeType. Don't use or test for it. + * + * FT_ENCODING_MS_SJIS :: + * Same as FT_ENCODING_SJIS. Deprecated. + * + * FT_ENCODING_MS_GB2312 :: + * Same as FT_ENCODING_PRC. Deprecated. + * + * FT_ENCODING_MS_BIG5 :: + * Same as FT_ENCODING_BIG5. Deprecated. + * + * FT_ENCODING_MS_WANSUNG :: + * Same as FT_ENCODING_WANSUNG. Deprecated. + * + * FT_ENCODING_MS_JOHAB :: + * 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. + * + * `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 + * `FT_ENCODING_UNICODE`). Use @FT_Get_BDF_Charset_ID to find out which + * encoding is really present. If, for example, the `cs_registry` field + * is 'KOI8' and the `cs_encoding` field is 'R', the font is encoded in + * KOI8-R. + * + * `FT_ENCODING_NONE` is always set (with a single exception) by the + * winfonts driver. Use @FT_Get_WinFNT_Header and examine the `charset` + * field of the @FT_WinFNT_HeaderRec structure to find out which encoding + * is really present. For example, @FT_WinFNT_ID_CP1251 (204) means + * Windows code page 1251 (for Russian). + * + * `FT_ENCODING_NONE` is set if `platform_id` is @TT_PLATFORM_MACINTOSH + * and `encoding_id` is not `TT_MAC_ID_ROMAN` (otherwise it is set to + * `FT_ENCODING_APPLE_ROMAN`). + * + * If `platform_id` is @TT_PLATFORM_MACINTOSH, use the function + * @FT_Get_CMap_Language_ID to query the Mac language ID that may be + * needed to be able to distinguish Apple encoding variants. See + * + * https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt + * + * to get an idea how to do that. Basically, if the language ID is~0, + * don't use it, otherwise subtract 1 from the language ID. Then examine + * `encoding_id`. If, for example, `encoding_id` is `TT_MAC_ID_ROMAN` + * and the language ID (minus~1) is `TT_MAC_LANGID_GREEK`, it is the + * Greek encoding, not Roman. `TT_MAC_ID_ARABIC` with + * `TT_MAC_LANGID_FARSI` means the Farsi variant the Arabic encoding. + */ + typedef enum FT_Encoding_ + { + FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ), + + FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ), + FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ), + + FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ), + FT_ENC_TAG( FT_ENCODING_PRC, 'g', 'b', ' ', ' ' ), + FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ), + FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ), + FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ), + + /* for backward compatibility */ + FT_ENCODING_GB2312 = FT_ENCODING_PRC, + FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS, + FT_ENCODING_MS_GB2312 = FT_ENCODING_PRC, + FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5, + FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG, + FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB, + + FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ), + FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E' ), + FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C' ), + FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1' ), + + FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ), + + FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' ) + + } FT_Encoding; + + + /* these constants are deprecated; use the corresponding `FT_Encoding` */ + /* values instead */ +#define ft_encoding_none FT_ENCODING_NONE +#define ft_encoding_unicode FT_ENCODING_UNICODE +#define ft_encoding_symbol FT_ENCODING_MS_SYMBOL +#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 +#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 +#define ft_encoding_sjis FT_ENCODING_SJIS +#define ft_encoding_gb2312 FT_ENCODING_PRC +#define ft_encoding_big5 FT_ENCODING_BIG5 +#define ft_encoding_wansung FT_ENCODING_WANSUNG +#define ft_encoding_johab FT_ENCODING_JOHAB + +#define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD +#define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT +#define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM +#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN + + + /************************************************************************** + * + * @struct: + * FT_CharMapRec + * + * @description: + * The base charmap structure. + * + * @fields: + * face :: + * A handle to the parent face object. + * + * encoding :: + * An @FT_Encoding tag identifying the charmap. Use this with + * @FT_Select_Charmap. + * + * platform_id :: + * An ID number describing the platform for the following encoding ID. + * This comes directly from the TrueType specification and gets + * emulated for other formats. + * + * encoding_id :: + * A platform-specific encoding number. This also comes from the + * TrueType specification and gets emulated similarly. + */ + typedef struct FT_CharMapRec_ + { + FT_Face face; + FT_Encoding encoding; + FT_UShort platform_id; + FT_UShort encoding_id; + + } FT_CharMapRec; + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* B A S E O B J E C T C L A S S E S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @type: + * FT_Face_Internal + * + * @description: + * An opaque handle to an `FT_Face_InternalRec` structure that models the + * private data of a given @FT_Face object. + * + * This structure might change between releases of FreeType~2 and is not + * generally available to client applications. + */ + typedef struct FT_Face_InternalRec_* FT_Face_Internal; + + + /************************************************************************** + * + * @struct: + * FT_FaceRec + * + * @description: + * FreeType root face class structure. A face object models a typeface + * in a font file. + * + * @fields: + * num_faces :: + * The number of faces in the font file. Some font formats can have + * multiple faces in a single font file. + * + * face_index :: + * This field holds two different values. Bits 0-15 are the index of + * the face in the font file (starting with value~0). They are set + * to~0 if there is only one face in the font file. + * + * [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation + * fonts only, holding the named instance index for the current face + * index (starting with value~1; value~0 indicates font access without + * a named instance). For non-variation fonts, bits 16-30 are ignored. + * If we have the third named instance of face~4, say, `face_index` is + * set to 0x00030004. + * + * Bit 31 is always zero (this is, `face_index` is always a positive + * value). + * + * [Since 2.9] Changing the design coordinates with + * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does + * not influence the named instance index value (only + * @FT_Set_Named_Instance does that). + * + * face_flags :: + * A set of bit flags that give important information about the face; + * see @FT_FACE_FLAG_XXX for the details. + * + * style_flags :: + * The lower 16~bits contain a set of bit flags indicating the style of + * the face; see @FT_STYLE_FLAG_XXX for the details. + * + * [Since 2.6.1] Bits 16-30 hold the number of named instances + * available for the current face if we have a GX or OpenType variation + * (sub)font. Bit 31 is always zero (this is, `style_flags` is always + * a positive value). Note that a variation font has always at least + * one named instance, namely the default instance. + * + * num_glyphs :: + * The number of glyphs in the face. If the face is scalable and has + * sbits (see `num_fixed_sizes`), it is set to the number of outline + * glyphs. + * + * For CID-keyed fonts (not in an SFNT wrapper) this value gives the + * highest CID used in the font. + * + * family_name :: + * The face's family name. This is an ASCII string, usually in + * English, that describes the typeface's family (like 'Times New + * Roman', 'Bodoni', 'Garamond', etc). This is a least common + * denominator used to list fonts. Some formats (TrueType & OpenType) + * provide localized and Unicode versions of this string. Applications + * should use the format-specific interface to access them. Can be + * `NULL` (e.g., in fonts embedded in a PDF file). + * + * In case the font doesn't provide a specific family name entry, + * FreeType tries to synthesize one, deriving it from other name + * entries. + * + * style_name :: + * The face's style name. This is an ASCII string, usually in English, + * that describes the typeface's style (like 'Italic', 'Bold', + * 'Condensed', etc). Not all font formats provide a style name, so + * this field is optional, and can be set to `NULL`. As for + * `family_name`, some formats provide localized and Unicode versions + * of this string. Applications should use the format-specific + * interface to access them. + * + * num_fixed_sizes :: + * The number of bitmap strikes in the face. Even if the face is + * scalable, there might still be bitmap strikes, which are called + * 'sbits' in that case. + * + * available_sizes :: + * An array of @FT_Bitmap_Size for all bitmap strikes in the face. It + * is set to `NULL` if there is no bitmap strike. + * + * Note that FreeType tries to sanitize the strike data since they are + * sometimes sloppy or incorrect, but this can easily fail. + * + * num_charmaps :: + * The number of charmaps in the face. + * + * charmaps :: + * An array of the charmaps of the face. + * + * generic :: + * A field reserved for client uses. See the @FT_Generic type + * description. + * + * bbox :: + * The font bounding box. Coordinates are expressed in font units (see + * `units_per_EM`). The box is large enough to contain any glyph from + * the font. Thus, `bbox.yMax` can be seen as the 'maximum ascender', + * and `bbox.yMin` as the 'minimum descender'. Only relevant for + * scalable formats. + * + * Note that the bounding box might be off by (at least) one pixel for + * hinted fonts. See @FT_Size_Metrics for further discussion. + * + * units_per_EM :: + * The number of font units per EM square for this face. This is + * typically 2048 for TrueType fonts, and 1000 for Type~1 fonts. Only + * relevant for scalable formats. + * + * ascender :: + * The typographic ascender of the face, expressed in font units. For + * font formats not having this information, it is set to `bbox.yMax`. + * Only relevant for scalable formats. + * + * descender :: + * The typographic descender of the face, expressed in font units. For + * font formats not having this information, it is set to `bbox.yMin`. + * Note that this field is negative for values below the baseline. + * Only relevant for scalable formats. + * + * height :: + * This value is the vertical distance between two consecutive + * baselines, expressed in font units. It is always positive. Only + * relevant for scalable formats. + * + * If you want the global glyph height, use `ascender - descender`. + * + * max_advance_width :: + * The maximum advance width, in font units, for all glyphs in this + * face. This can be used to make word wrapping computations faster. + * Only relevant for scalable formats. + * + * max_advance_height :: + * The maximum advance height, in font units, for all glyphs in this + * face. This is only relevant for vertical layouts, and is set to + * `height` for fonts that do not provide vertical metrics. Only + * relevant for scalable formats. + * + * underline_position :: + * The position, in font units, of the underline line for this face. + * It is the center of the underlining stem. Only relevant for + * scalable formats. + * + * underline_thickness :: + * The thickness, in font units, of the underline for this face. Only + * relevant for scalable formats. + * + * glyph :: + * The face's associated glyph slot(s). + * + * size :: + * The current active size for this face. + * + * charmap :: + * The current active charmap for this face. + * + * @note: + * Fields may be changed after a call to @FT_Attach_File or + * @FT_Attach_Stream. + * + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `ascender`, `descender`, `height`, + * `underline_position`, and `underline_thickness`. + * + * Especially for TrueType fonts see also the documentation for + * @FT_Size_Metrics. + */ + typedef struct FT_FaceRec_ + { + FT_Long num_faces; + FT_Long face_index; + + FT_Long face_flags; + FT_Long style_flags; + + FT_Long num_glyphs; + + FT_String* family_name; + FT_String* style_name; + + FT_Int num_fixed_sizes; + FT_Bitmap_Size* available_sizes; + + FT_Int num_charmaps; + FT_CharMap* charmaps; + + FT_Generic generic; + + /*# The following member variables (down to `underline_thickness`) */ + /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */ + /*# for bitmap fonts. */ + FT_BBox bbox; + + FT_UShort units_per_EM; + FT_Short ascender; + FT_Short descender; + FT_Short height; + + FT_Short max_advance_width; + FT_Short max_advance_height; + + FT_Short underline_position; + FT_Short underline_thickness; + + FT_GlyphSlot glyph; + FT_Size size; + FT_CharMap charmap; + + /*@private begin */ + + FT_Driver driver; + FT_Memory memory; + FT_Stream stream; + + FT_ListRec sizes_list; + + FT_Generic autohint; /* face-specific auto-hinter data */ + void* extensions; /* unused */ + + FT_Face_Internal internal; + + /*@private end */ + + } FT_FaceRec; + + + /************************************************************************** + * + * @enum: + * FT_FACE_FLAG_XXX + * + * @description: + * A list of bit flags used in the `face_flags` field of the @FT_FaceRec + * structure. They inform client applications of properties of the + * corresponding face. + * + * @values: + * FT_FACE_FLAG_SCALABLE :: + * The face contains outline glyphs. Note that a face can contain + * bitmap strikes also, i.e., a face can have both this flag and + * @FT_FACE_FLAG_FIXED_SIZES set. + * + * FT_FACE_FLAG_FIXED_SIZES :: + * The face contains bitmap strikes. See also the `num_fixed_sizes` + * and `available_sizes` fields of @FT_FaceRec. + * + * FT_FACE_FLAG_FIXED_WIDTH :: + * The face contains fixed-width characters (like Courier, Lucida, + * MonoType, etc.). + * + * FT_FACE_FLAG_SFNT :: + * The face uses the SFNT storage scheme. For now, this means TrueType + * and OpenType. + * + * FT_FACE_FLAG_HORIZONTAL :: + * The face contains horizontal glyph metrics. This should be set for + * all common formats. + * + * FT_FACE_FLAG_VERTICAL :: + * The face contains vertical glyph metrics. This is only available in + * some formats, not all of them. + * + * FT_FACE_FLAG_KERNING :: + * The face contains kerning information. If set, the kerning distance + * can be retrieved using the function @FT_Get_Kerning. Otherwise the + * function always return the vector (0,0). Note that FreeType doesn't + * handle kerning data from the SFNT 'GPOS' table (as present in many + * OpenType fonts). + * + * FT_FACE_FLAG_FAST_GLYPHS :: + * THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. + * + * FT_FACE_FLAG_MULTIPLE_MASTERS :: + * The face contains multiple masters and is capable of interpolating + * between them. Supported formats are Adobe MM, TrueType GX, and + * OpenType variation fonts. + * + * See section @multiple_masters for API details. + * + * FT_FACE_FLAG_GLYPH_NAMES :: + * The face contains glyph names, which can be retrieved using + * @FT_Get_Glyph_Name. Note that some TrueType fonts contain broken + * glyph name tables. Use the function @FT_Has_PS_Glyph_Names when + * needed. + * + * FT_FACE_FLAG_EXTERNAL_STREAM :: + * Used internally by FreeType to indicate that a face's stream was + * provided by the client application and should not be destroyed when + * @FT_Done_Face is called. Don't read or test this flag. + * + * FT_FACE_FLAG_HINTER :: + * The font driver has a hinting machine of its own. For example, with + * TrueType fonts, it makes sense to use data from the SFNT 'gasp' + * table only if the native TrueType hinting engine (with the bytecode + * interpreter) is available and active. + * + * FT_FACE_FLAG_CID_KEYED :: + * The face is CID-keyed. In that case, the face is not accessed by + * glyph indices but by CID values. For subsetted CID-keyed fonts this + * has the consequence that not all index values are a valid argument + * to @FT_Load_Glyph. Only the CID values for which corresponding + * glyphs in the subsetted font exist make `FT_Load_Glyph` return + * successfully; in all other cases you get an + * `FT_Err_Invalid_Argument` error. + * + * Note that CID-keyed fonts that are in an SFNT wrapper (this is, all + * OpenType/CFF fonts) don't have this flag set since the glyphs are + * accessed in the normal way (using contiguous indices); the + * 'CID-ness' isn't visible to the application. + * + * FT_FACE_FLAG_TRICKY :: + * The face is 'tricky', this is, it always needs the font format's + * native hinting engine to get a reasonable result. A typical example + * is the old Chinese font `mingli.ttf` (but not `mingliu.ttc`) that + * uses TrueType bytecode instructions to move and scale all of its + * subglyphs. + * + * It is not possible to auto-hint such fonts using + * @FT_LOAD_FORCE_AUTOHINT; it will also ignore @FT_LOAD_NO_HINTING. + * You have to set both @FT_LOAD_NO_HINTING and @FT_LOAD_NO_AUTOHINT to + * really disable hinting; however, you probably never want this except + * for demonstration purposes. + * + * Currently, there are about a dozen TrueType fonts in the list of + * tricky fonts; they are hard-coded in file `ttobjs.c`. + * + * FT_FACE_FLAG_COLOR :: + * [Since 2.5.1] The face has color glyph tables. See @FT_LOAD_COLOR + * for more information. + * + * FT_FACE_FLAG_VARIATION :: + * [Since 2.9] Set if the current face (or named instance) has been + * altered with @FT_Set_MM_Design_Coordinates, + * @FT_Set_Var_Design_Coordinates, or @FT_Set_Var_Blend_Coordinates. + * This flag is unset by a call to @FT_Set_Named_Instance. + */ +#define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) +#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) +#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 ) +#define FT_FACE_FLAG_SFNT ( 1L << 3 ) +#define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 ) +#define FT_FACE_FLAG_VERTICAL ( 1L << 5 ) +#define FT_FACE_FLAG_KERNING ( 1L << 6 ) +#define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 ) +#define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 ) +#define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 ) +#define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 ) +#define FT_FACE_FLAG_HINTER ( 1L << 11 ) +#define FT_FACE_FLAG_CID_KEYED ( 1L << 12 ) +#define FT_FACE_FLAG_TRICKY ( 1L << 13 ) +#define FT_FACE_FLAG_COLOR ( 1L << 14 ) +#define FT_FACE_FLAG_VARIATION ( 1L << 15 ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_HORIZONTAL + * + * @description: + * A macro that returns true whenever a face object contains horizontal + * metrics (this is true for all font formats though). + * + * @also: + * @FT_HAS_VERTICAL can be used to check for vertical metrics. + * + */ +#define FT_HAS_HORIZONTAL( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_VERTICAL + * + * @description: + * A macro that returns true whenever a face object contains real + * vertical metrics (and not only synthesized ones). + * + */ +#define FT_HAS_VERTICAL( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_VERTICAL ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_KERNING + * + * @description: + * A macro that returns true whenever a face object contains kerning data + * that can be accessed with @FT_Get_Kerning. + * + */ +#define FT_HAS_KERNING( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_KERNING ) + + + /************************************************************************** + * + * @macro: + * FT_IS_SCALABLE + * + * @description: + * A macro that returns true whenever a face object contains a scalable + * font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF, and + * PFR font formats). + * + */ +#define FT_IS_SCALABLE( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_SCALABLE ) + + + /************************************************************************** + * + * @macro: + * FT_IS_SFNT + * + * @description: + * A macro that returns true whenever a face object contains a font whose + * format is based on the SFNT storage scheme. This usually means: + * TrueType fonts, OpenType fonts, as well as SFNT-based embedded bitmap + * fonts. + * + * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and + * @FT_TRUETYPE_TABLES_H are available. + * + */ +#define FT_IS_SFNT( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_SFNT ) + + + /************************************************************************** + * + * @macro: + * FT_IS_FIXED_WIDTH + * + * @description: + * A macro that returns true whenever a face object contains a font face + * that contains fixed-width (or 'monospace', 'fixed-pitch', etc.) + * glyphs. + * + */ +#define FT_IS_FIXED_WIDTH( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_FIXED_SIZES + * + * @description: + * A macro that returns true whenever a face object contains some + * embedded bitmaps. See the `available_sizes` field of the @FT_FaceRec + * structure. + * + */ +#define FT_HAS_FIXED_SIZES( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_FAST_GLYPHS + * + * @description: + * Deprecated. + * + */ +#define FT_HAS_FAST_GLYPHS( face ) 0 + + + /************************************************************************** + * + * @macro: + * FT_HAS_GLYPH_NAMES + * + * @description: + * A macro that returns true whenever a face object contains some glyph + * names that can be accessed through @FT_Get_Glyph_Name. + * + */ +#define FT_HAS_GLYPH_NAMES( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_MULTIPLE_MASTERS + * + * @description: + * A macro that returns true whenever a face object contains some + * multiple masters. The functions provided by @FT_MULTIPLE_MASTERS_H + * are then available to choose the exact design you want. + * + */ +#define FT_HAS_MULTIPLE_MASTERS( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) + + + /************************************************************************** + * + * @macro: + * FT_IS_NAMED_INSTANCE + * + * @description: + * A macro that returns true whenever a face object is a named instance + * of a GX or OpenType variation font. + * + * [Since 2.9] Changing the design coordinates with + * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does + * not influence the return value of this macro (only + * @FT_Set_Named_Instance does that). + * + * @since: + * 2.7 + * + */ +#define FT_IS_NAMED_INSTANCE( face ) \ + ( (face)->face_index & 0x7FFF0000L ) + + + /************************************************************************** + * + * @macro: + * FT_IS_VARIATION + * + * @description: + * A macro that returns true whenever a face object has been altered by + * @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, or + * @FT_Set_Var_Blend_Coordinates. + * + * @since: + * 2.9 + * + */ +#define FT_IS_VARIATION( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_VARIATION ) + + + /************************************************************************** + * + * @macro: + * FT_IS_CID_KEYED + * + * @description: + * A macro that returns true whenever a face object contains a CID-keyed + * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more details. + * + * If this macro is true, all functions defined in @FT_CID_H are + * available. + * + */ +#define FT_IS_CID_KEYED( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED ) + + + /************************************************************************** + * + * @macro: + * FT_IS_TRICKY + * + * @description: + * A macro that returns true whenever a face represents a 'tricky' font. + * See the discussion of @FT_FACE_FLAG_TRICKY for more details. + * + */ +#define FT_IS_TRICKY( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_TRICKY ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_COLOR + * + * @description: + * A macro that returns true whenever a face object contains tables for + * color glyphs. + * + * @since: + * 2.5.1 + * + */ +#define FT_HAS_COLOR( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_COLOR ) + + + /************************************************************************** + * + * @enum: + * FT_STYLE_FLAG_XXX + * + * @description: + * A list of bit flags to indicate the style of a given face. These are + * used in the `style_flags` field of @FT_FaceRec. + * + * @values: + * FT_STYLE_FLAG_ITALIC :: + * The face style is italic or oblique. + * + * FT_STYLE_FLAG_BOLD :: + * The face is bold. + * + * @note: + * The style information as provided by FreeType is very basic. More + * details are beyond the scope and should be done on a higher level (for + * example, by analyzing various fields of the 'OS/2' table in SFNT based + * fonts). + */ +#define FT_STYLE_FLAG_ITALIC ( 1 << 0 ) +#define FT_STYLE_FLAG_BOLD ( 1 << 1 ) + + + /************************************************************************** + * + * @type: + * FT_Size_Internal + * + * @description: + * An opaque handle to an `FT_Size_InternalRec` structure, used to model + * private data of a given @FT_Size object. + */ + typedef struct FT_Size_InternalRec_* FT_Size_Internal; + + + /************************************************************************** + * + * @struct: + * FT_Size_Metrics + * + * @description: + * The size metrics structure gives the metrics of a size object. + * + * @fields: + * x_ppem :: + * The width of the scaled EM square in pixels, hence the term 'ppem' + * (pixels per EM). It is also referred to as 'nominal width'. + * + * y_ppem :: + * The height of the scaled EM square in pixels, hence the term 'ppem' + * (pixels per EM). It is also referred to as 'nominal height'. + * + * x_scale :: + * A 16.16 fractional scaling value to convert horizontal metrics from + * font units to 26.6 fractional pixels. Only relevant for scalable + * font formats. + * + * y_scale :: + * A 16.16 fractional scaling value to convert vertical metrics from + * font units to 26.6 fractional pixels. Only relevant for scalable + * font formats. + * + * ascender :: + * The ascender in 26.6 fractional pixels, rounded up to an integer + * value. See @FT_FaceRec for the details. + * + * descender :: + * The descender in 26.6 fractional pixels, rounded down to an integer + * value. See @FT_FaceRec for the details. + * + * height :: + * The height in 26.6 fractional pixels, rounded to an integer value. + * See @FT_FaceRec for the details. + * + * max_advance :: + * The maximum advance width in 26.6 fractional pixels, rounded to an + * integer value. See @FT_FaceRec for the details. + * + * @note: + * The scaling values, if relevant, are determined first during a size + * changing operation. The remaining fields are then set by the driver. + * For scalable formats, they are usually set to scaled values of the + * corresponding fields in @FT_FaceRec. Some values like ascender or + * descender are rounded for historical reasons; more precise values (for + * outline fonts) can be derived by scaling the corresponding @FT_FaceRec + * values manually, with code similar to the following. + * + * ``` + * scaled_ascender = FT_MulFix( face->ascender, + * size_metrics->y_scale ); + * ``` + * + * Note that due to glyph hinting and the selected rendering mode these + * values are usually not exact; consequently, they must be treated as + * unreliable with an error margin of at least one pixel! + * + * Indeed, the only way to get the exact metrics is to render _all_ + * glyphs. As this would be a definite performance hit, it is up to + * client applications to perform such computations. + * + * The `FT_Size_Metrics` structure is valid for bitmap fonts also. + * + * + * **TrueType fonts with native bytecode hinting** + * + * All applications that handle TrueType fonts with native hinting must + * be aware that TTFs expect different rounding of vertical font + * dimensions. The application has to cater for this, especially if it + * wants to rely on a TTF's vertical data (for example, to properly align + * box characters vertically). + * + * Only the application knows _in advance_ that it is going to use native + * hinting for TTFs! FreeType, on the other hand, selects the hinting + * mode not at the time of creating an @FT_Size object but much later, + * namely while calling @FT_Load_Glyph. + * + * Here is some pseudo code that illustrates a possible solution. + * + * ``` + * font_format = FT_Get_Font_Format( face ); + * + * if ( !strcmp( font_format, "TrueType" ) && + * do_native_bytecode_hinting ) + * { + * ascender = ROUND( FT_MulFix( face->ascender, + * size_metrics->y_scale ) ); + * descender = ROUND( FT_MulFix( face->descender, + * size_metrics->y_scale ) ); + * } + * else + * { + * ascender = size_metrics->ascender; + * descender = size_metrics->descender; + * } + * + * height = size_metrics->height; + * max_advance = size_metrics->max_advance; + * ``` + */ + typedef struct FT_Size_Metrics_ + { + FT_UShort x_ppem; /* horizontal pixels per EM */ + FT_UShort y_ppem; /* vertical pixels per EM */ + + FT_Fixed x_scale; /* scaling values used to convert font */ + FT_Fixed y_scale; /* units to 26.6 fractional pixels */ + + FT_Pos ascender; /* ascender in 26.6 frac. pixels */ + FT_Pos descender; /* descender in 26.6 frac. pixels */ + FT_Pos height; /* text height in 26.6 frac. pixels */ + FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */ + + } FT_Size_Metrics; + + + /************************************************************************** + * + * @struct: + * FT_SizeRec + * + * @description: + * FreeType root size class structure. A size object models a face + * object at a given size. + * + * @fields: + * face :: + * Handle to the parent face object. + * + * generic :: + * A typeless pointer, unused by the FreeType library or any of its + * drivers. It can be used by client applications to link their own + * data to each size object. + * + * metrics :: + * Metrics for this size object. This field is read-only. + */ + typedef struct FT_SizeRec_ + { + FT_Face face; /* parent face object */ + FT_Generic generic; /* generic pointer for client uses */ + FT_Size_Metrics metrics; /* size metrics */ + FT_Size_Internal internal; + + } FT_SizeRec; + + + /************************************************************************** + * + * @struct: + * FT_SubGlyph + * + * @description: + * The subglyph structure is an internal object used to describe + * subglyphs (for example, in the case of composites). + * + * @note: + * The subglyph implementation is not part of the high-level API, hence + * the forward structure declaration. + * + * You can however retrieve subglyph information with + * @FT_Get_SubGlyph_Info. + */ + typedef struct FT_SubGlyphRec_* FT_SubGlyph; + + + /************************************************************************** + * + * @type: + * FT_Slot_Internal + * + * @description: + * An opaque handle to an `FT_Slot_InternalRec` structure, used to model + * private data of a given @FT_GlyphSlot object. + */ + typedef struct FT_Slot_InternalRec_* FT_Slot_Internal; + + + /************************************************************************** + * + * @struct: + * FT_GlyphSlotRec + * + * @description: + * FreeType root glyph slot class structure. A glyph slot is a container + * where individual glyphs can be loaded, be they in outline or bitmap + * format. + * + * @fields: + * library :: + * A handle to the FreeType library instance this slot belongs to. + * + * face :: + * A handle to the parent face object. + * + * next :: + * In some cases (like some font tools), several glyph slots per face + * object can be a good thing. As this is rare, the glyph slots are + * listed through a direct, single-linked list using its `next` field. + * + * glyph_index :: + * [Since 2.10] The glyph index passed as an argument to @FT_Load_Glyph + * while initializing the glyph slot. + * + * generic :: + * A typeless pointer unused by the FreeType library or any of its + * drivers. It can be used by client applications to link their own + * data to each glyph slot object. + * + * metrics :: + * The metrics of the last loaded glyph in the slot. The returned + * values depend on the last load flags (see the @FT_Load_Glyph API + * function) and can be expressed either in 26.6 fractional pixels or + * font units. + * + * Note that even when the glyph image is transformed, the metrics are + * not. + * + * linearHoriAdvance :: + * The advance width of the unhinted glyph. Its value is expressed in + * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when + * loading the glyph. This field can be important to perform correct + * WYSIWYG layout. Only relevant for outline glyphs. + * + * linearVertAdvance :: + * The advance height of the unhinted glyph. Its value is expressed in + * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when + * loading the glyph. This field can be important to perform correct + * WYSIWYG layout. Only relevant for outline glyphs. + * + * advance :: + * This shorthand is, depending on @FT_LOAD_IGNORE_TRANSFORM, the + * transformed (hinted) advance width for the glyph, in 26.6 fractional + * pixel format. As specified with @FT_LOAD_VERTICAL_LAYOUT, it uses + * either the `horiAdvance` or the `vertAdvance` value of `metrics` + * field. + * + * format :: + * This field indicates the format of the image contained in the glyph + * slot. Typically @FT_GLYPH_FORMAT_BITMAP, @FT_GLYPH_FORMAT_OUTLINE, + * or @FT_GLYPH_FORMAT_COMPOSITE, but other values are possible. + * + * bitmap :: + * This field is used as a bitmap descriptor. Note that the address + * and content of the bitmap buffer can change between calls of + * @FT_Load_Glyph and a few other functions. + * + * bitmap_left :: + * The bitmap's left bearing expressed in integer pixels. + * + * bitmap_top :: + * The bitmap's top bearing expressed in integer pixels. This is the + * distance from the baseline to the top-most glyph scanline, upwards + * y~coordinates being **positive**. + * + * outline :: + * The outline descriptor for the current glyph image if its format is + * @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is loaded, `outline` can be + * transformed, distorted, emboldened, etc. However, it must not be + * freed. + * + * num_subglyphs :: + * The number of subglyphs in a composite glyph. This field is only + * valid for the composite glyph format that should normally only be + * loaded with the @FT_LOAD_NO_RECURSE flag. + * + * subglyphs :: + * An array of subglyph descriptors for composite glyphs. There are + * `num_subglyphs` elements in there. Currently internal to FreeType. + * + * control_data :: + * Certain font drivers can also return the control data for a given + * glyph image (e.g. TrueType bytecode, Type~1 charstrings, etc.). + * This field is a pointer to such data; it is currently internal to + * FreeType. + * + * control_len :: + * This is the length in bytes of the control data. Currently internal + * to FreeType. + * + * other :: + * Reserved. + * + * lsb_delta :: + * The difference between hinted and unhinted left side bearing while + * auto-hinting is active. Zero otherwise. + * + * rsb_delta :: + * The difference between hinted and unhinted right side bearing while + * auto-hinting is active. Zero otherwise. + * + * @note: + * If @FT_Load_Glyph is called with default flags (see @FT_LOAD_DEFAULT) + * the glyph image is loaded in the glyph slot in its native format + * (e.g., an outline glyph for TrueType and Type~1 formats). [Since 2.9] + * The prospective bitmap metrics are calculated according to + * @FT_LOAD_TARGET_XXX and other flags even for the outline glyph, even + * if @FT_LOAD_RENDER is not set. + * + * This image can later be converted into a bitmap by calling + * @FT_Render_Glyph. This function searches the current renderer for the + * native image's format, then invokes it. + * + * The renderer is in charge of transforming the native image through the + * slot's face transformation fields, then converting it into a bitmap + * that is returned in `slot->bitmap`. + * + * Note that `slot->bitmap_left` and `slot->bitmap_top` are also used to + * specify the position of the bitmap relative to the current pen + * position (e.g., coordinates (0,0) on the baseline). Of course, + * `slot->format` is also changed to @FT_GLYPH_FORMAT_BITMAP. + * + * Here is a small pseudo code fragment that shows how to use `lsb_delta` + * and `rsb_delta` to do fractional positioning of glyphs: + * + * ``` + * FT_GlyphSlot slot = face->glyph; + * FT_Pos origin_x = 0; + * + * + * for all glyphs do + * <load glyph with `FT_Load_Glyph'> + * + * FT_Outline_Translate( slot->outline, origin_x & 63, 0 ); + * + * <save glyph image, or render glyph, or ...> + * + * <compute kern between current and next glyph + * and add it to `origin_x'> + * + * origin_x += slot->advance.x; + * origin_x += slot->lsb_delta - slot->rsb_delta; + * endfor + * ``` + * + * Here is another small pseudo code fragment that shows how to use + * `lsb_delta` and `rsb_delta` to improve integer positioning of glyphs: + * + * ``` + * FT_GlyphSlot slot = face->glyph; + * FT_Pos origin_x = 0; + * FT_Pos prev_rsb_delta = 0; + * + * + * for all glyphs do + * <compute kern between current and previous glyph + * and add it to `origin_x'> + * + * <load glyph with `FT_Load_Glyph'> + * + * if ( prev_rsb_delta - slot->lsb_delta > 32 ) + * origin_x -= 64; + * else if ( prev_rsb_delta - slot->lsb_delta < -31 ) + * origin_x += 64; + * + * prev_rsb_delta = slot->rsb_delta; + * + * <save glyph image, or render glyph, or ...> + * + * origin_x += slot->advance.x; + * endfor + * ``` + * + * If you use strong auto-hinting, you **must** apply these delta values! + * Otherwise you will experience far too large inter-glyph spacing at + * small rendering sizes in most cases. Note that it doesn't harm to use + * the above code for other hinting modes also, since the delta values + * are zero then. + */ + typedef struct FT_GlyphSlotRec_ + { + FT_Library library; + FT_Face face; + FT_GlyphSlot next; + FT_UInt glyph_index; /* new in 2.10; was reserved previously */ + FT_Generic generic; + + FT_Glyph_Metrics metrics; + FT_Fixed linearHoriAdvance; + FT_Fixed linearVertAdvance; + FT_Vector advance; + + FT_Glyph_Format format; + + FT_Bitmap bitmap; + FT_Int bitmap_left; + FT_Int bitmap_top; + + FT_Outline outline; + + FT_UInt num_subglyphs; + FT_SubGlyph subglyphs; + + void* control_data; + long control_len; + + FT_Pos lsb_delta; + FT_Pos rsb_delta; + + void* other; + + FT_Slot_Internal internal; + + } FT_GlyphSlotRec; + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* F U N C T I O N S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @function: + * FT_Init_FreeType + * + * @description: + * Initialize a new FreeType library object. The set of modules that are + * registered by this function is determined at build time. + * + * @output: + * alibrary :: + * A handle to a new library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * In case you want to provide your own memory allocating routines, use + * @FT_New_Library instead, followed by a call to @FT_Add_Default_Modules + * (or a series of calls to @FT_Add_Module) and + * @FT_Set_Default_Properties. + * + * See the documentation of @FT_Library and @FT_Face for multi-threading + * issues. + * + * If you need reference-counting (cf. @FT_Reference_Library), use + * @FT_New_Library and @FT_Done_Library. + * + * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is + * set, this function reads the `FREETYPE_PROPERTIES` environment + * variable to control driver properties. See section @properties for + * more. + */ + FT_EXPORT( FT_Error ) + FT_Init_FreeType( FT_Library *alibrary ); + + + /************************************************************************** + * + * @function: + * FT_Done_FreeType + * + * @description: + * Destroy a given FreeType library object and all of its children, + * including resources, drivers, faces, sizes, etc. + * + * @input: + * library :: + * A handle to the target library object. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Done_FreeType( FT_Library library ); + + + /************************************************************************** + * + * @enum: + * FT_OPEN_XXX + * + * @description: + * A list of bit field constants used within the `flags` field of the + * @FT_Open_Args structure. + * + * @values: + * FT_OPEN_MEMORY :: + * This is a memory-based stream. + * + * FT_OPEN_STREAM :: + * Copy the stream from the `stream` field. + * + * FT_OPEN_PATHNAME :: + * Create a new input stream from a C~path name. + * + * FT_OPEN_DRIVER :: + * Use the `driver` field. + * + * FT_OPEN_PARAMS :: + * Use the `num_params` and `params` fields. + * + * @note: + * The `FT_OPEN_MEMORY`, `FT_OPEN_STREAM`, and `FT_OPEN_PATHNAME` flags + * are mutually exclusive. + */ +#define FT_OPEN_MEMORY 0x1 +#define FT_OPEN_STREAM 0x2 +#define FT_OPEN_PATHNAME 0x4 +#define FT_OPEN_DRIVER 0x8 +#define FT_OPEN_PARAMS 0x10 + + + /* these constants are deprecated; use the corresponding `FT_OPEN_XXX` */ + /* values instead */ +#define ft_open_memory FT_OPEN_MEMORY +#define ft_open_stream FT_OPEN_STREAM +#define ft_open_pathname FT_OPEN_PATHNAME +#define ft_open_driver FT_OPEN_DRIVER +#define ft_open_params FT_OPEN_PARAMS + + + /************************************************************************** + * + * @struct: + * FT_Parameter + * + * @description: + * A simple structure to pass more or less generic parameters to + * @FT_Open_Face and @FT_Face_Properties. + * + * @fields: + * tag :: + * A four-byte identification tag. + * + * data :: + * A pointer to the parameter data. + * + * @note: + * The ID and function of parameters are driver-specific. See section + * @parameter_tags for more information. + */ + typedef struct FT_Parameter_ + { + FT_ULong tag; + FT_Pointer data; + + } FT_Parameter; + + + /************************************************************************** + * + * @struct: + * FT_Open_Args + * + * @description: + * A structure to indicate how to open a new font file or stream. A + * pointer to such a structure can be used as a parameter for the + * functions @FT_Open_Face and @FT_Attach_Stream. + * + * @fields: + * flags :: + * A set of bit flags indicating how to use the structure. + * + * memory_base :: + * The first byte of the file in memory. + * + * memory_size :: + * The size in bytes of the file in memory. + * + * pathname :: + * A pointer to an 8-bit file pathname. + * + * stream :: + * A handle to a source stream object. + * + * driver :: + * This field is exclusively used by @FT_Open_Face; it simply specifies + * the font driver to use for opening the face. If set to `NULL`, + * FreeType tries to load the face with each one of the drivers in its + * list. + * + * num_params :: + * The number of extra parameters. + * + * params :: + * 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: + * + * 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 + * copied, and the client is responsible for releasing and destroying + * them _after_ the corresponding call to @FT_Done_Face. + * + * Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a custom + * input stream `stream` is used. + * + * Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a + * normal file and use `pathname` to open it. + * + * 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`. + * + * If the @FT_OPEN_PARAMS bit is set, the parameters given by + * `num_params` and `params` is used. They are ignored otherwise. + * + * Ideally, both the `pathname` and `params` fields should be tagged as + * 'const'; this is missing for API backward compatibility. In other + * words, applications should treat them as read-only. + */ + typedef struct FT_Open_Args_ + { + FT_UInt flags; + const FT_Byte* memory_base; + FT_Long memory_size; + FT_String* pathname; + FT_Stream stream; + FT_Module driver; + FT_Int num_params; + FT_Parameter* params; + + } FT_Open_Args; + + + /************************************************************************** + * + * @function: + * FT_New_Face + * + * @description: + * Call @FT_Open_Face to open a font by its pathname. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * pathname :: + * A path to the font file. + * + * face_index :: + * See @FT_Open_Face for a detailed description of this parameter. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Use @FT_Done_Face to destroy the created @FT_Face object (along with + * its slot and sizes). + */ + FT_EXPORT( FT_Error ) + FT_New_Face( FT_Library library, + const char* filepathname, + FT_Long face_index, + FT_Face *aface ); + + + /************************************************************************** + * + * @function: + * FT_New_Memory_Face + * + * @description: + * Call @FT_Open_Face to open a font that has been loaded into memory. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * file_base :: + * A pointer to the beginning of the font data. + * + * file_size :: + * The size of the memory chunk used by the font data. + * + * face_index :: + * See @FT_Open_Face for a detailed description of this parameter. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You must not deallocate the memory before calling @FT_Done_Face. + */ + FT_EXPORT( FT_Error ) + FT_New_Memory_Face( FT_Library library, + const FT_Byte* file_base, + FT_Long file_size, + FT_Long face_index, + FT_Face *aface ); + + + /************************************************************************** + * + * @function: + * FT_Open_Face + * + * @description: + * Create a face object from a given resource described by @FT_Open_Args. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * args :: + * A pointer to an `FT_Open_Args` structure that must be filled by the + * caller. + * + * face_index :: + * This field holds two different values. Bits 0-15 are the index of + * the face in the font file (starting with value~0). Set it to~0 if + * there is only one face in the font file. + * + * [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation + * fonts only, specifying the named instance index for the current face + * index (starting with value~1; value~0 makes FreeType ignore named + * instances). For non-variation fonts, bits 16-30 are ignored. + * Assuming that you want to access the third named instance in face~4, + * `face_index` should be set to 0x00030004. If you want to access + * face~4 without variation handling, simply set `face_index` to + * value~4. + * + * `FT_Open_Face` and its siblings can be used to quickly check whether + * the font format of a given font resource is supported by FreeType. + * In general, if the `face_index` argument is negative, the function's + * return value is~0 if the font format is recognized, or non-zero + * otherwise. The function allocates a more or less empty face handle + * in `*aface` (if `aface` isn't `NULL`); the only two useful fields in + * this special case are `face->num_faces` and `face->style_flags`. + * For any negative value of `face_index`, `face->num_faces` gives the + * number of faces within the font file. For the negative value + * '-(N+1)' (with 'N' a non-negative 16-bit value), bits 16-30 in + * `face->style_flags` give the number of named instances in face 'N' + * if we have a variation font (or zero otherwise). After examination, + * the returned @FT_Face structure should be deallocated with a call to + * @FT_Done_Face. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Unlike FreeType 1.x, this function automatically creates a glyph slot + * for the face object that can be accessed directly through + * `face->glyph`. + * + * 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. + * + * @example: + * To loop over all faces, use code similar to the following snippet + * (omitting the error handling). + * + * ``` + * ... + * FT_Face face; + * FT_Long i, num_faces; + * + * + * error = FT_Open_Face( library, args, -1, &face ); + * if ( error ) { ... } + * + * num_faces = face->num_faces; + * FT_Done_Face( face ); + * + * for ( i = 0; i < num_faces; i++ ) + * { + * ... + * error = FT_Open_Face( library, args, i, &face ); + * ... + * FT_Done_Face( face ); + * ... + * } + * ``` + * + * To loop over all valid values for `face_index`, use something similar + * to the following snippet, again without error handling. The code + * accesses all faces immediately (thus only a single call of + * `FT_Open_Face` within the do-loop), with and without named instances. + * + * ``` + * ... + * FT_Face face; + * + * FT_Long num_faces = 0; + * FT_Long num_instances = 0; + * + * FT_Long face_idx = 0; + * FT_Long instance_idx = 0; + * + * + * do + * { + * FT_Long id = ( instance_idx << 16 ) + face_idx; + * + * + * error = FT_Open_Face( library, args, id, &face ); + * if ( error ) { ... } + * + * num_faces = face->num_faces; + * num_instances = face->style_flags >> 16; + * + * ... + * + * FT_Done_Face( face ); + * + * if ( instance_idx < num_instances ) + * instance_idx++; + * else + * { + * face_idx++; + * instance_idx = 0; + * } + * + * } while ( face_idx < num_faces ) + * ``` + */ + FT_EXPORT( FT_Error ) + FT_Open_Face( FT_Library library, + const FT_Open_Args* args, + FT_Long face_index, + FT_Face *aface ); + + + /************************************************************************** + * + * @function: + * FT_Attach_File + * + * @description: + * Call @FT_Attach_Stream to attach a file. + * + * @inout: + * face :: + * The target face object. + * + * @input: + * filepathname :: + * The pathname. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Attach_File( FT_Face face, + const char* filepathname ); + + + /************************************************************************** + * + * @function: + * FT_Attach_Stream + * + * @description: + * 'Attach' data to a face object. Normally, this is used to read + * additional information for the face object. For example, you can + * attach an AFM file that comes with a Type~1 font to get the kerning + * values and other metrics. + * + * @inout: + * face :: + * The target face object. + * + * @input: + * parameters :: + * A pointer to @FT_Open_Args that must be filled by the caller. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The meaning of the 'attach' (i.e., what really happens when the new + * file is read) is not fixed by FreeType itself. It really depends on + * the font format (and thus the font driver). + * + * Client applications are expected to know what they are doing when + * invoking this function. Most drivers simply do not implement file or + * stream attachments. + */ + FT_EXPORT( FT_Error ) + FT_Attach_Stream( FT_Face face, + FT_Open_Args* parameters ); + + + /************************************************************************** + * + * @function: + * FT_Reference_Face + * + * @description: + * A counter gets initialized to~1 at the time an @FT_Face structure is + * created. This function increments the counter. @FT_Done_Face then + * only destroys a face if the counter is~1, otherwise it simply + * decrements the counter. + * + * This function helps in managing life-cycles of structures that + * reference @FT_Face objects. + * + * @input: + * face :: + * A handle to a target face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.4.2 + */ + FT_EXPORT( FT_Error ) + FT_Reference_Face( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Done_Face + * + * @description: + * Discard a given face object, as well as all of its child slots and + * sizes. + * + * @input: + * face :: + * A handle to a target face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Face. + */ + FT_EXPORT( FT_Error ) + FT_Done_Face( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Select_Size + * + * @description: + * Select a bitmap strike. To be more precise, this function sets the + * scaling factors of the active @FT_Size object in a face so that + * bitmaps from this particular strike are taken by @FT_Load_Glyph and + * friends. + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * strike_index :: + * The index of the bitmap strike in the `available_sizes` field of + * @FT_FaceRec structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * For bitmaps embedded in outline fonts it is common that only a subset + * of the available glyphs at a given ppem value is available. FreeType + * silently uses outlines if there is no bitmap for a given glyph index. + * + * For GX and OpenType variation fonts, a bitmap strike makes sense only + * if the default instance is active (this is, no glyph variation takes + * place); otherwise, FreeType simply ignores bitmap strikes. The same + * is true for all named instances that are different from the default + * instance. + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Select_Size( FT_Face face, + FT_Int strike_index ); + + + /************************************************************************** + * + * @enum: + * FT_Size_Request_Type + * + * @description: + * An enumeration type that lists the supported size request types, i.e., + * what input size (in font units) maps to the requested output size (in + * pixels, as computed from the arguments of @FT_Size_Request). + * + * @values: + * FT_SIZE_REQUEST_TYPE_NOMINAL :: + * The nominal size. The `units_per_EM` field of @FT_FaceRec is used + * to determine both scaling values. + * + * This is the standard scaling found in most applications. In + * particular, use this size request type for TrueType fonts if they + * provide optical scaling or something similar. Note, however, that + * `units_per_EM` is a rather abstract value which bears no relation to + * the actual size of the glyphs in a font. + * + * FT_SIZE_REQUEST_TYPE_REAL_DIM :: + * The real dimension. The sum of the `ascender` and (minus of) the + * `descender` fields of @FT_FaceRec is used to determine both scaling + * values. + * + * FT_SIZE_REQUEST_TYPE_BBOX :: + * The font bounding box. The width and height of the `bbox` field of + * @FT_FaceRec are used to determine the horizontal and vertical + * scaling value, respectively. + * + * FT_SIZE_REQUEST_TYPE_CELL :: + * The `max_advance_width` field of @FT_FaceRec is used to determine + * the horizontal scaling value; the vertical scaling value is + * determined the same way as @FT_SIZE_REQUEST_TYPE_REAL_DIM does. + * Finally, both scaling values are set to the smaller one. This type + * is useful if you want to specify the font size for, say, a window of + * a given dimension and 80x24 cells. + * + * FT_SIZE_REQUEST_TYPE_SCALES :: + * Specify the scaling values directly. + * + * @note: + * The above descriptions only apply to scalable formats. For bitmap + * formats, the behaviour is up to the driver. + * + * See the note section of @FT_Size_Metrics if you wonder how size + * requesting relates to scaling values. + */ + typedef enum FT_Size_Request_Type_ + { + FT_SIZE_REQUEST_TYPE_NOMINAL, + FT_SIZE_REQUEST_TYPE_REAL_DIM, + FT_SIZE_REQUEST_TYPE_BBOX, + FT_SIZE_REQUEST_TYPE_CELL, + FT_SIZE_REQUEST_TYPE_SCALES, + + FT_SIZE_REQUEST_TYPE_MAX + + } FT_Size_Request_Type; + + + /************************************************************************** + * + * @struct: + * FT_Size_RequestRec + * + * @description: + * A structure to model a size request. + * + * @fields: + * type :: + * See @FT_Size_Request_Type. + * + * width :: + * The desired width, given as a 26.6 fractional point value (with 72pt + * = 1in). + * + * height :: + * The desired height, given as a 26.6 fractional point value (with + * 72pt = 1in). + * + * horiResolution :: + * The horizontal resolution (dpi, i.e., pixels per inch). If set to + * zero, `width` is treated as a 26.6 fractional **pixel** value, which + * gets internally rounded to an integer. + * + * vertResolution :: + * The vertical resolution (dpi, i.e., pixels per inch). If set to + * zero, `height` is treated as a 26.6 fractional **pixel** value, + * which gets internally rounded to an integer. + * + * @note: + * If `width` is zero, the horizontal scaling value is set equal to the + * vertical scaling value, and vice versa. + * + * If `type` is `FT_SIZE_REQUEST_TYPE_SCALES`, `width` and `height` are + * interpreted directly as 16.16 fractional scaling values, without any + * further modification, and both `horiResolution` and `vertResolution` + * are ignored. + */ + typedef struct FT_Size_RequestRec_ + { + FT_Size_Request_Type type; + FT_Long width; + FT_Long height; + FT_UInt horiResolution; + FT_UInt vertResolution; + + } FT_Size_RequestRec; + + + /************************************************************************** + * + * @struct: + * FT_Size_Request + * + * @description: + * A handle to a size request structure. + */ + typedef struct FT_Size_RequestRec_ *FT_Size_Request; + + + /************************************************************************** + * + * @function: + * FT_Request_Size + * + * @description: + * Resize the scale of the active @FT_Size object in a face. + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * req :: + * A pointer to a @FT_Size_RequestRec. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Although drivers may select the bitmap strike matching the request, + * you should not rely on this if you intend to select a particular + * bitmap strike. Use @FT_Select_Size instead in that case. + * + * The relation between the requested size and the resulting glyph size + * is dependent entirely on how the size is defined in the source face. + * The font designer chooses the final size of each glyph relative to + * this size. For more information refer to + * 'https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'. + * + * Contrary to @FT_Set_Char_Size, this function doesn't have special code + * to normalize zero-valued widths, heights, or resolutions (which lead + * to errors in most cases). + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Request_Size( FT_Face face, + FT_Size_Request req ); + + + /************************************************************************** + * + * @function: + * FT_Set_Char_Size + * + * @description: + * Call @FT_Request_Size to request the nominal size (in points). + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * char_width :: + * The nominal width, in 26.6 fractional points. + * + * char_height :: + * The nominal height, in 26.6 fractional points. + * + * horz_resolution :: + * The horizontal resolution in dpi. + * + * vert_resolution :: + * The vertical resolution in dpi. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * While this function allows fractional points as input values, the + * resulting ppem value for the given resolution is always rounded to the + * nearest integer. + * + * If either the character width or height is zero, it is set equal to + * the other value. + * + * If either the horizontal or vertical resolution is zero, it is set + * equal to the other value. + * + * A character width or height smaller than 1pt is set to 1pt; if both + * resolution values are zero, they are set to 72dpi. + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Set_Char_Size( FT_Face face, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ); + + + /************************************************************************** + * + * @function: + * FT_Set_Pixel_Sizes + * + * @description: + * Call @FT_Request_Size to request the nominal size (in pixels). + * + * @inout: + * face :: + * A handle to the target face object. + * + * @input: + * pixel_width :: + * The nominal width, in pixels. + * + * pixel_height :: + * The nominal height, in pixels. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should not rely on the resulting glyphs matching or being + * constrained to this pixel size. Refer to @FT_Request_Size to + * understand how requested sizes relate to actual sizes. + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Set_Pixel_Sizes( FT_Face face, + FT_UInt pixel_width, + FT_UInt pixel_height ); + + + /************************************************************************** + * + * @function: + * FT_Load_Glyph + * + * @description: + * Load a glyph into the glyph slot of a face object. + * + * @inout: + * face :: + * A handle to the target face object where the glyph is loaded. + * + * @input: + * glyph_index :: + * The index of the glyph in the font file. For CID-keyed fonts + * (either in PS or in CFF format) this argument specifies the CID + * value. + * + * load_flags :: + * A flag indicating what to load for this glyph. The @FT_LOAD_XXX + * constants can be used to control the glyph loading process (e.g., + * whether the outline should be scaled, whether to load bitmaps or + * not, whether to hint the outline, etc). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The loaded glyph may be transformed. See @FT_Set_Transform for the + * details. + * + * For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned + * for invalid CID values (this is, for CID values that don't have a + * corresponding glyph in the font). See the discussion of the + * @FT_FACE_FLAG_CID_KEYED flag for more details. + * + * If you receive `FT_Err_Glyph_Too_Big`, try getting the glyph outline + * at EM size, then scale it manually and fill it as a graphics + * operation. + */ + FT_EXPORT( FT_Error ) + FT_Load_Glyph( FT_Face face, + FT_UInt glyph_index, + FT_Int32 load_flags ); + + + /************************************************************************** + * + * @function: + * FT_Load_Char + * + * @description: + * Load a glyph into the glyph slot of a face object, accessed by its + * character code. + * + * @inout: + * face :: + * A handle to a target face object where the glyph is loaded. + * + * @input: + * char_code :: + * The glyph's character code, according to the current charmap used in + * the face. + * + * load_flags :: + * A flag indicating what to load for this glyph. The @FT_LOAD_XXX + * constants can be used to control the glyph loading process (e.g., + * whether the outline should be scaled, whether to load bitmaps or + * not, whether to hint the outline, etc). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. + * + * Many fonts contain glyphs that can't be loaded by this function since + * its glyph indices are not listed in any of the font's charmaps. + * + * If no active cmap is set up (i.e., `face->charmap` is zero), the call + * to @FT_Get_Char_Index is omitted, and the function behaves identically + * to @FT_Load_Glyph. + */ + FT_EXPORT( FT_Error ) + FT_Load_Char( FT_Face face, + FT_ULong char_code, + FT_Int32 load_flags ); + + + /************************************************************************** + * + * @enum: + * FT_LOAD_XXX + * + * @description: + * A list of bit field constants for @FT_Load_Glyph to indicate what kind + * of operations to perform during glyph loading. + * + * @values: + * FT_LOAD_DEFAULT :: + * Corresponding to~0, this value is used as the default glyph load + * operation. In this case, the following happens: + * + * 1. FreeType looks for a bitmap for the glyph corresponding to the + * face's current size. If one is found, the function returns. The + * bitmap data can be accessed from the glyph slot (see note below). + * + * 2. If no embedded bitmap is searched for or found, FreeType looks + * for a scalable outline. If one is found, it is loaded from the font + * file, scaled to device pixels, then 'hinted' to the pixel grid in + * order to optimize it. The outline data can be accessed from the + * glyph slot (see note below). + * + * Note that by default the glyph loader doesn't render outlines into + * bitmaps. The following flags are used to modify this default + * behaviour to more specific and useful cases. + * + * FT_LOAD_NO_SCALE :: + * Don't scale the loaded outline glyph but keep it in font units. + * + * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and + * unsets @FT_LOAD_RENDER. + * + * If the font is 'tricky' (see @FT_FACE_FLAG_TRICKY for more), using + * `FT_LOAD_NO_SCALE` usually yields meaningless outlines because the + * subglyphs must be scaled and positioned with hinting instructions. + * This can be solved by loading the font without `FT_LOAD_NO_SCALE` + * and setting the character size to `font->units_per_EM`. + * + * FT_LOAD_NO_HINTING :: + * Disable hinting. This generally generates 'blurrier' bitmap glyphs + * when the glyph are rendered in any of the anti-aliased modes. See + * also the note below. + * + * This flag is implied by @FT_LOAD_NO_SCALE. + * + * FT_LOAD_RENDER :: + * Call @FT_Render_Glyph after the glyph is loaded. By default, the + * glyph is rendered in @FT_RENDER_MODE_NORMAL mode. This can be + * overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME. + * + * This flag is unset by @FT_LOAD_NO_SCALE. + * + * FT_LOAD_NO_BITMAP :: + * Ignore bitmap strikes when loading. Bitmap-only fonts ignore this + * flag. + * + * @FT_LOAD_NO_SCALE always sets this flag. + * + * FT_LOAD_VERTICAL_LAYOUT :: + * Load the glyph for vertical text layout. In particular, the + * `advance` value in the @FT_GlyphSlotRec structure is set to the + * `vertAdvance` value of the `metrics` field. + * + * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use this + * flag currently. Reason is that in this case vertical metrics get + * synthesized, and those values are not always consistent across + * various font formats. + * + * FT_LOAD_FORCE_AUTOHINT :: + * Prefer the auto-hinter over the font's native hinter. See also the + * note below. + * + * FT_LOAD_PEDANTIC :: + * Make the font driver perform pedantic verifications during glyph + * loading and hinting. 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_NO_RECURSE :: + * Don't load composite glyphs recursively. Instead, the font driver + * fills the `num_subglyph` and `subglyphs` values of the glyph slot; + * it also sets `glyph->format` to @FT_GLYPH_FORMAT_COMPOSITE. The + * description of subglyphs can then be accessed with + * @FT_Get_SubGlyph_Info. + * + * Don't use this flag for retrieving metrics information since some + * font drivers only return rudimentary data. + * + * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM. + * + * FT_LOAD_IGNORE_TRANSFORM :: + * Ignore the transform matrix set by @FT_Set_Transform. + * + * FT_LOAD_MONOCHROME :: + * This flag is used with @FT_LOAD_RENDER to indicate that you want to + * render an outline glyph to a 1-bit monochrome bitmap glyph, with + * 8~pixels packed into each byte of the bitmap data. + * + * Note that this has no effect on the hinting algorithm used. You + * should rather use @FT_LOAD_TARGET_MONO so that the + * monochrome-optimized hinting algorithm is used. + * + * FT_LOAD_LINEAR_DESIGN :: + * Keep `linearHoriAdvance` and `linearVertAdvance` fields of + * @FT_GlyphSlotRec in font units. See @FT_GlyphSlotRec for details. + * + * FT_LOAD_NO_AUTOHINT :: + * Disable the auto-hinter. See also the note below. + * + * FT_LOAD_COLOR :: + * Load colored glyphs. There are slight differences depending on the + * font format. + * + * [Since 2.5] Load embedded color bitmap images. The resulting color + * bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format, + * with pre-multiplied color channels. If the flag is not set and + * color bitmaps are found, they are converted to 256-level gray + * bitmaps, using the @FT_PIXEL_MODE_GRAY format. + * + * [Since 2.10, experimental] If the glyph index contains an entry in + * the face's 'COLR' table with a 'CPAL' palette table (as defined in + * the OpenType specification), make @FT_Render_Glyph provide a default + * blending of the color glyph layers associated with the glyph index, + * using the same bitmap format as embedded color bitmap images. This + * is mainly for convenience; for full control of color layers use + * @FT_Get_Color_Glyph_Layer and FreeType's color functions like + * @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering + * so that the client application can handle blending by itself. + * + * FT_LOAD_COMPUTE_METRICS :: + * [Since 2.6.1] Compute glyph metrics from the glyph data, without the + * use of bundled metrics tables (for example, the 'hdmx' table in + * TrueType fonts). This flag is mainly used by font validating or + * font editing applications, which need to ignore, verify, or edit + * those tables. + * + * Currently, this flag is only implemented for TrueType fonts. + * + * FT_LOAD_BITMAP_METRICS_ONLY :: + * [Since 2.7.1] Request loading of the metrics and bitmap image + * information of a (possibly embedded) bitmap glyph without allocating + * or copying the bitmap image data itself. No effect if the target + * glyph is not a bitmap image. + * + * This flag unsets @FT_LOAD_RENDER. + * + * FT_LOAD_CROP_BITMAP :: + * Ignored. Deprecated. + * + * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH :: + * Ignored. Deprecated. + * + * @note: + * By default, hinting is enabled and the font's native hinter (see + * @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can + * disable hinting by setting @FT_LOAD_NO_HINTING or change the + * precedence by setting @FT_LOAD_FORCE_AUTOHINT. You can also set + * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be used + * at all. + * + * See the description of @FT_FACE_FLAG_TRICKY for a special exception + * (affecting only a handful of Asian fonts). + * + * Besides deciding which hinter to use, you can also decide which + * hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details. + * + * Note that the auto-hinter needs a valid Unicode cmap (either a native + * one or synthesized by FreeType) for producing correct results. If a + * font provides an incorrect mapping (for example, assigning the + * character code U+005A, LATIN CAPITAL LETTER~Z, to a glyph depicting a + * mathematical integral sign), the auto-hinter might produce useless + * results. + * + */ +#define FT_LOAD_DEFAULT 0x0 +#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 ) + /* Bits 16-19 are used by `FT_LOAD_TARGET_` */ +#define FT_LOAD_COLOR ( 1L << 20 ) +#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 ) +#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 ) + + /* */ + + /* used internally only by certain font drivers */ +#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 ) +#define FT_LOAD_SBITS_ONLY ( 1L << 14 ) + + + /************************************************************************** + * + * @enum: + * FT_LOAD_TARGET_XXX + * + * @description: + * A list of values to select a specific hinting algorithm for the + * hinter. You should OR one of these values to your `load_flags` when + * calling @FT_Load_Glyph. + * + * Note that a font's native hinters may ignore the hinting algorithm you + * have specified (e.g., the TrueType bytecode interpreter). You can set + * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used. + * + * @values: + * FT_LOAD_TARGET_NORMAL :: + * The default hinting algorithm, optimized for standard gray-level + * rendering. For monochrome output, use @FT_LOAD_TARGET_MONO instead. + * + * FT_LOAD_TARGET_LIGHT :: + * A lighter hinting algorithm for gray-level modes. Many generated + * glyphs are fuzzier but better resemble their original shape. This + * is achieved by snapping glyphs to the pixel grid only vertically + * (Y-axis), as is done by FreeType's new CFF engine or Microsoft's + * ClearType font renderer. This preserves inter-glyph spacing in + * horizontal text. The snapping is done either by the native font + * driver, if the driver itself and the font support it, or by the + * auto-hinter. + * + * Advance widths are rounded to integer values; however, using the + * `lsb_delta` and `rsb_delta` fields of @FT_GlyphSlotRec, it is + * possible to get fractional advance widths for subpixel positioning + * (which is recommended to use). + * + * If configuration option `AF_CONFIG_OPTION_TT_SIZE_METRICS` is + * active, TrueType-like metrics are used to make this mode behave + * similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1 + * (inclusive). + * + * FT_LOAD_TARGET_MONO :: + * Strong hinting algorithm that should only be used for monochrome + * output. The result is probably unpleasant if the glyph is rendered + * in non-monochrome modes. + * + * Note that for outline fonts only the TrueType font driver has proper + * monochrome hinting support, provided the TTFs contain hints for B/W + * rendering (which most fonts no longer provide). If these conditions + * are not met it is very likely that you get ugly results at smaller + * sizes. + * + * FT_LOAD_TARGET_LCD :: + * A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally + * decimated LCD displays. + * + * FT_LOAD_TARGET_LCD_V :: + * A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically + * decimated LCD displays. + * + * @note: + * You should use only _one_ of the `FT_LOAD_TARGET_XXX` values in your + * `load_flags`. They can't be ORed. + * + * If @FT_LOAD_RENDER is also set, the glyph is rendered in the + * corresponding mode (i.e., the mode that matches the used algorithm + * best). An exception is `FT_LOAD_TARGET_MONO` since it implies + * @FT_LOAD_MONOCHROME. + * + * You can use a hinting algorithm that doesn't correspond to the same + * rendering mode. As an example, it is possible to use the 'light' + * hinting algorithm and have the results rendered in horizontal LCD + * pixel mode, with code like + * + * ``` + * FT_Load_Glyph( face, glyph_index, + * load_flags | FT_LOAD_TARGET_LIGHT ); + * + * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD ); + * ``` + * + * In general, you should stick with one rendering mode. For example, + * switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO + * enforces a lot of recomputation for TrueType fonts, which is slow. + * Another reason is caching: Selecting a different mode usually causes + * changes in both the outlines and the rasterized bitmaps; it is thus + * 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_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL ) +#define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT ) +#define FT_LOAD_TARGET_MONO FT_LOAD_TARGET_( FT_RENDER_MODE_MONO ) +#define FT_LOAD_TARGET_LCD FT_LOAD_TARGET_( FT_RENDER_MODE_LCD ) +#define FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V ) + + + /************************************************************************** + * + * @macro: + * FT_LOAD_TARGET_MODE + * + * @description: + * Return the @FT_Render_Mode corresponding to a given + * @FT_LOAD_TARGET_XXX value. + * + */ +#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) ) + + + /************************************************************************** + * + * @function: + * FT_Set_Transform + * + * @description: + * Set the transformation that is applied to glyph images when they are + * loaded into a glyph slot through @FT_Load_Glyph. + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * matrix :: + * 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. + * + * @note: + * The transformation is only applied to scalable image formats after the + * glyph has been loaded. It means that hinting is unaltered by the + * transformation and is performed on the character size given in the + * last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. + * + * Note that this also transforms the `face.glyph.advance` field, but + * **not** the values in `face.glyph.metrics`. + */ + FT_EXPORT( void ) + FT_Set_Transform( FT_Face face, + FT_Matrix* matrix, + FT_Vector* delta ); + + + /************************************************************************** + * + * @enum: + * FT_Render_Mode + * + * @description: + * Render modes supported by FreeType~2. Each mode corresponds to a + * specific type of scanline conversion performed on the outline. + * + * For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode` field + * in the @FT_GlyphSlotRec structure gives the format of the returned + * bitmap. + * + * All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, + * indicating pixel coverage. Use linear alpha blending and gamma + * correction to correctly render non-monochrome glyph bitmaps onto a + * surface; see @FT_Render_Glyph. + * + * @values: + * FT_RENDER_MODE_NORMAL :: + * Default render mode; it corresponds to 8-bit anti-aliased bitmaps. + * + * FT_RENDER_MODE_LIGHT :: + * This is equivalent to @FT_RENDER_MODE_NORMAL. It is only defined as + * a separate value because render modes are also used indirectly to + * define hinting algorithm selectors. See @FT_LOAD_TARGET_XXX for + * details. + * + * FT_RENDER_MODE_MONO :: + * This mode corresponds to 1-bit bitmaps (with 2~levels of opacity). + * + * FT_RENDER_MODE_LCD :: + * This mode corresponds to horizontal RGB and BGR subpixel displays + * like LCD screens. It produces 8-bit bitmaps that are 3~times the + * width of the original glyph outline in pixels, and which use the + * @FT_PIXEL_MODE_LCD mode. + * + * FT_RENDER_MODE_LCD_V :: + * This mode corresponds to vertical RGB and BGR subpixel displays + * (like PDA screens, rotated LCD displays, etc.). It produces 8-bit + * bitmaps that are 3~times the height of the original glyph outline in + * pixels and use the @FT_PIXEL_MODE_LCD_V mode. + * + * @note: + * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your + * `ftoption.h`, which enables patented ClearType-style rendering, the + * LCD-optimized glyph bitmaps should be filtered to reduce color fringes + * inherent to this technology. You can either set up LCD filtering with + * @FT_Library_SetLcdFilter or @FT_Face_Properties, or do the filtering + * yourself. The default FreeType LCD rendering technology does not + * require filtering. + * + * 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. + */ + typedef enum FT_Render_Mode_ + { + FT_RENDER_MODE_NORMAL = 0, + FT_RENDER_MODE_LIGHT, + FT_RENDER_MODE_MONO, + FT_RENDER_MODE_LCD, + FT_RENDER_MODE_LCD_V, + + FT_RENDER_MODE_MAX + + } FT_Render_Mode; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Render_Mode` values instead */ +#define ft_render_mode_normal FT_RENDER_MODE_NORMAL +#define ft_render_mode_mono FT_RENDER_MODE_MONO + + + /************************************************************************** + * + * @function: + * FT_Render_Glyph + * + * @description: + * Convert a given glyph image to a bitmap. It does so by inspecting the + * glyph image format, finding the relevant renderer, and invoking it. + * + * @inout: + * slot :: + * A handle to the glyph slot containing the image to convert. + * + * @input: + * render_mode :: + * The render mode used to render the glyph image into a bitmap. See + * @FT_Render_Mode for a list of possible values. + * + * If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph + * with flag @FT_LOAD_COLOR makes FT_Render_Glyph provide a default + * blending of colored glyph layers associated with the current glyph + * slot (provided the font contains such layers) instead of rendering + * the glyph slot's outline. This is an experimental feature; see + * @FT_LOAD_COLOR for more information. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * To get meaningful results, font scaling values must be set with + * functions like @FT_Set_Char_Size before calling `FT_Render_Glyph`. + * + * When FreeType outputs a bitmap of a glyph, it really outputs an alpha + * coverage map. If a pixel is completely covered by a filled-in + * outline, the bitmap contains 0xFF at that pixel, meaning that + * 0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100% + * black (or 0% bright). If a pixel is only 50% covered (value 0x80), + * the pixel is made 50% black (50% bright or a middle shade of grey). + * 0% covered means 0% black (100% bright or white). + * + * On high-DPI screens like on smartphones and tablets, the pixels are so + * small that their chance of being completely covered and therefore + * completely black are fairly good. On the low-DPI screens, however, + * the situation is different. The pixels are too large for most of the + * details of a glyph and shades of gray are the norm rather than the + * exception. + * + * This is relevant because all our screens have a second problem: they + * are not linear. 1~+~1 is not~2. Twice the value does not result in + * twice the brightness. When a pixel is only 50% covered, the coverage + * map says 50% black, and this translates to a pixel value of 128 when + * you use 8~bits per channel (0-255). However, this does not translate + * to 50% brightness for that pixel on our sRGB and gamma~2.2 screens. + * Due to their non-linearity, they dwell longer in the darks and only a + * pixel value of about 186 results in 50% brightness -- 128 ends up too + * dark on both bright and dark backgrounds. The net result is that dark + * text looks burnt-out, pixely and blotchy on bright background, bright + * text too frail on dark backgrounds, and colored text on colored + * background (for example, red on green) seems to have dark halos or + * 'dirt' around it. The situation is especially ugly for diagonal stems + * like in 'w' glyph shapes where the quality of FreeType's anti-aliasing + * depends on the correct display of grays. On high-DPI screens where + * smaller, fully black pixels reign supreme, this doesn't matter, but on + * our low-DPI screens with all the gray shades, it does. 0% and 100% + * brightness are the same things in linear and non-linear space, just + * all the shades in-between aren't. + * + * The blending function for placing text over a background is + * + * ``` + * dst = alpha * src + (1 - alpha) * dst , + * ``` + * + * which is known as the OVER operator. + * + * To correctly composite an antialiased 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, + * + * 2. use OVER to blend the two linear colors using the glyph pixel + * as the alpha value (remember, the glyph bitmap is an alpha coverage + * bitmap), and + * + * 3. apply inverse gamma to the blended pixel and write it back to + * the image. + * + * Internal testing at Adobe found that a target inverse gamma of~1.8 for + * step~3 gives good results across a wide range of displays with an sRGB + * gamma curve or a similar one. + * + * This process can cost performance. There is an approximation that + * does not need to know about the background color; see + * https://bel.fi/alankila/lcd/ and + * https://bel.fi/alankila/lcd/alpcor.html for details. + * + * **ATTENTION**: Linear blending is even more important when dealing + * with subpixel-rendered glyphs to prevent color-fringing! A + * subpixel-rendered glyph must first be filtered with a filter that + * gives equal weight to the three color primaries and does not exceed a + * sum of 0x100, see section @lcd_rendering. Then the only difference to + * gray linear blending is that subpixel-rendered linear blending is done + * 3~times per pixel: red foreground subpixel to red background subpixel + * and so on for green and blue. + */ + FT_EXPORT( FT_Error ) + FT_Render_Glyph( FT_GlyphSlot slot, + FT_Render_Mode render_mode ); + + + /************************************************************************** + * + * @enum: + * FT_Kerning_Mode + * + * @description: + * An enumeration to specify the format of kerning values returned by + * @FT_Get_Kerning. + * + * @values: + * FT_KERNING_DEFAULT :: + * Return grid-fitted kerning distances in 26.6 fractional pixels. + * + * FT_KERNING_UNFITTED :: + * Return un-grid-fitted kerning distances in 26.6 fractional pixels. + * + * FT_KERNING_UNSCALED :: + * Return the kerning vector in original font units. + * + * @note: + * `FT_KERNING_DEFAULT` returns full pixel values; it also makes FreeType + * heuristically scale down kerning distances at small ppem values so + * that they don't become too big. + * + * Both `FT_KERNING_DEFAULT` and `FT_KERNING_UNFITTED` use the current + * horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to + * convert font units to pixels. + */ + typedef enum FT_Kerning_Mode_ + { + FT_KERNING_DEFAULT = 0, + FT_KERNING_UNFITTED, + FT_KERNING_UNSCALED + + } FT_Kerning_Mode; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Kerning_Mode` values instead */ +#define ft_kerning_default FT_KERNING_DEFAULT +#define ft_kerning_unfitted FT_KERNING_UNFITTED +#define ft_kerning_unscaled FT_KERNING_UNSCALED + + + /************************************************************************** + * + * @function: + * FT_Get_Kerning + * + * @description: + * Return the kerning vector between two glyphs of the same face. + * + * @input: + * face :: + * A handle to a source face object. + * + * left_glyph :: + * The index of the left glyph in the kern pair. + * + * right_glyph :: + * The index of the right glyph in the kern pair. + * + * kern_mode :: + * See @FT_Kerning_Mode for more information. Determines the scale and + * dimension of the returned kerning vector. + * + * @output: + * akerning :: + * The kerning vector. This is either in font units, fractional pixels + * (26.6 format), or pixels for scalable formats, and in pixels for + * fixed-sizes formats. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Only horizontal layouts (left-to-right & right-to-left) are supported + * by this method. Other layouts, or more sophisticated kernings, are + * out of the scope of this API function -- they can be implemented + * through format-specific interfaces. + * + * Kerning for OpenType fonts implemented in a 'GPOS' table is not + * supported; use @FT_HAS_KERNING to find out whether a font has data + * that can be extracted with `FT_Get_Kerning`. + */ + FT_EXPORT( FT_Error ) + FT_Get_Kerning( FT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph, + FT_UInt kern_mode, + FT_Vector *akerning ); + + + /************************************************************************** + * + * @function: + * FT_Get_Track_Kerning + * + * @description: + * Return the track kerning for a given face object at a given size. + * + * @input: + * face :: + * A handle to a source face object. + * + * point_size :: + * The point size in 16.16 fractional points. + * + * 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, 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 + * Adobe's AFM specification for more details. + */ + FT_EXPORT( FT_Error ) + FT_Get_Track_Kerning( FT_Face face, + FT_Fixed point_size, + FT_Int degree, + FT_Fixed* akerning ); + + + /************************************************************************** + * + * @function: + * FT_Get_Glyph_Name + * + * @description: + * Retrieve the ASCII name of a given glyph in a face. This only works + * for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1. + * + * @input: + * face :: + * A handle to a source face object. + * + * glyph_index :: + * The glyph index. + * + * buffer_max :: + * The maximum number of bytes available in the buffer. + * + * @output: + * buffer :: + * A pointer to a target buffer where the name is copied to. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An error is returned if the face doesn't provide glyph names or if the + * glyph index is invalid. In all cases of failure, the first byte of + * `buffer` is set to~0 to indicate an empty name. + * + * The glyph name is truncated to fit within the buffer if it is too + * long. The returned string is always zero-terminated. + * + * Be aware that FreeType reorders glyph indices internally so that glyph + * index~0 always corresponds to the 'missing glyph' (called '.notdef'). + * + * This function always returns an error if the config macro + * `FT_CONFIG_OPTION_NO_GLYPH_NAMES` is not defined in `ftoption.h`. + */ + FT_EXPORT( FT_Error ) + FT_Get_Glyph_Name( FT_Face face, + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ); + + + /************************************************************************** + * + * @function: + * FT_Get_Postscript_Name + * + * @description: + * Retrieve the ASCII PostScript name of a given face, if available. + * This only works with PostScript, TrueType, and OpenType fonts. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * A pointer to the face's PostScript name. `NULL` if unavailable. + * + * @note: + * The returned pointer is owned by the face and is destroyed with it. + * + * For variation fonts, this string changes if you select a different + * instance, and you have to call `FT_Get_PostScript_Name` again to + * retrieve it. FreeType follows Adobe TechNote #5902, 'Generating + * PostScript Names for Fonts Using OpenType Font Variations'. + * + * https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html + * + * [Since 2.9] Special PostScript names for named instances are only + * returned if the named instance is set with @FT_Set_Named_Instance (and + * the font has corresponding entries in its 'fvar' table). If + * @FT_IS_VARIATION returns true, the algorithmically derived PostScript + * name is provided, not looking up special entries for named instances. + */ + FT_EXPORT( const char* ) + FT_Get_Postscript_Name( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Select_Charmap + * + * @description: + * Select a given charmap by its encoding tag (as listed in + * `freetype.h`). + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * encoding :: + * A handle to the selected encoding. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function returns an error if no charmap in the face corresponds + * to the encoding queried here. + * + * Because many fonts contain more than a single cmap for Unicode + * encoding, this function has some special code to select the one that + * covers Unicode best ('best' in the sense that a UCS-4 cmap is + * preferred to a UCS-2 cmap). It is thus preferable to @FT_Set_Charmap + * in this case. + */ + FT_EXPORT( FT_Error ) + FT_Select_Charmap( FT_Face face, + FT_Encoding encoding ); + + + /************************************************************************** + * + * @function: + * FT_Set_Charmap + * + * @description: + * Select a given charmap for character code to glyph index mapping. + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * charmap :: + * A handle to the selected charmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function returns an error if the charmap is not part of the face + * (i.e., if it is not listed in the `face->charmaps` table). + * + * It also fails if an OpenType type~14 charmap is selected (which + * doesn't map character codes to glyph indices at all). + */ + FT_EXPORT( FT_Error ) + FT_Set_Charmap( FT_Face face, + FT_CharMap charmap ); + + + /************************************************************************** + * + * @function: + * FT_Get_Charmap_Index + * + * @description: + * Retrieve index of a given charmap. + * + * @input: + * charmap :: + * A handle to a charmap. + * + * @return: + * The index into the array of character maps within the face to which + * `charmap` belongs. If an error occurs, -1 is returned. + * + */ + FT_EXPORT( FT_Int ) + FT_Get_Charmap_Index( FT_CharMap charmap ); + + + /************************************************************************** + * + * @function: + * FT_Get_Char_Index + * + * @description: + * Return the glyph index of a given character code. This function uses + * the currently selected charmap to do the mapping. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character code. + * + * @return: + * The glyph index. 0~means 'undefined character code'. + * + * @note: + * If you use FreeType to manipulate the contents of font files directly, + * be aware that the glyph index returned by this function doesn't always + * correspond to the internal indices used within the file. This is done + * to ensure that value~0 always corresponds to the 'missing glyph'. If + * the first glyph is not named '.notdef', then for Type~1 and Type~42 + * fonts, '.notdef' will be moved into the glyph ID~0 position, and + * whatever was there will be moved to the position '.notdef' had. For + * Type~1 fonts, if there is no '.notdef' glyph at all, then one will be + * created at index~0 and whatever was there will be moved to the last + * index -- Type~42 fonts are considered invalid under this condition. + */ + FT_EXPORT( FT_UInt ) + FT_Get_Char_Index( FT_Face face, + FT_ULong charcode ); + + + /************************************************************************** + * + * @function: + * FT_Get_First_Char + * + * @description: + * Return the first character code in the current charmap of a given + * face, together with its corresponding glyph index. + * + * @input: + * face :: + * A handle to the source face object. + * + * @output: + * agindex :: + * Glyph index of first character code. 0~if charmap is empty. + * + * @return: + * The charmap's first character code. + * + * @note: + * You should use this function together with @FT_Get_Next_Char to parse + * all character codes available in a given charmap. The code should + * look like this: + * + * ``` + * FT_ULong charcode; + * FT_UInt gindex; + * + * + * charcode = FT_Get_First_Char( face, &gindex ); + * while ( gindex != 0 ) + * { + * ... do something with (charcode,gindex) pair ... + * + * charcode = FT_Get_Next_Char( face, charcode, &gindex ); + * } + * ``` + * + * Be aware that character codes can have values up to 0xFFFFFFFF; this + * might happen for non-Unicode or malformed cmaps. However, even with + * regular Unicode encoding, so-called 'last resort fonts' (using SFNT + * cmap format 13, see function @FT_Get_CMap_Format) normally have + * entries for all Unicode characters up to 0x1FFFFF, which can cause *a + * lot* of iterations. + * + * Note that `*agindex` is set to~0 if the charmap is empty. The result + * itself can be~0 in two cases: if the charmap is empty or if the + * value~0 is the first valid character code. + */ + FT_EXPORT( FT_ULong ) + FT_Get_First_Char( FT_Face face, + FT_UInt *agindex ); + + + /************************************************************************** + * + * @function: + * FT_Get_Next_Char + * + * @description: + * Return the next character code in the current charmap of a given face + * following the value `char_code`, as well as the corresponding glyph + * index. + * + * @input: + * face :: + * A handle to the source face object. + * + * char_code :: + * The starting character code. + * + * @output: + * agindex :: + * Glyph index of next character code. 0~if charmap is empty. + * + * @return: + * The charmap's next character code. + * + * @note: + * You should use this function with @FT_Get_First_Char to walk over all + * character codes available in a given charmap. See the note for that + * function for a simple code example. + * + * Note that `*agindex` is set to~0 when there are no more codes in the + * charmap. + */ + FT_EXPORT( FT_ULong ) + FT_Get_Next_Char( FT_Face face, + FT_ULong char_code, + FT_UInt *agindex ); + + + /************************************************************************** + * + * @function: + * FT_Face_Properties + * + * @description: + * Set or override certain (library or module-wide) properties on a + * face-by-face basis. Useful for finer-grained control and avoiding + * locks on shared structures (threads can modify their own faces as they + * see fit). + * + * Contrary to @FT_Property_Set, this function uses @FT_Parameter so that + * you can pass multiple properties to the target face in one call. Note + * that only a subset of the available properties can be controlled. + * + * * @FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the + * property `no-stem-darkening` provided by the 'autofit', 'cff', + * 'type1', and 't1cid' modules; see @no-stem-darkening). + * + * * @FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding + * to function @FT_Library_SetLcdFilterWeights). + * + * * @FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type~1, and CID + * 'random' operator, corresponding to the `random-seed` property + * provided by the 'cff', 'type1', and 't1cid' modules; see + * @random-seed). + * + * Pass `NULL` as `data` in @FT_Parameter for a given tag to reset the + * option and use the library or module default again. + * + * @input: + * face :: + * A handle to the source face object. + * + * num_properties :: + * The number of properties that follow. + * + * properties :: + * A handle to an @FT_Parameter array with `num_properties` elements. + * + * @return: + * FreeType error code. 0~means success. + * + * @example: + * Here is an example that sets three properties. You must define + * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` to make the LCD filter examples + * work. + * + * ``` + * FT_Parameter property1; + * FT_Bool darken_stems = 1; + * + * FT_Parameter property2; + * FT_LcdFiveTapFilter custom_weight = + * { 0x11, 0x44, 0x56, 0x44, 0x11 }; + * + * FT_Parameter property3; + * FT_Int32 random_seed = 314159265; + * + * FT_Parameter properties[3] = { property1, + * property2, + * property3 }; + * + * + * property1.tag = FT_PARAM_TAG_STEM_DARKENING; + * property1.data = &darken_stems; + * + * property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; + * property2.data = custom_weight; + * + * property3.tag = FT_PARAM_TAG_RANDOM_SEED; + * property3.data = &random_seed; + * + * FT_Face_Properties( face, 3, properties ); + * ``` + * + * The next example resets a single property to its default value. + * + * ``` + * FT_Parameter property; + * + * + * property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; + * property.data = NULL; + * + * FT_Face_Properties( face, 1, &property ); + * ``` + * + * @since: + * 2.8 + * + */ + FT_EXPORT( FT_Error ) + FT_Face_Properties( FT_Face face, + FT_UInt num_properties, + FT_Parameter* properties ); + + + /************************************************************************** + * + * @function: + * FT_Get_Name_Index + * + * @description: + * Return the glyph index of a given glyph name. + * + * @input: + * face :: + * A handle to the source face object. + * + * glyph_name :: + * The glyph name. + * + * @return: + * The glyph index. 0~means 'undefined character code'. + */ + FT_EXPORT( FT_UInt ) + FT_Get_Name_Index( FT_Face face, + FT_String* glyph_name ); + + + /************************************************************************** + * + * @enum: + * FT_SUBGLYPH_FLAG_XXX + * + * @description: + * A list of constants describing subglyphs. Please refer to the 'glyf' + * table description in the OpenType specification for the meaning of the + * various flags (which get synthesized for non-OpenType subglyphs). + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description + * + * @values: + * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS :: + * FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES :: + * FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID :: + * FT_SUBGLYPH_FLAG_SCALE :: + * FT_SUBGLYPH_FLAG_XY_SCALE :: + * FT_SUBGLYPH_FLAG_2X2 :: + * FT_SUBGLYPH_FLAG_USE_MY_METRICS :: + * + */ +#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 +#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 +#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 +#define FT_SUBGLYPH_FLAG_SCALE 8 +#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 +#define FT_SUBGLYPH_FLAG_2X2 0x80 +#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 + + + /************************************************************************** + * + * @function: + * FT_Get_SubGlyph_Info + * + * @description: + * Retrieve a description of a given subglyph. Only use it if + * `glyph->format` is @FT_GLYPH_FORMAT_COMPOSITE; an error is returned + * otherwise. + * + * @input: + * glyph :: + * The source glyph slot. + * + * sub_index :: + * The index of the subglyph. Must be less than + * `glyph->num_subglyphs`. + * + * @output: + * p_index :: + * The glyph index of the subglyph. + * + * p_flags :: + * The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX. + * + * p_arg1 :: + * The subglyph's first argument (if any). + * + * p_arg2 :: + * The subglyph's second argument (if any). + * + * p_transform :: + * The subglyph transformation (if any). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The values of `*p_arg1`, `*p_arg2`, and `*p_transform` must be + * interpreted depending on the flags returned in `*p_flags`. See the + * OpenType specification for details. + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description + * + */ + FT_EXPORT( FT_Error ) + FT_Get_SubGlyph_Info( FT_GlyphSlot glyph, + FT_UInt sub_index, + FT_Int *p_index, + FT_UInt *p_flags, + FT_Int *p_arg1, + FT_Int *p_arg2, + 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-colour 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: + * base_interface + * + */ + + /************************************************************************** + * + * @enum: + * FT_FSTYPE_XXX + * + * @description: + * A list of bit flags used in the `fsType` field of the OS/2 table in a + * TrueType or OpenType font and the `FSType` entry in a PostScript font. + * These bit flags are returned by @FT_Get_FSType_Flags; they inform + * client applications of embedding and subsetting restrictions + * associated with a font. + * + * See + * https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf + * for more details. + * + * @values: + * FT_FSTYPE_INSTALLABLE_EMBEDDING :: + * Fonts with no fsType bit set may be embedded and permanently + * installed on the remote system by an application. + * + * FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING :: + * Fonts that have only this bit set must not be modified, embedded or + * exchanged in any manner without first obtaining permission of the + * font software copyright owner. + * + * FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: + * The font may be embedded and temporarily loaded on the remote + * system. Documents containing Preview & Print fonts must be opened + * 'read-only'; no edits can be applied to the document. + * + * FT_FSTYPE_EDITABLE_EMBEDDING :: + * The font may be embedded but must only be installed temporarily on + * other systems. In contrast to Preview & Print fonts, documents + * containing editable fonts may be opened for reading, editing is + * permitted, and changes may be saved. + * + * FT_FSTYPE_NO_SUBSETTING :: + * The font may not be subsetted prior to embedding. + * + * FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: + * Only bitmaps contained in the font may be embedded; no outline data + * may be embedded. If there are no bitmaps available in the font, + * then the font is unembeddable. + * + * @note: + * The flags are ORed together, thus more than a single value can be + * returned. + * + * While the `fsType` flags can indicate that a font may be embedded, a + * license with the font vendor may be separately required to use the + * font in this way. + */ +#define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000 +#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002 +#define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004 +#define FT_FSTYPE_EDITABLE_EMBEDDING 0x0008 +#define FT_FSTYPE_NO_SUBSETTING 0x0100 +#define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200 + + + /************************************************************************** + * + * @function: + * FT_Get_FSType_Flags + * + * @description: + * Return the `fsType` flags for a font. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * The `fsType` flags, see @FT_FSTYPE_XXX. + * + * @note: + * Use this function rather than directly reading the `fs_type` field in + * the @PS_FontInfoRec structure, which is only guaranteed to return the + * correct results for Type~1 fonts. + * + * @since: + * 2.3.8 + */ + FT_EXPORT( FT_UShort ) + FT_Get_FSType_Flags( FT_Face face ); + + + /************************************************************************** + * + * @section: + * glyph_variants + * + * @title: + * Unicode Variation Sequences + * + * @abstract: + * The FreeType~2 interface to Unicode Variation Sequences (UVS), using + * the SFNT cmap format~14. + * + * @description: + * Many characters, especially for CJK scripts, have variant forms. They + * are a sort of grey area somewhere between being totally irrelevant and + * semantically distinct; for this reason, the Unicode consortium decided + * to introduce Variation Sequences (VS), consisting of a Unicode base + * character and a variation selector instead of further extending the + * already huge number of characters. + * + * Unicode maintains two different sets, namely 'Standardized Variation + * Sequences' and registered 'Ideographic Variation Sequences' (IVS), + * collected in the 'Ideographic Variation Database' (IVD). + * + * https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt + * https://unicode.org/reports/tr37/ https://unicode.org/ivd/ + * + * To date (January 2017), the character with the most ideographic + * variations is U+9089, having 32 such IVS. + * + * Three Mongolian Variation Selectors have the values U+180B-U+180D; 256 + * generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F + * and U+E0100-U+E01EF. IVS currently use Variation Selectors from the + * range U+E0100-U+E01EF only. + * + * A VS consists of the base character value followed by a single + * Variation Selector. For example, to get the first variation of + * U+9089, you have to write the character sequence `U+9089 U+E0100`. + * + * Adobe and MS decided to support both standardized and ideographic VS + * with a new cmap subtable (format~14). It is an odd subtable because + * it is not a mapping of input code points to glyphs, but contains lists + * of all variations supported by the font. + * + * A variation may be either 'default' or 'non-default' for a given font. + * A default variation is the one you will get for that code point if you + * look it up in the standard Unicode cmap. A non-default variation is a + * different glyph. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Face_GetCharVariantIndex + * + * @description: + * Return the glyph index of a given character code as modified by the + * variation selector. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character code point in Unicode. + * + * variantSelector :: + * The Unicode code point of the variation selector. + * + * @return: + * The glyph index. 0~means either 'undefined character code', or + * 'undefined selector code', or 'no variation selector cmap subtable', + * or 'current CharMap is not Unicode'. + * + * @note: + * If you use FreeType to manipulate the contents of font files directly, + * be aware that the glyph index returned by this function doesn't always + * correspond to the internal indices used within the file. This is done + * to ensure that value~0 always corresponds to the 'missing glyph'. + * + * This function is only meaningful if + * a) the font has a variation selector cmap sub table, and + * b) the current charmap has a Unicode encoding. + * + * @since: + * 2.3.6 + */ + FT_EXPORT( FT_UInt ) + FT_Face_GetCharVariantIndex( FT_Face face, + FT_ULong charcode, + FT_ULong variantSelector ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetCharVariantIsDefault + * + * @description: + * Check whether this variation of this Unicode character is the one to + * be found in the charmap. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character codepoint in Unicode. + * + * variantSelector :: + * The Unicode codepoint of the variation selector. + * + * @return: + * 1~if found in the standard (Unicode) cmap, 0~if found in the variation + * selector cmap, or -1 if it is not a variation. + * + * @note: + * This function is only meaningful if the font has a variation selector + * cmap subtable. + * + * @since: + * 2.3.6 + */ + FT_EXPORT( FT_Int ) + FT_Face_GetCharVariantIsDefault( FT_Face face, + FT_ULong charcode, + FT_ULong variantSelector ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetVariantSelectors + * + * @description: + * Return a zero-terminated list of Unicode variation selectors found in + * the font. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * A pointer to an array of selector code points, or `NULL` if there is + * no valid variation selector cmap subtable. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + */ + FT_EXPORT( FT_UInt32* ) + FT_Face_GetVariantSelectors( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetVariantsOfChar + * + * @description: + * Return a zero-terminated list of Unicode variation selectors found for + * the specified character code. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character codepoint in Unicode. + * + * @return: + * A pointer to an array of variation selector code points that are + * active for the given character, or `NULL` if the corresponding list is + * empty. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + */ + FT_EXPORT( FT_UInt32* ) + FT_Face_GetVariantsOfChar( FT_Face face, + FT_ULong charcode ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetCharsOfVariant + * + * @description: + * Return a zero-terminated list of Unicode character codes found for the + * specified variation selector. + * + * @input: + * face :: + * A handle to the source face object. + * + * variantSelector :: + * The variation selector code point in Unicode. + * + * @return: + * A list of all the code points that are specified by this selector + * (both default and non-default codes are returned) or `NULL` if there + * is no valid cmap or the variation selector is invalid. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + */ + FT_EXPORT( FT_UInt32* ) + FT_Face_GetCharsOfVariant( FT_Face face, + FT_ULong variantSelector ); + + + /************************************************************************** + * + * @section: + * computations + * + * @title: + * Computations + * + * @abstract: + * Crunching fixed numbers and vectors. + * + * @description: + * This section contains various functions used to perform computations + * on 16.16 fixed-float numbers or 2d vectors. + * + * **Attention**: Most arithmetic functions take `FT_Long` as arguments. + * For historical reasons, FreeType was designed under the assumption + * that `FT_Long` is a 32-bit integer; results can thus be undefined if + * the arguments don't fit into 32 bits. + * + * @order: + * FT_MulDiv + * FT_MulFix + * FT_DivFix + * FT_RoundFix + * FT_CeilFix + * FT_FloorFix + * FT_Vector_Transform + * FT_Matrix_Multiply + * FT_Matrix_Invert + * + */ + + + /************************************************************************** + * + * @function: + * FT_MulDiv + * + * @description: + * Compute `(a*b)/c` with maximum accuracy, using a 64-bit intermediate + * integer whenever necessary. + * + * This function isn't necessarily as fast as some processor-specific + * operations, but is at least completely portable. + * + * @input: + * a :: + * The first multiplier. + * + * b :: + * The second multiplier. + * + * c :: + * The divisor. + * + * @return: + * The result of `(a*b)/c`. This function never traps when trying to + * divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on + * the signs of `a` and `b`. + */ + FT_EXPORT( FT_Long ) + FT_MulDiv( FT_Long a, + FT_Long b, + FT_Long c ); + + + /************************************************************************** + * + * @function: + * FT_MulFix + * + * @description: + * Compute `(a*b)/0x10000` with maximum accuracy. Its main use is to + * multiply a given value by a 16.16 fixed-point factor. + * + * @input: + * a :: + * The first multiplier. + * + * b :: + * The second multiplier. Use a 16.16 factor here whenever possible + * (see note below). + * + * @return: + * The result of `(a*b)/0x10000`. + * + * @note: + * This function has been optimized for the case where the absolute value + * of `a` is less than 2048, and `b` is a 16.16 scaling factor. As this + * happens mainly when scaling from notional units to fractional pixels + * in FreeType, it resulted in noticeable speed improvements between + * versions 2.x and 1.x. + * + * As a conclusion, always try to place a 16.16 factor as the _second_ + * argument of this function; this can make a great difference. + */ + FT_EXPORT( FT_Long ) + FT_MulFix( FT_Long a, + FT_Long b ); + + + /************************************************************************** + * + * @function: + * FT_DivFix + * + * @description: + * Compute `(a*0x10000)/b` with maximum accuracy. Its main use is to + * divide a given value by a 16.16 fixed-point factor. + * + * @input: + * a :: + * The numerator. + * + * b :: + * The denominator. Use a 16.16 factor here. + * + * @return: + * The result of `(a*0x10000)/b`. + */ + FT_EXPORT( FT_Long ) + FT_DivFix( FT_Long a, + FT_Long b ); + + + /************************************************************************** + * + * @function: + * FT_RoundFix + * + * @description: + * Round a 16.16 fixed number. + * + * @input: + * a :: + * The number to be rounded. + * + * @return: + * `a` rounded to the nearest 16.16 fixed integer, halfway cases away + * from zero. + * + * @note: + * The function uses wrap-around arithmetic. + */ + FT_EXPORT( FT_Fixed ) + FT_RoundFix( FT_Fixed a ); + + + /************************************************************************** + * + * @function: + * FT_CeilFix + * + * @description: + * Compute the smallest following integer of a 16.16 fixed number. + * + * @input: + * a :: + * The number for which the ceiling function is to be computed. + * + * @return: + * `a` rounded towards plus infinity. + * + * @note: + * The function uses wrap-around arithmetic. + */ + FT_EXPORT( FT_Fixed ) + FT_CeilFix( FT_Fixed a ); + + + /************************************************************************** + * + * @function: + * FT_FloorFix + * + * @description: + * Compute the largest previous integer of a 16.16 fixed number. + * + * @input: + * a :: + * The number for which the floor function is to be computed. + * + * @return: + * `a` rounded towards minus infinity. + */ + FT_EXPORT( FT_Fixed ) + FT_FloorFix( FT_Fixed a ); + + + /************************************************************************** + * + * @function: + * FT_Vector_Transform + * + * @description: + * Transform a single vector through a 2x2 matrix. + * + * @inout: + * vector :: + * The target vector to transform. + * + * @input: + * matrix :: + * A pointer to the source 2x2 matrix. + * + * @note: + * The result is undefined if either `vector` or `matrix` is invalid. + */ + FT_EXPORT( void ) + FT_Vector_Transform( FT_Vector* vector, + const FT_Matrix* matrix ); + + + /************************************************************************** + * + * @section: + * version + * + * @title: + * FreeType Version + * + * @abstract: + * Functions and macros related to FreeType versions. + * + * @description: + * Note that those functions and macros are of limited use because even a + * new release of FreeType with only documentation changes increases the + * version number. + * + * @order: + * FT_Library_Version + * + * FREETYPE_MAJOR + * FREETYPE_MINOR + * FREETYPE_PATCH + * + * FT_Face_CheckTrueTypePatents + * FT_Face_SetUnpatentedHinting + * + */ + + + /************************************************************************** + * + * @enum: + * FREETYPE_XXX + * + * @description: + * These three macros identify the FreeType source code version. Use + * @FT_Library_Version to access them at runtime. + * + * @values: + * FREETYPE_MAJOR :: + * The major version number. + * FREETYPE_MINOR :: + * The minor version number. + * FREETYPE_PATCH :: + * The patch level. + * + * @note: + * The version number of FreeType if built as a dynamic link library with + * the 'libtool' package is _not_ controlled by these three macros. + * + */ +#define FREETYPE_MAJOR 2 +#define FREETYPE_MINOR 10 +#define FREETYPE_PATCH 0 + + + /************************************************************************** + * + * @function: + * FT_Library_Version + * + * @description: + * Return the version of the FreeType library being used. This is useful + * when dynamically linking to the library, since one cannot use the + * macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and @FREETYPE_PATCH. + * + * @input: + * library :: + * A source library handle. + * + * @output: + * amajor :: + * The major version number. + * + * aminor :: + * The minor version number. + * + * apatch :: + * The patch version number. + * + * @note: + * The reason why this function takes a `library` argument is because + * certain programs implement library initialization in a custom way that + * doesn't use @FT_Init_FreeType. + * + * In such cases, the library version might not be available before the + * library object has been created. + */ + FT_EXPORT( void ) + FT_Library_Version( FT_Library library, + FT_Int *amajor, + FT_Int *aminor, + FT_Int *apatch ); + + + /************************************************************************** + * + * @function: + * FT_Face_CheckTrueTypePatents + * + * @description: + * Deprecated, does nothing. + * + * @input: + * face :: + * A face handle. + * + * @return: + * Always returns false. + * + * @note: + * Since May 2010, TrueType hinting is no longer patented. + * + * @since: + * 2.3.5 + */ + FT_EXPORT( FT_Bool ) + FT_Face_CheckTrueTypePatents( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Face_SetUnpatentedHinting + * + * @description: + * Deprecated, does nothing. + * + * @input: + * face :: + * A face handle. + * + * value :: + * New boolean setting. + * + * @return: + * Always returns false. + * + * @note: + * Since May 2010, TrueType hinting is no longer patented. + * + * @since: + * 2.3.5 + */ + FT_EXPORT( FT_Bool ) + FT_Face_SetUnpatentedHinting( FT_Face face, + FT_Bool value ); + + /* */ + + +FT_END_HEADER + +#endif /* FREETYPE_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftadvanc.h b/win32/include/freetype/freetype/ftadvanc.h new file mode 100644 index 00000000..95c38f92 --- /dev/null +++ b/win32/include/freetype/freetype/ftadvanc.h @@ -0,0 +1,188 @@ +/**************************************************************************** + * + * ftadvanc.h + * + * Quick computation of advance widths (specification only). + * + * Copyright (C) 2008-2019 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 FTADVANC_H_ +#define FTADVANC_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * quick_advance + * + * @title: + * Quick retrieval of advance values + * + * @abstract: + * Retrieve horizontal and vertical advance values without processing + * glyph outlines, if possible. + * + * @description: + * This section contains functions to quickly extract advance values + * without handling glyph outlines, if possible. + * + * @order: + * FT_Get_Advance + * FT_Get_Advances + * + */ + + + /************************************************************************** + * + * @enum: + * FT_ADVANCE_FLAG_FAST_ONLY + * + * @description: + * A bit-flag to be OR-ed with the `flags` parameter of the + * @FT_Get_Advance and @FT_Get_Advances functions. + * + * If set, it indicates that you want these functions to fail if the + * corresponding hinting mode or font driver doesn't allow for very quick + * advance computation. + * + * Typically, glyphs that are either unscaled, unhinted, bitmapped, or + * light-hinted can have their advance width computed very quickly. + * + * Normal and bytecode hinted modes that require loading, scaling, and + * hinting of the glyph outline, are extremely slow by comparison. + */ +#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L + + + /************************************************************************** + * + * @function: + * FT_Get_Advance + * + * @description: + * Retrieve the advance value of a given glyph outline in an @FT_Face. + * + * @input: + * face :: + * The source @FT_Face handle. + * + * gindex :: + * The glyph index. + * + * load_flags :: + * A set of bit flags similar to those used when calling + * @FT_Load_Glyph, used to determine what kind of advances you need. + * @output: + * padvance :: + * The advance value. If scaling is performed (based on the value of + * `load_flags`), the advance value is in 16.16 format. Otherwise, it + * is in font units. + * + * If @FT_LOAD_VERTICAL_LAYOUT is set, this is the vertical advance + * corresponding to a vertical layout. Otherwise, it is the horizontal + * advance in a horizontal layout. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if + * the corresponding font backend doesn't have a quick way to retrieve + * the advances. + * + * A scaled advance is returned in 16.16 format but isn't transformed by + * the affine transformation specified by @FT_Set_Transform. + */ + FT_EXPORT( FT_Error ) + FT_Get_Advance( FT_Face face, + FT_UInt gindex, + FT_Int32 load_flags, + FT_Fixed *padvance ); + + + /************************************************************************** + * + * @function: + * FT_Get_Advances + * + * @description: + * Retrieve the advance values of several glyph outlines in an @FT_Face. + * + * @input: + * face :: + * The source @FT_Face handle. + * + * start :: + * The first glyph index. + * + * count :: + * The number of advance values you want to retrieve. + * + * load_flags :: + * A set of bit flags similar to those used when calling + * @FT_Load_Glyph. + * + * @output: + * padvance :: + * The advance values. This array, to be provided by the caller, must + * contain at least `count` elements. + * + * If scaling is performed (based on the value of `load_flags`), the + * advance values are in 16.16 format. Otherwise, they are in font + * units. + * + * If @FT_LOAD_VERTICAL_LAYOUT is set, these are the vertical advances + * corresponding to a vertical layout. Otherwise, they are the + * horizontal advances in a horizontal layout. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if + * the corresponding font backend doesn't have a quick way to retrieve + * the advances. + * + * Scaled advances are returned in 16.16 format but aren't transformed by + * the affine transformation specified by @FT_Set_Transform. + */ + FT_EXPORT( FT_Error ) + FT_Get_Advances( FT_Face face, + FT_UInt start, + FT_UInt count, + FT_Int32 load_flags, + FT_Fixed *padvances ); + + /* */ + + +FT_END_HEADER + +#endif /* FTADVANC_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftbbox.h b/win32/include/freetype/freetype/ftbbox.h new file mode 100644 index 00000000..22da70c0 --- /dev/null +++ b/win32/include/freetype/freetype/ftbbox.h @@ -0,0 +1,102 @@ +/**************************************************************************** + * + * ftbbox.h + * + * FreeType exact bbox computation (specification). + * + * Copyright (C) 1996-2019 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. + * + */ + + + /************************************************************************** + * + * This component has a _single_ role: to compute exact outline bounding + * boxes. + * + * It is separated from the rest of the engine for various technical + * reasons. It may well be integrated in 'ftoutln' later. + * + */ + + +#ifndef FTBBOX_H_ +#define FTBBOX_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * outline_processing + * + */ + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_BBox + * + * @description: + * Compute the exact bounding box of an outline. This is slower than + * computing the control box. However, it uses an advanced algorithm + * that returns _very_ quickly when the two boxes coincide. Otherwise, + * the outline Bezier arcs are traversed to extract their extrema. + * + * @input: + * outline :: + * A pointer to the source outline. + * + * @output: + * abbox :: + * The outline's exact bounding box. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the font is tricky and the glyph has been loaded with + * @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get + * reasonable values for the BBox it is necessary to load the glyph at a + * large ppem value (so that the hinting instructions can properly shift + * and scale the subglyphs), then extracting the BBox, which can be + * eventually converted back to font units. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Get_BBox( FT_Outline* outline, + FT_BBox *abbox ); + + /* */ + + +FT_END_HEADER + +#endif /* FTBBOX_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/win32/include/freetype/freetype/ftbdf.h b/win32/include/freetype/freetype/ftbdf.h new file mode 100644 index 00000000..1c46da59 --- /dev/null +++ b/win32/include/freetype/freetype/ftbdf.h @@ -0,0 +1,213 @@ +/**************************************************************************** + * + * ftbdf.h + * + * FreeType API for accessing BDF-specific strings (specification). + * + * Copyright (C) 2002-2019 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 FTBDF_H_ +#define FTBDF_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * bdf_fonts + * + * @title: + * BDF and PCF Files + * + * @abstract: + * BDF and PCF specific API. + * + * @description: + * This section contains the declaration of functions specific to BDF and + * PCF fonts. + * + */ + + + /************************************************************************** + * + * @enum: + * BDF_PropertyType + * + * @description: + * A list of BDF property types. + * + * @values: + * BDF_PROPERTY_TYPE_NONE :: + * Value~0 is used to indicate a missing property. + * + * BDF_PROPERTY_TYPE_ATOM :: + * Property is a string atom. + * + * BDF_PROPERTY_TYPE_INTEGER :: + * Property is a 32-bit signed integer. + * + * BDF_PROPERTY_TYPE_CARDINAL :: + * Property is a 32-bit unsigned integer. + */ + typedef enum BDF_PropertyType_ + { + BDF_PROPERTY_TYPE_NONE = 0, + BDF_PROPERTY_TYPE_ATOM = 1, + BDF_PROPERTY_TYPE_INTEGER = 2, + BDF_PROPERTY_TYPE_CARDINAL = 3 + + } BDF_PropertyType; + + + /************************************************************************** + * + * @type: + * BDF_Property + * + * @description: + * A handle to a @BDF_PropertyRec structure to model a given BDF/PCF + * property. + */ + typedef struct BDF_PropertyRec_* BDF_Property; + + + /************************************************************************** + * + * @struct: + * BDF_PropertyRec + * + * @description: + * This structure models a given BDF/PCF property. + * + * @fields: + * type :: + * The property type. + * + * u.atom :: + * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be + * `NULL`, indicating an empty string. + * + * u.integer :: + * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER. + * + * u.cardinal :: + * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL. + */ + typedef struct BDF_PropertyRec_ + { + BDF_PropertyType type; + union { + const char* atom; + FT_Int32 integer; + FT_UInt32 cardinal; + + } u; + + } BDF_PropertyRec; + + + /************************************************************************** + * + * @function: + * FT_Get_BDF_Charset_ID + * + * @description: + * Retrieve a BDF font character set identity, according to the BDF + * specification. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * acharset_encoding :: + * Charset encoding, as a C~string, owned by the face. + * + * acharset_registry :: + * Charset registry, as a C~string, owned by the face. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with BDF faces, returning an error otherwise. + */ + FT_EXPORT( FT_Error ) + FT_Get_BDF_Charset_ID( FT_Face face, + const char* *acharset_encoding, + const char* *acharset_registry ); + + + /************************************************************************** + * + * @function: + * FT_Get_BDF_Property + * + * @description: + * Retrieve a BDF property from a BDF or PCF font file. + * + * @input: + * face :: + * A handle to the input face. + * + * name :: + * The property name. + * + * @output: + * aproperty :: + * The property. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function works with BDF _and_ PCF fonts. It returns an error + * otherwise. It also returns an error if the property is not in the + * font. + * + * A 'property' is a either key-value pair within the STARTPROPERTIES + * ... ENDPROPERTIES block of a BDF font or a key-value pair from the + * `info->props` array within a `FontRec` structure of a PCF font. + * + * Integer properties are always stored as 'signed' within PCF fonts; + * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value + * for BDF fonts only. + * + * In case of error, `aproperty->type` is always set to + * @BDF_PROPERTY_TYPE_NONE. + */ + FT_EXPORT( FT_Error ) + FT_Get_BDF_Property( FT_Face face, + const char* prop_name, + BDF_PropertyRec *aproperty ); + + /* */ + +FT_END_HEADER + +#endif /* FTBDF_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftbitmap.h b/win32/include/freetype/freetype/ftbitmap.h new file mode 100644 index 00000000..a6acdb96 --- /dev/null +++ b/win32/include/freetype/freetype/ftbitmap.h @@ -0,0 +1,330 @@ +/**************************************************************************** + * + * ftbitmap.h + * + * FreeType utility functions for bitmaps (specification). + * + * Copyright (C) 2004-2019 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 FTBITMAP_H_ +#define FTBITMAP_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H +#include FT_COLOR_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * bitmap_handling + * + * @title: + * Bitmap Handling + * + * @abstract: + * Handling FT_Bitmap objects. + * + * @description: + * This section contains functions for handling @FT_Bitmap objects, + * automatically adjusting the target's bitmap buffer size as needed. + * + * Note that none of the functions changes the bitmap's 'flow' (as + * indicated by the sign of the `pitch` field in @FT_Bitmap). + * + * To set the flow, assign an appropriate positive or negative value to + * the `pitch` field of the target @FT_Bitmap object after calling + * @FT_Bitmap_Init but before calling any of the other functions + * described here. + */ + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Init + * + * @description: + * Initialize a pointer to an @FT_Bitmap structure. + * + * @inout: + * abitmap :: + * A pointer to the bitmap structure. + * + * @note: + * A deprecated name for the same function is `FT_Bitmap_New`. + */ + FT_EXPORT( void ) + FT_Bitmap_Init( FT_Bitmap *abitmap ); + + + /* deprecated */ + FT_EXPORT( void ) + FT_Bitmap_New( FT_Bitmap *abitmap ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Copy + * + * @description: + * Copy a bitmap into another one. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * A handle to the source bitmap. + * + * @output: + * target :: + * A handle to the target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Copy( FT_Library library, + const FT_Bitmap *source, + FT_Bitmap *target ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Embolden + * + * @description: + * Embolden a bitmap. The new bitmap will be about `xStrength` pixels + * wider and `yStrength` pixels higher. The left and bottom borders are + * kept unchanged. + * + * @input: + * library :: + * A handle to a library object. + * + * xStrength :: + * How strong the glyph is emboldened horizontally. Expressed in 26.6 + * pixel format. + * + * yStrength :: + * How strong the glyph is emboldened vertically. Expressed in 26.6 + * pixel format. + * + * @inout: + * bitmap :: + * A handle to the target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The current implementation restricts `xStrength` to be less than or + * equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. + * + * If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, you + * should call @FT_GlyphSlot_Own_Bitmap on the slot first. + * + * Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format are + * converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Embolden( FT_Library library, + FT_Bitmap* bitmap, + FT_Pos xStrength, + FT_Pos yStrength ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Convert + * + * @description: + * Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to + * a bitmap object with depth 8bpp, making the number of used bytes per + * line (a.k.a. the 'pitch') a multiple of `alignment`. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * The source bitmap. + * + * alignment :: + * The pitch of the bitmap is a multiple of this argument. Common + * values are 1, 2, or 4. + * + * @output: + * target :: + * The target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * It is possible to call @FT_Bitmap_Convert multiple times without + * calling @FT_Bitmap_Done (the memory is simply reallocated). + * + * Use @FT_Bitmap_Done to finally remove the bitmap object. + * + * The `library` argument is taken to have access to FreeType's memory + * handling functions. + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Convert( FT_Library library, + const FT_Bitmap *source, + FT_Bitmap *target, + FT_Int alignment ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Blend + * + * @description: + * Blend a bitmap onto another bitmap, using a given color. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * The source bitmap, which can have any @FT_Pixel_Mode format. + * + * source_offset :: + * The offset vector to the upper left corner of the source bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * color :: + * The color used to draw `source` onto `target`. + * + * @inout: + * target :: + * A handle to an `FT_Bitmap` object. It should be either initialized + * as empty with a call to @FT_Bitmap_Init, or it should be of type + * @FT_PIXEL_MODE_BGRA. + * + * atarget_offset :: + * The offset vector to the upper left corner of the target bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function doesn't perform clipping. + * + * The bitmap in `target` gets allocated or reallocated as needed; the + * vector `atarget_offset` is updated accordingly. + * + * In case of allocation or reallocation, the bitmap's pitch is set to + * `4 * width`. Both `source` and `target` must have the same bitmap + * flow (as indicated by the sign of the `pitch` field). + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Blend( FT_Library library, + const FT_Bitmap* source, + const FT_Vector source_offset, + FT_Bitmap* target, + FT_Vector *atarget_offset, + FT_Color color ); + + + /************************************************************************** + * + * @function: + * FT_GlyphSlot_Own_Bitmap + * + * @description: + * Make sure that a glyph slot owns `slot->bitmap`. + * + * @input: + * slot :: + * The glyph slot. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function is to be used in combination with @FT_Bitmap_Embolden. + */ + FT_EXPORT( FT_Error ) + FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Done + * + * @description: + * Destroy a bitmap object initialized with @FT_Bitmap_Init. + * + * @input: + * library :: + * A handle to a library object. + * + * bitmap :: + * The bitmap object to be freed. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `library` argument is taken to have access to FreeType's memory + * handling functions. + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Done( FT_Library library, + FT_Bitmap *bitmap ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTBITMAP_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftbzip2.h b/win32/include/freetype/freetype/ftbzip2.h new file mode 100644 index 00000000..ae88cfdb --- /dev/null +++ b/win32/include/freetype/freetype/ftbzip2.h @@ -0,0 +1,102 @@ +/**************************************************************************** + * + * ftbzip2.h + * + * Bzip2-compressed stream support. + * + * Copyright (C) 2010-2019 by + * Joel Klinghed. + * + * 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 FTBZIP2_H_ +#define FTBZIP2_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * bzip2 + * + * @title: + * BZIP2 Streams + * + * @abstract: + * Using bzip2-compressed font files. + * + * @description: + * This section contains the declaration of Bzip2-specific functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Stream_OpenBzip2 + * + * @description: + * Open a new stream to parse bzip2-compressed font files. This is + * mainly used to support the compressed `*.pcf.bz2` fonts that come with + * XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream. + * + * In certain builds of the library, bzip2 compression recognition is + * automatically handled when calling @FT_New_Face or @FT_Open_Face. + * This means that if no font driver is capable of handling the raw + * compressed file, the library will try to open a bzip2 compressed + * stream from it and re-open the face with it. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with bzip2 support. + */ + FT_EXPORT( FT_Error ) + FT_Stream_OpenBzip2( FT_Stream stream, + FT_Stream source ); + + /* */ + + +FT_END_HEADER + +#endif /* FTBZIP2_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftcache.h b/win32/include/freetype/freetype/ftcache.h new file mode 100644 index 00000000..0d589d0b --- /dev/null +++ b/win32/include/freetype/freetype/ftcache.h @@ -0,0 +1,1088 @@ +/**************************************************************************** + * + * ftcache.h + * + * FreeType Cache subsystem (specification). + * + * Copyright (C) 1996-2019 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 FTCACHE_H_ +#define FTCACHE_H_ + + +#include <ft2build.h> +#include FT_GLYPH_H + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * cache_subsystem + * + * @title: + * Cache Sub-System + * + * @abstract: + * How to cache face, size, and glyph data with FreeType~2. + * + * @description: + * This section describes the FreeType~2 cache sub-system, which is used + * to limit the number of concurrently opened @FT_Face and @FT_Size + * objects, as well as caching information like character maps and glyph + * images while limiting their maximum memory usage. + * + * Note that all types and functions begin with the `FTC_` prefix. + * + * The cache is highly portable and thus doesn't know anything about the + * fonts installed on your system, or how to access them. This implies + * the following scheme: + * + * First, available or installed font faces are uniquely identified by + * @FTC_FaceID values, provided to the cache by the client. Note that + * the cache only stores and compares these values, and doesn't try to + * interpret them in any way. + * + * Second, the cache calls, only when needed, a client-provided function + * to convert an @FTC_FaceID into a new @FT_Face object. The latter is + * then completely managed by the cache, including its termination + * through @FT_Done_Face. To monitor termination of face objects, the + * finalizer callback in the `generic` field of the @FT_Face object can + * be used, which might also be used to store the @FTC_FaceID of the + * face. + * + * Clients are free to map face IDs to anything else. The most simple + * usage is to associate them to a (pathname,face_index) pair that is + * used to call @FT_New_Face. However, more complex schemes are also + * possible. + * + * Note that for the cache to work correctly, the face ID values must be + * **persistent**, which means that the contents they point to should not + * change at runtime, or that their value should not become invalid. + * + * If this is unavoidable (e.g., when a font is uninstalled at runtime), + * you should call @FTC_Manager_RemoveFaceID as soon as possible, to let + * the cache get rid of any references to the old @FTC_FaceID it may keep + * internally. Failure to do so will lead to incorrect behaviour or even + * crashes. + * + * To use the cache, start with calling @FTC_Manager_New to create a new + * @FTC_Manager object, which models a single cache instance. You can + * then look up @FT_Face and @FT_Size objects with + * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively. + * + * If you want to use the charmap caching, call @FTC_CMapCache_New, then + * 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 + * @FT_Glyph objects from the cache. + * + * If you need lots of small bitmaps, it is much more memory efficient to + * call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This + * returns @FTC_SBitRec structures, which are used to store small bitmaps + * directly. (A small bitmap is one whose metrics and dimensions all fit + * into 8-bit integers). + * + * We hope to also provide a kerning cache in the near future. + * + * + * @order: + * FTC_Manager + * FTC_FaceID + * FTC_Face_Requester + * + * FTC_Manager_New + * FTC_Manager_Reset + * FTC_Manager_Done + * FTC_Manager_LookupFace + * FTC_Manager_LookupSize + * FTC_Manager_RemoveFaceID + * + * FTC_Node + * FTC_Node_Unref + * + * FTC_ImageCache + * FTC_ImageCache_New + * FTC_ImageCache_Lookup + * + * FTC_SBit + * FTC_SBitCache + * FTC_SBitCache_New + * FTC_SBitCache_Lookup + * + * FTC_CMapCache + * FTC_CMapCache_New + * FTC_CMapCache_Lookup + * + *************************************************************************/ + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** BASIC TYPE DEFINITIONS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @type: + * FTC_FaceID + * + * @description: + * An opaque pointer type that is used to identity face objects. The + * contents of such objects is application-dependent. + * + * These pointers are typically used to point to a user-defined structure + * containing a font file path, and face index. + * + * @note: + * Never use `NULL` as a valid @FTC_FaceID. + * + * Face IDs are passed by the client to the cache manager that calls, + * when needed, the @FTC_Face_Requester to translate them into new + * @FT_Face objects. + * + * If the content of a given face ID changes at runtime, or if the value + * becomes invalid (e.g., when uninstalling a font), you should + * immediately call @FTC_Manager_RemoveFaceID before any other cache + * function. + * + * Failure to do so will result in incorrect behaviour or even memory + * leaks and crashes. + */ + typedef FT_Pointer FTC_FaceID; + + + /************************************************************************** + * + * @functype: + * FTC_Face_Requester + * + * @description: + * A callback function provided by client applications. It is used by + * the cache manager to translate a given @FTC_FaceID into a new valid + * @FT_Face object, on demand. + * + * @input: + * face_id :: + * The face ID to resolve. + * + * library :: + * A handle to a FreeType library object. + * + * req_data :: + * Application-provided request data (see note below). + * + * @output: + * aface :: + * A new @FT_Face handle. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The third parameter `req_data` is the same as the one passed by the + * client when @FTC_Manager_New is called. + * + * The face requester should not perform funny things on the returned + * face object, like creating a new @FT_Size for it, or setting a + * transformation through @FT_Set_Transform! + */ + typedef FT_Error + (*FTC_Face_Requester)( FTC_FaceID face_id, + FT_Library library, + FT_Pointer req_data, + FT_Face* aface ); + + /* */ + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CACHE MANAGER OBJECT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @type: + * FTC_Manager + * + * @description: + * This object corresponds to one instance of the cache-subsystem. It is + * used to cache one or more @FT_Face objects, along with corresponding + * @FT_Size objects. + * + * The manager intentionally limits the total number of opened @FT_Face + * and @FT_Size objects to control memory usage. See the `max_faces` and + * `max_sizes` parameters of @FTC_Manager_New. + * + * The manager is also used to cache 'nodes' of various types while + * limiting their total memory usage. + * + * All limitations are enforced by keeping lists of managed objects in + * most-recently-used order, and flushing old nodes to make room for new + * ones. + */ + typedef struct FTC_ManagerRec_* FTC_Manager; + + + /************************************************************************** + * + * @type: + * FTC_Node + * + * @description: + * An opaque handle to a cache node object. Each cache node is + * reference-counted. A node with a count of~0 might be flushed out of a + * full cache whenever a lookup request is performed. + * + * If you look up nodes, you have the ability to 'acquire' them, i.e., to + * increment their reference count. This will prevent the node from + * being flushed out of the cache until you explicitly 'release' it (see + * @FTC_Node_Unref). + * + * See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. + */ + typedef struct FTC_NodeRec_* FTC_Node; + + + /************************************************************************** + * + * @function: + * FTC_Manager_New + * + * @description: + * Create a new cache manager. + * + * @input: + * library :: + * The parent FreeType library handle to use. + * + * max_faces :: + * Maximum number of opened @FT_Face objects managed by this cache + * instance. Use~0 for defaults. + * + * max_sizes :: + * Maximum number of opened @FT_Size objects managed by this cache + * instance. Use~0 for defaults. + * + * max_bytes :: + * Maximum number of bytes to use for cached data nodes. Use~0 for + * defaults. Note that this value does not account for managed + * @FT_Face and @FT_Size objects. + * + * requester :: + * An application-provided callback used to translate face IDs into + * real @FT_Face objects. + * + * req_data :: + * A generic pointer that is passed to the requester each time it is + * called (see @FTC_Face_Requester). + * + * @output: + * amanager :: + * A handle to a new manager object. 0~in case of failure. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FTC_Manager_New( FT_Library library, + FT_UInt max_faces, + FT_UInt max_sizes, + FT_ULong max_bytes, + FTC_Face_Requester requester, + FT_Pointer req_data, + FTC_Manager *amanager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_Reset + * + * @description: + * Empty a given cache manager. This simply gets rid of all the + * currently cached @FT_Face and @FT_Size objects within the manager. + * + * @inout: + * manager :: + * A handle to the manager. + */ + FT_EXPORT( void ) + FTC_Manager_Reset( FTC_Manager manager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_Done + * + * @description: + * Destroy a given manager after emptying it. + * + * @input: + * manager :: + * A handle to the target cache manager object. + */ + FT_EXPORT( void ) + FTC_Manager_Done( FTC_Manager manager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_LookupFace + * + * @description: + * Retrieve the @FT_Face object that corresponds to a given face ID + * through a cache manager. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * face_id :: + * The ID of the face object. + * + * @output: + * aface :: + * A handle to the face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned @FT_Face object is always owned by the manager. You + * should never try to discard it yourself. + * + * The @FT_Face object doesn't necessarily have a current size object + * (i.e., face->size can be~0). If you need a specific 'font size', use + * @FTC_Manager_LookupSize instead. + * + * Never change the face's transformation matrix (i.e., never call the + * @FT_Set_Transform function) on a returned face! If you need to + * transform glyphs, do it yourself after glyph loading. + * + * When you perform a lookup, out-of-memory errors are detected _within_ + * the lookup and force incremental flushes of the cache until enough + * memory is released for the lookup to succeed. + * + * If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already + * been completely flushed, and still no memory was available for the + * operation. + */ + FT_EXPORT( FT_Error ) + FTC_Manager_LookupFace( FTC_Manager manager, + FTC_FaceID face_id, + FT_Face *aface ); + + + /************************************************************************** + * + * @struct: + * FTC_ScalerRec + * + * @description: + * A structure used to describe a given character size in either pixels + * or points to the cache manager. See @FTC_Manager_LookupSize. + * + * @fields: + * face_id :: + * The source face ID. + * + * width :: + * The character width. + * + * height :: + * The character height. + * + * pixel :: + * A Boolean. If 1, the `width` and `height` fields are interpreted as + * integer pixel character sizes. Otherwise, they are expressed as + * 1/64th of points. + * + * x_res :: + * Only used when `pixel` is value~0 to indicate the horizontal + * resolution in dpi. + * + * y_res :: + * Only used when `pixel` is value~0 to indicate the vertical + * resolution in dpi. + * + * @note: + * This type is mainly used to retrieve @FT_Size objects through the + * cache manager. + */ + typedef struct FTC_ScalerRec_ + { + FTC_FaceID face_id; + FT_UInt width; + FT_UInt height; + FT_Int pixel; + FT_UInt x_res; + FT_UInt y_res; + + } FTC_ScalerRec; + + + /************************************************************************** + * + * @struct: + * FTC_Scaler + * + * @description: + * A handle to an @FTC_ScalerRec structure. + */ + typedef struct FTC_ScalerRec_* FTC_Scaler; + + + /************************************************************************** + * + * @function: + * FTC_Manager_LookupSize + * + * @description: + * Retrieve the @FT_Size object that corresponds to a given + * @FTC_ScalerRec pointer through a cache manager. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * scaler :: + * A scaler handle. + * + * @output: + * asize :: + * A handle to the size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned @FT_Size object is always owned by the manager. You + * should never try to discard it by yourself. + * + * You can access the parent @FT_Face object simply as `size->face` if + * you need it. Note that this object is also owned by the manager. + * + * @note: + * When you perform a lookup, out-of-memory errors are detected _within_ + * the lookup and force incremental flushes of the cache until enough + * memory is released for the lookup to succeed. + * + * If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already + * been completely flushed, and still no memory is available for the + * operation. + */ + FT_EXPORT( FT_Error ) + FTC_Manager_LookupSize( FTC_Manager manager, + FTC_Scaler scaler, + FT_Size *asize ); + + + /************************************************************************** + * + * @function: + * FTC_Node_Unref + * + * @description: + * Decrement a cache node's internal reference count. When the count + * reaches 0, it is not destroyed but becomes eligible for subsequent + * cache flushes. + * + * @input: + * node :: + * The cache node handle. + * + * manager :: + * The cache manager handle. + */ + FT_EXPORT( void ) + FTC_Node_Unref( FTC_Node node, + FTC_Manager manager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_RemoveFaceID + * + * @description: + * A special function used to indicate to the cache manager that a given + * @FTC_FaceID is no longer valid, either because its content changed, or + * because it was deallocated or uninstalled. + * + * @input: + * manager :: + * The cache manager handle. + * + * face_id :: + * The @FTC_FaceID to be removed. + * + * @note: + * This function flushes all nodes from the cache corresponding to this + * `face_id`, with the exception of nodes with a non-null reference + * count. + * + * Such nodes are however modified internally so as to never appear in + * later lookups with the same `face_id` value, and to be immediately + * destroyed when released by all their users. + * + */ + FT_EXPORT( void ) + FTC_Manager_RemoveFaceID( FTC_Manager manager, + FTC_FaceID face_id ); + + + /************************************************************************** + * + * @type: + * FTC_CMapCache + * + * @description: + * An opaque handle used to model a charmap cache. This cache is to hold + * character codes -> glyph indices mappings. + * + */ + typedef struct FTC_CMapCacheRec_* FTC_CMapCache; + + + /************************************************************************** + * + * @function: + * FTC_CMapCache_New + * + * @description: + * Create a new charmap cache. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * @output: + * acache :: + * A new cache handle. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Like all other caches, this one will be destroyed with the cache + * manager. + * + */ + FT_EXPORT( FT_Error ) + FTC_CMapCache_New( FTC_Manager manager, + FTC_CMapCache *acache ); + + + /************************************************************************** + * + * @function: + * FTC_CMapCache_Lookup + * + * @description: + * Translate a character code into a glyph index, using the charmap + * cache. + * + * @input: + * cache :: + * A charmap cache handle. + * + * face_id :: + * The source face ID. + * + * cmap_index :: + * The index of the charmap in the source face. Any negative value + * means to use the cache @FT_Face's default charmap. + * + * char_code :: + * The character code (in the corresponding charmap). + * + * @return: + * Glyph index. 0~means 'no glyph'. + * + */ + FT_EXPORT( FT_UInt ) + FTC_CMapCache_Lookup( FTC_CMapCache cache, + FTC_FaceID face_id, + FT_Int cmap_index, + FT_UInt32 char_code ); + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** IMAGE CACHE OBJECT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * FTC_ImageTypeRec + * + * @description: + * A structure used to model the type of images in a glyph cache. + * + * @fields: + * face_id :: + * The face ID. + * + * width :: + * The width in pixels. + * + * height :: + * The height in pixels. + * + * flags :: + * The load flags, as in @FT_Load_Glyph. + * + */ + typedef struct FTC_ImageTypeRec_ + { + FTC_FaceID face_id; + FT_UInt width; + FT_UInt height; + FT_Int32 flags; + + } FTC_ImageTypeRec; + + + /************************************************************************** + * + * @type: + * FTC_ImageType + * + * @description: + * A handle to an @FTC_ImageTypeRec structure. + * + */ + typedef struct FTC_ImageTypeRec_* FTC_ImageType; + + + /* */ + + +#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \ + ( (d1)->face_id == (d2)->face_id && \ + (d1)->width == (d2)->width && \ + (d1)->flags == (d2)->flags ) + + + /************************************************************************** + * + * @type: + * FTC_ImageCache + * + * @description: + * A handle to a glyph image cache object. They are designed to hold + * many distinct glyph images while not exceeding a certain memory + * threshold. + */ + typedef struct FTC_ImageCacheRec_* FTC_ImageCache; + + + /************************************************************************** + * + * @function: + * FTC_ImageCache_New + * + * @description: + * Create a new glyph image cache. + * + * @input: + * manager :: + * The parent manager for the image cache. + * + * @output: + * acache :: + * A handle to the new glyph image cache object. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FTC_ImageCache_New( FTC_Manager manager, + FTC_ImageCache *acache ); + + + /************************************************************************** + * + * @function: + * FTC_ImageCache_Lookup + * + * @description: + * Retrieve a given glyph image from a glyph image cache. + * + * @input: + * cache :: + * A handle to the source glyph image cache. + * + * type :: + * A pointer to a glyph image type descriptor. + * + * gindex :: + * The glyph index to retrieve. + * + * @output: + * aglyph :: + * The corresponding @FT_Glyph object. 0~in case of failure. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned glyph is owned and managed by the glyph image cache. + * Never try to transform or discard it manually! You can however create + * a copy with @FT_Glyph_Copy and modify the new one. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the glyph image, after increasing its reference count. + * This ensures that the node (as well as the @FT_Glyph) will always be + * kept in the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the @FT_Glyph could be flushed out of the cache on the next call + * to one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ + FT_EXPORT( FT_Error ) + FTC_ImageCache_Lookup( FTC_ImageCache cache, + FTC_ImageType type, + FT_UInt gindex, + FT_Glyph *aglyph, + FTC_Node *anode ); + + + /************************************************************************** + * + * @function: + * FTC_ImageCache_LookupScaler + * + * @description: + * A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec to + * specify the face ID and its size. + * + * @input: + * cache :: + * A handle to the source glyph image cache. + * + * scaler :: + * A pointer to a scaler descriptor. + * + * load_flags :: + * The corresponding load flags. + * + * gindex :: + * The glyph index to retrieve. + * + * @output: + * aglyph :: + * The corresponding @FT_Glyph object. 0~in case of failure. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned glyph is owned and managed by the glyph image cache. + * Never try to transform or discard it manually! You can however create + * a copy with @FT_Glyph_Copy and modify the new one. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the glyph image, after increasing its reference count. + * This ensures that the node (as well as the @FT_Glyph) will always be + * kept in the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the @FT_Glyph could be flushed out of the cache on the next call + * to one of the caching sub-system APIs. Don't assume that it is + * persistent! + * + * Calls to @FT_Set_Char_Size and friends have no effect on cached + * glyphs; you should always use the FreeType cache API instead. + */ + FT_EXPORT( FT_Error ) + FTC_ImageCache_LookupScaler( FTC_ImageCache cache, + FTC_Scaler scaler, + FT_ULong load_flags, + FT_UInt gindex, + FT_Glyph *aglyph, + FTC_Node *anode ); + + + /************************************************************************** + * + * @type: + * FTC_SBit + * + * @description: + * A handle to a small bitmap descriptor. See the @FTC_SBitRec structure + * for details. + */ + typedef struct FTC_SBitRec_* FTC_SBit; + + + /************************************************************************** + * + * @struct: + * FTC_SBitRec + * + * @description: + * A very compact structure used to describe a small glyph bitmap. + * + * @fields: + * width :: + * The bitmap width in pixels. + * + * height :: + * The bitmap height in pixels. + * + * left :: + * The horizontal distance from the pen position to the left bitmap + * border (a.k.a. 'left side bearing', or 'lsb'). + * + * top :: + * The vertical distance from the pen position (on the baseline) to the + * upper bitmap border (a.k.a. 'top side bearing'). The distance is + * positive for upwards y~coordinates. + * + * format :: + * The format of the glyph bitmap (monochrome or gray). + * + * max_grays :: + * Maximum gray level value (in the range 1 to~255). + * + * pitch :: + * The number of bytes per bitmap line. May be positive or negative. + * + * xadvance :: + * The horizontal advance width in pixels. + * + * yadvance :: + * The vertical advance height in pixels. + * + * buffer :: + * A pointer to the bitmap pixels. + */ + typedef struct FTC_SBitRec_ + { + FT_Byte width; + FT_Byte height; + FT_Char left; + FT_Char top; + + FT_Byte format; + FT_Byte max_grays; + FT_Short pitch; + FT_Char xadvance; + FT_Char yadvance; + + FT_Byte* buffer; + + } FTC_SBitRec; + + + /************************************************************************** + * + * @type: + * FTC_SBitCache + * + * @description: + * A handle to a small bitmap cache. These are special cache objects + * used to store small glyph bitmaps (and anti-aliased pixmaps) in a much + * more efficient way than the traditional glyph image cache implemented + * by @FTC_ImageCache. + */ + typedef struct FTC_SBitCacheRec_* FTC_SBitCache; + + + /************************************************************************** + * + * @function: + * FTC_SBitCache_New + * + * @description: + * Create a new cache to store small glyph bitmaps. + * + * @input: + * manager :: + * A handle to the source cache manager. + * + * @output: + * acache :: + * A handle to the new sbit cache. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FTC_SBitCache_New( FTC_Manager manager, + FTC_SBitCache *acache ); + + + /************************************************************************** + * + * @function: + * FTC_SBitCache_Lookup + * + * @description: + * Look up a given small glyph bitmap in a given sbit cache and 'lock' it + * to prevent its flushing from the cache until needed. + * + * @input: + * cache :: + * A handle to the source sbit cache. + * + * type :: + * A pointer to the glyph image type descriptor. + * + * gindex :: + * The glyph index. + * + * @output: + * sbit :: + * A handle to a small bitmap descriptor. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The small bitmap descriptor and its bit buffer are owned by the cache + * and should never be freed by the application. They might as well + * disappear from memory on the next cache lookup, so don't treat them as + * persistent data. + * + * The descriptor's `buffer` field is set to~0 to indicate a missing + * glyph bitmap. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the bitmap, after increasing its reference count. This + * ensures that the node (as well as the image) will always be kept in + * the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the bitmap could be flushed out of the cache on the next call to + * one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ + FT_EXPORT( FT_Error ) + FTC_SBitCache_Lookup( FTC_SBitCache cache, + FTC_ImageType type, + FT_UInt gindex, + FTC_SBit *sbit, + FTC_Node *anode ); + + + /************************************************************************** + * + * @function: + * FTC_SBitCache_LookupScaler + * + * @description: + * A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec to + * specify the face ID and its size. + * + * @input: + * cache :: + * A handle to the source sbit cache. + * + * scaler :: + * A pointer to the scaler descriptor. + * + * load_flags :: + * The corresponding load flags. + * + * gindex :: + * The glyph index. + * + * @output: + * sbit :: + * A handle to a small bitmap descriptor. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The small bitmap descriptor and its bit buffer are owned by the cache + * and should never be freed by the application. They might as well + * disappear from memory on the next cache lookup, so don't treat them as + * persistent data. + * + * The descriptor's `buffer` field is set to~0 to indicate a missing + * glyph bitmap. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the bitmap, after increasing its reference count. This + * ensures that the node (as well as the image) will always be kept in + * the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the bitmap could be flushed out of the cache on the next call to + * one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ + FT_EXPORT( FT_Error ) + FTC_SBitCache_LookupScaler( FTC_SBitCache cache, + FTC_Scaler scaler, + FT_ULong load_flags, + FT_UInt gindex, + FTC_SBit *sbit, + FTC_Node *anode ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCACHE_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftchapters.h b/win32/include/freetype/freetype/ftchapters.h new file mode 100644 index 00000000..2ee26973 --- /dev/null +++ b/win32/include/freetype/freetype/ftchapters.h @@ -0,0 +1,145 @@ +/**************************************************************************** + * + * This file defines the structure of the FreeType reference. + * It is used by the python script that generates the HTML files. + * + */ + + + /************************************************************************** + * + * @chapter: + * general_remarks + * + * @title: + * General Remarks + * + * @sections: + * header_inclusion + * user_allocation + * + */ + + + /************************************************************************** + * + * @chapter: + * core_api + * + * @title: + * Core API + * + * @sections: + * version + * basic_types + * base_interface + * glyph_variants + * color_management + * layer_management + * glyph_management + * mac_specific + * sizes_management + * header_file_macros + * + */ + + + /************************************************************************** + * + * @chapter: + * format_specific + * + * @title: + * Format-Specific API + * + * @sections: + * multiple_masters + * truetype_tables + * type1_tables + * sfnt_names + * bdf_fonts + * cid_fonts + * pfr_fonts + * winfnt_fonts + * font_formats + * gasp_table + * + */ + + + /************************************************************************** + * + * @chapter: + * module_specific + * + * @title: + * Controlling FreeType Modules + * + * @sections: + * auto_hinter + * cff_driver + * t1_cid_driver + * tt_driver + * pcf_driver + * properties + * parameter_tags + * lcd_rendering + * + */ + + + /************************************************************************** + * + * @chapter: + * cache_subsystem + * + * @title: + * Cache Sub-System + * + * @sections: + * cache_subsystem + * + */ + + + /************************************************************************** + * + * @chapter: + * support_api + * + * @title: + * Support API + * + * @sections: + * computations + * list_processing + * outline_processing + * quick_advance + * bitmap_handling + * raster + * glyph_stroker + * system_interface + * module_management + * gzip + * lzw + * bzip2 + * + */ + + + /************************************************************************** + * + * @chapter: + * error_codes + * + * @title: + * Error Codes + * + * @sections: + * error_enumerations + * error_code_values + * + */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftcid.h b/win32/include/freetype/freetype/ftcid.h new file mode 100644 index 00000000..8eafc1c7 --- /dev/null +++ b/win32/include/freetype/freetype/ftcid.h @@ -0,0 +1,168 @@ +/**************************************************************************** + * + * ftcid.h + * + * FreeType API for accessing CID font information (specification). + * + * Copyright (C) 2007-2019 by + * Dereg Clegg and 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 + * 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 FTCID_H_ +#define FTCID_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * cid_fonts + * + * @title: + * CID Fonts + * + * @abstract: + * CID-keyed font-specific API. + * + * @description: + * This section contains the declaration of CID-keyed font-specific + * functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_CID_Registry_Ordering_Supplement + * + * @description: + * Retrieve the Registry/Ordering/Supplement triple (also known as the + * "R/O/S") from a CID-keyed font. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * registry :: + * The registry, as a C~string, owned by the face. + * + * ordering :: + * The ordering, as a C~string, owned by the face. + * + * supplement :: + * The supplement. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with CID faces, returning an error + * otherwise. + * + * @since: + * 2.3.6 + */ + FT_EXPORT( FT_Error ) + FT_Get_CID_Registry_Ordering_Supplement( FT_Face face, + const char* *registry, + const char* *ordering, + FT_Int *supplement ); + + + /************************************************************************** + * + * @function: + * FT_Get_CID_Is_Internally_CID_Keyed + * + * @description: + * Retrieve the type of the input face, CID keyed or not. In contrast + * to the @FT_IS_CID_KEYED macro this function returns successfully also + * for CID-keyed fonts in an SFNT wrapper. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * is_cid :: + * The type of the face as an @FT_Bool. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with CID faces and OpenType fonts, returning + * an error otherwise. + * + * @since: + * 2.3.9 + */ + FT_EXPORT( FT_Error ) + FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face, + FT_Bool *is_cid ); + + + /************************************************************************** + * + * @function: + * FT_Get_CID_From_Glyph_Index + * + * @description: + * Retrieve the CID of the input glyph index. + * + * @input: + * face :: + * A handle to the input face. + * + * glyph_index :: + * The input glyph index. + * + * @output: + * cid :: + * The CID as an @FT_UInt. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with CID faces and OpenType fonts, returning + * an error otherwise. + * + * @since: + * 2.3.9 + */ + FT_EXPORT( FT_Error ) + FT_Get_CID_From_Glyph_Index( FT_Face face, + FT_UInt glyph_index, + FT_UInt *cid ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCID_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftcolor.h b/win32/include/freetype/freetype/ftcolor.h new file mode 100644 index 00000000..cf180219 --- /dev/null +++ b/win32/include/freetype/freetype/ftcolor.h @@ -0,0 +1,311 @@ +/**************************************************************************** + * + * ftcolor.h + * + * FreeType's glyph color management (specification). + * + * Copyright (C) 2018-2019 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 FTCOLOR_H_ +#define FTCOLOR_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * color_management + * + * @title: + * Glyph Color Management + * + * @abstract: + * Retrieving and manipulating OpenType's 'CPAL' table data. + * + * @description: + * The functions described here allow access and manipulation of color + * palette entries in OpenType's 'CPAL' tables. + */ + + + /************************************************************************** + * + * @struct: + * FT_Color + * + * @description: + * This structure models a BGRA color value of a 'CPAL' palette entry. + * + * The used color space is sRGB; the colors are not pre-multiplied, and + * alpha values must be explicitly set. + * + * @fields: + * blue :: + * Blue value. + * + * green :: + * Green value. + * + * red :: + * Red value. + * + * alpha :: + * Alpha value, giving the red, green, and blue color's opacity. + * + * @since: + * 2.10 + */ + typedef struct FT_Color_ + { + FT_Byte blue; + FT_Byte green; + FT_Byte red; + FT_Byte alpha; + + } FT_Color; + + + /************************************************************************** + * + * @enum: + * FT_PALETTE_XXX + * + * @description: + * A list of bit field constants used in the `palette_flags` array of the + * @FT_Palette_Data structure to indicate for which background a palette + * with a given index is usable. + * + * @values: + * FT_PALETTE_FOR_LIGHT_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a + * light background such as white. + * + * FT_PALETTE_FOR_DARK_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a dark + * background such as black. + * + * @since: + * 2.10 + */ +#define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01 +#define FT_PALETTE_FOR_DARK_BACKGROUND 0x02 + + + /************************************************************************** + * + * @struct: + * FT_Palette_Data + * + * @description: + * This structure holds the data of the 'CPAL' table. + * + * @fields: + * num_palettes :: + * The number of palettes. + * + * palette_name_ids :: + * A read-only array of palette name IDs with `num_palettes` elements, + * corresponding to entries like 'dark' or 'light' in the font's 'name' + * table. + * + * An empty name ID in the 'CPAL' table gets represented as value + * 0xFFFF. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * palette_flags :: + * A read-only array of palette flags with `num_palettes` elements. + * Possible values are an ORed combination of + * @FT_PALETTE_FOR_LIGHT_BACKGROUND and + * @FT_PALETTE_FOR_DARK_BACKGROUND. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * num_palette_entries :: + * The number of entries in a single palette. All palettes have the + * same size. + * + * palette_entry_name_ids :: + * A read-only array of palette entry name IDs with + * `num_palette_entries`. In each palette, entries with the same index + * have the same function. For example, index~0 might correspond to + * string 'outline' in the font's 'name' table to indicate that this + * palette entry is used for outlines, index~1 might correspond to + * 'fill' to indicate the filling color palette entry, etc. + * + * An empty entry name ID in the 'CPAL' table gets represented as value + * 0xFFFF. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * @note: + * Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to + * name strings. + * + * @since: + * 2.10 + */ + typedef struct FT_Palette_Data_ { + FT_UShort num_palettes; + const FT_UShort* palette_name_ids; + const FT_UShort* palette_flags; + + FT_UShort num_palette_entries; + const FT_UShort* palette_entry_name_ids; + + } FT_Palette_Data; + + + /************************************************************************** + * + * @function: + * FT_Palette_Data_Get + * + * @description: + * Retrieve the face's color palette data. + * + * @input: + * face :: + * The source face handle. + * + * @output: + * apalette :: + * A pointer to an @FT_Palette_Data structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * All arrays in the returned @FT_Palette_Data structure are read-only. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Data_Get( FT_Face face, + FT_Palette_Data *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Select + * + * @description: + * This function has two purposes. + * + * (1) It activates a palette for rendering color glyphs, and + * + * (2) it retrieves all (unmodified) color entries of this palette. This + * function returns a read-write array, which means that a calling + * application can modify the palette entries on demand. + * + * A corollary of (2) is that calling the function, then modifying some + * values, then calling the function again with the same arguments resets + * all color entries to the original 'CPAL' values; all user modifications + * are lost. + * + * @input: + * face :: + * The source face handle. + * + * palette_index :: + * The palette index. + * + * @output: + * apalette :: + * An array of color entries for a palette with index `palette_index`, + * having `num_palette_entries` elements (as found in the + * `FT_Palette_Data` structure). If `apalette` is set to `NULL`, no + * array gets returned (and no color entries can be modified). + * + * In case the font doesn't support color palettes, `NULL` is returned. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The array pointed to by `apalette_entries` is owned and managed by + * FreeType. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Select( FT_Face face, + FT_UShort palette_index, + FT_Color* *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Set_Foreground_Color + * + * @description: + * 'COLR' uses palette index 0xFFFF to indicate a 'text foreground + * color'. This function sets this value. + * + * @input: + * face :: + * The source face handle. + * + * foreground_color :: + * An `FT_Color` structure to define the text foreground color. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If this function isn't called, the text foreground color is set to + * white opaque (BGRA value 0xFFFFFFFF) if + * @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette, + * and black opaque (BGRA value 0x000000FF) otherwise, including the case + * that no palette types are available in the 'CPAL' table. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Set_Foreground_Color( FT_Face face, + FT_Color foreground_color ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCOLOR_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftdriver.h b/win32/include/freetype/freetype/ftdriver.h new file mode 100644 index 00000000..497bde9f --- /dev/null +++ b/win32/include/freetype/freetype/ftdriver.h @@ -0,0 +1,1232 @@ +/**************************************************************************** + * + * ftdriver.h + * + * FreeType API for controlling driver modules (specification only). + * + * Copyright (C) 2017-2019 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 FTDRIVER_H_ +#define FTDRIVER_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H +#include FT_PARAMETER_TAGS_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * auto_hinter + * + * @title: + * The auto-hinter + * + * @abstract: + * Controlling the auto-hinting module. + * + * @description: + * While FreeType's auto-hinter doesn't expose API functions by itself, + * it is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. The following lists the available properties + * together with the necessary macros and structures. + * + * Note that the auto-hinter's module name is 'autofitter' for historical + * 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. + * + */ + + + /************************************************************************** + * + * @section: + * cff_driver + * + * @title: + * The CFF driver + * + * @abstract: + * Controlling the CFF driver module. + * + * @description: + * While FreeType's CFF driver doesn't expose API functions by itself, it + * is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. + * + * The CFF driver's module name is 'cff'. + * + * Available properties are @hinting-engine, @no-stem-darkening, + * @darkening-parameters, and @random-seed, as documented in the + * @properties section. + * + * + * **Hinting and antialiasing 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 + * 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 + * borders, causing a fuzzy appearance. + * + * There are two principles behind this approach. + * + * 1) No hinting in the horizontal direction: Unlike 'superhinted' + * TrueType, which changes glyph widths to accommodate regular + * inter-glyph spacing, Adobe's approach is 'faithful to the design' in + * representing both the glyph width and the inter-glyph spacing designed + * for the font. This makes the screen display as close as it can be to + * the result one would get with infinite resolution, while preserving + * what is considered the key characteristics of each glyph. Note that + * the distances between unhinted and grid-fitted positions at small + * 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 + * 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 + * rasterizer can take advantage of the subpixels to add increments of + * 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 + * 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. + * + * 2) Alignment in the vertical direction: Weights and spacing along the + * y~axis are less critical; what is much more important is the visual + * alignment of related features (like cap-height and x-height). The + * sense of alignment for these is enhanced by the sharpness of grid-fit + * edges, while the cruder vertical resolution (full pixels instead of + * 1/3 pixels) is less of a problem. + * + * On the technical side, horizontal alignment zones for ascender, + * x-height, and other important height values (traditionally called + * 'blue zones') as defined in the font are positioned independently, + * each being rounded to the nearest pixel edge, taking care of overshoot + * suppression at small sizes, stem darkening, and scaling. + * + * Hstems (this is, hint values defined in the font to help align + * horizontal features) that fall within a blue zone are said to be + * 'captured' and are aligned to that zone. Uncaptured stems are moved + * in one of four ways, top edge up or down, bottom edge up or down. + * Unless there are conflicting hstems, the smallest movement is taken to + * minimize distortion. + * + */ + + + /************************************************************************** + * + * @section: + * pcf_driver + * + * @title: + * The PCF driver + * + * @abstract: + * Controlling the PCF driver module. + * + * @description: + * While FreeType's PCF driver doesn't expose API functions by itself, it + * is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. Right now, there is a single property + * @no-long-family-names available if FreeType is compiled with + * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES. + * + * The PCF driver's module name is 'pcf'. + * + */ + + + /************************************************************************** + * + * @section: + * t1_cid_driver + * + * @title: + * The Type 1 and CID drivers + * + * @abstract: + * Controlling the Type~1 and CID driver modules. + * + * @description: + * It is possible to control the behaviour of FreeType's Type~1 and + * Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get. + * + * Behind the scenes, both drivers use the Adobe CFF engine for hinting; + * however, the used properties must be specified separately. + * + * The Type~1 driver's module name is 'type1'; the CID driver's module + * name is 't1cid'. + * + * Available properties are @hinting-engine, @no-stem-darkening, + * @darkening-parameters, and @random-seed, as documented in the + * @properties section. + * + * Please see the @cff_driver section for more details on the new hinting + * engine. + * + */ + + + /************************************************************************** + * + * @section: + * tt_driver + * + * @title: + * The TrueType driver + * + * @abstract: + * Controlling the TrueType driver module. + * + * @description: + * While FreeType's TrueType driver doesn't expose API functions by + * itself, it is possible to control its behaviour with @FT_Property_Set + * and @FT_Property_Get. The following lists the available properties + * together with the necessary macros and structures. + * + * The TrueType driver's module name is 'truetype'. + * + * A single property @interpreter-version is available, as documented in + * the @properties section. + * + * We start with a list of definitions, kindly provided by Greg + * Hitchcock. + * + * _Bi-Level Rendering_ + * + * Monochromatic rendering, exclusively used in the early days of + * TrueType by both Apple and Microsoft. Microsoft's GDI interface + * supported hinting of the right-side bearing point, such that the + * advance width could be non-linear. Most often this was done to + * achieve some level of glyph symmetry. To enable reasonable + * performance (e.g., not having to run hinting on all glyphs just to get + * the widths) there was a bit in the head table indicating if the side + * bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache + * hinting widths across multiple sizes and device aspect ratios. + * + * _Font Smoothing_ + * + * Microsoft's GDI implementation of anti-aliasing. Not traditional + * anti-aliasing as the outlines were hinted before the sampling. The + * widths matched the bi-level rendering. + * + * _ClearType Rendering_ + * + * Technique that uses physical subpixels to improve rendering on LCD + * (and other) displays. Because of the higher resolution, many methods + * of improving symmetry in glyphs through hinting the right-side bearing + * were no longer necessary. This lead to what GDI calls 'natural + * widths' ClearType, see + * http://rastertragedy.com/RTRCh4.htm#Sec21. Since hinting + * has extra resolution, most non-linearity went away, but it is still + * possible for hints to change the advance widths in this mode. + * + * _ClearType Compatible Widths_ + * + * One of the earliest challenges with ClearType was allowing the + * implementation in GDI to be selected without requiring all UI and + * documents to reflow. To address this, a compatible method of + * rendering ClearType was added where the font hints are executed once + * to determine the width in bi-level rendering, and then re-run in + * ClearType, with the difference in widths being absorbed in the font + * hints for ClearType (mostly in the white space of hints); see + * http://rastertragedy.com/RTRCh4.htm#Sec20. Somewhat by + * definition, compatible width ClearType allows for non-linear widths, + * but only when the bi-level version has non-linear widths. + * + * _ClearType Subpixel Positioning_ + * + * One of the nice benefits of ClearType is the ability to more crisply + * display fractional widths; unfortunately, the GDI model of integer + * bitmaps did not support this. However, the WPF and Direct Write + * frameworks do support fractional widths. DWrite calls this 'natural + * mode', not to be confused with GDI's 'natural widths'. Subpixel + * positioning, in the current implementation of Direct Write, + * unfortunately does not support hinted advance widths, see + * http://rastertragedy.com/RTRCh4.htm#Sec22. Note that the + * TrueType interpreter fully allows the advance width to be adjusted in + * this mode, just the DWrite client will ignore those changes. + * + * _ClearType Backward Compatibility_ + * + * This is a set of exceptions made in the TrueType interpreter to + * minimize hinting techniques that were problematic with the extra + * resolution of ClearType; see + * http://rastertragedy.com/RTRCh4.htm#Sec1 and + * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx. + * This technique is not to be confused with ClearType compatible widths. + * ClearType backward compatibility has no direct impact on changing + * advance widths, but there might be an indirect impact on disabling + * some deltas. This could be worked around in backward compatibility + * mode. + * + * _Native ClearType Mode_ + * + * (Not to be confused with 'natural widths'.) This mode removes all the + * exceptions in the TrueType interpreter when running with ClearType. + * Any issues on widths would still apply, though. + * + */ + + + /************************************************************************** + * + * @section: + * properties + * + * @title: + * Driver properties + * + * @abstract: + * Controlling driver modules. + * + * @description: + * Driver modules can be controlled by setting and unsetting properties, + * using the functions @FT_Property_Set and @FT_Property_Get. This + * section documents the available properties, together with auxiliary + * macros and structures. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_HINTING_XXX + * + * @description: + * A list of constants used for the @hinting-engine property to select + * the hinting engine for CFF, Type~1, and CID fonts. + * + * @values: + * FT_HINTING_FREETYPE :: + * Use the old FreeType hinting engine. + * + * FT_HINTING_ADOBE :: + * Use the hinting engine contributed by Adobe. + * + * @since: + * 2.9 + * + */ +#define FT_HINTING_FREETYPE 0 +#define FT_HINTING_ADOBE 1 + + /* these constants (introduced in 2.4.12) are deprecated */ +#define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE +#define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE + + + /************************************************************************** + * + * @property: + * hinting-engine + * + * @description: + * Thanks to Adobe, which contributed a new hinting (and parsing) engine, + * an application can select between 'freetype' and 'adobe' if compiled + * with `CFF_CONFIG_OPTION_OLD_ENGINE`. If this configuration macro + * isn't defined, 'hinting-engine' does nothing. + * + * 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. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values 'adobe' or 'freetype'). + * + * @example: + * The following example code demonstrates how to select Adobe's hinting + * engine for the 'cff' module (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_UInt hinting_engine = FT_HINTING_ADOBE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "hinting-engine", &hinting_engine ); + * ``` + * + * @since: + * 2.4.12 (for 'cff' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * no-stem-darkening + * + * @description: + * All glyphs that pass through the auto-hinter will be emboldened unless + * this property is set to TRUE. The same is true for the CFF, Type~1, + * and CID font modules if the 'Adobe' engine is selected (which is the + * default). + * + * Stem darkening emboldens glyphs at smaller sizes to make them more + * readable on common low-DPI screens when using linear alpha blending + * and gamma correction, see @FT_Render_Glyph. When not using linear + * alpha blending and gamma correction, glyphs will appear heavy and + * fuzzy! + * + * Gamma correction essentially lightens fonts since shades of grey are + * shifted to higher pixel values (=~higher brightness) to match the + * original intention to the reality of our screens. The side-effect is + * that glyphs 'thin out'. Mac OS~X and Adobe's proprietary font + * rendering library implement a counter-measure: stem darkening at + * smaller sizes where shades of gray dominate. By emboldening a glyph + * slightly in relation to its pixel size, individual pixels get higher + * coverage of filled-in outlines and are therefore 'blacker'. This + * counteracts the 'thinning out' of glyphs, making text remain readable + * at smaller sizes. + * + * By default, the Adobe engines for CFF, Type~1, and CID fonts darken + * stems at smaller sizes, regardless of hinting, to enhance contrast. + * Setting this property, stem darkening gets switched off. + * + * For the auto-hinter, stem-darkening is experimental currently and thus + * switched off by default (this is, `no-stem-darkening` is set to TRUE + * by default). Total consistency with the CFF driver is not achieved + * right now because the emboldening method differs and glyphs must be + * scaled down on the Y-axis to keep outline points inside their + * precomputed blue zones. The smaller the size (especially 9ppem and + * down), the higher the loss of emboldening versus the CFF driver. + * + * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set. + * + * @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). It + * can also be set per face using @FT_Face_Properties with + * @FT_PARAM_TAG_STEM_DARKENING. + * + * @example: + * ``` + * FT_Library library; + * FT_Bool no_stem_darkening = TRUE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "no-stem-darkening", &no_stem_darkening ); + * ``` + * + * @since: + * 2.4.12 (for 'cff' module) + * + * 2.6.2 (for 'autofitter' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * darkening-parameters + * + * @description: + * By default, the Adobe hinting engine, as used by the CFF, Type~1, and + * CID font drivers, darkens stems as follows (if the `no-stem-darkening` + * property isn't set): + * + * ``` + * stem width <= 0.5px: darkening amount = 0.4px + * stem width = 1px: darkening amount = 0.275px + * stem width = 1.667px: darkening amount = 0.275px + * stem width >= 2.333px: darkening amount = 0px + * ``` + * + * and piecewise linear in-between. At configuration time, these four + * control points can be set with the macro + * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID + * drivers share these values. At runtime, the control points can be + * changed using the `darkening-parameters` property (see the example + * below that demonstrates this for the Type~1 driver). + * + * The x~values give the stem width, and the y~values the darkening + * amount. The unit is 1000th of pixels. All coordinate values must be + * positive; the x~values must be monotonically increasing; the y~values + * must be monotonically decreasing and smaller than or equal to 500 + * (corresponding to half a pixel); the slope of each linear piece must + * be shallower than -1 (e.g., -.4). + * + * The auto-hinter provides this property, too, as an experimental + * feature. See @no-stem-darkening for more. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable, using eight comma-separated integers without spaces. Here + * the above example, using `\` to break the line for readability. + * + * ``` + * FREETYPE_PROPERTIES=\ + * type1:darkening-parameters=500,300,1000,200,1500,100,2000,0 + * ``` + * + * @example: + * ``` + * FT_Library library; + * FT_Int darken_params[8] = { 500, 300, // x1, y1 + * 1000, 200, // x2, y2 + * 1500, 100, // x3, y3 + * 2000, 0 }; // x4, y4 + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "type1", + * "darkening-parameters", darken_params ); + * ``` + * + * @since: + * 2.5.1 (for 'cff' module) + * + * 2.6.2 (for 'autofitter' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * random-seed + * + * @description: + * By default, the seed value for the CFF 'random' operator and the + * similar '0 28 callothersubr pop' command for the Type~1 and CID + * drivers is set to a random value. However, mainly for debugging + * purposes, it is often necessary to use a known value as a seed so that + * the pseudo-random number sequences generated by 'random' are + * repeatable. + * + * The `random-seed` property does that. Its argument is a signed 32bit + * integer; if the value is zero or negative, the seed given by the + * `intitialRandomSeed` private DICT operator in a CFF file gets used (or + * a default value if there is no such operator). If the value is + * positive, use it instead of `initialRandomSeed`, which is consequently + * ignored. + * + * @note: + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable. It can also be set per face using @FT_Face_Properties with + * @FT_PARAM_TAG_RANDOM_SEED. + * + * @since: + * 2.8 (for 'cff' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * no-long-family-names + * + * @description: + * If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling + * FreeType, the PCF driver constructs long family names. + * + * There are many PCF fonts just called 'Fixed' which look completely + * different, and which have nothing to do with each other. When + * selecting 'Fixed' in KDE or Gnome one gets results that appear rather + * random, the style changes often if one changes the size and one cannot + * select some fonts at all. The improve this situation, the PCF module + * prepends the foundry name (plus a space) to the family name. It also + * checks whether there are 'wide' characters; all put together, family + * names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed. + * + * If `no-long-family-names` is set, this feature gets switched 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). + * + * @example: + * ``` + * FT_Library library; + * FT_Bool no_long_family_names = TRUE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "pcf", + * "no-long-family-names", + * &no_long_family_names ); + * ``` + * + * @since: + * 2.8 + */ + + + /************************************************************************** + * + * @enum: + * TT_INTERPRETER_VERSION_XXX + * + * @description: + * A list of constants used for the @interpreter-version property to + * select the hinting engine for Truetype fonts. + * + * The numeric value in the constant names represents the version number + * as returned by the 'GETINFO' bytecode instruction. + * + * @values: + * TT_INTERPRETER_VERSION_35 :: + * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in + * Windows~98; only grayscale and B/W rasterizing is supported. + * + * TT_INTERPRETER_VERSION_38 :: + * Version~38 corresponds to MS rasterizer v.1.9; it is roughly + * equivalent to the hinting provided by DirectWrite ClearType (as can + * be found, for example, in the Internet Explorer~9 running on + * Windows~7). It is used in FreeType to select the 'Infinality' + * subpixel hinting code. The code may be removed in a future version. + * + * TT_INTERPRETER_VERSION_40 :: + * Version~40 corresponds to MS rasterizer v.2.1; it is roughly + * equivalent to the hinting provided by DirectWrite ClearType (as can + * be found, for example, in Microsoft's Edge Browser on Windows~10). + * It is used in FreeType to select the 'minimal' subpixel hinting + * code, a stripped-down and higher performance version of the + * 'Infinality' code. + * + * @note: + * This property controls the behaviour of the bytecode interpreter and + * thus how outlines get hinted. It does **not** control how glyph get + * rasterized! In particular, it does not control subpixel color + * filtering. + * + * If FreeType has not been compiled with the configuration option + * `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes + * an `FT_Err_Unimplemented_Feature` error. + * + * Depending on the graphics framework, Microsoft uses different bytecode + * and rendering engines. As a consequence, the version numbers returned + * by a call to the 'GETINFO' bytecode instruction are more convoluted + * than desired. + * + * Here are two tables that try to shed some light on the possible values + * for the MS rasterizer engine, together with the additional features + * introduced by it. + * + * ``` + * GETINFO framework version feature + * ------------------------------------------------------------------- + * 3 GDI (Win 3.1), v1.0 16-bit, first version + * TrueImage + * 33 GDI (Win NT 3.1), v1.5 32-bit + * HP Laserjet + * 34 GDI (Win 95) v1.6 font smoothing, + * new SCANTYPE opcode + * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET + * bits in composite glyphs + * 36 MGDI (Win CE 2) v1.6+ classic ClearType + * 37 GDI (XP and later), v1.8 ClearType + * GDI+ old (before Vista) + * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType, + * WPF Y-direction ClearType, + * additional error checking + * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags + * in GETINFO opcode, + * bug fixes + * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag + * DWrite (Win 8) in GETINFO opcode, + * Gray ClearType + * ``` + * + * The 'version' field gives a rough orientation only, since some + * applications provided certain features much earlier (as an example, + * Microsoft Reader used subpixel and Y-direction ClearType already in + * Windows 2000). Similarly, updates to a given framework might include + * improved hinting support. + * + * ``` + * version sampling rendering comment + * x y x y + * -------------------------------------------------------------- + * v1.0 normal normal B/W B/W bi-level + * v1.6 high high gray gray grayscale + * v1.8 high normal color-filter B/W (GDI) ClearType + * v1.9 high high color-filter gray Color ClearType + * v2.1 high normal gray B/W Gray ClearType + * v2.1 high high gray gray Gray ClearType + * ``` + * + * Color and Gray ClearType are the two available variants of + * 'Y-direction ClearType', meaning grayscale rasterization along the + * Y-direction; the name used in the TrueType specification for this + * feature is 'symmetric smoothing'. 'Classic ClearType' is the original + * algorithm used before introducing a modified version in Win~XP. + * Another name for v1.6's grayscale rendering is 'font smoothing', and + * 'Color ClearType' is sometimes also called 'DWrite ClearType'. To + * differentiate between today's Color ClearType and the earlier + * ClearType variant with B/W rendering along the vertical axis, the + * latter is sometimes called 'GDI ClearType'. + * + * 'Normal' and 'high' sampling describe the (virtual) resolution to + * access the rasterized outline after the hinting process. 'Normal' + * means 1 sample per grid line (i.e., B/W). In the current Microsoft + * implementation, 'high' means an extra virtual resolution of 16x16 (or + * 16x1) grid lines per pixel for bytecode instructions like 'MIRP'. + * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid + * lines for color filtering if Color ClearType is activated. + * + * Note that 'Gray ClearType' is essentially the same as v1.6's grayscale + * rendering. However, the GETINFO instruction handles it differently: + * v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns + * bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19 + * (Gray ClearType). Also, this mode respects bits 2 and~3 for the + * version~1 gasp table exclusively (like Color ClearType), while v1.6 + * only respects the values of version~0 (bits 0 and~1). + * + * Keep in mind that the features of the above interpreter versions might + * not map exactly to FreeType features or behavior because it is a + * fundamentally different library with different internals. + * + */ +#define TT_INTERPRETER_VERSION_35 35 +#define TT_INTERPRETER_VERSION_38 38 +#define TT_INTERPRETER_VERSION_40 40 + + + /************************************************************************** + * + * @property: + * interpreter-version + * + * @description: + * Currently, three versions are available, two representing the bytecode + * interpreter with subpixel hinting support (old 'Infinality' code and + * new stripped-down and higher performance 'minimal' code) and one + * without, respectively. The default is subpixel support if + * `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel + * support otherwise (since it isn't available then). + * + * If subpixel hinting is on, many TrueType bytecode instructions behave + * differently compared to B/W or grayscale rendering (except if 'native + * ClearType' is selected by the font). Microsoft's main idea is to + * render at a much increased horizontal resolution, then sampling down + * the created output to subpixel precision. However, many older fonts + * are not suited to this and must be specially taken care of by applying + * (hardcoded) tweaks in Microsoft's interpreter. + * + * Details on subpixel hinting and some of the necessary tweaks can be + * found in Greg Hitchcock's whitepaper at + * 'https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'. + * Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2, + * or 6x5 supersampling) like discussed in the paper. Depending on the + * chosen interpreter, it simply ignores instructions on vertical stems + * to arrive at very similar results. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values '35', '38', or '40'). + * + * @example: + * The following example code demonstrates how to deactivate subpixel + * hinting (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_Face face; + * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "truetype", + * "interpreter-version", + * &interpreter_version ); + * ``` + * + * @since: + * 2.5 + */ + + + /************************************************************************** + * + * @property: + * glyph-to-script-map + * + * @description: + * **Experimental only** + * + * The auto-hinter provides various script modules to hint glyphs. + * Examples of supported scripts are Latin or CJK. Before a glyph is + * auto-hinted, the Unicode character map of the font gets examined, and + * the script is then determined based on Unicode character ranges, see + * below. + * + * OpenType fonts, however, often provide much more glyphs than character + * codes (small caps, superscripts, ligatures, swashes, etc.), to be + * controlled by so-called 'features'. Handling OpenType features can be + * quite complicated and thus needs a separate library on top of + * FreeType. + * + * The mapping between glyph indices and scripts (in the auto-hinter + * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array + * with `num_glyphs` elements, as found in the font's @FT_Face structure. + * The `glyph-to-script-map` property returns a pointer to this array, + * which can be modified as needed. Note that the modification should + * happen before the first glyph gets processed by the auto-hinter so + * that the global analysis of the font shapes actually uses the modified + * mapping. + * + * @example: + * The following example code demonstrates how to access it (omitting the + * error handling). + * + * ``` + * FT_Library library; + * FT_Face face; + * FT_Prop_GlyphToScriptMap prop; + * + * + * FT_Init_FreeType( &library ); + * FT_New_Face( library, "foo.ttf", 0, &face ); + * + * prop.face = face; + * + * FT_Property_Get( library, "autofitter", + * "glyph-to-script-map", &prop ); + * + * // adjust `prop.map' as needed right here + * + * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @enum: + * FT_AUTOHINTER_SCRIPT_XXX + * + * @description: + * **Experimental only** + * + * A list of constants used for the @glyph-to-script-map property to + * specify the script submodule the auto-hinter should use for hinting a + * particular glyph. + * + * @values: + * FT_AUTOHINTER_SCRIPT_NONE :: + * Don't auto-hint this glyph. + * + * FT_AUTOHINTER_SCRIPT_LATIN :: + * Apply the latin auto-hinter. For the auto-hinter, 'latin' is a very + * broad term, including Cyrillic and Greek also since characters from + * those scripts share the same design constraints. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+0020 - U+007F // Basic Latin (no control characters) + * U+00A0 - U+00FF // Latin-1 Supplement (no control characters) + * U+0100 - U+017F // Latin Extended-A + * U+0180 - U+024F // Latin Extended-B + * U+0250 - U+02AF // IPA Extensions + * U+02B0 - U+02FF // Spacing Modifier Letters + * U+0300 - U+036F // Combining Diacritical Marks + * U+0370 - U+03FF // Greek and Coptic + * U+0400 - U+04FF // Cyrillic + * U+0500 - U+052F // Cyrillic Supplement + * U+1D00 - U+1D7F // Phonetic Extensions + * U+1D80 - U+1DBF // Phonetic Extensions Supplement + * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement + * U+1E00 - U+1EFF // Latin Extended Additional + * U+1F00 - U+1FFF // Greek Extended + * U+2000 - U+206F // General Punctuation + * U+2070 - U+209F // Superscripts and Subscripts + * U+20A0 - U+20CF // Currency Symbols + * U+2150 - U+218F // Number Forms + * U+2460 - U+24FF // Enclosed Alphanumerics + * U+2C60 - U+2C7F // Latin Extended-C + * U+2DE0 - U+2DFF // Cyrillic Extended-A + * U+2E00 - U+2E7F // Supplemental Punctuation + * U+A640 - U+A69F // Cyrillic Extended-B + * U+A720 - U+A7FF // Latin Extended-D + * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) + * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols + * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement + * ``` + * + * FT_AUTOHINTER_SCRIPT_CJK :: + * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old + * Vietnamese, and some other scripts. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+1100 - U+11FF // Hangul Jamo + * U+2E80 - U+2EFF // CJK Radicals Supplement + * U+2F00 - U+2FDF // Kangxi Radicals + * U+2FF0 - U+2FFF // Ideographic Description Characters + * U+3000 - U+303F // CJK Symbols and Punctuation + * U+3040 - U+309F // Hiragana + * U+30A0 - U+30FF // Katakana + * U+3100 - U+312F // Bopomofo + * U+3130 - U+318F // Hangul Compatibility Jamo + * U+3190 - U+319F // Kanbun + * U+31A0 - U+31BF // Bopomofo Extended + * U+31C0 - U+31EF // CJK Strokes + * U+31F0 - U+31FF // Katakana Phonetic Extensions + * U+3200 - U+32FF // Enclosed CJK Letters and Months + * U+3300 - U+33FF // CJK Compatibility + * U+3400 - U+4DBF // CJK Unified Ideographs Extension A + * U+4DC0 - U+4DFF // Yijing Hexagram Symbols + * U+4E00 - U+9FFF // CJK Unified Ideographs + * U+A960 - U+A97F // Hangul Jamo Extended-A + * U+AC00 - U+D7AF // Hangul Syllables + * U+D7B0 - U+D7FF // Hangul Jamo Extended-B + * U+F900 - U+FAFF // CJK Compatibility Ideographs + * U+FE10 - U+FE1F // Vertical forms + * U+FE30 - U+FE4F // CJK Compatibility Forms + * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms + * U+1B000 - U+1B0FF // Kana Supplement + * U+1D300 - U+1D35F // Tai Xuan Hing Symbols + * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement + * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B + * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C + * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D + * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement + * ``` + * + * FT_AUTOHINTER_SCRIPT_INDIC :: + * Apply the indic auto-hinter, covering all major scripts from the + * Indian sub-continent and some other related scripts like Thai, Lao, + * or Tibetan. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+0900 - U+0DFF // Indic Range + * U+0F00 - U+0FFF // Tibetan + * U+1900 - U+194F // Limbu + * U+1B80 - U+1BBF // Sundanese + * U+A800 - U+A82F // Syloti Nagri + * U+ABC0 - U+ABFF // Meetei Mayek + * U+11800 - U+118DF // Sharada + * ``` + * + * Note that currently Indic support is rudimentary only, missing blue + * zone support. + * + * @since: + * 2.4.11 + * + */ +#define FT_AUTOHINTER_SCRIPT_NONE 0 +#define FT_AUTOHINTER_SCRIPT_LATIN 1 +#define FT_AUTOHINTER_SCRIPT_CJK 2 +#define FT_AUTOHINTER_SCRIPT_INDIC 3 + + + /************************************************************************** + * + * @struct: + * FT_Prop_GlyphToScriptMap + * + * @description: + * **Experimental only** + * + * The data exchange structure for the @glyph-to-script-map property. + * + * @since: + * 2.4.11 + * + */ + typedef struct FT_Prop_GlyphToScriptMap_ + { + FT_Face face; + FT_UShort* map; + + } FT_Prop_GlyphToScriptMap; + + + /************************************************************************** + * + * @property: + * fallback-script + * + * @description: + * **Experimental only** + * + * If no auto-hinter script module can be assigned to a glyph, a fallback + * script gets assigned to it (see also the @glyph-to-script-map + * property). By default, this is @FT_AUTOHINTER_SCRIPT_CJK. Using the + * `fallback-script` property, this fallback value can be changed. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * It's important to use the right timing for changing this value: The + * creation of the glyph-to-script map that eventually uses the fallback + * script value gets triggered either by setting or reading a + * face-specific property like @glyph-to-script-map, or by auto-hinting + * any glyph from that face. In particular, if you have already created + * an @FT_Face structure but not loaded any glyph (using the + * auto-hinter), a change of the fallback script will affect this face. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "fallback-script", &fallback_script ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @property: + * default-script + * + * @description: + * **Experimental only** + * + * If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make + * the HarfBuzz library access OpenType features for getting better glyph + * coverages, this property sets the (auto-fitter) script to be used for + * the default (OpenType) script data of a font's GSUB table. Features + * for the default script are intended for all scripts not explicitly + * handled in GSUB; an example is a 'dlig' feature, containing the + * combination of the characters 'T', 'E', and 'L' to form a 'TEL' + * ligature. + * + * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the + * `default-script` property, this default value can be changed. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * It's important to use the right timing for changing this value: The + * creation of the glyph-to-script map that eventually uses the default + * script value gets triggered either by setting or reading a + * face-specific property like @glyph-to-script-map, or by auto-hinting + * any glyph from that face. In particular, if you have already created + * an @FT_Face structure but not loaded any glyph (using the + * auto-hinter), a change of the default script will affect this face. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "default-script", &default_script ); + * ``` + * + * @since: + * 2.5.3 + * + */ + + + /************************************************************************** + * + * @property: + * increase-x-height + * + * @description: + * For ppem values in the range 6~<= ppem <= `increase-x-height`, round + * up the font's x~height much more often than normally. If the value is + * set to~0, which is the default, this feature is switched off. Use + * this property to improve the legibility of small font sizes if + * necessary. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * Set this value right after calling @FT_Set_Char_Size, but before + * loading any glyph (using the auto-hinter). + * + * @example: + * ``` + * FT_Library library; + * FT_Face face; + * FT_Prop_IncreaseXHeight prop; + * + * + * FT_Init_FreeType( &library ); + * FT_New_Face( library, "foo.ttf", 0, &face ); + * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 ); + * + * prop.face = face; + * prop.limit = 14; + * + * FT_Property_Set( library, "autofitter", + * "increase-x-height", &prop ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Prop_IncreaseXHeight + * + * @description: + * The data exchange structure for the @increase-x-height property. + * + */ + typedef struct FT_Prop_IncreaseXHeight_ + { + FT_Face face; + FT_UInt limit; + + } FT_Prop_IncreaseXHeight; + + + /************************************************************************** + * + * @property: + * warping + * + * @description: + * **Experimental only** + * + * 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. + * + * 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 + * 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 + * 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 ); + * ``` + * + * @since: + * 2.6 + * + */ + + + /* */ + + +FT_END_HEADER + + +#endif /* FTDRIVER_H_ */ + + +/* END */ diff --git a/win32/include/freetype/fterrdef.h b/win32/include/freetype/freetype/fterrdef.h similarity index 73% rename from win32/include/freetype/fterrdef.h rename to win32/include/freetype/freetype/fterrdef.h index 3bf4e63b..9bc7dc65 100644 --- a/win32/include/freetype/fterrdef.h +++ b/win32/include/freetype/freetype/fterrdef.h @@ -1,58 +1,57 @@ -/***************************************************************************/ -/* */ -/* fterrdef.h */ -/* */ -/* FreeType error codes (specification). */ -/* */ -/* Copyright 2002-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * fterrdef.h + * + * FreeType error codes (specification). + * + * Copyright (C) 2002-2019 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. + * + */ - /*************************************************************************/ - /* */ - /* <Section> */ - /* error_code_values */ - /* */ - /* <Title> */ - /* Error Code Values */ - /* */ - /* <Abstract> */ - /* All possible error codes returned by FreeType functions. */ - /* */ - /* <Description> */ - /* The list below is taken verbatim from the file `fterrdef.h' */ - /* (loaded automatically by including `FT_FREETYPE_H'). The first */ - /* argument of the `FT_ERROR_DEF_' macro is the error label; by */ - /* default, the prefix `FT_Err_' gets added so that you get error */ - /* names like `FT_Err_Cannot_Open_Resource'. The second argument is */ - /* the error code, and the last argument an error string, which is not */ - /* used by FreeType. */ - /* */ - /* Within your application you should *only* use error names and */ - /* *never* its numeric values! The latter might (and actually do) */ - /* change in forthcoming FreeType versions. */ - /* */ - /* Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero. */ - /* See the `Error Enumerations' subsection how to automatically */ - /* generate a list of error strings. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * error_code_values + * + * @title: + * Error Code Values + * + * @abstract: + * All possible error codes returned by FreeType functions. + * + * @description: + * The list below is taken verbatim from the file `fterrdef.h` (loaded + * automatically by including `FT_FREETYPE_H`). The first argument of the + * `FT_ERROR_DEF_` macro is the error label; by default, the prefix + * `FT_Err_` gets added so that you get error names like + * `FT_Err_Cannot_Open_Resource`. The second argument is the error code, + * and the last argument an error string, which is not used by FreeType. + * + * Within your application you should **only** use error names and + * **never** its numeric values! The latter might (and actually do) + * change in forthcoming FreeType versions. + * + * Macro `FT_NOERRORDEF_` defines `FT_Err_Ok`, which is always zero. See + * the 'Error Enumerations' subsection how to automatically generate a + * list of error strings. + * + */ - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Err_XXX */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @enum: + * FT_Err_XXX + * + */ /* generic errors */ @@ -231,6 +230,10 @@ "invalid PostScript (post) table format" ) FT_ERRORDEF_( Invalid_Post_Table, 0x9B, "invalid PostScript (post) table" ) + FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C, + "found FDEF or IDEF opcode in glyf bytecode" ) + FT_ERRORDEF_( Missing_Bitmap, 0x9D, + "missing bitmap in strike" ) /* CFF, CID, and Type 1 errors */ diff --git a/win32/include/freetype/freetype/fterrors.h b/win32/include/freetype/freetype/fterrors.h new file mode 100644 index 00000000..58f5a3ea --- /dev/null +++ b/win32/include/freetype/freetype/fterrors.h @@ -0,0 +1,285 @@ +/**************************************************************************** + * + * fterrors.h + * + * FreeType error code handling (specification). + * + * Copyright (C) 1996-2019 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. + * + */ + + + /************************************************************************** + * + * @section: + * error_enumerations + * + * @title: + * Error Enumerations + * + * @abstract: + * How to handle errors and error strings. + * + * @description: + * The header file `fterrors.h` (which is automatically included by + * `freetype.h` defines the handling of FreeType's enumeration + * constants. It can also be used to generate error message strings + * with a small macro trick explained below. + * + * **Error Formats** + * + * The configuration macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` can be + * defined in `ftoption.h` in order to make the higher byte indicate the + * module where the error has happened (this is not compatible with + * standard builds of FreeType~2, however). See the file `ftmoderr.h` + * for more details. + * + * **Error Message Strings** + * + * Error definitions are set up with special macros that allow client + * applications to build a table of error message strings. The strings + * are not included in a normal build of FreeType~2 to save space (most + * client applications do not use them). + * + * To do so, you have to define the following macros before including + * this file. + * + * ``` + * FT_ERROR_START_LIST + * ``` + * + * This macro is called before anything else to define the start of the + * error list. It is followed by several `FT_ERROR_DEF` calls. + * + * ``` + * FT_ERROR_DEF( e, v, s ) + * ``` + * + * This macro is called to define one single error. 'e' is the error + * code identifier (e.g., `Invalid_Argument`), 'v' is the error's + * numerical value, and 's' is the corresponding error string. + * + * ``` + * FT_ERROR_END_LIST + * ``` + * + * This macro ends the list. + * + * Additionally, you have to undefine `FTERRORS_H_` before #including + * this file. + * + * Here is a simple example. + * + * ``` + * #undef FTERRORS_H_ + * #define FT_ERRORDEF( e, v, s ) { e, s }, + * #define FT_ERROR_START_LIST { + * #define FT_ERROR_END_LIST { 0, NULL } }; + * + * const struct + * { + * int err_code; + * const char* err_msg; + * } ft_errors[] = + * + * #include FT_ERRORS_H + * ``` + * + * An alternative to using an array is a switch statement. + * + * ``` + * #undef FTERRORS_H_ + * #define FT_ERROR_START_LIST switch ( error_code ) { + * #define FT_ERRORDEF( e, v, s ) case v: return s; + * #define FT_ERROR_END_LIST } + * ``` + * + * If you use `FT_CONFIG_OPTION_USE_MODULE_ERRORS`, `error_code` should + * be replaced with `FT_ERROR_BASE(error_code)` in the last example. + */ + + /* */ + + /* In previous FreeType versions we used `__FTERRORS_H__`. However, */ + /* using two successive underscores in a non-system symbol name */ + /* violates the C (and C++) standard, so it was changed to the */ + /* current form. In spite of this, we have to make */ + /* */ + /* ``` */ + /* #undefine __FTERRORS_H__ */ + /* ``` */ + /* */ + /* work for backward compatibility. */ + /* */ +#if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) ) +#define FTERRORS_H_ +#define __FTERRORS_H__ + + + /* include module base error codes */ +#include FT_MODULE_ERRORS_H + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** SETUP MACROS *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#undef FT_NEED_EXTERN_C + + + /* FT_ERR_PREFIX is used as a prefix for error identifiers. */ + /* By default, we use `FT_Err_`. */ + /* */ +#ifndef FT_ERR_PREFIX +#define FT_ERR_PREFIX FT_Err_ +#endif + + + /* FT_ERR_BASE is used as the base for module-specific errors. */ + /* */ +#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS + +#ifndef FT_ERR_BASE +#define FT_ERR_BASE FT_Mod_Err_Base +#endif + +#else + +#undef FT_ERR_BASE +#define FT_ERR_BASE 0 + +#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */ + + + /* If FT_ERRORDEF is not defined, we need to define a simple */ + /* enumeration type. */ + /* */ +#ifndef FT_ERRORDEF + +#define FT_INCLUDE_ERR_PROTOS + +#define FT_ERRORDEF( e, v, s ) e = v, +#define FT_ERROR_START_LIST enum { +#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) }; + +#ifdef __cplusplus +#define FT_NEED_EXTERN_C + extern "C" { +#endif + +#endif /* !FT_ERRORDEF */ + + + /* this macro is used to define an error */ +#define FT_ERRORDEF_( e, v, s ) \ + FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s ) + + /* this is only used for <module>_Err_Ok, which must be 0! */ +#define FT_NOERRORDEF_( e, v, s ) \ + FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s ) + + +#ifdef FT_ERROR_START_LIST + FT_ERROR_START_LIST +#endif + + + /* now include the error codes */ +#include FT_ERROR_DEFINITIONS_H + + +#ifdef FT_ERROR_END_LIST + FT_ERROR_END_LIST +#endif + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** SIMPLE CLEANUP *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + +#ifdef FT_NEED_EXTERN_C + } +#endif + +#undef FT_ERROR_START_LIST +#undef FT_ERROR_END_LIST + +#undef FT_ERRORDEF +#undef FT_ERRORDEF_ +#undef FT_NOERRORDEF_ + +#undef FT_NEED_EXTERN_C +#undef FT_ERR_BASE + + /* FT_ERR_PREFIX is needed internally */ +#ifndef FT2_BUILD_LIBRARY +#undef FT_ERR_PREFIX +#endif + + /* FT_INCLUDE_ERR_PROTOS: Control if function prototypes should be */ + /* included with `#include FT_ERRORS_H'. This is */ + /* only true where `FT_ERRORDEF` is undefined. */ + /* FT_ERR_PROTOS_DEFINED: Actual multiple-inclusion protection of */ + /* `fterrors.h`. */ +#ifdef FT_INCLUDE_ERR_PROTOS +#undef FT_INCLUDE_ERR_PROTOS + +#ifndef FT_ERR_PROTOS_DEFINED +#define FT_ERR_PROTOS_DEFINED + + + /************************************************************************** + * + * @function: + * FT_Error_String + * + * @description: + * Retrieve the description of a valid FreeType error code. + * + * @input: + * error_code :: + * A valid FreeType error code. + * + * @return: + * A C~string or `NULL`, if any error occurred. + * + * @note: + * FreeType has to be compiled with `FT_CONFIG_OPTION_ERROR_STRINGS` or + * `FT_DEBUG_LEVEL_ERROR` to get meaningful descriptions. + * 'error_string' will be `NULL` otherwise. + * + * Module identification will be ignored: + * + * ```c + * strcmp( FT_Error_String( FT_Err_Unknown_File_Format ), + * FT_Error_String( BDF_Err_Unknown_File_Format ) ) == 0; + * ``` + */ + FT_EXPORT( const char* ) + FT_Error_String( FT_Error error_code ); + + +#endif /* FT_ERR_PROTOS_DEFINED */ + +#endif /* FT_INCLUDE_ERR_PROTOS */ + +#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftfntfmt.h b/win32/include/freetype/freetype/ftfntfmt.h new file mode 100644 index 00000000..aae0b132 --- /dev/null +++ b/win32/include/freetype/freetype/ftfntfmt.h @@ -0,0 +1,94 @@ +/**************************************************************************** + * + * ftfntfmt.h + * + * Support functions for font formats. + * + * Copyright (C) 2002-2019 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 FTFNTFMT_H_ +#define FTFNTFMT_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * font_formats + * + * @title: + * Font Formats + * + * @abstract: + * Getting the font format. + * + * @description: + * The single function in this section can be used to get the font format. + * Note that this information is not needed normally; however, there are + * special cases (like in PDF devices) where it is important to + * differentiate, in spite of FreeType's uniform API. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_Font_Format + * + * @description: + * Return a string describing the format of a given face. Possible values + * are 'TrueType', 'Type~1', 'BDF', 'PCF', 'Type~42', 'CID~Type~1', 'CFF', + * 'PFR', and 'Windows~FNT'. + * + * The return value is suitable to be used as an X11 FONT_PROPERTY. + * + * @input: + * face :: + * Input face handle. + * + * @return: + * Font format string. `NULL` in case of error. + * + * @note: + * A deprecated name for the same function is `FT_Get_X11_Font_Format`. + */ + FT_EXPORT( const char* ) + FT_Get_Font_Format( FT_Face face ); + + + /* deprecated */ + FT_EXPORT( const char* ) + FT_Get_X11_Font_Format( FT_Face face ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTFNTFMT_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftgasp.h b/win32/include/freetype/freetype/ftgasp.h new file mode 100644 index 00000000..24673d8c --- /dev/null +++ b/win32/include/freetype/freetype/ftgasp.h @@ -0,0 +1,144 @@ +/**************************************************************************** + * + * ftgasp.h + * + * Access of TrueType's 'gasp' table (specification). + * + * Copyright (C) 2007-2019 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 FTGASP_H_ +#define FTGASP_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * gasp_table + * + * @title: + * Gasp Table + * + * @abstract: + * Retrieving TrueType 'gasp' table entries. + * + * @description: + * The function @FT_Get_Gasp can be used to query a TrueType or OpenType + * font for specific entries in its 'gasp' table, if any. This is mainly + * useful when implementing native TrueType hinting with the bytecode + * interpreter to duplicate the Windows text rendering results. + */ + + /************************************************************************** + * + * @enum: + * FT_GASP_XXX + * + * @description: + * A list of values and/or bit-flags returned by the @FT_Get_Gasp + * function. + * + * @values: + * FT_GASP_NO_TABLE :: + * This special value means that there is no GASP table in this face. + * It is up to the client to decide what to do. + * + * FT_GASP_DO_GRIDFIT :: + * Grid-fitting and hinting should be performed at the specified ppem. + * This **really** means TrueType bytecode interpretation. If this bit + * is not set, no hinting gets applied. + * + * FT_GASP_DO_GRAY :: + * Anti-aliased rendering should be performed at the specified ppem. + * If not set, do monochrome rendering. + * + * FT_GASP_SYMMETRIC_SMOOTHING :: + * If set, smoothing along multiple axes must be used with ClearType. + * + * FT_GASP_SYMMETRIC_GRIDFIT :: + * Grid-fitting must be used with ClearType's symmetric smoothing. + * + * @note: + * The bit-flags `FT_GASP_DO_GRIDFIT` and `FT_GASP_DO_GRAY` are to be + * used for standard font rasterization only. Independently of that, + * `FT_GASP_SYMMETRIC_SMOOTHING` and `FT_GASP_SYMMETRIC_GRIDFIT` are to + * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT` and + * `FT_GASP_DO_GRAY` are consequently ignored). + * + * 'ClearType' is Microsoft's implementation of LCD rendering, partly + * protected by patents. + * + * @since: + * 2.3.0 + */ +#define FT_GASP_NO_TABLE -1 +#define FT_GASP_DO_GRIDFIT 0x01 +#define FT_GASP_DO_GRAY 0x02 +#define FT_GASP_SYMMETRIC_GRIDFIT 0x04 +#define FT_GASP_SYMMETRIC_SMOOTHING 0x08 + + + /************************************************************************** + * + * @function: + * FT_Get_Gasp + * + * @description: + * For a TrueType or OpenType font file, return the rasterizer behaviour + * flags from the font's 'gasp' table corresponding to a given character + * pixel size. + * + * @input: + * face :: + * The source face handle. + * + * ppem :: + * The vertical character pixel size. + * + * @return: + * Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no + * 'gasp' table in the face. + * + * @note: + * If you want to use the MM functionality of OpenType variation fonts + * (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this + * function **after** setting an instance since the return values can + * change. + * + * @since: + * 2.3.0 + */ + FT_EXPORT( FT_Int ) + FT_Get_Gasp( FT_Face face, + FT_UInt ppem ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGASP_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftglyph.h b/win32/include/freetype/freetype/ftglyph.h new file mode 100644 index 00000000..4067c2e6 --- /dev/null +++ b/win32/include/freetype/freetype/ftglyph.h @@ -0,0 +1,665 @@ +/**************************************************************************** + * + * ftglyph.h + * + * FreeType convenience functions to handle glyphs (specification). + * + * Copyright (C) 1996-2019 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. + * + */ + + + /************************************************************************** + * + * This file contains the definition of several convenience functions that + * can be used by client applications to easily retrieve glyph bitmaps and + * outlines from a given face. + * + * These functions should be optional if you are writing a font server or + * text layout engine on top of FreeType. However, they are pretty handy + * for many other simple uses of the library. + * + */ + + +#ifndef FTGLYPH_H_ +#define FTGLYPH_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * glyph_management + * + * @title: + * Glyph Management + * + * @abstract: + * Generic interface to manage individual glyph data. + * + * @description: + * This section contains definitions used to manage glyph data through + * generic @FT_Glyph objects. Each of them can contain a bitmap, + * a vector outline, or even images in other formats. These objects are + * detached from @FT_Face, contrary to @FT_GlyphSlot. + * + */ + + + /* forward declaration to a private type */ + typedef struct FT_Glyph_Class_ FT_Glyph_Class; + + + /************************************************************************** + * + * @type: + * FT_Glyph + * + * @description: + * Handle to an object used to model generic glyph images. It is a + * pointer to the @FT_GlyphRec structure and can contain a glyph bitmap + * or pointer. + * + * @note: + * Glyph objects are not owned by the library. You must thus release + * them manually (through @FT_Done_Glyph) _before_ calling + * @FT_Done_FreeType. + */ + typedef struct FT_GlyphRec_* FT_Glyph; + + + /************************************************************************** + * + * @struct: + * FT_GlyphRec + * + * @description: + * The root glyph structure contains a given glyph image plus its advance + * width in 16.16 fixed-point format. + * + * @fields: + * library :: + * A handle to the FreeType library object. + * + * clazz :: + * A pointer to the glyph's class. Private. + * + * format :: + * The format of the glyph's image. + * + * advance :: + * A 16.16 vector that gives the glyph's advance width. + */ + typedef struct FT_GlyphRec_ + { + FT_Library library; + const FT_Glyph_Class* clazz; + FT_Glyph_Format format; + FT_Vector advance; + + } FT_GlyphRec; + + + /************************************************************************** + * + * @type: + * FT_BitmapGlyph + * + * @description: + * A handle to an object used to model a bitmap glyph image. This is a + * sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. + */ + typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph; + + + /************************************************************************** + * + * @struct: + * FT_BitmapGlyphRec + * + * @description: + * A structure used for bitmap glyph images. This really is a + * 'sub-class' of @FT_GlyphRec. + * + * @fields: + * root :: + * The root @FT_Glyph fields. + * + * left :: + * The left-side bearing, i.e., the horizontal distance from the + * current pen position to the left border of the glyph bitmap. + * + * top :: + * The top-side bearing, i.e., the vertical distance from the current + * pen position to the top border of the glyph bitmap. This distance + * is positive for upwards~y! + * + * bitmap :: + * A descriptor for the bitmap. + * + * @note: + * You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have + * `glyph->format == FT_GLYPH_FORMAT_BITMAP`. This lets you access the + * bitmap's contents easily. + * + * The corresponding pixel buffer is always owned by @FT_BitmapGlyph and + * is thus created and destroyed with it. + */ + typedef struct FT_BitmapGlyphRec_ + { + FT_GlyphRec root; + FT_Int left; + FT_Int top; + FT_Bitmap bitmap; + + } FT_BitmapGlyphRec; + + + /************************************************************************** + * + * @type: + * FT_OutlineGlyph + * + * @description: + * A handle to an object used to model an outline glyph image. This is a + * sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. + */ + typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph; + + + /************************************************************************** + * + * @struct: + * FT_OutlineGlyphRec + * + * @description: + * A structure used for outline (vectorial) glyph images. This really is + * a 'sub-class' of @FT_GlyphRec. + * + * @fields: + * root :: + * The root @FT_Glyph fields. + * + * outline :: + * A descriptor for the outline. + * + * @note: + * You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have + * `glyph->format == FT_GLYPH_FORMAT_OUTLINE`. This lets you access the + * outline's content easily. + * + * As the outline is extracted from a glyph slot, its coordinates are + * expressed normally in 26.6 pixels, unless the flag @FT_LOAD_NO_SCALE + * was used in @FT_Load_Glyph() or @FT_Load_Char(). + * + * The outline's tables are always owned by the object and are destroyed + * with it. + */ + typedef struct FT_OutlineGlyphRec_ + { + FT_GlyphRec root; + FT_Outline outline; + + } FT_OutlineGlyphRec; + + + /************************************************************************** + * + * @function: + * FT_New_Glyph + * + * @description: + * A function used to create a new empty glyph image. Note that the + * created @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * library :: + * A handle to the FreeType library object. + * + * format :: + * The format of the glyph's image. + * + * @output: + * aglyph :: + * A handle to the glyph object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_New_Glyph( FT_Library library, + FT_Glyph_Format format, + FT_Glyph *aglyph ); + + + /************************************************************************** + * + * @function: + * FT_Get_Glyph + * + * @description: + * A function used to extract a glyph image from a slot. Note that the + * created @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * slot :: + * A handle to the source glyph slot. + * + * @output: + * aglyph :: + * A handle to the glyph object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Because `*aglyph->advance.x` and `*aglyph->advance.y` are 16.16 + * fixed-point numbers, `slot->advance.x` and `slot->advance.y` (which + * are in 26.6 fixed-point format) must be in the range ]-32768;32768[. + */ + FT_EXPORT( FT_Error ) + FT_Get_Glyph( FT_GlyphSlot slot, + FT_Glyph *aglyph ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_Copy + * + * @description: + * A function used to copy a glyph image. Note that the created + * @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * source :: + * A handle to the source glyph object. + * + * @output: + * target :: + * A handle to the target glyph object. 0~in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_Copy( FT_Glyph source, + FT_Glyph *target ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_Transform + * + * @description: + * Transform a glyph image if its format is scalable. + * + * @inout: + * glyph :: + * A handle to the target glyph object. + * + * @input: + * matrix :: + * A pointer to a 2x2 matrix to apply. + * + * delta :: + * A pointer to a 2d vector to apply. Coordinates are expressed in + * 1/64th of a pixel. + * + * @return: + * FreeType error code (if not 0, the glyph format is not scalable). + * + * @note: + * The 2x2 transformation matrix is also applied to the glyph's advance + * vector. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_Transform( FT_Glyph glyph, + FT_Matrix* matrix, + FT_Vector* delta ); + + + /************************************************************************** + * + * @enum: + * FT_Glyph_BBox_Mode + * + * @description: + * The mode how the values of @FT_Glyph_Get_CBox are returned. + * + * @values: + * FT_GLYPH_BBOX_UNSCALED :: + * Return unscaled font units. + * + * FT_GLYPH_BBOX_SUBPIXELS :: + * Return unfitted 26.6 coordinates. + * + * FT_GLYPH_BBOX_GRIDFIT :: + * Return grid-fitted 26.6 coordinates. + * + * FT_GLYPH_BBOX_TRUNCATE :: + * Return coordinates in integer pixels. + * + * FT_GLYPH_BBOX_PIXELS :: + * Return grid-fitted pixel coordinates. + */ + typedef enum FT_Glyph_BBox_Mode_ + { + FT_GLYPH_BBOX_UNSCALED = 0, + FT_GLYPH_BBOX_SUBPIXELS = 0, + FT_GLYPH_BBOX_GRIDFIT = 1, + FT_GLYPH_BBOX_TRUNCATE = 2, + FT_GLYPH_BBOX_PIXELS = 3 + + } FT_Glyph_BBox_Mode; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Glyph_BBox_Mode` values instead */ +#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED +#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS +#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT +#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE +#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS + + + /************************************************************************** + * + * @function: + * FT_Glyph_Get_CBox + * + * @description: + * Return a glyph's 'control box'. The control box encloses all the + * outline's points, including Bezier control points. Though it + * coincides with the exact bounding box for most glyphs, it can be + * slightly larger in some situations (like when rotating an outline that + * contains Bezier outside arcs). + * + * Computing the control box is very fast, while getting the bounding box + * can take much more time as it needs to walk over all segments and arcs + * in the outline. To get the latter, you can use the 'ftbbox' + * component, which is dedicated to this single task. + * + * @input: + * glyph :: + * A handle to the source glyph object. + * + * mode :: + * The mode that indicates how to interpret the returned bounding box + * values. + * + * @output: + * acbox :: + * The glyph coordinate bounding box. Coordinates are expressed in + * 1/64th of pixels if it is grid-fitted. + * + * @note: + * Coordinates are relative to the glyph origin, using the y~upwards + * convention. + * + * If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode` must + * be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6 + * pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS is another name for + * this constant. + * + * If the font is tricky and the glyph has been loaded with + * @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get + * reasonable values for the CBox it is necessary to load the glyph at a + * large ppem value (so that the hinting instructions can properly shift + * and scale the subglyphs), then extracting the CBox, which can be + * eventually converted back to font units. + * + * Note that the maximum coordinates are exclusive, which means that one + * can compute the width and height of the glyph image (be it in integer + * or 26.6 pixels) as: + * + * ``` + * width = bbox.xMax - bbox.xMin; + * height = bbox.yMax - bbox.yMin; + * ``` + * + * Note also that for 26.6 coordinates, if `bbox_mode` is set to + * @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, + * which corresponds to: + * + * ``` + * bbox.xMin = FLOOR(bbox.xMin); + * bbox.yMin = FLOOR(bbox.yMin); + * bbox.xMax = CEILING(bbox.xMax); + * bbox.yMax = CEILING(bbox.yMax); + * ``` + * + * To get the bbox in pixel coordinates, set `bbox_mode` to + * @FT_GLYPH_BBOX_TRUNCATE. + * + * To get the bbox in grid-fitted pixel coordinates, set `bbox_mode` to + * @FT_GLYPH_BBOX_PIXELS. + */ + FT_EXPORT( void ) + FT_Glyph_Get_CBox( FT_Glyph glyph, + FT_UInt bbox_mode, + FT_BBox *acbox ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_To_Bitmap + * + * @description: + * Convert a given glyph object to a bitmap glyph object. + * + * @inout: + * the_glyph :: + * A pointer to a handle to the target glyph. + * + * @input: + * render_mode :: + * An enumeration that describes how the data is rendered. + * + * origin :: + * A pointer to a vector used to translate the glyph image before + * rendering. Can be~0 (if no translation). The origin is expressed + * in 26.6 pixels. + * + * destroy :: + * A boolean that indicates that the original glyph image should be + * destroyed by this function. It is never destroyed in case of error. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function does nothing if the glyph format isn't scalable. + * + * The glyph image is translated with the `origin` vector before + * rendering. + * + * The first parameter is a pointer to an @FT_Glyph handle, that will be + * _replaced_ by this function (with newly allocated data). Typically, + * you would use (omitting error handling): + * + * ``` + * FT_Glyph glyph; + * FT_BitmapGlyph glyph_bitmap; + * + * + * // load glyph + * error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); + * + * // extract glyph image + * error = FT_Get_Glyph( face->glyph, &glyph ); + * + * // convert to a bitmap (default render mode + destroying old) + * if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) + * { + * error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, + * 0, 1 ); + * if ( error ) // `glyph' unchanged + * ... + * } + * + * // access bitmap content by typecasting + * glyph_bitmap = (FT_BitmapGlyph)glyph; + * + * // do funny stuff with it, like blitting/drawing + * ... + * + * // discard glyph image (bitmap or not) + * FT_Done_Glyph( glyph ); + * ``` + * + * Here is another example, again without error handling: + * + * ``` + * FT_Glyph glyphs[MAX_GLYPHS] + * + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || + * FT_Get_Glyph ( face->glyph, &glyphs[idx] ); + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * { + * FT_Glyph bitmap = glyphs[idx]; + * + * + * ... + * + * // after this call, `bitmap' no longer points into + * // the `glyphs' array (and the old value isn't destroyed) + * FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); + * + * ... + * + * FT_Done_Glyph( bitmap ); + * } + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * FT_Done_Glyph( glyphs[idx] ); + * ``` + */ + FT_EXPORT( FT_Error ) + FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, + FT_Render_Mode render_mode, + FT_Vector* origin, + FT_Bool destroy ); + + + /************************************************************************** + * + * @function: + * FT_Done_Glyph + * + * @description: + * Destroy a given glyph. + * + * @input: + * glyph :: + * A handle to the target glyph object. + */ + FT_EXPORT( void ) + FT_Done_Glyph( FT_Glyph glyph ); + + /* */ + + + /* other helpful functions */ + + /************************************************************************** + * + * @section: + * computations + * + */ + + + /************************************************************************** + * + * @function: + * FT_Matrix_Multiply + * + * @description: + * Perform the matrix operation `b = a*b`. + * + * @input: + * a :: + * A pointer to matrix `a`. + * + * @inout: + * b :: + * A pointer to matrix `b`. + * + * @note: + * The result is undefined if either `a` or `b` is zero. + * + * Since the function uses wrap-around arithmetic, results become + * meaningless if the arguments are very large. + */ + FT_EXPORT( void ) + FT_Matrix_Multiply( const FT_Matrix* a, + FT_Matrix* b ); + + + /************************************************************************** + * + * @function: + * FT_Matrix_Invert + * + * @description: + * Invert a 2x2 matrix. Return an error if it can't be inverted. + * + * @inout: + * matrix :: + * A pointer to the target matrix. Remains untouched in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Matrix_Invert( FT_Matrix* matrix ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGLYPH_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/win32/include/freetype/freetype/ftgxval.h b/win32/include/freetype/freetype/ftgxval.h new file mode 100644 index 00000000..b14f637c --- /dev/null +++ b/win32/include/freetype/freetype/ftgxval.h @@ -0,0 +1,355 @@ +/**************************************************************************** + * + * ftgxval.h + * + * FreeType API for validating TrueTypeGX/AAT tables (specification). + * + * Copyright (C) 2004-2019 by + * Masatake YAMATO, Redhat K.K, + * 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. + * + */ + +/**************************************************************************** + * + * gxvalid is derived from both gxlayout module and otvalid module. + * Development of gxlayout is supported by the Information-technology + * Promotion Agency(IPA), Japan. + * + */ + + +#ifndef FTGXVAL_H_ +#define FTGXVAL_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * gx_validation + * + * @title: + * TrueTypeGX/AAT Validation + * + * @abstract: + * An API to validate TrueTypeGX/AAT tables. + * + * @description: + * This section contains the declaration of functions to validate some + * TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, + * prop, lcar). + * + * @order: + * FT_TrueTypeGX_Validate + * FT_TrueTypeGX_Free + * + * FT_ClassicKern_Validate + * FT_ClassicKern_Free + * + * FT_VALIDATE_GX_LENGTH + * FT_VALIDATE_GXXXX + * FT_VALIDATE_CKERNXXX + * + */ + + /************************************************************************** + * + * + * Warning: Use `FT_VALIDATE_XXX` to validate a table. + * Following definitions are for gxvalid developers. + * + * + */ + +#define FT_VALIDATE_feat_INDEX 0 +#define FT_VALIDATE_mort_INDEX 1 +#define FT_VALIDATE_morx_INDEX 2 +#define FT_VALIDATE_bsln_INDEX 3 +#define FT_VALIDATE_just_INDEX 4 +#define FT_VALIDATE_kern_INDEX 5 +#define FT_VALIDATE_opbd_INDEX 6 +#define FT_VALIDATE_trak_INDEX 7 +#define FT_VALIDATE_prop_INDEX 8 +#define FT_VALIDATE_lcar_INDEX 9 +#define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX + + + /************************************************************************** + * + * @macro: + * FT_VALIDATE_GX_LENGTH + * + * @description: + * The number of tables checked in this module. Use it as a parameter + * for the `table-length` argument of function @FT_TrueTypeGX_Validate. + */ +#define FT_VALIDATE_GX_LENGTH ( FT_VALIDATE_GX_LAST_INDEX + 1 ) + + /* */ + + /* Up to 0x1000 is used by otvalid. + Ox2xxx is reserved for feature OT extension. */ +#define FT_VALIDATE_GX_START 0x4000 +#define FT_VALIDATE_GX_BITFIELD( tag ) \ + ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_GXXXX + * + * @description: + * A list of bit-field constants used with @FT_TrueTypeGX_Validate to + * indicate which TrueTypeGX/AAT Type tables should be validated. + * + * @values: + * FT_VALIDATE_feat :: + * Validate 'feat' table. + * + * FT_VALIDATE_mort :: + * Validate 'mort' table. + * + * FT_VALIDATE_morx :: + * Validate 'morx' table. + * + * FT_VALIDATE_bsln :: + * Validate 'bsln' table. + * + * FT_VALIDATE_just :: + * Validate 'just' table. + * + * FT_VALIDATE_kern :: + * Validate 'kern' table. + * + * FT_VALIDATE_opbd :: + * Validate 'opbd' table. + * + * FT_VALIDATE_trak :: + * Validate 'trak' table. + * + * FT_VALIDATE_prop :: + * Validate 'prop' table. + * + * FT_VALIDATE_lcar :: + * Validate 'lcar' table. + * + * FT_VALIDATE_GX :: + * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, + * opbd, trak, prop and lcar). + * + */ + +#define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat ) +#define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort ) +#define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx ) +#define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln ) +#define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just ) +#define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern ) +#define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd ) +#define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak ) +#define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop ) +#define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar ) + +#define FT_VALIDATE_GX ( FT_VALIDATE_feat | \ + FT_VALIDATE_mort | \ + FT_VALIDATE_morx | \ + FT_VALIDATE_bsln | \ + FT_VALIDATE_just | \ + FT_VALIDATE_kern | \ + FT_VALIDATE_opbd | \ + FT_VALIDATE_trak | \ + FT_VALIDATE_prop | \ + FT_VALIDATE_lcar ) + + + /************************************************************************** + * + * @function: + * FT_TrueTypeGX_Validate + * + * @description: + * Validate various TrueTypeGX tables to assure that all offsets and + * indices are valid. The idea is that a higher-level library that + * actually does the text layout can access those tables without error + * checking (which can be quite time consuming). + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the tables to be validated. See + * @FT_VALIDATE_GXXXX for possible values. + * + * table_length :: + * The size of the `tables` array. Normally, @FT_VALIDATE_GX_LENGTH + * should be passed. + * + * @output: + * tables :: + * The array where all validated sfnt tables are stored. The array + * itself must be allocated by a client. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with TrueTypeGX fonts, returning an error + * otherwise. + * + * After use, the application should deallocate the buffers pointed to by + * each `tables` element, by calling @FT_TrueTypeGX_Free. A `NULL` value + * indicates that the table either doesn't exist in the font, the + * application hasn't asked for validation, or the validator doesn't have + * the ability to validate the sfnt table. + */ + FT_EXPORT( FT_Error ) + FT_TrueTypeGX_Validate( FT_Face face, + FT_UInt validation_flags, + FT_Bytes tables[FT_VALIDATE_GX_LENGTH], + FT_UInt table_length ); + + + /************************************************************************** + * + * @function: + * FT_TrueTypeGX_Free + * + * @description: + * Free the buffer allocated by TrueTypeGX validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer allocated by @FT_TrueTypeGX_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_TrueTypeGX_Validate only. + */ + FT_EXPORT( void ) + FT_TrueTypeGX_Free( FT_Face face, + FT_Bytes table ); + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_CKERNXXX + * + * @description: + * A list of bit-field constants used with @FT_ClassicKern_Validate to + * indicate the classic kern dialect or dialects. If the selected type + * doesn't fit, @FT_ClassicKern_Validate regards the table as invalid. + * + * @values: + * FT_VALIDATE_MS :: + * Handle the 'kern' table as a classic Microsoft kern table. + * + * FT_VALIDATE_APPLE :: + * Handle the 'kern' table as a classic Apple kern table. + * + * FT_VALIDATE_CKERN :: + * Handle the 'kern' as either classic Apple or Microsoft kern table. + */ +#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 ) +#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 ) + +#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE ) + + + /************************************************************************** + * + * @function: + * FT_ClassicKern_Validate + * + * @description: + * Validate classic (16-bit format) kern table to assure that the + * offsets and indices are valid. The idea is that a higher-level + * library that actually does the text layout can access those tables + * without error checking (which can be quite time consuming). + * + * The 'kern' table validator in @FT_TrueTypeGX_Validate deals with both + * the new 32-bit format and the classic 16-bit format, while + * FT_ClassicKern_Validate only supports the classic 16-bit format. + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the dialect to be validated. See + * @FT_VALIDATE_CKERNXXX for possible values. + * + * @output: + * ckern_table :: + * A pointer to the kern table. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * After use, the application should deallocate the buffers pointed to by + * `ckern_table`, by calling @FT_ClassicKern_Free. A `NULL` value + * indicates that the table doesn't exist in the font. + */ + FT_EXPORT( FT_Error ) + FT_ClassicKern_Validate( FT_Face face, + FT_UInt validation_flags, + FT_Bytes *ckern_table ); + + + /************************************************************************** + * + * @function: + * FT_ClassicKern_Free + * + * @description: + * Free the buffer allocated by classic Kern validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer that is allocated by + * @FT_ClassicKern_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_ClassicKern_Validate only. + */ + FT_EXPORT( void ) + FT_ClassicKern_Free( FT_Face face, + FT_Bytes table ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGXVAL_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftgzip.h b/win32/include/freetype/freetype/ftgzip.h new file mode 100644 index 00000000..418c6122 --- /dev/null +++ b/win32/include/freetype/freetype/ftgzip.h @@ -0,0 +1,151 @@ +/**************************************************************************** + * + * ftgzip.h + * + * Gzip-compressed stream support. + * + * Copyright (C) 2002-2019 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 FTGZIP_H_ +#define FTGZIP_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * gzip + * + * @title: + * GZIP Streams + * + * @abstract: + * Using gzip-compressed font files. + * + * @description: + * This section contains the declaration of Gzip-specific functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Stream_OpenGzip + * + * @description: + * Open a new stream to parse gzip-compressed font files. This is mainly + * used to support the compressed `*.pcf.gz` fonts that come with + * XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream. + * + * In certain builds of the library, gzip compression recognition is + * automatically handled when calling @FT_New_Face or @FT_Open_Face. + * This means that if no font driver is capable of handling the raw + * compressed file, the library will try to open a gzipped stream from it + * and re-open the face with it. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with zlib support. + */ + FT_EXPORT( FT_Error ) + FT_Stream_OpenGzip( FT_Stream stream, + FT_Stream source ); + + + /************************************************************************** + * + * @function: + * FT_Gzip_Uncompress + * + * @description: + * Decompress a zipped input buffer into an output buffer. This function + * is modeled after zlib's `uncompress` function. + * + * @input: + * memory :: + * A FreeType memory handle. + * + * input :: + * The input buffer. + * + * input_len :: + * The length of the input buffer. + * + * @output: + * output :: + * The output buffer. + * + * @inout: + * output_len :: + * Before calling the function, this is the total size of the output + * buffer, which must be large enough to hold the entire uncompressed + * data (so the size of the uncompressed data must be known in + * advance). After calling the function, `output_len` is the size of + * the used data in `output`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with zlib support. + * + * @since: + * 2.5.1 + */ + FT_EXPORT( FT_Error ) + FT_Gzip_Uncompress( FT_Memory memory, + FT_Byte* output, + FT_ULong* output_len, + const FT_Byte* input, + FT_ULong input_len ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGZIP_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftimage.h b/win32/include/freetype/freetype/ftimage.h new file mode 100644 index 00000000..d640b0b0 --- /dev/null +++ b/win32/include/freetype/freetype/ftimage.h @@ -0,0 +1,1240 @@ +/**************************************************************************** + * + * ftimage.h + * + * FreeType glyph image formats and default raster interface + * (specification). + * + * Copyright (C) 1996-2019 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. + * + */ + + /************************************************************************** + * + * Note: A 'raster' is simply a scan-line converter, used to render + * FT_Outlines into FT_Bitmaps. + * + */ + + +#ifndef FTIMAGE_H_ +#define FTIMAGE_H_ + + + /* STANDALONE_ is from ftgrays.c */ +#ifndef STANDALONE_ +#include <ft2build.h> +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @type: + * FT_Pos + * + * @description: + * The type FT_Pos is used to store vectorial coordinates. Depending on + * the context, these can represent distances in integer font units, or + * 16.16, or 26.6 fixed-point pixel coordinates. + */ + typedef signed long FT_Pos; + + + /************************************************************************** + * + * @struct: + * FT_Vector + * + * @description: + * A simple structure used to store a 2D vector; coordinates are of the + * FT_Pos type. + * + * @fields: + * x :: + * The horizontal coordinate. + * y :: + * The vertical coordinate. + */ + typedef struct FT_Vector_ + { + FT_Pos x; + FT_Pos y; + + } FT_Vector; + + + /************************************************************************** + * + * @struct: + * FT_BBox + * + * @description: + * A structure used to hold an outline's bounding box, i.e., the + * coordinates of its extrema in the horizontal and vertical directions. + * + * @fields: + * xMin :: + * The horizontal minimum (left-most). + * + * yMin :: + * The vertical minimum (bottom-most). + * + * xMax :: + * The horizontal maximum (right-most). + * + * yMax :: + * The vertical maximum (top-most). + * + * @note: + * The bounding box is specified with the coordinates of the lower left + * and the upper right corner. In PostScript, those values are often + * called (llx,lly) and (urx,ury), respectively. + * + * If `yMin` is negative, this value gives the glyph's descender. + * Otherwise, the glyph doesn't descend below the baseline. Similarly, + * if `ymax` is positive, this value gives the glyph's ascender. + * + * `xMin` gives the horizontal distance from the glyph's origin to the + * left edge of the glyph's bounding box. If `xMin` is negative, the + * glyph extends to the left of the origin. + */ + typedef struct FT_BBox_ + { + FT_Pos xMin, yMin; + FT_Pos xMax, yMax; + + } FT_BBox; + + + /************************************************************************** + * + * @enum: + * FT_Pixel_Mode + * + * @description: + * An enumeration type used to describe the format of pixels in a given + * bitmap. Note that additional formats may be added in the future. + * + * @values: + * FT_PIXEL_MODE_NONE :: + * Value~0 is reserved. + * + * FT_PIXEL_MODE_MONO :: + * A monochrome bitmap, using 1~bit per pixel. Note that pixels are + * stored in most-significant order (MSB), which means that the + * left-most pixel in a byte has value 128. + * + * FT_PIXEL_MODE_GRAY :: + * An 8-bit bitmap, generally used to represent anti-aliased glyph + * images. Each pixel is stored in one byte. Note that the number of + * 'gray' levels is stored in the `num_grays` field of the @FT_Bitmap + * structure (it generally is 256). + * + * FT_PIXEL_MODE_GRAY2 :: + * A 2-bit per pixel bitmap, used to represent embedded anti-aliased + * bitmaps in font files according to the OpenType specification. We + * haven't found a single font using this format, however. + * + * FT_PIXEL_MODE_GRAY4 :: + * A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps + * in font files according to the OpenType specification. We haven't + * found a single font using this format, however. + * + * FT_PIXEL_MODE_LCD :: + * An 8-bit bitmap, representing RGB or BGR decimated glyph images used + * for display on LCD displays; the bitmap is three times wider than + * the original glyph image. See also @FT_RENDER_MODE_LCD. + * + * FT_PIXEL_MODE_LCD_V :: + * An 8-bit bitmap, representing RGB or BGR decimated glyph images used + * for display on rotated LCD displays; the bitmap is three times + * taller than the original glyph image. See also + * @FT_RENDER_MODE_LCD_V. + * + * FT_PIXEL_MODE_BGRA :: + * [Since 2.5] An image with four 8-bit channels per pixel, + * representing a color image (such as emoticons) with alpha channel. + * For each pixel, the format is BGRA, which means, the blue channel + * comes first in memory. The color channels are pre-multiplied and in + * the sRGB colorspace. For example, full red at half-translucent + * opacity will be represented as '00,00,80,80', not '00,00,FF,80'. + * See also @FT_LOAD_COLOR. + */ + typedef enum FT_Pixel_Mode_ + { + FT_PIXEL_MODE_NONE = 0, + FT_PIXEL_MODE_MONO, + FT_PIXEL_MODE_GRAY, + FT_PIXEL_MODE_GRAY2, + FT_PIXEL_MODE_GRAY4, + FT_PIXEL_MODE_LCD, + FT_PIXEL_MODE_LCD_V, + FT_PIXEL_MODE_BGRA, + + FT_PIXEL_MODE_MAX /* do not remove */ + + } FT_Pixel_Mode; + + + /* these constants are deprecated; use the corresponding `FT_Pixel_Mode` */ + /* values instead. */ +#define ft_pixel_mode_none FT_PIXEL_MODE_NONE +#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO +#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY +#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 +#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 + + + /************************************************************************** + * + * @struct: + * FT_Bitmap + * + * @description: + * A structure used to describe a bitmap or pixmap to the raster. Note + * that we now manage pixmaps of various depths through the `pixel_mode` + * field. + * + * @fields: + * rows :: + * The number of bitmap rows. + * + * width :: + * The number of pixels in bitmap row. + * + * pitch :: + * The pitch's absolute value is the number of bytes taken by one + * bitmap row, including padding. However, the pitch is positive when + * the bitmap has a 'down' flow, and negative when it has an 'up' flow. + * In all cases, the pitch is an offset to add to a bitmap pointer in + * order to go down one row. + * + * Note that 'padding' means the alignment of a bitmap to a byte + * border, and FreeType functions normally align to the smallest + * possible integer value. + * + * For the B/W rasterizer, `pitch` is always an even number. + * + * To change the pitch of a bitmap (say, to make it a multiple of 4), + * use @FT_Bitmap_Convert. Alternatively, you might use callback + * functions to directly render to the application's surface; see the + * file `example2.cpp` in the tutorial for a demonstration. + * + * buffer :: + * A typeless pointer to the bitmap buffer. This value should be + * aligned on 32-bit boundaries in most cases. + * + * num_grays :: + * This field is only used with @FT_PIXEL_MODE_GRAY; it gives the + * number of gray levels used in the bitmap. + * + * pixel_mode :: + * The pixel mode, i.e., how pixel bits are stored. See @FT_Pixel_Mode + * for possible values. + * + * palette_mode :: + * This field is intended for paletted pixel modes; it indicates how + * the palette is stored. Not used currently. + * + * palette :: + * A typeless pointer to the bitmap palette; this field is intended for + * paletted pixel modes. Not used currently. + */ + typedef struct FT_Bitmap_ + { + unsigned int rows; + unsigned int width; + int pitch; + unsigned char* buffer; + unsigned short num_grays; + unsigned char pixel_mode; + unsigned char palette_mode; + void* palette; + + } FT_Bitmap; + + + /************************************************************************** + * + * @section: + * outline_processing + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Outline + * + * @description: + * This structure is used to describe an outline to the scan-line + * converter. + * + * @fields: + * n_contours :: + * The number of contours in the outline. + * + * n_points :: + * The number of points in the outline. + * + * points :: + * A pointer to an array of `n_points` @FT_Vector elements, giving the + * outline's point coordinates. + * + * tags :: + * A pointer to an array of `n_points` chars, giving each outline + * point's type. + * + * If bit~0 is unset, the point is 'off' the curve, i.e., a Bezier + * control point, while it is 'on' if set. + * + * Bit~1 is meaningful for 'off' points only. If set, it indicates a + * third-order Bezier arc control point; and a second-order control + * point if unset. + * + * If bit~2 is set, bits 5-7 contain the drop-out mode (as defined in + * the OpenType specification; the value is the same as the argument to + * the 'SCANMODE' instruction). + * + * Bits 3 and~4 are reserved for internal purposes. + * + * contours :: + * An array of `n_contours` shorts, giving the end point of each + * contour within the outline. For example, the first contour is + * defined by the points '0' to `contours[0]`, the second one is + * defined by the points `contours[0]+1` to `contours[1]`, etc. + * + * flags :: + * A set of bit flags used to characterize the outline and give hints + * to the scan-converter and hinter on how to convert/grid-fit it. See + * @FT_OUTLINE_XXX. + * + * @note: + * The B/W rasterizer only checks bit~2 in the `tags` array for the first + * point of each contour. The drop-out mode as given with + * @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and + * @FT_OUTLINE_INCLUDE_STUBS in `flags` is then overridden. + */ + typedef struct FT_Outline_ + { + short n_contours; /* number of contours in glyph */ + short n_points; /* number of points in the glyph */ + + FT_Vector* points; /* the outline's points */ + char* tags; /* the points flags */ + short* contours; /* the contour end points */ + + int flags; /* outline masks */ + + } FT_Outline; + + /* */ + + /* Following limits must be consistent with */ + /* FT_Outline.{n_contours,n_points} */ +#define FT_OUTLINE_CONTOURS_MAX SHRT_MAX +#define FT_OUTLINE_POINTS_MAX SHRT_MAX + + + /************************************************************************** + * + * @enum: + * FT_OUTLINE_XXX + * + * @description: + * A list of bit-field constants used for the flags in an outline's + * `flags` field. + * + * @values: + * FT_OUTLINE_NONE :: + * Value~0 is reserved. + * + * FT_OUTLINE_OWNER :: + * If set, this flag indicates that the outline's field arrays (i.e., + * `points`, `flags`, and `contours`) are 'owned' by the outline + * object, and should thus be freed when it is destroyed. + * + * FT_OUTLINE_EVEN_ODD_FILL :: + * By default, outlines are filled using the non-zero winding rule. If + * set to 1, the outline will be filled using the even-odd fill rule + * (only works with the smooth rasterizer). + * + * FT_OUTLINE_REVERSE_FILL :: + * By default, outside contours of an outline are oriented in + * clock-wise direction, as defined in the TrueType specification. + * This flag is set if the outline uses the opposite direction + * (typically for Type~1 fonts). This flag is ignored by the scan + * converter. + * + * FT_OUTLINE_IGNORE_DROPOUTS :: + * By default, the scan converter will try to detect drop-outs in an + * outline and correct the glyph bitmap to ensure consistent shape + * continuity. If set, this flag hints the scan-line converter to + * ignore such cases. See below for more information. + * + * FT_OUTLINE_SMART_DROPOUTS :: + * Select smart dropout control. If unset, use simple dropout control. + * Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more + * information. + * + * FT_OUTLINE_INCLUDE_STUBS :: + * If set, turn pixels on for 'stubs', otherwise exclude them. Ignored + * if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more + * information. + * + * FT_OUTLINE_HIGH_PRECISION :: + * This flag indicates that the scan-line converter should try to + * convert this outline to bitmaps with the highest possible quality. + * It is typically set for small character sizes. Note that this is + * only a hint that might be completely ignored by a given + * scan-converter. + * + * FT_OUTLINE_SINGLE_PASS :: + * This flag is set to force a given scan-converter to only use a + * single pass over the outline to render a bitmap glyph image. + * Normally, it is set for very large character sizes. It is only a + * hint that might be completely ignored by a given scan-converter. + * + * @note: + * The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and + * @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth rasterizer. + * + * There exists a second mechanism to pass the drop-out mode to the B/W + * rasterizer; see the `tags` field in @FT_Outline. + * + * Please refer to the description of the 'SCANTYPE' instruction in the + * OpenType specification (in file `ttinst1.doc`) how simple drop-outs, + * smart drop-outs, and stubs are defined. + */ +#define FT_OUTLINE_NONE 0x0 +#define FT_OUTLINE_OWNER 0x1 +#define FT_OUTLINE_EVEN_ODD_FILL 0x2 +#define FT_OUTLINE_REVERSE_FILL 0x4 +#define FT_OUTLINE_IGNORE_DROPOUTS 0x8 +#define FT_OUTLINE_SMART_DROPOUTS 0x10 +#define FT_OUTLINE_INCLUDE_STUBS 0x20 + +#define FT_OUTLINE_HIGH_PRECISION 0x100 +#define FT_OUTLINE_SINGLE_PASS 0x200 + + + /* these constants are deprecated; use the corresponding */ + /* `FT_OUTLINE_XXX` values instead */ +#define ft_outline_none FT_OUTLINE_NONE +#define ft_outline_owner FT_OUTLINE_OWNER +#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL +#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL +#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS +#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION +#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS + + /* */ + +#define FT_CURVE_TAG( flag ) ( flag & 0x03 ) + + /* see the `tags` field in `FT_Outline` for a description of the values */ +#define FT_CURVE_TAG_ON 0x01 +#define FT_CURVE_TAG_CONIC 0x00 +#define FT_CURVE_TAG_CUBIC 0x02 + +#define FT_CURVE_TAG_HAS_SCANMODE 0x04 + +#define FT_CURVE_TAG_TOUCH_X 0x08 /* reserved for TrueType hinter */ +#define FT_CURVE_TAG_TOUCH_Y 0x10 /* reserved for TrueType hinter */ + +#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \ + FT_CURVE_TAG_TOUCH_Y ) + /* values 0x20, 0x40, and 0x80 are reserved */ + + + /* these constants are deprecated; use the corresponding */ + /* `FT_CURVE_TAG_XXX` values instead */ +#define FT_Curve_Tag_On FT_CURVE_TAG_ON +#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC +#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC +#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X +#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y + + + /************************************************************************** + * + * @functype: + * FT_Outline_MoveToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'move to' + * function during outline walking/decomposition. + * + * A 'move to' is emitted to start a new contour in an outline. + * + * @input: + * to :: + * A pointer to the target point of the 'move to'. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_MoveToFunc)( const FT_Vector* to, + void* user ); + +#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc + + + /************************************************************************** + * + * @functype: + * FT_Outline_LineToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'line to' + * function during outline walking/decomposition. + * + * A 'line to' is emitted to indicate a segment in the outline. + * + * @input: + * to :: + * A pointer to the target point of the 'line to'. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_LineToFunc)( const FT_Vector* to, + void* user ); + +#define FT_Outline_LineTo_Func FT_Outline_LineToFunc + + + /************************************************************************** + * + * @functype: + * FT_Outline_ConicToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'conic to' + * function during outline walking or decomposition. + * + * A 'conic to' is emitted to indicate a second-order Bezier arc in the + * outline. + * + * @input: + * control :: + * An intermediate control point between the last position and the new + * target in `to`. + * + * to :: + * A pointer to the target end point of the conic arc. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_ConicToFunc)( const FT_Vector* control, + const FT_Vector* to, + void* user ); + +#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc + + + /************************************************************************** + * + * @functype: + * FT_Outline_CubicToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'cubic to' + * function during outline walking or decomposition. + * + * A 'cubic to' is emitted to indicate a third-order Bezier arc. + * + * @input: + * control1 :: + * A pointer to the first Bezier control point. + * + * control2 :: + * A pointer to the second Bezier control point. + * + * to :: + * A pointer to the target end point. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_CubicToFunc)( const FT_Vector* control1, + const FT_Vector* control2, + const FT_Vector* to, + void* user ); + +#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc + + + /************************************************************************** + * + * @struct: + * FT_Outline_Funcs + * + * @description: + * A structure to hold various function pointers used during outline + * decomposition in order to emit segments, conic, and cubic Beziers. + * + * @fields: + * move_to :: + * The 'move to' emitter. + * + * line_to :: + * The segment emitter. + * + * conic_to :: + * The second-order Bezier arc emitter. + * + * cubic_to :: + * The third-order Bezier arc emitter. + * + * shift :: + * The shift that is applied to coordinates before they are sent to the + * emitter. + * + * delta :: + * The delta that is applied to coordinates before they are sent to the + * emitter, but after the shift. + * + * @note: + * The point coordinates sent to the emitters are the transformed version + * of the original coordinates (this is important for high accuracy + * during scan-conversion). The transformation is simple: + * + * ``` + * x' = (x << shift) - delta + * y' = (y << shift) - delta + * ``` + * + * Set the values of `shift` and `delta` to~0 to get the original point + * coordinates. + */ + typedef struct FT_Outline_Funcs_ + { + FT_Outline_MoveToFunc move_to; + FT_Outline_LineToFunc line_to; + FT_Outline_ConicToFunc conic_to; + FT_Outline_CubicToFunc cubic_to; + + int shift; + FT_Pos delta; + + } FT_Outline_Funcs; + + + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @macro: + * FT_IMAGE_TAG + * + * @description: + * This macro converts four-letter tags to an unsigned long type. + * + * @note: + * Since many 16-bit compilers don't like 32-bit enumerations, you should + * redefine this macro in case of problems to something like this: + * + * ``` + * #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value + * ``` + * + * 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 ) +#endif /* FT_IMAGE_TAG */ + + + /************************************************************************** + * + * @enum: + * FT_Glyph_Format + * + * @description: + * An enumeration type used to describe the format of a given glyph + * image. Note that this version of FreeType only supports two image + * formats, even though future font drivers will be able to register + * their own format. + * + * @values: + * FT_GLYPH_FORMAT_NONE :: + * The value~0 is reserved. + * + * FT_GLYPH_FORMAT_COMPOSITE :: + * The glyph image is a composite of several other images. This format + * is _only_ used with @FT_LOAD_NO_RECURSE, and is used to report + * compound glyphs (like accented characters). + * + * FT_GLYPH_FORMAT_BITMAP :: + * The glyph image is a bitmap, and can be described as an @FT_Bitmap. + * You generally need to access the `bitmap` field of the + * @FT_GlyphSlotRec structure to read it. + * + * FT_GLYPH_FORMAT_OUTLINE :: + * The glyph image is a vectorial outline made of line segments and + * Bezier arcs; it can be described as an @FT_Outline; you generally + * want to access the `outline` field of the @FT_GlyphSlotRec structure + * to read it. + * + * FT_GLYPH_FORMAT_PLOTTER :: + * The glyph image is a vectorial path with no inside and outside + * contours. Some Type~1 fonts, like those in the Hershey family, + * contain glyphs in this format. These are described as @FT_Outline, + * but FreeType isn't currently capable of rendering them correctly. + */ + typedef enum FT_Glyph_Format_ + { + FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ), + + FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ) + + } FT_Glyph_Format; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Glyph_Format` values instead. */ +#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE +#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE +#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP +#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE +#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** R A S T E R D E F I N I T I O N S *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * 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. + * + */ + + + /************************************************************************** + * + * @section: + * raster + * + * @title: + * Scanline Converter + * + * @abstract: + * How vectorial outlines are converted into bitmaps and pixmaps. + * + * @description: + * This section contains technical definitions. + * + * @order: + * FT_Raster + * FT_Span + * FT_SpanFunc + * + * FT_Raster_Params + * FT_RASTER_FLAG_XXX + * + * FT_Raster_NewFunc + * FT_Raster_DoneFunc + * FT_Raster_ResetFunc + * FT_Raster_SetModeFunc + * FT_Raster_RenderFunc + * FT_Raster_Funcs + * + */ + + + /************************************************************************** + * + * @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. + * + * @fields: + * x :: + * The span's horizontal start position. + * + * len :: + * The span's length in pixels. + * + * coverage :: + * The span color/coverage, ranging from 0 (background) to 255 + * (foreground). + * + * @note: + * 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. + */ + typedef struct FT_Span_ + { + short x; + unsigned short len; + unsigned char coverage; + + } FT_Span; + + + /************************************************************************** + * + * @functype: + * FT_SpanFunc + * + * @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. + * + * @input: + * y :: + * The scanline's y~coordinate. + * + * count :: + * The number of spans to draw on this scanline. + * + * spans :: + * A table of `count` spans to draw on the scanline. + * + * user :: + * 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 can be used to write anti-aliased outlines directly to a given + * background bitmap, and even perform translucency. + */ + typedef void + (*FT_SpanFunc)( int y, + int count, + const FT_Span* spans, + void* user ); + +#define FT_Raster_Span_Func FT_SpanFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_BitTest_Func + * + * @description: + * Deprecated, unimplemented. + */ + typedef int + (*FT_Raster_BitTest_Func)( int y, + int x, + void* user ); + + + /************************************************************************** + * + * @functype: + * FT_Raster_BitSet_Func + * + * @description: + * Deprecated, unimplemented. + */ + typedef void + (*FT_Raster_BitSet_Func)( int y, + int x, + void* user ); + + + /************************************************************************** + * + * @enum: + * FT_RASTER_FLAG_XXX + * + * @description: + * A list of bit flag constants as used in the `flags` field of a + * @FT_Raster_Params structure. + * + * @values: + * FT_RASTER_FLAG_DEFAULT :: + * This value is 0. + * + * FT_RASTER_FLAG_AA :: + * This flag is set to indicate that an anti-aliased glyph image should + * be generated. Otherwise, it will be monochrome (1-bit). + * + * FT_RASTER_FLAG_DIRECT :: + * This flag is set to indicate direct rendering. In this mode, client + * applications must provide their own span callback. This lets them + * directly draw or compose over an existing bitmap. If this bit is + * not set, the target pixmap's buffer _must_ be zeroed before + * rendering. + * + * Direct rendering is only possible with anti-aliased glyphs. + * + * FT_RASTER_FLAG_CLIP :: + * This flag is only used in direct rendering mode. If set, the output + * will be clipped to a box specified in the `clip_box` field of the + * @FT_Raster_Params structure. + * + * Note that by default, the glyph bitmap is clipped to the target + * pixmap, except in direct rendering mode where all spans are + * generated if no clipping box is set. + */ +#define FT_RASTER_FLAG_DEFAULT 0x0 +#define FT_RASTER_FLAG_AA 0x1 +#define FT_RASTER_FLAG_DIRECT 0x2 +#define FT_RASTER_FLAG_CLIP 0x4 + + /* these constants are deprecated; use the corresponding */ + /* `FT_RASTER_FLAG_XXX` values instead */ +#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT +#define ft_raster_flag_aa FT_RASTER_FLAG_AA +#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT +#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP + + + /************************************************************************** + * + * @struct: + * FT_Raster_Params + * + * @description: + * A structure to hold the arguments used by a raster's render function. + * + * @fields: + * target :: + * The target bitmap. + * + * source :: + * A pointer to the source glyph image (e.g., an @FT_Outline). + * + * flags :: + * The rendering flags. + * + * gray_spans :: + * The gray span drawing callback. + * + * black_spans :: + * Unused. + * + * bit_test :: + * Unused. + * + * bit_set :: + * Unused. + * + * user :: + * User-supplied data that is passed to each drawing callback. + * + * clip_box :: + * An optional clipping box. It is only used in direct rendering mode. + * Note that coordinates here should be expressed in _integer_ pixels + * (and not in 26.6 fixed-point units). + * + * @note: + * An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA bit + * flag is set in the `flags` field, otherwise a monochrome bitmap is + * generated. + * + * If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags`, the raster + * will call the `gray_spans` callback to draw gray pixel spans. This + * allows direct composition over a pre-existing bitmap through + * user-provided callbacks to perform the span drawing and composition. + * Not supported by the monochrome rasterizer. + */ + typedef struct FT_Raster_Params_ + { + const FT_Bitmap* target; + const void* source; + int flags; + FT_SpanFunc gray_spans; + FT_SpanFunc black_spans; /* unused */ + FT_Raster_BitTest_Func bit_test; /* unused */ + FT_Raster_BitSet_Func bit_set; /* unused */ + void* user; + FT_BBox clip_box; + + } FT_Raster_Params; + + + /************************************************************************** + * + * @functype: + * FT_Raster_NewFunc + * + * @description: + * A function used to create a new raster object. + * + * @input: + * memory :: + * A handle to the memory allocator. + * + * @output: + * raster :: + * A handle to the new raster object. + * + * @return: + * Error code. 0~means success. + * + * @note: + * The `memory` parameter is a typeless pointer in order to avoid + * un-wanted dependencies on the rest of the FreeType code. In practice, + * it is an @FT_Memory object, i.e., a handle to the standard FreeType + * memory allocator. However, this field can be completely ignored by a + * given raster implementation. + */ + typedef int + (*FT_Raster_NewFunc)( void* memory, + FT_Raster* raster ); + +#define FT_Raster_New_Func FT_Raster_NewFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_DoneFunc + * + * @description: + * A function used to destroy a given raster object. + * + * @input: + * raster :: + * A handle to the raster object. + */ + typedef void + (*FT_Raster_DoneFunc)( FT_Raster raster ); + +#define FT_Raster_Done_Func FT_Raster_DoneFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_ResetFunc + * + * @description: + * FreeType used to provide an area of memory called the 'render pool' + * available to all registered rasterizers. This was not thread safe, + * however, and now FreeType never allocates this pool. + * + * This function is called after a new raster object is created. + * + * @input: + * raster :: + * A handle to the new raster object. + * + * pool_base :: + * Previously, the address in memory of the render pool. Set this to + * `NULL`. + * + * pool_size :: + * Previously, the size in bytes of the render pool. Set this to 0. + * + * @note: + * Rasterizers should rely on dynamic or stack allocation if they want to + * (a handle to the memory allocator is passed to the rasterizer + * constructor). + */ + typedef void + (*FT_Raster_ResetFunc)( FT_Raster raster, + unsigned char* pool_base, + unsigned long pool_size ); + +#define FT_Raster_Reset_Func FT_Raster_ResetFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_SetModeFunc + * + * @description: + * This function is a generic facility to change modes or attributes in a + * given raster. This can be used for debugging purposes, or simply to + * allow implementation-specific 'features' in a given raster module. + * + * @input: + * raster :: + * A handle to the new raster object. + * + * mode :: + * A 4-byte tag used to name the mode or property. + * + * args :: + * A pointer to the new mode/property to use. + */ + typedef int + (*FT_Raster_SetModeFunc)( FT_Raster raster, + unsigned long mode, + void* args ); + +#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_RenderFunc + * + * @description: + * Invoke a given raster to scan-convert a given glyph image into a + * target bitmap. + * + * @input: + * raster :: + * A handle to the raster object. + * + * params :: + * A pointer to an @FT_Raster_Params structure used to store the + * rendering parameters. + * + * @return: + * Error code. 0~means success. + * + * @note: + * The exact format of the source image depends on the raster's glyph + * format defined in its @FT_Raster_Funcs structure. It can be an + * @FT_Outline or anything else in order to support a large array of + * glyph formats. + * + * Note also that the render function can fail and return a + * `FT_Err_Unimplemented_Feature` error code if the raster used does not + * support direct composition. + */ + typedef int + (*FT_Raster_RenderFunc)( FT_Raster raster, + const FT_Raster_Params* params ); + +#define FT_Raster_Render_Func FT_Raster_RenderFunc + + + /************************************************************************** + * + * @struct: + * FT_Raster_Funcs + * + * @description: + * A structure used to describe a given raster class to the library. + * + * @fields: + * glyph_format :: + * The supported glyph format for this raster. + * + * raster_new :: + * The raster constructor. + * + * raster_reset :: + * Used to reset the render pool within the raster. + * + * raster_render :: + * A function to render a glyph into a given bitmap. + * + * raster_done :: + * The raster destructor. + */ + typedef struct FT_Raster_Funcs_ + { + FT_Glyph_Format glyph_format; + + FT_Raster_NewFunc raster_new; + FT_Raster_ResetFunc raster_reset; + FT_Raster_SetModeFunc raster_set_mode; + FT_Raster_RenderFunc raster_render; + FT_Raster_DoneFunc raster_done; + + } FT_Raster_Funcs; + + /* */ + + +FT_END_HEADER + +#endif /* FTIMAGE_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/win32/include/freetype/ftincrem.h b/win32/include/freetype/freetype/ftincrem.h similarity index 65% rename from win32/include/freetype/ftincrem.h rename to win32/include/freetype/freetype/ftincrem.h index 840af25b..a4db02b5 100644 --- a/win32/include/freetype/ftincrem.h +++ b/win32/include/freetype/freetype/ftincrem.h @@ -1,26 +1,27 @@ -/***************************************************************************/ -/* */ -/* ftincrem.h */ -/* */ -/* FreeType incremental loading (specification). */ -/* */ -/* Copyright 2002-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftincrem.h + * + * FreeType incremental loading (specification). + * + * Copyright (C) 2002-2019 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 __FTINCREM_H__ -#define __FTINCREM_H__ +#ifndef FTINCREM_H_ +#define FTINCREM_H_ #include <ft2build.h> #include FT_FREETYPE_H +#include FT_PARAMETER_TAGS_H #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -31,7 +32,7 @@ FT_BEGIN_HEADER - /*************************************************************************** + /************************************************************************** * * @section: * incremental @@ -44,7 +45,7 @@ FT_BEGIN_HEADER * * @description: * This section contains various functions used to perform so-called - * `incremental' glyph loading. This is a mode where all glyphs loaded + * 'incremental' glyph loading. This is a mode where all glyphs loaded * from a given @FT_Face are provided by the client application. * * Apart from that, all other tables are loaded normally from the font @@ -59,23 +60,24 @@ FT_BEGIN_HEADER */ - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental * * @description: * An opaque type describing a user-provided object used to implement - * `incremental' glyph loading within FreeType. This is used to support - * embedded fonts in certain environments (e.g., PostScript interpreters), - * where the glyph data isn't in the font file, or must be overridden by - * different values. + * 'incremental' glyph loading within FreeType. This is used to support + * embedded fonts in certain environments (e.g., PostScript + * interpreters), where the glyph data isn't in the font file, or must be + * overridden by different values. * * @note: - * It is up to client applications to create and implement @FT_Incremental - * objects, as long as they provide implementations for the methods - * @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc - * and @FT_Incremental_GetGlyphMetricsFunc. + * It is up to client applications to create and implement + * @FT_Incremental objects, as long as they provide implementations for + * the methods @FT_Incremental_GetGlyphDataFunc, + * @FT_Incremental_FreeGlyphDataFunc and + * @FT_Incremental_GetGlyphMetricsFunc. * * See the description of @FT_Incremental_InterfaceRec to understand how * to use incremental objects with FreeType. @@ -84,14 +86,14 @@ FT_BEGIN_HEADER typedef struct FT_IncrementalRec_* FT_Incremental; - /*************************************************************************** + /************************************************************************** * * @struct: * FT_Incremental_MetricsRec * * @description: - * A small structure used to contain the basic glyph metrics returned - * by the @FT_Incremental_GetGlyphMetricsFunc method. + * A small structure used to contain the basic glyph metrics returned by + * the @FT_Incremental_GetGlyphMetricsFunc method. * * @fields: * bearing_x :: @@ -108,7 +110,7 @@ FT_BEGIN_HEADER * * @note: * These correspond to horizontal or vertical metrics depending on the - * value of the `vertical' argument to the function + * value of the `vertical` argument to the function * @FT_Incremental_GetGlyphMetricsFunc. * */ @@ -122,7 +124,7 @@ FT_BEGIN_HEADER } FT_Incremental_MetricsRec; - /*************************************************************************** + /************************************************************************** * * @struct: * FT_Incremental_Metrics @@ -134,7 +136,7 @@ FT_BEGIN_HEADER typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics; - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_GetGlyphDataFunc @@ -146,8 +148,8 @@ FT_BEGIN_HEADER * * Note that the format of the glyph's data bytes depends on the font * file format. For TrueType, it must correspond to the raw bytes within - * the `glyf' table. For PostScript formats, it must correspond to the - * *unencrypted* charstring bytes, without any `lenIV' header. It is + * the 'glyf' table. For PostScript formats, it must correspond to the + * **unencrypted** charstring bytes, without any `lenIV` header. It is * undefined for any other format. * * @input: @@ -168,8 +170,8 @@ FT_BEGIN_HEADER * * @note: * If this function returns successfully the method - * @FT_Incremental_FreeGlyphDataFunc will be called later to release - * the data bytes. + * @FT_Incremental_FreeGlyphDataFunc will be called later to release the + * data bytes. * * Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for * compound glyphs. @@ -181,7 +183,7 @@ FT_BEGIN_HEADER FT_Data* adata ); - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_FreeGlyphDataFunc @@ -205,7 +207,7 @@ FT_BEGIN_HEADER FT_Data* data ); - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_GetGlyphMetricsFunc @@ -213,8 +215,8 @@ 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. + * formats like TrueType, the metrics are stored in a different place + * from the glyph images proper. * * @input: * incremental :: @@ -228,9 +230,9 @@ FT_BEGIN_HEADER * If true, return vertical metrics. * * ametrics :: - * This parameter is used for both input and output. - * The original glyph metrics, if any, in font units. If metrics are - * not available all the values must be set to zero. + * This parameter is used for both input and output. The original + * glyph metrics, if any, in font units. If metrics are not available + * all the values must be set to zero. * * @output: * ametrics :: @@ -251,8 +253,8 @@ FT_BEGIN_HEADER * FT_Incremental_FuncsRec * * @description: - * A table of functions for accessing fonts that load data - * incrementally. Used in @FT_Incremental_InterfaceRec. + * A table of functions for accessing fonts that load data incrementally. + * Used in @FT_Incremental_InterfaceRec. * * @fields: * get_glyph_data :: @@ -262,8 +264,8 @@ FT_BEGIN_HEADER * The function to release glyph data. Must not be null. * * get_glyph_metrics :: - * The function to get glyph metrics. May be null if the font does - * not provide overriding glyph metrics. + * The function to get glyph metrics. May be null if the font does not + * provide overriding glyph metrics. * */ typedef struct FT_Incremental_FuncsRec_ @@ -275,7 +277,7 @@ FT_BEGIN_HEADER } FT_Incremental_FuncsRec; - /*************************************************************************** + /************************************************************************** * * @struct: * FT_Incremental_InterfaceRec @@ -285,30 +287,30 @@ FT_BEGIN_HEADER * wants to support incremental glyph loading. You should use it with * @FT_PARAM_TAG_INCREMENTAL as in the following example: * - * { - * FT_Incremental_InterfaceRec inc_int; - * FT_Parameter parameter; - * FT_Open_Args open_args; + * ``` + * FT_Incremental_InterfaceRec inc_int; + * FT_Parameter parameter; + * FT_Open_Args open_args; * * - * // set up incremental descriptor - * inc_int.funcs = my_funcs; - * inc_int.object = my_object; + * // set up incremental descriptor + * inc_int.funcs = my_funcs; + * inc_int.object = my_object; * - * // set up optional parameter - * parameter.tag = FT_PARAM_TAG_INCREMENTAL; - * parameter.data = &inc_int; + * // set up optional parameter + * parameter.tag = FT_PARAM_TAG_INCREMENTAL; + * parameter.data = &inc_int; * - * // set up FT_Open_Args structure - * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; - * open_args.pathname = my_font_pathname; - * open_args.num_params = 1; - * open_args.params = ¶meter; // we use one optional argument + * // set up FT_Open_Args structure + * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; + * open_args.pathname = my_font_pathname; + * open_args.num_params = 1; + * open_args.params = ¶meter; // we use one optional argument * - * // open the font - * error = FT_Open_Face( library, &open_args, index, &face ); - * ... - * } + * // open the font + * error = FT_Open_Face( library, &open_args, index, &face ); + * ... + * ``` * */ typedef struct FT_Incremental_InterfaceRec_ @@ -319,7 +321,7 @@ FT_BEGIN_HEADER } FT_Incremental_InterfaceRec; - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_Interface @@ -331,24 +333,12 @@ FT_BEGIN_HEADER typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface; - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_INCREMENTAL - * - * @description: - * A constant used as the tag of @FT_Parameter structures to indicate - * an incremental loading object to be used by FreeType. - * - */ -#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' ) - /* */ FT_END_HEADER -#endif /* __FTINCREM_H__ */ +#endif /* FTINCREM_H_ */ /* END */ diff --git a/win32/include/freetype/freetype/ftlcdfil.h b/win32/include/freetype/freetype/ftlcdfil.h new file mode 100644 index 00000000..3a19d043 --- /dev/null +++ b/win32/include/freetype/freetype/ftlcdfil.h @@ -0,0 +1,328 @@ +/**************************************************************************** + * + * ftlcdfil.h + * + * FreeType API for color filtering of subpixel bitmap glyphs + * (specification). + * + * Copyright (C) 2006-2019 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 FTLCDFIL_H_ +#define FTLCDFIL_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H +#include FT_PARAMETER_TAGS_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * lcd_rendering + * + * @title: + * Subpixel Rendering + * + * @abstract: + * API to control subpixel rendering. + * + * @description: + * FreeType provides two alternative subpixel rendering technologies. + * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your + * `ftoption.h` file, this enables patented ClearType-style rendering. + * Otherwise, Harmony LCD rendering is enabled. These technologies are + * controlled differently and API described below, although always + * available, performs its function when appropriate method is enabled + * and does nothing otherwise. + * + * 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 + * 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: + * + * 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid + * any shifts in appearance. + * + * 2. It should be color-balanced, meaning a~+ b~=~c, to reduce color + * fringes by distributing the computed coverage for one subpixel to + * all subpixels equally. + * + * 3. It should be normalized, meaning 2a~+ 2b~+ c~=~1.0 to maintain + * overall brightness. + * + * Boxy 3-tap filter {0, 1/3, 1/3, 1/3, 0} is sharper but is less + * forgiving of non-ideal gamma curves of a screen (and viewing angles), + * beveled filters are fuzzier but more tolerant. + * + * Use the @FT_Library_SetLcdFilter or @FT_Library_SetLcdFilterWeights + * API to specify a low-pass filter, which is then applied to + * subpixel-rendered bitmaps generated through @FT_Render_Glyph. + * + * 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 + * 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. + * + * The subpixel geometry must be specified by xy-coordinates for each + * subpixel. By convention they may come in the RGB order: {{-1/3, 0}, + * {0, 0}, {1/3, 0}} for standard RGB striped panel or {{-1/6, 1/4}, + * {-1/6, -1/4}, {1/3, 0}} for a certain PenTile panel. + * + * Use the @FT_Library_SetLcdGeometry API to specify subpixel positions. + * If one follows the RGB order convention, the same order applies to the + * resulting @FT_PIXEL_MODE_LCD and @FT_PIXEL_MODE_LCD_V bitmaps. Note, + * however, that the coordinate frame for the latter must be rotated + * 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. + * 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 + * and glyph positioning code when enabling the filter. + * + * The ClearType and Harmony rendering is applicable to glyph bitmaps + * rendered through @FT_Render_Glyph, @FT_Load_Glyph, @FT_Load_Char, and + * @FT_Glyph_To_Bitmap, when @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V + * is specified. This API does not control @FT_Outline_Render and + * @FT_Outline_Get_Bitmap. + * + * The described algorithms can completely remove color artefacts when + * combined with gamma-corrected alpha blending in linear space. Each of + * the 3~alpha values (subpixels) must by independently used to blend one + * color channel. That is, red alpha blends the red channel of the text + * color with the red channel of the background pixel. + */ + + + /************************************************************************** + * + * @enum: + * FT_LcdFilter + * + * @description: + * A list of values to identify various types of LCD filters. + * + * @values: + * FT_LCD_FILTER_NONE :: + * Do not perform filtering. When used with subpixel rendering, this + * results in sometimes severe color fringes. + * + * FT_LCD_FILTER_DEFAULT :: + * This is a beveled, normalized, and color-balanced five-tap filter + * with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256th units. + * + * FT_LCD_FILTER_LIGHT :: + * this is a boxy, normalized, and color-balanced three-tap filter with + * weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units. + * + * FT_LCD_FILTER_LEGACY :: + * FT_LCD_FILTER_LEGACY1 :: + * This filter corresponds to the original libXft color filter. It + * provides high contrast output but can exhibit really bad color + * fringes if glyphs are not extremely well hinted to the pixel grid. + * This filter is only provided for comparison purposes, and might be + * disabled or stay unsupported in the future. The second value is + * provided for compatibility with FontConfig, which historically used + * different enumeration, sometimes incorrectly forwarded to FreeType. + * + * @since: + * 2.3.0 (`FT_LCD_FILTER_LEGACY1` since 2.6.2) + */ + typedef enum FT_LcdFilter_ + { + FT_LCD_FILTER_NONE = 0, + FT_LCD_FILTER_DEFAULT = 1, + FT_LCD_FILTER_LIGHT = 2, + FT_LCD_FILTER_LEGACY1 = 3, + FT_LCD_FILTER_LEGACY = 16, + + FT_LCD_FILTER_MAX /* do not remove */ + + } FT_LcdFilter; + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdFilter + * + * @description: + * This function is used to apply color filtering to LCD decimated + * bitmaps, like the ones used when calling @FT_Render_Glyph with + * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V. + * + * @input: + * library :: + * A handle to the target library instance. + * + * filter :: + * The filter type. + * + * You can use @FT_LCD_FILTER_NONE here to disable this feature, or + * @FT_LCD_FILTER_DEFAULT to use a default filter that should work well + * on most LCD screens. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This feature is always disabled by default. Clients must make an + * explicit call to this function with a `filter` value other than + * @FT_LCD_FILTER_NONE in order to enable it. + * + * Due to **PATENTS** covering subpixel rendering, this function doesn't + * do anything except returning `FT_Err_Unimplemented_Feature` if the + * configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is not + * defined in your build of the library, which should correspond to all + * default builds of FreeType. + * + * @since: + * 2.3.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdFilter( FT_Library library, + FT_LcdFilter filter ); + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdFilterWeights + * + * @description: + * This function can be used to enable LCD filter with custom weights, + * instead of using presets in @FT_Library_SetLcdFilter. + * + * @input: + * library :: + * A handle to the target library instance. + * + * weights :: + * A pointer to an array; the function copies the first five bytes and + * uses them to specify the filter weights in 1/256th units. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Due to **PATENTS** covering subpixel rendering, this function doesn't + * do anything except returning `FT_Err_Unimplemented_Feature` if the + * configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is not + * defined in your build of the library, which should correspond to all + * default builds of FreeType. + * + * LCD filter weights can also be set per face using @FT_Face_Properties + * with @FT_PARAM_TAG_LCD_FILTER_WEIGHTS. + * + * @since: + * 2.4.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdFilterWeights( FT_Library library, + unsigned char *weights ); + + + /************************************************************************** + * + * @type: + * FT_LcdFiveTapFilter + * + * @description: + * A typedef for passing the five LCD filter weights to + * @FT_Face_Properties within an @FT_Parameter structure. + * + * @since: + * 2.8 + * + */ +#define FT_LCD_FILTER_FIVE_TAPS 5 + + typedef FT_Byte FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS]; + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdGeometry + * + * @description: + * This function can be used to modify default positions of color + * subpixels, which controls Harmony LCD rendering. + * + * @input: + * library :: + * A handle to the target library instance. + * + * sub :: + * A pointer to an array of 3 vectors in 26.6 fractional pixel format; + * the function modifies the default values, see the note below. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Subpixel geometry examples: + * + * - {{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color + * stripes shifted by a third of a pixel. This could be an RGB panel. + * + * - {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can + * specify a BGR panel instead, while keeping the bitmap in the same + * RGB888 format. + * + * - {{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap + * stays RGB888 as a result. + * + * - {{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement. + * + * This function does nothing and returns `FT_Err_Unimplemented_Feature` + * in the context of ClearType-style subpixel rendering when + * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is defined in your build of the + * library. + * + * @since: + * 2.10.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdGeometry( FT_Library library, + FT_Vector sub[3] ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLCDFIL_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftlist.h b/win32/include/freetype/freetype/ftlist.h new file mode 100644 index 00000000..4782892d --- /dev/null +++ b/win32/include/freetype/freetype/ftlist.h @@ -0,0 +1,297 @@ +/**************************************************************************** + * + * ftlist.h + * + * Generic list support for FreeType (specification). + * + * Copyright (C) 1996-2019 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. + * + */ + + + /************************************************************************** + * + * This file implements functions relative to list processing. Its data + * structures are defined in `freetype.h`. + * + */ + + +#ifndef FTLIST_H_ +#define FTLIST_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * list_processing + * + * @title: + * List Processing + * + * @abstract: + * Simple management of lists. + * + * @description: + * This section contains various definitions related to list processing + * using doubly-linked nodes. + * + * @order: + * FT_List + * FT_ListNode + * FT_ListRec + * FT_ListNodeRec + * + * FT_List_Add + * FT_List_Insert + * FT_List_Find + * FT_List_Remove + * FT_List_Up + * FT_List_Iterate + * FT_List_Iterator + * FT_List_Finalize + * FT_List_Destructor + * + */ + + + /************************************************************************** + * + * @function: + * FT_List_Find + * + * @description: + * Find the list node for a given listed object. + * + * @input: + * list :: + * A pointer to the parent list. + * data :: + * The address of the listed object. + * + * @return: + * List node. `NULL` if it wasn't found. + */ + FT_EXPORT( FT_ListNode ) + FT_List_Find( FT_List list, + void* data ); + + + /************************************************************************** + * + * @function: + * FT_List_Add + * + * @description: + * Append an element to the end of a list. + * + * @inout: + * list :: + * A pointer to the parent list. + * node :: + * The node to append. + */ + FT_EXPORT( void ) + FT_List_Add( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @function: + * FT_List_Insert + * + * @description: + * Insert an element at the head of a list. + * + * @inout: + * list :: + * A pointer to parent list. + * node :: + * The node to insert. + */ + FT_EXPORT( void ) + FT_List_Insert( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @function: + * FT_List_Remove + * + * @description: + * Remove a node from a list. This function doesn't check whether the + * node is in the list! + * + * @input: + * node :: + * The node to remove. + * + * @inout: + * list :: + * A pointer to the parent list. + */ + FT_EXPORT( void ) + FT_List_Remove( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @function: + * FT_List_Up + * + * @description: + * Move a node to the head/top of a list. Used to maintain LRU lists. + * + * @inout: + * list :: + * A pointer to the parent list. + * node :: + * The node to move. + */ + FT_EXPORT( void ) + FT_List_Up( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @functype: + * FT_List_Iterator + * + * @description: + * An FT_List iterator function that is called during a list parse by + * @FT_List_Iterate. + * + * @input: + * node :: + * The current iteration list node. + * + * user :: + * A typeless pointer passed to @FT_List_Iterate. Can be used to point + * to the iteration's state. + */ + typedef FT_Error + (*FT_List_Iterator)( FT_ListNode node, + void* user ); + + + /************************************************************************** + * + * @function: + * FT_List_Iterate + * + * @description: + * Parse a list and calls a given iterator function on each element. + * Note that parsing is stopped as soon as one of the iterator calls + * returns a non-zero value. + * + * @input: + * list :: + * A handle to the list. + * iterator :: + * An iterator function, called on each node of the list. + * user :: + * A user-supplied field that is passed as the second argument to the + * iterator. + * + * @return: + * The result (a FreeType error code) of the last iterator call. + */ + FT_EXPORT( FT_Error ) + FT_List_Iterate( FT_List list, + FT_List_Iterator iterator, + void* user ); + + + /************************************************************************** + * + * @functype: + * FT_List_Destructor + * + * @description: + * An @FT_List iterator function that is called during a list + * finalization by @FT_List_Finalize to destroy all elements in a given + * list. + * + * @input: + * system :: + * The current system object. + * + * data :: + * The current object to destroy. + * + * user :: + * A typeless pointer passed to @FT_List_Iterate. It can be used to + * point to the iteration's state. + */ + typedef void + (*FT_List_Destructor)( FT_Memory memory, + void* data, + void* user ); + + + /************************************************************************** + * + * @function: + * FT_List_Finalize + * + * @description: + * Destroy all elements in the list as well as the list itself. + * + * @input: + * list :: + * A handle to the list. + * + * destroy :: + * A list destructor that will be applied to each element of the list. + * Set this to `NULL` if not needed. + * + * memory :: + * The current memory object that handles deallocation. + * + * user :: + * A user-supplied field that is passed as the last argument to the + * destructor. + * + * @note: + * This function expects that all nodes added by @FT_List_Add or + * @FT_List_Insert have been dynamically allocated. + */ + FT_EXPORT( void ) + FT_List_Finalize( FT_List list, + FT_List_Destructor destroy, + FT_Memory memory, + void* user ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLIST_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftlzw.h b/win32/include/freetype/freetype/ftlzw.h new file mode 100644 index 00000000..fd22968f --- /dev/null +++ b/win32/include/freetype/freetype/ftlzw.h @@ -0,0 +1,100 @@ +/**************************************************************************** + * + * ftlzw.h + * + * LZW-compressed stream support. + * + * Copyright (C) 2004-2019 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 FTLZW_H_ +#define FTLZW_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * lzw + * + * @title: + * LZW Streams + * + * @abstract: + * Using LZW-compressed font files. + * + * @description: + * This section contains the declaration of LZW-specific functions. + * + */ + + /************************************************************************** + * + * @function: + * FT_Stream_OpenLZW + * + * @description: + * Open a new stream to parse LZW-compressed font files. This is mainly + * used to support the compressed `*.pcf.Z` fonts that come with XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream + * + * In certain builds of the library, LZW compression recognition is + * automatically handled when calling @FT_New_Face or @FT_Open_Face. + * This means that if no font driver is capable of handling the raw + * compressed file, the library will try to open a LZW stream from it and + * re-open the face with it. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with LZW support. + */ + FT_EXPORT( FT_Error ) + FT_Stream_OpenLZW( FT_Stream stream, + FT_Stream source ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLZW_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftmac.h b/win32/include/freetype/freetype/ftmac.h new file mode 100644 index 00000000..92b9f3dc --- /dev/null +++ b/win32/include/freetype/freetype/ftmac.h @@ -0,0 +1,290 @@ +/**************************************************************************** + * + * ftmac.h + * + * Additional Mac-specific API. + * + * Copyright (C) 1996-2019 by + * Just van Rossum, 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. + * + */ + + +/**************************************************************************** + * + * NOTE: Include this file after `FT_FREETYPE_H` and after any + * Mac-specific headers (because this header uses Mac types such as + * 'Handle', 'FSSpec', 'FSRef', etc.) + * + */ + + +#ifndef FTMAC_H_ +#define FTMAC_H_ + + +#include <ft2build.h> + + +FT_BEGIN_HEADER + + + /* gcc-3.1 and later can warn about functions tagged as deprecated */ +#ifndef FT_DEPRECATED_ATTRIBUTE +#if defined( __GNUC__ ) && \ + ( ( __GNUC__ >= 4 ) || \ + ( ( __GNUC__ == 3 ) && ( __GNUC_MINOR__ >= 1 ) ) ) +#define FT_DEPRECATED_ATTRIBUTE __attribute__(( deprecated )) +#else +#define FT_DEPRECATED_ATTRIBUTE +#endif +#endif + + + /************************************************************************** + * + * @section: + * mac_specific + * + * @title: + * Mac Specific Interface + * + * @abstract: + * Only available on the Macintosh. + * + * @description: + * The following definitions are only available if FreeType is compiled + * on a Macintosh. + * + */ + + + /************************************************************************** + * + * @function: + * FT_New_Face_From_FOND + * + * @description: + * Create a new face object from a FOND resource. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * fond :: + * A FOND resource. + * + * face_index :: + * Only supported for the -1 'sanity check' special case. + * + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @example: + * This function can be used to create @FT_Face objects from fonts that + * are installed in the system as follows. + * + * ``` + * fond = GetResource( 'FOND', fontName ); + * error = FT_New_Face_From_FOND( library, fond, 0, &face ); + * ``` + */ + FT_EXPORT( FT_Error ) + FT_New_Face_From_FOND( FT_Library library, + Handle fond, + FT_Long face_index, + FT_Face *aface ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_GetFile_From_Mac_Name + * + * @description: + * Return an FSSpec for the disk file containing the named font. + * + * @input: + * fontName :: + * Mac OS name of the font (e.g., Times New Roman Bold). + * + * @output: + * pathSpec :: + * FSSpec to the file. For passing to @FT_New_Face_From_FSSpec. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face_From_FSSpec. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_GetFile_From_Mac_Name( const char* fontName, + FSSpec* pathSpec, + FT_Long* face_index ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_GetFile_From_Mac_ATS_Name + * + * @description: + * Return an FSSpec for the disk file containing the named font. + * + * @input: + * fontName :: + * Mac OS name of the font in ATS framework. + * + * @output: + * pathSpec :: + * FSSpec to the file. For passing to @FT_New_Face_From_FSSpec. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face_From_FSSpec. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_GetFile_From_Mac_ATS_Name( const char* fontName, + FSSpec* pathSpec, + FT_Long* face_index ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_GetFilePath_From_Mac_ATS_Name + * + * @description: + * Return a pathname of the disk file and face index for given font name + * that is handled by ATS framework. + * + * @input: + * fontName :: + * Mac OS name of the font in ATS framework. + * + * @output: + * path :: + * Buffer to store pathname of the file. For passing to @FT_New_Face. + * The client must allocate this buffer before calling this function. + * + * maxPathSize :: + * Lengths of the buffer `path` that client allocated. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_GetFilePath_From_Mac_ATS_Name( const char* fontName, + UInt8* path, + UInt32 maxPathSize, + FT_Long* face_index ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_New_Face_From_FSSpec + * + * @description: + * Create a new face object from a given resource and typeface index + * using an FSSpec to the font file. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * spec :: + * FSSpec to the font file. + * + * face_index :: + * The index of the face within the resource. The first face has + * index~0. + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * @FT_New_Face_From_FSSpec is identical to @FT_New_Face except it + * accepts an FSSpec instead of a path. + */ + FT_EXPORT( FT_Error ) + FT_New_Face_From_FSSpec( FT_Library library, + const FSSpec *spec, + FT_Long face_index, + FT_Face *aface ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_New_Face_From_FSRef + * + * @description: + * Create a new face object from a given resource and typeface index + * using an FSRef to the font file. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * spec :: + * FSRef to the font file. + * + * face_index :: + * The index of the face within the resource. The first face has + * index~0. + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * @FT_New_Face_From_FSRef is identical to @FT_New_Face except it accepts + * an FSRef instead of a path. + */ + FT_EXPORT( FT_Error ) + FT_New_Face_From_FSRef( FT_Library library, + const FSRef *ref, + FT_Long face_index, + FT_Face *aface ) + FT_DEPRECATED_ATTRIBUTE; + + /* */ + + +FT_END_HEADER + + +#endif /* FTMAC_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftmm.h b/win32/include/freetype/freetype/ftmm.h new file mode 100644 index 00000000..f2e16b64 --- /dev/null +++ b/win32/include/freetype/freetype/ftmm.h @@ -0,0 +1,753 @@ +/**************************************************************************** + * + * ftmm.h + * + * FreeType Multiple Master font interface (specification). + * + * Copyright (C) 1996-2019 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 FTMM_H_ +#define FTMM_H_ + + +#include <ft2build.h> +#include FT_TYPE1_TABLES_H + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * multiple_masters + * + * @title: + * Multiple Masters + * + * @abstract: + * How to manage Multiple Masters fonts. + * + * @description: + * The following types and functions are used to manage Multiple Master + * fonts, i.e., the selection of specific design instances by setting + * design axis coordinates. + * + * Besides Adobe MM fonts, the interface supports Apple's TrueType GX and + * OpenType variation fonts. Some of the routines only work with Adobe + * MM fonts, others will work with all three types. They are similar + * enough that a consistent interface makes sense. + * + */ + + + /************************************************************************** + * + * @struct: + * FT_MM_Axis + * + * @description: + * A structure to model a given axis in design space for Multiple Masters + * fonts. + * + * This structure can't be used for TrueType GX or OpenType variation + * fonts. + * + * @fields: + * name :: + * The axis's name. + * + * minimum :: + * The axis's minimum design coordinate. + * + * maximum :: + * The axis's maximum design coordinate. + */ + typedef struct FT_MM_Axis_ + { + FT_String* name; + FT_Long minimum; + FT_Long maximum; + + } FT_MM_Axis; + + + /************************************************************************** + * + * @struct: + * FT_Multi_Master + * + * @description: + * A structure to model the axes and space of a Multiple Masters font. + * + * This structure can't be used for TrueType GX or OpenType variation + * fonts. + * + * @fields: + * num_axis :: + * Number of axes. Cannot exceed~4. + * + * num_designs :: + * Number of designs; should be normally 2^num_axis even though the + * Type~1 specification strangely allows for intermediate designs to be + * present. This number cannot exceed~16. + * + * axis :: + * A table of axis descriptors. + */ + typedef struct FT_Multi_Master_ + { + FT_UInt num_axis; + FT_UInt num_designs; + FT_MM_Axis axis[T1_MAX_MM_AXIS]; + + } FT_Multi_Master; + + + /************************************************************************** + * + * @struct: + * FT_Var_Axis + * + * @description: + * A structure to model a given axis in design space for Multiple + * Masters, TrueType GX, and OpenType variation fonts. + * + * @fields: + * name :: + * The axis's name. Not always meaningful for TrueType GX or OpenType + * variation fonts. + * + * minimum :: + * The axis's minimum design coordinate. + * + * def :: + * The axis's default design coordinate. FreeType computes meaningful + * default values for Adobe MM fonts. + * + * maximum :: + * The axis's maximum design coordinate. + * + * tag :: + * The axis's tag (the equivalent to 'name' for TrueType GX and + * OpenType variation fonts). FreeType provides default values for + * Adobe MM fonts if possible. + * + * strid :: + * The axis name entry in the font's 'name' table. This is another + * (and often better) version of the 'name' field for TrueType GX or + * OpenType variation fonts. Not meaningful for Adobe MM fonts. + * + * @note: + * The fields `minimum`, `def`, and `maximum` are 16.16 fractional values + * for TrueType GX and OpenType variation fonts. For Adobe MM fonts, the + * values are integers. + */ + typedef struct FT_Var_Axis_ + { + FT_String* name; + + FT_Fixed minimum; + FT_Fixed def; + FT_Fixed maximum; + + FT_ULong tag; + FT_UInt strid; + + } FT_Var_Axis; + + + /************************************************************************** + * + * @struct: + * FT_Var_Named_Style + * + * @description: + * A structure to model a named instance in a TrueType GX or OpenType + * variation font. + * + * This structure can't be used for Adobe MM fonts. + * + * @fields: + * coords :: + * The design coordinates for this instance. This is an array with one + * entry for each axis. + * + * strid :: + * The entry in 'name' table identifying this instance. + * + * psid :: + * The entry in 'name' table identifying a PostScript name for this + * instance. Value 0xFFFF indicates a missing entry. + */ + typedef struct FT_Var_Named_Style_ + { + FT_Fixed* coords; + FT_UInt strid; + FT_UInt psid; /* since 2.7.1 */ + + } FT_Var_Named_Style; + + + /************************************************************************** + * + * @struct: + * FT_MM_Var + * + * @description: + * A structure to model the axes and space of an Adobe MM, TrueType GX, + * or OpenType variation font. + * + * Some fields are specific to one format and not to the others. + * + * @fields: + * num_axis :: + * The number of axes. The maximum value is~4 for Adobe MM fonts; no + * limit in TrueType GX or OpenType variation fonts. + * + * num_designs :: + * The number of designs; should be normally 2^num_axis for Adobe MM + * fonts. Not meaningful for TrueType GX or OpenType variation fonts + * (where every glyph could have a different number of designs). + * + * num_namedstyles :: + * The number of named styles; a 'named style' is a tuple of design + * coordinates that has a string ID (in the 'name' table) associated + * with it. The font can tell the user that, for example, + * [Weight=1.5,Width=1.1] is 'Bold'. Another name for 'named style' is + * 'named instance'. + * + * For Adobe Multiple Masters fonts, this value is always zero because + * the format does not support named styles. + * + * axis :: + * An axis descriptor table. TrueType GX and OpenType variation fonts + * contain slightly more data than Adobe MM fonts. Memory management + * of this pointer is done internally by FreeType. + * + * namedstyle :: + * A named style (instance) table. Only meaningful for TrueType GX and + * OpenType variation fonts. Memory management of this pointer is done + * internally by FreeType. + */ + typedef struct FT_MM_Var_ + { + FT_UInt num_axis; + FT_UInt num_designs; + FT_UInt num_namedstyles; + FT_Var_Axis* axis; + FT_Var_Named_Style* namedstyle; + + } FT_MM_Var; + + + /************************************************************************** + * + * @function: + * FT_Get_Multi_Master + * + * @description: + * Retrieve a variation descriptor of a given Adobe MM font. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * amaster :: + * The Multiple Masters descriptor. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Get_Multi_Master( FT_Face face, + FT_Multi_Master *amaster ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_Var + * + * @description: + * Retrieve a variation descriptor for a given font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * amaster :: + * The variation descriptor. Allocates a data structure, which the + * user must deallocate with a call to @FT_Done_MM_Var after use. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_Var( FT_Face face, + FT_MM_Var* *amaster ); + + + /************************************************************************** + * + * @function: + * FT_Done_MM_Var + * + * @description: + * Free the memory allocated by @FT_Get_MM_Var. + * + * @input: + * library :: + * A handle of the face's parent library object that was used in the + * call to @FT_Get_MM_Var to create `amaster`. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Done_MM_Var( FT_Library library, + FT_MM_Var *amaster ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_Design_Coordinates + * + * @description: + * For Adobe MM fonts, choose an interpolated font design through design + * coordinates. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * An array of design coordinates. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero, + * this bit flag gets unset. + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_Design_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Long* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_Var_Design_Coordinates + * + * @description: + * Choose an interpolated font design through design coordinates. + * + * This function works with all supported variation formats. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * An array of design coordinates. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * [Since 2.9] 'Default values' means the currently selected named + * instance (or the base font if no named instance is selected). + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero, + * this bit flag gets unset. + */ + FT_EXPORT( FT_Error ) + FT_Set_Var_Design_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Design_Coordinates + * + * @description: + * Get the design coordinates of the currently selected interpolated + * font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * num_coords :: + * The number of design coordinates to retrieve. If it is larger than + * the number of axes, set the excess values to~0. + * + * @output: + * coords :: + * The design coordinates array. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Design_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_Blend_Coordinates + * + * @description: + * Choose an interpolated font design through normalized blend + * coordinates. + * + * This function works with all supported variation formats. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * The design coordinates array (each element must be between 0 and 1.0 + * for Adobe MM fonts, and between -1.0 and 1.0 for TrueType GX and + * OpenType variation fonts). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * [Since 2.9] 'Default values' means the currently selected named + * instance (or the base font if no named instance is selected). + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero, + * this bit flag gets unset. + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_Blend_Coordinates + * + * @description: + * Get the normalized blend coordinates of the currently selected + * interpolated font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * num_coords :: + * The number of normalized blend coordinates to retrieve. If it is + * larger than the number of axes, set the excess values to~0.5 for + * Adobe MM fonts, and to~0 for TrueType GX and OpenType variation + * fonts. + * + * @output: + * coords :: + * The normalized blend coordinates array. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_Var_Blend_Coordinates + * + * @description: + * This is another name of @FT_Set_MM_Blend_Coordinates. + */ + FT_EXPORT( FT_Error ) + FT_Set_Var_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Blend_Coordinates + * + * @description: + * This is another name of @FT_Get_MM_Blend_Coordinates. + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_WeightVector + * + * @description: + * For Adobe MM fonts, choose an interpolated font design by directly + * setting the weight vector. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * len :: + * The length of the weight vector array. If it is larger than the + * number of designs, the extra values are ignored. If it is less than + * the number of designs, the remaining values are set to zero. + * + * weightvector :: + * An array representing the weight vector. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe Multiple Master fonts limit the number of designs, and thus the + * length of the weight vector to~16. + * + * If `len` is zero and `weightvector` is `NULL`, the weight vector array + * is reset to the default values. + * + * The Adobe documentation also states that the values in the + * WeightVector array must total 1.0 +/-~0.001. In practice this does + * not seem to be enforced, so is not enforced here, either. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_WeightVector( FT_Face face, + FT_UInt len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_WeightVector + * + * @description: + * For Adobe MM fonts, retrieve the current weight vector of the font. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * len :: + * A pointer to the size of the array to be filled. If the size of the + * array is less than the number of designs, `FT_Err_Invalid_Argument` + * is returned, and `len` is set to the required size (the number of + * designs). If the size of the array is greater than the number of + * designs, the remaining entries are set to~0. On successful + * completion, `len` is set to the number of designs (i.e., the number + * of values written to the array). + * + * @output: + * weightvector :: + * An array to be filled. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe Multiple Master fonts limit the number of designs, and thus the + * length of the WeightVector to~16. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_WeightVector( FT_Face face, + FT_UInt* len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @enum: + * FT_VAR_AXIS_FLAG_XXX + * + * @description: + * A list of bit flags used in the return value of + * @FT_Get_Var_Axis_Flags. + * + * @values: + * FT_VAR_AXIS_FLAG_HIDDEN :: + * The variation axis should not be exposed to user interfaces. + * + * @since: + * 2.8.1 + */ +#define FT_VAR_AXIS_FLAG_HIDDEN 1 + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Axis_Flags + * + * @description: + * Get the 'flags' field of an OpenType Variation Axis Record. + * + * Not meaningful for Adobe MM fonts (`*flags` is always zero). + * + * @input: + * master :: + * The variation descriptor. + * + * axis_index :: + * The index of the requested variation axis. + * + * @output: + * flags :: + * The 'flags' field. See @FT_VAR_AXIS_FLAG_XXX for possible values. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.8.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Axis_Flags( FT_MM_Var* master, + FT_UInt axis_index, + FT_UInt* flags ); + + + /************************************************************************** + * + * @function: + * FT_Set_Named_Instance + * + * @description: + * Set or change the current named instance. + * + * @input: + * face :: + * A handle to the source face. + * + * instance_index :: + * The index of the requested instance, starting with value 1. If set + * to value 0, FreeType switches to font access without a named + * instance. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The function uses the value of `instance_index` to set bits 16-30 of + * the face's `face_index` field. It also resets any variation applied + * to the font, and the @FT_FACE_FLAG_VARIATION bit of the face's + * `face_flags` field gets reset to zero (i.e., @FT_IS_VARIATION will + * return false). + * + * For Adobe MM fonts (which don't have named instances) this function + * simply resets the current face to the default instance. + * + * @since: + * 2.9 + */ + FT_EXPORT( FT_Error ) + FT_Set_Named_Instance( FT_Face face, + FT_UInt instance_index ); + + /* */ + + +FT_END_HEADER + +#endif /* FTMM_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftmodapi.h b/win32/include/freetype/freetype/ftmodapi.h new file mode 100644 index 00000000..88488bfe --- /dev/null +++ b/win32/include/freetype/freetype/ftmodapi.h @@ -0,0 +1,785 @@ +/**************************************************************************** + * + * ftmodapi.h + * + * FreeType modules public interface (specification). + * + * Copyright (C) 1996-2019 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 FTMODAPI_H_ +#define FTMODAPI_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * module_management + * + * @title: + * Module Management + * + * @abstract: + * How to add, upgrade, remove, and control modules from FreeType. + * + * @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. + * + * Here is a list of possible values of the `module_name` field in the + * @FT_Module_Class structure. + * + * ``` + * autofitter + * bdf + * cff + * gxvalid + * otvalid + * pcf + * pfr + * psaux + * pshinter + * psnames + * raster1 + * sfnt + * smooth, smooth-lcd, smooth-lcdv + * truetype + * type1 + * type42 + * t1cid + * winfonts + * ``` + * + * Note that the FreeType Cache sub-system is not a FreeType module. + * + * @order: + * FT_Module + * FT_Module_Constructor + * FT_Module_Destructor + * FT_Module_Requester + * FT_Module_Class + * + * FT_Add_Module + * FT_Get_Module + * FT_Remove_Module + * FT_Add_Default_Modules + * + * FT_Property_Set + * FT_Property_Get + * FT_Set_Default_Properties + * + * FT_New_Library + * FT_Done_Library + * FT_Reference_Library + * + * FT_Renderer + * FT_Renderer_Class + * + * FT_Get_Renderer + * FT_Set_Renderer + * + * FT_Set_Debug_Hook + * + */ + + + /* module bit flags */ +#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */ +#define FT_MODULE_RENDERER 2 /* this module is a renderer */ +#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */ +#define FT_MODULE_STYLER 8 /* this module is a styler */ + +#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */ + /* scalable fonts */ +#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */ + /* support vector outlines */ +#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */ + /* own hinter */ +#define FT_MODULE_DRIVER_HINTS_LIGHTLY 0x800 /* the driver's hinter */ + /* produces LIGHT hints */ + + + /* deprecated values */ +#define ft_module_font_driver FT_MODULE_FONT_DRIVER +#define ft_module_renderer FT_MODULE_RENDERER +#define ft_module_hinter FT_MODULE_HINTER +#define ft_module_styler FT_MODULE_STYLER + +#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE +#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES +#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER +#define ft_module_driver_hints_lightly FT_MODULE_DRIVER_HINTS_LIGHTLY + + + typedef FT_Pointer FT_Module_Interface; + + + /************************************************************************** + * + * @functype: + * FT_Module_Constructor + * + * @description: + * A function used to initialize (not create) a new module object. + * + * @input: + * module :: + * The module to initialize. + */ + typedef FT_Error + (*FT_Module_Constructor)( FT_Module module ); + + + /************************************************************************** + * + * @functype: + * FT_Module_Destructor + * + * @description: + * A function used to finalize (not destroy) a given module object. + * + * @input: + * module :: + * The module to finalize. + */ + typedef void + (*FT_Module_Destructor)( FT_Module module ); + + + /************************************************************************** + * + * @functype: + * FT_Module_Requester + * + * @description: + * A function used to query a given module for a specific interface. + * + * @input: + * module :: + * The module to be searched. + * + * name :: + * The name of the interface in the module. + */ + typedef FT_Module_Interface + (*FT_Module_Requester)( FT_Module module, + const char* name ); + + + /************************************************************************** + * + * @struct: + * FT_Module_Class + * + * @description: + * The module class descriptor. While being a public structure necessary + * for FreeType's module bookkeeping, most of the fields are essentially + * internal, not to be used directly by an application. + * + * @fields: + * module_flags :: + * Bit flags describing the module. + * + * module_size :: + * The size of one module object/instance in bytes. + * + * module_name :: + * The name of the module. + * + * module_version :: + * The version, as a 16.16 fixed number (major.minor). + * + * module_requires :: + * The version of FreeType this module requires, as a 16.16 fixed + * number (major.minor). Starts at version 2.0, i.e., 0x20000. + * + * module_interface :: + * A typeless pointer to a structure (which varies between different + * modules) that holds the module's interface functions. This is + * essentially what `get_interface` returns. + * + * module_init :: + * The initializing function. + * + * module_done :: + * The finalizing function. + * + * get_interface :: + * The interface requesting function. + */ + typedef struct FT_Module_Class_ + { + FT_ULong module_flags; + FT_Long module_size; + const FT_String* module_name; + FT_Fixed module_version; + FT_Fixed module_requires; + + const void* module_interface; + + FT_Module_Constructor module_init; + FT_Module_Destructor module_done; + FT_Module_Requester get_interface; + + } FT_Module_Class; + + + /************************************************************************** + * + * @function: + * FT_Add_Module + * + * @description: + * Add a new module to a given library instance. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * clazz :: + * A pointer to class descriptor for the module. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An error will be returned if a module already exists by that name, or + * if the module requires a version of FreeType that is too great. + */ + FT_EXPORT( FT_Error ) + FT_Add_Module( FT_Library library, + const FT_Module_Class* clazz ); + + + /************************************************************************** + * + * @function: + * FT_Get_Module + * + * @description: + * Find a module by its name. + * + * @input: + * library :: + * A handle to the library object. + * + * module_name :: + * The module's name (as an ASCII string). + * + * @return: + * A module handle. 0~if none was found. + * + * @note: + * FreeType's internal modules aren't documented very well, and you + * should look up the source code for details. + */ + FT_EXPORT( FT_Module ) + FT_Get_Module( FT_Library library, + const char* module_name ); + + + /************************************************************************** + * + * @function: + * FT_Remove_Module + * + * @description: + * Remove a given module from a library instance. + * + * @inout: + * library :: + * A handle to a library object. + * + * @input: + * module :: + * A handle to a module object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The module object is destroyed by the function in case of success. + */ + FT_EXPORT( FT_Error ) + FT_Remove_Module( FT_Library library, + FT_Module module ); + + + /************************************************************************** + * + * @function: + * FT_Property_Set + * + * @description: + * Set a property for a given module. + * + * @input: + * library :: + * A handle to the library the module is part of. + * + * module_name :: + * The module name. + * + * property_name :: + * The property name. Properties are described in section + * @properties. + * + * Note that only a few modules have properties. + * + * value :: + * A generic pointer to a variable or structure that gives the new + * value of the property. The exact definition of `value` is + * dependent on the property; see section @properties. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `module_name` isn't a valid module name, or `property_name` + * doesn't specify a valid property, or if `value` doesn't represent a + * valid value for the given property, an error is returned. + * + * The following example sets property 'bar' (a simple integer) in + * module 'foo' to value~1. + * + * ``` + * FT_UInt bar; + * + * + * bar = 1; + * FT_Property_Set( library, "foo", "bar", &bar ); + * ``` + * + * Note that the FreeType Cache sub-system doesn't recognize module + * property changes. To avoid glyph lookup confusion within the cache + * you should call @FTC_Manager_Reset to completely flush the cache if a + * module property gets changed after @FTC_Manager_New has been called. + * + * It is not possible to set properties of the FreeType Cache sub-system + * itself with FT_Property_Set; use @FTC_Property_Set instead. + * + * @since: + * 2.4.11 + * + */ + FT_EXPORT( FT_Error ) + FT_Property_Set( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + const void* value ); + + + /************************************************************************** + * + * @function: + * FT_Property_Get + * + * @description: + * Get a module's property value. + * + * @input: + * library :: + * A handle to the library the module is part of. + * + * module_name :: + * The module name. + * + * property_name :: + * The property name. Properties are described in section + * @properties. + * + * @inout: + * value :: + * A generic pointer to a variable or structure that gives the value + * of the property. The exact definition of `value` is dependent on + * the property; see section @properties. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `module_name` isn't a valid module name, or `property_name` + * doesn't specify a valid property, or if `value` doesn't represent a + * valid value for the given property, an error is returned. + * + * The following example gets property 'baz' (a range) in module 'foo'. + * + * ``` + * typedef range_ + * { + * FT_Int32 min; + * FT_Int32 max; + * + * } range; + * + * range baz; + * + * + * FT_Property_Get( library, "foo", "baz", &baz ); + * ``` + * + * It is not possible to retrieve properties of the FreeType Cache + * sub-system with FT_Property_Get; use @FTC_Property_Get instead. + * + * @since: + * 2.4.11 + * + */ + FT_EXPORT( FT_Error ) + FT_Property_Get( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + void* value ); + + + /************************************************************************** + * + * @function: + * FT_Set_Default_Properties + * + * @description: + * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is + * set, this function reads the `FREETYPE_PROPERTIES` environment + * variable to control driver properties. See section @properties for + * more. + * + * If the compilation option is not set, this function does nothing. + * + * `FREETYPE_PROPERTIES` has the following syntax form (broken here into + * multiple lines for better readability). + * + * ``` + * <optional whitespace> + * <module-name1> ':' + * <property-name1> '=' <property-value1> + * <whitespace> + * <module-name2> ':' + * <property-name2> '=' <property-value2> + * ... + * ``` + * + * Example: + * + * ``` + * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ + * cff:no-stem-darkening=1 \ + * autofitter:warping=1 + * ``` + * + * @inout: + * library :: + * A handle to a new library object. + * + * @since: + * 2.8 + */ + FT_EXPORT( void ) + FT_Set_Default_Properties( FT_Library library ); + + + /************************************************************************** + * + * @function: + * FT_Reference_Library + * + * @description: + * A counter gets initialized to~1 at the time an @FT_Library structure + * is created. This function increments the counter. @FT_Done_Library + * then only destroys a library if the counter is~1, otherwise it simply + * decrements the counter. + * + * This function helps in managing life-cycles of structures that + * reference @FT_Library objects. + * + * @input: + * library :: + * A handle to a target library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.4.2 + */ + FT_EXPORT( FT_Error ) + FT_Reference_Library( FT_Library library ); + + + /************************************************************************** + * + * @function: + * FT_New_Library + * + * @description: + * This function is used to create a new FreeType library instance from a + * given memory object. It is thus possible to use libraries with + * distinct memory allocators within the same program. Note, however, + * that the used @FT_Memory structure is expected to remain valid for the + * life of the @FT_Library object. + * + * Normally, you would call this function (followed by a call to + * @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, and a + * call to @FT_Set_Default_Properties) instead of @FT_Init_FreeType to + * initialize the FreeType library. + * + * Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a library + * instance. + * + * @input: + * memory :: + * A handle to the original memory object. + * + * @output: + * alibrary :: + * A pointer to handle of a new library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Library. + */ + FT_EXPORT( FT_Error ) + FT_New_Library( FT_Memory memory, + FT_Library *alibrary ); + + + /************************************************************************** + * + * @function: + * FT_Done_Library + * + * @description: + * Discard a given library object. This closes all drivers and discards + * all resource objects. + * + * @input: + * library :: + * A handle to the target library. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Library. + */ + FT_EXPORT( FT_Error ) + FT_Done_Library( FT_Library library ); + + + /************************************************************************** + * + * @functype: + * FT_DebugHook_Func + * + * @description: + * A drop-in replacement (or rather a wrapper) for the bytecode or + * charstring interpreter's main loop function. + * + * Its job is essentially + * + * - to activate debug mode to enforce single-stepping, + * + * - to call the main loop function to interpret the next opcode, and + * + * - to show the changed context to the user. + * + * An example for such a main loop function is `TT_RunIns` (declared in + * FreeType's internal header file `src/truetype/ttinterp.h`). + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of a drop-in replacement. + * + * @inout: + * arg :: + * A typeless pointer, to be cast to the main loop function's data + * structure (which depends on the font module). For TrueType fonts + * it is bytecode interpreter's execution context, `TT_ExecContext`, + * which is declared in FreeType's internal header file `tttypes.h`. + */ + typedef void + (*FT_DebugHook_Func)( void* arg ); + + + /************************************************************************** + * + * @enum: + * FT_DEBUG_HOOK_XXX + * + * @description: + * A list of named debug hook indices. + * + * @values: + * FT_DEBUG_HOOK_TRUETYPE:: + * This hook index identifies the TrueType bytecode debugger. + */ +#define FT_DEBUG_HOOK_TRUETYPE 0 + + + /************************************************************************** + * + * @function: + * FT_Set_Debug_Hook + * + * @description: + * Set a debug hook function for debugging the interpreter of a font + * format. + * + * While this is a public API function, an application needs access to + * FreeType's internal header files to do something useful. + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of its usage. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * hook_index :: + * The index of the debug hook. You should use defined enumeration + * macros like @FT_DEBUG_HOOK_TRUETYPE. + * + * debug_hook :: + * The function used to debug the interpreter. + * + * @note: + * Currently, four debug hook slots are available, but only one (for the + * TrueType interpreter) is defined. + */ + FT_EXPORT( void ) + FT_Set_Debug_Hook( FT_Library library, + FT_UInt hook_index, + FT_DebugHook_Func debug_hook ); + + + /************************************************************************** + * + * @function: + * FT_Add_Default_Modules + * + * @description: + * Add the set of default drivers to a given library object. This is + * only useful when you create a library object with @FT_New_Library + * (usually to plug a custom memory manager). + * + * @inout: + * library :: + * A handle to a new library object. + */ + FT_EXPORT( void ) + FT_Add_Default_Modules( FT_Library library ); + + + + /************************************************************************** + * + * @section: + * truetype_engine + * + * @title: + * The TrueType Engine + * + * @abstract: + * TrueType bytecode support. + * + * @description: + * This section contains a function used to query the level of TrueType + * bytecode support compiled in this version of the library. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_TrueTypeEngineType + * + * @description: + * A list of values describing which kind of TrueType bytecode engine is + * implemented in a given FT_Library instance. It is used by the + * @FT_Get_TrueType_Engine_Type function. + * + * @values: + * FT_TRUETYPE_ENGINE_TYPE_NONE :: + * The library doesn't implement any kind of bytecode interpreter. + * + * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: + * Deprecated and removed. + * + * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: + * The library implements a bytecode interpreter that covers the full + * instruction set of the TrueType virtual machine (this was governed + * by patents until May 2010, hence the name). + * + * @since: + * 2.2 + * + */ + typedef enum FT_TrueTypeEngineType_ + { + FT_TRUETYPE_ENGINE_TYPE_NONE = 0, + FT_TRUETYPE_ENGINE_TYPE_UNPATENTED, + FT_TRUETYPE_ENGINE_TYPE_PATENTED + + } FT_TrueTypeEngineType; + + + /************************************************************************** + * + * @function: + * FT_Get_TrueType_Engine_Type + * + * @description: + * Return an @FT_TrueTypeEngineType value to indicate which level of the + * TrueType virtual machine a given library instance supports. + * + * @input: + * library :: + * A library instance. + * + * @return: + * A value indicating which level is supported. + * + * @since: + * 2.2 + * + */ + FT_EXPORT( FT_TrueTypeEngineType ) + FT_Get_TrueType_Engine_Type( FT_Library library ); + + /* */ + + +FT_END_HEADER + +#endif /* FTMODAPI_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftmoderr.h b/win32/include/freetype/freetype/ftmoderr.h new file mode 100644 index 00000000..e1699357 --- /dev/null +++ b/win32/include/freetype/freetype/ftmoderr.h @@ -0,0 +1,203 @@ +/**************************************************************************** + * + * ftmoderr.h + * + * FreeType module error offsets (specification). + * + * Copyright (C) 2001-2019 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. + * + */ + + + /************************************************************************** + * + * This file is used to define the FreeType module error codes. + * + * If the macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` in `ftoption.h` is + * set, the lower byte of an error value identifies the error code as + * usual. In addition, the higher byte identifies the module. For + * example, the error `FT_Err_Invalid_File_Format` has value 0x0003, the + * error `TT_Err_Invalid_File_Format` has value 0x1303, the error + * `T1_Err_Invalid_File_Format` has value 0x1403, etc. + * + * Note that `FT_Err_Ok`, `TT_Err_Ok`, etc. are always equal to zero, + * including the high byte. + * + * If `FT_CONFIG_OPTION_USE_MODULE_ERRORS` isn't set, the higher byte of an + * error value is set to zero. + * + * To hide the various `XXX_Err_` prefixes in the source code, FreeType + * provides some macros in `fttypes.h`. + * + * FT_ERR( err ) + * + * Add current error module prefix (as defined with the `FT_ERR_PREFIX` + * macro) to `err`. For example, in the BDF module the line + * + * ``` + * error = FT_ERR( Invalid_Outline ); + * ``` + * + * expands to + * + * ``` + * error = BDF_Err_Invalid_Outline; + * ``` + * + * For simplicity, you can always use `FT_Err_Ok` directly instead of + * `FT_ERR( Ok )`. + * + * FT_ERR_EQ( errcode, err ) + * FT_ERR_NEQ( errcode, err ) + * + * Compare error code `errcode` with the error `err` for equality and + * inequality, respectively. Example: + * + * ``` + * if ( FT_ERR_EQ( error, Invalid_Outline ) ) + * ... + * ``` + * + * Using this macro you don't have to think about error prefixes. Of + * course, if module errors are not active, the above example is the + * same as + * + * ``` + * if ( error == FT_Err_Invalid_Outline ) + * ... + * ``` + * + * FT_ERROR_BASE( errcode ) + * FT_ERROR_MODULE( errcode ) + * + * Get base error and module error code, respectively. + * + * It can also be used to create a module error message table easily with + * something like + * + * ``` + * #undef FTMODERR_H_ + * #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, + * #define FT_MODERR_START_LIST { + * #define FT_MODERR_END_LIST { 0, 0 } }; + * + * const struct + * { + * int mod_err_offset; + * const char* mod_err_msg + * } ft_mod_errors[] = + * + * #include FT_MODULE_ERRORS_H + * ``` + * + */ + + +#ifndef FTMODERR_H_ +#define FTMODERR_H_ + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** SETUP MACROS *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#undef FT_NEED_EXTERN_C + +#ifndef FT_MODERRDEF + +#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS +#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = v, +#else +#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = 0, +#endif + +#define FT_MODERR_START_LIST enum { +#define FT_MODERR_END_LIST FT_Mod_Err_Max }; + +#ifdef __cplusplus +#define FT_NEED_EXTERN_C + extern "C" { +#endif + +#endif /* !FT_MODERRDEF */ + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** LIST MODULE ERROR BASES *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#ifdef FT_MODERR_START_LIST + FT_MODERR_START_LIST +#endif + + + FT_MODERRDEF( Base, 0x000, "base module" ) + FT_MODERRDEF( Autofit, 0x100, "autofitter module" ) + FT_MODERRDEF( BDF, 0x200, "BDF module" ) + FT_MODERRDEF( Bzip2, 0x300, "Bzip2 module" ) + FT_MODERRDEF( Cache, 0x400, "cache module" ) + FT_MODERRDEF( CFF, 0x500, "CFF module" ) + FT_MODERRDEF( CID, 0x600, "CID module" ) + FT_MODERRDEF( Gzip, 0x700, "Gzip module" ) + FT_MODERRDEF( LZW, 0x800, "LZW module" ) + FT_MODERRDEF( OTvalid, 0x900, "OpenType validation module" ) + FT_MODERRDEF( PCF, 0xA00, "PCF module" ) + FT_MODERRDEF( PFR, 0xB00, "PFR module" ) + FT_MODERRDEF( PSaux, 0xC00, "PS auxiliary module" ) + FT_MODERRDEF( PShinter, 0xD00, "PS hinter module" ) + FT_MODERRDEF( PSnames, 0xE00, "PS names module" ) + FT_MODERRDEF( Raster, 0xF00, "raster module" ) + FT_MODERRDEF( SFNT, 0x1000, "SFNT module" ) + FT_MODERRDEF( Smooth, 0x1100, "smooth raster module" ) + FT_MODERRDEF( TrueType, 0x1200, "TrueType module" ) + FT_MODERRDEF( Type1, 0x1300, "Type 1 module" ) + FT_MODERRDEF( Type42, 0x1400, "Type 42 module" ) + FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" ) + FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" ) + + +#ifdef FT_MODERR_END_LIST + FT_MODERR_END_LIST +#endif + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** CLEANUP *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#ifdef FT_NEED_EXTERN_C + } +#endif + +#undef FT_MODERR_START_LIST +#undef FT_MODERR_END_LIST +#undef FT_MODERRDEF +#undef FT_NEED_EXTERN_C + + +#endif /* FTMODERR_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftotval.h b/win32/include/freetype/freetype/ftotval.h new file mode 100644 index 00000000..c034f489 --- /dev/null +++ b/win32/include/freetype/freetype/ftotval.h @@ -0,0 +1,207 @@ +/**************************************************************************** + * + * ftotval.h + * + * FreeType API for validating OpenType tables (specification). + * + * Copyright (C) 2004-2019 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. + * + */ + + +/**************************************************************************** + * + * + * Warning: This module might be moved to a different library in the + * future to avoid a tight dependency between FreeType and the + * OpenType specification. + * + * + */ + + +#ifndef FTOTVAL_H_ +#define FTOTVAL_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * ot_validation + * + * @title: + * OpenType Validation + * + * @abstract: + * An API to validate OpenType tables. + * + * @description: + * This section contains the declaration of functions to validate some + * OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). + * + * @order: + * FT_OpenType_Validate + * FT_OpenType_Free + * + * FT_VALIDATE_OTXXX + * + */ + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_OTXXX + * + * @description: + * A list of bit-field constants used with @FT_OpenType_Validate to + * indicate which OpenType tables should be validated. + * + * @values: + * FT_VALIDATE_BASE :: + * Validate BASE table. + * + * FT_VALIDATE_GDEF :: + * Validate GDEF table. + * + * FT_VALIDATE_GPOS :: + * Validate GPOS table. + * + * FT_VALIDATE_GSUB :: + * Validate GSUB table. + * + * FT_VALIDATE_JSTF :: + * Validate JSTF table. + * + * FT_VALIDATE_MATH :: + * Validate MATH table. + * + * FT_VALIDATE_OT :: + * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). + * + */ +#define FT_VALIDATE_BASE 0x0100 +#define FT_VALIDATE_GDEF 0x0200 +#define FT_VALIDATE_GPOS 0x0400 +#define FT_VALIDATE_GSUB 0x0800 +#define FT_VALIDATE_JSTF 0x1000 +#define FT_VALIDATE_MATH 0x2000 + +#define FT_VALIDATE_OT ( FT_VALIDATE_BASE | \ + FT_VALIDATE_GDEF | \ + FT_VALIDATE_GPOS | \ + FT_VALIDATE_GSUB | \ + FT_VALIDATE_JSTF | \ + FT_VALIDATE_MATH ) + + + /************************************************************************** + * + * @function: + * FT_OpenType_Validate + * + * @description: + * Validate various OpenType tables to assure that all offsets and + * indices are valid. The idea is that a higher-level library that + * actually does the text layout can access those tables without error + * checking (which can be quite time consuming). + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the tables to be validated. See + * @FT_VALIDATE_OTXXX for possible values. + * + * @output: + * BASE_table :: + * A pointer to the BASE table. + * + * GDEF_table :: + * A pointer to the GDEF table. + * + * GPOS_table :: + * A pointer to the GPOS table. + * + * GSUB_table :: + * A pointer to the GSUB table. + * + * JSTF_table :: + * A pointer to the JSTF table. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with OpenType fonts, returning an error + * otherwise. + * + * After use, the application should deallocate the five tables with + * @FT_OpenType_Free. A `NULL` value indicates that the table either + * doesn't exist in the font, or the application hasn't asked for + * validation. + */ + FT_EXPORT( FT_Error ) + FT_OpenType_Validate( FT_Face face, + FT_UInt validation_flags, + FT_Bytes *BASE_table, + FT_Bytes *GDEF_table, + FT_Bytes *GPOS_table, + FT_Bytes *GSUB_table, + FT_Bytes *JSTF_table ); + + + /************************************************************************** + * + * @function: + * FT_OpenType_Free + * + * @description: + * Free the buffer allocated by OpenType validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer that is allocated by + * @FT_OpenType_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_OpenType_Validate only. + */ + FT_EXPORT( void ) + FT_OpenType_Free( FT_Face face, + FT_Bytes table ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTOTVAL_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftoutln.h b/win32/include/freetype/freetype/ftoutln.h new file mode 100644 index 00000000..75c3d015 --- /dev/null +++ b/win32/include/freetype/freetype/ftoutln.h @@ -0,0 +1,593 @@ +/**************************************************************************** + * + * ftoutln.h + * + * Support for the FT_Outline type used to store glyph shapes of + * most scalable font formats (specification). + * + * Copyright (C) 1996-2019 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 FTOUTLN_H_ +#define FTOUTLN_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * outline_processing + * + * @title: + * Outline Processing + * + * @abstract: + * Functions to create, transform, and render vectorial glyph images. + * + * @description: + * This section contains routines used to create and destroy scalable + * glyph images known as 'outlines'. These can also be measured, + * transformed, and converted into bitmaps and pixmaps. + * + * @order: + * FT_Outline + * FT_Outline_New + * FT_Outline_Done + * FT_Outline_Copy + * FT_Outline_Translate + * FT_Outline_Transform + * FT_Outline_Embolden + * FT_Outline_EmboldenXY + * FT_Outline_Reverse + * FT_Outline_Check + * + * FT_Outline_Get_CBox + * FT_Outline_Get_BBox + * + * FT_Outline_Get_Bitmap + * FT_Outline_Render + * FT_Outline_Decompose + * FT_Outline_Funcs + * FT_Outline_MoveToFunc + * FT_Outline_LineToFunc + * FT_Outline_ConicToFunc + * FT_Outline_CubicToFunc + * + * FT_Orientation + * FT_Outline_Get_Orientation + * + * FT_OUTLINE_XXX + * + */ + + + /************************************************************************** + * + * @function: + * FT_Outline_Decompose + * + * @description: + * Walk over an outline's structure to decompose it into individual + * segments and Bezier arcs. This function also emits 'move to' + * operations to indicate the start of new contours in the outline. + * + * @input: + * outline :: + * A pointer to the source target. + * + * func_interface :: + * A table of 'emitters', i.e., function pointers called during + * decomposition to indicate path operations. + * + * @inout: + * user :: + * A typeless pointer that is passed to each emitter during the + * decomposition. It can be used to store the state during the + * decomposition. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * A contour that contains a single point only is represented by a 'move + * to' operation followed by 'line to' to the same point. In most cases, + * it is best to filter this out before using the outline for stroking + * purposes (otherwise it would result in a visible dot when round caps + * are used). + * + * Similarly, the function returns success for an empty outline also + * (doing nothing, this is, not calling any emitter); if necessary, you + * should filter this out, too. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Decompose( FT_Outline* outline, + const FT_Outline_Funcs* func_interface, + void* user ); + + + /************************************************************************** + * + * @function: + * FT_Outline_New + * + * @description: + * Create a new outline of a given size. + * + * @input: + * library :: + * A handle to the library object from where the outline is allocated. + * Note however that the new outline will **not** necessarily be + * **freed**, when destroying the library, by @FT_Done_FreeType. + * + * numPoints :: + * The maximum number of points within the outline. Must be smaller + * than or equal to 0xFFFF (65535). + * + * numContours :: + * The maximum number of contours within the outline. This value must + * be in the range 0 to `numPoints`. + * + * @output: + * anoutline :: + * A handle to the new outline. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The reason why this function takes a `library` parameter is simply to + * use the library's memory allocator. + */ + FT_EXPORT( FT_Error ) + FT_Outline_New( FT_Library library, + FT_UInt numPoints, + FT_Int numContours, + FT_Outline *anoutline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Done + * + * @description: + * Destroy an outline created with @FT_Outline_New. + * + * @input: + * library :: + * A handle of the library object used to allocate the outline. + * + * outline :: + * A pointer to the outline object to be discarded. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the outline's 'owner' field is not set, only the outline descriptor + * will be released. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Done( FT_Library library, + FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Check + * + * @description: + * Check the contents of an outline descriptor. + * + * @input: + * outline :: + * A handle to a source outline. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An empty outline, or an outline with a single point only is also + * valid. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Check( FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_CBox + * + * @description: + * Return an outline's 'control box'. The control box encloses all the + * outline's points, including Bezier control points. Though it + * coincides with the exact bounding box for most glyphs, it can be + * slightly larger in some situations (like when rotating an outline that + * contains Bezier outside arcs). + * + * Computing the control box is very fast, while getting the bounding box + * can take much more time as it needs to walk over all segments and arcs + * in the outline. To get the latter, you can use the 'ftbbox' + * component, which is dedicated to this single task. + * + * @input: + * outline :: + * A pointer to the source outline descriptor. + * + * @output: + * acbox :: + * The outline's control box. + * + * @note: + * See @FT_Glyph_Get_CBox for a discussion of tricky fonts. + */ + FT_EXPORT( void ) + FT_Outline_Get_CBox( const FT_Outline* outline, + FT_BBox *acbox ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Translate + * + * @description: + * Apply a simple translation to the points of an outline. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @input: + * xOffset :: + * The horizontal offset. + * + * yOffset :: + * The vertical offset. + */ + FT_EXPORT( void ) + FT_Outline_Translate( const FT_Outline* outline, + FT_Pos xOffset, + FT_Pos yOffset ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Copy + * + * @description: + * Copy an outline into another one. Both objects must have the same + * sizes (number of points & number of contours) when this function is + * called. + * + * @input: + * source :: + * A handle to the source outline. + * + * @output: + * target :: + * A handle to the target outline. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Copy( const FT_Outline* source, + FT_Outline *target ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Transform + * + * @description: + * Apply a simple 2x2 matrix to all of an outline's points. Useful for + * applying rotations, slanting, flipping, etc. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @input: + * matrix :: + * A pointer to the transformation matrix. + * + * @note: + * You can use @FT_Outline_Translate if you need to translate the + * outline's points. + */ + FT_EXPORT( void ) + FT_Outline_Transform( const FT_Outline* outline, + const FT_Matrix* matrix ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Embolden + * + * @description: + * Embolden an outline. The new outline will be at most 4~times + * `strength` pixels wider and higher. You may think of the left and + * bottom borders as unchanged. + * + * Negative `strength` values to reduce the outline thickness are + * possible also. + * + * @inout: + * outline :: + * A handle to the target outline. + * + * @input: + * strength :: + * How strong the glyph is emboldened. Expressed in 26.6 pixel format. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The used algorithm to increase or decrease the thickness of the glyph + * doesn't change the number of points; this means that certain + * situations like acute angles or intersections are sometimes handled + * incorrectly. + * + * If you need 'better' metrics values you should call + * @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. + * + * To get meaningful results, font scaling values must be set with + * functions like @FT_Set_Char_Size before calling FT_Render_Glyph. + * + * @example: + * ``` + * FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); + * + * if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) + * FT_Outline_Embolden( &face->glyph->outline, strength ); + * ``` + * + */ + FT_EXPORT( FT_Error ) + FT_Outline_Embolden( FT_Outline* outline, + FT_Pos strength ); + + + /************************************************************************** + * + * @function: + * FT_Outline_EmboldenXY + * + * @description: + * Embolden an outline. The new outline will be `xstrength` pixels wider + * and `ystrength` pixels higher. Otherwise, it is similar to + * @FT_Outline_Embolden, which uses the same strength in both directions. + * + * @since: + * 2.4.10 + */ + FT_EXPORT( FT_Error ) + FT_Outline_EmboldenXY( FT_Outline* outline, + FT_Pos xstrength, + FT_Pos ystrength ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Reverse + * + * @description: + * Reverse the drawing direction of an outline. This is used to ensure + * consistent fill conventions for mirrored glyphs. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @note: + * This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in the + * outline's `flags` field. + * + * It shouldn't be used by a normal client application, unless it knows + * what it is doing. + */ + FT_EXPORT( void ) + FT_Outline_Reverse( FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_Bitmap + * + * @description: + * Render an outline within a bitmap. The outline's image is simply + * OR-ed to the target bitmap. + * + * @input: + * library :: + * A handle to a FreeType library object. + * + * outline :: + * A pointer to the source outline descriptor. + * + * @inout: + * abitmap :: + * A pointer to the target bitmap descriptor. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function does **not create** the bitmap, it only renders an + * outline image within the one you pass to it! Consequently, the + * various fields in `abitmap` should be set accordingly. + * + * It will use the raster corresponding to the default glyph format. + * + * The value of the `num_grays` field in `abitmap` is ignored. If you + * select the gray-level rasterizer, and you want less than 256 gray + * levels, you have to use @FT_Outline_Render directly. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Get_Bitmap( FT_Library library, + FT_Outline* outline, + const FT_Bitmap *abitmap ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Render + * + * @description: + * Render an outline within a bitmap using the current scan-convert. + * This function uses an @FT_Raster_Params structure as an argument, + * allowing advanced features like direct composition, translucency, etc. + * + * @input: + * library :: + * A handle to a FreeType library object. + * + * outline :: + * A pointer to the source outline descriptor. + * + * @inout: + * params :: + * A pointer to an @FT_Raster_Params structure used to describe the + * rendering operation. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should know what you are doing and how @FT_Raster_Params works to + * use this function. + * + * The field `params.source` will be set to `outline` before the scan + * converter is called, which means that the value you give to it is + * actually ignored. + * + * The gray-level rasterizer always uses 256 gray levels. If you want + * less gray levels, you have to provide your own span callback. See the + * @FT_RASTER_FLAG_DIRECT value of the `flags` field in the + * @FT_Raster_Params structure for more details. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Render( FT_Library library, + FT_Outline* outline, + FT_Raster_Params* params ); + + + /************************************************************************** + * + * @enum: + * FT_Orientation + * + * @description: + * A list of values used to describe an outline's contour orientation. + * + * The TrueType and PostScript specifications use different conventions + * to determine whether outline contours should be filled or unfilled. + * + * @values: + * FT_ORIENTATION_TRUETYPE :: + * According to the TrueType specification, clockwise contours must be + * filled, and counter-clockwise ones must be unfilled. + * + * FT_ORIENTATION_POSTSCRIPT :: + * According to the PostScript specification, counter-clockwise + * contours must be filled, and clockwise ones must be unfilled. + * + * FT_ORIENTATION_FILL_RIGHT :: + * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to + * remember that in TrueType, everything that is to the right of the + * drawing direction of a contour must be filled. + * + * FT_ORIENTATION_FILL_LEFT :: + * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to + * remember that in PostScript, everything that is to the left of the + * drawing direction of a contour must be filled. + * + * FT_ORIENTATION_NONE :: + * The orientation cannot be determined. That is, different parts of + * the glyph have different orientation. + * + */ + typedef enum FT_Orientation_ + { + FT_ORIENTATION_TRUETYPE = 0, + FT_ORIENTATION_POSTSCRIPT = 1, + FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE, + FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT, + FT_ORIENTATION_NONE + + } FT_Orientation; + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_Orientation + * + * @description: + * This function analyzes a glyph outline and tries to compute its fill + * orientation (see @FT_Orientation). This is done by integrating the + * total area covered by the outline. The positive integral corresponds + * to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT is + * returned. The negative integral corresponds to the counter-clockwise + * orientation and @FT_ORIENTATION_TRUETYPE is returned. + * + * Note that this will return @FT_ORIENTATION_TRUETYPE for empty + * outlines. + * + * @input: + * outline :: + * A handle to the source outline. + * + * @return: + * The orientation. + * + */ + FT_EXPORT( FT_Orientation ) + FT_Outline_Get_Orientation( FT_Outline* outline ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTOUTLN_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/win32/include/freetype/freetype/ftparams.h b/win32/include/freetype/freetype/ftparams.h new file mode 100644 index 00000000..c374ee2f --- /dev/null +++ b/win32/include/freetype/freetype/ftparams.h @@ -0,0 +1,204 @@ +/**************************************************************************** + * + * ftparams.h + * + * FreeType API for possible FT_Parameter tags (specification only). + * + * Copyright (C) 2017-2019 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 FTPARAMS_H_ +#define FTPARAMS_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * parameter_tags + * + * @title: + * Parameter Tags + * + * @abstract: + * Macros for driver property and font loading parameter tags. + * + * @description: + * This section contains macros for the @FT_Parameter structure that are + * used with various functions to activate some special functionality or + * different behaviour of various components of FreeType. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic + * family names in the 'name' table (introduced in OpenType version 1.4). + * Use this for backward compatibility with legacy systems that have a + * four-faces-per-family restriction. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \ + FT_MAKE_TAG( 'i', 'g', 'p', 'f' ) + + + /* this constant is deprecated */ +#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \ + FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic + * subfamily names in the 'name' table (introduced in OpenType version + * 1.4). Use this for backward compatibility with legacy systems that + * have a four-faces-per-family restriction. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \ + FT_MAKE_TAG( 'i', 'g', 'p', 's' ) + + + /* this constant is deprecated */ +#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \ + FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_INCREMENTAL + * + * @description: + * An @FT_Parameter tag to be used with @FT_Open_Face to indicate + * incremental glyph loading. + * + */ +#define FT_PARAM_TAG_INCREMENTAL \ + FT_MAKE_TAG( 'i', 'n', 'c', 'r' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_LCD_FILTER_WEIGHTS + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding argument specifies the five LCD filter weights for a + * given face (if using @FT_LOAD_TARGET_LCD, for example), overriding the + * global default values or the values set up with + * @FT_Library_SetLcdFilterWeights. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \ + FT_MAKE_TAG( 'l', 'c', 'd', 'f' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_RANDOM_SEED + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding 32bit signed integer argument overrides the font + * driver's random seed value with a face-specific one; see @random-seed. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_RANDOM_SEED \ + FT_MAKE_TAG( 's', 'e', 'e', 'd' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_STEM_DARKENING + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding Boolean argument specifies whether to apply stem + * darkening, overriding the global default values or the values set up + * with @FT_Property_Set (see @no-stem-darkening). + * + * This is a passive setting that only takes effect if the font driver or + * autohinter honors it, which the CFF, Type~1, and CID drivers always + * do, but the autohinter only in 'light' hinting mode (as of version + * 2.9). + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_STEM_DARKENING \ + FT_MAKE_TAG( 'd', 'a', 'r', 'k' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_UNPATENTED_HINTING + * + * @description: + * Deprecated, no effect. + * + * Previously: A constant used as the tag of an @FT_Parameter structure + * to indicate that unpatented methods only should be used by the + * TrueType bytecode interpreter for a typeface opened by @FT_Open_Face. + * + */ +#define FT_PARAM_TAG_UNPATENTED_HINTING \ + FT_MAKE_TAG( 'u', 'n', 'p', 'a' ) + + + /* */ + + +FT_END_HEADER + + +#endif /* FTPARAMS_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftpfr.h b/win32/include/freetype/freetype/ftpfr.h new file mode 100644 index 00000000..b4eca76e --- /dev/null +++ b/win32/include/freetype/freetype/ftpfr.h @@ -0,0 +1,180 @@ +/**************************************************************************** + * + * ftpfr.h + * + * FreeType API for accessing PFR-specific data (specification only). + * + * Copyright (C) 2002-2019 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 FTPFR_H_ +#define FTPFR_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * pfr_fonts + * + * @title: + * PFR Fonts + * + * @abstract: + * PFR/TrueDoc-specific API. + * + * @description: + * This section contains the declaration of PFR-specific functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_PFR_Metrics + * + * @description: + * Return the outline and metrics resolutions of a given PFR face. + * + * @input: + * face :: + * Handle to the input face. It can be a non-PFR face. + * + * @output: + * aoutline_resolution :: + * Outline resolution. This is equivalent to `face->units_per_EM` for + * non-PFR fonts. Optional (parameter can be `NULL`). + * + * ametrics_resolution :: + * Metrics resolution. This is equivalent to `outline_resolution` for + * non-PFR fonts. Optional (parameter can be `NULL`). + * + * ametrics_x_scale :: + * A 16.16 fixed-point number used to scale distance expressed in + * metrics units to device subpixels. This is equivalent to + * `face->size->x_scale`, but for metrics only. Optional (parameter + * can be `NULL`). + * + * ametrics_y_scale :: + * Same as `ametrics_x_scale` but for the vertical direction. + * optional (parameter can be `NULL`). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the input face is not a PFR, this function will return an error. + * However, in all cases, it will return valid values. + */ + FT_EXPORT( FT_Error ) + FT_Get_PFR_Metrics( FT_Face face, + FT_UInt *aoutline_resolution, + FT_UInt *ametrics_resolution, + FT_Fixed *ametrics_x_scale, + FT_Fixed *ametrics_y_scale ); + + + /************************************************************************** + * + * @function: + * FT_Get_PFR_Kerning + * + * @description: + * Return the kerning pair corresponding to two glyphs in a PFR face. + * The distance is expressed in metrics units, unlike the result of + * @FT_Get_Kerning. + * + * @input: + * face :: + * A handle to the input face. + * + * left :: + * Index of the left glyph. + * + * right :: + * Index of the right glyph. + * + * @output: + * avector :: + * A kerning vector. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function always return distances in original PFR metrics units. + * This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED mode, + * which always returns distances converted to outline units. + * + * You can use the value of the `x_scale` and `y_scale` parameters + * returned by @FT_Get_PFR_Metrics to scale these to device subpixels. + */ + FT_EXPORT( FT_Error ) + FT_Get_PFR_Kerning( FT_Face face, + FT_UInt left, + FT_UInt right, + FT_Vector *avector ); + + + /************************************************************************** + * + * @function: + * FT_Get_PFR_Advance + * + * @description: + * Return a given glyph advance, expressed in original metrics units, + * from a PFR font. + * + * @input: + * face :: + * A handle to the input face. + * + * gindex :: + * The glyph index. + * + * @output: + * aadvance :: + * The glyph advance in metrics units. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You can use the `x_scale` or `y_scale` results of @FT_Get_PFR_Metrics + * to convert the advance to device subpixels (i.e., 1/64th of pixels). + */ + FT_EXPORT( FT_Error ) + FT_Get_PFR_Advance( FT_Face face, + FT_UInt gindex, + FT_Pos *aadvance ); + + /* */ + + +FT_END_HEADER + +#endif /* FTPFR_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftrender.h b/win32/include/freetype/freetype/ftrender.h new file mode 100644 index 00000000..a01c7742 --- /dev/null +++ b/win32/include/freetype/freetype/ftrender.h @@ -0,0 +1,245 @@ +/**************************************************************************** + * + * ftrender.h + * + * FreeType renderer modules public interface (specification). + * + * Copyright (C) 1996-2019 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 FTRENDER_H_ +#define FTRENDER_H_ + + +#include <ft2build.h> +#include FT_MODULE_H +#include FT_GLYPH_H + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * module_management + * + */ + + + /* create a new glyph object */ + typedef FT_Error + (*FT_Glyph_InitFunc)( FT_Glyph glyph, + FT_GlyphSlot slot ); + + /* destroys a given glyph object */ + typedef void + (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); + + typedef void + (*FT_Glyph_TransformFunc)( FT_Glyph glyph, + const FT_Matrix* matrix, + const FT_Vector* delta ); + + typedef void + (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, + FT_BBox* abbox ); + + typedef FT_Error + (*FT_Glyph_CopyFunc)( FT_Glyph source, + FT_Glyph target ); + + typedef FT_Error + (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, + FT_GlyphSlot slot ); + +/* deprecated */ +#define FT_Glyph_Init_Func FT_Glyph_InitFunc +#define FT_Glyph_Done_Func FT_Glyph_DoneFunc +#define FT_Glyph_Transform_Func FT_Glyph_TransformFunc +#define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc +#define FT_Glyph_Copy_Func FT_Glyph_CopyFunc +#define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc + + + struct FT_Glyph_Class_ + { + FT_Long glyph_size; + FT_Glyph_Format glyph_format; + + FT_Glyph_InitFunc glyph_init; + FT_Glyph_DoneFunc glyph_done; + FT_Glyph_CopyFunc glyph_copy; + FT_Glyph_TransformFunc glyph_transform; + FT_Glyph_GetBBoxFunc glyph_bbox; + FT_Glyph_PrepareFunc glyph_prepare; + }; + + + typedef FT_Error + (*FT_Renderer_RenderFunc)( FT_Renderer renderer, + FT_GlyphSlot slot, + FT_Render_Mode mode, + const FT_Vector* origin ); + + typedef FT_Error + (*FT_Renderer_TransformFunc)( FT_Renderer renderer, + FT_GlyphSlot slot, + const FT_Matrix* matrix, + const FT_Vector* delta ); + + + typedef void + (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer, + FT_GlyphSlot slot, + FT_BBox* cbox ); + + + typedef FT_Error + (*FT_Renderer_SetModeFunc)( FT_Renderer renderer, + FT_ULong mode_tag, + FT_Pointer mode_ptr ); + +/* deprecated identifiers */ +#define FTRenderer_render FT_Renderer_RenderFunc +#define FTRenderer_transform FT_Renderer_TransformFunc +#define FTRenderer_getCBox FT_Renderer_GetCBoxFunc +#define FTRenderer_setMode FT_Renderer_SetModeFunc + + + /************************************************************************** + * + * @struct: + * FT_Renderer_Class + * + * @description: + * The renderer module class descriptor. + * + * @fields: + * root :: + * The root @FT_Module_Class fields. + * + * glyph_format :: + * The glyph image format this renderer handles. + * + * render_glyph :: + * A method used to render the image that is in a given glyph slot into + * a bitmap. + * + * transform_glyph :: + * A method used to transform the image that is in a given glyph slot. + * + * get_glyph_cbox :: + * A method used to access the glyph's cbox. + * + * set_mode :: + * A method used to pass additional parameters. + * + * raster_class :: + * For @FT_GLYPH_FORMAT_OUTLINE renderers only. This is a pointer to + * its raster's class. + */ + typedef struct FT_Renderer_Class_ + { + FT_Module_Class root; + + FT_Glyph_Format glyph_format; + + FT_Renderer_RenderFunc render_glyph; + FT_Renderer_TransformFunc transform_glyph; + FT_Renderer_GetCBoxFunc get_glyph_cbox; + FT_Renderer_SetModeFunc set_mode; + + FT_Raster_Funcs* raster_class; + + } FT_Renderer_Class; + + + /************************************************************************** + * + * @function: + * FT_Get_Renderer + * + * @description: + * Retrieve the current renderer for a given glyph format. + * + * @input: + * library :: + * A handle to the library object. + * + * format :: + * The glyph format. + * + * @return: + * A renderer handle. 0~if none found. + * + * @note: + * An error will be returned if a module already exists by that name, or + * if the module requires a version of FreeType that is too great. + * + * To add a new renderer, simply use @FT_Add_Module. To retrieve a + * renderer by its name, use @FT_Get_Module. + */ + FT_EXPORT( FT_Renderer ) + FT_Get_Renderer( FT_Library library, + FT_Glyph_Format format ); + + + /************************************************************************** + * + * @function: + * FT_Set_Renderer + * + * @description: + * Set the current renderer to use, and set additional mode. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * renderer :: + * A handle to the renderer object. + * + * num_params :: + * The number of additional parameters. + * + * parameters :: + * Additional parameters. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * In case of success, the renderer will be used to convert glyph images + * in the renderer's known format into bitmaps. + * + * This doesn't change the current renderer for other formats. + * + * Currently, no FreeType renderer module uses `parameters`; you should + * thus always pass `NULL` as the value. + */ + FT_EXPORT( FT_Error ) + FT_Set_Renderer( FT_Library library, + FT_Renderer renderer, + FT_UInt num_params, + FT_Parameter* parameters ); + + /* */ + + +FT_END_HEADER + +#endif /* FTRENDER_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftsizes.h b/win32/include/freetype/freetype/ftsizes.h new file mode 100644 index 00000000..6c63cef2 --- /dev/null +++ b/win32/include/freetype/freetype/ftsizes.h @@ -0,0 +1,160 @@ +/**************************************************************************** + * + * ftsizes.h + * + * FreeType size objects management (specification). + * + * Copyright (C) 1996-2019 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. + * + */ + + + /************************************************************************** + * + * Typical application would normally not need to use these functions. + * However, they have been placed in a public API for the rare cases where + * they are needed. + * + */ + + +#ifndef FTSIZES_H_ +#define FTSIZES_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * sizes_management + * + * @title: + * Size Management + * + * @abstract: + * Managing multiple sizes per face. + * + * @description: + * When creating a new face object (e.g., with @FT_New_Face), an @FT_Size + * object is automatically created and used to store all pixel-size + * dependent information, available in the `face->size` field. + * + * It is however possible to create more sizes for a given face, mostly + * in order to manage several character pixel sizes of the same font + * family and style. See @FT_New_Size and @FT_Done_Size. + * + * Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only modify the + * contents of the current 'active' size; you thus need to use + * @FT_Activate_Size to change it. + * + * 99% of applications won't need the functions provided here, especially + * if they use the caching sub-system, so be cautious when using these. + * + */ + + + /************************************************************************** + * + * @function: + * FT_New_Size + * + * @description: + * Create a new size object from a given face object. + * + * @input: + * face :: + * A handle to a parent face object. + * + * @output: + * asize :: + * A handle to a new size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You need to call @FT_Activate_Size in order to select the new size for + * upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, + * @FT_Load_Glyph, @FT_Load_Char, etc. + */ + FT_EXPORT( FT_Error ) + FT_New_Size( FT_Face face, + FT_Size* size ); + + + /************************************************************************** + * + * @function: + * FT_Done_Size + * + * @description: + * Discard a given size object. Note that @FT_Done_Face automatically + * discards all size objects allocated with @FT_New_Size. + * + * @input: + * size :: + * A handle to a target size object. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Done_Size( FT_Size size ); + + + /************************************************************************** + * + * @function: + * FT_Activate_Size + * + * @description: + * Even though it is possible to create several size objects for a given + * face (see @FT_New_Size for details), functions like @FT_Load_Glyph or + * @FT_Load_Char only use the one that has been activated last to + * determine the 'current character pixel size'. + * + * This function can be used to 'activate' a previously created size + * object. + * + * @input: + * size :: + * A handle to a target size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `face` is the size's parent face object, this function changes the + * value of `face->size` to the input size handle. + */ + FT_EXPORT( FT_Error ) + FT_Activate_Size( FT_Size size ); + + /* */ + + +FT_END_HEADER + +#endif /* FTSIZES_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftsnames.h b/win32/include/freetype/freetype/ftsnames.h new file mode 100644 index 00000000..4d43602a --- /dev/null +++ b/win32/include/freetype/freetype/ftsnames.h @@ -0,0 +1,273 @@ +/**************************************************************************** + * + * ftsnames.h + * + * Simple interface to access SFNT 'name' tables (which are used + * to hold font names, copyright info, notices, etc.) (specification). + * + * This is _not_ used to retrieve glyph names! + * + * Copyright (C) 1996-2019 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 FTSNAMES_H_ +#define FTSNAMES_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H +#include FT_PARAMETER_TAGS_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * sfnt_names + * + * @title: + * SFNT Names + * + * @abstract: + * Access the names embedded in TrueType and OpenType files. + * + * @description: + * The TrueType and OpenType specifications allow the inclusion of a + * special names table ('name') in font files. This table contains + * textual (and internationalized) information regarding the font, like + * family name, copyright, version, etc. + * + * The definitions below are used to access them if available. + * + * Note that this has nothing to do with glyph names! + * + */ + + + /************************************************************************** + * + * @struct: + * FT_SfntName + * + * @description: + * A structure used to model an SFNT 'name' table entry. + * + * @fields: + * platform_id :: + * The platform ID for `string`. See @TT_PLATFORM_XXX for possible + * values. + * + * encoding_id :: + * The encoding ID for `string`. See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, + * @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX for possible + * values. + * + * language_id :: + * The language ID for `string`. See @TT_MAC_LANGID_XXX and + * @TT_MS_LANGID_XXX for possible values. + * + * Registered OpenType values for `language_id` are always smaller than + * 0x8000; values equal or larger than 0x8000 usually indicate a + * language tag string (introduced in OpenType version 1.6). Use + * function @FT_Get_Sfnt_LangTag with `language_id` as its argument to + * retrieve the associated language tag. + * + * name_id :: + * An identifier for `string`. See @TT_NAME_ID_XXX for possible + * values. + * + * string :: + * The 'name' string. Note that its format differs depending on the + * (platform,encoding) pair, being either a string of bytes (without a + * terminating `NULL` byte) or containing UTF-16BE entities. + * + * string_len :: + * The length of `string` in bytes. + * + * @note: + * Please refer to the TrueType or OpenType specification for more + * details. + */ + typedef struct FT_SfntName_ + { + FT_UShort platform_id; + FT_UShort encoding_id; + FT_UShort language_id; + FT_UShort name_id; + + FT_Byte* string; /* this string is *not* null-terminated! */ + FT_UInt string_len; /* in bytes */ + + } FT_SfntName; + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Name_Count + * + * @description: + * Retrieve the number of name strings in the SFNT 'name' table. + * + * @input: + * face :: + * A handle to the source face. + * + * @return: + * The number of strings in the 'name' table. + * + * @note: + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ + FT_EXPORT( FT_UInt ) + FT_Get_Sfnt_Name_Count( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Name + * + * @description: + * Retrieve a string of the SFNT 'name' table for a given index. + * + * @input: + * face :: + * A handle to the source face. + * + * idx :: + * The index of the 'name' string. + * + * @output: + * aname :: + * The indexed @FT_SfntName structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `string` array returned in the `aname` structure is not + * null-terminated. Note that you don't have to deallocate `string` by + * yourself; FreeType takes care of it if you call @FT_Done_Face. + * + * Use @FT_Get_Sfnt_Name_Count to get the total number of available + * 'name' table entries, then do a loop until you get the right platform, + * encoding, and name ID. + * + * 'name' table format~1 entries can use language tags also, see + * @FT_Get_Sfnt_LangTag. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ + FT_EXPORT( FT_Error ) + FT_Get_Sfnt_Name( FT_Face face, + FT_UInt idx, + FT_SfntName *aname ); + + + /************************************************************************** + * + * @struct: + * FT_SfntLangTag + * + * @description: + * A structure to model a language tag entry from an SFNT 'name' table. + * + * @fields: + * string :: + * The language tag string, encoded in UTF-16BE (without trailing + * `NULL` bytes). + * + * string_len :: + * The length of `string` in **bytes**. + * + * @note: + * Please refer to the TrueType or OpenType specification for more + * details. + * + * @since: + * 2.8 + */ + typedef struct FT_SfntLangTag_ + { + FT_Byte* string; /* this string is *not* null-terminated! */ + FT_UInt string_len; /* in bytes */ + + } FT_SfntLangTag; + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_LangTag + * + * @description: + * Retrieve the language tag associated with a language ID of an SFNT + * 'name' table entry. + * + * @input: + * face :: + * A handle to the source face. + * + * langID :: + * The language ID, as returned by @FT_Get_Sfnt_Name. This is always a + * value larger than 0x8000. + * + * @output: + * alangTag :: + * The language tag associated with the 'name' table entry's language + * ID. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `string` array returned in the `alangTag` structure is not + * null-terminated. Note that you don't have to deallocate `string` by + * yourself; FreeType takes care of it if you call @FT_Done_Face. + * + * Only 'name' table format~1 supports language tags. For format~0 + * tables, this function always returns FT_Err_Invalid_Table. For + * invalid format~1 language ID values, FT_Err_Invalid_Argument is + * returned. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + * + * @since: + * 2.8 + */ + FT_EXPORT( FT_Error ) + FT_Get_Sfnt_LangTag( FT_Face face, + FT_UInt langID, + FT_SfntLangTag *alangTag ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTSNAMES_H_ */ + + +/* END */ diff --git a/win32/include/freetype/ftstroke.h b/win32/include/freetype/freetype/ftstroke.h similarity index 62% rename from win32/include/freetype/ftstroke.h rename to win32/include/freetype/freetype/ftstroke.h index 7ebb1e74..01a9c181 100644 --- a/win32/include/freetype/ftstroke.h +++ b/win32/include/freetype/freetype/ftstroke.h @@ -1,23 +1,23 @@ -/***************************************************************************/ -/* */ -/* ftstroke.h */ -/* */ -/* FreeType path stroker (specification). */ -/* */ -/* Copyright 2002-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftstroke.h + * + * FreeType path stroker (specification). + * + * Copyright (C) 2002-2019 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 __FT_STROKE_H__ -#define __FT_STROKE_H__ +#ifndef FTSTROKE_H_ +#define FTSTROKE_H_ #include <ft2build.h> #include FT_OUTLINE_H @@ -27,116 +27,113 @@ FT_BEGIN_HEADER - /************************************************************************ - * - * @section: - * glyph_stroker - * - * @title: - * Glyph Stroker - * - * @abstract: - * Generating bordered and stroked glyphs. - * - * @description: - * This component generates stroked outlines of a given vectorial - * glyph. It also allows you to retrieve the `outside' and/or the - * `inside' borders of the stroke. - * - * This can be useful to generate `bordered' glyph, i.e., glyphs - * displayed with a coloured (and anti-aliased) border around their - * shape. - * - * @order: - * FT_Stroker - * - * FT_Stroker_LineJoin - * FT_Stroker_LineCap - * FT_StrokerBorder - * - * FT_Outline_GetInsideBorder - * FT_Outline_GetOutsideBorder - * - * FT_Glyph_Stroke - * FT_Glyph_StrokeBorder - * - * FT_Stroker_New - * FT_Stroker_Set - * FT_Stroker_Rewind - * FT_Stroker_ParseOutline - * FT_Stroker_Done - * - * FT_Stroker_BeginSubPath - * FT_Stroker_EndSubPath - * - * FT_Stroker_LineTo - * FT_Stroker_ConicTo - * FT_Stroker_CubicTo - * - * FT_Stroker_GetBorderCounts - * FT_Stroker_ExportBorder - * FT_Stroker_GetCounts - * FT_Stroker_Export - * - */ + /************************************************************************** + * + * @section: + * glyph_stroker + * + * @title: + * Glyph Stroker + * + * @abstract: + * Generating bordered and stroked glyphs. + * + * @description: + * This component generates stroked outlines of a given vectorial glyph. + * It also allows you to retrieve the 'outside' and/or the 'inside' + * borders of the stroke. + * + * This can be useful to generate 'bordered' glyph, i.e., glyphs + * displayed with a coloured (and anti-aliased) border around their + * shape. + * + * @order: + * FT_Stroker + * + * FT_Stroker_LineJoin + * FT_Stroker_LineCap + * FT_StrokerBorder + * + * FT_Outline_GetInsideBorder + * FT_Outline_GetOutsideBorder + * + * FT_Glyph_Stroke + * FT_Glyph_StrokeBorder + * + * FT_Stroker_New + * FT_Stroker_Set + * FT_Stroker_Rewind + * FT_Stroker_ParseOutline + * FT_Stroker_Done + * + * FT_Stroker_BeginSubPath + * FT_Stroker_EndSubPath + * + * FT_Stroker_LineTo + * FT_Stroker_ConicTo + * FT_Stroker_CubicTo + * + * FT_Stroker_GetBorderCounts + * FT_Stroker_ExportBorder + * FT_Stroker_GetCounts + * FT_Stroker_Export + * + */ - /************************************************************** - * - * @type: - * FT_Stroker - * - * @description: - * Opaque handle to a path stroker object. - */ + /************************************************************************** + * + * @type: + * FT_Stroker + * + * @description: + * Opaque handle to a path stroker object. + */ typedef struct FT_StrokerRec_* FT_Stroker; - /************************************************************** + /************************************************************************** * * @enum: * FT_Stroker_LineJoin * * @description: - * These values determine how two joining lines are rendered - * in a stroker. + * These values determine how two joining lines are rendered in a + * stroker. * * @values: * FT_STROKER_LINEJOIN_ROUND :: - * Used to render rounded line joins. Circular arcs are used - * to join two lines smoothly. + * Used to render rounded line joins. Circular arcs are used to join + * two lines smoothly. * * FT_STROKER_LINEJOIN_BEVEL :: - * Used to render beveled line joins. The outer corner of - * the joined lines is filled by enclosing the triangular - * region of the corner with a straight line between the - * outer corners of each stroke. + * Used to render beveled line joins. The outer corner of the joined + * lines is filled by enclosing the triangular region of the corner + * with a straight line between the outer corners of each stroke. * * FT_STROKER_LINEJOIN_MITER_FIXED :: - * Used to render mitered line joins, with fixed bevels if the - * miter limit is exceeded. The outer edges of the strokes - * for the two segments are extended until they meet at an - * angle. If the segments meet at too sharp an angle (such - * that the miter would extend from the intersection of the - * segments a distance greater than the product of the miter - * limit value and the border radius), then a bevel join (see - * above) is used instead. This prevents long spikes being - * created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter - * line join as used in PostScript and PDF. + * Used to render mitered line joins, with fixed bevels if the miter + * limit is exceeded. The outer edges of the strokes for the two + * segments are extended until they meet at an angle. If the segments + * meet at too sharp an angle (such that the miter would extend from + * the intersection of the segments a distance greater than the product + * of the miter limit value and the border radius), then a bevel join + * (see above) is used instead. This prevents long spikes being + * created. `FT_STROKER_LINEJOIN_MITER_FIXED` generates a miter line + * join as used in PostScript and PDF. * * FT_STROKER_LINEJOIN_MITER_VARIABLE :: * FT_STROKER_LINEJOIN_MITER :: - * Used to render mitered line joins, with variable bevels if - * the miter limit is exceeded. The intersection of the - * strokes is clipped at a line perpendicular to the bisector - * of the angle between the strokes, at the distance from the - * intersection of the segments equal to the product of the - * miter limit value and the border radius. This prevents - * long spikes being created. - * FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line - * join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias - * for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for - * backwards compatibility. + * Used to render mitered line joins, with variable bevels if the miter + * limit is exceeded. The intersection of the strokes is clipped at a + * line perpendicular to the bisector of the angle between the strokes, + * at the distance from the intersection of the segments equal to the + * product of the miter limit value and the border radius. This + * prevents long spikes being created. + * `FT_STROKER_LINEJOIN_MITER_VARIABLE` generates a mitered line join + * as used in XPS. `FT_STROKER_LINEJOIN_MITER` is an alias for + * `FT_STROKER_LINEJOIN_MITER_VARIABLE`, retained for backward + * compatibility. */ typedef enum FT_Stroker_LineJoin_ { @@ -149,27 +146,25 @@ FT_BEGIN_HEADER } FT_Stroker_LineJoin; - /************************************************************** + /************************************************************************** * * @enum: * FT_Stroker_LineCap * * @description: - * These values determine how the end of opened sub-paths are - * rendered in a stroke. + * These values determine how the end of opened sub-paths are rendered in + * a stroke. * * @values: * FT_STROKER_LINECAP_BUTT :: - * The end of lines is rendered as a full stop on the last - * point itself. + * The end of lines is rendered as a full stop on the last point + * itself. * * FT_STROKER_LINECAP_ROUND :: - * The end of lines is rendered as a half-circle around the - * last point. + * The end of lines is rendered as a half-circle around the last point. * * FT_STROKER_LINECAP_SQUARE :: - * The end of lines is rendered as a square around the - * last point. + * The end of lines is rendered as a square around the last point. */ typedef enum FT_Stroker_LineCap_ { @@ -180,14 +175,14 @@ FT_BEGIN_HEADER } FT_Stroker_LineCap; - /************************************************************** + /************************************************************************** * * @enum: * FT_StrokerBorder * * @description: - * These values are used to select a given stroke border - * in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. + * These values are used to select a given stroke border in + * @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. * * @values: * FT_STROKER_BORDER_LEFT :: @@ -197,9 +192,9 @@ FT_BEGIN_HEADER * Select the right border, relative to the drawing direction. * * @note: - * Applications are generally interested in the `inside' and `outside' + * Applications are generally interested in the 'inside' and 'outside' * borders. However, there is no direct mapping between these and the - * `left' and `right' ones, since this really depends on the glyph's + * 'left' and 'right' ones, since this really depends on the glyph's * drawing orientation, which varies between font formats. * * You can however use @FT_Outline_GetInsideBorder and @@ -213,14 +208,14 @@ FT_BEGIN_HEADER } FT_StrokerBorder; - /************************************************************** + /************************************************************************** * * @function: * FT_Outline_GetInsideBorder * * @description: - * Retrieve the @FT_StrokerBorder value corresponding to the - * `inside' borders of a given outline. + * Retrieve the @FT_StrokerBorder value corresponding to the 'inside' + * borders of a given outline. * * @input: * outline :: @@ -234,14 +229,14 @@ FT_BEGIN_HEADER FT_Outline_GetInsideBorder( FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Outline_GetOutsideBorder * * @description: - * Retrieve the @FT_StrokerBorder value corresponding to the - * `outside' borders of a given outline. + * Retrieve the @FT_StrokerBorder value corresponding to the 'outside' + * borders of a given outline. * * @input: * outline :: @@ -255,7 +250,7 @@ FT_BEGIN_HEADER FT_Outline_GetOutsideBorder( FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_New @@ -269,7 +264,7 @@ FT_BEGIN_HEADER * * @output: * astroker :: - * A new stroker object handle. NULL in case of error. + * A new stroker object handle. `NULL` in case of error. * * @return: * FreeType error code. 0~means success. @@ -279,7 +274,7 @@ FT_BEGIN_HEADER FT_Stroker *astroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Set @@ -301,13 +296,12 @@ FT_BEGIN_HEADER * The line join style. * * miter_limit :: - * The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and - * FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles, - * expressed as 16.16 fixed-point value. + * The miter limit for the `FT_STROKER_LINEJOIN_MITER_FIXED` and + * `FT_STROKER_LINEJOIN_MITER_VARIABLE` line join styles, expressed as + * 16.16 fixed-point value. * * @note: - * The radius is expressed in the same units as the outline - * coordinates. + * The radius is expressed in the same units as the outline coordinates. * * This function calls @FT_Stroker_Rewind automatically. */ @@ -319,16 +313,15 @@ FT_BEGIN_HEADER FT_Fixed miter_limit ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Rewind * * @description: - * Reset a stroker object without changing its attributes. - * You should call this function before beginning a new - * series of calls to @FT_Stroker_BeginSubPath or - * @FT_Stroker_EndSubPath. + * Reset a stroker object without changing its attributes. You should + * call this function before beginning a new series of calls to + * @FT_Stroker_BeginSubPath or @FT_Stroker_EndSubPath. * * @input: * stroker :: @@ -338,15 +331,15 @@ FT_BEGIN_HEADER FT_Stroker_Rewind( FT_Stroker stroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_ParseOutline * * @description: - * A convenience function used to parse a whole outline with - * the stroker. The resulting outline(s) can be retrieved - * later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export. + * A convenience function used to parse a whole outline with the stroker. + * The resulting outline(s) can be retrieved later by functions like + * @FT_Stroker_GetCounts and @FT_Stroker_Export. * * @input: * stroker :: @@ -356,18 +349,18 @@ FT_BEGIN_HEADER * The source outline. * * opened :: - * A boolean. If~1, the outline is treated as an open path instead - * of a closed one. + * A boolean. If~1, the outline is treated as an open path instead of + * a closed one. * * @return: * FreeType error code. 0~means success. * * @note: - * If `opened' is~0 (the default), the outline is treated as a closed - * path, and the stroker generates two distinct `border' outlines. + * If `opened` is~0 (the default), the outline is treated as a closed + * path, and the stroker generates two distinct 'border' outlines. * - * If `opened' is~1, the outline is processed as an open path, and the - * stroker generates a single `stroke' outline. + * If `opened` is~1, the outline is processed as an open path, and the + * stroker generates a single 'stroke' outline. * * This function calls @FT_Stroker_Rewind automatically. */ @@ -377,7 +370,7 @@ FT_BEGIN_HEADER FT_Bool opened ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_BeginSubPath @@ -399,8 +392,8 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * This function is useful when you need to stroke a path that is - * not stored as an @FT_Outline object. + * This function is useful when you need to stroke a path that is not + * stored as an @FT_Outline object. */ FT_EXPORT( FT_Error ) FT_Stroker_BeginSubPath( FT_Stroker stroker, @@ -408,7 +401,7 @@ FT_BEGIN_HEADER FT_Bool open ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_EndSubPath @@ -424,22 +417,22 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * You should call this function after @FT_Stroker_BeginSubPath. - * If the subpath was not `opened', this function `draws' a - * single line segment to the start position when needed. + * You should call this function after @FT_Stroker_BeginSubPath. If the + * subpath was not 'opened', this function 'draws' a single line segment + * to the start position when needed. */ FT_EXPORT( FT_Error ) FT_Stroker_EndSubPath( FT_Stroker stroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_LineTo * * @description: - * `Draw' a single line segment in the stroker's current sub-path, - * from the last position. + * 'Draw' a single line segment in the stroker's current sub-path, from + * the last position. * * @input: * stroker :: @@ -460,13 +453,13 @@ FT_BEGIN_HEADER FT_Vector* to ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_ConicTo * * @description: - * `Draw' a single quadratic Bézier in the stroker's current sub-path, + * 'Draw' a single quadratic Bezier in the stroker's current sub-path, * from the last position. * * @input: @@ -474,7 +467,7 @@ FT_BEGIN_HEADER * The target stroker handle. * * control :: - * A pointer to a Bézier control point. + * A pointer to a Bezier control point. * * to :: * A pointer to the destination point. @@ -492,24 +485,24 @@ FT_BEGIN_HEADER FT_Vector* to ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_CubicTo * * @description: - * `Draw' a single cubic Bézier in the stroker's current sub-path, - * from the last position. + * 'Draw' a single cubic Bezier in the stroker's current sub-path, from + * the last position. * * @input: * stroker :: * The target stroker handle. * * control1 :: - * A pointer to the first Bézier control point. + * A pointer to the first Bezier control point. * * control2 :: - * A pointer to second Bézier control point. + * A pointer to second Bezier control point. * * to :: * A pointer to the destination point. @@ -528,16 +521,16 @@ FT_BEGIN_HEADER FT_Vector* to ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_GetBorderCounts * * @description: - * Call this function once you have finished parsing your paths - * with the stroker. It returns the number of points and - * contours necessary to export one of the `border' or `stroke' - * outlines generated by the stroker. + * Call this function once you have finished parsing your paths with the + * stroker. It returns the number of points and contours necessary to + * export one of the 'border' or 'stroke' outlines generated by the + * stroker. * * @input: * stroker :: @@ -557,15 +550,15 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * When an outline, or a sub-path, is `closed', the stroker generates - * two independent `border' outlines, named `left' and `right'. + * When an outline, or a sub-path, is 'closed', the stroker generates two + * independent 'border' outlines, named 'left' and 'right'. * - * When the outline, or a sub-path, is `opened', the stroker merges - * the `border' outlines with caps. The `left' border receives all - * points, while the `right' border becomes empty. + * When the outline, or a sub-path, is 'opened', the stroker merges the + * 'border' outlines with caps. The 'left' border receives all points, + * while the 'right' border becomes empty. * - * Use the function @FT_Stroker_GetCounts instead if you want to - * retrieve the counts associated to both borders. + * Use the function @FT_Stroker_GetCounts instead if you want to retrieve + * the counts associated to both borders. */ FT_EXPORT( FT_Error ) FT_Stroker_GetBorderCounts( FT_Stroker stroker, @@ -574,19 +567,17 @@ FT_BEGIN_HEADER FT_UInt *anum_contours ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_ExportBorder * * @description: - * Call this function after @FT_Stroker_GetBorderCounts to - * export the corresponding border to your own @FT_Outline - * structure. + * Call this function after @FT_Stroker_GetBorderCounts to export the + * corresponding border to your own @FT_Outline structure. * - * Note that this function appends the border points and - * contours to your outline, but does not try to resize its - * arrays. + * Note that this function appends the border points and contours to your + * outline, but does not try to resize its arrays. * * @input: * stroker :: @@ -599,19 +590,19 @@ FT_BEGIN_HEADER * The target outline handle. * * @note: - * Always call this function after @FT_Stroker_GetBorderCounts to - * get sure that there is enough room in your @FT_Outline object to - * receive all new data. + * Always call this function after @FT_Stroker_GetBorderCounts to get + * sure that there is enough room in your @FT_Outline object to receive + * all new data. * - * When an outline, or a sub-path, is `closed', the stroker generates - * two independent `border' outlines, named `left' and `right'. + * When an outline, or a sub-path, is 'closed', the stroker generates two + * independent 'border' outlines, named 'left' and 'right'. * - * When the outline, or a sub-path, is `opened', the stroker merges - * the `border' outlines with caps. The `left' border receives all - * points, while the `right' border becomes empty. + * When the outline, or a sub-path, is 'opened', the stroker merges the + * 'border' outlines with caps. The 'left' border receives all points, + * while the 'right' border becomes empty. * - * Use the function @FT_Stroker_Export instead if you want to - * retrieve all borders at once. + * Use the function @FT_Stroker_Export instead if you want to retrieve + * all borders at once. */ FT_EXPORT( void ) FT_Stroker_ExportBorder( FT_Stroker stroker, @@ -619,16 +610,15 @@ FT_BEGIN_HEADER FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_GetCounts * * @description: - * Call this function once you have finished parsing your paths - * with the stroker. It returns the number of points and - * contours necessary to export all points/borders from the stroked - * outline/path. + * Call this function once you have finished parsing your paths with the + * stroker. It returns the number of points and contours necessary to + * export all points/borders from the stroked outline/path. * * @input: * stroker :: @@ -650,18 +640,17 @@ FT_BEGIN_HEADER FT_UInt *anum_contours ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Export * * @description: - * Call this function after @FT_Stroker_GetBorderCounts to - * export all borders to your own @FT_Outline structure. + * Call this function after @FT_Stroker_GetBorderCounts to export all + * borders to your own @FT_Outline structure. * - * Note that this function appends the border points and - * contours to your outline, but does not try to resize its - * arrays. + * Note that this function appends the border points and contours to your + * outline, but does not try to resize its arrays. * * @input: * stroker :: @@ -675,7 +664,7 @@ FT_BEGIN_HEADER FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Done @@ -685,13 +674,13 @@ FT_BEGIN_HEADER * * @input: * stroker :: - * A stroker handle. Can be NULL. + * A stroker handle. Can be `NULL`. */ FT_EXPORT( void ) FT_Stroker_Done( FT_Stroker stroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Glyph_Stroke @@ -708,8 +697,7 @@ FT_BEGIN_HEADER * A stroker handle. * * destroy :: - * A Boolean. If~1, the source glyph object is destroyed - * on success. + * A Boolean. If~1, the source glyph object is destroyed on success. * * @return: * FreeType error code. 0~means success. @@ -719,8 +707,8 @@ FT_BEGIN_HEADER * * Adding stroke may yield a significantly wider and taller glyph * depending on how large of a radius was used to stroke the glyph. You - * may need to manually adjust horizontal and vertical advance amounts - * to account for this added size. + * may need to manually adjust horizontal and vertical advance amounts to + * account for this added size. */ FT_EXPORT( FT_Error ) FT_Glyph_Stroke( FT_Glyph *pglyph, @@ -728,14 +716,14 @@ FT_BEGIN_HEADER FT_Bool destroy ); - /************************************************************** + /************************************************************************** * * @function: * FT_Glyph_StrokeBorder * * @description: - * Stroke a given outline glyph object with a given stroker, but - * only return either its inside or outside border. + * Stroke a given outline glyph object with a given stroker, but only + * return either its inside or outside border. * * @inout: * pglyph :: @@ -746,12 +734,11 @@ FT_BEGIN_HEADER * A stroker handle. * * inside :: - * A Boolean. If~1, return the inside border, otherwise - * the outside border. + * A Boolean. If~1, return the inside border, otherwise the outside + * border. * * destroy :: - * A Boolean. If~1, the source glyph object is destroyed - * on success. + * A Boolean. If~1, the source glyph object is destroyed on success. * * @return: * FreeType error code. 0~means success. @@ -761,8 +748,8 @@ FT_BEGIN_HEADER * * Adding stroke may yield a significantly wider and taller glyph * depending on how large of a radius was used to stroke the glyph. You - * may need to manually adjust horizontal and vertical advance amounts - * to account for this added size. + * may need to manually adjust horizontal and vertical advance amounts to + * account for this added size. */ FT_EXPORT( FT_Error ) FT_Glyph_StrokeBorder( FT_Glyph *pglyph, @@ -774,7 +761,7 @@ FT_BEGIN_HEADER FT_END_HEADER -#endif /* __FT_STROKE_H__ */ +#endif /* FTSTROKE_H_ */ /* END */ diff --git a/win32/include/freetype/ftsynth.h b/win32/include/freetype/freetype/ftsynth.h similarity index 64% rename from win32/include/freetype/ftsynth.h rename to win32/include/freetype/freetype/ftsynth.h index fbcbad87..8754f97c 100644 --- a/win32/include/freetype/ftsynth.h +++ b/win32/include/freetype/freetype/ftsynth.h @@ -1,20 +1,20 @@ -/***************************************************************************/ -/* */ -/* ftsynth.h */ -/* */ -/* FreeType synthesizing code for emboldening and slanting */ -/* (specification). */ -/* */ -/* Copyright 2000-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftsynth.h + * + * FreeType synthesizing code for emboldening and slanting + * (specification). + * + * Copyright (C) 2000-2019 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. + * + */ /*************************************************************************/ @@ -35,14 +35,14 @@ /* Main reason for not lifting the functions in this module to a */ - /* `standard' API is that the used parameters for emboldening and */ + /* 'standard' API is that the used parameters for emboldening and */ /* slanting are not configurable. Consider the functions as a */ /* code resource that should be copied into the application and */ /* adapted to the particular needs. */ -#ifndef __FTSYNTH_H__ -#define __FTSYNTH_H__ +#ifndef FTSYNTH_H_ +#define FTSYNTH_H_ #include <ft2build.h> @@ -57,7 +57,7 @@ FT_BEGIN_HEADER - /* Embolden a glyph by a `reasonable' value (which is highly a matter of */ + /* Embolden a glyph by a 'reasonable' value (which is highly a matter of */ /* taste). This function is actually a convenience function, providing */ /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */ /* */ @@ -78,7 +78,7 @@ FT_BEGIN_HEADER FT_END_HEADER -#endif /* __FTSYNTH_H__ */ +#endif /* FTSYNTH_H_ */ /* END */ diff --git a/win32/include/freetype/ftsystem.h b/win32/include/freetype/freetype/ftsystem.h similarity index 63% rename from win32/include/freetype/ftsystem.h rename to win32/include/freetype/freetype/ftsystem.h index 2bc99991..889a6ba1 100644 --- a/win32/include/freetype/ftsystem.h +++ b/win32/include/freetype/freetype/ftsystem.h @@ -1,23 +1,23 @@ -/***************************************************************************/ -/* */ -/* ftsystem.h */ -/* */ -/* FreeType low-level system interface definition (specification). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftsystem.h + * + * FreeType low-level system interface definition (specification). + * + * Copyright (C) 1996-2019 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 __FTSYSTEM_H__ -#define __FTSYSTEM_H__ +#ifndef FTSYSTEM_H_ +#define FTSYSTEM_H_ #include <ft2build.h> @@ -26,34 +26,33 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* system_interface */ - /* */ - /* <Title> */ - /* System Interface */ - /* */ - /* <Abstract> */ - /* How FreeType manages memory and i/o. */ - /* */ - /* <Description> */ - /* This section contains various definitions related to memory */ - /* management and i/o access. You need to understand this */ - /* information if you want to use a custom memory manager or you own */ - /* i/o streams. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * system_interface + * + * @title: + * System Interface + * + * @abstract: + * How FreeType manages memory and i/o. + * + * @description: + * This section contains various definitions related to memory management + * and i/o access. You need to understand this information if you want to + * use a custom memory manager or you own i/o streams. + * + */ - /*************************************************************************/ - /* */ - /* M E M O R Y M A N A G E M E N T */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * M E M O R Y M A N A G E M E N T + * + */ - /************************************************************************* + /************************************************************************** * * @type: * FT_Memory @@ -66,13 +65,13 @@ FT_BEGIN_HEADER typedef struct FT_MemoryRec_* FT_Memory; - /************************************************************************* + /************************************************************************** * * @functype: * FT_Alloc_Func * * @description: - * A function used to allocate `size' bytes from `memory'. + * A function used to allocate `size` bytes from `memory`. * * @input: * memory :: @@ -90,7 +89,7 @@ FT_BEGIN_HEADER long size ); - /************************************************************************* + /************************************************************************** * * @functype: * FT_Free_Func @@ -111,7 +110,7 @@ FT_BEGIN_HEADER void* block ); - /************************************************************************* + /************************************************************************** * * @functype: * FT_Realloc_Func @@ -146,7 +145,7 @@ FT_BEGIN_HEADER void* block ); - /************************************************************************* + /************************************************************************** * * @struct: * FT_MemoryRec @@ -177,14 +176,14 @@ FT_BEGIN_HEADER }; - /*************************************************************************/ - /* */ - /* I / O M A N A G E M E N T */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * I / O M A N A G E M E N T + * + */ - /************************************************************************* + /************************************************************************** * * @type: * FT_Stream @@ -193,21 +192,21 @@ FT_BEGIN_HEADER * A handle to an input stream. * * @also: - * See @FT_StreamRec for the publicly accessible fields of a given - * stream object. + * See @FT_StreamRec for the publicly accessible fields of a given stream + * object. * */ typedef struct FT_StreamRec_* FT_Stream; - /************************************************************************* + /************************************************************************** * * @struct: * FT_StreamDesc * * @description: * A union type used to store either a long or a pointer. This is used - * to store a file descriptor or a `FILE*' in an input stream. + * to store a file descriptor or a `FILE*` in an input stream. * */ typedef union FT_StreamDesc_ @@ -218,7 +217,7 @@ FT_BEGIN_HEADER } FT_StreamDesc; - /************************************************************************* + /************************************************************************** * * @functype: * FT_Stream_IoFunc @@ -243,9 +242,8 @@ FT_BEGIN_HEADER * The number of bytes effectively read by the stream. * * @note: - * This function might be called to perform a seek or skip operation - * with a `count' of~0. A non-zero return value then indicates an - * error. + * This function might be called to perform a seek or skip operation with + * a `count` of~0. A non-zero return value then indicates an error. * */ typedef unsigned long @@ -255,7 +253,7 @@ FT_BEGIN_HEADER unsigned long count ); - /************************************************************************* + /************************************************************************** * * @functype: * FT_Stream_CloseFunc @@ -265,14 +263,14 @@ FT_BEGIN_HEADER * * @input: * stream :: - * A handle to the target stream. + * A handle to the target stream. * */ typedef void (*FT_Stream_CloseFunc)( FT_Stream stream ); - /************************************************************************* + /************************************************************************** * * @struct: * FT_StreamRec @@ -283,14 +281,14 @@ FT_BEGIN_HEADER * @input: * base :: * For memory-based streams, this is the address of the first stream - * byte in memory. This field should always be set to NULL for + * byte in memory. This field should always be set to `NULL` for * disk-based streams. * * size :: * The stream size in bytes. * * In case of compressed streams where the size is unknown before - * actually doing the decompression, the value is set to 0x7FFFFFFF. + * actually doing the decompression, the value is set to 0x7FFFFFFF. * (Note that this size value can occur for normal streams also; it is * thus just a hint.) * @@ -299,7 +297,7 @@ FT_BEGIN_HEADER * * descriptor :: * This field is a union that can hold an integer or a pointer. It is - * used by stream implementations to store file descriptors or `FILE*' + * used by stream implementations to store file descriptors or `FILE*` * pointers. * * pathname :: @@ -314,13 +312,13 @@ FT_BEGIN_HEADER * The stream's close function. * * memory :: - * The memory manager to use to preload frames. This is set - * internally by FreeType and shouldn't be touched by stream - * implementations. + * The memory manager to use to preload frames. This is set internally + * by FreeType and shouldn't be touched by stream implementations. * * cursor :: * This field is set and used internally by FreeType when parsing - * frames. + * frames. In particular, the `FT_GET_XXX` macros use this instead of + * the `pos` field. * * limit :: * This field is set and used internally by FreeType when parsing @@ -349,7 +347,7 @@ FT_BEGIN_HEADER FT_END_HEADER -#endif /* __FTSYSTEM_H__ */ +#endif /* FTSYSTEM_H_ */ /* END */ diff --git a/win32/include/freetype/fttrigon.h b/win32/include/freetype/freetype/fttrigon.h similarity index 75% rename from win32/include/freetype/fttrigon.h rename to win32/include/freetype/freetype/fttrigon.h index 485ec515..37e1412f 100644 --- a/win32/include/freetype/fttrigon.h +++ b/win32/include/freetype/freetype/fttrigon.h @@ -1,23 +1,23 @@ -/***************************************************************************/ -/* */ -/* fttrigon.h */ -/* */ -/* FreeType trigonometric functions (specification). */ -/* */ -/* Copyright 2001-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * fttrigon.h + * + * FreeType trigonometric functions (specification). + * + * Copyright (C) 2001-2019 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 __FTTRIGON_H__ -#define __FTTRIGON_H__ +#ifndef FTTRIGON_H_ +#define FTTRIGON_H_ #include FT_FREETYPE_H @@ -31,15 +31,15 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * computations + * + */ - /************************************************************************* + /************************************************************************** * * @type: * FT_Angle @@ -52,7 +52,7 @@ FT_BEGIN_HEADER typedef FT_Fixed FT_Angle; - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_PI @@ -64,7 +64,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_PI ( 180L << 16 ) - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_2PI @@ -76,7 +76,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_PI2 @@ -88,7 +88,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_PI4 @@ -100,7 +100,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) - /************************************************************************* + /************************************************************************** * * @function: * FT_Sin @@ -124,7 +124,7 @@ FT_BEGIN_HEADER FT_Sin( FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Cos @@ -148,7 +148,7 @@ FT_BEGIN_HEADER FT_Cos( FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Tan @@ -168,14 +168,14 @@ FT_BEGIN_HEADER FT_Tan( FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Atan2 * * @description: - * Return the arc-tangent corresponding to a given vector (x,y) in - * the 2d plane. + * Return the arc-tangent corresponding to a given vector (x,y) in the 2d + * plane. * * @input: * x :: @@ -193,7 +193,7 @@ FT_BEGIN_HEADER FT_Fixed y ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Angle_Diff @@ -210,7 +210,7 @@ FT_BEGIN_HEADER * Second angle. * * @return: - * Constrained value of `value2-value1'. + * Constrained value of `angle2-angle1`. * */ FT_EXPORT( FT_Angle ) @@ -218,15 +218,15 @@ FT_BEGIN_HEADER FT_Angle angle2 ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Unit * * @description: * Return the unit vector corresponding to a given angle. After the - * call, the value of `vec.x' will be `cos(angle)', and the value of - * `vec.y' will be `sin(angle)'. + * call, the value of `vec.x` will be `cos(angle)`, and the value of + * `vec.y` will be `sin(angle)`. * * This function is useful to retrieve both the sinus and cosinus of a * given angle quickly. @@ -245,7 +245,7 @@ FT_BEGIN_HEADER FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Rotate @@ -267,7 +267,7 @@ FT_BEGIN_HEADER FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Length @@ -288,7 +288,7 @@ FT_BEGIN_HEADER FT_Vector_Length( FT_Vector* vec ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Polarize @@ -314,7 +314,7 @@ FT_BEGIN_HEADER FT_Angle *angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_From_Polar @@ -344,7 +344,7 @@ FT_BEGIN_HEADER FT_END_HEADER -#endif /* __FTTRIGON_H__ */ +#endif /* FTTRIGON_H_ */ /* END */ diff --git a/win32/include/freetype/freetype/fttypes.h b/win32/include/freetype/freetype/fttypes.h new file mode 100644 index 00000000..10571505 --- /dev/null +++ b/win32/include/freetype/freetype/fttypes.h @@ -0,0 +1,615 @@ +/**************************************************************************** + * + * fttypes.h + * + * FreeType simple types definitions (specification only). + * + * Copyright (C) 1996-2019 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 FTTYPES_H_ +#define FTTYPES_H_ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include FT_SYSTEM_H +#include FT_IMAGE_H + +#include <stddef.h> + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * basic_types + * + * @title: + * Basic Data Types + * + * @abstract: + * The basic data types defined by the library. + * + * @description: + * This section contains the basic data types defined by FreeType~2, + * ranging from simple scalar types to bitmap descriptors. More + * font-specific structures are defined in a different section. + * + * @order: + * FT_Byte + * FT_Bytes + * FT_Char + * FT_Int + * FT_UInt + * FT_Int16 + * FT_UInt16 + * FT_Int32 + * FT_UInt32 + * FT_Int64 + * FT_UInt64 + * FT_Short + * FT_UShort + * FT_Long + * FT_ULong + * FT_Bool + * FT_Offset + * FT_PtrDist + * FT_String + * FT_Tag + * FT_Error + * FT_Fixed + * FT_Pointer + * FT_Pos + * FT_Vector + * FT_BBox + * FT_Matrix + * FT_FWord + * FT_UFWord + * FT_F2Dot14 + * FT_UnitVector + * FT_F26Dot6 + * FT_Data + * + * FT_MAKE_TAG + * + * FT_Generic + * FT_Generic_Finalizer + * + * FT_Bitmap + * FT_Pixel_Mode + * FT_Palette_Mode + * FT_Glyph_Format + * FT_IMAGE_TAG + * + */ + + + /************************************************************************** + * + * @type: + * FT_Bool + * + * @description: + * A typedef of unsigned char, used for simple booleans. As usual, + * values 1 and~0 represent true and false, respectively. + */ + typedef unsigned char FT_Bool; + + + /************************************************************************** + * + * @type: + * FT_FWord + * + * @description: + * A signed 16-bit integer used to store a distance in original font + * units. + */ + typedef signed short FT_FWord; /* distance in FUnits */ + + + /************************************************************************** + * + * @type: + * FT_UFWord + * + * @description: + * An unsigned 16-bit integer used to store a distance in original font + * units. + */ + typedef unsigned short FT_UFWord; /* unsigned distance */ + + + /************************************************************************** + * + * @type: + * FT_Char + * + * @description: + * A simple typedef for the _signed_ char type. + */ + typedef signed char FT_Char; + + + /************************************************************************** + * + * @type: + * FT_Byte + * + * @description: + * A simple typedef for the _unsigned_ char type. + */ + typedef unsigned char FT_Byte; + + + /************************************************************************** + * + * @type: + * FT_Bytes + * + * @description: + * A typedef for constant memory areas. + */ + typedef const FT_Byte* FT_Bytes; + + + /************************************************************************** + * + * @type: + * FT_Tag + * + * @description: + * A typedef for 32-bit tags (as used in the SFNT format). + */ + typedef FT_UInt32 FT_Tag; + + + /************************************************************************** + * + * @type: + * FT_String + * + * @description: + * A simple typedef for the char type, usually used for strings. + */ + typedef char FT_String; + + + /************************************************************************** + * + * @type: + * FT_Short + * + * @description: + * A typedef for signed short. + */ + typedef signed short FT_Short; + + + /************************************************************************** + * + * @type: + * FT_UShort + * + * @description: + * A typedef for unsigned short. + */ + typedef unsigned short FT_UShort; + + + /************************************************************************** + * + * @type: + * FT_Int + * + * @description: + * A typedef for the int type. + */ + typedef signed int FT_Int; + + + /************************************************************************** + * + * @type: + * FT_UInt + * + * @description: + * A typedef for the unsigned int type. + */ + typedef unsigned int FT_UInt; + + + /************************************************************************** + * + * @type: + * FT_Long + * + * @description: + * A typedef for signed long. + */ + typedef signed long FT_Long; + + + /************************************************************************** + * + * @type: + * FT_ULong + * + * @description: + * A typedef for unsigned long. + */ + typedef unsigned long FT_ULong; + + + /************************************************************************** + * + * @type: + * FT_F2Dot14 + * + * @description: + * A signed 2.14 fixed-point type used for unit vectors. + */ + typedef signed short FT_F2Dot14; + + + /************************************************************************** + * + * @type: + * FT_F26Dot6 + * + * @description: + * A signed 26.6 fixed-point type used for vectorial pixel coordinates. + */ + typedef signed long FT_F26Dot6; + + + /************************************************************************** + * + * @type: + * FT_Fixed + * + * @description: + * This type is used to store 16.16 fixed-point values, like scaling + * values or matrix coefficients. + */ + typedef signed long FT_Fixed; + + + /************************************************************************** + * + * @type: + * FT_Error + * + * @description: + * The FreeType error code type. A value of~0 is always interpreted as a + * successful operation. + */ + typedef int FT_Error; + + + /************************************************************************** + * + * @type: + * FT_Pointer + * + * @description: + * A simple typedef for a typeless pointer. + */ + typedef void* FT_Pointer; + + + /************************************************************************** + * + * @type: + * FT_Offset + * + * @description: + * This is equivalent to the ANSI~C `size_t` type, i.e., the largest + * _unsigned_ integer type used to express a file size or position, or a + * memory block size. + */ + typedef size_t FT_Offset; + + + /************************************************************************** + * + * @type: + * FT_PtrDist + * + * @description: + * This is equivalent to the ANSI~C `ptrdiff_t` type, i.e., the largest + * _signed_ integer type used to express the distance between two + * pointers. + */ + typedef ft_ptrdiff_t FT_PtrDist; + + + /************************************************************************** + * + * @struct: + * FT_UnitVector + * + * @description: + * A simple structure used to store a 2D vector unit vector. Uses + * FT_F2Dot14 types. + * + * @fields: + * x :: + * Horizontal coordinate. + * + * y :: + * Vertical coordinate. + */ + typedef struct FT_UnitVector_ + { + FT_F2Dot14 x; + FT_F2Dot14 y; + + } FT_UnitVector; + + + /************************************************************************** + * + * @struct: + * FT_Matrix + * + * @description: + * A simple structure used to store a 2x2 matrix. Coefficients are in + * 16.16 fixed-point format. The computation performed is: + * + * ``` + * x' = x*xx + y*xy + * y' = x*yx + y*yy + * ``` + * + * @fields: + * xx :: + * Matrix coefficient. + * + * xy :: + * Matrix coefficient. + * + * yx :: + * Matrix coefficient. + * + * yy :: + * Matrix coefficient. + */ + typedef struct FT_Matrix_ + { + FT_Fixed xx, xy; + FT_Fixed yx, yy; + + } FT_Matrix; + + + /************************************************************************** + * + * @struct: + * FT_Data + * + * @description: + * Read-only binary data represented as a pointer and a length. + * + * @fields: + * pointer :: + * The data. + * + * length :: + * The length of the data in bytes. + */ + typedef struct FT_Data_ + { + const FT_Byte* pointer; + FT_Int length; + + } FT_Data; + + + /************************************************************************** + * + * @functype: + * FT_Generic_Finalizer + * + * @description: + * Describe a function used to destroy the 'client' data of any FreeType + * object. See the description of the @FT_Generic type for details of + * usage. + * + * @input: + * The address of the FreeType object that is under finalization. Its + * client data is accessed through its `generic` field. + */ + typedef void (*FT_Generic_Finalizer)( void* object ); + + + /************************************************************************** + * + * @struct: + * FT_Generic + * + * @description: + * Client applications often need to associate their own data to a + * variety of FreeType core objects. For example, a text layout API + * might want to associate a glyph cache to a given size object. + * + * Some FreeType object contains a `generic` field, of type `FT_Generic`, + * which usage is left to client applications and font servers. + * + * It can be used to store a pointer to client-specific data, as well as + * the address of a 'finalizer' function, which will be called by + * FreeType when the object is destroyed (for example, the previous + * client example would put the address of the glyph cache destructor in + * the `finalizer` field). + * + * @fields: + * data :: + * A typeless pointer to any client-specified data. This field is + * completely ignored by the FreeType library. + * + * finalizer :: + * A pointer to a 'generic finalizer' function, which will be called + * when the object is destroyed. If this field is set to `NULL`, no + * code will be called. + */ + typedef struct FT_Generic_ + { + void* data; + FT_Generic_Finalizer finalizer; + + } FT_Generic; + + + /************************************************************************** + * + * @macro: + * FT_MAKE_TAG + * + * @description: + * This macro converts four-letter tags that are used to label TrueType + * tables into an unsigned long, 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 ) + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* L I S T M A N A G E M E N T */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @section: + * list_processing + * + */ + + + /************************************************************************** + * + * @type: + * FT_ListNode + * + * @description: + * Many elements and objects in FreeType are listed through an @FT_List + * record (see @FT_ListRec). As its name suggests, an FT_ListNode is a + * handle to a single list element. + */ + typedef struct FT_ListNodeRec_* FT_ListNode; + + + /************************************************************************** + * + * @type: + * FT_List + * + * @description: + * A handle to a list record (see @FT_ListRec). + */ + typedef struct FT_ListRec_* FT_List; + + + /************************************************************************** + * + * @struct: + * FT_ListNodeRec + * + * @description: + * A structure used to hold a single list element. + * + * @fields: + * prev :: + * The previous element in the list. `NULL` if first. + * + * next :: + * The next element in the list. `NULL` if last. + * + * data :: + * A typeless pointer to the listed object. + */ + typedef struct FT_ListNodeRec_ + { + FT_ListNode prev; + FT_ListNode next; + void* data; + + } FT_ListNodeRec; + + + /************************************************************************** + * + * @struct: + * FT_ListRec + * + * @description: + * A structure used to hold a simple doubly-linked list. These are used + * in many parts of FreeType. + * + * @fields: + * head :: + * The head (first element) of doubly-linked list. + * + * tail :: + * The tail (last element) of doubly-linked list. + */ + typedef struct FT_ListRec_ + { + FT_ListNode head; + FT_ListNode tail; + + } FT_ListRec; + + /* */ + + +#define FT_IS_EMPTY( list ) ( (list).head == 0 ) +#define FT_BOOL( x ) ( (FT_Bool)( (x) != 0 ) ) + + /* concatenate C tokens */ +#define FT_ERR_XCAT( x, y ) x ## y +#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) + + /* see `ftmoderr.h` for descriptions of the following macros */ + +#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e ) + +#define FT_ERROR_BASE( x ) ( (x) & 0xFF ) +#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U ) + +#define FT_ERR_EQ( x, e ) \ + ( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) ) +#define FT_ERR_NEQ( x, e ) \ + ( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) ) + + +FT_END_HEADER + +#endif /* FTTYPES_H_ */ + + +/* END */ diff --git a/win32/include/freetype/freetype/ftwinfnt.h b/win32/include/freetype/freetype/ftwinfnt.h new file mode 100644 index 00000000..3437913d --- /dev/null +++ b/win32/include/freetype/freetype/ftwinfnt.h @@ -0,0 +1,277 @@ +/**************************************************************************** + * + * ftwinfnt.h + * + * FreeType API for accessing Windows fnt-specific data. + * + * Copyright (C) 2003-2019 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 FTWINFNT_H_ +#define FTWINFNT_H_ + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * winfnt_fonts + * + * @title: + * Window FNT Files + * + * @abstract: + * Windows FNT-specific API. + * + * @description: + * This section contains the declaration of Windows FNT-specific + * functions. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_WinFNT_ID_XXX + * + * @description: + * A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec. + * Exact mapping tables for the various 'cpXXXX' encodings (except for + * 'cp1361') can be found at 'ftp://ftp.unicode.org/Public' in the + * `MAPPINGS/VENDORS/MICSFT/WINDOWS` subdirectory. 'cp1361' is roughly a + * superset of `MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT`. + * + * @values: + * FT_WinFNT_ID_DEFAULT :: + * This is used for font enumeration and font creation as a 'don't + * care' value. Valid font files don't contain this value. When + * querying for information about the character set of the font that is + * currently selected into a specified device context, this return + * value (of the related Windows API) simply denotes failure. + * + * FT_WinFNT_ID_SYMBOL :: + * There is no known mapping table available. + * + * FT_WinFNT_ID_MAC :: + * Mac Roman encoding. + * + * FT_WinFNT_ID_OEM :: + * From Michael Poettgen <michael@poettgen.de>: + * + * The 'Windows Font Mapping' article says that `FT_WinFNT_ID_OEM` is + * used for the charset of vector fonts, like `modern.fon`, + * `roman.fon`, and `script.fon` on Windows. + * + * The 'CreateFont' documentation says: The `FT_WinFNT_ID_OEM` value + * specifies a character set that is operating-system dependent. + * + * The 'IFIMETRICS' documentation from the 'Windows Driver Development + * Kit' says: This font supports an OEM-specific character set. The + * OEM character set is system dependent. + * + * In general OEM, as opposed to ANSI (i.e., 'cp1252'), denotes the + * second default codepage that most international versions of Windows + * have. It is one of the OEM codepages from + * + * https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers + * , + * + * and is used for the 'DOS boxes', to support legacy applications. A + * German Windows version for example usually uses ANSI codepage 1252 + * and OEM codepage 850. + * + * FT_WinFNT_ID_CP874 :: + * A superset of Thai TIS 620 and ISO 8859-11. + * + * FT_WinFNT_ID_CP932 :: + * A superset of Japanese Shift-JIS (with minor deviations). + * + * FT_WinFNT_ID_CP936 :: + * A superset of simplified Chinese GB 2312-1980 (with different + * ordering and minor deviations). + * + * FT_WinFNT_ID_CP949 :: + * A superset of Korean Hangul KS~C 5601-1987 (with different ordering + * and minor deviations). + * + * FT_WinFNT_ID_CP950 :: + * A superset of traditional Chinese Big~5 ETen (with different + * ordering and minor deviations). + * + * FT_WinFNT_ID_CP1250 :: + * A superset of East European ISO 8859-2 (with slightly different + * ordering). + * + * FT_WinFNT_ID_CP1251 :: + * A superset of Russian ISO 8859-5 (with different ordering). + * + * FT_WinFNT_ID_CP1252 :: + * ANSI encoding. A superset of ISO 8859-1. + * + * FT_WinFNT_ID_CP1253 :: + * A superset of Greek ISO 8859-7 (with minor modifications). + * + * FT_WinFNT_ID_CP1254 :: + * A superset of Turkish ISO 8859-9. + * + * FT_WinFNT_ID_CP1255 :: + * A superset of Hebrew ISO 8859-8 (with some modifications). + * + * FT_WinFNT_ID_CP1256 :: + * A superset of Arabic ISO 8859-6 (with different ordering). + * + * FT_WinFNT_ID_CP1257 :: + * A superset of Baltic ISO 8859-13 (with some deviations). + * + * FT_WinFNT_ID_CP1258 :: + * For Vietnamese. This encoding doesn't cover all necessary + * characters. + * + * FT_WinFNT_ID_CP1361 :: + * Korean (Johab). + */ + +#define FT_WinFNT_ID_CP1252 0 +#define FT_WinFNT_ID_DEFAULT 1 +#define FT_WinFNT_ID_SYMBOL 2 +#define FT_WinFNT_ID_MAC 77 +#define FT_WinFNT_ID_CP932 128 +#define FT_WinFNT_ID_CP949 129 +#define FT_WinFNT_ID_CP1361 130 +#define FT_WinFNT_ID_CP936 134 +#define FT_WinFNT_ID_CP950 136 +#define FT_WinFNT_ID_CP1253 161 +#define FT_WinFNT_ID_CP1254 162 +#define FT_WinFNT_ID_CP1258 163 +#define FT_WinFNT_ID_CP1255 177 +#define FT_WinFNT_ID_CP1256 178 +#define FT_WinFNT_ID_CP1257 186 +#define FT_WinFNT_ID_CP1251 204 +#define FT_WinFNT_ID_CP874 222 +#define FT_WinFNT_ID_CP1250 238 +#define FT_WinFNT_ID_OEM 255 + + + /************************************************************************** + * + * @struct: + * FT_WinFNT_HeaderRec + * + * @description: + * Windows FNT Header info. + */ + typedef struct FT_WinFNT_HeaderRec_ + { + FT_UShort version; + FT_ULong file_size; + FT_Byte copyright[60]; + FT_UShort file_type; + FT_UShort nominal_point_size; + FT_UShort vertical_resolution; + FT_UShort horizontal_resolution; + FT_UShort ascent; + FT_UShort internal_leading; + FT_UShort external_leading; + FT_Byte italic; + FT_Byte underline; + FT_Byte strike_out; + FT_UShort weight; + FT_Byte charset; + FT_UShort pixel_width; + FT_UShort pixel_height; + FT_Byte pitch_and_family; + FT_UShort avg_width; + FT_UShort max_width; + FT_Byte first_char; + FT_Byte last_char; + FT_Byte default_char; + FT_Byte break_char; + FT_UShort bytes_per_row; + FT_ULong device_offset; + FT_ULong face_name_offset; + FT_ULong bits_pointer; + FT_ULong bits_offset; + FT_Byte reserved; + FT_ULong flags; + FT_UShort A_space; + FT_UShort B_space; + FT_UShort C_space; + FT_UShort color_table_offset; + FT_ULong reserved1[4]; + + } FT_WinFNT_HeaderRec; + + + /************************************************************************** + * + * @struct: + * FT_WinFNT_Header + * + * @description: + * A handle to an @FT_WinFNT_HeaderRec structure. + */ + typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header; + + + /************************************************************************** + * + * @function: + * FT_Get_WinFNT_Header + * + * @description: + * Retrieve a Windows FNT font info header. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * aheader :: + * The WinFNT header. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with Windows FNT faces, returning an error + * otherwise. + */ + FT_EXPORT( FT_Error ) + FT_Get_WinFNT_Header( FT_Face face, + FT_WinFNT_HeaderRec *aheader ); + + /* */ + + +FT_END_HEADER + +#endif /* FTWINFNT_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/win32/include/freetype/freetype/t1tables.h b/win32/include/freetype/freetype/t1tables.h new file mode 100644 index 00000000..645e6457 --- /dev/null +++ b/win32/include/freetype/freetype/t1tables.h @@ -0,0 +1,774 @@ +/**************************************************************************** + * + * t1tables.h + * + * Basic Type 1/Type 2 tables definitions and interface (specification + * only). + * + * Copyright (C) 1996-2019 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 T1TABLES_H_ +#define T1TABLES_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * type1_tables + * + * @title: + * Type 1 Tables + * + * @abstract: + * Type~1-specific font tables. + * + * @description: + * This section contains the definition of Type~1-specific tables, + * including structures related to other PostScript font formats. + * + * @order: + * PS_FontInfoRec + * PS_FontInfo + * PS_PrivateRec + * PS_Private + * + * CID_FaceDictRec + * CID_FaceDict + * CID_FaceInfoRec + * CID_FaceInfo + * + * FT_Has_PS_Glyph_Names + * FT_Get_PS_Font_Info + * FT_Get_PS_Font_Private + * FT_Get_PS_Font_Value + * + * T1_Blend_Flags + * T1_EncodingType + * PS_Dict_Keys + * + */ + + + /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */ + /* structures in order to support Multiple Master fonts. */ + + + /************************************************************************** + * + * @struct: + * PS_FontInfoRec + * + * @description: + * A structure used to model a Type~1 or Type~2 FontInfo dictionary. + * Note that for Multiple Master fonts, each instance has its own + * FontInfo dictionary. + */ + typedef struct PS_FontInfoRec_ + { + FT_String* version; + FT_String* notice; + FT_String* full_name; + FT_String* family_name; + FT_String* weight; + FT_Long italic_angle; + FT_Bool is_fixed_pitch; + FT_Short underline_position; + FT_UShort underline_thickness; + + } PS_FontInfoRec; + + + /************************************************************************** + * + * @struct: + * PS_FontInfo + * + * @description: + * A handle to a @PS_FontInfoRec structure. + */ + typedef struct PS_FontInfoRec_* PS_FontInfo; + + + /************************************************************************** + * + * @struct: + * T1_FontInfo + * + * @description: + * This type is equivalent to @PS_FontInfoRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ + typedef PS_FontInfoRec T1_FontInfo; + + + /************************************************************************** + * + * @struct: + * PS_PrivateRec + * + * @description: + * A structure used to model a Type~1 or Type~2 private dictionary. Note + * that for Multiple Master fonts, each instance has its own Private + * dictionary. + */ + typedef struct PS_PrivateRec_ + { + FT_Int unique_id; + FT_Int lenIV; + + FT_Byte num_blue_values; + FT_Byte num_other_blues; + FT_Byte num_family_blues; + FT_Byte num_family_other_blues; + + FT_Short blue_values[14]; + FT_Short other_blues[10]; + + FT_Short family_blues [14]; + FT_Short family_other_blues[10]; + + FT_Fixed blue_scale; + FT_Int blue_shift; + FT_Int blue_fuzz; + + FT_UShort standard_width[1]; + FT_UShort standard_height[1]; + + FT_Byte num_snap_widths; + FT_Byte num_snap_heights; + FT_Bool force_bold; + FT_Bool round_stem_up; + + FT_Short snap_widths [13]; /* including std width */ + FT_Short snap_heights[13]; /* including std height */ + + FT_Fixed expansion_factor; + + FT_Long language_group; + FT_Long password; + + FT_Short min_feature[2]; + + } PS_PrivateRec; + + + /************************************************************************** + * + * @struct: + * PS_Private + * + * @description: + * A handle to a @PS_PrivateRec structure. + */ + typedef struct PS_PrivateRec_* PS_Private; + + + /************************************************************************** + * + * @struct: + * T1_Private + * + * @description: + * This type is equivalent to @PS_PrivateRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ + typedef PS_PrivateRec T1_Private; + + + /************************************************************************** + * + * @enum: + * T1_Blend_Flags + * + * @description: + * A set of flags used to indicate which fields are present in a given + * blend dictionary (font info or private). Used to support Multiple + * Masters fonts. + * + * @values: + * T1_BLEND_UNDERLINE_POSITION :: + * T1_BLEND_UNDERLINE_THICKNESS :: + * T1_BLEND_ITALIC_ANGLE :: + * T1_BLEND_BLUE_VALUES :: + * T1_BLEND_OTHER_BLUES :: + * T1_BLEND_STANDARD_WIDTH :: + * T1_BLEND_STANDARD_HEIGHT :: + * T1_BLEND_STEM_SNAP_WIDTHS :: + * T1_BLEND_STEM_SNAP_HEIGHTS :: + * T1_BLEND_BLUE_SCALE :: + * T1_BLEND_BLUE_SHIFT :: + * T1_BLEND_FAMILY_BLUES :: + * T1_BLEND_FAMILY_OTHER_BLUES :: + * T1_BLEND_FORCE_BOLD :: + */ + typedef enum T1_Blend_Flags_ + { + /* required fields in a FontInfo blend dictionary */ + T1_BLEND_UNDERLINE_POSITION = 0, + T1_BLEND_UNDERLINE_THICKNESS, + T1_BLEND_ITALIC_ANGLE, + + /* required fields in a Private blend dictionary */ + T1_BLEND_BLUE_VALUES, + T1_BLEND_OTHER_BLUES, + T1_BLEND_STANDARD_WIDTH, + T1_BLEND_STANDARD_HEIGHT, + T1_BLEND_STEM_SNAP_WIDTHS, + T1_BLEND_STEM_SNAP_HEIGHTS, + T1_BLEND_BLUE_SCALE, + T1_BLEND_BLUE_SHIFT, + T1_BLEND_FAMILY_BLUES, + T1_BLEND_FAMILY_OTHER_BLUES, + T1_BLEND_FORCE_BOLD, + + T1_BLEND_MAX /* do not remove */ + + } T1_Blend_Flags; + + + /* these constants are deprecated; use the corresponding */ + /* `T1_Blend_Flags` values instead */ +#define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION +#define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS +#define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE +#define t1_blend_blue_values T1_BLEND_BLUE_VALUES +#define t1_blend_other_blues T1_BLEND_OTHER_BLUES +#define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH +#define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT +#define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS +#define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS +#define t1_blend_blue_scale T1_BLEND_BLUE_SCALE +#define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT +#define t1_blend_family_blues T1_BLEND_FAMILY_BLUES +#define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES +#define t1_blend_force_bold T1_BLEND_FORCE_BOLD +#define t1_blend_max T1_BLEND_MAX + + /* */ + + + /* maximum number of Multiple Masters designs, as defined in the spec */ +#define T1_MAX_MM_DESIGNS 16 + + /* maximum number of Multiple Masters axes, as defined in the spec */ +#define T1_MAX_MM_AXIS 4 + + /* maximum number of elements in a design map */ +#define T1_MAX_MM_MAP_POINTS 20 + + + /* this structure is used to store the BlendDesignMap entry for an axis */ + typedef struct PS_DesignMap_ + { + FT_Byte num_points; + FT_Long* design_points; + FT_Fixed* blend_points; + + } PS_DesignMapRec, *PS_DesignMap; + + /* backward compatible definition */ + typedef PS_DesignMapRec T1_DesignMap; + + + typedef struct PS_BlendRec_ + { + FT_UInt num_designs; + FT_UInt num_axis; + + FT_String* axis_names[T1_MAX_MM_AXIS]; + FT_Fixed* design_pos[T1_MAX_MM_DESIGNS]; + PS_DesignMapRec design_map[T1_MAX_MM_AXIS]; + + FT_Fixed* weight_vector; + FT_Fixed* default_weight_vector; + + PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1]; + PS_Private privates [T1_MAX_MM_DESIGNS + 1]; + + FT_ULong blend_bitflags; + + FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1]; + + /* since 2.3.0 */ + + /* undocumented, optional: the default design instance; */ + /* corresponds to default_weight_vector -- */ + /* num_default_design_vector == 0 means it is not present */ + /* in the font and associated metrics files */ + FT_UInt default_design_vector[T1_MAX_MM_DESIGNS]; + FT_UInt num_default_design_vector; + + } PS_BlendRec, *PS_Blend; + + + /* backward compatible definition */ + typedef PS_BlendRec T1_Blend; + + + /************************************************************************** + * + * @struct: + * CID_FaceDictRec + * + * @description: + * A structure used to represent data in a CID top-level dictionary. In + * most cases, they are part of the font's '/FDArray' array. Within a + * CID font file, such (internal) subfont dictionaries are enclosed by + * '%ADOBeginFontDict' and '%ADOEndFontDict' comments. + * + * Note that `CID_FaceDictRec` misses a field for the '/FontName' + * keyword, specifying the subfont's name (the top-level font name is + * given by the '/CIDFontName' keyword). This is an oversight, but it + * doesn't limit the 'cid' font module's functionality because FreeType + * neither needs this entry nor gives access to CID subfonts. + */ + typedef struct CID_FaceDictRec_ + { + PS_PrivateRec private_dict; + + FT_UInt len_buildchar; + FT_Fixed forcebold_threshold; + FT_Pos stroke_width; + FT_Fixed expansion_factor; /* this is a duplicate of */ + /* `private_dict->expansion_factor' */ + FT_Byte paint_type; + FT_Byte font_type; + FT_Matrix font_matrix; + FT_Vector font_offset; + + FT_UInt num_subrs; + FT_ULong subrmap_offset; + FT_Int sd_bytes; + + } CID_FaceDictRec; + + + /************************************************************************** + * + * @struct: + * CID_FaceDict + * + * @description: + * A handle to a @CID_FaceDictRec structure. + */ + typedef struct CID_FaceDictRec_* CID_FaceDict; + + + /************************************************************************** + * + * @struct: + * CID_FontDict + * + * @description: + * This type is equivalent to @CID_FaceDictRec. It is deprecated but + * kept to maintain source compatibility between various versions of + * FreeType. + */ + typedef CID_FaceDictRec CID_FontDict; + + + /************************************************************************** + * + * @struct: + * CID_FaceInfoRec + * + * @description: + * A structure used to represent CID Face information. + */ + typedef struct CID_FaceInfoRec_ + { + FT_String* cid_font_name; + FT_Fixed cid_version; + FT_Int cid_font_type; + + FT_String* registry; + FT_String* ordering; + FT_Int supplement; + + PS_FontInfoRec font_info; + FT_BBox font_bbox; + FT_ULong uid_base; + + FT_Int num_xuid; + FT_ULong xuid[16]; + + FT_ULong cidmap_offset; + FT_Int fd_bytes; + FT_Int gd_bytes; + FT_ULong cid_count; + + FT_Int num_dicts; + CID_FaceDict font_dicts; + + FT_ULong data_offset; + + } CID_FaceInfoRec; + + + /************************************************************************** + * + * @struct: + * CID_FaceInfo + * + * @description: + * A handle to a @CID_FaceInfoRec structure. + */ + typedef struct CID_FaceInfoRec_* CID_FaceInfo; + + + /************************************************************************** + * + * @struct: + * CID_Info + * + * @description: + * This type is equivalent to @CID_FaceInfoRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ + typedef CID_FaceInfoRec CID_Info; + + + /************************************************************************** + * + * @function: + * FT_Has_PS_Glyph_Names + * + * @description: + * Return true if a given face provides reliable PostScript glyph names. + * This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that + * certain fonts (mostly TrueType) contain incorrect glyph name tables. + * + * When this function returns true, the caller is sure that the glyph + * names returned by @FT_Get_Glyph_Name are reliable. + * + * @input: + * face :: + * face handle + * + * @return: + * Boolean. True if glyph names are reliable. + * + */ + FT_EXPORT( FT_Int ) + FT_Has_PS_Glyph_Names( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Get_PS_Font_Info + * + * @description: + * Retrieve the @PS_FontInfoRec structure corresponding to a given + * PostScript font. + * + * @input: + * face :: + * PostScript face handle. + * + * @output: + * afont_info :: + * Output font info structure pointer. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * String pointers within the @PS_FontInfoRec structure are owned by the + * face and don't need to be freed by the caller. Missing entries in + * the font's FontInfo dictionary are represented by `NULL` pointers. + * + * If the font's format is not PostScript-based, this function will + * return the `FT_Err_Invalid_Argument` error code. + * + */ + FT_EXPORT( FT_Error ) + FT_Get_PS_Font_Info( FT_Face face, + PS_FontInfo afont_info ); + + + /************************************************************************** + * + * @function: + * FT_Get_PS_Font_Private + * + * @description: + * Retrieve the @PS_PrivateRec structure corresponding to a given + * PostScript font. + * + * @input: + * face :: + * PostScript face handle. + * + * @output: + * afont_private :: + * Output private dictionary structure pointer. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The string pointers within the @PS_PrivateRec structure are owned by + * the face and don't need to be freed by the caller. + * + * If the font's format is not PostScript-based, this function returns + * the `FT_Err_Invalid_Argument` error code. + * + */ + FT_EXPORT( FT_Error ) + FT_Get_PS_Font_Private( FT_Face face, + PS_Private afont_private ); + + + /************************************************************************** + * + * @enum: + * T1_EncodingType + * + * @description: + * An enumeration describing the 'Encoding' entry in a Type 1 dictionary. + * + * @values: + * T1_ENCODING_TYPE_NONE :: + * T1_ENCODING_TYPE_ARRAY :: + * T1_ENCODING_TYPE_STANDARD :: + * T1_ENCODING_TYPE_ISOLATIN1 :: + * T1_ENCODING_TYPE_EXPERT :: + * + * @since: + * 2.4.8 + */ + typedef enum T1_EncodingType_ + { + T1_ENCODING_TYPE_NONE = 0, + T1_ENCODING_TYPE_ARRAY, + T1_ENCODING_TYPE_STANDARD, + T1_ENCODING_TYPE_ISOLATIN1, + T1_ENCODING_TYPE_EXPERT + + } T1_EncodingType; + + + /************************************************************************** + * + * @enum: + * PS_Dict_Keys + * + * @description: + * An enumeration used in calls to @FT_Get_PS_Font_Value to identify the + * Type~1 dictionary entry to retrieve. + * + * @values: + * PS_DICT_FONT_TYPE :: + * PS_DICT_FONT_MATRIX :: + * PS_DICT_FONT_BBOX :: + * PS_DICT_PAINT_TYPE :: + * PS_DICT_FONT_NAME :: + * PS_DICT_UNIQUE_ID :: + * PS_DICT_NUM_CHAR_STRINGS :: + * PS_DICT_CHAR_STRING_KEY :: + * PS_DICT_CHAR_STRING :: + * PS_DICT_ENCODING_TYPE :: + * PS_DICT_ENCODING_ENTRY :: + * PS_DICT_NUM_SUBRS :: + * PS_DICT_SUBR :: + * PS_DICT_STD_HW :: + * PS_DICT_STD_VW :: + * PS_DICT_NUM_BLUE_VALUES :: + * PS_DICT_BLUE_VALUE :: + * PS_DICT_BLUE_FUZZ :: + * PS_DICT_NUM_OTHER_BLUES :: + * PS_DICT_OTHER_BLUE :: + * PS_DICT_NUM_FAMILY_BLUES :: + * PS_DICT_FAMILY_BLUE :: + * PS_DICT_NUM_FAMILY_OTHER_BLUES :: + * PS_DICT_FAMILY_OTHER_BLUE :: + * PS_DICT_BLUE_SCALE :: + * PS_DICT_BLUE_SHIFT :: + * PS_DICT_NUM_STEM_SNAP_H :: + * PS_DICT_STEM_SNAP_H :: + * PS_DICT_NUM_STEM_SNAP_V :: + * PS_DICT_STEM_SNAP_V :: + * PS_DICT_FORCE_BOLD :: + * PS_DICT_RND_STEM_UP :: + * PS_DICT_MIN_FEATURE :: + * PS_DICT_LEN_IV :: + * PS_DICT_PASSWORD :: + * PS_DICT_LANGUAGE_GROUP :: + * PS_DICT_VERSION :: + * PS_DICT_NOTICE :: + * PS_DICT_FULL_NAME :: + * PS_DICT_FAMILY_NAME :: + * PS_DICT_WEIGHT :: + * PS_DICT_IS_FIXED_PITCH :: + * PS_DICT_UNDERLINE_POSITION :: + * PS_DICT_UNDERLINE_THICKNESS :: + * PS_DICT_FS_TYPE :: + * PS_DICT_ITALIC_ANGLE :: + * + * @since: + * 2.4.8 + */ + typedef enum PS_Dict_Keys_ + { + /* conventionally in the font dictionary */ + PS_DICT_FONT_TYPE, /* FT_Byte */ + PS_DICT_FONT_MATRIX, /* FT_Fixed */ + PS_DICT_FONT_BBOX, /* FT_Fixed */ + PS_DICT_PAINT_TYPE, /* FT_Byte */ + PS_DICT_FONT_NAME, /* FT_String* */ + PS_DICT_UNIQUE_ID, /* FT_Int */ + PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */ + PS_DICT_CHAR_STRING_KEY, /* FT_String* */ + PS_DICT_CHAR_STRING, /* FT_String* */ + PS_DICT_ENCODING_TYPE, /* T1_EncodingType */ + PS_DICT_ENCODING_ENTRY, /* FT_String* */ + + /* conventionally in the font Private dictionary */ + PS_DICT_NUM_SUBRS, /* FT_Int */ + PS_DICT_SUBR, /* FT_String* */ + PS_DICT_STD_HW, /* FT_UShort */ + PS_DICT_STD_VW, /* FT_UShort */ + PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */ + PS_DICT_BLUE_VALUE, /* FT_Short */ + PS_DICT_BLUE_FUZZ, /* FT_Int */ + PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */ + PS_DICT_OTHER_BLUE, /* FT_Short */ + PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */ + PS_DICT_FAMILY_BLUE, /* FT_Short */ + PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */ + PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */ + PS_DICT_BLUE_SCALE, /* FT_Fixed */ + PS_DICT_BLUE_SHIFT, /* FT_Int */ + PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */ + PS_DICT_STEM_SNAP_H, /* FT_Short */ + PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */ + PS_DICT_STEM_SNAP_V, /* FT_Short */ + PS_DICT_FORCE_BOLD, /* FT_Bool */ + PS_DICT_RND_STEM_UP, /* FT_Bool */ + PS_DICT_MIN_FEATURE, /* FT_Short */ + PS_DICT_LEN_IV, /* FT_Int */ + PS_DICT_PASSWORD, /* FT_Long */ + PS_DICT_LANGUAGE_GROUP, /* FT_Long */ + + /* conventionally in the font FontInfo dictionary */ + PS_DICT_VERSION, /* FT_String* */ + PS_DICT_NOTICE, /* FT_String* */ + PS_DICT_FULL_NAME, /* FT_String* */ + PS_DICT_FAMILY_NAME, /* 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 */ + PS_DICT_FS_TYPE, /* FT_UShort */ + PS_DICT_ITALIC_ANGLE, /* FT_Long */ + + PS_DICT_MAX = PS_DICT_ITALIC_ANGLE + + } PS_Dict_Keys; + + + /************************************************************************** + * + * @function: + * FT_Get_PS_Font_Value + * + * @description: + * Retrieve the value for the supplied key from a PostScript font. + * + * @input: + * face :: + * PostScript face handle. + * + * key :: + * An enumeration value representing the dictionary key to retrieve. + * + * idx :: + * For array values, this specifies the index to be returned. + * + * value :: + * A pointer to memory into which to write the value. + * + * valen_len :: + * The size, in bytes, of the memory supplied for the value. + * + * @output: + * value :: + * The value matching the above key, if it exists. + * + * @return: + * The amount of memory (in bytes) required to hold the requested value + * (if it exists, -1 otherwise). + * + * @note: + * The values returned are not pointers into the internal structures of + * the face, but are 'fresh' copies, so that the memory containing them + * belongs to the calling application. This also enforces the + * 'read-only' nature of these values, i.e., this function cannot be + * used to manipulate the face. + * + * `value` is a void pointer because the values returned can be of + * various types. + * + * If either `value` is `NULL` or `value_len` is too small, just the + * required memory size for the requested entry is returned. + * + * The `idx` parameter is used, not only to retrieve elements of, for + * example, the FontMatrix or FontBBox, but also to retrieve name keys + * from the CharStrings dictionary, and the charstrings themselves. It + * is ignored for atomic values. + * + * `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000. To + * get the value as in the font stream, you need to divide by 65536000.0 + * (to remove the FT_Fixed scale, and the x1000 scale). + * + * IMPORTANT: Only key/value pairs read by the FreeType interpreter can + * be retrieved. So, for example, PostScript procedures such as NP, ND, + * and RD are not available. Arbitrary keys are, obviously, not be + * available either. + * + * If the font's format is not PostScript-based, this function returns + * the `FT_Err_Invalid_Argument` error code. + * + * @since: + * 2.4.8 + * + */ + FT_EXPORT( FT_Long ) + FT_Get_PS_Font_Value( FT_Face face, + PS_Dict_Keys key, + FT_UInt idx, + void *value, + FT_Long value_len ); + + /* */ + +FT_END_HEADER + +#endif /* T1TABLES_H_ */ + + +/* END */ diff --git a/win32/include/freetype/ttnameid.h b/win32/include/freetype/freetype/ttnameid.h similarity index 74% rename from win32/include/freetype/ttnameid.h rename to win32/include/freetype/freetype/ttnameid.h index c9585f24..cc677de7 100644 --- a/win32/include/freetype/ttnameid.h +++ b/win32/include/freetype/freetype/ttnameid.h @@ -1,23 +1,23 @@ -/***************************************************************************/ -/* */ -/* ttnameid.h */ -/* */ -/* TrueType name ID definitions (specification only). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ttnameid.h + * + * TrueType name ID definitions (specification only). + * + * Copyright (C) 1996-2019 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 __TTNAMEID_H__ -#define __TTNAMEID_H__ +#ifndef TTNAMEID_H_ +#define TTNAMEID_H_ #include <ft2build.h> @@ -26,53 +26,54 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* truetype_tables */ - /* */ + /************************************************************************** + * + * @section: + * truetype_tables + */ - /*************************************************************************/ - /* */ - /* Possible values for the `platform' identifier code in the name */ - /* records of the TTF `name' table. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * Possible values for the 'platform' identifier code in the name records + * of an SFNT 'name' table. + * + */ - /*********************************************************************** + /************************************************************************** * * @enum: * TT_PLATFORM_XXX * * @description: - * A list of valid values for the `platform_id' identifier code in + * A list of valid values for the `platform_id` identifier code in * @FT_CharMapRec and @FT_SfntName structures. * * @values: * TT_PLATFORM_APPLE_UNICODE :: * Used by Apple to indicate a Unicode character map and/or name entry. - * See @TT_APPLE_ID_XXX for corresponding `encoding_id' values. Note + * See @TT_APPLE_ID_XXX for corresponding `encoding_id` values. Note * that name entries in this format are coded as big-endian UCS-2 * character codes _only_. * * TT_PLATFORM_MACINTOSH :: - * Used by Apple to indicate a MacOS-specific charmap and/or name entry. - * See @TT_MAC_ID_XXX for corresponding `encoding_id' values. Note that - * most TrueType fonts contain an Apple roman charmap to be usable on - * MacOS systems (even if they contain a Microsoft charmap as well). + * Used by Apple to indicate a MacOS-specific charmap and/or name + * entry. See @TT_MAC_ID_XXX for corresponding `encoding_id` values. + * Note that most TrueType fonts contain an Apple roman charmap to be + * usable on MacOS systems (even if they contain a Microsoft charmap as + * well). * * TT_PLATFORM_ISO :: - * This value was used to specify ISO/IEC 10646 charmaps. It is however - * now deprecated. See @TT_ISO_ID_XXX for a list of corresponding - * `encoding_id' values. + * This value was used to specify ISO/IEC 10646 charmaps. It is + * however now deprecated. See @TT_ISO_ID_XXX for a list of + * corresponding `encoding_id` values. * * TT_PLATFORM_MICROSOFT :: * Used by Microsoft to indicate Windows-specific charmaps. See - * @TT_MS_ID_XXX for a list of corresponding `encoding_id' values. + * @TT_MS_ID_XXX for a list of corresponding `encoding_id` values. * Note that most fonts contain a Unicode charmap using - * (TT_PLATFORM_MICROSOFT, @TT_MS_ID_UNICODE_CS). + * (`TT_PLATFORM_MICROSOFT`, @TT_MS_ID_UNICODE_CS). * * TT_PLATFORM_CUSTOM :: * Used to indicate application-specific charmaps. @@ -91,13 +92,13 @@ FT_BEGIN_HEADER #define TT_PLATFORM_ADOBE 7 /* artificial */ - /*********************************************************************** + /************************************************************************** * * @enum: * TT_APPLE_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for + * A list of valid values for the `encoding_id` for * @TT_PLATFORM_APPLE_UNICODE charmaps and name entries. * * @values: @@ -117,62 +118,31 @@ FT_BEGIN_HEADER * Unicode 3.1 and beyond, using UTF-32. * * TT_APPLE_ID_VARIANT_SELECTOR :: - * From Adobe, not Apple. Not a normal cmap. Specifies variations - * on a real cmap. + * From Adobe, not Apple. Not a normal cmap. Specifies variations on + * a real cmap. + * + * TT_APPLE_ID_FULL_UNICODE :: + * Used for fallback fonts that provide complete Unicode coverage with + * a type~13 cmap. */ -#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ -#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ -#define TT_APPLE_ID_ISO_10646 2 /* deprecated */ -#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ +#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ +#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ +#define TT_APPLE_ID_ISO_10646 2 /* deprecated */ +#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ #define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */ -#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */ +#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */ +#define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */ - /*********************************************************************** + /************************************************************************** * * @enum: * TT_MAC_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for + * A list of valid values for the `encoding_id` for * @TT_PLATFORM_MACINTOSH charmaps and name entries. - * - * @values: - * TT_MAC_ID_ROMAN :: - * TT_MAC_ID_JAPANESE :: - * TT_MAC_ID_TRADITIONAL_CHINESE :: - * TT_MAC_ID_KOREAN :: - * TT_MAC_ID_ARABIC :: - * TT_MAC_ID_HEBREW :: - * TT_MAC_ID_GREEK :: - * TT_MAC_ID_RUSSIAN :: - * TT_MAC_ID_RSYMBOL :: - * TT_MAC_ID_DEVANAGARI :: - * TT_MAC_ID_GURMUKHI :: - * TT_MAC_ID_GUJARATI :: - * TT_MAC_ID_ORIYA :: - * TT_MAC_ID_BENGALI :: - * TT_MAC_ID_TAMIL :: - * TT_MAC_ID_TELUGU :: - * TT_MAC_ID_KANNADA :: - * TT_MAC_ID_MALAYALAM :: - * TT_MAC_ID_SINHALESE :: - * TT_MAC_ID_BURMESE :: - * TT_MAC_ID_KHMER :: - * TT_MAC_ID_THAI :: - * TT_MAC_ID_LAOTIAN :: - * TT_MAC_ID_GEORGIAN :: - * TT_MAC_ID_ARMENIAN :: - * TT_MAC_ID_MALDIVIAN :: - * TT_MAC_ID_SIMPLIFIED_CHINESE :: - * TT_MAC_ID_TIBETAN :: - * TT_MAC_ID_MONGOLIAN :: - * TT_MAC_ID_GEEZ :: - * TT_MAC_ID_SLAVIC :: - * TT_MAC_ID_VIETNAMESE :: - * TT_MAC_ID_SINDHI :: - * TT_MAC_ID_UNINTERP :: */ #define TT_MAC_ID_ROMAN 0 @@ -211,14 +181,14 @@ FT_BEGIN_HEADER #define TT_MAC_ID_UNINTERP 32 - /*********************************************************************** + /************************************************************************** * * @enum: * TT_ISO_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_ISO charmaps and name entries. + * A list of valid values for the `encoding_id` for @TT_PLATFORM_ISO + * charmaps and name entries. * * Their use is now deprecated. * @@ -236,64 +206,66 @@ FT_BEGIN_HEADER #define TT_ISO_ID_8859_1 2 - /*********************************************************************** + /************************************************************************** * * @enum: * TT_MS_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for + * A list of valid values for the `encoding_id` for * @TT_PLATFORM_MICROSOFT charmaps and name entries. * * @values: * TT_MS_ID_SYMBOL_CS :: - * Corresponds to Microsoft symbol encoding. See - * @FT_ENCODING_MS_SYMBOL. + * Microsoft symbol encoding. See @FT_ENCODING_MS_SYMBOL. * * TT_MS_ID_UNICODE_CS :: - * Corresponds to a Microsoft WGL4 charmap, matching Unicode. See - * @FT_ENCODING_UNICODE. + * Microsoft WGL4 charmap, matching Unicode. See @FT_ENCODING_UNICODE. * * TT_MS_ID_SJIS :: - * Corresponds to SJIS Japanese encoding. See @FT_ENCODING_SJIS. + * Shift JIS Japanese encoding. See @FT_ENCODING_SJIS. * - * TT_MS_ID_GB2312 :: - * Corresponds to Simplified Chinese as used in Mainland China. See - * @FT_ENCODING_GB2312. + * TT_MS_ID_PRC :: + * Chinese encodings as used in the People's Republic of China (PRC). + * This means the encodings GB~2312 and its supersets GBK and GB~18030. + * See @FT_ENCODING_PRC. * * TT_MS_ID_BIG_5 :: - * Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. - * See @FT_ENCODING_BIG5. + * Traditional Chinese as used in Taiwan and Hong Kong. See + * @FT_ENCODING_BIG5. * * TT_MS_ID_WANSUNG :: - * Corresponds to Korean Wansung encoding. See @FT_ENCODING_WANSUNG. + * Korean Extended Wansung encoding. See @FT_ENCODING_WANSUNG. * * TT_MS_ID_JOHAB :: - * Corresponds to Johab encoding. See @FT_ENCODING_JOHAB. + * Korean Johab encoding. See @FT_ENCODING_JOHAB. * * TT_MS_ID_UCS_4 :: - * Corresponds to UCS-4 or UTF-32 charmaps. This has been added to - * the OpenType specification version 1.4 (mid-2001.) + * UCS-4 or UTF-32 charmaps. This has been added to the OpenType + * specification version 1.4 (mid-2001). */ #define TT_MS_ID_SYMBOL_CS 0 #define TT_MS_ID_UNICODE_CS 1 #define TT_MS_ID_SJIS 2 -#define TT_MS_ID_GB2312 3 +#define TT_MS_ID_PRC 3 #define TT_MS_ID_BIG_5 4 #define TT_MS_ID_WANSUNG 5 #define TT_MS_ID_JOHAB 6 #define TT_MS_ID_UCS_4 10 + /* this value is deprecated */ +#define TT_MS_ID_GB2312 TT_MS_ID_PRC - /*********************************************************************** + + /************************************************************************** * * @enum: * TT_ADOBE_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific extension! + * A list of valid values for the `encoding_id` for @TT_PLATFORM_ADOBE + * charmaps. This is a FreeType-specific extension! * * @values: * TT_ADOBE_ID_STANDARD :: @@ -312,17 +284,22 @@ FT_BEGIN_HEADER #define TT_ADOBE_ID_LATIN_1 3 - /*************************************************************************/ - /* */ - /* Possible values of the language identifier field in the name records */ - /* of the TTF `name' table if the `platform' identifier code is */ - /* TT_PLATFORM_MACINTOSH. These values are also used as return values */ - /* for function @FT_Get_CMap_Language_ID. */ - /* */ - /* The canonical source for the Apple assigned Language ID's is at */ - /* */ - /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html */ - /* */ + /************************************************************************** + * + * @enum: + * TT_MAC_LANGID_XXX + * + * @description: + * Possible values of the language identifier field in the name records + * of the SFNT 'name' table if the 'platform' identifier code is + * @TT_PLATFORM_MACINTOSH. These values are also used as return values + * for function @FT_Get_CMap_Language_ID. + * + * The canonical source for Apple's IDs is + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html + */ + #define TT_MAC_LANGID_ENGLISH 0 #define TT_MAC_LANGID_FRENCH 1 #define TT_MAC_LANGID_GERMAN 2 @@ -433,15 +410,6 @@ FT_BEGIN_HEADER #define TT_MAC_LANGID_JAVANESE 138 #define TT_MAC_LANGID_SUNDANESE 139 - -#if 0 /* these seem to be errors that have been dropped */ - -#define TT_MAC_LANGID_SCOTTISH_GAELIC 140 -#define TT_MAC_LANGID_IRISH_GAELIC 141 - -#endif - - /* The following codes are new as of 2000-03-10 */ #define TT_MAC_LANGID_GALICIAN 140 #define TT_MAC_LANGID_AFRIKAANS 141 @@ -456,18 +424,30 @@ FT_BEGIN_HEADER #define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150 - /*************************************************************************/ - /* */ - /* Possible values of the language identifier field in the name records */ - /* of the TTF `name' table if the `platform' identifier code is */ - /* TT_PLATFORM_MICROSOFT. */ - /* */ - /* The canonical source for the MS assigned LCIDs is */ - /* */ - /* http://www.microsoft.com/globaldev/reference/lcid-all.mspx */ - /* */ + /************************************************************************** + * + * @enum: + * TT_MS_LANGID_XXX + * + * @description: + * Possible values of the language identifier field in the name records + * of the SFNT 'name' table if the 'platform' identifier code is + * @TT_PLATFORM_MICROSOFT. These values are also used as return values + * for function @FT_Get_CMap_Language_ID. + * + * The canonical source for Microsoft's IDs is + * + * https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings , + * + * however, we only provide macros for language identifiers present in + * the OpenType specification: Microsoft has abandoned the concept of + * LCIDs (language code identifiers), and format~1 of the 'name' table + * provides a better mechanism for languages not covered here. + * + * More legacy values not listed in the reference can be found in the + * @FT_TRUETYPE_IDS_H header file. + */ -#define TT_MS_LANGID_ARABIC_GENERAL 0x0001 #define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401 #define TT_MS_LANGID_ARABIC_IRAQ 0x0801 #define TT_MS_LANGID_ARABIC_EGYPT 0x0C01 @@ -485,39 +465,20 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01 #define TT_MS_LANGID_ARABIC_QATAR 0x4001 #define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402 -#define TT_MS_LANGID_CATALAN_SPAIN 0x0403 -#define TT_MS_LANGID_CHINESE_GENERAL 0x0004 +#define TT_MS_LANGID_CATALAN_CATALAN 0x0403 #define TT_MS_LANGID_CHINESE_TAIWAN 0x0404 #define TT_MS_LANGID_CHINESE_PRC 0x0804 #define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04 #define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004 - -#if 1 /* this looks like the correct value */ -#define TT_MS_LANGID_CHINESE_MACAU 0x1404 -#else /* but beware, Microsoft may change its mind... - the most recent Word reference has the following: */ -#define TT_MS_LANGID_CHINESE_MACAU TT_MS_LANGID_CHINESE_HONG_KONG -#endif - -#if 0 /* used only with .NET `cultures'; commented out */ -#define TT_MS_LANGID_CHINESE_TRADITIONAL 0x7C04 -#endif - +#define TT_MS_LANGID_CHINESE_MACAO 0x1404 #define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405 #define TT_MS_LANGID_DANISH_DENMARK 0x0406 #define TT_MS_LANGID_GERMAN_GERMANY 0x0407 #define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807 #define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07 #define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007 -#define TT_MS_LANGID_GERMAN_LIECHTENSTEI 0x1407 +#define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407 #define TT_MS_LANGID_GREEK_GREECE 0x0408 - - /* don't ask what this one means... It is commented out currently. */ -#if 0 -#define TT_MS_LANGID_GREEK_GREECE2 0x2008 -#endif - -#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009 #define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409 #define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809 #define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09 @@ -531,14 +492,12 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09 #define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009 #define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409 -#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809 -#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09 #define TT_MS_LANGID_ENGLISH_INDIA 0x4009 #define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409 #define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809 #define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A #define TT_MS_LANGID_SPANISH_MEXICO 0x080A -#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT 0x0C0A +#define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A #define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A #define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A #define TT_MS_LANGID_SPANISH_PANAMA 0x180A @@ -557,9 +516,6 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A #define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A #define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A - /* The following ID blatantly violate MS specs by using a */ - /* sublanguage > 0x1F. */ -#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU #define TT_MS_LANGID_FINNISH_FINLAND 0x040B #define TT_MS_LANGID_FRENCH_FRANCE 0x040C #define TT_MS_LANGID_FRENCH_BELGIUM 0x080C @@ -567,27 +523,13 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C #define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C #define TT_MS_LANGID_FRENCH_MONACO 0x180C -#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C -#define TT_MS_LANGID_FRENCH_REUNION 0x200C -#define TT_MS_LANGID_FRENCH_CONGO 0x240C - /* which was formerly: */ -#define TT_MS_LANGID_FRENCH_ZAIRE TT_MS_LANGID_FRENCH_CONGO -#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C -#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C -#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C -#define TT_MS_LANGID_FRENCH_MALI 0x340C -#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C -#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C - /* and another violation of the spec (see 0xE40AU) */ -#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU #define TT_MS_LANGID_HEBREW_ISRAEL 0x040D #define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E #define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F #define TT_MS_LANGID_ITALIAN_ITALY 0x0410 #define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810 #define TT_MS_LANGID_JAPANESE_JAPAN 0x0411 -#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA 0x0412 -#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812 +#define TT_MS_LANGID_KOREAN_KOREA 0x0412 #define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413 #define TT_MS_LANGID_DUTCH_BELGIUM 0x0813 #define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414 @@ -595,26 +537,17 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_POLISH_POLAND 0x0415 #define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416 #define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816 -#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND 0x0417 +#define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417 #define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418 -#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818 #define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419 -#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819 #define TT_MS_LANGID_CROATIAN_CROATIA 0x041A #define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A #define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A - -#if 0 /* this used to be this value, but it looks like we were wrong */ -#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x101A -#else /* current sources say */ #define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A #define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A - /* and XPsp2 Platform SDK added (2004-07-26) */ - /* Names are shortened to be significant within 40 chars. */ #define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A -#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x181A -#endif - +#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A +#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A #define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B #define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C #define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D @@ -622,36 +555,30 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_THAI_THAILAND 0x041E #define TT_MS_LANGID_TURKISH_TURKEY 0x041F #define TT_MS_LANGID_URDU_PAKISTAN 0x0420 -#define TT_MS_LANGID_URDU_INDIA 0x0820 #define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421 #define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422 #define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423 -#define TT_MS_LANGID_SLOVENE_SLOVENIA 0x0424 +#define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424 #define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425 #define TT_MS_LANGID_LATVIAN_LATVIA 0x0426 #define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427 -#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827 #define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428 -#define TT_MS_LANGID_FARSI_IRAN 0x0429 #define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A #define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B #define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C #define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C -#define TT_MS_LANGID_BASQUE_SPAIN 0x042D -#define TT_MS_LANGID_SORBIAN_GERMANY 0x042E +#define TT_MS_LANGID_BASQUE_BASQUE 0x042D +#define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E +#define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E #define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F -#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430 -#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431 -#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA 0x0432 -#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433 -#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA 0x0434 -#define TT_MS_LANGID_ZULU_SOUTH_AFRICA 0x0435 +#define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432 +#define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434 +#define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435 #define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436 #define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437 #define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438 #define TT_MS_LANGID_HINDI_INDIA 0x0439 #define TT_MS_LANGID_MALTESE_MALTA 0x043A - /* Added by XPsp2 Platform SDK (2004-07-26) */ #define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B #define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B #define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B @@ -661,37 +588,21 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B #define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B #define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B - /* ... and we also keep our old identifier... */ -#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B - -#if 0 /* this seems to be a previous inversion */ -#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C -#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C -#else -#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C -#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C -#endif - -#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D +#define TT_MS_LANGID_IRISH_IRELAND 0x083C #define TT_MS_LANGID_MALAY_MALAYSIA 0x043E #define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E -#define TT_MS_LANGID_KAZAK_KAZAKSTAN 0x043F -#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN /* Cyrillic*/ 0x0440 - /* alias declared in Windows 2000 */ -#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \ - TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN - -#define TT_MS_LANGID_SWAHILI_KENYA 0x0441 +#define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F +#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/ 0x0440 +#define TT_MS_LANGID_KISWAHILI_KENYA 0x0441 #define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442 #define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443 #define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843 -#define TT_MS_LANGID_TATAR_TATARSTAN 0x0444 +#define TT_MS_LANGID_TATAR_RUSSIA 0x0444 #define TT_MS_LANGID_BENGALI_INDIA 0x0445 #define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845 #define TT_MS_LANGID_PUNJABI_INDIA 0x0446 -#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846 #define TT_MS_LANGID_GUJARATI_INDIA 0x0447 -#define TT_MS_LANGID_ORIYA_INDIA 0x0448 +#define TT_MS_LANGID_ODIA_INDIA 0x0448 #define TT_MS_LANGID_TAMIL_INDIA 0x0449 #define TT_MS_LANGID_TELUGU_INDIA 0x044A #define TT_MS_LANGID_KANNADA_INDIA 0x044B @@ -700,142 +611,241 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_MARATHI_INDIA 0x044E #define TT_MS_LANGID_SANSKRIT_INDIA 0x044F #define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450 -#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN 0x0850 -#define TT_MS_LANGID_TIBETAN_CHINA 0x0451 - /* Don't use the next constant! It has */ - /* (1) the wrong spelling (Dzonghka) */ - /* (2) Microsoft doesn't officially define it -- */ - /* at least it is not in the List of Local */ - /* ID Values. */ - /* (3) Dzongkha is not the same language as */ - /* Tibetan, so merging it is wrong anyway. */ - /* */ - /* TT_MS_LANGID_TIBETAN_BHUTAN is correct, BTW. */ -#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851 - -#if 0 - /* the following used to be defined */ -#define TT_MS_LANGID_TIBETAN_BHUTAN 0x0451 - /* ... but it was changed; */ -#else - /* So we will continue to #define it, but with the correct value */ -#define TT_MS_LANGID_TIBETAN_BHUTAN TT_MS_LANGID_DZONGHKA_BHUTAN -#endif - -#define TT_MS_LANGID_WELSH_WALES 0x0452 +#define TT_MS_LANGID_MONGOLIAN_PRC 0x0850 +#define TT_MS_LANGID_TIBETAN_PRC 0x0451 +#define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452 #define TT_MS_LANGID_KHMER_CAMBODIA 0x0453 #define TT_MS_LANGID_LAO_LAOS 0x0454 -#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455 -#define TT_MS_LANGID_GALICIAN_SPAIN 0x0456 +#define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456 #define TT_MS_LANGID_KONKANI_INDIA 0x0457 -#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458 -#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459 -#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859 - /* Missing a LCID for Sindhi in Devanagari script */ #define TT_MS_LANGID_SYRIAC_SYRIA 0x045A -#define TT_MS_LANGID_SINHALESE_SRI_LANKA 0x045B -#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C +#define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B #define TT_MS_LANGID_INUKTITUT_CANADA 0x045D +#define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D #define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E -#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F -#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN 0x085F - /* Missing a LCID for Tifinagh script */ -#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460 - /* Spelled this way by XPsp2 Platform SDK (2004-07-26) */ - /* script is yet unclear... might be Arabic, Nagari or Sharada */ -#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860 - /* ... and aliased (by MS) for compatibility reasons. */ -#define TT_MS_LANGID_KASHMIRI_INDIA TT_MS_LANGID_KASHMIRI_SASIA +#define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F #define TT_MS_LANGID_NEPALI_NEPAL 0x0461 -#define TT_MS_LANGID_NEPALI_INDIA 0x0861 #define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462 #define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463 #define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464 #define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465 - /* alias declared in Windows 2000 */ -#define TT_MS_LANGID_DIVEHI_MALDIVES TT_MS_LANGID_DHIVEHI_MALDIVES -#define TT_MS_LANGID_EDO_NIGERIA 0x0466 -#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467 #define TT_MS_LANGID_HAUSA_NIGERIA 0x0468 -#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469 #define TT_MS_LANGID_YORUBA_NIGERIA 0x046A #define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B #define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B #define TT_MS_LANGID_QUECHUA_PERU 0x0C6B -#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA 0x046C - /* Also spelled by XPsp2 Platform SDK (2004-07-26) */ -#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \ - TT_MS_LANGID_SEPEDI_SOUTH_AFRICA - /* language codes 0x046D, 0x046E and 0x046F are (still) unknown. */ +#define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C +#define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D +#define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E +#define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F #define TT_MS_LANGID_IGBO_NIGERIA 0x0470 +#define TT_MS_LANGID_YI_PRC 0x0478 +#define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A +#define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C +#define TT_MS_LANGID_BRETON_FRANCE 0x047E +#define TT_MS_LANGID_UIGHUR_PRC 0x0480 +#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 +#define TT_MS_LANGID_OCCITAN_FRANCE 0x0482 +#define TT_MS_LANGID_CORSICAN_FRANCE 0x0483 +#define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484 +#define TT_MS_LANGID_YAKUT_RUSSIA 0x0485 +#define TT_MS_LANGID_KICHE_GUATEMALA 0x0486 +#define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487 +#define TT_MS_LANGID_WOLOF_SENEGAL 0x0488 +#define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C + + /* */ + + + /* legacy macro definitions not present in OpenType 1.8.1 */ +#define TT_MS_LANGID_ARABIC_GENERAL 0x0001 +#define TT_MS_LANGID_CATALAN_SPAIN \ + TT_MS_LANGID_CATALAN_CATALAN +#define TT_MS_LANGID_CHINESE_GENERAL 0x0004 +#define TT_MS_LANGID_CHINESE_MACAU \ + TT_MS_LANGID_CHINESE_MACAO +#define TT_MS_LANGID_GERMAN_LIECHTENSTEI \ + TT_MS_LANGID_GERMAN_LIECHTENSTEIN +#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009 +#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809 +#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09 +#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT \ + TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT +#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU +#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C +#define TT_MS_LANGID_FRENCH_REUNION 0x200C +#define TT_MS_LANGID_FRENCH_CONGO 0x240C + /* which was formerly: */ +#define TT_MS_LANGID_FRENCH_ZAIRE \ + TT_MS_LANGID_FRENCH_CONGO +#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C +#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C +#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C +#define TT_MS_LANGID_FRENCH_MALI 0x340C +#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C +#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C +#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU +#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA \ + TT_MS_LANGID_KOREAN_KOREA +#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812 +#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND \ + TT_MS_LANGID_ROMANSH_SWITZERLAND +#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818 +#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819 +#define TT_MS_LANGID_URDU_INDIA 0x0820 +#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827 +#define TT_MS_LANGID_SLOVENE_SLOVENIA \ + TT_MS_LANGID_SLOVENIAN_SLOVENIA +#define TT_MS_LANGID_FARSI_IRAN 0x0429 +#define TT_MS_LANGID_BASQUE_SPAIN \ + TT_MS_LANGID_BASQUE_BASQUE +#define TT_MS_LANGID_SORBIAN_GERMANY \ + TT_MS_LANGID_UPPER_SORBIAN_GERMANY +#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430 +#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431 +#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA \ + TT_MS_LANGID_SETSWANA_SOUTH_AFRICA +#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433 +#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA \ + TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA +#define TT_MS_LANGID_ZULU_SOUTH_AFRICA \ + TT_MS_LANGID_ISIZULU_SOUTH_AFRICA +#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B + /* the next two values are incorrectly inverted */ +#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C +#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C +#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D +#define TT_MS_LANGID_KAZAK_KAZAKSTAN \ + TT_MS_LANGID_KAZAKH_KAZAKHSTAN +#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \ + TT_MS_LANGID_KYRGYZ_KYRGYZSTAN +#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN \ + TT_MS_LANGID_KYRGYZ_KYRGYZSTAN +#define TT_MS_LANGID_SWAHILI_KENYA \ + TT_MS_LANGID_KISWAHILI_KENYA +#define TT_MS_LANGID_TATAR_TATARSTAN \ + TT_MS_LANGID_TATAR_RUSSIA +#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846 +#define TT_MS_LANGID_ORIYA_INDIA \ + TT_MS_LANGID_ODIA_INDIA +#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN \ + TT_MS_LANGID_MONGOLIAN_PRC +#define TT_MS_LANGID_TIBETAN_CHINA \ + TT_MS_LANGID_TIBETAN_PRC +#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851 +#define TT_MS_LANGID_TIBETAN_BHUTAN \ + TT_MS_LANGID_DZONGHKA_BHUTAN +#define TT_MS_LANGID_WELSH_WALES \ + TT_MS_LANGID_WELSH_UNITED_KINGDOM +#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455 +#define TT_MS_LANGID_GALICIAN_SPAIN \ + TT_MS_LANGID_GALICIAN_GALICIAN +#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458 +#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459 +#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859 +#define TT_MS_LANGID_SINHALESE_SRI_LANKA \ + TT_MS_LANGID_SINHALA_SRI_LANKA +#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C +#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F +#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN \ + TT_MS_LANGID_TAMAZIGHT_ALGERIA +#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460 +#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860 +#define TT_MS_LANGID_KASHMIRI_INDIA \ + TT_MS_LANGID_KASHMIRI_SASIA +#define TT_MS_LANGID_NEPALI_INDIA 0x0861 +#define TT_MS_LANGID_DIVEHI_MALDIVES \ + TT_MS_LANGID_DHIVEHI_MALDIVES +#define TT_MS_LANGID_EDO_NIGERIA 0x0466 +#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467 +#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469 +#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA \ + TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA +#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \ + TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA #define TT_MS_LANGID_KANURI_NIGERIA 0x0471 #define TT_MS_LANGID_OROMO_ETHIOPIA 0x0472 #define TT_MS_LANGID_TIGRIGNA_ETHIOPIA 0x0473 #define TT_MS_LANGID_TIGRIGNA_ERYTHREA 0x0873 - /* also spelled in the `Passport SDK' list as: */ -#define TT_MS_LANGID_TIGRIGNA_ERYTREA TT_MS_LANGID_TIGRIGNA_ERYTHREA +#define TT_MS_LANGID_TIGRIGNA_ERYTREA \ + TT_MS_LANGID_TIGRIGNA_ERYTHREA #define TT_MS_LANGID_GUARANI_PARAGUAY 0x0474 #define TT_MS_LANGID_HAWAIIAN_UNITED_STATES 0x0475 #define TT_MS_LANGID_LATIN 0x0476 #define TT_MS_LANGID_SOMALI_SOMALIA 0x0477 - /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */ - /* not written (but OTOH the peculiar writing system is worth */ - /* studying). */ -#define TT_MS_LANGID_YI_CHINA 0x0478 +#define TT_MS_LANGID_YI_CHINA \ + TT_MS_LANGID_YI_PRC #define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479 - /* language codes from 0x047A to 0x047F are (still) unknown. */ -#define TT_MS_LANGID_UIGHUR_CHINA 0x0480 -#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 - -#if 0 /* not deemed useful for fonts */ -#define TT_MS_LANGID_HUMAN_INTERFACE_DEVICE 0x04FF -#endif +#define TT_MS_LANGID_UIGHUR_CHINA \ + TT_MS_LANGID_UIGHUR_PRC - /*************************************************************************/ - /* */ - /* Possible values of the `name' identifier field in the name records of */ - /* the TTF `name' table. These values are platform independent. */ - /* */ -#define TT_NAME_ID_COPYRIGHT 0 -#define TT_NAME_ID_FONT_FAMILY 1 -#define TT_NAME_ID_FONT_SUBFAMILY 2 -#define TT_NAME_ID_UNIQUE_ID 3 -#define TT_NAME_ID_FULL_NAME 4 -#define TT_NAME_ID_VERSION_STRING 5 -#define TT_NAME_ID_PS_NAME 6 -#define TT_NAME_ID_TRADEMARK 7 + /************************************************************************** + * + * @enum: + * TT_NAME_ID_XXX + * + * @description: + * Possible values of the 'name' identifier field in the name records of + * an SFNT 'name' table. These values are platform independent. + */ + +#define TT_NAME_ID_COPYRIGHT 0 +#define TT_NAME_ID_FONT_FAMILY 1 +#define TT_NAME_ID_FONT_SUBFAMILY 2 +#define TT_NAME_ID_UNIQUE_ID 3 +#define TT_NAME_ID_FULL_NAME 4 +#define TT_NAME_ID_VERSION_STRING 5 +#define TT_NAME_ID_PS_NAME 6 +#define TT_NAME_ID_TRADEMARK 7 /* the following values are from the OpenType spec */ -#define TT_NAME_ID_MANUFACTURER 8 -#define TT_NAME_ID_DESIGNER 9 -#define TT_NAME_ID_DESCRIPTION 10 -#define TT_NAME_ID_VENDOR_URL 11 -#define TT_NAME_ID_DESIGNER_URL 12 -#define TT_NAME_ID_LICENSE 13 -#define TT_NAME_ID_LICENSE_URL 14 +#define TT_NAME_ID_MANUFACTURER 8 +#define TT_NAME_ID_DESIGNER 9 +#define TT_NAME_ID_DESCRIPTION 10 +#define TT_NAME_ID_VENDOR_URL 11 +#define TT_NAME_ID_DESIGNER_URL 12 +#define TT_NAME_ID_LICENSE 13 +#define TT_NAME_ID_LICENSE_URL 14 /* number 15 is reserved */ -#define TT_NAME_ID_PREFERRED_FAMILY 16 -#define TT_NAME_ID_PREFERRED_SUBFAMILY 17 -#define TT_NAME_ID_MAC_FULL_NAME 18 +#define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16 +#define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17 +#define TT_NAME_ID_MAC_FULL_NAME 18 /* The following code is new as of 2000-01-21 */ -#define TT_NAME_ID_SAMPLE_TEXT 19 +#define TT_NAME_ID_SAMPLE_TEXT 19 /* This is new in OpenType 1.3 */ -#define TT_NAME_ID_CID_FINDFONT_NAME 20 +#define TT_NAME_ID_CID_FINDFONT_NAME 20 /* This is new in OpenType 1.5 */ -#define TT_NAME_ID_WWS_FAMILY 21 -#define TT_NAME_ID_WWS_SUBFAMILY 22 +#define TT_NAME_ID_WWS_FAMILY 21 +#define TT_NAME_ID_WWS_SUBFAMILY 22 + + /* This is new in OpenType 1.7 */ +#define TT_NAME_ID_LIGHT_BACKGROUND 23 +#define TT_NAME_ID_DARK_BACKGROUND 24 + + /* This is new in OpenType 1.8 */ +#define TT_NAME_ID_VARIATIONS_PREFIX 25 + + /* these two values are deprecated */ +#define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY +#define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY - /*************************************************************************/ - /* */ - /* Bit mask values for the Unicode Ranges from the TTF `OS2 ' table. */ - /* */ - /* Updated 08-Nov-2008. */ - /* */ + /************************************************************************** + * + * @enum: + * TT_UCR_XXX + * + * @description: + * Possible bit mask values for the `ulUnicodeRangeX` fields in an SFNT + * 'OS/2' table. + */ + + /* ulUnicodeRange1 */ + /* --------------- */ /* Bit 0 Basic Latin */ #define TT_UCR_BASIC_LATIN (1L << 0) /* U+0020-U+007E */ @@ -857,7 +867,7 @@ FT_BEGIN_HEADER /* U+A700-U+A71F */ /* Bit 6 Combining Diacritical Marks */ /* Combining Diacritical Marks Supplement */ -#define TT_UCR_COMBINING_DIACRITICS (1L << 6) /* U+0300-U+036F */ +#define TT_UCR_COMBINING_DIACRITICAL_MARKS (1L << 6) /* U+0300-U+036F */ /* U+1DC0-U+1DFF */ /* Bit 7 Greek and Coptic */ #define TT_UCR_GREEK (1L << 7) /* U+0370-U+03FF */ @@ -925,12 +935,17 @@ FT_BEGIN_HEADER /* Supplemental Punctuation */ #define TT_UCR_GENERAL_PUNCTUATION (1L << 31) /* U+2000-U+206F */ /* U+2E00-U+2E7F */ + + /* ulUnicodeRange2 */ + /* --------------- */ + /* Bit 32 Superscripts And Subscripts */ #define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L << 0) /* U+2070-U+209F */ /* Bit 33 Currency Symbols */ #define TT_UCR_CURRENCY_SYMBOLS (1L << 1) /* U+20A0-U+20CF */ /* Bit 34 Combining Diacritical Marks For Symbols */ -#define TT_UCR_COMBINING_DIACRITICS_SYMB (1L << 2) /* U+20D0-U+20FF */ +#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \ + (1L << 2) /* U+20D0-U+20FF */ /* Bit 35 Letterlike Symbols */ #define TT_UCR_LETTERLIKE_SYMBOLS (1L << 3) /* U+2100-U+214F */ /* Bit 36 Number Forms */ @@ -996,13 +1011,13 @@ FT_BEGIN_HEADER /* Bit 57 High Surrogates */ /* High Private Use Surrogates */ /* Low Surrogates */ - /* */ + /* According to OpenType specs v.1.3+, */ /* setting bit 57 implies that there is */ /* at least one codepoint beyond the */ /* Basic Multilingual Plane that is */ /* supported by this font. So it really */ - /* means >= U+10000 */ + /* means >= U+10000. */ #define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DB7F */ /* U+DB80-U+DBFF */ /* U+DC00-U+DFFF */ @@ -1034,7 +1049,11 @@ FT_BEGIN_HEADER /* Bit 62 Alphabetic Presentation Forms */ #define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L << 30) /* U+FB00-U+FB4F */ /* Bit 63 Arabic Presentation Forms-A */ -#define TT_UCR_ARABIC_PRESENTATIONS_A (1L << 31) /* U+FB50-U+FDFF */ +#define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L << 31) /* U+FB50-U+FDFF */ + + /* ulUnicodeRange3 */ + /* --------------- */ + /* Bit 64 Combining Half Marks */ #define TT_UCR_COMBINING_HALF_MARKS (1L << 0) /* U+FE20-U+FE2F */ /* Bit 65 Vertical forms */ @@ -1044,7 +1063,7 @@ FT_BEGIN_HEADER /* Bit 66 Small Form Variants */ #define TT_UCR_SMALL_FORM_VARIANTS (1L << 2) /* U+FE50-U+FE6F */ /* Bit 67 Arabic Presentation Forms-B */ -#define TT_UCR_ARABIC_PRESENTATIONS_B (1L << 3) /* U+FE70-U+FEFE */ +#define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L << 3) /* U+FE70-U+FEFE */ /* Bit 68 Halfwidth and Fullwidth Forms */ #define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L << 4) /* U+FF00-U+FFEF */ /* Bit 69 Specials */ @@ -1123,6 +1142,10 @@ FT_BEGIN_HEADER #define TT_UCR_TAI_LE (1L << 30) /* U+1950-U+197F */ /* Bit 95 New Tai Lue */ #define TT_UCR_NEW_TAI_LUE (1L << 31) /* U+1980-U+19DF */ + + /* ulUnicodeRange4 */ + /* --------------- */ + /* Bit 96 Buginese */ #define TT_UCR_BUGINESE (1L << 0) /* U+1A00-U+1A1F */ /* Bit 97 Glagolitic */ @@ -1191,47 +1214,23 @@ FT_BEGIN_HEADER /*U+1F000-U+1F02F*/ /* Bit 123-127 Reserved for process-internal usage */ + /* */ - /*************************************************************************/ - /* */ - /* Some compilers have a very limited length of identifiers. */ - /* */ -#if defined( __TURBOC__ ) && __TURBOC__ < 0x0410 || defined( __PACIFIC__ ) -#define HAVE_LIMIT_ON_IDENTS -#endif + /* for backward compatibility with older FreeType versions */ +#define TT_UCR_ARABIC_PRESENTATION_A \ + TT_UCR_ARABIC_PRESENTATION_FORMS_A +#define TT_UCR_ARABIC_PRESENTATION_B \ + TT_UCR_ARABIC_PRESENTATION_FORMS_B - -#ifndef HAVE_LIMIT_ON_IDENTS - - - /*************************************************************************/ - /* */ - /* Here some alias #defines in order to be clearer. */ - /* */ - /* These are not always #defined to stay within the 31~character limit, */ - /* which some compilers have. */ - /* */ - /* Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern */ - /* Borland compilers (read: from BC++ 3.1 on) can increase this limit. */ - /* If you get a warning with such a compiler, use the -i40 switch. */ - /* */ -#define TT_UCR_ARABIC_PRESENTATION_FORMS_A \ - TT_UCR_ARABIC_PRESENTATIONS_A -#define TT_UCR_ARABIC_PRESENTATION_FORMS_B \ - TT_UCR_ARABIC_PRESENTATIONS_B - -#define TT_UCR_COMBINING_DIACRITICAL_MARKS \ - TT_UCR_COMBINING_DIACRITICS -#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \ - TT_UCR_COMBINING_DIACRITICS_SYMB - - -#endif /* !HAVE_LIMIT_ON_IDENTS */ +#define TT_UCR_COMBINING_DIACRITICS \ + TT_UCR_COMBINING_DIACRITICAL_MARKS +#define TT_UCR_COMBINING_DIACRITICS_SYMB \ + TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB FT_END_HEADER -#endif /* __TTNAMEID_H__ */ +#endif /* TTNAMEID_H_ */ /* END */ diff --git a/win32/include/freetype/freetype/tttables.h b/win32/include/freetype/freetype/tttables.h new file mode 100644 index 00000000..d04f8102 --- /dev/null +++ b/win32/include/freetype/freetype/tttables.h @@ -0,0 +1,856 @@ +/**************************************************************************** + * + * tttables.h + * + * Basic SFNT/TrueType tables definitions and interface + * (specification only). + * + * Copyright (C) 1996-2019 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 TTTABLES_H_ +#define TTTABLES_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * truetype_tables + * + * @title: + * TrueType Tables + * + * @abstract: + * TrueType-specific table types and functions. + * + * @description: + * This section contains definitions of some basic tables specific to + * TrueType and OpenType as well as some routines used to access and + * process them. + * + * @order: + * TT_Header + * TT_HoriHeader + * TT_VertHeader + * TT_OS2 + * TT_Postscript + * TT_PCLT + * TT_MaxProfile + * + * FT_Sfnt_Tag + * FT_Get_Sfnt_Table + * FT_Load_Sfnt_Table + * FT_Sfnt_Table_Info + * + * FT_Get_CMap_Language_ID + * FT_Get_CMap_Format + * + * FT_PARAM_TAG_UNPATENTED_HINTING + * + */ + + + /************************************************************************** + * + * @struct: + * TT_Header + * + * @description: + * A structure to model a TrueType font header table. All fields follow + * the OpenType specification. The 64-bit timestamps are stored in + * two-element arrays `Created` and `Modified`, first the upper then + * the lower 32~bits. + */ + typedef struct TT_Header_ + { + FT_Fixed Table_Version; + FT_Fixed Font_Revision; + + FT_Long CheckSum_Adjust; + FT_Long Magic_Number; + + FT_UShort Flags; + FT_UShort Units_Per_EM; + + FT_ULong Created [2]; + FT_ULong Modified[2]; + + FT_Short xMin; + FT_Short yMin; + FT_Short xMax; + FT_Short yMax; + + FT_UShort Mac_Style; + FT_UShort Lowest_Rec_PPEM; + + FT_Short Font_Direction; + FT_Short Index_To_Loc_Format; + FT_Short Glyph_Data_Format; + + } TT_Header; + + + /************************************************************************** + * + * @struct: + * TT_HoriHeader + * + * @description: + * A structure to model a TrueType horizontal header, the 'hhea' table, + * as well as the corresponding horizontal metrics table, 'hmtx'. + * + * @fields: + * Version :: + * The table version. + * + * Ascender :: + * The font's ascender, i.e., the distance from the baseline to the + * top-most of all glyph points found in the font. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoAscender` field of the 'OS/2' table instead + * if you want the correct one. + * + * Descender :: + * The font's descender, i.e., the distance from the baseline to the + * bottom-most of all glyph points found in the font. It is negative. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoDescender` field of the 'OS/2' table + * instead if you want the correct one. + * + * Line_Gap :: + * The font's line gap, i.e., the distance to add to the ascender and + * descender to get the BTB, i.e., the baseline-to-baseline distance + * for the font. + * + * advance_Width_Max :: + * This field is the maximum of all advance widths found in the font. + * It can be used to compute the maximum width of an arbitrary string + * of text. + * + * min_Left_Side_Bearing :: + * The minimum left side bearing of all glyphs within the font. + * + * min_Right_Side_Bearing :: + * The minimum right side bearing of all glyphs within the font. + * + * xMax_Extent :: + * The maximum horizontal extent (i.e., the 'width' of a glyph's + * bounding box) for all glyphs in the font. + * + * caret_Slope_Rise :: + * The rise coefficient of the cursor's slope of the cursor + * (slope=rise/run). + * + * caret_Slope_Run :: + * The run coefficient of the cursor's slope. + * + * caret_Offset :: + * The cursor's offset for slanted fonts. + * + * Reserved :: + * 8~reserved bytes. + * + * metric_Data_Format :: + * Always~0. + * + * number_Of_HMetrics :: + * Number of HMetrics entries in the 'hmtx' table -- this value can be + * smaller than the total number of glyphs in the font. + * + * long_metrics :: + * A pointer into the 'hmtx' table. + * + * short_metrics :: + * A pointer into the 'hmtx' table. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `caret_Slope_Rise`, + * `caret_Slope_Run`, and `caret_Offset`. + */ + typedef struct TT_HoriHeader_ + { + FT_Fixed Version; + FT_Short Ascender; + FT_Short Descender; + FT_Short Line_Gap; + + FT_UShort advance_Width_Max; /* advance width maximum */ + + FT_Short min_Left_Side_Bearing; /* minimum left-sb */ + FT_Short min_Right_Side_Bearing; /* minimum right-sb */ + FT_Short xMax_Extent; /* xmax extents */ + FT_Short caret_Slope_Rise; + FT_Short caret_Slope_Run; + FT_Short caret_Offset; + + FT_Short Reserved[4]; + + FT_Short metric_Data_Format; + FT_UShort number_Of_HMetrics; + + /* The following fields are not defined by the OpenType specification */ + /* but they are used to connect the metrics header to the relevant */ + /* 'hmtx' table. */ + + void* long_metrics; + void* short_metrics; + + } TT_HoriHeader; + + + /************************************************************************** + * + * @struct: + * TT_VertHeader + * + * @description: + * A structure used to model a TrueType vertical header, the 'vhea' + * table, as well as the corresponding vertical metrics table, 'vmtx'. + * + * @fields: + * Version :: + * The table version. + * + * Ascender :: + * The font's ascender, i.e., the distance from the baseline to the + * top-most of all glyph points found in the font. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoAscender` field of the 'OS/2' table instead + * if you want the correct one. + * + * Descender :: + * The font's descender, i.e., the distance from the baseline to the + * bottom-most of all glyph points found in the font. It is negative. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoDescender` field of the 'OS/2' table + * instead if you want the correct one. + * + * Line_Gap :: + * The font's line gap, i.e., the distance to add to the ascender and + * descender to get the BTB, i.e., the baseline-to-baseline distance + * for the font. + * + * advance_Height_Max :: + * This field is the maximum of all advance heights found in the font. + * It can be used to compute the maximum height of an arbitrary string + * of text. + * + * min_Top_Side_Bearing :: + * The minimum top side bearing of all glyphs within the font. + * + * min_Bottom_Side_Bearing :: + * The minimum bottom side bearing of all glyphs within the font. + * + * yMax_Extent :: + * The maximum vertical extent (i.e., the 'height' of a glyph's + * bounding box) for all glyphs in the font. + * + * caret_Slope_Rise :: + * The rise coefficient of the cursor's slope of the cursor + * (slope=rise/run). + * + * caret_Slope_Run :: + * The run coefficient of the cursor's slope. + * + * caret_Offset :: + * The cursor's offset for slanted fonts. + * + * Reserved :: + * 8~reserved bytes. + * + * metric_Data_Format :: + * Always~0. + * + * number_Of_VMetrics :: + * Number of VMetrics entries in the 'vmtx' table -- this value can be + * smaller than the total number of glyphs in the font. + * + * long_metrics :: + * A pointer into the 'vmtx' table. + * + * short_metrics :: + * A pointer into the 'vmtx' table. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `Ascender`, `Descender`, + * `Line_Gap`, `caret_Slope_Rise`, `caret_Slope_Run`, and `caret_Offset`. + */ + typedef struct TT_VertHeader_ + { + FT_Fixed Version; + FT_Short Ascender; + FT_Short Descender; + FT_Short Line_Gap; + + FT_UShort advance_Height_Max; /* advance height maximum */ + + FT_Short min_Top_Side_Bearing; /* minimum top-sb */ + FT_Short min_Bottom_Side_Bearing; /* minimum bottom-sb */ + FT_Short yMax_Extent; /* ymax extents */ + FT_Short caret_Slope_Rise; + FT_Short caret_Slope_Run; + FT_Short caret_Offset; + + FT_Short Reserved[4]; + + FT_Short metric_Data_Format; + FT_UShort number_Of_VMetrics; + + /* The following fields are not defined by the OpenType specification */ + /* but they are used to connect the metrics header to the relevant */ + /* 'vmtx' table. */ + + void* long_metrics; + void* short_metrics; + + } TT_VertHeader; + + + /************************************************************************** + * + * @struct: + * TT_OS2 + * + * @description: + * A structure to model a TrueType 'OS/2' table. All fields comply to + * the OpenType specification. + * + * Note that we now support old Mac fonts that do not include an 'OS/2' + * table. In this case, the `version` field is always set to 0xFFFF. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `sCapHeight`, `sTypoAscender`, + * `sTypoDescender`, `sTypoLineGap`, `sxHeight`, `usWinAscent`, + * `usWinDescent`, `yStrikeoutPosition`, `yStrikeoutSize`, + * `ySubscriptXOffset`, `ySubScriptXSize`, `ySubscriptYOffset`, + * `ySubscriptYSize`, `ySuperscriptXOffset`, `ySuperscriptXSize`, + * `ySuperscriptYOffset`, and `ySuperscriptYSize`. + * + * Possible values for bits in the `ulUnicodeRangeX` fields are given by + * the @TT_UCR_XXX macros. + */ + + typedef struct TT_OS2_ + { + FT_UShort version; /* 0x0001 - more or 0xFFFF */ + FT_Short xAvgCharWidth; + FT_UShort usWeightClass; + FT_UShort usWidthClass; + FT_UShort fsType; + FT_Short ySubscriptXSize; + FT_Short ySubscriptYSize; + FT_Short ySubscriptXOffset; + FT_Short ySubscriptYOffset; + FT_Short ySuperscriptXSize; + FT_Short ySuperscriptYSize; + FT_Short ySuperscriptXOffset; + FT_Short ySuperscriptYOffset; + FT_Short yStrikeoutSize; + FT_Short yStrikeoutPosition; + FT_Short sFamilyClass; + + FT_Byte panose[10]; + + FT_ULong ulUnicodeRange1; /* Bits 0-31 */ + FT_ULong ulUnicodeRange2; /* Bits 32-63 */ + FT_ULong ulUnicodeRange3; /* Bits 64-95 */ + FT_ULong ulUnicodeRange4; /* Bits 96-127 */ + + FT_Char achVendID[4]; + + FT_UShort fsSelection; + FT_UShort usFirstCharIndex; + FT_UShort usLastCharIndex; + FT_Short sTypoAscender; + FT_Short sTypoDescender; + FT_Short sTypoLineGap; + FT_UShort usWinAscent; + FT_UShort usWinDescent; + + /* only version 1 and higher: */ + + FT_ULong ulCodePageRange1; /* Bits 0-31 */ + FT_ULong ulCodePageRange2; /* Bits 32-63 */ + + /* only version 2 and higher: */ + + FT_Short sxHeight; + FT_Short sCapHeight; + FT_UShort usDefaultChar; + FT_UShort usBreakChar; + FT_UShort usMaxContext; + + /* only version 5 and higher: */ + + FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */ + FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */ + + } TT_OS2; + + + /************************************************************************** + * + * @struct: + * TT_Postscript + * + * @description: + * A structure to model a TrueType 'post' table. All fields comply to + * the OpenType specification. This structure does not reference a + * font's PostScript glyph names; use @FT_Get_Glyph_Name to retrieve + * them. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `underlinePosition` and + * `underlineThickness`. + */ + typedef struct TT_Postscript_ + { + FT_Fixed FormatType; + FT_Fixed italicAngle; + FT_Short underlinePosition; + FT_Short underlineThickness; + FT_ULong isFixedPitch; + FT_ULong minMemType42; + FT_ULong maxMemType42; + FT_ULong minMemType1; + FT_ULong maxMemType1; + + /* Glyph names follow in the 'post' table, but we don't */ + /* load them by default. */ + + } TT_Postscript; + + + /************************************************************************** + * + * @struct: + * TT_PCLT + * + * @description: + * A structure to model a TrueType 'PCLT' table. All fields comply to + * the OpenType specification. + */ + typedef struct TT_PCLT_ + { + FT_Fixed Version; + FT_ULong FontNumber; + FT_UShort Pitch; + FT_UShort xHeight; + FT_UShort Style; + FT_UShort TypeFamily; + FT_UShort CapHeight; + FT_UShort SymbolSet; + FT_Char TypeFace[16]; + FT_Char CharacterComplement[8]; + FT_Char FileName[6]; + FT_Char StrokeWeight; + FT_Char WidthType; + FT_Byte SerifStyle; + FT_Byte Reserved; + + } TT_PCLT; + + + /************************************************************************** + * + * @struct: + * TT_MaxProfile + * + * @description: + * The maximum profile ('maxp') table contains many max values, which can + * be used to pre-allocate arrays for speeding up glyph loading and + * hinting. + * + * @fields: + * version :: + * The version number. + * + * numGlyphs :: + * The number of glyphs in this TrueType font. + * + * maxPoints :: + * The maximum number of points in a non-composite TrueType glyph. See + * also `maxCompositePoints`. + * + * maxContours :: + * The maximum number of contours in a non-composite TrueType glyph. + * See also `maxCompositeContours`. + * + * maxCompositePoints :: + * The maximum number of points in a composite TrueType glyph. See + * also `maxPoints`. + * + * maxCompositeContours :: + * The maximum number of contours in a composite TrueType glyph. See + * also `maxContours`. + * + * maxZones :: + * The maximum number of zones used for glyph hinting. + * + * maxTwilightPoints :: + * The maximum number of points in the twilight zone used for glyph + * hinting. + * + * maxStorage :: + * The maximum number of elements in the storage area used for glyph + * hinting. + * + * maxFunctionDefs :: + * The maximum number of function definitions in the TrueType bytecode + * for this font. + * + * maxInstructionDefs :: + * The maximum number of instruction definitions in the TrueType + * bytecode for this font. + * + * maxStackElements :: + * The maximum number of stack elements used during bytecode + * interpretation. + * + * maxSizeOfInstructions :: + * The maximum number of TrueType opcodes used for glyph hinting. + * + * maxComponentElements :: + * The maximum number of simple (i.e., non-composite) glyphs in a + * composite glyph. + * + * maxComponentDepth :: + * The maximum nesting depth of composite glyphs. + * + * @note: + * This structure is only used during font loading. + */ + typedef struct TT_MaxProfile_ + { + FT_Fixed version; + FT_UShort numGlyphs; + FT_UShort maxPoints; + FT_UShort maxContours; + FT_UShort maxCompositePoints; + FT_UShort maxCompositeContours; + FT_UShort maxZones; + FT_UShort maxTwilightPoints; + FT_UShort maxStorage; + FT_UShort maxFunctionDefs; + FT_UShort maxInstructionDefs; + FT_UShort maxStackElements; + FT_UShort maxSizeOfInstructions; + FT_UShort maxComponentElements; + FT_UShort maxComponentDepth; + + } TT_MaxProfile; + + + /************************************************************************** + * + * @enum: + * FT_Sfnt_Tag + * + * @description: + * An enumeration to specify indices of SFNT tables loaded and parsed by + * FreeType during initialization of an SFNT font. Used in the + * @FT_Get_Sfnt_Table API function. + * + * @values: + * FT_SFNT_HEAD :: + * To access the font's @TT_Header structure. + * + * FT_SFNT_MAXP :: + * To access the font's @TT_MaxProfile structure. + * + * FT_SFNT_OS2 :: + * To access the font's @TT_OS2 structure. + * + * FT_SFNT_HHEA :: + * To access the font's @TT_HoriHeader structure. + * + * FT_SFNT_VHEA :: + * To access the font's @TT_VertHeader structure. + * + * FT_SFNT_POST :: + * To access the font's @TT_Postscript structure. + * + * FT_SFNT_PCLT :: + * To access the font's @TT_PCLT structure. + */ + typedef enum FT_Sfnt_Tag_ + { + FT_SFNT_HEAD, + FT_SFNT_MAXP, + FT_SFNT_OS2, + FT_SFNT_HHEA, + FT_SFNT_VHEA, + FT_SFNT_POST, + FT_SFNT_PCLT, + + FT_SFNT_MAX + + } FT_Sfnt_Tag; + + /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag` */ + /* values instead */ +#define ft_sfnt_head FT_SFNT_HEAD +#define ft_sfnt_maxp FT_SFNT_MAXP +#define ft_sfnt_os2 FT_SFNT_OS2 +#define ft_sfnt_hhea FT_SFNT_HHEA +#define ft_sfnt_vhea FT_SFNT_VHEA +#define ft_sfnt_post FT_SFNT_POST +#define ft_sfnt_pclt FT_SFNT_PCLT + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Table + * + * @description: + * Return a pointer to a given SFNT table stored within a face. + * + * @input: + * face :: + * A handle to the source. + * + * tag :: + * The index of the SFNT table. + * + * @return: + * A type-less pointer to the table. This will be `NULL` in case of + * error, or if the corresponding table was not found **OR** loaded from + * the file. + * + * Use a typecast according to `tag` to access the structure elements. + * + * @note: + * The table is owned by the face object and disappears with it. + * + * This function is only useful to access SFNT tables that are loaded by + * the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for a + * list. + * + * @example: + * Here is an example demonstrating access to the 'vhea' table. + * + * ``` + * TT_VertHeader* vert_header; + * + * + * vert_header = + * (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); + * ``` + */ + FT_EXPORT( void* ) + FT_Get_Sfnt_Table( FT_Face face, + FT_Sfnt_Tag tag ); + + + /************************************************************************** + * + * @function: + * FT_Load_Sfnt_Table + * + * @description: + * Load any SFNT font table into client memory. + * + * @input: + * face :: + * A handle to the source face. + * + * tag :: + * The four-byte tag of the table to load. Use value~0 if you want to + * access the whole font file. Otherwise, you can use one of the + * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new + * one with @FT_MAKE_TAG. + * + * offset :: + * The starting offset in the table (or file if tag~==~0). + * + * @output: + * buffer :: + * The target buffer address. The client must ensure that the memory + * array is big enough to hold the data. + * + * @inout: + * length :: + * If the `length` parameter is `NULL`, try to load the whole table. + * Return an error code if it fails. + * + * Else, if `*length` is~0, exit immediately while returning the + * table's (or file) full size in it. + * + * Else the number of bytes to read from the table or file, from the + * starting offset. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If you need to determine the table's length you should first call this + * function with `*length` set to~0, as in the following example: + * + * ``` + * FT_ULong length = 0; + * + * + * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); + * if ( error ) { ... table does not exist ... } + * + * buffer = malloc( length ); + * if ( buffer == NULL ) { ... not enough memory ... } + * + * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); + * if ( error ) { ... could not load table ... } + * ``` + * + * Note that structures like @TT_Header or @TT_OS2 can't be used with + * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that + * those structures depend on the processor architecture, with varying + * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). + * + */ + FT_EXPORT( FT_Error ) + FT_Load_Sfnt_Table( FT_Face face, + FT_ULong tag, + FT_Long offset, + FT_Byte* buffer, + FT_ULong* length ); + + + /************************************************************************** + * + * @function: + * FT_Sfnt_Table_Info + * + * @description: + * Return information on an SFNT table. + * + * @input: + * face :: + * A handle to the source face. + * + * table_index :: + * The index of an SFNT table. The function returns + * FT_Err_Table_Missing for an invalid value. + * + * @inout: + * tag :: + * The name tag of the SFNT table. If the value is `NULL`, + * `table_index` is ignored, and `length` returns the number of SFNT + * tables in the font. + * + * @output: + * length :: + * The length of the SFNT table (or the number of SFNT tables, + * depending on `tag`). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * While parsing fonts, FreeType handles SFNT tables with length zero as + * missing. + * + */ + FT_EXPORT( FT_Error ) + FT_Sfnt_Table_Info( FT_Face face, + FT_UInt table_index, + FT_ULong *tag, + FT_ULong *length ); + + + /************************************************************************** + * + * @function: + * FT_Get_CMap_Language_ID + * + * @description: + * Return cmap language ID as specified in the OpenType standard. + * Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. + * + * @input: + * charmap :: + * The target charmap. + * + * @return: + * The language ID of `charmap`. If `charmap` doesn't belong to an SFNT + * face, just return~0 as the default value. + * + * For a format~14 cmap (to access Unicode IVS), the return value is + * 0xFFFFFFFF. + */ + FT_EXPORT( FT_ULong ) + FT_Get_CMap_Language_ID( FT_CharMap charmap ); + + + /************************************************************************** + * + * @function: + * FT_Get_CMap_Format + * + * @description: + * Return the format of an SFNT 'cmap' table. + * + * @input: + * charmap :: + * The target charmap. + * + * @return: + * The format of `charmap`. If `charmap` doesn't belong to an SFNT face, + * return -1. + */ + FT_EXPORT( FT_Long ) + FT_Get_CMap_Format( FT_CharMap charmap ); + + /* */ + + +FT_END_HEADER + +#endif /* TTTABLES_H_ */ + + +/* END */ diff --git a/win32/include/freetype/tttags.h b/win32/include/freetype/freetype/tttags.h similarity index 76% rename from win32/include/freetype/tttags.h rename to win32/include/freetype/freetype/tttags.h index 3836c7bb..bd0986ef 100644 --- a/win32/include/freetype/tttags.h +++ b/win32/include/freetype/freetype/tttags.h @@ -1,23 +1,23 @@ -/***************************************************************************/ -/* */ -/* tttags.h */ -/* */ -/* Tags for TrueType and OpenType tables (specification only). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * tttags.h + * + * Tags for TrueType and OpenType tables (specification only). + * + * Copyright (C) 1996-2019 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 __TTAGS_H__ -#define __TTAGS_H__ +#ifndef TTAGS_H_ +#define TTAGS_H_ #include <ft2build.h> @@ -43,8 +43,11 @@ FT_BEGIN_HEADER #define TTAG_CBDT FT_MAKE_TAG( 'C', 'B', 'D', 'T' ) #define TTAG_CBLC FT_MAKE_TAG( 'C', 'B', 'L', 'C' ) #define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' ) +#define TTAG_CFF2 FT_MAKE_TAG( 'C', 'F', 'F', '2' ) #define TTAG_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' ) #define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' ) +#define TTAG_COLR FT_MAKE_TAG( 'C', 'O', 'L', 'R' ) +#define TTAG_CPAL FT_MAKE_TAG( 'C', 'P', 'A', 'L' ) #define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' ) #define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' ) #define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' ) @@ -61,6 +64,7 @@ FT_BEGIN_HEADER #define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' ) #define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' ) #define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' ) +#define TTAG_HVAR FT_MAKE_TAG( 'H', 'V', 'A', 'R' ) #define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' ) #define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' ) #define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' ) @@ -79,6 +83,7 @@ FT_BEGIN_HEADER #define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' ) #define TTAG_mort FT_MAKE_TAG( 'm', 'o', 'r', 't' ) #define TTAG_morx FT_MAKE_TAG( 'm', 'o', 'r', 'x' ) +#define TTAG_MVAR FT_MAKE_TAG( 'M', 'V', 'A', 'R' ) #define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' ) #define TTAG_opbd FT_MAKE_TAG( 'o', 'p', 'b', 'd' ) #define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' ) @@ -100,12 +105,19 @@ FT_BEGIN_HEADER #define TTAG_VDMX FT_MAKE_TAG( 'V', 'D', 'M', 'X' ) #define TTAG_vhea FT_MAKE_TAG( 'v', 'h', 'e', 'a' ) #define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' ) +#define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' ) #define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' ) +/* used by "Keyboard.dfont" on legacy Mac OS X */ +#define TTAG_0xA5kbd FT_MAKE_TAG( 0xA5, 'k', 'b', 'd' ) + +/* used by "LastResort.dfont" on legacy Mac OS X */ +#define TTAG_0xA5lst FT_MAKE_TAG( 0xA5, 'l', 's', 't' ) + FT_END_HEADER -#endif /* __TTAGS_H__ */ +#endif /* TTAGS_H_ */ /* END */ diff --git a/win32/include/freetype/ft2build.h b/win32/include/freetype/ft2build.h index 824c62ed..e3f48879 100644 --- a/win32/include/freetype/ft2build.h +++ b/win32/include/freetype/ft2build.h @@ -1,42 +1,44 @@ -/***************************************************************************/ -/* */ -/* ft2build.h */ -/* */ -/* FreeType 2 build and setup macros. */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ft2build.h + * + * FreeType 2 build and setup macros. + * + * Copyright (C) 1996-2019 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. + * + */ - /*************************************************************************/ - /* */ - /* This is the `entry point' for FreeType header file inclusions. It is */ - /* the only header file which should be included directly; all other */ - /* FreeType header files should be accessed with macro names (after */ - /* including `ft2build.h'). */ - /* */ - /* A typical example is */ - /* */ - /* #include <ft2build.h> */ - /* #include FT_FREETYPE_H */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * This is the 'entry point' for FreeType header file inclusions. It is + * the only header file which should be included directly; all other + * FreeType header files should be accessed with macro names (after + * including `ft2build.h`). + * + * A typical example is + * + * ``` + * #include <ft2build.h> + * #include FT_FREETYPE_H + * ``` + * + */ -#ifndef __FT2BUILD_H__ -#define __FT2BUILD_H__ +#ifndef FT2BUILD_H_ +#define FT2BUILD_H_ -#include "config/ftheader.h" +#include <freetype/config/ftheader.h> -#endif /* __FT2BUILD_H__ */ +#endif /* FT2BUILD_H_ */ /* END */ diff --git a/win32/include/freetype/ftadvanc.h b/win32/include/freetype/ftadvanc.h deleted file mode 100644 index b4d2aed5..00000000 --- a/win32/include/freetype/ftadvanc.h +++ /dev/null @@ -1,187 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftadvanc.h */ -/* */ -/* Quick computation of advance widths (specification only). */ -/* */ -/* Copyright 2008-2015 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 __FTADVANC_H__ -#define __FTADVANC_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * @section: - * quick_advance - * - * @title: - * Quick retrieval of advance values - * - * @abstract: - * Retrieve horizontal and vertical advance values without processing - * glyph outlines, if possible. - * - * @description: - * This section contains functions to quickly extract advance values - * without handling glyph outlines, if possible. - * - * @order: - * FT_Get_Advance - * FT_Get_Advances - * - */ - - - /*************************************************************************/ - /* */ - /* <Const> */ - /* FT_ADVANCE_FLAG_FAST_ONLY */ - /* */ - /* <Description> */ - /* A bit-flag to be OR-ed with the `flags' parameter of the */ - /* @FT_Get_Advance and @FT_Get_Advances functions. */ - /* */ - /* If set, it indicates that you want these functions to fail if the */ - /* corresponding hinting mode or font driver doesn't allow for very */ - /* quick advance computation. */ - /* */ - /* Typically, glyphs that are either unscaled, unhinted, bitmapped, */ - /* or light-hinted can have their advance width computed very */ - /* quickly. */ - /* */ - /* Normal and bytecode hinted modes that require loading, scaling, */ - /* and hinting of the glyph outline, are extremely slow by */ - /* comparison. */ - /* */ -#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Advance */ - /* */ - /* <Description> */ - /* Retrieve the advance value of a given glyph outline in an */ - /* @FT_Face. */ - /* */ - /* <Input> */ - /* face :: The source @FT_Face handle. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* load_flags :: A set of bit flags similar to those used when */ - /* calling @FT_Load_Glyph, used to determine what kind */ - /* of advances you need. */ - /* <Output> */ - /* padvance :: The advance value. If scaling is performed (based on */ - /* the value of `load_flags'), the advance value is in */ - /* 16.16 format. Otherwise, it is in font units. */ - /* */ - /* If @FT_LOAD_VERTICAL_LAYOUT is set, this is the */ - /* vertical advance corresponding to a vertical layout. */ - /* Otherwise, it is the horizontal advance in a */ - /* horizontal layout. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */ - /* if the corresponding font backend doesn't have a quick way to */ - /* retrieve the advances. */ - /* */ - /* A scaled advance is returned in 16.16 format but isn't transformed */ - /* by the affine transformation specified by @FT_Set_Transform. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Advance( FT_Face face, - FT_UInt gindex, - FT_Int32 load_flags, - FT_Fixed *padvance ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Advances */ - /* */ - /* <Description> */ - /* Retrieve the advance values of several glyph outlines in an */ - /* @FT_Face. */ - /* */ - /* <Input> */ - /* face :: The source @FT_Face handle. */ - /* */ - /* start :: The first glyph index. */ - /* */ - /* count :: The number of advance values you want to retrieve. */ - /* */ - /* load_flags :: A set of bit flags similar to those used when */ - /* calling @FT_Load_Glyph. */ - /* */ - /* <Output> */ - /* padvance :: The advance values. This array, to be provided by the */ - /* caller, must contain at least `count' elements. */ - /* */ - /* If scaling is performed (based on the value of */ - /* `load_flags'), the advance values are in 16.16 format. */ - /* Otherwise, they are in font units. */ - /* */ - /* If @FT_LOAD_VERTICAL_LAYOUT is set, these are the */ - /* vertical advances corresponding to a vertical layout. */ - /* Otherwise, they are the horizontal advances in a */ - /* horizontal layout. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */ - /* if the corresponding font backend doesn't have a quick way to */ - /* retrieve the advances. */ - /* */ - /* Scaled advances are returned in 16.16 format but aren't */ - /* transformed by the affine transformation specified by */ - /* @FT_Set_Transform. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Advances( FT_Face face, - FT_UInt start, - FT_UInt count, - FT_Int32 load_flags, - FT_Fixed *padvances ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTADVANC_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftautoh.h b/win32/include/freetype/ftautoh.h deleted file mode 100644 index d0f6445e..00000000 --- a/win32/include/freetype/ftautoh.h +++ /dev/null @@ -1,503 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftautoh.h */ -/* */ -/* FreeType API for controlling the auto-hinter (specification only). */ -/* */ -/* Copyright 2012-2015 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 __FTAUTOH_H__ -#define __FTAUTOH_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * @section: - * auto_hinter - * - * @title: - * The auto-hinter - * - * @abstract: - * Controlling the auto-hinting module. - * - * @description: - * While FreeType's auto-hinter doesn't expose API functions by itself, - * it is possible to control its behaviour with @FT_Property_Set and - * @FT_Property_Get. The following lists the available properties - * together with the necessary macros and structures. - * - * Note that the auto-hinter's module name is `autofitter' for - * historical reasons. - * - */ - - - /************************************************************************** - * - * @property: - * glyph-to-script-map - * - * @description: - * *Experimental* *only* - * - * The auto-hinter provides various script modules to hint glyphs. - * Examples of supported scripts are Latin or CJK. Before a glyph is - * auto-hinted, the Unicode character map of the font gets examined, and - * the script is then determined based on Unicode character ranges, see - * below. - * - * OpenType fonts, however, often provide much more glyphs than - * character codes (small caps, superscripts, ligatures, swashes, etc.), - * to be controlled by so-called `features'. Handling OpenType features - * can be quite complicated and thus needs a separate library on top of - * FreeType. - * - * The mapping between glyph indices and scripts (in the auto-hinter - * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an - * array with `num_glyphs' elements, as found in the font's @FT_Face - * structure. The `glyph-to-script-map' property returns a pointer to - * this array, which can be modified as needed. Note that the - * modification should happen before the first glyph gets processed by - * the auto-hinter so that the global analysis of the font shapes - * actually uses the modified mapping. - * - * The following example code demonstrates how to access it (omitting - * the error handling). - * - * { - * FT_Library library; - * FT_Face face; - * FT_Prop_GlyphToScriptMap prop; - * - * - * FT_Init_FreeType( &library ); - * FT_New_Face( library, "foo.ttf", 0, &face ); - * - * prop.face = face; - * - * FT_Property_Get( library, "autofitter", - * "glyph-to-script-map", &prop ); - * - * // adjust `prop.map' as needed right here - * - * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT ); - * } - * - */ - - - /************************************************************************** - * - * @enum: - * FT_AUTOHINTER_SCRIPT_XXX - * - * @description: - * *Experimental* *only* - * - * A list of constants used for the @glyph-to-script-map property to - * specify the script submodule the auto-hinter should use for hinting a - * particular glyph. - * - * @values: - * FT_AUTOHINTER_SCRIPT_NONE :: - * Don't auto-hint this glyph. - * - * FT_AUTOHINTER_SCRIPT_LATIN :: - * Apply the latin auto-hinter. For the auto-hinter, `latin' is a - * very broad term, including Cyrillic and Greek also since characters - * from those scripts share the same design constraints. - * - * By default, characters from the following Unicode ranges are - * assigned to this submodule. - * - * { - * U+0020 - U+007F // Basic Latin (no control characters) - * U+00A0 - U+00FF // Latin-1 Supplement (no control characters) - * U+0100 - U+017F // Latin Extended-A - * U+0180 - U+024F // Latin Extended-B - * U+0250 - U+02AF // IPA Extensions - * U+02B0 - U+02FF // Spacing Modifier Letters - * U+0300 - U+036F // Combining Diacritical Marks - * U+0370 - U+03FF // Greek and Coptic - * U+0400 - U+04FF // Cyrillic - * U+0500 - U+052F // Cyrillic Supplement - * U+1D00 - U+1D7F // Phonetic Extensions - * U+1D80 - U+1DBF // Phonetic Extensions Supplement - * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement - * U+1E00 - U+1EFF // Latin Extended Additional - * U+1F00 - U+1FFF // Greek Extended - * U+2000 - U+206F // General Punctuation - * U+2070 - U+209F // Superscripts and Subscripts - * U+20A0 - U+20CF // Currency Symbols - * U+2150 - U+218F // Number Forms - * U+2460 - U+24FF // Enclosed Alphanumerics - * U+2C60 - U+2C7F // Latin Extended-C - * U+2DE0 - U+2DFF // Cyrillic Extended-A - * U+2E00 - U+2E7F // Supplemental Punctuation - * U+A640 - U+A69F // Cyrillic Extended-B - * U+A720 - U+A7FF // Latin Extended-D - * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) - * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols - * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement - * } - * - * FT_AUTOHINTER_SCRIPT_CJK :: - * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old - * Vietnamese, and some other scripts. - * - * By default, characters from the following Unicode ranges are - * assigned to this submodule. - * - * { - * U+1100 - U+11FF // Hangul Jamo - * U+2E80 - U+2EFF // CJK Radicals Supplement - * U+2F00 - U+2FDF // Kangxi Radicals - * U+2FF0 - U+2FFF // Ideographic Description Characters - * U+3000 - U+303F // CJK Symbols and Punctuation - * U+3040 - U+309F // Hiragana - * U+30A0 - U+30FF // Katakana - * U+3100 - U+312F // Bopomofo - * U+3130 - U+318F // Hangul Compatibility Jamo - * U+3190 - U+319F // Kanbun - * U+31A0 - U+31BF // Bopomofo Extended - * U+31C0 - U+31EF // CJK Strokes - * U+31F0 - U+31FF // Katakana Phonetic Extensions - * U+3200 - U+32FF // Enclosed CJK Letters and Months - * U+3300 - U+33FF // CJK Compatibility - * U+3400 - U+4DBF // CJK Unified Ideographs Extension A - * U+4DC0 - U+4DFF // Yijing Hexagram Symbols - * U+4E00 - U+9FFF // CJK Unified Ideographs - * U+A960 - U+A97F // Hangul Jamo Extended-A - * U+AC00 - U+D7AF // Hangul Syllables - * U+D7B0 - U+D7FF // Hangul Jamo Extended-B - * U+F900 - U+FAFF // CJK Compatibility Ideographs - * U+FE10 - U+FE1F // Vertical forms - * U+FE30 - U+FE4F // CJK Compatibility Forms - * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms - * U+1B000 - U+1B0FF // Kana Supplement - * U+1D300 - U+1D35F // Tai Xuan Hing Symbols - * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement - * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B - * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C - * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D - * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement - * } - * - * FT_AUTOHINTER_SCRIPT_INDIC :: - * Apply the indic auto-hinter, covering all major scripts from the - * Indian sub-continent and some other related scripts like Thai, Lao, - * or Tibetan. - * - * By default, characters from the following Unicode ranges are - * assigned to this submodule. - * - * { - * U+0900 - U+0DFF // Indic Range - * U+0F00 - U+0FFF // Tibetan - * U+1900 - U+194F // Limbu - * U+1B80 - U+1BBF // Sundanese - * U+1C80 - U+1CDF // Meetei Mayak - * U+A800 - U+A82F // Syloti Nagri - * U+11800 - U+118DF // Sharada - * } - * - * Note that currently Indic support is rudimentary only, missing blue - * zone support. - * - */ -#define FT_AUTOHINTER_SCRIPT_NONE 0 -#define FT_AUTOHINTER_SCRIPT_LATIN 1 -#define FT_AUTOHINTER_SCRIPT_CJK 2 -#define FT_AUTOHINTER_SCRIPT_INDIC 3 - - - /************************************************************************** - * - * @struct: - * FT_Prop_GlyphToScriptMap - * - * @description: - * *Experimental* *only* - * - * The data exchange structure for the @glyph-to-script-map property. - * - */ - typedef struct FT_Prop_GlyphToScriptMap_ - { - FT_Face face; - FT_UShort* map; - - } FT_Prop_GlyphToScriptMap; - - - /************************************************************************** - * - * @property: - * fallback-script - * - * @description: - * *Experimental* *only* - * - * If no auto-hinter script module can be assigned to a glyph, a - * fallback script gets assigned to it (see also the - * @glyph-to-script-map property). By default, this is - * @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property, - * this fallback value can be changed. - * - * { - * FT_Library library; - * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "autofitter", - * "fallback-script", &fallback_script ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * It's important to use the right timing for changing this value: The - * creation of the glyph-to-script map that eventually uses the - * fallback script value gets triggered either by setting or reading a - * face-specific property like @glyph-to-script-map, or by auto-hinting - * any glyph from that face. In particular, if you have already created - * an @FT_Face structure but not loaded any glyph (using the - * auto-hinter), a change of the fallback script will affect this face. - * - */ - - - /************************************************************************** - * - * @property: - * default-script - * - * @description: - * *Experimental* *only* - * - * If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make - * the HarfBuzz library access OpenType features for getting better - * glyph coverages, this property sets the (auto-fitter) script to be - * used for the default (OpenType) script data of a font's GSUB table. - * Features for the default script are intended for all scripts not - * explicitly handled in GSUB; an example is a `dlig' feature, - * containing the combination of the characters `T', `E', and `L' to - * form a `TEL' ligature. - * - * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the - * `default-script' property, this default value can be changed. - * - * { - * FT_Library library; - * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "autofitter", - * "default-script", &default_script ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * It's important to use the right timing for changing this value: The - * creation of the glyph-to-script map that eventually uses the - * default script value gets triggered either by setting or reading a - * face-specific property like @glyph-to-script-map, or by auto-hinting - * any glyph from that face. In particular, if you have already created - * an @FT_Face structure but not loaded any glyph (using the - * auto-hinter), a change of the default script will affect this face. - * - */ - - - /************************************************************************** - * - * @property: - * increase-x-height - * - * @description: - * For ppem values in the range 6~<= ppem <= `increase-x-height', round - * up the font's x~height much more often than normally. If the value - * is set to~0, which is the default, this feature is switched off. Use - * this property to improve the legibility of small font sizes if - * necessary. - * - * { - * FT_Library library; - * FT_Face face; - * FT_Prop_IncreaseXHeight prop; - * - * - * FT_Init_FreeType( &library ); - * FT_New_Face( library, "foo.ttf", 0, &face ); - * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 ); - * - * prop.face = face; - * prop.limit = 14; - * - * FT_Property_Set( library, "autofitter", - * "increase-x-height", &prop ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * Set this value right after calling @FT_Set_Char_Size, but before - * loading any glyph (using the auto-hinter). - * - */ - - - /************************************************************************** - * - * @struct: - * FT_Prop_IncreaseXHeight - * - * @description: - * The data exchange structure for the @increase-x-height property. - * - */ - typedef struct FT_Prop_IncreaseXHeight_ - { - FT_Face face; - FT_UInt limit; - - } FT_Prop_IncreaseXHeight; - - - /************************************************************************** - * - * @property: - * warping - * - * @description: - * *Experimental* *only* - * - * 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. - * - * Warping only works in `light' auto-hinting mode. The idea of the - * code is 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 out a - * glyph's optimal scaling and shifting value, various parameter - * combinations are tried and scored. - * - * By default, warping is off. The example below 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 ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * 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 `light' hinting mode. - * - */ - - - /************************************************************************** - * - * @property: - * no-stem-darkening[autofit] - * - * @description: - * *Experimental* *only,* *requires* *linear* *alpha* *blending* *and* - * *gamma* *correction* - * - * Stem darkening emboldens glyphs at smaller sizes to make them more - * readable on common low-DPI screens when using linear alpha blending - * and gamma correction, see @FT_Render_Glyph. When not using linear - * alpha blending and gamma correction, glyphs will appear heavy and - * fuzzy! - * - * Gamma correction essentially lightens fonts since shades of grey are - * shifted to higher pixel values (=~higher brightness) to match the - * original intention to the reality of our screens. The side-effect is - * that glyphs `thin out'. Mac OS~X and Adobe's proprietary font - * rendering library implement a counter-measure: stem darkening at - * smaller sizes where shades of gray dominate. By emboldening a glyph - * slightly in relation to its pixel size, individual pixels get higher - * coverage of filled-in outlines and are therefore `blacker'. This - * counteracts the `thinning out' of glyphs, making text remain readable - * at smaller sizes. All glyphs that pass through the auto-hinter will - * be emboldened unless this property is set to TRUE. - * - * See the description of the CFF driver for algorithmic details. Total - * consistency with the CFF driver is currently not achieved because the - * emboldening method differs and glyphs must be scaled down on the - * Y-axis to keep outline points inside their precomputed blue zones. - * The smaller the size (especially 9ppem and down), the higher the loss - * of emboldening versus the CFF driver. - * - */ - - - /************************************************************************** - * - * @property: - * darkening-parameters[autofit] - * - * @description: - * *Experimental* *only* - * - * See the description of the CFF driver for details. This - * implementation appropriates the - * CFF_CONFIG_OPTION_DARKENING_PARAMETER_* #defines for consistency. - * Note the differences described in @no-stem-darkening[autofit]. - * - */ - - - /* */ - - -FT_END_HEADER - -#endif /* __FTAUTOH_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftbbox.h b/win32/include/freetype/ftbbox.h deleted file mode 100644 index 9d9d0407..00000000 --- a/win32/include/freetype/ftbbox.h +++ /dev/null @@ -1,101 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftbbox.h */ -/* */ -/* FreeType exact bbox computation (specification). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This component has a _single_ role: to compute exact outline bounding */ - /* boxes. */ - /* */ - /* It is separated from the rest of the engine for various technical */ - /* reasons. It may well be integrated in `ftoutln' later. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTBBOX_H__ -#define __FTBBOX_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_BBox */ - /* */ - /* <Description> */ - /* Compute the exact bounding box of an outline. This is slower */ - /* than computing the control box. However, it uses an advanced */ - /* algorithm that returns _very_ quickly when the two boxes */ - /* coincide. Otherwise, the outline Bézier arcs are traversed to */ - /* extract their extrema. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source outline. */ - /* */ - /* <Output> */ - /* abbox :: The outline's exact bounding box. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If the font is tricky and the glyph has been loaded with */ - /* @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get */ - /* reasonable values for the BBox it is necessary to load the glyph */ - /* at a large ppem value (so that the hinting instructions can */ - /* properly shift and scale the subglyphs), then extracting the BBox, */ - /* which can be eventually converted back to font units. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Get_BBox( FT_Outline* outline, - FT_BBox *abbox ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTBBOX_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/win32/include/freetype/ftbdf.h b/win32/include/freetype/ftbdf.h deleted file mode 100644 index 0bdabf48..00000000 --- a/win32/include/freetype/ftbdf.h +++ /dev/null @@ -1,210 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftbdf.h */ -/* */ -/* FreeType API for accessing BDF-specific strings (specification). */ -/* */ -/* Copyright 2002-2015 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 __FTBDF_H__ -#define __FTBDF_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* bdf_fonts */ - /* */ - /* <Title> */ - /* BDF and PCF Files */ - /* */ - /* <Abstract> */ - /* BDF and PCF specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions specific to BDF */ - /* and PCF fonts. */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @enum: - * BDF_PropertyType - * - * @description: - * A list of BDF property types. - * - * @values: - * BDF_PROPERTY_TYPE_NONE :: - * Value~0 is used to indicate a missing property. - * - * BDF_PROPERTY_TYPE_ATOM :: - * Property is a string atom. - * - * BDF_PROPERTY_TYPE_INTEGER :: - * Property is a 32-bit signed integer. - * - * BDF_PROPERTY_TYPE_CARDINAL :: - * Property is a 32-bit unsigned integer. - */ - typedef enum BDF_PropertyType_ - { - BDF_PROPERTY_TYPE_NONE = 0, - BDF_PROPERTY_TYPE_ATOM = 1, - BDF_PROPERTY_TYPE_INTEGER = 2, - BDF_PROPERTY_TYPE_CARDINAL = 3 - - } BDF_PropertyType; - - - /********************************************************************** - * - * @type: - * BDF_Property - * - * @description: - * A handle to a @BDF_PropertyRec structure to model a given - * BDF/PCF property. - */ - typedef struct BDF_PropertyRec_* BDF_Property; - - - /********************************************************************** - * - * @struct: - * BDF_PropertyRec - * - * @description: - * This structure models a given BDF/PCF property. - * - * @fields: - * type :: - * The property type. - * - * u.atom :: - * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be - * NULL, indicating an empty string. - * - * u.integer :: - * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER. - * - * u.cardinal :: - * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL. - */ - typedef struct BDF_PropertyRec_ - { - BDF_PropertyType type; - union { - const char* atom; - FT_Int32 integer; - FT_UInt32 cardinal; - - } u; - - } BDF_PropertyRec; - - - /********************************************************************** - * - * @function: - * FT_Get_BDF_Charset_ID - * - * @description: - * Retrieve a BDF font character set identity, according to - * the BDF specification. - * - * @input: - * face :: - * A handle to the input face. - * - * @output: - * acharset_encoding :: - * Charset encoding, as a C~string, owned by the face. - * - * acharset_registry :: - * Charset registry, as a C~string, owned by the face. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with BDF faces, returning an error otherwise. - */ - FT_EXPORT( FT_Error ) - FT_Get_BDF_Charset_ID( FT_Face face, - const char* *acharset_encoding, - const char* *acharset_registry ); - - - /********************************************************************** - * - * @function: - * FT_Get_BDF_Property - * - * @description: - * Retrieve a BDF property from a BDF or PCF font file. - * - * @input: - * face :: A handle to the input face. - * - * name :: The property name. - * - * @output: - * aproperty :: The property. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function works with BDF _and_ PCF fonts. It returns an error - * otherwise. It also returns an error if the property is not in the - * font. - * - * A `property' is a either key-value pair within the STARTPROPERTIES - * ... ENDPROPERTIES block of a BDF font or a key-value pair from the - * `info->props' array within a `FontRec' structure of a PCF font. - * - * Integer properties are always stored as `signed' within PCF fonts; - * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value - * for BDF fonts only. - * - * In case of error, `aproperty->type' is always set to - * @BDF_PROPERTY_TYPE_NONE. - */ - FT_EXPORT( FT_Error ) - FT_Get_BDF_Property( FT_Face face, - const char* prop_name, - BDF_PropertyRec *aproperty ); - - /* */ - -FT_END_HEADER - -#endif /* __FTBDF_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftbitmap.h b/win32/include/freetype/ftbitmap.h deleted file mode 100644 index 46cc47b7..00000000 --- a/win32/include/freetype/ftbitmap.h +++ /dev/null @@ -1,240 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftbitmap.h */ -/* */ -/* FreeType utility functions for bitmaps (specification). */ -/* */ -/* Copyright 2004-2015 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 __FTBITMAP_H__ -#define __FTBITMAP_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* bitmap_handling */ - /* */ - /* <Title> */ - /* Bitmap Handling */ - /* */ - /* <Abstract> */ - /* Handling FT_Bitmap objects. */ - /* */ - /* <Description> */ - /* This section contains functions for handling @FT_Bitmap objects. */ - /* Note that none of the functions changes the bitmap's `flow' (as */ - /* indicated by the sign of the `pitch' field in `FT_Bitmap'). */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Init */ - /* */ - /* <Description> */ - /* Initialize a pointer to an @FT_Bitmap structure. */ - /* */ - /* <InOut> */ - /* abitmap :: A pointer to the bitmap structure. */ - /* */ - /* <Note> */ - /* A deprecated name for the same function is `FT_Bitmap_New'. */ - /* */ - FT_EXPORT( void ) - FT_Bitmap_Init( FT_Bitmap *abitmap ); - - - /* deprecated */ - FT_EXPORT( void ) - FT_Bitmap_New( FT_Bitmap *abitmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Copy */ - /* */ - /* <Description> */ - /* Copy a bitmap into another one. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* source :: A handle to the source bitmap. */ - /* */ - /* <Output> */ - /* target :: A handle to the target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Copy( FT_Library library, - const FT_Bitmap *source, - FT_Bitmap *target); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Embolden */ - /* */ - /* <Description> */ - /* Embolden a bitmap. The new bitmap will be about `xStrength' */ - /* pixels wider and `yStrength' pixels higher. The left and bottom */ - /* borders are kept unchanged. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* xStrength :: How strong the glyph is emboldened horizontally. */ - /* Expressed in 26.6 pixel format. */ - /* */ - /* yStrength :: How strong the glyph is emboldened vertically. */ - /* Expressed in 26.6 pixel format. */ - /* */ - /* <InOut> */ - /* bitmap :: A handle to the target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The current implementation restricts `xStrength' to be less than */ - /* or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */ - /* */ - /* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, */ - /* you should call @FT_GlyphSlot_Own_Bitmap on the slot first. */ - /* */ - /* Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format */ - /* are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Embolden( FT_Library library, - FT_Bitmap* bitmap, - FT_Pos xStrength, - FT_Pos yStrength ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Convert */ - /* */ - /* <Description> */ - /* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp */ - /* to a bitmap object with depth 8bpp, making the number of used */ - /* bytes line (a.k.a. the `pitch') a multiple of `alignment'. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* source :: The source bitmap. */ - /* */ - /* alignment :: The pitch of the bitmap is a multiple of this */ - /* parameter. Common values are 1, 2, or 4. */ - /* */ - /* <Output> */ - /* target :: The target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* It is possible to call @FT_Bitmap_Convert multiple times without */ - /* calling @FT_Bitmap_Done (the memory is simply reallocated). */ - /* */ - /* Use @FT_Bitmap_Done to finally remove the bitmap object. */ - /* */ - /* The `library' argument is taken to have access to FreeType's */ - /* memory handling functions. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Convert( FT_Library library, - const FT_Bitmap *source, - FT_Bitmap *target, - FT_Int alignment ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GlyphSlot_Own_Bitmap */ - /* */ - /* <Description> */ - /* Make sure that a glyph slot owns `slot->bitmap'. */ - /* */ - /* <Input> */ - /* slot :: The glyph slot. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function is to be used in combination with */ - /* @FT_Bitmap_Embolden. */ - /* */ - FT_EXPORT( FT_Error ) - FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Done */ - /* */ - /* <Description> */ - /* Destroy a bitmap object initialized with @FT_Bitmap_Init. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* bitmap :: The bitmap object to be freed. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The `library' argument is taken to have access to FreeType's */ - /* memory handling functions. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Bitmap_Done( FT_Library library, - FT_Bitmap *bitmap ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTBITMAP_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftbzip2.h b/win32/include/freetype/ftbzip2.h deleted file mode 100644 index c25f9469..00000000 --- a/win32/include/freetype/ftbzip2.h +++ /dev/null @@ -1,102 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftbzip2.h */ -/* */ -/* Bzip2-compressed stream support. */ -/* */ -/* Copyright 2010-2015 by */ -/* Joel Klinghed. */ -/* */ -/* 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 __FTBZIP2_H__ -#define __FTBZIP2_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* <Section> */ - /* bzip2 */ - /* */ - /* <Title> */ - /* BZIP2 Streams */ - /* */ - /* <Abstract> */ - /* Using bzip2-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Bzip2-specific functions. */ - /* */ - /*************************************************************************/ - - - /************************************************************************ - * - * @function: - * FT_Stream_OpenBzip2 - * - * @description: - * Open a new stream to parse bzip2-compressed font files. This is - * mainly used to support the compressed `*.pcf.bz2' fonts that come - * with XFree86. - * - * @input: - * stream :: - * The target embedding stream. - * - * source :: - * The source stream. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream. - * - * In certain builds of the library, bzip2 compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a bzip2 compressed stream - * from it and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with bzip2 support. - */ - FT_EXPORT( FT_Error ) - FT_Stream_OpenBzip2( FT_Stream stream, - FT_Stream source ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTBZIP2_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftcache.h b/win32/include/freetype/ftcache.h deleted file mode 100644 index 68525bb8..00000000 --- a/win32/include/freetype/ftcache.h +++ /dev/null @@ -1,1057 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftcache.h */ -/* */ -/* FreeType Cache subsystem (specification). */ -/* */ -/* Copyright 1996-2015 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 __FTCACHE_H__ -#define __FTCACHE_H__ - - -#include <ft2build.h> -#include FT_GLYPH_H - - -FT_BEGIN_HEADER - - - /************************************************************************* - * - * <Section> - * cache_subsystem - * - * <Title> - * Cache Sub-System - * - * <Abstract> - * How to cache face, size, and glyph data with FreeType~2. - * - * <Description> - * This section describes the FreeType~2 cache sub-system, which is used - * to limit the number of concurrently opened @FT_Face and @FT_Size - * objects, as well as caching information like character maps and glyph - * images while limiting their maximum memory usage. - * - * Note that all types and functions begin with the `FTC_' prefix. - * - * The cache is highly portable and thus doesn't know anything about the - * fonts installed on your system, or how to access them. This implies - * the following scheme: - * - * First, available or installed font faces are uniquely identified by - * @FTC_FaceID values, provided to the cache by the client. Note that - * the cache only stores and compares these values, and doesn't try to - * interpret them in any way. - * - * Second, the cache calls, only when needed, a client-provided function - * to convert an @FTC_FaceID into a new @FT_Face object. The latter is - * then completely managed by the cache, including its termination - * through @FT_Done_Face. To monitor termination of face objects, the - * finalizer callback in the `generic' field of the @FT_Face object can - * be used, which might also be used to store the @FTC_FaceID of the - * face. - * - * Clients are free to map face IDs to anything else. The most simple - * usage is to associate them to a (pathname,face_index) pair that is - * used to call @FT_New_Face. However, more complex schemes are also - * possible. - * - * Note that for the cache to work correctly, the face ID values must be - * *persistent*, which means that the contents they point to should not - * change at runtime, or that their value should not become invalid. - * - * If this is unavoidable (e.g., when a font is uninstalled at runtime), - * you should call @FTC_Manager_RemoveFaceID as soon as possible, to let - * the cache get rid of any references to the old @FTC_FaceID it may - * keep internally. Failure to do so will lead to incorrect behaviour - * or even crashes. - * - * To use the cache, start with calling @FTC_Manager_New to create a new - * @FTC_Manager object, which models a single cache instance. You can - * then look up @FT_Face and @FT_Size objects with - * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively. - * - * If you want to use the charmap caching, call @FTC_CMapCache_New, then - * 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 - * @FT_Glyph objects from the cache. - * - * If you need lots of small bitmaps, it is much more memory efficient - * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This - * returns @FTC_SBitRec structures, which are used to store small - * bitmaps directly. (A small bitmap is one whose metrics and - * dimensions all fit into 8-bit integers). - * - * We hope to also provide a kerning cache in the near future. - * - * - * <Order> - * FTC_Manager - * FTC_FaceID - * FTC_Face_Requester - * - * FTC_Manager_New - * FTC_Manager_Reset - * FTC_Manager_Done - * FTC_Manager_LookupFace - * FTC_Manager_LookupSize - * FTC_Manager_RemoveFaceID - * - * FTC_Node - * FTC_Node_Unref - * - * FTC_ImageCache - * FTC_ImageCache_New - * FTC_ImageCache_Lookup - * - * FTC_SBit - * FTC_SBitCache - * FTC_SBitCache_New - * FTC_SBitCache_Lookup - * - * FTC_CMapCache - * FTC_CMapCache_New - * FTC_CMapCache_Lookup - * - *************************************************************************/ - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** BASIC TYPE DEFINITIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /************************************************************************* - * - * @type: FTC_FaceID - * - * @description: - * An opaque pointer type that is used to identity face objects. The - * contents of such objects is application-dependent. - * - * These pointers are typically used to point to a user-defined - * structure containing a font file path, and face index. - * - * @note: - * Never use NULL as a valid @FTC_FaceID. - * - * Face IDs are passed by the client to the cache manager that calls, - * when needed, the @FTC_Face_Requester to translate them into new - * @FT_Face objects. - * - * If the content of a given face ID changes at runtime, or if the value - * becomes invalid (e.g., when uninstalling a font), you should - * immediately call @FTC_Manager_RemoveFaceID before any other cache - * function. - * - * Failure to do so will result in incorrect behaviour or even - * memory leaks and crashes. - */ - typedef FT_Pointer FTC_FaceID; - - - /************************************************************************ - * - * @functype: - * FTC_Face_Requester - * - * @description: - * A callback function provided by client applications. It is used by - * the cache manager to translate a given @FTC_FaceID into a new valid - * @FT_Face object, on demand. - * - * <Input> - * face_id :: - * The face ID to resolve. - * - * library :: - * A handle to a FreeType library object. - * - * req_data :: - * Application-provided request data (see note below). - * - * <Output> - * aface :: - * A new @FT_Face handle. - * - * <Return> - * FreeType error code. 0~means success. - * - * <Note> - * The third parameter `req_data' is the same as the one passed by the - * client when @FTC_Manager_New is called. - * - * The face requester should not perform funny things on the returned - * face object, like creating a new @FT_Size for it, or setting a - * transformation through @FT_Set_Transform! - */ - typedef FT_Error - (*FTC_Face_Requester)( FTC_FaceID face_id, - FT_Library library, - FT_Pointer req_data, - FT_Face* aface ); - - /* */ - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** CACHE MANAGER OBJECT *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_Manager */ - /* */ - /* <Description> */ - /* This object corresponds to one instance of the cache-subsystem. */ - /* It is used to cache one or more @FT_Face objects, along with */ - /* corresponding @FT_Size objects. */ - /* */ - /* The manager intentionally limits the total number of opened */ - /* @FT_Face and @FT_Size objects to control memory usage. See the */ - /* `max_faces' and `max_sizes' parameters of @FTC_Manager_New. */ - /* */ - /* The manager is also used to cache `nodes' of various types while */ - /* limiting their total memory usage. */ - /* */ - /* All limitations are enforced by keeping lists of managed objects */ - /* in most-recently-used order, and flushing old nodes to make room */ - /* for new ones. */ - /* */ - typedef struct FTC_ManagerRec_* FTC_Manager; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_Node */ - /* */ - /* <Description> */ - /* An opaque handle to a cache node object. Each cache node is */ - /* reference-counted. A node with a count of~0 might be flushed */ - /* out of a full cache whenever a lookup request is performed. */ - /* */ - /* If you look up nodes, you have the ability to `acquire' them, */ - /* i.e., to increment their reference count. This will prevent the */ - /* node from being flushed out of the cache until you explicitly */ - /* `release' it (see @FTC_Node_Unref). */ - /* */ - /* See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. */ - /* */ - typedef struct FTC_NodeRec_* FTC_Node; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_New */ - /* */ - /* <Description> */ - /* Create a new cache manager. */ - /* */ - /* <Input> */ - /* library :: The parent FreeType library handle to use. */ - /* */ - /* max_faces :: Maximum number of opened @FT_Face objects managed by */ - /* this cache instance. Use~0 for defaults. */ - /* */ - /* max_sizes :: Maximum number of opened @FT_Size objects managed by */ - /* this cache instance. Use~0 for defaults. */ - /* */ - /* max_bytes :: Maximum number of bytes to use for cached data nodes. */ - /* Use~0 for defaults. Note that this value does not */ - /* account for managed @FT_Face and @FT_Size objects. */ - /* */ - /* requester :: An application-provided callback used to translate */ - /* face IDs into real @FT_Face objects. */ - /* */ - /* req_data :: A generic pointer that is passed to the requester */ - /* each time it is called (see @FTC_Face_Requester). */ - /* */ - /* <Output> */ - /* amanager :: A handle to a new manager object. 0~in case of */ - /* failure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_Manager_New( FT_Library library, - FT_UInt max_faces, - FT_UInt max_sizes, - FT_ULong max_bytes, - FTC_Face_Requester requester, - FT_Pointer req_data, - FTC_Manager *amanager ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_Reset */ - /* */ - /* <Description> */ - /* Empty a given cache manager. This simply gets rid of all the */ - /* currently cached @FT_Face and @FT_Size objects within the manager. */ - /* */ - /* <InOut> */ - /* manager :: A handle to the manager. */ - /* */ - FT_EXPORT( void ) - FTC_Manager_Reset( FTC_Manager manager ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_Done */ - /* */ - /* <Description> */ - /* Destroy a given manager after emptying it. */ - /* */ - /* <Input> */ - /* manager :: A handle to the target cache manager object. */ - /* */ - FT_EXPORT( void ) - FTC_Manager_Done( FTC_Manager manager ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_LookupFace */ - /* */ - /* <Description> */ - /* Retrieve the @FT_Face object that corresponds to a given face ID */ - /* through a cache manager. */ - /* */ - /* <Input> */ - /* manager :: A handle to the cache manager. */ - /* */ - /* face_id :: The ID of the face object. */ - /* */ - /* <Output> */ - /* aface :: A handle to the face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned @FT_Face object is always owned by the manager. You */ - /* should never try to discard it yourself. */ - /* */ - /* The @FT_Face object doesn't necessarily have a current size object */ - /* (i.e., face->size can be~0). If you need a specific `font size', */ - /* use @FTC_Manager_LookupSize instead. */ - /* */ - /* Never change the face's transformation matrix (i.e., never call */ - /* the @FT_Set_Transform function) on a returned face! If you need */ - /* to transform glyphs, do it yourself after glyph loading. */ - /* */ - /* When you perform a lookup, out-of-memory errors are detected */ - /* _within_ the lookup and force incremental flushes of the cache */ - /* until enough memory is released for the lookup to succeed. */ - /* */ - /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ - /* already been completely flushed, and still no memory was available */ - /* for the operation. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_Manager_LookupFace( FTC_Manager manager, - FTC_FaceID face_id, - FT_Face *aface ); - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_ScalerRec */ - /* */ - /* <Description> */ - /* A structure used to describe a given character size in either */ - /* pixels or points to the cache manager. See */ - /* @FTC_Manager_LookupSize. */ - /* */ - /* <Fields> */ - /* face_id :: The source face ID. */ - /* */ - /* width :: The character width. */ - /* */ - /* height :: The character height. */ - /* */ - /* pixel :: A Boolean. If 1, the `width' and `height' fields are */ - /* interpreted as integer pixel character sizes. */ - /* Otherwise, they are expressed as 1/64th of points. */ - /* */ - /* x_res :: Only used when `pixel' is value~0 to indicate the */ - /* horizontal resolution in dpi. */ - /* */ - /* y_res :: Only used when `pixel' is value~0 to indicate the */ - /* vertical resolution in dpi. */ - /* */ - /* <Note> */ - /* This type is mainly used to retrieve @FT_Size objects through the */ - /* cache manager. */ - /* */ - typedef struct FTC_ScalerRec_ - { - FTC_FaceID face_id; - FT_UInt width; - FT_UInt height; - FT_Int pixel; - FT_UInt x_res; - FT_UInt y_res; - - } FTC_ScalerRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_Scaler */ - /* */ - /* <Description> */ - /* A handle to an @FTC_ScalerRec structure. */ - /* */ - typedef struct FTC_ScalerRec_* FTC_Scaler; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_LookupSize */ - /* */ - /* <Description> */ - /* Retrieve the @FT_Size object that corresponds to a given */ - /* @FTC_ScalerRec pointer through a cache manager. */ - /* */ - /* <Input> */ - /* manager :: A handle to the cache manager. */ - /* */ - /* scaler :: A scaler handle. */ - /* */ - /* <Output> */ - /* asize :: A handle to the size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned @FT_Size object is always owned by the manager. You */ - /* should never try to discard it by yourself. */ - /* */ - /* You can access the parent @FT_Face object simply as `size->face' */ - /* if you need it. Note that this object is also owned by the */ - /* manager. */ - /* */ - /* <Note> */ - /* When you perform a lookup, out-of-memory errors are detected */ - /* _within_ the lookup and force incremental flushes of the cache */ - /* until enough memory is released for the lookup to succeed. */ - /* */ - /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ - /* already been completely flushed, and still no memory is available */ - /* for the operation. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_Manager_LookupSize( FTC_Manager manager, - FTC_Scaler scaler, - FT_Size *asize ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Node_Unref */ - /* */ - /* <Description> */ - /* Decrement a cache node's internal reference count. When the count */ - /* reaches 0, it is not destroyed but becomes eligible for subsequent */ - /* cache flushes. */ - /* */ - /* <Input> */ - /* node :: The cache node handle. */ - /* */ - /* manager :: The cache manager handle. */ - /* */ - FT_EXPORT( void ) - FTC_Node_Unref( FTC_Node node, - FTC_Manager manager ); - - - /************************************************************************* - * - * @function: - * FTC_Manager_RemoveFaceID - * - * @description: - * A special function used to indicate to the cache manager that - * a given @FTC_FaceID is no longer valid, either because its - * content changed, or because it was deallocated or uninstalled. - * - * @input: - * manager :: - * The cache manager handle. - * - * face_id :: - * The @FTC_FaceID to be removed. - * - * @note: - * This function flushes all nodes from the cache corresponding to this - * `face_id', with the exception of nodes with a non-null reference - * count. - * - * Such nodes are however modified internally so as to never appear - * in later lookups with the same `face_id' value, and to be immediately - * destroyed when released by all their users. - * - */ - FT_EXPORT( void ) - FTC_Manager_RemoveFaceID( FTC_Manager manager, - FTC_FaceID face_id ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* cache_subsystem */ - /* */ - /*************************************************************************/ - - /************************************************************************* - * - * @type: - * FTC_CMapCache - * - * @description: - * An opaque handle used to model a charmap cache. This cache is to - * hold character codes -> glyph indices mappings. - * - */ - typedef struct FTC_CMapCacheRec_* FTC_CMapCache; - - - /************************************************************************* - * - * @function: - * FTC_CMapCache_New - * - * @description: - * Create a new charmap cache. - * - * @input: - * manager :: - * A handle to the cache manager. - * - * @output: - * acache :: - * A new cache handle. NULL in case of error. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * Like all other caches, this one will be destroyed with the cache - * manager. - * - */ - FT_EXPORT( FT_Error ) - FTC_CMapCache_New( FTC_Manager manager, - FTC_CMapCache *acache ); - - - /************************************************************************ - * - * @function: - * FTC_CMapCache_Lookup - * - * @description: - * Translate a character code into a glyph index, using the charmap - * cache. - * - * @input: - * cache :: - * A charmap cache handle. - * - * face_id :: - * The source face ID. - * - * cmap_index :: - * The index of the charmap in the source face. Any negative value - * means to use the cache @FT_Face's default charmap. - * - * char_code :: - * The character code (in the corresponding charmap). - * - * @return: - * Glyph index. 0~means `no glyph'. - * - */ - FT_EXPORT( FT_UInt ) - FTC_CMapCache_Lookup( FTC_CMapCache cache, - FTC_FaceID face_id, - FT_Int cmap_index, - FT_UInt32 char_code ); - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* cache_subsystem */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** IMAGE CACHE OBJECT *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /************************************************************************* - * - * @struct: - * FTC_ImageTypeRec - * - * @description: - * A structure used to model the type of images in a glyph cache. - * - * @fields: - * face_id :: - * The face ID. - * - * width :: - * The width in pixels. - * - * height :: - * The height in pixels. - * - * flags :: - * The load flags, as in @FT_Load_Glyph. - * - */ - typedef struct FTC_ImageTypeRec_ - { - FTC_FaceID face_id; - FT_UInt width; - FT_UInt height; - FT_Int32 flags; - - } FTC_ImageTypeRec; - - - /************************************************************************* - * - * @type: - * FTC_ImageType - * - * @description: - * A handle to an @FTC_ImageTypeRec structure. - * - */ - typedef struct FTC_ImageTypeRec_* FTC_ImageType; - - - /* */ - - -#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \ - ( (d1)->face_id == (d2)->face_id && \ - (d1)->width == (d2)->width && \ - (d1)->flags == (d2)->flags ) - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_ImageCache */ - /* */ - /* <Description> */ - /* A handle to a glyph image cache object. They are designed to */ - /* hold many distinct glyph images while not exceeding a certain */ - /* memory threshold. */ - /* */ - typedef struct FTC_ImageCacheRec_* FTC_ImageCache; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_New */ - /* */ - /* <Description> */ - /* Create a new glyph image cache. */ - /* */ - /* <Input> */ - /* manager :: The parent manager for the image cache. */ - /* */ - /* <Output> */ - /* acache :: A handle to the new glyph image cache object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_ImageCache_New( FTC_Manager manager, - FTC_ImageCache *acache ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_Lookup */ - /* */ - /* <Description> */ - /* Retrieve a given glyph image from a glyph image cache. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source glyph image cache. */ - /* */ - /* type :: A pointer to a glyph image type descriptor. */ - /* */ - /* gindex :: The glyph index to retrieve. */ - /* */ - /* <Output> */ - /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */ - /* failure. */ - /* */ - /* anode :: Used to return the address of of the corresponding cache */ - /* node after incrementing its reference count (see note */ - /* below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned glyph is owned and managed by the glyph image cache. */ - /* Never try to transform or discard it manually! You can however */ - /* create a copy with @FT_Glyph_Copy and modify the new one. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the glyph image, after increasing its reference */ - /* count. This ensures that the node (as well as the @FT_Glyph) will */ - /* always be kept in the cache until you call @FTC_Node_Unref to */ - /* `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the @FT_Glyph could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - FT_EXPORT( FT_Error ) - FTC_ImageCache_Lookup( FTC_ImageCache cache, - FTC_ImageType type, - FT_UInt gindex, - FT_Glyph *aglyph, - FTC_Node *anode ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_LookupScaler */ - /* */ - /* <Description> */ - /* A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec */ - /* to specify the face ID and its size. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source glyph image cache. */ - /* */ - /* scaler :: A pointer to a scaler descriptor. */ - /* */ - /* load_flags :: The corresponding load flags. */ - /* */ - /* gindex :: The glyph index to retrieve. */ - /* */ - /* <Output> */ - /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */ - /* failure. */ - /* */ - /* anode :: Used to return the address of of the corresponding */ - /* cache node after incrementing its reference count */ - /* (see note below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned glyph is owned and managed by the glyph image cache. */ - /* Never try to transform or discard it manually! You can however */ - /* create a copy with @FT_Glyph_Copy and modify the new one. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the glyph image, after increasing its reference */ - /* count. This ensures that the node (as well as the @FT_Glyph) will */ - /* always be kept in the cache until you call @FTC_Node_Unref to */ - /* `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the @FT_Glyph could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - /* Calls to @FT_Set_Char_Size and friends have no effect on cached */ - /* glyphs; you should always use the FreeType cache API instead. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_ImageCache_LookupScaler( FTC_ImageCache cache, - FTC_Scaler scaler, - FT_ULong load_flags, - FT_UInt gindex, - FT_Glyph *aglyph, - FTC_Node *anode ); - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_SBit */ - /* */ - /* <Description> */ - /* A handle to a small bitmap descriptor. See the @FTC_SBitRec */ - /* structure for details. */ - /* */ - typedef struct FTC_SBitRec_* FTC_SBit; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_SBitRec */ - /* */ - /* <Description> */ - /* A very compact structure used to describe a small glyph bitmap. */ - /* */ - /* <Fields> */ - /* width :: The bitmap width in pixels. */ - /* */ - /* height :: The bitmap height in pixels. */ - /* */ - /* left :: The horizontal distance from the pen position to the */ - /* left bitmap border (a.k.a. `left side bearing', or */ - /* `lsb'). */ - /* */ - /* top :: The vertical distance from the pen position (on the */ - /* baseline) to the upper bitmap border (a.k.a. `top */ - /* side bearing'). The distance is positive for upwards */ - /* y~coordinates. */ - /* */ - /* format :: The format of the glyph bitmap (monochrome or gray). */ - /* */ - /* max_grays :: Maximum gray level value (in the range 1 to~255). */ - /* */ - /* pitch :: The number of bytes per bitmap line. May be positive */ - /* or negative. */ - /* */ - /* xadvance :: The horizontal advance width in pixels. */ - /* */ - /* yadvance :: The vertical advance height in pixels. */ - /* */ - /* buffer :: A pointer to the bitmap pixels. */ - /* */ - typedef struct FTC_SBitRec_ - { - FT_Byte width; - FT_Byte height; - FT_Char left; - FT_Char top; - - FT_Byte format; - FT_Byte max_grays; - FT_Short pitch; - FT_Char xadvance; - FT_Char yadvance; - - FT_Byte* buffer; - - } FTC_SBitRec; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_SBitCache */ - /* */ - /* <Description> */ - /* A handle to a small bitmap cache. These are special cache objects */ - /* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */ - /* much more efficient way than the traditional glyph image cache */ - /* implemented by @FTC_ImageCache. */ - /* */ - typedef struct FTC_SBitCacheRec_* FTC_SBitCache; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_New */ - /* */ - /* <Description> */ - /* Create a new cache to store small glyph bitmaps. */ - /* */ - /* <Input> */ - /* manager :: A handle to the source cache manager. */ - /* */ - /* <Output> */ - /* acache :: A handle to the new sbit cache. NULL in case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FTC_SBitCache_New( FTC_Manager manager, - FTC_SBitCache *acache ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_Lookup */ - /* */ - /* <Description> */ - /* Look up a given small glyph bitmap in a given sbit cache and */ - /* `lock' it to prevent its flushing from the cache until needed. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source sbit cache. */ - /* */ - /* type :: A pointer to the glyph image type descriptor. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* <Output> */ - /* sbit :: A handle to a small bitmap descriptor. */ - /* */ - /* anode :: Used to return the address of of the corresponding cache */ - /* node after incrementing its reference count (see note */ - /* below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The small bitmap descriptor and its bit buffer are owned by the */ - /* cache and should never be freed by the application. They might */ - /* as well disappear from memory on the next cache lookup, so don't */ - /* treat them as persistent data. */ - /* */ - /* The descriptor's `buffer' field is set to~0 to indicate a missing */ - /* glyph bitmap. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the bitmap, after increasing its reference count. */ - /* This ensures that the node (as well as the image) will always be */ - /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the bitmap could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - FT_EXPORT( FT_Error ) - FTC_SBitCache_Lookup( FTC_SBitCache cache, - FTC_ImageType type, - FT_UInt gindex, - FTC_SBit *sbit, - FTC_Node *anode ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_LookupScaler */ - /* */ - /* <Description> */ - /* A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec */ - /* to specify the face ID and its size. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source sbit cache. */ - /* */ - /* scaler :: A pointer to the scaler descriptor. */ - /* */ - /* load_flags :: The corresponding load flags. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* <Output> */ - /* sbit :: A handle to a small bitmap descriptor. */ - /* */ - /* anode :: Used to return the address of of the corresponding */ - /* cache node after incrementing its reference count */ - /* (see note below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The small bitmap descriptor and its bit buffer are owned by the */ - /* cache and should never be freed by the application. They might */ - /* as well disappear from memory on the next cache lookup, so don't */ - /* treat them as persistent data. */ - /* */ - /* The descriptor's `buffer' field is set to~0 to indicate a missing */ - /* glyph bitmap. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the bitmap, after increasing its reference count. */ - /* This ensures that the node (as well as the image) will always be */ - /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the bitmap could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - FT_EXPORT( FT_Error ) - FTC_SBitCache_LookupScaler( FTC_SBitCache cache, - FTC_Scaler scaler, - FT_ULong load_flags, - FT_UInt gindex, - FTC_SBit *sbit, - FTC_Node *anode ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTCACHE_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftcffdrv.h b/win32/include/freetype/ftcffdrv.h deleted file mode 100644 index 8500346c..00000000 --- a/win32/include/freetype/ftcffdrv.h +++ /dev/null @@ -1,262 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftcffdrv.h */ -/* */ -/* FreeType API for controlling the CFF driver (specification only). */ -/* */ -/* Copyright 2013-2015 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 __FTCFFDRV_H__ -#define __FTCFFDRV_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * @section: - * cff_driver - * - * @title: - * The CFF driver - * - * @abstract: - * Controlling the CFF driver module. - * - * @description: - * While FreeType's CFF driver doesn't expose API functions by itself, - * it is possible to control its behaviour with @FT_Property_Set and - * @FT_Property_Get. The list below gives the available properties - * together with the necessary macros and structures. - * - * The CFF driver's module name is `cff'. - * - * *Hinting* *and* *antialiasing* *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 - * 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 - * borders, causing a fuzzy appearance. - * - * There are two principles behind this approach. - * - * 1) No hinting in the horizontal direction: Unlike `superhinted' - * TrueType, which changes glyph widths to accommodate regular - * inter-glyph spacing, Adobe's approach is `faithful to the design' in - * representing both the glyph width and the inter-glyph spacing - * designed for the font. This makes the screen display as close as it - * can be to the result one would get with infinite resolution, while - * preserving what is considered the key characteristics of each glyph. - * Note that the distances between unhinted and grid-fitted positions at - * small 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 - * screens: The pixel geometry of modern displays supplies three - * vertical sub-pixels as the eye moves horizontally across each visible - * pixel. On devices where we can be certain this characteristic is - * present a rasterizer can take advantage of the sub-pixels to add - * increments of 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 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. - * - * 2) Aligment in the vertical direction: Weights and spacing along the - * y~axis are less critical; what is much more important is the visual - * alignment of related features (like cap-height and x-height). The - * sense of alignment for these is enhanced by the sharpness of grid-fit - * edges, while the cruder vertical resolution (full pixels instead of - * 1/3 pixels) is less of a problem. - * - * On the technical side, horizontal alignment zones for ascender, - * x-height, and other important height values (traditionally called - * `blue zones') as defined in the font are positioned independently, - * each being rounded to the nearest pixel edge, taking care of - * overshoot suppression at small sizes, stem darkening, and scaling. - * - * Hstems (this is, hint values defined in the font to help align - * horizontal features) that fall within a blue zone are said to be - * `captured' and are aligned to that zone. Uncaptured stems are moved - * in one of four ways, top edge up or down, bottom edge up or down. - * Unless there are conflicting hstems, the smallest movement is taken - * to minimize distortion. - * - * @order: - * hinting-engine - * no-stem-darkening[cff] - * darkening-parameters[cff] - * - */ - - - /************************************************************************** - * - * @property: - * hinting-engine - * - * @description: - * Thanks to Adobe, which contributed a new hinting (and parsing) - * engine, an application can select between `freetype' and `adobe' if - * compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration - * macro isn't defined, `hinting-engine' does nothing. - * - * The default engine is `freetype' if CFF_CONFIG_OPTION_OLD_ENGINE is - * defined, and `adobe' otherwise. - * - * The following example code demonstrates how to select Adobe's hinting - * engine (omitting the error handling). - * - * { - * FT_Library library; - * FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "cff", - * "hinting-engine", &hinting_engine ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - - /************************************************************************** - * - * @enum: - * FT_CFF_HINTING_XXX - * - * @description: - * A list of constants used for the @hinting-engine property to select - * the hinting engine for CFF fonts. - * - * @values: - * FT_CFF_HINTING_FREETYPE :: - * Use the old FreeType hinting engine. - * - * FT_CFF_HINTING_ADOBE :: - * Use the hinting engine contributed by Adobe. - * - */ -#define FT_CFF_HINTING_FREETYPE 0 -#define FT_CFF_HINTING_ADOBE 1 - - - /************************************************************************** - * - * @property: - * no-stem-darkening[cff] - * - * @description: - * By default, the Adobe CFF engine darkens stems at smaller sizes, - * regardless of hinting, to enhance contrast. This feature requires - * a rendering system with proper gamma correction. Setting this - * property, stem darkening gets switched off. - * - * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set. - * - * { - * FT_Library library; - * FT_Bool no_stem_darkening = TRUE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "cff", - * "no-stem-darkening", &no_stem_darkening ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - - /************************************************************************** - * - * @property: - * darkening-parameters[cff] - * - * @description: - * By default, the Adobe CFF engine darkens stems as follows (if the - * `no-stem-darkening' property isn't set): - * - * { - * stem width <= 0.5px: darkening amount = 0.4px - * stem width = 1px: darkening amount = 0.275px - * stem width = 1.667px: darkening amount = 0.275px - * stem width >= 2.333px: darkening amount = 0px - * } - * - * and piecewise linear in-between. At configuration time, these four - * control points can be set with the macro - * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'. At runtime, the control - * points can be changed using the `darkening-parameters' property, as - * the following example demonstrates. - * - * { - * FT_Library library; - * FT_Int darken_params[8] = { 500, 300, // x1, y1 - * 1000, 200, // x2, y2 - * 1500, 100, // x3, y3 - * 2000, 0 }; // x4, y4 - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "cff", - * "darkening-parameters", darken_params ); - * } - * - * The x~values give the stem width, and the y~values the darkening - * amount. The unit is 1000th of pixels. All coordinate values must be - * positive; the x~values must be monotonically increasing; the - * y~values must be monotonically decreasing and smaller than or - * equal to 500 (corresponding to half a pixel); the slope of each - * linear piece must be shallower than -1 (e.g., -.4). - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - /* */ - - -FT_END_HEADER - - -#endif /* __FTCFFDRV_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftchapters.h b/win32/include/freetype/ftchapters.h deleted file mode 100644 index ab438953..00000000 --- a/win32/include/freetype/ftchapters.h +++ /dev/null @@ -1,135 +0,0 @@ -/***************************************************************************/ -/* */ -/* This file defines the structure of the FreeType reference. */ -/* It is used by the python script that generates the HTML files. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* general_remarks */ -/* */ -/* <Title> */ -/* General Remarks */ -/* */ -/* <Sections> */ -/* header_inclusion */ -/* user_allocation */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* core_api */ -/* */ -/* <Title> */ -/* Core API */ -/* */ -/* <Sections> */ -/* version */ -/* basic_types */ -/* base_interface */ -/* glyph_variants */ -/* glyph_management */ -/* mac_specific */ -/* sizes_management */ -/* header_file_macros */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* format_specific */ -/* */ -/* <Title> */ -/* Format-Specific API */ -/* */ -/* <Sections> */ -/* multiple_masters */ -/* truetype_tables */ -/* type1_tables */ -/* sfnt_names */ -/* bdf_fonts */ -/* cid_fonts */ -/* pfr_fonts */ -/* winfnt_fonts */ -/* font_formats */ -/* gasp_table */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* module_specific */ -/* */ -/* <Title> */ -/* Controlling FreeType Modules */ -/* */ -/* <Sections> */ -/* auto_hinter */ -/* cff_driver */ -/* tt_driver */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* cache_subsystem */ -/* */ -/* <Title> */ -/* Cache Sub-System */ -/* */ -/* <Sections> */ -/* cache_subsystem */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* support_api */ -/* */ -/* <Title> */ -/* Support API */ -/* */ -/* <Sections> */ -/* computations */ -/* list_processing */ -/* outline_processing */ -/* quick_advance */ -/* bitmap_handling */ -/* raster */ -/* glyph_stroker */ -/* system_interface */ -/* module_management */ -/* gzip */ -/* lzw */ -/* bzip2 */ -/* lcd_filtering */ -/* */ -/***************************************************************************/ - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* error_codes */ -/* */ -/* <Title> */ -/* Error Codes */ -/* */ -/* <Sections> */ -/* error_enumerations */ -/* error_code_values */ -/* */ -/***************************************************************************/ diff --git a/win32/include/freetype/ftcid.h b/win32/include/freetype/ftcid.h deleted file mode 100644 index 05741c85..00000000 --- a/win32/include/freetype/ftcid.h +++ /dev/null @@ -1,168 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftcid.h */ -/* */ -/* FreeType API for accessing CID font information (specification). */ -/* */ -/* Copyright 2007-2015 by */ -/* Dereg Clegg and 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 */ -/* 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 __FTCID_H__ -#define __FTCID_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* cid_fonts */ - /* */ - /* <Title> */ - /* CID Fonts */ - /* */ - /* <Abstract> */ - /* CID-keyed font specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of CID-keyed font specific */ - /* functions. */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @function: - * FT_Get_CID_Registry_Ordering_Supplement - * - * @description: - * Retrieve the Registry/Ordering/Supplement triple (also known as the - * "R/O/S") from a CID-keyed font. - * - * @input: - * face :: - * A handle to the input face. - * - * @output: - * registry :: - * The registry, as a C~string, owned by the face. - * - * ordering :: - * The ordering, as a C~string, owned by the face. - * - * supplement :: - * The supplement. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with CID faces, returning an error - * otherwise. - * - * @since: - * 2.3.6 - */ - FT_EXPORT( FT_Error ) - FT_Get_CID_Registry_Ordering_Supplement( FT_Face face, - const char* *registry, - const char* *ordering, - FT_Int *supplement); - - - /********************************************************************** - * - * @function: - * FT_Get_CID_Is_Internally_CID_Keyed - * - * @description: - * Retrieve the type of the input face, CID keyed or not. In - * constrast to the @FT_IS_CID_KEYED macro this function returns - * successfully also for CID-keyed fonts in an SNFT wrapper. - * - * @input: - * face :: - * A handle to the input face. - * - * @output: - * is_cid :: - * The type of the face as an @FT_Bool. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with CID faces and OpenType fonts, - * returning an error otherwise. - * - * @since: - * 2.3.9 - */ - FT_EXPORT( FT_Error ) - FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face, - FT_Bool *is_cid ); - - - /********************************************************************** - * - * @function: - * FT_Get_CID_From_Glyph_Index - * - * @description: - * Retrieve the CID of the input glyph index. - * - * @input: - * face :: - * A handle to the input face. - * - * glyph_index :: - * The input glyph index. - * - * @output: - * cid :: - * The CID as an @FT_UInt. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with CID faces and OpenType fonts, - * returning an error otherwise. - * - * @since: - * 2.3.9 - */ - FT_EXPORT( FT_Error ) - FT_Get_CID_From_Glyph_Index( FT_Face face, - FT_UInt glyph_index, - FT_UInt *cid ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTCID_H__ */ - - -/* END */ diff --git a/win32/include/freetype/fterrors.h b/win32/include/freetype/fterrors.h deleted file mode 100644 index 0507b9ad..00000000 --- a/win32/include/freetype/fterrors.h +++ /dev/null @@ -1,216 +0,0 @@ -/***************************************************************************/ -/* */ -/* fterrors.h */ -/* */ -/* FreeType error code handling (specification). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* error_enumerations */ - /* */ - /* <Title> */ - /* Error Enumerations */ - /* */ - /* <Abstract> */ - /* How to handle errors and error strings. */ - /* */ - /* <Description> */ - /* The header file `fterrors.h' (which is automatically included by */ - /* `freetype.h' defines the handling of FreeType's enumeration */ - /* constants. It can also be used to generate error message strings */ - /* with a small macro trick explained below. */ - /* */ - /* *Error* *Formats* */ - /* */ - /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */ - /* defined in `ftoption.h' in order to make the higher byte indicate */ - /* the module where the error has happened (this is not compatible */ - /* with standard builds of FreeType 2, however). See the file */ - /* `ftmoderr.h' for more details. */ - /* */ - /* *Error* *Message* *Strings* */ - /* */ - /* Error definitions are set up with special macros that allow client */ - /* applications to build a table of error message strings. The */ - /* strings are not included in a normal build of FreeType 2 to */ - /* save space (most client applications do not use them). */ - /* */ - /* To do so, you have to define the following macros before including */ - /* this file. */ - /* */ - /* { */ - /* FT_ERROR_START_LIST */ - /* } */ - /* */ - /* This macro is called before anything else to define the start of */ - /* the error list. It is followed by several FT_ERROR_DEF calls. */ - /* */ - /* { */ - /* FT_ERROR_DEF( e, v, s ) */ - /* } */ - /* */ - /* This macro is called to define one single error. `e' is the error */ - /* code identifier (e.g., `Invalid_Argument'), `v' is the error's */ - /* numerical value, and `s' is the corresponding error string. */ - /* */ - /* { */ - /* FT_ERROR_END_LIST */ - /* } */ - /* */ - /* This macro ends the list. */ - /* */ - /* Additionally, you have to undefine `__FTERRORS_H__' before */ - /* #including this file. */ - /* */ - /* Here is a simple example. */ - /* */ - /* { */ - /* #undef __FTERRORS_H__ */ - /* #define FT_ERRORDEF( e, v, s ) { e, s }, */ - /* #define FT_ERROR_START_LIST { */ - /* #define FT_ERROR_END_LIST { 0, NULL } }; */ - /* */ - /* const struct */ - /* { */ - /* int err_code; */ - /* const char* err_msg; */ - /* } ft_errors[] = */ - /* */ - /* #include FT_ERRORS_H */ - /* } */ - /* */ - /* Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with */ - /* `FT_NOERRORDEF'; it is always zero. */ - /* */ - /*************************************************************************/ - - /* */ - -#ifndef __FTERRORS_H__ -#define __FTERRORS_H__ - - - /* include module base error codes */ -#include FT_MODULE_ERRORS_H - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** SETUP MACROS *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#undef FT_NEED_EXTERN_C - - - /* FT_ERR_PREFIX is used as a prefix for error identifiers. */ - /* By default, we use `FT_Err_'. */ - /* */ -#ifndef FT_ERR_PREFIX -#define FT_ERR_PREFIX FT_Err_ -#endif - - - /* FT_ERR_BASE is used as the base for module-specific errors. */ - /* */ -#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS - -#ifndef FT_ERR_BASE -#define FT_ERR_BASE FT_Mod_Err_Base -#endif - -#else - -#undef FT_ERR_BASE -#define FT_ERR_BASE 0 - -#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */ - - - /* If FT_ERRORDEF is not defined, we need to define a simple */ - /* enumeration type. */ - /* */ -#ifndef FT_ERRORDEF - -#define FT_ERRORDEF( e, v, s ) e = v, -#define FT_ERROR_START_LIST enum { -#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) }; - -#ifdef __cplusplus -#define FT_NEED_EXTERN_C - extern "C" { -#endif - -#endif /* !FT_ERRORDEF */ - - - /* this macro is used to define an error */ -#define FT_ERRORDEF_( e, v, s ) \ - FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s ) - - /* this is only used for <module>_Err_Ok, which must be 0! */ -#define FT_NOERRORDEF_( e, v, s ) \ - FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s ) - - -#ifdef FT_ERROR_START_LIST - FT_ERROR_START_LIST -#endif - - - /* now include the error codes */ -#include FT_ERROR_DEFINITIONS_H - - -#ifdef FT_ERROR_END_LIST - FT_ERROR_END_LIST -#endif - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** SIMPLE CLEANUP *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - -#ifdef FT_NEED_EXTERN_C - } -#endif - -#undef FT_ERROR_START_LIST -#undef FT_ERROR_END_LIST - -#undef FT_ERRORDEF -#undef FT_ERRORDEF_ -#undef FT_NOERRORDEF_ - -#undef FT_NEED_EXTERN_C -#undef FT_ERR_BASE - - /* FT_ERR_PREFIX is needed internally */ -#ifndef FT2_BUILD_LIBRARY -#undef FT_ERR_PREFIX -#endif - -#endif /* __FTERRORS_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftfntfmt.h b/win32/include/freetype/ftfntfmt.h deleted file mode 100644 index 1f8ff28f..00000000 --- a/win32/include/freetype/ftfntfmt.h +++ /dev/null @@ -1,92 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftfntfmt.h */ -/* */ -/* Support functions for font formats. */ -/* */ -/* Copyright 2002-2015 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 __FTFNTFMT_H__ -#define __FTFNTFMT_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* font_formats */ - /* */ - /* <Title> */ - /* Font Formats */ - /* */ - /* <Abstract> */ - /* Getting the font format. */ - /* */ - /* <Description> */ - /* The single function in this section can be used to get the font */ - /* format. Note that this information is not needed normally; */ - /* however, there are special cases (like in PDF devices) where it is */ - /* important to differentiate, in spite of FreeType's uniform API. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Font_Format */ - /* */ - /* <Description> */ - /* Return a string describing the format of a given face. Possible */ - /* values are `TrueType', `Type~1', `BDF', `PCF', `Type~42', */ - /* `CID~Type~1', `CFF', `PFR', and `Windows~FNT'. */ - /* */ - /* The return value is suitable to be used as an X11 FONT_PROPERTY. */ - /* */ - /* <Input> */ - /* face :: */ - /* Input face handle. */ - /* */ - /* <Return> */ - /* Font format string. NULL in case of error. */ - /* */ - /* <Note> */ - /* A deprecated name for the same function is */ - /* `FT_Get_X11_Font_Format'. */ - /* */ - FT_EXPORT( const char* ) - FT_Get_Font_Format( FT_Face face ); - - - /* deprecated */ - FT_EXPORT( const char* ) - FT_Get_X11_Font_Format( FT_Face face ); - - - /* */ - - -FT_END_HEADER - -#endif /* __FTFNTFMT_H__ */ diff --git a/win32/include/freetype/ftgasp.h b/win32/include/freetype/ftgasp.h deleted file mode 100644 index 9a9b6321..00000000 --- a/win32/include/freetype/ftgasp.h +++ /dev/null @@ -1,129 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftgasp.h */ -/* */ -/* Access of TrueType's `gasp' table (specification). */ -/* */ -/* Copyright 2007-2015 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 _FT_GASP_H_ -#define _FT_GASP_H_ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - - /*************************************************************************** - * - * @section: - * gasp_table - * - * @title: - * Gasp Table - * - * @abstract: - * Retrieving TrueType `gasp' table entries. - * - * @description: - * The function @FT_Get_Gasp can be used to query a TrueType or OpenType - * font for specific entries in its `gasp' table, if any. This is - * mainly useful when implementing native TrueType hinting with the - * bytecode interpreter to duplicate the Windows text rendering results. - */ - - /************************************************************************* - * - * @enum: - * FT_GASP_XXX - * - * @description: - * A list of values and/or bit-flags returned by the @FT_Get_Gasp - * function. - * - * @values: - * FT_GASP_NO_TABLE :: - * This special value means that there is no GASP table in this face. - * It is up to the client to decide what to do. - * - * FT_GASP_DO_GRIDFIT :: - * Grid-fitting and hinting should be performed at the specified ppem. - * This *really* means TrueType bytecode interpretation. If this bit - * is not set, no hinting gets applied. - * - * FT_GASP_DO_GRAY :: - * Anti-aliased rendering should be performed at the specified ppem. - * If not set, do monochrome rendering. - * - * FT_GASP_SYMMETRIC_SMOOTHING :: - * If set, smoothing along multiple axes must be used with ClearType. - * - * FT_GASP_SYMMETRIC_GRIDFIT :: - * Grid-fitting must be used with ClearType's symmetric smoothing. - * - * @note: - * The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be - * used for standard font rasterization only. Independently of that, - * `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to - * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and - * `FT_GASP_DO_GRAY' are consequently ignored). - * - * `ClearType' is Microsoft's implementation of LCD rendering, partly - * protected by patents. - * - * @since: - * 2.3.0 - */ -#define FT_GASP_NO_TABLE -1 -#define FT_GASP_DO_GRIDFIT 0x01 -#define FT_GASP_DO_GRAY 0x02 -#define FT_GASP_SYMMETRIC_SMOOTHING 0x08 -#define FT_GASP_SYMMETRIC_GRIDFIT 0x10 - - - /************************************************************************* - * - * @func: - * FT_Get_Gasp - * - * @description: - * Read the `gasp' table from a TrueType or OpenType font file and - * return the entry corresponding to a given character pixel size. - * - * @input: - * face :: The source face handle. - * ppem :: The vertical character pixel size. - * - * @return: - * Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no - * `gasp' table in the face. - * - * @since: - * 2.3.0 - */ - FT_EXPORT( FT_Int ) - FT_Get_Gasp( FT_Face face, - FT_UInt ppem ); - - /* */ - - -#endif /* _FT_GASP_H_ */ - - -/* END */ diff --git a/win32/include/freetype/ftglyph.h b/win32/include/freetype/ftglyph.h deleted file mode 100644 index 803ad396..00000000 --- a/win32/include/freetype/ftglyph.h +++ /dev/null @@ -1,605 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftglyph.h */ -/* */ -/* FreeType convenience functions to handle glyphs (specification). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file contains the definition of several convenience functions */ - /* that can be used by client applications to easily retrieve glyph */ - /* bitmaps and outlines from a given face. */ - /* */ - /* These functions should be optional if you are writing a font server */ - /* or text layout engine on top of FreeType. However, they are pretty */ - /* handy for many other simple uses of the library. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTGLYPH_H__ -#define __FTGLYPH_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* glyph_management */ - /* */ - /* <Title> */ - /* Glyph Management */ - /* */ - /* <Abstract> */ - /* Generic interface to manage individual glyph data. */ - /* */ - /* <Description> */ - /* This section contains definitions used to manage glyph data */ - /* through generic FT_Glyph objects. Each of them can contain a */ - /* bitmap, a vector outline, or even images in other formats. */ - /* */ - /*************************************************************************/ - - - /* forward declaration to a private type */ - typedef struct FT_Glyph_Class_ FT_Glyph_Class; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Glyph */ - /* */ - /* <Description> */ - /* Handle to an object used to model generic glyph images. It is a */ - /* pointer to the @FT_GlyphRec structure and can contain a glyph */ - /* bitmap or pointer. */ - /* */ - /* <Note> */ - /* Glyph objects are not owned by the library. You must thus release */ - /* them manually (through @FT_Done_Glyph) _before_ calling */ - /* @FT_Done_FreeType. */ - /* */ - typedef struct FT_GlyphRec_* FT_Glyph; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_GlyphRec */ - /* */ - /* <Description> */ - /* The root glyph structure contains a given glyph image plus its */ - /* advance width in 16.16 fixed-point format. */ - /* */ - /* <Fields> */ - /* library :: A handle to the FreeType library object. */ - /* */ - /* clazz :: A pointer to the glyph's class. Private. */ - /* */ - /* format :: The format of the glyph's image. */ - /* */ - /* advance :: A 16.16 vector that gives the glyph's advance width. */ - /* */ - typedef struct FT_GlyphRec_ - { - FT_Library library; - const FT_Glyph_Class* clazz; - FT_Glyph_Format format; - FT_Vector advance; - - } FT_GlyphRec; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_BitmapGlyph */ - /* */ - /* <Description> */ - /* A handle to an object used to model a bitmap glyph image. This is */ - /* a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. */ - /* */ - typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_BitmapGlyphRec */ - /* */ - /* <Description> */ - /* A structure used for bitmap glyph images. This really is a */ - /* `sub-class' of @FT_GlyphRec. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Glyph fields. */ - /* */ - /* left :: The left-side bearing, i.e., the horizontal distance */ - /* from the current pen position to the left border of the */ - /* glyph bitmap. */ - /* */ - /* top :: The top-side bearing, i.e., the vertical distance from */ - /* the current pen position to the top border of the glyph */ - /* bitmap. This distance is positive for upwards~y! */ - /* */ - /* bitmap :: A descriptor for the bitmap. */ - /* */ - /* <Note> */ - /* You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have */ - /* `glyph->format == FT_GLYPH_FORMAT_BITMAP'. This lets you access */ - /* the bitmap's contents easily. */ - /* */ - /* The corresponding pixel buffer is always owned by @FT_BitmapGlyph */ - /* and is thus created and destroyed with it. */ - /* */ - typedef struct FT_BitmapGlyphRec_ - { - FT_GlyphRec root; - FT_Int left; - FT_Int top; - FT_Bitmap bitmap; - - } FT_BitmapGlyphRec; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_OutlineGlyph */ - /* */ - /* <Description> */ - /* A handle to an object used to model an outline glyph image. This */ - /* is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */ - /* */ - typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_OutlineGlyphRec */ - /* */ - /* <Description> */ - /* A structure used for outline (vectorial) glyph images. This */ - /* really is a `sub-class' of @FT_GlyphRec. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Glyph fields. */ - /* */ - /* outline :: A descriptor for the outline. */ - /* */ - /* <Note> */ - /* You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have */ - /* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access */ - /* the outline's content easily. */ - /* */ - /* As the outline is extracted from a glyph slot, its coordinates are */ - /* expressed normally in 26.6 pixels, unless the flag */ - /* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */ - /* */ - /* The outline's tables are always owned by the object and are */ - /* destroyed with it. */ - /* */ - typedef struct FT_OutlineGlyphRec_ - { - FT_GlyphRec root; - FT_Outline outline; - - } FT_OutlineGlyphRec; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Glyph */ - /* */ - /* <Description> */ - /* A function used to extract a glyph image from a slot. Note that */ - /* the created @FT_Glyph object must be released with @FT_Done_Glyph. */ - /* */ - /* <Input> */ - /* slot :: A handle to the source glyph slot. */ - /* */ - /* <Output> */ - /* aglyph :: A handle to the glyph object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Glyph( FT_GlyphSlot slot, - FT_Glyph *aglyph ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Copy */ - /* */ - /* <Description> */ - /* A function used to copy a glyph image. Note that the created */ - /* @FT_Glyph object must be released with @FT_Done_Glyph. */ - /* */ - /* <Input> */ - /* source :: A handle to the source glyph object. */ - /* */ - /* <Output> */ - /* target :: A handle to the target glyph object. 0~in case of */ - /* error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Glyph_Copy( FT_Glyph source, - FT_Glyph *target ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Transform */ - /* */ - /* <Description> */ - /* Transform a glyph image if its format is scalable. */ - /* */ - /* <InOut> */ - /* glyph :: A handle to the target glyph object. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to a 2x2 matrix to apply. */ - /* */ - /* delta :: A pointer to a 2d vector to apply. Coordinates are */ - /* expressed in 1/64th of a pixel. */ - /* */ - /* <Return> */ - /* FreeType error code (if not 0, the glyph format is not scalable). */ - /* */ - /* <Note> */ - /* The 2x2 transformation matrix is also applied to the glyph's */ - /* advance vector. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Glyph_Transform( FT_Glyph glyph, - FT_Matrix* matrix, - FT_Vector* delta ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Glyph_BBox_Mode */ - /* */ - /* <Description> */ - /* The mode how the values of @FT_Glyph_Get_CBox are returned. */ - /* */ - /* <Values> */ - /* FT_GLYPH_BBOX_UNSCALED :: */ - /* Return unscaled font units. */ - /* */ - /* FT_GLYPH_BBOX_SUBPIXELS :: */ - /* Return unfitted 26.6 coordinates. */ - /* */ - /* FT_GLYPH_BBOX_GRIDFIT :: */ - /* Return grid-fitted 26.6 coordinates. */ - /* */ - /* FT_GLYPH_BBOX_TRUNCATE :: */ - /* Return coordinates in integer pixels. */ - /* */ - /* FT_GLYPH_BBOX_PIXELS :: */ - /* Return grid-fitted pixel coordinates. */ - /* */ - typedef enum FT_Glyph_BBox_Mode_ - { - FT_GLYPH_BBOX_UNSCALED = 0, - FT_GLYPH_BBOX_SUBPIXELS = 0, - FT_GLYPH_BBOX_GRIDFIT = 1, - FT_GLYPH_BBOX_TRUNCATE = 2, - FT_GLYPH_BBOX_PIXELS = 3 - - } FT_Glyph_BBox_Mode; - - - /* these constants are deprecated; use the corresponding */ - /* `FT_Glyph_BBox_Mode' values instead */ -#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED -#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS -#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT -#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE -#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Get_CBox */ - /* */ - /* <Description> */ - /* Return a glyph's `control box'. The control box encloses all the */ - /* outline's points, including Bézier control points. Though it */ - /* coincides with the exact bounding box for most glyphs, it can be */ - /* slightly larger in some situations (like when rotating an outline */ - /* that contains Bézier outside arcs). */ - /* */ - /* Computing the control box is very fast, while getting the bounding */ - /* box can take much more time as it needs to walk over all segments */ - /* and arcs in the outline. To get the latter, you can use the */ - /* `ftbbox' component, which is dedicated to this single task. */ - /* */ - /* <Input> */ - /* glyph :: A handle to the source glyph object. */ - /* */ - /* mode :: The mode that indicates how to interpret the returned */ - /* bounding box values. */ - /* */ - /* <Output> */ - /* acbox :: The glyph coordinate bounding box. Coordinates are */ - /* expressed in 1/64th of pixels if it is grid-fitted. */ - /* */ - /* <Note> */ - /* Coordinates are relative to the glyph origin, using the y~upwards */ - /* convention. */ - /* */ - /* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode' */ - /* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font */ - /* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */ - /* is another name for this constant. */ - /* */ - /* If the font is tricky and the glyph has been loaded with */ - /* @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get */ - /* reasonable values for the CBox it is necessary to load the glyph */ - /* at a large ppem value (so that the hinting instructions can */ - /* properly shift and scale the subglyphs), then extracting the CBox, */ - /* which can be eventually converted back to font units. */ - /* */ - /* Note that the maximum coordinates are exclusive, which means that */ - /* one can compute the width and height of the glyph image (be it in */ - /* integer or 26.6 pixels) as: */ - /* */ - /* { */ - /* width = bbox.xMax - bbox.xMin; */ - /* height = bbox.yMax - bbox.yMin; */ - /* } */ - /* */ - /* Note also that for 26.6 coordinates, if `bbox_mode' is set to */ - /* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, */ - /* which corresponds to: */ - /* */ - /* { */ - /* bbox.xMin = FLOOR(bbox.xMin); */ - /* bbox.yMin = FLOOR(bbox.yMin); */ - /* bbox.xMax = CEILING(bbox.xMax); */ - /* bbox.yMax = CEILING(bbox.yMax); */ - /* } */ - /* */ - /* To get the bbox in pixel coordinates, set `bbox_mode' to */ - /* @FT_GLYPH_BBOX_TRUNCATE. */ - /* */ - /* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode' */ - /* to @FT_GLYPH_BBOX_PIXELS. */ - /* */ - FT_EXPORT( void ) - FT_Glyph_Get_CBox( FT_Glyph glyph, - FT_UInt bbox_mode, - FT_BBox *acbox ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_To_Bitmap */ - /* */ - /* <Description> */ - /* Convert a given glyph object to a bitmap glyph object. */ - /* */ - /* <InOut> */ - /* the_glyph :: A pointer to a handle to the target glyph. */ - /* */ - /* <Input> */ - /* render_mode :: An enumeration that describes how the data is */ - /* rendered. */ - /* */ - /* origin :: A pointer to a vector used to translate the glyph */ - /* image before rendering. Can be~0 (if no */ - /* translation). The origin is expressed in */ - /* 26.6 pixels. */ - /* */ - /* destroy :: A boolean that indicates that the original glyph */ - /* image should be destroyed by this function. It is */ - /* never destroyed in case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function does nothing if the glyph format isn't scalable. */ - /* */ - /* The glyph image is translated with the `origin' vector before */ - /* rendering. */ - /* */ - /* The first parameter is a pointer to an @FT_Glyph handle, that will */ - /* be _replaced_ by this function (with newly allocated data). */ - /* Typically, you would use (omitting error handling): */ - /* */ - /* */ - /* { */ - /* FT_Glyph glyph; */ - /* FT_BitmapGlyph glyph_bitmap; */ - /* */ - /* */ - /* // load glyph */ - /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT ); */ - /* */ - /* // extract glyph image */ - /* error = FT_Get_Glyph( face->glyph, &glyph ); */ - /* */ - /* // convert to a bitmap (default render mode + destroying old) */ - /* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */ - /* { */ - /* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, */ - /* 0, 1 ); */ - /* if ( error ) // `glyph' unchanged */ - /* ... */ - /* } */ - /* */ - /* // access bitmap content by typecasting */ - /* glyph_bitmap = (FT_BitmapGlyph)glyph; */ - /* */ - /* // do funny stuff with it, like blitting/drawing */ - /* ... */ - /* */ - /* // discard glyph image (bitmap or not) */ - /* FT_Done_Glyph( glyph ); */ - /* } */ - /* */ - /* */ - /* Here another example, again without error handling: */ - /* */ - /* */ - /* { */ - /* FT_Glyph glyphs[MAX_GLYPHS] */ - /* */ - /* */ - /* ... */ - /* */ - /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */ - /* error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || */ - /* FT_Get_Glyph ( face->glyph, &glyph[idx] ); */ - /* */ - /* ... */ - /* */ - /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */ - /* { */ - /* FT_Glyph bitmap = glyphs[idx]; */ - /* */ - /* */ - /* ... */ - /* */ - /* // after this call, `bitmap' no longer points into */ - /* // the `glyphs' array (and the old value isn't destroyed) */ - /* FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); */ - /* */ - /* ... */ - /* */ - /* FT_Done_Glyph( bitmap ); */ - /* } */ - /* */ - /* ... */ - /* */ - /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */ - /* FT_Done_Glyph( glyphs[idx] ); */ - /* } */ - /* */ - FT_EXPORT( FT_Error ) - FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, - FT_Render_Mode render_mode, - FT_Vector* origin, - FT_Bool destroy ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Glyph */ - /* */ - /* <Description> */ - /* Destroy a given glyph. */ - /* */ - /* <Input> */ - /* glyph :: A handle to the target glyph object. */ - /* */ - FT_EXPORT( void ) - FT_Done_Glyph( FT_Glyph glyph ); - - /* */ - - - /* other helpful functions */ - - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Matrix_Multiply */ - /* */ - /* <Description> */ - /* Perform the matrix operation `b = a*b'. */ - /* */ - /* <Input> */ - /* a :: A pointer to matrix `a'. */ - /* */ - /* <InOut> */ - /* b :: A pointer to matrix `b'. */ - /* */ - /* <Note> */ - /* The result is undefined if either `a' or `b' is zero. */ - /* */ - FT_EXPORT( void ) - FT_Matrix_Multiply( const FT_Matrix* a, - FT_Matrix* b ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Matrix_Invert */ - /* */ - /* <Description> */ - /* Invert a 2x2 matrix. Return an error if it can't be inverted. */ - /* */ - /* <InOut> */ - /* matrix :: A pointer to the target matrix. Remains untouched in */ - /* case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Matrix_Invert( FT_Matrix* matrix ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTGLYPH_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/win32/include/freetype/ftgxval.h b/win32/include/freetype/ftgxval.h deleted file mode 100644 index 0e9ac1da..00000000 --- a/win32/include/freetype/ftgxval.h +++ /dev/null @@ -1,357 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftgxval.h */ -/* */ -/* FreeType API for validating TrueTypeGX/AAT tables (specification). */ -/* */ -/* Copyright 2004-2015 by */ -/* Masatake YAMATO, Redhat K.K, */ -/* 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. */ -/* */ -/***************************************************************************/ - -/***************************************************************************/ -/* */ -/* gxvalid is derived from both gxlayout module and otvalid module. */ -/* Development of gxlayout is supported by the Information-technology */ -/* Promotion Agency(IPA), Japan. */ -/* */ -/***************************************************************************/ - - -#ifndef __FTGXVAL_H__ -#define __FTGXVAL_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* gx_validation */ - /* */ - /* <Title> */ - /* TrueTypeGX/AAT Validation */ - /* */ - /* <Abstract> */ - /* An API to validate TrueTypeGX/AAT tables. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions to validate */ - /* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */ - /* trak, prop, lcar). */ - /* */ - /* <Order> */ - /* FT_TrueTypeGX_Validate */ - /* FT_TrueTypeGX_Free */ - /* */ - /* FT_ClassicKern_Validate */ - /* FT_ClassicKern_Free */ - /* */ - /* FT_VALIDATE_GX_LENGTH */ - /* FT_VALIDATE_GXXXX */ - /* FT_VALIDATE_CKERNXXX */ - /* */ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* */ - /* Warning: Use FT_VALIDATE_XXX to validate a table. */ - /* Following definitions are for gxvalid developers. */ - /* */ - /* */ - /*************************************************************************/ - -#define FT_VALIDATE_feat_INDEX 0 -#define FT_VALIDATE_mort_INDEX 1 -#define FT_VALIDATE_morx_INDEX 2 -#define FT_VALIDATE_bsln_INDEX 3 -#define FT_VALIDATE_just_INDEX 4 -#define FT_VALIDATE_kern_INDEX 5 -#define FT_VALIDATE_opbd_INDEX 6 -#define FT_VALIDATE_trak_INDEX 7 -#define FT_VALIDATE_prop_INDEX 8 -#define FT_VALIDATE_lcar_INDEX 9 -#define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX - - - /************************************************************************* - * - * @macro: - * FT_VALIDATE_GX_LENGTH - * - * @description: - * The number of tables checked in this module. Use it as a parameter - * for the `table-length' argument of function @FT_TrueTypeGX_Validate. - */ -#define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1) - - /* */ - - /* Up to 0x1000 is used by otvalid. - Ox2xxx is reserved for feature OT extension. */ -#define FT_VALIDATE_GX_START 0x4000 -#define FT_VALIDATE_GX_BITFIELD( tag ) \ - ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) - - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_GXXXX - * - * @description: - * A list of bit-field constants used with @FT_TrueTypeGX_Validate to - * indicate which TrueTypeGX/AAT Type tables should be validated. - * - * @values: - * FT_VALIDATE_feat :: - * Validate `feat' table. - * - * FT_VALIDATE_mort :: - * Validate `mort' table. - * - * FT_VALIDATE_morx :: - * Validate `morx' table. - * - * FT_VALIDATE_bsln :: - * Validate `bsln' table. - * - * FT_VALIDATE_just :: - * Validate `just' table. - * - * FT_VALIDATE_kern :: - * Validate `kern' table. - * - * FT_VALIDATE_opbd :: - * Validate `opbd' table. - * - * FT_VALIDATE_trak :: - * Validate `trak' table. - * - * FT_VALIDATE_prop :: - * Validate `prop' table. - * - * FT_VALIDATE_lcar :: - * Validate `lcar' table. - * - * FT_VALIDATE_GX :: - * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, - * opbd, trak, prop and lcar). - * - */ - -#define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat ) -#define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort ) -#define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx ) -#define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln ) -#define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just ) -#define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern ) -#define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd ) -#define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak ) -#define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop ) -#define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar ) - -#define FT_VALIDATE_GX ( FT_VALIDATE_feat | \ - FT_VALIDATE_mort | \ - FT_VALIDATE_morx | \ - FT_VALIDATE_bsln | \ - FT_VALIDATE_just | \ - FT_VALIDATE_kern | \ - FT_VALIDATE_opbd | \ - FT_VALIDATE_trak | \ - FT_VALIDATE_prop | \ - FT_VALIDATE_lcar ) - - - /********************************************************************** - * - * @function: - * FT_TrueTypeGX_Validate - * - * @description: - * Validate various TrueTypeGX tables to assure that all offsets and - * indices are valid. The idea is that a higher-level library that - * actually does the text layout can access those tables without - * error checking (which can be quite time consuming). - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field that specifies the tables to be validated. See - * @FT_VALIDATE_GXXXX for possible values. - * - * table_length :: - * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH - * should be passed. - * - * @output: - * tables :: - * The array where all validated sfnt tables are stored. - * The array itself must be allocated by a client. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with TrueTypeGX fonts, returning an error - * otherwise. - * - * After use, the application should deallocate the buffers pointed to by - * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value - * indicates that the table either doesn't exist in the font, the - * application hasn't asked for validation, or the validator doesn't have - * the ability to validate the sfnt table. - */ - FT_EXPORT( FT_Error ) - FT_TrueTypeGX_Validate( FT_Face face, - FT_UInt validation_flags, - FT_Bytes tables[FT_VALIDATE_GX_LENGTH], - FT_UInt table_length ); - - - /********************************************************************** - * - * @function: - * FT_TrueTypeGX_Free - * - * @description: - * Free the buffer allocated by TrueTypeGX validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer allocated by - * @FT_TrueTypeGX_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_TrueTypeGX_Validate only. - */ - FT_EXPORT( void ) - FT_TrueTypeGX_Free( FT_Face face, - FT_Bytes table ); - - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_CKERNXXX - * - * @description: - * A list of bit-field constants used with @FT_ClassicKern_Validate - * to indicate the classic kern dialect or dialects. If the selected - * type doesn't fit, @FT_ClassicKern_Validate regards the table as - * invalid. - * - * @values: - * FT_VALIDATE_MS :: - * Handle the `kern' table as a classic Microsoft kern table. - * - * FT_VALIDATE_APPLE :: - * Handle the `kern' table as a classic Apple kern table. - * - * FT_VALIDATE_CKERN :: - * Handle the `kern' as either classic Apple or Microsoft kern table. - */ -#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 ) -#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 ) - -#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE ) - - - /********************************************************************** - * - * @function: - * FT_ClassicKern_Validate - * - * @description: - * Validate classic (16-bit format) kern table to assure that the offsets - * and indices are valid. The idea is that a higher-level library that - * actually does the text layout can access those tables without error - * checking (which can be quite time consuming). - * - * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both - * the new 32-bit format and the classic 16-bit format, while - * FT_ClassicKern_Validate only supports the classic 16-bit format. - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field that specifies the dialect to be validated. See - * @FT_VALIDATE_CKERNXXX for possible values. - * - * @output: - * ckern_table :: - * A pointer to the kern table. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * After use, the application should deallocate the buffers pointed to by - * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value - * indicates that the table doesn't exist in the font. - */ - FT_EXPORT( FT_Error ) - FT_ClassicKern_Validate( FT_Face face, - FT_UInt validation_flags, - FT_Bytes *ckern_table ); - - - /********************************************************************** - * - * @function: - * FT_ClassicKern_Free - * - * @description: - * Free the buffer allocated by classic Kern validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer that is allocated by - * @FT_ClassicKern_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_ClassicKern_Validate only. - */ - FT_EXPORT( void ) - FT_ClassicKern_Free( FT_Face face, - FT_Bytes table ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTGXVAL_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftgzip.h b/win32/include/freetype/ftgzip.h deleted file mode 100644 index b3a532d5..00000000 --- a/win32/include/freetype/ftgzip.h +++ /dev/null @@ -1,148 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftgzip.h */ -/* */ -/* Gzip-compressed stream support. */ -/* */ -/* Copyright 2002-2015 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 __FTGZIP_H__ -#define __FTGZIP_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* <Section> */ - /* gzip */ - /* */ - /* <Title> */ - /* GZIP Streams */ - /* */ - /* <Abstract> */ - /* Using gzip-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Gzip-specific functions. */ - /* */ - /*************************************************************************/ - - - /************************************************************************ - * - * @function: - * FT_Stream_OpenGzip - * - * @description: - * Open a new stream to parse gzip-compressed font files. This is - * mainly used to support the compressed `*.pcf.gz' fonts that come - * with XFree86. - * - * @input: - * stream :: - * The target embedding stream. - * - * source :: - * The source stream. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream. - * - * In certain builds of the library, gzip compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a gzipped stream from - * it and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with zlib support. - */ - FT_EXPORT( FT_Error ) - FT_Stream_OpenGzip( FT_Stream stream, - FT_Stream source ); - - - /************************************************************************ - * - * @function: - * FT_Gzip_Uncompress - * - * @description: - * Decompress a zipped input buffer into an output buffer. This function - * is modeled after zlib's `uncompress' function. - * - * @input: - * memory :: - * A FreeType memory handle. - * - * input :: - * The input buffer. - * - * input_len :: - * The length of the input buffer. - * - * @output: - * output:: - * The output buffer. - * - * @inout: - * output_len :: - * Before calling the function, this is the the total size of the - * output buffer, which must be large enough to hold the entire - * uncompressed data (so the size of the uncompressed data must be - * known in advance). After calling the function, `output_len' is the - * size of the used data in `output'. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with zlib support. - */ - FT_EXPORT( FT_Error ) - FT_Gzip_Uncompress( FT_Memory memory, - FT_Byte* output, - FT_ULong* output_len, - const FT_Byte* input, - FT_ULong input_len ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTGZIP_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftimage.h b/win32/include/freetype/ftimage.h deleted file mode 100644 index 82f284c4..00000000 --- a/win32/include/freetype/ftimage.h +++ /dev/null @@ -1,1214 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftimage.h */ -/* */ -/* FreeType glyph image formats and default raster interface */ -/* (specification). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ - - /*************************************************************************/ - /* */ - /* Note: A `raster' is simply a scan-line converter, used to render */ - /* FT_Outlines into FT_Bitmaps. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTIMAGE_H__ -#define __FTIMAGE_H__ - - - /* _STANDALONE_ is from ftgrays.c */ -#ifndef _STANDALONE_ -#include <ft2build.h> -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Pos */ - /* */ - /* <Description> */ - /* The type FT_Pos is used to store vectorial coordinates. Depending */ - /* on the context, these can represent distances in integer font */ - /* units, or 16.16, or 26.6 fixed-point pixel coordinates. */ - /* */ - typedef signed long FT_Pos; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Vector */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2D vector; coordinates are of */ - /* the FT_Pos type. */ - /* */ - /* <Fields> */ - /* x :: The horizontal coordinate. */ - /* y :: The vertical coordinate. */ - /* */ - typedef struct FT_Vector_ - { - FT_Pos x; - FT_Pos y; - - } FT_Vector; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_BBox */ - /* */ - /* <Description> */ - /* A structure used to hold an outline's bounding box, i.e., the */ - /* coordinates of its extrema in the horizontal and vertical */ - /* directions. */ - /* */ - /* <Fields> */ - /* xMin :: The horizontal minimum (left-most). */ - /* */ - /* yMin :: The vertical minimum (bottom-most). */ - /* */ - /* xMax :: The horizontal maximum (right-most). */ - /* */ - /* yMax :: The vertical maximum (top-most). */ - /* */ - /* <Note> */ - /* The bounding box is specified with the coordinates of the lower */ - /* left and the upper right corner. In PostScript, those values are */ - /* often called (llx,lly) and (urx,ury), respectively. */ - /* */ - /* If `yMin' is negative, this value gives the glyph's descender. */ - /* Otherwise, the glyph doesn't descend below the baseline. */ - /* Similarly, if `ymax' is positive, this value gives the glyph's */ - /* ascender. */ - /* */ - /* `xMin' gives the horizontal distance from the glyph's origin to */ - /* the left edge of the glyph's bounding box. If `xMin' is negative, */ - /* the glyph extends to the left of the origin. */ - /* */ - typedef struct FT_BBox_ - { - FT_Pos xMin, yMin; - FT_Pos xMax, yMax; - - } FT_BBox; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Pixel_Mode */ - /* */ - /* <Description> */ - /* An enumeration type used to describe the format of pixels in a */ - /* given bitmap. Note that additional formats may be added in the */ - /* future. */ - /* */ - /* <Values> */ - /* FT_PIXEL_MODE_NONE :: */ - /* Value~0 is reserved. */ - /* */ - /* FT_PIXEL_MODE_MONO :: */ - /* A monochrome bitmap, using 1~bit per pixel. Note that pixels */ - /* are stored in most-significant order (MSB), which means that */ - /* the left-most pixel in a byte has value 128. */ - /* */ - /* FT_PIXEL_MODE_GRAY :: */ - /* An 8-bit bitmap, generally used to represent anti-aliased glyph */ - /* images. Each pixel is stored in one byte. Note that the number */ - /* of `gray' levels is stored in the `num_grays' field of the */ - /* @FT_Bitmap structure (it generally is 256). */ - /* */ - /* FT_PIXEL_MODE_GRAY2 :: */ - /* A 2-bit per pixel bitmap, used to represent embedded */ - /* anti-aliased bitmaps in font files according to the OpenType */ - /* specification. We haven't found a single font using this */ - /* format, however. */ - /* */ - /* FT_PIXEL_MODE_GRAY4 :: */ - /* A 4-bit per pixel bitmap, representing embedded anti-aliased */ - /* bitmaps in font files according to the OpenType specification. */ - /* We haven't found a single font using this format, however. */ - /* */ - /* FT_PIXEL_MODE_LCD :: */ - /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */ - /* used for display on LCD displays; the bitmap is three times */ - /* wider than the original glyph image. See also */ - /* @FT_RENDER_MODE_LCD. */ - /* */ - /* FT_PIXEL_MODE_LCD_V :: */ - /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */ - /* used for display on rotated LCD displays; the bitmap is three */ - /* times taller than the original glyph image. See also */ - /* @FT_RENDER_MODE_LCD_V. */ - /* */ - /* FT_PIXEL_MODE_BGRA :: */ - /* An image with four 8-bit channels per pixel, representing a */ - /* color image (such as emoticons) with alpha channel. For each */ - /* pixel, the format is BGRA, which means, the blue channel comes */ - /* first in memory. The color channels are pre-multiplied and in */ - /* the sRGB colorspace. For example, full red at half-translucent */ - /* opacity will be represented as `00,00,80,80', not `00,00,FF,80'. */ - /* See also @FT_LOAD_COLOR. */ - /* */ - typedef enum FT_Pixel_Mode_ - { - FT_PIXEL_MODE_NONE = 0, - FT_PIXEL_MODE_MONO, - FT_PIXEL_MODE_GRAY, - FT_PIXEL_MODE_GRAY2, - FT_PIXEL_MODE_GRAY4, - FT_PIXEL_MODE_LCD, - FT_PIXEL_MODE_LCD_V, - FT_PIXEL_MODE_BGRA, - - FT_PIXEL_MODE_MAX /* do not remove */ - - } FT_Pixel_Mode; - - - /* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */ - /* values instead. */ -#define ft_pixel_mode_none FT_PIXEL_MODE_NONE -#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO -#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY -#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 -#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Bitmap */ - /* */ - /* <Description> */ - /* A structure used to describe a bitmap or pixmap to the raster. */ - /* Note that we now manage pixmaps of various depths through the */ - /* `pixel_mode' field. */ - /* */ - /* <Fields> */ - /* rows :: The number of bitmap rows. */ - /* */ - /* width :: The number of pixels in bitmap row. */ - /* */ - /* pitch :: The pitch's absolute value is the number of bytes */ - /* taken by one bitmap row, including padding. */ - /* However, the pitch is positive when the bitmap has */ - /* a `down' flow, and negative when it has an `up' */ - /* flow. In all cases, the pitch is an offset to add */ - /* to a bitmap pointer in order to go down one row. */ - /* */ - /* Note that `padding' means the alignment of a */ - /* bitmap to a byte border, and FreeType functions */ - /* normally align to the smallest possible integer */ - /* value. */ - /* */ - /* For the B/W rasterizer, `pitch' is always an even */ - /* number. */ - /* */ - /* To change the pitch of a bitmap (say, to make it a */ - /* multiple of 4), use @FT_Bitmap_Convert. */ - /* Alternatively, you might use callback functions to */ - /* directly render to the application's surface; see */ - /* the file `example2.cpp' in the tutorial for a */ - /* demonstration. */ - /* */ - /* buffer :: A typeless pointer to the bitmap buffer. This */ - /* value should be aligned on 32-bit boundaries in */ - /* most cases. */ - /* */ - /* num_grays :: This field is only used with */ - /* @FT_PIXEL_MODE_GRAY; it gives the number of gray */ - /* levels used in the bitmap. */ - /* */ - /* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */ - /* See @FT_Pixel_Mode for possible values. */ - /* */ - /* palette_mode :: This field is intended for paletted pixel modes; */ - /* it indicates how the palette is stored. Not */ - /* used currently. */ - /* */ - /* palette :: A typeless pointer to the bitmap palette; this */ - /* field is intended for paletted pixel modes. Not */ - /* used currently. */ - /* */ - typedef struct FT_Bitmap_ - { - unsigned int rows; - unsigned int width; - int pitch; - unsigned char* buffer; - unsigned short num_grays; - unsigned char pixel_mode; - unsigned char palette_mode; - void* palette; - - } FT_Bitmap; - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Outline */ - /* */ - /* <Description> */ - /* This structure is used to describe an outline to the scan-line */ - /* converter. */ - /* */ - /* <Fields> */ - /* n_contours :: The number of contours in the outline. */ - /* */ - /* n_points :: The number of points in the outline. */ - /* */ - /* points :: A pointer to an array of `n_points' @FT_Vector */ - /* elements, giving the outline's point coordinates. */ - /* */ - /* tags :: A pointer to an array of `n_points' chars, giving */ - /* each outline point's type. */ - /* */ - /* If bit~0 is unset, the point is `off' the curve, */ - /* i.e., a Bézier control point, while it is `on' if */ - /* set. */ - /* */ - /* Bit~1 is meaningful for `off' points only. If set, */ - /* it indicates a third-order Bézier arc control point; */ - /* and a second-order control point if unset. */ - /* */ - /* If bit~2 is set, bits 5-7 contain the drop-out mode */ - /* (as defined in the OpenType specification; the value */ - /* is the same as the argument to the SCANMODE */ - /* instruction). */ - /* */ - /* Bits 3 and~4 are reserved for internal purposes. */ - /* */ - /* contours :: An array of `n_contours' shorts, giving the end */ - /* point of each contour within the outline. For */ - /* example, the first contour is defined by the points */ - /* `0' to `contours[0]', the second one is defined by */ - /* the points `contours[0]+1' to `contours[1]', etc. */ - /* */ - /* flags :: A set of bit flags used to characterize the outline */ - /* and give hints to the scan-converter and hinter on */ - /* how to convert/grid-fit it. See @FT_OUTLINE_XXX. */ - /* */ - /* <Note> */ - /* The B/W rasterizer only checks bit~2 in the `tags' array for the */ - /* first point of each contour. The drop-out mode as given with */ - /* @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and */ - /* @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden. */ - /* */ - typedef struct FT_Outline_ - { - short n_contours; /* number of contours in glyph */ - short n_points; /* number of points in the glyph */ - - FT_Vector* points; /* the outline's points */ - char* tags; /* the points flags */ - short* contours; /* the contour end points */ - - int flags; /* outline masks */ - - } FT_Outline; - - /* */ - - /* Following limits must be consistent with */ - /* FT_Outline.{n_contours,n_points} */ -#define FT_OUTLINE_CONTOURS_MAX SHRT_MAX -#define FT_OUTLINE_POINTS_MAX SHRT_MAX - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_OUTLINE_XXX */ - /* */ - /* <Description> */ - /* A list of bit-field constants use for the flags in an outline's */ - /* `flags' field. */ - /* */ - /* <Values> */ - /* FT_OUTLINE_NONE :: */ - /* Value~0 is reserved. */ - /* */ - /* FT_OUTLINE_OWNER :: */ - /* If set, this flag indicates that the outline's field arrays */ - /* (i.e., `points', `flags', and `contours') are `owned' by the */ - /* outline object, and should thus be freed when it is destroyed. */ - /* */ - /* FT_OUTLINE_EVEN_ODD_FILL :: */ - /* By default, outlines are filled using the non-zero winding rule. */ - /* If set to 1, the outline will be filled using the even-odd fill */ - /* rule (only works with the smooth rasterizer). */ - /* */ - /* FT_OUTLINE_REVERSE_FILL :: */ - /* By default, outside contours of an outline are oriented in */ - /* clock-wise direction, as defined in the TrueType specification. */ - /* This flag is set if the outline uses the opposite direction */ - /* (typically for Type~1 fonts). This flag is ignored by the scan */ - /* converter. */ - /* */ - /* FT_OUTLINE_IGNORE_DROPOUTS :: */ - /* By default, the scan converter will try to detect drop-outs in */ - /* an outline and correct the glyph bitmap to ensure consistent */ - /* shape continuity. If set, this flag hints the scan-line */ - /* converter to ignore such cases. See below for more information. */ - /* */ - /* FT_OUTLINE_SMART_DROPOUTS :: */ - /* Select smart dropout control. If unset, use simple dropout */ - /* control. Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See */ - /* below for more information. */ - /* */ - /* FT_OUTLINE_INCLUDE_STUBS :: */ - /* If set, turn pixels on for `stubs', otherwise exclude them. */ - /* Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for */ - /* more information. */ - /* */ - /* FT_OUTLINE_HIGH_PRECISION :: */ - /* This flag indicates that the scan-line converter should try to */ - /* convert this outline to bitmaps with the highest possible */ - /* quality. It is typically set for small character sizes. Note */ - /* that this is only a hint that might be completely ignored by a */ - /* given scan-converter. */ - /* */ - /* FT_OUTLINE_SINGLE_PASS :: */ - /* This flag is set to force a given scan-converter to only use a */ - /* single pass over the outline to render a bitmap glyph image. */ - /* Normally, it is set for very large character sizes. It is only */ - /* a hint that might be completely ignored by a given */ - /* scan-converter. */ - /* */ - /* <Note> */ - /* The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */ - /* and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth */ - /* rasterizer. */ - /* */ - /* There exists a second mechanism to pass the drop-out mode to the */ - /* B/W rasterizer; see the `tags' field in @FT_Outline. */ - /* */ - /* Please refer to the description of the `SCANTYPE' instruction in */ - /* the OpenType specification (in file `ttinst1.doc') how simple */ - /* drop-outs, smart drop-outs, and stubs are defined. */ - /* */ -#define FT_OUTLINE_NONE 0x0 -#define FT_OUTLINE_OWNER 0x1 -#define FT_OUTLINE_EVEN_ODD_FILL 0x2 -#define FT_OUTLINE_REVERSE_FILL 0x4 -#define FT_OUTLINE_IGNORE_DROPOUTS 0x8 -#define FT_OUTLINE_SMART_DROPOUTS 0x10 -#define FT_OUTLINE_INCLUDE_STUBS 0x20 - -#define FT_OUTLINE_HIGH_PRECISION 0x100 -#define FT_OUTLINE_SINGLE_PASS 0x200 - - - /* these constants are deprecated; use the corresponding */ - /* `FT_OUTLINE_XXX' values instead */ -#define ft_outline_none FT_OUTLINE_NONE -#define ft_outline_owner FT_OUTLINE_OWNER -#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL -#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL -#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS -#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION -#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS - - /* */ - -#define FT_CURVE_TAG( flag ) ( flag & 3 ) - -#define FT_CURVE_TAG_ON 1 -#define FT_CURVE_TAG_CONIC 0 -#define FT_CURVE_TAG_CUBIC 2 - -#define FT_CURVE_TAG_HAS_SCANMODE 4 - -#define FT_CURVE_TAG_TOUCH_X 8 /* reserved for the TrueType hinter */ -#define FT_CURVE_TAG_TOUCH_Y 16 /* reserved for the TrueType hinter */ - -#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \ - FT_CURVE_TAG_TOUCH_Y ) - -#define FT_Curve_Tag_On FT_CURVE_TAG_ON -#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC -#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC -#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X -#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_MoveToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `move */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `move to' is emitted to start a new contour in an outline. */ - /* */ - /* <Input> */ - /* to :: A pointer to the target point of the `move to'. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of the */ - /* decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - typedef int - (*FT_Outline_MoveToFunc)( const FT_Vector* to, - void* user ); - -#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_LineToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `line */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `line to' is emitted to indicate a segment in the outline. */ - /* */ - /* <Input> */ - /* to :: A pointer to the target point of the `line to'. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of the */ - /* decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - typedef int - (*FT_Outline_LineToFunc)( const FT_Vector* to, - void* user ); - -#define FT_Outline_LineTo_Func FT_Outline_LineToFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_ConicToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `conic */ - /* to' function during outline walking or decomposition. */ - /* */ - /* A `conic to' is emitted to indicate a second-order Bézier arc in */ - /* the outline. */ - /* */ - /* <Input> */ - /* control :: An intermediate control point between the last position */ - /* and the new target in `to'. */ - /* */ - /* to :: A pointer to the target end point of the conic arc. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of */ - /* the decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - typedef int - (*FT_Outline_ConicToFunc)( const FT_Vector* control, - const FT_Vector* to, - void* user ); - -#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_CubicToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `cubic */ - /* to' function during outline walking or decomposition. */ - /* */ - /* A `cubic to' is emitted to indicate a third-order Bézier arc. */ - /* */ - /* <Input> */ - /* control1 :: A pointer to the first Bézier control point. */ - /* */ - /* control2 :: A pointer to the second Bézier control point. */ - /* */ - /* to :: A pointer to the target end point. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of */ - /* the decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - typedef int - (*FT_Outline_CubicToFunc)( const FT_Vector* control1, - const FT_Vector* control2, - const FT_Vector* to, - void* user ); - -#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Outline_Funcs */ - /* */ - /* <Description> */ - /* A structure to hold various function pointers used during outline */ - /* decomposition in order to emit segments, conic, and cubic Béziers. */ - /* */ - /* <Fields> */ - /* move_to :: The `move to' emitter. */ - /* */ - /* line_to :: The segment emitter. */ - /* */ - /* conic_to :: The second-order Bézier arc emitter. */ - /* */ - /* cubic_to :: The third-order Bézier arc emitter. */ - /* */ - /* shift :: The shift that is applied to coordinates before they */ - /* are sent to the emitter. */ - /* */ - /* delta :: The delta that is applied to coordinates before they */ - /* are sent to the emitter, but after the shift. */ - /* */ - /* <Note> */ - /* The point coordinates sent to the emitters are the transformed */ - /* version of the original coordinates (this is important for high */ - /* accuracy during scan-conversion). The transformation is simple: */ - /* */ - /* { */ - /* x' = (x << shift) - delta */ - /* y' = (x << shift) - delta */ - /* } */ - /* */ - /* Set the values of `shift' and `delta' to~0 to get the original */ - /* point coordinates. */ - /* */ - typedef struct FT_Outline_Funcs_ - { - FT_Outline_MoveToFunc move_to; - FT_Outline_LineToFunc line_to; - FT_Outline_ConicToFunc conic_to; - FT_Outline_CubicToFunc cubic_to; - - int shift; - FT_Pos delta; - - } FT_Outline_Funcs; - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_IMAGE_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags to an unsigned long type. */ - /* */ - /* <Note> */ - /* Since many 16-bit compilers don't like 32-bit enumerations, you */ - /* should redefine this macro in case of problems to something like */ - /* this: */ - /* */ - /* { */ - /* #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value */ - /* } */ - /* */ - /* 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 ) -#endif /* FT_IMAGE_TAG */ - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Glyph_Format */ - /* */ - /* <Description> */ - /* An enumeration type used to describe the format of a given glyph */ - /* image. Note that this version of FreeType only supports two image */ - /* formats, even though future font drivers will be able to register */ - /* their own format. */ - /* */ - /* <Values> */ - /* FT_GLYPH_FORMAT_NONE :: */ - /* The value~0 is reserved. */ - /* */ - /* FT_GLYPH_FORMAT_COMPOSITE :: */ - /* The glyph image is a composite of several other images. This */ - /* format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to */ - /* report compound glyphs (like accented characters). */ - /* */ - /* FT_GLYPH_FORMAT_BITMAP :: */ - /* The glyph image is a bitmap, and can be described as an */ - /* @FT_Bitmap. You generally need to access the `bitmap' field of */ - /* the @FT_GlyphSlotRec structure to read it. */ - /* */ - /* FT_GLYPH_FORMAT_OUTLINE :: */ - /* The glyph image is a vectorial outline made of line segments */ - /* and Bézier arcs; it can be described as an @FT_Outline; you */ - /* generally want to access the `outline' field of the */ - /* @FT_GlyphSlotRec structure to read it. */ - /* */ - /* FT_GLYPH_FORMAT_PLOTTER :: */ - /* The glyph image is a vectorial path with no inside and outside */ - /* contours. Some Type~1 fonts, like those in the Hershey family, */ - /* contain glyphs in this format. These are described as */ - /* @FT_Outline, but FreeType isn't currently capable of rendering */ - /* them correctly. */ - /* */ - typedef enum FT_Glyph_Format_ - { - FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ), - - FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ), - FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ), - FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ), - FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ) - - } FT_Glyph_Format; - - - /* these constants are deprecated; use the corresponding */ - /* `FT_Glyph_Format' values instead. */ -#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE -#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE -#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP -#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE -#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER - - - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** R A S T E R D E F I N I T I O N S *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* A raster is a scan converter, in charge of rendering an outline into */ - /* a 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. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* raster */ - /* */ - /* <Title> */ - /* Scanline Converter */ - /* */ - /* <Abstract> */ - /* How vectorial outlines are converted into bitmaps and pixmaps. */ - /* */ - /* <Description> */ - /* This section contains technical definitions. */ - /* */ - /* <Order> */ - /* FT_Raster */ - /* FT_Span */ - /* FT_SpanFunc */ - /* */ - /* FT_Raster_Params */ - /* FT_RASTER_FLAG_XXX */ - /* */ - /* FT_Raster_NewFunc */ - /* FT_Raster_DoneFunc */ - /* FT_Raster_ResetFunc */ - /* FT_Raster_SetModeFunc */ - /* FT_Raster_RenderFunc */ - /* FT_Raster_Funcs */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <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. */ - /* */ - /* <Fields> */ - /* x :: The span's horizontal start position. */ - /* */ - /* len :: The span's length in pixels. */ - /* */ - /* coverage :: The span color/coverage, ranging from 0 (background) */ - /* to 255 (foreground). */ - /* */ - /* <Note> */ - /* 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. */ - /* */ - typedef struct FT_Span_ - { - short x; - unsigned short len; - unsigned char coverage; - - } FT_Span; - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_SpanFunc */ - /* */ - /* <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. */ - /* */ - /* <Input> */ - /* y :: The scanline's y~coordinate. */ - /* */ - /* count :: The number of spans to draw on this scanline. */ - /* */ - /* spans :: A table of `count' spans to draw on the scanline. */ - /* */ - /* user :: 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 can be used to write anti-aliased outlines directly to a */ - /* given background bitmap, and even perform translucency. */ - /* */ - /* Note that the `count' field cannot be greater than a fixed value */ - /* defined by the `FT_MAX_GRAY_SPANS' configuration macro in */ - /* `ftoption.h'. By default, this value is set to~32, which means */ - /* that if there are more than 32~spans on a given scanline, the */ - /* callback is called several times with the same `y' parameter in */ - /* order to draw all callbacks. */ - /* */ - /* Otherwise, the callback is only called once per scan-line, and */ - /* only for those scanlines that do have `gray' pixels on them. */ - /* */ - typedef void - (*FT_SpanFunc)( int y, - int count, - const FT_Span* spans, - void* user ); - -#define FT_Raster_Span_Func FT_SpanFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_BitTest_Func */ - /* */ - /* <Description> */ - /* Deprecated, unimplemented. */ - /* */ - typedef int - (*FT_Raster_BitTest_Func)( int y, - int x, - void* user ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_BitSet_Func */ - /* */ - /* <Description> */ - /* Deprecated, unimplemented. */ - /* */ - typedef void - (*FT_Raster_BitSet_Func)( int y, - int x, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_RASTER_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flag constants as used in the `flags' field of a */ - /* @FT_Raster_Params structure. */ - /* */ - /* <Values> */ - /* FT_RASTER_FLAG_DEFAULT :: This value is 0. */ - /* */ - /* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */ - /* anti-aliased glyph image should be */ - /* generated. Otherwise, it will be */ - /* monochrome (1-bit). */ - /* */ - /* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */ - /* rendering. In this mode, client */ - /* applications must provide their own span */ - /* callback. This lets them directly */ - /* draw or compose over an existing bitmap. */ - /* If this bit is not set, the target */ - /* pixmap's buffer _must_ be zeroed before */ - /* rendering. */ - /* */ - /* Direct rendering is only possible with */ - /* anti-aliased glyphs. */ - /* */ - /* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */ - /* rendering mode. If set, the output will */ - /* be clipped to a box specified in the */ - /* `clip_box' field of the */ - /* @FT_Raster_Params structure. */ - /* */ - /* Note that by default, the glyph bitmap */ - /* is clipped to the target pixmap, except */ - /* in direct rendering mode where all spans */ - /* are generated if no clipping box is set. */ - /* */ -#define FT_RASTER_FLAG_DEFAULT 0x0 -#define FT_RASTER_FLAG_AA 0x1 -#define FT_RASTER_FLAG_DIRECT 0x2 -#define FT_RASTER_FLAG_CLIP 0x4 - - /* these constants are deprecated; use the corresponding */ - /* `FT_RASTER_FLAG_XXX' values instead */ -#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT -#define ft_raster_flag_aa FT_RASTER_FLAG_AA -#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT -#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Raster_Params */ - /* */ - /* <Description> */ - /* A structure to hold the arguments used by a raster's render */ - /* function. */ - /* */ - /* <Fields> */ - /* target :: The target bitmap. */ - /* */ - /* source :: A pointer to the source glyph image (e.g., an */ - /* @FT_Outline). */ - /* */ - /* flags :: The rendering flags. */ - /* */ - /* gray_spans :: The gray span drawing callback. */ - /* */ - /* black_spans :: Unused. */ - /* */ - /* bit_test :: Unused. */ - /* */ - /* bit_set :: Unused. */ - /* */ - /* user :: User-supplied data that is passed to each drawing */ - /* callback. */ - /* */ - /* clip_box :: An optional clipping box. It is only used in */ - /* direct rendering mode. Note that coordinates here */ - /* should be expressed in _integer_ pixels (and not in */ - /* 26.6 fixed-point units). */ - /* */ - /* <Note> */ - /* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */ - /* bit flag is set in the `flags' field, otherwise a monochrome */ - /* bitmap is generated. */ - /* */ - /* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */ - /* raster will call the `gray_spans' callback to draw gray pixel */ - /* spans. This allows direct composition over a pre-existing bitmap */ - /* through user-provided callbacks to perform the span drawing and */ - /* composition. Not supported by the monochrome rasterizer. */ - /* */ - typedef struct FT_Raster_Params_ - { - const FT_Bitmap* target; - const void* source; - int flags; - FT_SpanFunc gray_spans; - FT_SpanFunc black_spans; /* unused */ - FT_Raster_BitTest_Func bit_test; /* unused */ - FT_Raster_BitSet_Func bit_set; /* unused */ - void* user; - FT_BBox clip_box; - - } FT_Raster_Params; - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_NewFunc */ - /* */ - /* <Description> */ - /* A function used to create a new raster object. */ - /* */ - /* <Input> */ - /* memory :: A handle to the memory allocator. */ - /* */ - /* <Output> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - /* <Note> */ - /* The `memory' parameter is a typeless pointer in order to avoid */ - /* un-wanted dependencies on the rest of the FreeType code. In */ - /* practice, it is an @FT_Memory object, i.e., a handle to the */ - /* standard FreeType memory allocator. However, this field can be */ - /* completely ignored by a given raster implementation. */ - /* */ - typedef int - (*FT_Raster_NewFunc)( void* memory, - FT_Raster* raster ); - -#define FT_Raster_New_Func FT_Raster_NewFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_DoneFunc */ - /* */ - /* <Description> */ - /* A function used to destroy a given raster object. */ - /* */ - /* <Input> */ - /* raster :: A handle to the raster object. */ - /* */ - typedef void - (*FT_Raster_DoneFunc)( FT_Raster raster ); - -#define FT_Raster_Done_Func FT_Raster_DoneFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_ResetFunc */ - /* */ - /* <Description> */ - /* FreeType used to provide an area of memory called the `render */ - /* pool' available to all registered rasters. This was not thread */ - /* safe however and now FreeType never allocates this pool. NULL */ - /* is always passed in as pool_base. */ - /* */ - /* This function is called each time the render pool changes, or just */ - /* after a new raster object is created. */ - /* */ - /* <Input> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* pool_base :: The address in memory of the render pool. */ - /* */ - /* pool_size :: The size in bytes of the render pool. */ - /* */ - /* <Note> */ - /* Rasters should ignore the render pool and rely on dynamic or stack */ - /* allocation if they want to (a handle to the memory allocator is */ - /* passed to the raster constructor). */ - /* */ - typedef void - (*FT_Raster_ResetFunc)( FT_Raster raster, - unsigned char* pool_base, - unsigned long pool_size ); - -#define FT_Raster_Reset_Func FT_Raster_ResetFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_SetModeFunc */ - /* */ - /* <Description> */ - /* This function is a generic facility to change modes or attributes */ - /* in a given raster. This can be used for debugging purposes, or */ - /* simply to allow implementation-specific `features' in a given */ - /* raster module. */ - /* */ - /* <Input> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* mode :: A 4-byte tag used to name the mode or property. */ - /* */ - /* args :: A pointer to the new mode/property to use. */ - /* */ - typedef int - (*FT_Raster_SetModeFunc)( FT_Raster raster, - unsigned long mode, - void* args ); - -#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_RenderFunc */ - /* */ - /* <Description> */ - /* Invoke a given raster to scan-convert a given glyph image into a */ - /* target bitmap. */ - /* */ - /* <Input> */ - /* raster :: A handle to the raster object. */ - /* */ - /* params :: A pointer to an @FT_Raster_Params structure used to */ - /* store the rendering parameters. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - /* <Note> */ - /* The exact format of the source image depends on the raster's glyph */ - /* format defined in its @FT_Raster_Funcs structure. It can be an */ - /* @FT_Outline or anything else in order to support a large array of */ - /* glyph formats. */ - /* */ - /* Note also that the render function can fail and return a */ - /* `FT_Err_Unimplemented_Feature' error code if the raster used does */ - /* not support direct composition. */ - /* */ - /* XXX: For now, the standard raster doesn't support direct */ - /* composition but this should change for the final release (see */ - /* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */ - /* for examples of distinct implementations that support direct */ - /* composition). */ - /* */ - typedef int - (*FT_Raster_RenderFunc)( FT_Raster raster, - const FT_Raster_Params* params ); - -#define FT_Raster_Render_Func FT_Raster_RenderFunc - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Raster_Funcs */ - /* */ - /* <Description> */ - /* A structure used to describe a given raster class to the library. */ - /* */ - /* <Fields> */ - /* glyph_format :: The supported glyph format for this raster. */ - /* */ - /* raster_new :: The raster constructor. */ - /* */ - /* raster_reset :: Used to reset the render pool within the raster. */ - /* */ - /* raster_render :: A function to render a glyph into a given bitmap. */ - /* */ - /* raster_done :: The raster destructor. */ - /* */ - typedef struct FT_Raster_Funcs_ - { - FT_Glyph_Format glyph_format; - FT_Raster_NewFunc raster_new; - FT_Raster_ResetFunc raster_reset; - FT_Raster_SetModeFunc raster_set_mode; - FT_Raster_RenderFunc raster_render; - FT_Raster_DoneFunc raster_done; - - } FT_Raster_Funcs; - - /* */ - - -FT_END_HEADER - -#endif /* __FTIMAGE_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/win32/include/freetype/ftlcdfil.h b/win32/include/freetype/ftlcdfil.h deleted file mode 100644 index 653ed366..00000000 --- a/win32/include/freetype/ftlcdfil.h +++ /dev/null @@ -1,293 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftlcdfil.h */ -/* */ -/* FreeType API for color filtering of subpixel bitmap glyphs */ -/* (specification). */ -/* */ -/* Copyright 2006-2015 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 __FT_LCD_FILTER_H__ -#define __FT_LCD_FILTER_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************** - * - * @section: - * lcd_filtering - * - * @title: - * LCD Filtering - * - * @abstract: - * Reduce color fringes of subpixel-rendered bitmaps. - * - * @description: - * Subpixel 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. Since these - * subpixels are color pixels, using them unfiltered creates severe - * color fringes. Use the @FT_Library_SetLcdFilter API to specify a - * low-pass filter, which is then applied to subpixel-rendered bitmaps - * generated through @FT_Render_Glyph. The filter sacrifices some of - * the higher resolution to reduce color fringes, making the glyph image - * slightly blurrier. Positional improvements will remain. - * - * Note that no filter is active by default, and that this function is - * *not* implemented in default builds of the library. You need to - * #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file - * in order to activate it. - * - * A filter should have two properties: - * - * 1) It should be normalized, meaning the sum of the 5~components - * should be 256 (0x100). It is possible to go above or under this - * target sum, however: going under means tossing out contrast, going - * over means invoking clamping and thereby non-linearities that - * increase contrast somewhat at the expense of greater distortion - * and color-fringing. Contrast is better enhanced through stem - * darkening. - * - * 2) It should be color-balanced, meaning a filter `{~a, b, c, b, a~}' - * where a~+ b~=~c. It distributes the computed coverage for one - * subpixel to all subpixels equally, sacrificing some won resolution - * but drastically reducing color-fringing. Positioning improvements - * remain! Note that color-fringing can only really be minimized - * when using a color-balanced filter and alpha-blending the glyph - * onto a surface in linear space; see @FT_Render_Glyph. - * - * Regarding the form, a filter can be a `boxy' filter or a `beveled' - * filter. Boxy filters are sharper but are less forgiving of non-ideal - * gamma curves of a screen (viewing angles!), beveled filters are - * fuzzier but more tolerant. - * - * Examples: - * - * - [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor - * normalized. - * - * - [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not - * normalized. - * - * - [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not - * balanced. - * - * - [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not - * balanced. - * - * - [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost - * balanced. - * - * - [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost - * balanced. - * - * It is important to understand that linear alpha blending and gamma - * correction is critical for correctly rendering glyphs onto surfaces - * without artifacts and even more critical when subpixel rendering is - * involved. - * - * Each of the 3~alpha values (subpixels) is independently used to blend - * one color channel. That is, red alpha blends the red channel of the - * text color with the red channel of the background pixel. The - * distribution of density values by the color-balanced filter assumes - * alpha blending is done in linear space; only then color artifacts - * cancel out. - */ - - - /**************************************************************************** - * - * @enum: - * FT_LcdFilter - * - * @description: - * A list of values to identify various types of LCD filters. - * - * @values: - * FT_LCD_FILTER_NONE :: - * Do not perform filtering. When used with subpixel rendering, this - * results in sometimes severe color fringes. - * - * FT_LCD_FILTER_DEFAULT :: - * The default filter reduces color fringes considerably, at the cost - * of a slight blurriness in the output. - * - * It is a beveled, normalized, and color-balanced five-tap filter - * that is more forgiving to screens with non-ideal gamma curves and - * viewing angles. Note that while color-fringing is reduced, it can - * only be minimized by using linear alpha blending and gamma - * correction to render glyphs onto surfaces. - * - * FT_LCD_FILTER_LIGHT :: - * The light filter is a variant that is sharper at the cost of - * slightly more color fringes than the default one. - * - * It is a boxy, normalized, and color-balanced three-tap filter that - * is less forgiving to screens with non-ideal gamma curves and - * viewing angles. This filter works best when the rendering system - * uses linear alpha blending and gamma correction to render glyphs - * onto surfaces. - * - * FT_LCD_FILTER_LEGACY :: - * This filter corresponds to the original libXft color filter. It - * provides high contrast output but can exhibit really bad color - * fringes if glyphs are not extremely well hinted to the pixel grid. - * In other words, it only works well if the TrueType bytecode - * interpreter is enabled *and* high-quality hinted fonts are used. - * - * This filter is only provided for comparison purposes, and might be - * disabled or stay unsupported in the future. - * - * FT_LCD_FILTER_LEGACY1 :: - * For historical reasons, the FontConfig library returns a different - * enumeration value for legacy LCD filtering. To make code work that - * (incorrectly) forwards FontConfig's enumeration value to - * @FT_Library_SetLcdFilter without proper mapping, it is thus easiest - * to have another enumeration value, which is completely equal to - * `FT_LCD_FILTER_LEGACY'. - * - * @since: - * 2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2) - */ - typedef enum FT_LcdFilter_ - { - FT_LCD_FILTER_NONE = 0, - FT_LCD_FILTER_DEFAULT = 1, - FT_LCD_FILTER_LIGHT = 2, - FT_LCD_FILTER_LEGACY1 = 3, - FT_LCD_FILTER_LEGACY = 16, - - FT_LCD_FILTER_MAX /* do not remove */ - - } FT_LcdFilter; - - - /************************************************************************** - * - * @func: - * FT_Library_SetLcdFilter - * - * @description: - * This function is used to apply color filtering to LCD decimated - * bitmaps, like the ones used when calling @FT_Render_Glyph with - * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V. - * - * @input: - * library :: - * A handle to the target library instance. - * - * filter :: - * The filter type. - * - * You can use @FT_LCD_FILTER_NONE here to disable this feature, or - * @FT_LCD_FILTER_DEFAULT to use a default filter that should work - * well on most LCD screens. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This feature is always disabled by default. Clients must make an - * explicit call to this function with a `filter' value other than - * @FT_LCD_FILTER_NONE in order to enable it. - * - * Due to *PATENTS* covering subpixel rendering, this function doesn't - * do anything except returning `FT_Err_Unimplemented_Feature' if the - * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not - * defined in your build of the library, which should correspond to all - * default builds of FreeType. - * - * The filter affects glyph bitmaps rendered through @FT_Render_Glyph, - * @FT_Outline_Get_Bitmap, @FT_Load_Glyph, and @FT_Load_Char. - * - * It does _not_ affect the output of @FT_Outline_Render and - * @FT_Outline_Get_Bitmap. - * - * If this feature is activated, the dimensions of LCD glyph bitmaps are - * either larger or taller than the dimensions of the corresponding - * outline with regards to the pixel grid. For example, for - * @FT_RENDER_MODE_LCD, the filter adds up to 3~pixels to the left, and - * up to 3~pixels to the right. - * - * The bitmap offset values are adjusted correctly, so clients shouldn't - * need to modify their layout and glyph positioning code when enabling - * the filter. - * - * @since: - * 2.3.0 - */ - FT_EXPORT( FT_Error ) - FT_Library_SetLcdFilter( FT_Library library, - FT_LcdFilter filter ); - - - /************************************************************************** - * - * @func: - * FT_Library_SetLcdFilterWeights - * - * @description: - * Use this function to override the filter weights selected by - * @FT_Library_SetLcdFilter. By default, FreeType uses the quintuple - * (0x00, 0x55, 0x56, 0x55, 0x00) for FT_LCD_FILTER_LIGHT, and (0x10, - * 0x40, 0x70, 0x40, 0x10) for FT_LCD_FILTER_DEFAULT and - * FT_LCD_FILTER_LEGACY. - * - * @input: - * library :: - * A handle to the target library instance. - * - * weights :: - * A pointer to an array; the function copies the first five bytes and - * uses them to specify the filter weights. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * Due to *PATENTS* covering subpixel rendering, this function doesn't - * do anything except returning `FT_Err_Unimplemented_Feature' if the - * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not - * defined in your build of the library, which should correspond to all - * default builds of FreeType. - * - * This function must be called after @FT_Library_SetLcdFilter to have - * any effect. - * - * @since: - * 2.4.0 - */ - FT_EXPORT( FT_Error ) - FT_Library_SetLcdFilterWeights( FT_Library library, - unsigned char *weights ); - - /* */ - - -FT_END_HEADER - -#endif /* __FT_LCD_FILTER_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftlist.h b/win32/include/freetype/ftlist.h deleted file mode 100644 index 12b48c78..00000000 --- a/win32/include/freetype/ftlist.h +++ /dev/null @@ -1,276 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftlist.h */ -/* */ -/* Generic list support for FreeType (specification). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file implements functions relative to list processing. Its */ - /* data structures are defined in `freetype.h'. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTLIST_H__ -#define __FTLIST_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* list_processing */ - /* */ - /* <Title> */ - /* List Processing */ - /* */ - /* <Abstract> */ - /* Simple management of lists. */ - /* */ - /* <Description> */ - /* This section contains various definitions related to list */ - /* processing using doubly-linked nodes. */ - /* */ - /* <Order> */ - /* FT_List */ - /* FT_ListNode */ - /* FT_ListRec */ - /* FT_ListNodeRec */ - /* */ - /* FT_List_Add */ - /* FT_List_Insert */ - /* FT_List_Find */ - /* FT_List_Remove */ - /* FT_List_Up */ - /* FT_List_Iterate */ - /* FT_List_Iterator */ - /* FT_List_Finalize */ - /* FT_List_Destructor */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Find */ - /* */ - /* <Description> */ - /* Find the list node for a given listed object. */ - /* */ - /* <Input> */ - /* list :: A pointer to the parent list. */ - /* data :: The address of the listed object. */ - /* */ - /* <Return> */ - /* List node. NULL if it wasn't found. */ - /* */ - FT_EXPORT( FT_ListNode ) - FT_List_Find( FT_List list, - void* data ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Add */ - /* */ - /* <Description> */ - /* Append an element to the end of a list. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* node :: The node to append. */ - /* */ - FT_EXPORT( void ) - FT_List_Add( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Insert */ - /* */ - /* <Description> */ - /* Insert an element at the head of a list. */ - /* */ - /* <InOut> */ - /* list :: A pointer to parent list. */ - /* node :: The node to insert. */ - /* */ - FT_EXPORT( void ) - FT_List_Insert( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Remove */ - /* */ - /* <Description> */ - /* Remove a node from a list. This function doesn't check whether */ - /* the node is in the list! */ - /* */ - /* <Input> */ - /* node :: The node to remove. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* */ - FT_EXPORT( void ) - FT_List_Remove( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Up */ - /* */ - /* <Description> */ - /* Move a node to the head/top of a list. Used to maintain LRU */ - /* lists. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* node :: The node to move. */ - /* */ - FT_EXPORT( void ) - FT_List_Up( FT_List list, - FT_ListNode node ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_List_Iterator */ - /* */ - /* <Description> */ - /* An FT_List iterator function that is called during a list parse */ - /* by @FT_List_Iterate. */ - /* */ - /* <Input> */ - /* node :: The current iteration list node. */ - /* */ - /* user :: A typeless pointer passed to @FT_List_Iterate. */ - /* Can be used to point to the iteration's state. */ - /* */ - typedef FT_Error - (*FT_List_Iterator)( FT_ListNode node, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Iterate */ - /* */ - /* <Description> */ - /* Parse a list and calls a given iterator function on each element. */ - /* Note that parsing is stopped as soon as one of the iterator calls */ - /* returns a non-zero value. */ - /* */ - /* <Input> */ - /* list :: A handle to the list. */ - /* iterator :: An iterator function, called on each node of the list. */ - /* user :: A user-supplied field that is passed as the second */ - /* argument to the iterator. */ - /* */ - /* <Return> */ - /* The result (a FreeType error code) of the last iterator call. */ - /* */ - FT_EXPORT( FT_Error ) - FT_List_Iterate( FT_List list, - FT_List_Iterator iterator, - void* user ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_List_Destructor */ - /* */ - /* <Description> */ - /* An @FT_List iterator function that is called during a list */ - /* finalization by @FT_List_Finalize to destroy all elements in a */ - /* given list. */ - /* */ - /* <Input> */ - /* system :: The current system object. */ - /* */ - /* data :: The current object to destroy. */ - /* */ - /* user :: A typeless pointer passed to @FT_List_Iterate. It can */ - /* be used to point to the iteration's state. */ - /* */ - typedef void - (*FT_List_Destructor)( FT_Memory memory, - void* data, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Finalize */ - /* */ - /* <Description> */ - /* Destroy all elements in the list as well as the list itself. */ - /* */ - /* <Input> */ - /* list :: A handle to the list. */ - /* */ - /* destroy :: A list destructor that will be applied to each element */ - /* of the list. Set this to NULL if not needed. */ - /* */ - /* memory :: The current memory object that handles deallocation. */ - /* */ - /* user :: A user-supplied field that is passed as the last */ - /* argument to the destructor. */ - /* */ - /* <Note> */ - /* This function expects that all nodes added by @FT_List_Add or */ - /* @FT_List_Insert have been dynamically allocated. */ - /* */ - FT_EXPORT( void ) - FT_List_Finalize( FT_List list, - FT_List_Destructor destroy, - FT_Memory memory, - void* user ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTLIST_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftlzw.h b/win32/include/freetype/ftlzw.h deleted file mode 100644 index d3ec28e5..00000000 --- a/win32/include/freetype/ftlzw.h +++ /dev/null @@ -1,99 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftlzw.h */ -/* */ -/* LZW-compressed stream support. */ -/* */ -/* Copyright 2004-2015 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 __FTLZW_H__ -#define __FTLZW_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* <Section> */ - /* lzw */ - /* */ - /* <Title> */ - /* LZW Streams */ - /* */ - /* <Abstract> */ - /* Using LZW-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of LZW-specific functions. */ - /* */ - /*************************************************************************/ - - /************************************************************************ - * - * @function: - * FT_Stream_OpenLZW - * - * @description: - * Open a new stream to parse LZW-compressed font files. This is - * mainly used to support the compressed `*.pcf.Z' fonts that come - * with XFree86. - * - * @input: - * stream :: The target embedding stream. - * - * source :: The source stream. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream - * - * In certain builds of the library, LZW compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a LZW stream from it - * and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with LZW support. - */ - FT_EXPORT( FT_Error ) - FT_Stream_OpenLZW( FT_Stream stream, - FT_Stream source ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTLZW_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftmac.h b/win32/include/freetype/ftmac.h deleted file mode 100644 index 14c55cfe..00000000 --- a/win32/include/freetype/ftmac.h +++ /dev/null @@ -1,274 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmac.h */ -/* */ -/* Additional Mac-specific API. */ -/* */ -/* Copyright 1996-2015 by */ -/* Just van Rossum, 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. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* NOTE: Include this file after FT_FREETYPE_H and after any */ -/* Mac-specific headers (because this header uses Mac types such as */ -/* Handle, FSSpec, FSRef, etc.) */ -/* */ -/***************************************************************************/ - - -#ifndef __FTMAC_H__ -#define __FTMAC_H__ - - -#include <ft2build.h> - - -FT_BEGIN_HEADER - - -/* gcc-3.4.1 and later can warn about functions tagged as deprecated */ -#ifndef FT_DEPRECATED_ATTRIBUTE -#if defined(__GNUC__) && \ - ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) -#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) -#else -#define FT_DEPRECATED_ATTRIBUTE -#endif -#endif - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* mac_specific */ - /* */ - /* <Title> */ - /* Mac Specific Interface */ - /* */ - /* <Abstract> */ - /* Only available on the Macintosh. */ - /* */ - /* <Description> */ - /* The following definitions are only available if FreeType is */ - /* compiled on a Macintosh. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FOND */ - /* */ - /* <Description> */ - /* Create a new face object from a FOND resource. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* fond :: A FOND resource. */ - /* */ - /* face_index :: Only supported for the -1 `sanity check' special */ - /* case. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Notes> */ - /* This function can be used to create @FT_Face objects from fonts */ - /* that are installed in the system as follows. */ - /* */ - /* { */ - /* fond = GetResource( 'FOND', fontName ); */ - /* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */ - /* } */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face_From_FOND( FT_Library library, - Handle fond, - FT_Long face_index, - FT_Face *aface ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFile_From_Mac_Name */ - /* */ - /* <Description> */ - /* Return an FSSpec for the disk file containing the named font. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font (e.g., Times New Roman */ - /* Bold). */ - /* */ - /* <Output> */ - /* pathSpec :: FSSpec to the file. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* face_index :: Index of the face. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_GetFile_From_Mac_Name( const char* fontName, - FSSpec* pathSpec, - FT_Long* face_index ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFile_From_Mac_ATS_Name */ - /* */ - /* <Description> */ - /* Return an FSSpec for the disk file containing the named font. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font in ATS framework. */ - /* */ - /* <Output> */ - /* pathSpec :: FSSpec to the file. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* face_index :: Index of the face. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_GetFile_From_Mac_ATS_Name( const char* fontName, - FSSpec* pathSpec, - FT_Long* face_index ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFilePath_From_Mac_ATS_Name */ - /* */ - /* <Description> */ - /* Return a pathname of the disk file and face index for given font */ - /* name that is handled by ATS framework. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font in ATS framework. */ - /* */ - /* <Output> */ - /* path :: Buffer to store pathname of the file. For passing */ - /* to @FT_New_Face. The client must allocate this */ - /* buffer before calling this function. */ - /* */ - /* maxPathSize :: Lengths of the buffer `path' that client allocated. */ - /* */ - /* face_index :: Index of the face. For passing to @FT_New_Face. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_GetFilePath_From_Mac_ATS_Name( const char* fontName, - UInt8* path, - UInt32 maxPathSize, - FT_Long* face_index ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FSSpec */ - /* */ - /* <Description> */ - /* Create a new face object from a given resource and typeface index */ - /* using an FSSpec to the font file. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* spec :: FSSpec to the font file. */ - /* */ - /* face_index :: The index of the face within the resource. The */ - /* first face has index~0. */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* @FT_New_Face_From_FSSpec is identical to @FT_New_Face except */ - /* it accepts an FSSpec instead of a path. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face_From_FSSpec( FT_Library library, - const FSSpec *spec, - FT_Long face_index, - FT_Face *aface ) - FT_DEPRECATED_ATTRIBUTE; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FSRef */ - /* */ - /* <Description> */ - /* Create a new face object from a given resource and typeface index */ - /* using an FSRef to the font file. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* spec :: FSRef to the font file. */ - /* */ - /* face_index :: The index of the face within the resource. The */ - /* first face has index~0. */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* @FT_New_Face_From_FSRef is identical to @FT_New_Face except */ - /* it accepts an FSRef instead of a path. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Face_From_FSRef( FT_Library library, - const FSRef *ref, - FT_Long face_index, - FT_Face *aface ) - FT_DEPRECATED_ATTRIBUTE; - - /* */ - - -FT_END_HEADER - - -#endif /* __FTMAC_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftmm.h b/win32/include/freetype/ftmm.h deleted file mode 100644 index 96dd66e1..00000000 --- a/win32/include/freetype/ftmm.h +++ /dev/null @@ -1,384 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmm.h */ -/* */ -/* FreeType Multiple Master font interface (specification). */ -/* */ -/* Copyright 1996-2015 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 __FTMM_H__ -#define __FTMM_H__ - - -#include <ft2build.h> -#include FT_TYPE1_TABLES_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* multiple_masters */ - /* */ - /* <Title> */ - /* Multiple Masters */ - /* */ - /* <Abstract> */ - /* How to manage Multiple Masters fonts. */ - /* */ - /* <Description> */ - /* The following types and functions are used to manage Multiple */ - /* Master fonts, i.e., the selection of specific design instances by */ - /* setting design axis coordinates. */ - /* */ - /* George Williams has extended this interface to make it work with */ - /* both Type~1 Multiple Masters fonts and GX distortable (var) */ - /* fonts. Some of these routines only work with MM fonts, others */ - /* will work with both types. They are similar enough that a */ - /* consistent interface makes sense. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_MM_Axis */ - /* */ - /* <Description> */ - /* A simple structure used to model a given axis in design space for */ - /* Multiple Masters fonts. */ - /* */ - /* This structure can't be used for GX var fonts. */ - /* */ - /* <Fields> */ - /* name :: The axis's name. */ - /* */ - /* minimum :: The axis's minimum design coordinate. */ - /* */ - /* maximum :: The axis's maximum design coordinate. */ - /* */ - typedef struct FT_MM_Axis_ - { - FT_String* name; - FT_Long minimum; - FT_Long maximum; - - } FT_MM_Axis; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Multi_Master */ - /* */ - /* <Description> */ - /* A structure used to model the axes and space of a Multiple Masters */ - /* font. */ - /* */ - /* This structure can't be used for GX var fonts. */ - /* */ - /* <Fields> */ - /* num_axis :: Number of axes. Cannot exceed~4. */ - /* */ - /* num_designs :: Number of designs; should be normally 2^num_axis */ - /* even though the Type~1 specification strangely */ - /* allows for intermediate designs to be present. */ - /* This number cannot exceed~16. */ - /* */ - /* axis :: A table of axis descriptors. */ - /* */ - typedef struct FT_Multi_Master_ - { - FT_UInt num_axis; - FT_UInt num_designs; - FT_MM_Axis axis[T1_MAX_MM_AXIS]; - - } FT_Multi_Master; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Var_Axis */ - /* */ - /* <Description> */ - /* A simple structure used to model a given axis in design space for */ - /* Multiple Masters and GX var fonts. */ - /* */ - /* <Fields> */ - /* name :: The axis's name. */ - /* Not always meaningful for GX. */ - /* */ - /* minimum :: The axis's minimum design coordinate. */ - /* */ - /* def :: The axis's default design coordinate. */ - /* FreeType computes meaningful default values for MM; it */ - /* is then an integer value, not in 16.16 format. */ - /* */ - /* maximum :: The axis's maximum design coordinate. */ - /* */ - /* tag :: The axis's tag (the GX equivalent to `name'). */ - /* FreeType provides default values for MM if possible. */ - /* */ - /* strid :: The entry in `name' table (another GX version of */ - /* `name'). */ - /* Not meaningful for MM. */ - /* */ - typedef struct FT_Var_Axis_ - { - FT_String* name; - - FT_Fixed minimum; - FT_Fixed def; - FT_Fixed maximum; - - FT_ULong tag; - FT_UInt strid; - - } FT_Var_Axis; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Var_Named_Style */ - /* */ - /* <Description> */ - /* A simple structure used to model a named style in a GX var font. */ - /* */ - /* This structure can't be used for MM fonts. */ - /* */ - /* <Fields> */ - /* coords :: The design coordinates for this style. */ - /* This is an array with one entry for each axis. */ - /* */ - /* strid :: The entry in `name' table identifying this style. */ - /* */ - typedef struct FT_Var_Named_Style_ - { - FT_Fixed* coords; - FT_UInt strid; - - } FT_Var_Named_Style; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_MM_Var */ - /* */ - /* <Description> */ - /* A structure used to model the axes and space of a Multiple Masters */ - /* or GX var distortable font. */ - /* */ - /* Some fields are specific to one format and not to the other. */ - /* */ - /* <Fields> */ - /* num_axis :: The number of axes. The maximum value is~4 for */ - /* MM; no limit in GX. */ - /* */ - /* num_designs :: The number of designs; should be normally */ - /* 2^num_axis for MM fonts. Not meaningful for GX */ - /* (where every glyph could have a different */ - /* number of designs). */ - /* */ - /* num_namedstyles :: The number of named styles; only meaningful for */ - /* GX that allows certain design coordinates to */ - /* have a string ID (in the `name' table) */ - /* associated with them. The font can tell the */ - /* user that, for example, Weight=1.5 is `Bold'. */ - /* */ - /* axis :: An axis descriptor table. */ - /* GX fonts contain slightly more data than MM. */ - /* Memory management of this pointer is done */ - /* internally by FreeType. */ - /* */ - /* namedstyle :: A named style table. */ - /* Only meaningful with GX. */ - /* Memory management of this pointer is done */ - /* internally by FreeType. */ - /* */ - typedef struct FT_MM_Var_ - { - FT_UInt num_axis; - FT_UInt num_designs; - FT_UInt num_namedstyles; - FT_Var_Axis* axis; - FT_Var_Named_Style* namedstyle; - - } FT_MM_Var; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Multi_Master */ - /* */ - /* <Description> */ - /* Retrieve the Multiple Master descriptor of a given font. */ - /* */ - /* This function can't be used with GX fonts. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Output> */ - /* amaster :: The Multiple Masters descriptor. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Multi_Master( FT_Face face, - FT_Multi_Master *amaster ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_MM_Var */ - /* */ - /* <Description> */ - /* Retrieve the Multiple Master/GX var descriptor of a given font. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Output> */ - /* amaster :: The Multiple Masters/GX var descriptor. */ - /* Allocates a data structure, which the user must */ - /* deallocate with `free' after use. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_MM_Var( FT_Face face, - FT_MM_Var* *amaster ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_MM_Design_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Masters fonts, choose an interpolated font design */ - /* through design coordinates. */ - /* */ - /* This function can't be used with GX fonts. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of available design coordinates. If it */ - /* is larger than the number of axes, ignore the excess */ - /* values. If it is smaller than the number of axes, */ - /* use default values for the remaining axes. */ - /* */ - /* coords :: An array of design coordinates. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_MM_Design_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Long* coords ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Var_Design_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Master or GX Var fonts, choose an interpolated font */ - /* design through design coordinates. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of available design coordinates. If it */ - /* is larger than the number of axes, ignore the excess */ - /* values. If it is smaller than the number of axes, */ - /* use default values for the remaining axes. */ - /* */ - /* coords :: An array of design coordinates. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Var_Design_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Fixed* coords ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_MM_Blend_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Masters and GX var fonts, choose an interpolated font */ - /* design through normalized blend coordinates. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of available design coordinates. If it */ - /* is larger than the number of axes, ignore the excess */ - /* values. If it is smaller than the number of axes, */ - /* use default values for the remaining axes. */ - /* */ - /* coords :: The design coordinates array (each element must be */ - /* between 0 and 1.0). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_MM_Blend_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Fixed* coords ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Var_Blend_Coordinates */ - /* */ - /* <Description> */ - /* This is another name of @FT_Set_MM_Blend_Coordinates. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Var_Blend_Coordinates( FT_Face face, - FT_UInt num_coords, - FT_Fixed* coords ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTMM_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftmodapi.h b/win32/include/freetype/ftmodapi.h deleted file mode 100644 index 89d9347e..00000000 --- a/win32/include/freetype/ftmodapi.h +++ /dev/null @@ -1,672 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmodapi.h */ -/* */ -/* FreeType modules public interface (specification). */ -/* */ -/* Copyright 1996-2015 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 __FTMODAPI_H__ -#define __FTMODAPI_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /* <Title> */ - /* Module Management */ - /* */ - /* <Abstract> */ - /* How to add, upgrade, remove, and control modules from FreeType. */ - /* */ - /* <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. */ - /* */ - /* Here is a list of possible values of the `module_name' field in */ - /* the @FT_Module_Class structure. */ - /* */ - /* { */ - /* autofitter */ - /* bdf */ - /* cff */ - /* gxvalid */ - /* otvalid */ - /* pcf */ - /* pfr */ - /* psaux */ - /* pshinter */ - /* psnames */ - /* raster1 */ - /* sfnt */ - /* smooth, smooth-lcd, smooth-lcdv */ - /* truetype */ - /* type1 */ - /* type42 */ - /* t1cid */ - /* winfonts */ - /* } */ - /* */ - /* Note that the FreeType Cache sub-system is not a FreeType module. */ - /* */ - /* <Order> */ - /* FT_Module */ - /* FT_Module_Constructor */ - /* FT_Module_Destructor */ - /* FT_Module_Requester */ - /* FT_Module_Class */ - /* */ - /* FT_Add_Module */ - /* FT_Get_Module */ - /* FT_Remove_Module */ - /* FT_Add_Default_Modules */ - /* */ - /* FT_Property_Set */ - /* FT_Property_Get */ - /* */ - /* FT_New_Library */ - /* FT_Done_Library */ - /* FT_Reference_Library */ - /* */ - /* FT_Renderer */ - /* FT_Renderer_Class */ - /* */ - /* FT_Get_Renderer */ - /* FT_Set_Renderer */ - /* */ - /* FT_Set_Debug_Hook */ - /* */ - /*************************************************************************/ - - - /* module bit flags */ -#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */ -#define FT_MODULE_RENDERER 2 /* this module is a renderer */ -#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */ -#define FT_MODULE_STYLER 8 /* this module is a styler */ - -#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */ - /* scalable fonts */ -#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */ - /* support vector outlines */ -#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */ - /* own hinter */ -#define FT_MODULE_DRIVER_HINTS_LIGHTLY 0x800 /* the driver's hinter */ - /* produces LIGHT hints */ - - - /* deprecated values */ -#define ft_module_font_driver FT_MODULE_FONT_DRIVER -#define ft_module_renderer FT_MODULE_RENDERER -#define ft_module_hinter FT_MODULE_HINTER -#define ft_module_styler FT_MODULE_STYLER - -#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE -#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES -#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER -#define ft_module_driver_hints_lightly FT_MODULE_DRIVER_HINTS_LIGHTLY - - - typedef FT_Pointer FT_Module_Interface; - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Module_Constructor */ - /* */ - /* <Description> */ - /* A function used to initialize (not create) a new module object. */ - /* */ - /* <Input> */ - /* module :: The module to initialize. */ - /* */ - typedef FT_Error - (*FT_Module_Constructor)( FT_Module module ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Module_Destructor */ - /* */ - /* <Description> */ - /* A function used to finalize (not destroy) a given module object. */ - /* */ - /* <Input> */ - /* module :: The module to finalize. */ - /* */ - typedef void - (*FT_Module_Destructor)( FT_Module module ); - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Module_Requester */ - /* */ - /* <Description> */ - /* A function used to query a given module for a specific interface. */ - /* */ - /* <Input> */ - /* module :: The module to be searched. */ - /* */ - /* name :: The name of the interface in the module. */ - /* */ - typedef FT_Module_Interface - (*FT_Module_Requester)( FT_Module module, - const char* name ); - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Module_Class */ - /* */ - /* <Description> */ - /* The module class descriptor. */ - /* */ - /* <Fields> */ - /* module_flags :: Bit flags describing the module. */ - /* */ - /* module_size :: The size of one module object/instance in */ - /* bytes. */ - /* */ - /* module_name :: The name of the module. */ - /* */ - /* module_version :: The version, as a 16.16 fixed number */ - /* (major.minor). */ - /* */ - /* module_requires :: The version of FreeType this module requires, */ - /* as a 16.16 fixed number (major.minor). Starts */ - /* at version 2.0, i.e., 0x20000. */ - /* */ - /* module_init :: The initializing function. */ - /* */ - /* module_done :: The finalizing function. */ - /* */ - /* get_interface :: The interface requesting function. */ - /* */ - typedef struct FT_Module_Class_ - { - FT_ULong module_flags; - FT_Long module_size; - const FT_String* module_name; - FT_Fixed module_version; - FT_Fixed module_requires; - - const void* module_interface; - - FT_Module_Constructor module_init; - FT_Module_Destructor module_done; - FT_Module_Requester get_interface; - - } FT_Module_Class; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Add_Module */ - /* */ - /* <Description> */ - /* Add a new module to a given library instance. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* clazz :: A pointer to class descriptor for the module. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* An error will be returned if a module already exists by that name, */ - /* or if the module requires a version of FreeType that is too great. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Add_Module( FT_Library library, - const FT_Module_Class* clazz ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Module */ - /* */ - /* <Description> */ - /* Find a module by its name. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object. */ - /* */ - /* module_name :: The module's name (as an ASCII string). */ - /* */ - /* <Return> */ - /* A module handle. 0~if none was found. */ - /* */ - /* <Note> */ - /* FreeType's internal modules aren't documented very well, and you */ - /* should look up the source code for details. */ - /* */ - FT_EXPORT( FT_Module ) - FT_Get_Module( FT_Library library, - const char* module_name ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Remove_Module */ - /* */ - /* <Description> */ - /* Remove a given module from a library instance. */ - /* */ - /* <InOut> */ - /* library :: A handle to a library object. */ - /* */ - /* <Input> */ - /* module :: A handle to a module object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The module object is destroyed by the function in case of success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Remove_Module( FT_Library library, - FT_Module module ); - - - /********************************************************************** - * - * @function: - * FT_Property_Set - * - * @description: - * Set a property for a given module. - * - * @input: - * library :: - * A handle to the library the module is part of. - * - * module_name :: - * The module name. - * - * property_name :: - * The property name. Properties are described in the `Synopsis' - * subsection of the module's documentation. - * - * Note that only a few modules have properties. - * - * value :: - * A generic pointer to a variable or structure that gives the new - * value of the property. The exact definition of `value' is - * dependent on the property; see the `Synopsis' subsection of the - * module's documentation. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * If `module_name' isn't a valid module name, or `property_name' - * doesn't specify a valid property, or if `value' doesn't represent a - * valid value for the given property, an error is returned. - * - * The following example sets property `bar' (a simple integer) in - * module `foo' to value~1. - * - * { - * FT_UInt bar; - * - * - * bar = 1; - * FT_Property_Set( library, "foo", "bar", &bar ); - * } - * - * Note that the FreeType Cache sub-system doesn't recognize module - * property changes. To avoid glyph lookup confusion within the cache - * you should call @FTC_Manager_Reset to completely flush the cache if - * a module property gets changed after @FTC_Manager_New has been - * called. - * - * It is not possible to set properties of the FreeType Cache - * sub-system itself with FT_Property_Set; use @FTC_Property_Set - * instead. - * - * @since: - * 2.4.11 - * - */ - FT_EXPORT( FT_Error ) - FT_Property_Set( FT_Library library, - const FT_String* module_name, - const FT_String* property_name, - const void* value ); - - - /********************************************************************** - * - * @function: - * FT_Property_Get - * - * @description: - * Get a module's property value. - * - * @input: - * library :: - * A handle to the library the module is part of. - * - * module_name :: - * The module name. - * - * property_name :: - * The property name. Properties are described in the `Synopsis' - * subsection of the module's documentation. - * - * @inout: - * value :: - * A generic pointer to a variable or structure that gives the - * value of the property. The exact definition of `value' is - * dependent on the property; see the `Synopsis' subsection of the - * module's documentation. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * If `module_name' isn't a valid module name, or `property_name' - * doesn't specify a valid property, or if `value' doesn't represent a - * valid value for the given property, an error is returned. - * - * The following example gets property `baz' (a range) in module `foo'. - * - * { - * typedef range_ - * { - * FT_Int32 min; - * FT_Int32 max; - * - * } range; - * - * range baz; - * - * - * FT_Property_Get( library, "foo", "baz", &baz ); - * } - * - * It is not possible to retrieve properties of the FreeType Cache - * sub-system with FT_Property_Get; use @FTC_Property_Get instead. - * - * @since: - * 2.4.11 - * - */ - FT_EXPORT( FT_Error ) - FT_Property_Get( FT_Library library, - const FT_String* module_name, - const FT_String* property_name, - void* value ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Reference_Library */ - /* */ - /* <Description> */ - /* A counter gets initialized to~1 at the time an @FT_Library */ - /* structure is created. This function increments the counter. */ - /* @FT_Done_Library then only destroys a library if the counter is~1, */ - /* otherwise it simply decrements the counter. */ - /* */ - /* This function helps in managing life-cycles of structures that */ - /* reference @FT_Library objects. */ - /* */ - /* <Input> */ - /* library :: A handle to a target library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Since> */ - /* 2.4.2 */ - /* */ - FT_EXPORT( FT_Error ) - FT_Reference_Library( FT_Library library ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Library */ - /* */ - /* <Description> */ - /* This function is used to create a new FreeType library instance */ - /* from a given memory object. It is thus possible to use libraries */ - /* with distinct memory allocators within the same program. Note, */ - /* however, that the used @FT_Memory structure is expected to remain */ - /* valid for the life of the @FT_Library object. */ - /* */ - /* Normally, you would call this function (followed by a call to */ - /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module) */ - /* instead of @FT_Init_FreeType to initialize the FreeType library. */ - /* */ - /* Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a */ - /* library instance. */ - /* */ - /* <Input> */ - /* memory :: A handle to the original memory object. */ - /* */ - /* <Output> */ - /* alibrary :: A pointer to handle of a new library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* See the discussion of reference counters in the description of */ - /* @FT_Reference_Library. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Library( FT_Memory memory, - FT_Library *alibrary ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Library */ - /* */ - /* <Description> */ - /* Discard a given library object. This closes all drivers and */ - /* discards all resource objects. */ - /* */ - /* <Input> */ - /* library :: A handle to the target library. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* See the discussion of reference counters in the description of */ - /* @FT_Reference_Library. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_Library( FT_Library library ); - - /* */ - - typedef void - (*FT_DebugHook_Func)( void* arg ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Debug_Hook */ - /* */ - /* <Description> */ - /* Set a debug hook function for debugging the interpreter of a font */ - /* format. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* hook_index :: The index of the debug hook. You should use the */ - /* values defined in `ftobjs.h', e.g., */ - /* `FT_DEBUG_HOOK_TRUETYPE'. */ - /* */ - /* debug_hook :: The function used to debug the interpreter. */ - /* */ - /* <Note> */ - /* Currently, four debug hook slots are available, but only two (for */ - /* the TrueType and the Type~1 interpreter) are defined. */ - /* */ - /* Since the internal headers of FreeType are no longer installed, */ - /* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */ - /* This is a bug and will be fixed in a forthcoming release. */ - /* */ - FT_EXPORT( void ) - FT_Set_Debug_Hook( FT_Library library, - FT_UInt hook_index, - FT_DebugHook_Func debug_hook ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Add_Default_Modules */ - /* */ - /* <Description> */ - /* Add the set of default drivers to a given library object. */ - /* This is only useful when you create a library object with */ - /* @FT_New_Library (usually to plug a custom memory manager). */ - /* */ - /* <InOut> */ - /* library :: A handle to a new library object. */ - /* */ - FT_EXPORT( void ) - FT_Add_Default_Modules( FT_Library library ); - - - - /************************************************************************** - * - * @section: - * truetype_engine - * - * @title: - * The TrueType Engine - * - * @abstract: - * TrueType bytecode support. - * - * @description: - * This section contains a function used to query the level of TrueType - * bytecode support compiled in this version of the library. - * - */ - - - /************************************************************************** - * - * @enum: - * FT_TrueTypeEngineType - * - * @description: - * A list of values describing which kind of TrueType bytecode - * engine is implemented in a given FT_Library instance. It is used - * by the @FT_Get_TrueType_Engine_Type function. - * - * @values: - * FT_TRUETYPE_ENGINE_TYPE_NONE :: - * The library doesn't implement any kind of bytecode interpreter. - * - * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: - * The library implements a bytecode interpreter that doesn't - * support the patented operations of the TrueType virtual machine. - * - * Its main use is to load certain Asian fonts that position and - * scale glyph components with bytecode instructions. It produces - * bad output for most other fonts. - * - * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: - * The library implements a bytecode interpreter that covers - * the full instruction set of the TrueType virtual machine (this - * was governed by patents until May 2010, hence the name). - * - * @since: - * 2.2 - * - */ - typedef enum FT_TrueTypeEngineType_ - { - FT_TRUETYPE_ENGINE_TYPE_NONE = 0, - FT_TRUETYPE_ENGINE_TYPE_UNPATENTED, - FT_TRUETYPE_ENGINE_TYPE_PATENTED - - } FT_TrueTypeEngineType; - - - /************************************************************************** - * - * @func: - * FT_Get_TrueType_Engine_Type - * - * @description: - * Return an @FT_TrueTypeEngineType value to indicate which level of - * the TrueType virtual machine a given library instance supports. - * - * @input: - * library :: - * A library instance. - * - * @return: - * A value indicating which level is supported. - * - * @since: - * 2.2 - * - */ - FT_EXPORT( FT_TrueTypeEngineType ) - FT_Get_TrueType_Engine_Type( FT_Library library ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTMODAPI_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftmoderr.h b/win32/include/freetype/ftmoderr.h deleted file mode 100644 index 9d7f9814..00000000 --- a/win32/include/freetype/ftmoderr.h +++ /dev/null @@ -1,194 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftmoderr.h */ -/* */ -/* FreeType module error offsets (specification). */ -/* */ -/* Copyright 2001-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file is used to define the FreeType module error codes. */ - /* */ - /* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is */ - /* set, the lower byte of an error value identifies the error code as */ - /* usual. In addition, the higher byte identifies the module. For */ - /* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */ - /* error `TT_Err_Invalid_File_Format' has value 0x1303, the error */ - /* `T1_Err_Invalid_File_Format' has value 0x1403, etc. */ - /* */ - /* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero, */ - /* including the high byte. */ - /* */ - /* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of */ - /* an error value is set to zero. */ - /* */ - /* To hide the various `XXX_Err_' prefixes in the source code, FreeType */ - /* provides some macros in `fttypes.h'. */ - /* */ - /* FT_ERR( err ) */ - /* Add current error module prefix (as defined with the */ - /* `FT_ERR_PREFIX' macro) to `err'. For example, in the BDF module */ - /* the line */ - /* */ - /* error = FT_ERR( Invalid_Outline ); */ - /* */ - /* expands to */ - /* */ - /* error = BDF_Err_Invalid_Outline; */ - /* */ - /* For simplicity, you can always use `FT_Err_Ok' directly instead */ - /* of `FT_ERR( Ok )'. */ - /* */ - /* FT_ERR_EQ( errcode, err ) */ - /* FT_ERR_NEQ( errcode, err ) */ - /* Compare error code `errcode' with the error `err' for equality */ - /* and inequality, respectively. Example: */ - /* */ - /* if ( FT_ERR_EQ( error, Invalid_Outline ) ) */ - /* ... */ - /* */ - /* Using this macro you don't have to think about error prefixes. */ - /* Of course, if module errors are not active, the above example is */ - /* the same as */ - /* */ - /* if ( error == FT_Err_Invalid_Outline ) */ - /* ... */ - /* */ - /* FT_ERROR_BASE( errcode ) */ - /* FT_ERROR_MODULE( errcode ) */ - /* Get base error and module error code, respectively. */ - /* */ - /* */ - /* It can also be used to create a module error message table easily */ - /* with something like */ - /* */ - /* { */ - /* #undef __FTMODERR_H__ */ - /* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */ - /* #define FT_MODERR_START_LIST { */ - /* #define FT_MODERR_END_LIST { 0, 0 } }; */ - /* */ - /* const struct */ - /* { */ - /* int mod_err_offset; */ - /* const char* mod_err_msg */ - /* } ft_mod_errors[] = */ - /* */ - /* #include FT_MODULE_ERRORS_H */ - /* } */ - /* */ - /*************************************************************************/ - - -#ifndef __FTMODERR_H__ -#define __FTMODERR_H__ - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** SETUP MACROS *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#undef FT_NEED_EXTERN_C - -#ifndef FT_MODERRDEF - -#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS -#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = v, -#else -#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = 0, -#endif - -#define FT_MODERR_START_LIST enum { -#define FT_MODERR_END_LIST FT_Mod_Err_Max }; - -#ifdef __cplusplus -#define FT_NEED_EXTERN_C - extern "C" { -#endif - -#endif /* !FT_MODERRDEF */ - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** LIST MODULE ERROR BASES *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#ifdef FT_MODERR_START_LIST - FT_MODERR_START_LIST -#endif - - - FT_MODERRDEF( Base, 0x000, "base module" ) - FT_MODERRDEF( Autofit, 0x100, "autofitter module" ) - FT_MODERRDEF( BDF, 0x200, "BDF module" ) - FT_MODERRDEF( Bzip2, 0x300, "Bzip2 module" ) - FT_MODERRDEF( Cache, 0x400, "cache module" ) - FT_MODERRDEF( CFF, 0x500, "CFF module" ) - FT_MODERRDEF( CID, 0x600, "CID module" ) - FT_MODERRDEF( Gzip, 0x700, "Gzip module" ) - FT_MODERRDEF( LZW, 0x800, "LZW module" ) - FT_MODERRDEF( OTvalid, 0x900, "OpenType validation module" ) - FT_MODERRDEF( PCF, 0xA00, "PCF module" ) - FT_MODERRDEF( PFR, 0xB00, "PFR module" ) - FT_MODERRDEF( PSaux, 0xC00, "PS auxiliary module" ) - FT_MODERRDEF( PShinter, 0xD00, "PS hinter module" ) - FT_MODERRDEF( PSnames, 0xE00, "PS names module" ) - FT_MODERRDEF( Raster, 0xF00, "raster module" ) - FT_MODERRDEF( SFNT, 0x1000, "SFNT module" ) - FT_MODERRDEF( Smooth, 0x1100, "smooth raster module" ) - FT_MODERRDEF( TrueType, 0x1200, "TrueType module" ) - FT_MODERRDEF( Type1, 0x1300, "Type 1 module" ) - FT_MODERRDEF( Type42, 0x1400, "Type 42 module" ) - FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" ) - FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" ) - - -#ifdef FT_MODERR_END_LIST - FT_MODERR_END_LIST -#endif - - - /*******************************************************************/ - /*******************************************************************/ - /***** *****/ - /***** CLEANUP *****/ - /***** *****/ - /*******************************************************************/ - /*******************************************************************/ - - -#ifdef FT_NEED_EXTERN_C - } -#endif - -#undef FT_MODERR_START_LIST -#undef FT_MODERR_END_LIST -#undef FT_MODERRDEF -#undef FT_NEED_EXTERN_C - - -#endif /* __FTMODERR_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftotval.h b/win32/include/freetype/ftotval.h deleted file mode 100644 index e744b713..00000000 --- a/win32/include/freetype/ftotval.h +++ /dev/null @@ -1,204 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftotval.h */ -/* */ -/* FreeType API for validating OpenType tables (specification). */ -/* */ -/* Copyright 2004-2015 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. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* */ -/* Warning: This module might be moved to a different library in the */ -/* future to avoid a tight dependency between FreeType and the */ -/* OpenType specification. */ -/* */ -/* */ -/***************************************************************************/ - - -#ifndef __FTOTVAL_H__ -#define __FTOTVAL_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* ot_validation */ - /* */ - /* <Title> */ - /* OpenType Validation */ - /* */ - /* <Abstract> */ - /* An API to validate OpenType tables. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions to validate */ - /* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). */ - /* */ - /* <Order> */ - /* FT_OpenType_Validate */ - /* FT_OpenType_Free */ - /* */ - /* FT_VALIDATE_OTXXX */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_OTXXX - * - * @description: - * A list of bit-field constants used with @FT_OpenType_Validate to - * indicate which OpenType tables should be validated. - * - * @values: - * FT_VALIDATE_BASE :: - * Validate BASE table. - * - * FT_VALIDATE_GDEF :: - * Validate GDEF table. - * - * FT_VALIDATE_GPOS :: - * Validate GPOS table. - * - * FT_VALIDATE_GSUB :: - * Validate GSUB table. - * - * FT_VALIDATE_JSTF :: - * Validate JSTF table. - * - * FT_VALIDATE_MATH :: - * Validate MATH table. - * - * FT_VALIDATE_OT :: - * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). - * - */ -#define FT_VALIDATE_BASE 0x0100 -#define FT_VALIDATE_GDEF 0x0200 -#define FT_VALIDATE_GPOS 0x0400 -#define FT_VALIDATE_GSUB 0x0800 -#define FT_VALIDATE_JSTF 0x1000 -#define FT_VALIDATE_MATH 0x2000 - -#define FT_VALIDATE_OT FT_VALIDATE_BASE | \ - FT_VALIDATE_GDEF | \ - FT_VALIDATE_GPOS | \ - FT_VALIDATE_GSUB | \ - FT_VALIDATE_JSTF | \ - FT_VALIDATE_MATH - - /********************************************************************** - * - * @function: - * FT_OpenType_Validate - * - * @description: - * Validate various OpenType tables to assure that all offsets and - * indices are valid. The idea is that a higher-level library that - * actually does the text layout can access those tables without - * error checking (which can be quite time consuming). - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field that specifies the tables to be validated. See - * @FT_VALIDATE_OTXXX for possible values. - * - * @output: - * BASE_table :: - * A pointer to the BASE table. - * - * GDEF_table :: - * A pointer to the GDEF table. - * - * GPOS_table :: - * A pointer to the GPOS table. - * - * GSUB_table :: - * A pointer to the GSUB table. - * - * JSTF_table :: - * A pointer to the JSTF table. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with OpenType fonts, returning an error - * otherwise. - * - * After use, the application should deallocate the five tables with - * @FT_OpenType_Free. A NULL value indicates that the table either - * doesn't exist in the font, or the application hasn't asked for - * validation. - */ - FT_EXPORT( FT_Error ) - FT_OpenType_Validate( FT_Face face, - FT_UInt validation_flags, - FT_Bytes *BASE_table, - FT_Bytes *GDEF_table, - FT_Bytes *GPOS_table, - FT_Bytes *GSUB_table, - FT_Bytes *JSTF_table ); - - /********************************************************************** - * - * @function: - * FT_OpenType_Free - * - * @description: - * Free the buffer allocated by OpenType validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer that is allocated by - * @FT_OpenType_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_OpenType_Validate only. - */ - FT_EXPORT( void ) - FT_OpenType_Free( FT_Face face, - FT_Bytes table ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTOTVAL_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftoutln.h b/win32/include/freetype/ftoutln.h deleted file mode 100644 index b6ec70de..00000000 --- a/win32/include/freetype/ftoutln.h +++ /dev/null @@ -1,574 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftoutln.h */ -/* */ -/* Support for the FT_Outline type used to store glyph shapes of */ -/* most scalable font formats (specification). */ -/* */ -/* Copyright 1996-2015 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 __FTOUTLN_H__ -#define __FTOUTLN_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /* <Title> */ - /* Outline Processing */ - /* */ - /* <Abstract> */ - /* Functions to create, transform, and render vectorial glyph images. */ - /* */ - /* <Description> */ - /* This section contains routines used to create and destroy scalable */ - /* glyph images known as `outlines'. These can also be measured, */ - /* transformed, and converted into bitmaps and pixmaps. */ - /* */ - /* <Order> */ - /* FT_Outline */ - /* FT_Outline_New */ - /* FT_Outline_Done */ - /* FT_Outline_Copy */ - /* FT_Outline_Translate */ - /* FT_Outline_Transform */ - /* FT_Outline_Embolden */ - /* FT_Outline_EmboldenXY */ - /* FT_Outline_Reverse */ - /* FT_Outline_Check */ - /* */ - /* FT_Outline_Get_CBox */ - /* FT_Outline_Get_BBox */ - /* */ - /* FT_Outline_Get_Bitmap */ - /* FT_Outline_Render */ - /* FT_Outline_Decompose */ - /* FT_Outline_Funcs */ - /* FT_Outline_MoveToFunc */ - /* FT_Outline_LineToFunc */ - /* FT_Outline_ConicToFunc */ - /* FT_Outline_CubicToFunc */ - /* */ - /* FT_Orientation */ - /* FT_Outline_Get_Orientation */ - /* */ - /* FT_OUTLINE_XXX */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Decompose */ - /* */ - /* <Description> */ - /* Walk over an outline's structure to decompose it into individual */ - /* segments and Bézier arcs. This function also emits `move to' */ - /* operations to indicate the start of new contours in the outline. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source target. */ - /* */ - /* func_interface :: A table of `emitters', i.e., function pointers */ - /* called during decomposition to indicate path */ - /* operations. */ - /* */ - /* <InOut> */ - /* user :: A typeless pointer that is passed to each */ - /* emitter during the decomposition. It can be */ - /* used to store the state during the */ - /* decomposition. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* A contour that contains a single point only is represented by a */ - /* `move to' operation followed by `line to' to the same point. In */ - /* most cases, it is best to filter this out before using the */ - /* outline for stroking purposes (otherwise it would result in a */ - /* visible dot when round caps are used). */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Decompose( FT_Outline* outline, - const FT_Outline_Funcs* func_interface, - void* user ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_New */ - /* */ - /* <Description> */ - /* Create a new outline of a given size. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object from where the */ - /* outline is allocated. Note however that the new */ - /* outline will *not* necessarily be *freed*, when */ - /* destroying the library, by @FT_Done_FreeType. */ - /* */ - /* numPoints :: The maximum number of points within the outline. */ - /* Must be smaller than or equal to 0xFFFF (65535). */ - /* */ - /* numContours :: The maximum number of contours within the outline. */ - /* This value must be in the range 0 to `numPoints'. */ - /* */ - /* <Output> */ - /* anoutline :: A handle to the new outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The reason why this function takes a `library' parameter is simply */ - /* to use the library's memory allocator. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_New( FT_Library library, - FT_UInt numPoints, - FT_Int numContours, - FT_Outline *anoutline ); - - - FT_EXPORT( FT_Error ) - FT_Outline_New_Internal( FT_Memory memory, - FT_UInt numPoints, - FT_Int numContours, - FT_Outline *anoutline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Done */ - /* */ - /* <Description> */ - /* Destroy an outline created with @FT_Outline_New. */ - /* */ - /* <Input> */ - /* library :: A handle of the library object used to allocate the */ - /* outline. */ - /* */ - /* outline :: A pointer to the outline object to be discarded. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If the outline's `owner' field is not set, only the outline */ - /* descriptor will be released. */ - /* */ - /* The reason why this function takes an `library' parameter is */ - /* simply to use ft_mem_free(). */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Done( FT_Library library, - FT_Outline* outline ); - - - FT_EXPORT( FT_Error ) - FT_Outline_Done_Internal( FT_Memory memory, - FT_Outline* outline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Check */ - /* */ - /* <Description> */ - /* Check the contents of an outline descriptor. */ - /* */ - /* <Input> */ - /* outline :: A handle to a source outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Check( FT_Outline* outline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_CBox */ - /* */ - /* <Description> */ - /* Return an outline's `control box'. The control box encloses all */ - /* the outline's points, including Bézier control points. Though it */ - /* coincides with the exact bounding box for most glyphs, it can be */ - /* slightly larger in some situations (like when rotating an outline */ - /* that contains Bézier outside arcs). */ - /* */ - /* Computing the control box is very fast, while getting the bounding */ - /* box can take much more time as it needs to walk over all segments */ - /* and arcs in the outline. To get the latter, you can use the */ - /* `ftbbox' component, which is dedicated to this single task. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <Output> */ - /* acbox :: The outline's control box. */ - /* */ - /* <Note> */ - /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Get_CBox( const FT_Outline* outline, - FT_BBox *acbox ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Translate */ - /* */ - /* <Description> */ - /* Apply a simple translation to the points of an outline. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Input> */ - /* xOffset :: The horizontal offset. */ - /* */ - /* yOffset :: The vertical offset. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Translate( const FT_Outline* outline, - FT_Pos xOffset, - FT_Pos yOffset ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Copy */ - /* */ - /* <Description> */ - /* Copy an outline into another one. Both objects must have the */ - /* same sizes (number of points & number of contours) when this */ - /* function is called. */ - /* */ - /* <Input> */ - /* source :: A handle to the source outline. */ - /* */ - /* <Output> */ - /* target :: A handle to the target outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Copy( const FT_Outline* source, - FT_Outline *target ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Transform */ - /* */ - /* <Description> */ - /* Apply a simple 2x2 matrix to all of an outline's points. Useful */ - /* for applying rotations, slanting, flipping, etc. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the transformation matrix. */ - /* */ - /* <Note> */ - /* You can use @FT_Outline_Translate if you need to translate the */ - /* outline's points. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Transform( const FT_Outline* outline, - const FT_Matrix* matrix ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Embolden */ - /* */ - /* <Description> */ - /* Embolden an outline. The new outline will be at most 4~times */ - /* `strength' pixels wider and higher. You may think of the left and */ - /* bottom borders as unchanged. */ - /* */ - /* Negative `strength' values to reduce the outline thickness are */ - /* possible also. */ - /* */ - /* <InOut> */ - /* outline :: A handle to the target outline. */ - /* */ - /* <Input> */ - /* strength :: How strong the glyph is emboldened. Expressed in */ - /* 26.6 pixel format. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The used algorithm to increase or decrease the thickness of the */ - /* glyph doesn't change the number of points; this means that certain */ - /* situations like acute angles or intersections are sometimes */ - /* handled incorrectly. */ - /* */ - /* If you need `better' metrics values you should call */ - /* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. */ - /* */ - /* Example call: */ - /* */ - /* { */ - /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */ - /* if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) */ - /* FT_Outline_Embolden( &face->glyph->outline, strength ); */ - /* } */ - /* */ - /* To get meaningful results, font scaling values must be set with */ - /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Embolden( FT_Outline* outline, - FT_Pos strength ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_EmboldenXY */ - /* */ - /* <Description> */ - /* Embolden an outline. The new outline will be `xstrength' pixels */ - /* wider and `ystrength' pixels higher. Otherwise, it is similar to */ - /* @FT_Outline_Embolden, which uses the same strength in both */ - /* directions. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_EmboldenXY( FT_Outline* outline, - FT_Pos xstrength, - FT_Pos ystrength ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Reverse */ - /* */ - /* <Description> */ - /* Reverse the drawing direction of an outline. This is used to */ - /* ensure consistent fill conventions for mirrored glyphs. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Note> */ - /* This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */ - /* the outline's `flags' field. */ - /* */ - /* It shouldn't be used by a normal client application, unless it */ - /* knows what it is doing. */ - /* */ - FT_EXPORT( void ) - FT_Outline_Reverse( FT_Outline* outline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_Bitmap */ - /* */ - /* <Description> */ - /* Render an outline within a bitmap. The outline's image is simply */ - /* OR-ed to the target bitmap. */ - /* */ - /* <Input> */ - /* library :: A handle to a FreeType library object. */ - /* */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <InOut> */ - /* abitmap :: A pointer to the target bitmap descriptor. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function does NOT CREATE the bitmap, it only renders an */ - /* outline image within the one you pass to it! Consequently, the */ - /* various fields in `abitmap' should be set accordingly. */ - /* */ - /* It will use the raster corresponding to the default glyph format. */ - /* */ - /* The value of the `num_grays' field in `abitmap' is ignored. If */ - /* you select the gray-level rasterizer, and you want less than 256 */ - /* gray levels, you have to use @FT_Outline_Render directly. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Get_Bitmap( FT_Library library, - FT_Outline* outline, - const FT_Bitmap *abitmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Render */ - /* */ - /* <Description> */ - /* Render an outline within a bitmap using the current scan-convert. */ - /* This function uses an @FT_Raster_Params structure as an argument, */ - /* allowing advanced features like direct composition, translucency, */ - /* etc. */ - /* */ - /* <Input> */ - /* library :: A handle to a FreeType library object. */ - /* */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <InOut> */ - /* params :: A pointer to an @FT_Raster_Params structure used to */ - /* describe the rendering operation. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You should know what you are doing and how @FT_Raster_Params works */ - /* to use this function. */ - /* */ - /* The field `params.source' will be set to `outline' before the scan */ - /* converter is called, which means that the value you give to it is */ - /* actually ignored. */ - /* */ - /* The gray-level rasterizer always uses 256 gray levels. If you */ - /* want less gray levels, you have to provide your own span callback. */ - /* See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the */ - /* @FT_Raster_Params structure for more details. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Outline_Render( FT_Library library, - FT_Outline* outline, - FT_Raster_Params* params ); - - - /************************************************************************** - * - * @enum: - * FT_Orientation - * - * @description: - * A list of values used to describe an outline's contour orientation. - * - * The TrueType and PostScript specifications use different conventions - * to determine whether outline contours should be filled or unfilled. - * - * @values: - * FT_ORIENTATION_TRUETYPE :: - * According to the TrueType specification, clockwise contours must - * be filled, and counter-clockwise ones must be unfilled. - * - * FT_ORIENTATION_POSTSCRIPT :: - * According to the PostScript specification, counter-clockwise contours - * must be filled, and clockwise ones must be unfilled. - * - * FT_ORIENTATION_FILL_RIGHT :: - * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to - * remember that in TrueType, everything that is to the right of - * the drawing direction of a contour must be filled. - * - * FT_ORIENTATION_FILL_LEFT :: - * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to - * remember that in PostScript, everything that is to the left of - * the drawing direction of a contour must be filled. - * - * FT_ORIENTATION_NONE :: - * The orientation cannot be determined. That is, different parts of - * the glyph have different orientation. - * - */ - typedef enum FT_Orientation_ - { - FT_ORIENTATION_TRUETYPE = 0, - FT_ORIENTATION_POSTSCRIPT = 1, - FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE, - FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT, - FT_ORIENTATION_NONE - - } FT_Orientation; - - - /************************************************************************** - * - * @function: - * FT_Outline_Get_Orientation - * - * @description: - * This function analyzes a glyph outline and tries to compute its - * fill orientation (see @FT_Orientation). This is done by integrating - * the total area covered by the outline. The positive integral - * corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT - * is returned. The negative integral corresponds to the counter-clockwise - * orientation and @FT_ORIENTATION_TRUETYPE is returned. - * - * Note that this will return @FT_ORIENTATION_TRUETYPE for empty - * outlines. - * - * @input: - * outline :: - * A handle to the source outline. - * - * @return: - * The orientation. - * - */ - FT_EXPORT( FT_Orientation ) - FT_Outline_Get_Orientation( FT_Outline* outline ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTOUTLN_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/win32/include/freetype/ftpfr.h b/win32/include/freetype/ftpfr.h deleted file mode 100644 index a1c02a2f..00000000 --- a/win32/include/freetype/ftpfr.h +++ /dev/null @@ -1,172 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftpfr.h */ -/* */ -/* FreeType API for accessing PFR-specific data (specification only). */ -/* */ -/* Copyright 2002-2015 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 __FTPFR_H__ -#define __FTPFR_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* pfr_fonts */ - /* */ - /* <Title> */ - /* PFR Fonts */ - /* */ - /* <Abstract> */ - /* PFR/TrueDoc specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of PFR-specific functions. */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @function: - * FT_Get_PFR_Metrics - * - * @description: - * Return the outline and metrics resolutions of a given PFR face. - * - * @input: - * face :: Handle to the input face. It can be a non-PFR face. - * - * @output: - * aoutline_resolution :: - * Outline resolution. This is equivalent to `face->units_per_EM' - * for non-PFR fonts. Optional (parameter can be NULL). - * - * ametrics_resolution :: - * Metrics resolution. This is equivalent to `outline_resolution' - * for non-PFR fonts. Optional (parameter can be NULL). - * - * ametrics_x_scale :: - * A 16.16 fixed-point number used to scale distance expressed - * in metrics units to device sub-pixels. This is equivalent to - * `face->size->x_scale', but for metrics only. Optional (parameter - * can be NULL). - * - * ametrics_y_scale :: - * Same as `ametrics_x_scale' but for the vertical direction. - * optional (parameter can be NULL). - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * If the input face is not a PFR, this function will return an error. - * However, in all cases, it will return valid values. - */ - FT_EXPORT( FT_Error ) - FT_Get_PFR_Metrics( FT_Face face, - FT_UInt *aoutline_resolution, - FT_UInt *ametrics_resolution, - FT_Fixed *ametrics_x_scale, - FT_Fixed *ametrics_y_scale ); - - - /********************************************************************** - * - * @function: - * FT_Get_PFR_Kerning - * - * @description: - * Return the kerning pair corresponding to two glyphs in a PFR face. - * The distance is expressed in metrics units, unlike the result of - * @FT_Get_Kerning. - * - * @input: - * face :: A handle to the input face. - * - * left :: Index of the left glyph. - * - * right :: Index of the right glyph. - * - * @output: - * avector :: A kerning vector. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function always return distances in original PFR metrics - * units. This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED - * mode, which always returns distances converted to outline units. - * - * You can use the value of the `x_scale' and `y_scale' parameters - * returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels. - */ - FT_EXPORT( FT_Error ) - FT_Get_PFR_Kerning( FT_Face face, - FT_UInt left, - FT_UInt right, - FT_Vector *avector ); - - - /********************************************************************** - * - * @function: - * FT_Get_PFR_Advance - * - * @description: - * Return a given glyph advance, expressed in original metrics units, - * from a PFR font. - * - * @input: - * face :: A handle to the input face. - * - * gindex :: The glyph index. - * - * @output: - * aadvance :: The glyph advance in metrics units. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics - * to convert the advance to device sub-pixels (i.e., 1/64th of pixels). - */ - FT_EXPORT( FT_Error ) - FT_Get_PFR_Advance( FT_Face face, - FT_UInt gindex, - FT_Pos *aadvance ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTPFR_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftrender.h b/win32/include/freetype/ftrender.h deleted file mode 100644 index ec8da700..00000000 --- a/win32/include/freetype/ftrender.h +++ /dev/null @@ -1,232 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftrender.h */ -/* */ -/* FreeType renderer modules public interface (specification). */ -/* */ -/* Copyright 1996-2015 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 __FTRENDER_H__ -#define __FTRENDER_H__ - - -#include <ft2build.h> -#include FT_MODULE_H -#include FT_GLYPH_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /*************************************************************************/ - - - /* create a new glyph object */ - typedef FT_Error - (*FT_Glyph_InitFunc)( FT_Glyph glyph, - FT_GlyphSlot slot ); - - /* destroys a given glyph object */ - typedef void - (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); - - typedef void - (*FT_Glyph_TransformFunc)( FT_Glyph glyph, - const FT_Matrix* matrix, - const FT_Vector* delta ); - - typedef void - (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, - FT_BBox* abbox ); - - typedef FT_Error - (*FT_Glyph_CopyFunc)( FT_Glyph source, - FT_Glyph target ); - - typedef FT_Error - (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, - FT_GlyphSlot slot ); - -/* deprecated */ -#define FT_Glyph_Init_Func FT_Glyph_InitFunc -#define FT_Glyph_Done_Func FT_Glyph_DoneFunc -#define FT_Glyph_Transform_Func FT_Glyph_TransformFunc -#define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc -#define FT_Glyph_Copy_Func FT_Glyph_CopyFunc -#define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc - - - struct FT_Glyph_Class_ - { - FT_Long glyph_size; - FT_Glyph_Format glyph_format; - FT_Glyph_InitFunc glyph_init; - FT_Glyph_DoneFunc glyph_done; - FT_Glyph_CopyFunc glyph_copy; - FT_Glyph_TransformFunc glyph_transform; - FT_Glyph_GetBBoxFunc glyph_bbox; - FT_Glyph_PrepareFunc glyph_prepare; - }; - - - typedef FT_Error - (*FT_Renderer_RenderFunc)( FT_Renderer renderer, - FT_GlyphSlot slot, - FT_UInt mode, - const FT_Vector* origin ); - - typedef FT_Error - (*FT_Renderer_TransformFunc)( FT_Renderer renderer, - FT_GlyphSlot slot, - const FT_Matrix* matrix, - const FT_Vector* delta ); - - - typedef void - (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer, - FT_GlyphSlot slot, - FT_BBox* cbox ); - - - typedef FT_Error - (*FT_Renderer_SetModeFunc)( FT_Renderer renderer, - FT_ULong mode_tag, - FT_Pointer mode_ptr ); - -/* deprecated identifiers */ -#define FTRenderer_render FT_Renderer_RenderFunc -#define FTRenderer_transform FT_Renderer_TransformFunc -#define FTRenderer_getCBox FT_Renderer_GetCBoxFunc -#define FTRenderer_setMode FT_Renderer_SetModeFunc - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Renderer_Class */ - /* */ - /* <Description> */ - /* The renderer module class descriptor. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Module_Class fields. */ - /* */ - /* glyph_format :: The glyph image format this renderer handles. */ - /* */ - /* render_glyph :: A method used to render the image that is in a */ - /* given glyph slot into a bitmap. */ - /* */ - /* transform_glyph :: A method used to transform the image that is in */ - /* a given glyph slot. */ - /* */ - /* get_glyph_cbox :: A method used to access the glyph's cbox. */ - /* */ - /* set_mode :: A method used to pass additional parameters. */ - /* */ - /* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */ - /* This is a pointer to its raster's class. */ - /* */ - typedef struct FT_Renderer_Class_ - { - FT_Module_Class root; - - FT_Glyph_Format glyph_format; - - FT_Renderer_RenderFunc render_glyph; - FT_Renderer_TransformFunc transform_glyph; - FT_Renderer_GetCBoxFunc get_glyph_cbox; - FT_Renderer_SetModeFunc set_mode; - - FT_Raster_Funcs* raster_class; - - } FT_Renderer_Class; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Renderer */ - /* */ - /* <Description> */ - /* Retrieve the current renderer for a given glyph format. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object. */ - /* */ - /* format :: The glyph format. */ - /* */ - /* <Return> */ - /* A renderer handle. 0~if none found. */ - /* */ - /* <Note> */ - /* An error will be returned if a module already exists by that name, */ - /* or if the module requires a version of FreeType that is too great. */ - /* */ - /* To add a new renderer, simply use @FT_Add_Module. To retrieve a */ - /* renderer by its name, use @FT_Get_Module. */ - /* */ - FT_EXPORT( FT_Renderer ) - FT_Get_Renderer( FT_Library library, - FT_Glyph_Format format ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Renderer */ - /* */ - /* <Description> */ - /* Set the current renderer to use, and set additional mode. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* renderer :: A handle to the renderer object. */ - /* */ - /* num_params :: The number of additional parameters. */ - /* */ - /* parameters :: Additional parameters. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* In case of success, the renderer will be used to convert glyph */ - /* images in the renderer's known format into bitmaps. */ - /* */ - /* This doesn't change the current renderer for other formats. */ - /* */ - /* Currently, no FreeType renderer module uses `parameters'; you */ - /* should thus always pass NULL as the value. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Set_Renderer( FT_Library library, - FT_Renderer renderer, - FT_UInt num_params, - FT_Parameter* parameters ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTRENDER_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftsizes.h b/win32/include/freetype/ftsizes.h deleted file mode 100644 index bef84247..00000000 --- a/win32/include/freetype/ftsizes.h +++ /dev/null @@ -1,159 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftsizes.h */ -/* */ -/* FreeType size objects management (specification). */ -/* */ -/* Copyright 1996-2015 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. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Typical application would normally not need to use these functions. */ - /* However, they have been placed in a public API for the rare cases */ - /* where they are needed. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTSIZES_H__ -#define __FTSIZES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* sizes_management */ - /* */ - /* <Title> */ - /* Size Management */ - /* */ - /* <Abstract> */ - /* Managing multiple sizes per face. */ - /* */ - /* <Description> */ - /* When creating a new face object (e.g., with @FT_New_Face), an */ - /* @FT_Size object is automatically created and used to store all */ - /* pixel-size dependent information, available in the `face->size' */ - /* field. */ - /* */ - /* It is however possible to create more sizes for a given face, */ - /* mostly in order to manage several character pixel sizes of the */ - /* same font family and style. See @FT_New_Size and @FT_Done_Size. */ - /* */ - /* Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only */ - /* modify the contents of the current `active' size; you thus need */ - /* to use @FT_Activate_Size to change it. */ - /* */ - /* 99% of applications won't need the functions provided here, */ - /* especially if they use the caching sub-system, so be cautious */ - /* when using these. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Size */ - /* */ - /* <Description> */ - /* Create a new size object from a given face object. */ - /* */ - /* <Input> */ - /* face :: A handle to a parent face object. */ - /* */ - /* <Output> */ - /* asize :: A handle to a new size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You need to call @FT_Activate_Size in order to select the new size */ - /* for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, */ - /* @FT_Load_Glyph, @FT_Load_Char, etc. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Size( FT_Face face, - FT_Size* size ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Size */ - /* */ - /* <Description> */ - /* Discard a given size object. Note that @FT_Done_Face */ - /* automatically discards all size objects allocated with */ - /* @FT_New_Size. */ - /* */ - /* <Input> */ - /* size :: A handle to a target size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_Size( FT_Size size ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Activate_Size */ - /* */ - /* <Description> */ - /* Even though it is possible to create several size objects for a */ - /* given face (see @FT_New_Size for details), functions like */ - /* @FT_Load_Glyph or @FT_Load_Char only use the one that has been */ - /* activated last to determine the `current character pixel size'. */ - /* */ - /* This function can be used to `activate' a previously created size */ - /* object. */ - /* */ - /* <Input> */ - /* size :: A handle to a target size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If `face' is the size's parent face object, this function changes */ - /* the value of `face->size' to the input size handle. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Activate_Size( FT_Size size ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTSIZES_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftsnames.h b/win32/include/freetype/ftsnames.h deleted file mode 100644 index 0f7fbe17..00000000 --- a/win32/include/freetype/ftsnames.h +++ /dev/null @@ -1,200 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftsnames.h */ -/* */ -/* Simple interface to access SFNT name tables (which are used */ -/* to hold font names, copyright info, notices, etc.) (specification). */ -/* */ -/* This is _not_ used to retrieve glyph names! */ -/* */ -/* Copyright 1996-2015 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 __FT_SFNT_NAMES_H__ -#define __FT_SFNT_NAMES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* sfnt_names */ - /* */ - /* <Title> */ - /* SFNT Names */ - /* */ - /* <Abstract> */ - /* Access the names embedded in TrueType and OpenType files. */ - /* */ - /* <Description> */ - /* The TrueType and OpenType specifications allow the inclusion of */ - /* a special `names table' in font files. This table contains */ - /* textual (and internationalized) information regarding the font, */ - /* like family name, copyright, version, etc. */ - /* */ - /* The definitions below are used to access them if available. */ - /* */ - /* Note that this has nothing to do with glyph names! */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SfntName */ - /* */ - /* <Description> */ - /* A structure used to model an SFNT `name' table entry. */ - /* */ - /* <Fields> */ - /* platform_id :: The platform ID for `string'. */ - /* */ - /* encoding_id :: The encoding ID for `string'. */ - /* */ - /* language_id :: The language ID for `string'. */ - /* */ - /* name_id :: An identifier for `string'. */ - /* */ - /* string :: The `name' string. Note that its format differs */ - /* depending on the (platform,encoding) pair. It can */ - /* be a Pascal String, a UTF-16 one, etc. */ - /* */ - /* Generally speaking, the string is not */ - /* zero-terminated. Please refer to the TrueType */ - /* specification for details. */ - /* */ - /* string_len :: The length of `string' in bytes. */ - /* */ - /* <Note> */ - /* Possible values for `platform_id', `encoding_id', `language_id', */ - /* and `name_id' are given in the file `ttnameid.h'. For details */ - /* please refer to the TrueType or OpenType specification. */ - /* */ - /* See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */ - /* @TT_ISO_ID_XXX, and @TT_MS_ID_XXX. */ - /* */ - typedef struct FT_SfntName_ - { - FT_UShort platform_id; - FT_UShort encoding_id; - FT_UShort language_id; - FT_UShort name_id; - - FT_Byte* string; /* this string is *not* null-terminated! */ - FT_UInt string_len; /* in bytes */ - - } FT_SfntName; - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Name_Count */ - /* */ - /* <Description> */ - /* Retrieve the number of name strings in the SFNT `name' table. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Return> */ - /* The number of strings in the `name' table. */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Get_Sfnt_Name_Count( FT_Face face ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Name */ - /* */ - /* <Description> */ - /* Retrieve a string of the SFNT `name' table for a given index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* idx :: The index of the `name' string. */ - /* */ - /* <Output> */ - /* aname :: The indexed @FT_SfntName structure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The `string' array returned in the `aname' structure is not */ - /* null-terminated. The application should deallocate it if it is no */ - /* longer in use. */ - /* */ - /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */ - /* `name' table entries, then do a loop until you get the right */ - /* platform, encoding, and name ID. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Sfnt_Name( FT_Face face, - FT_UInt idx, - FT_SfntName *aname ); - - - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY - * - * @description: - * A constant used as the tag of @FT_Parameter structures to make - * FT_Open_Face() ignore preferred family subfamily names in `name' - * table since OpenType version 1.4. For backwards compatibility with - * legacy systems that have a 4-face-per-family restriction. - * - */ -#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY FT_MAKE_TAG( 'i', 'g', 'p', 'f' ) - - - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY - * - * @description: - * A constant used as the tag of @FT_Parameter structures to make - * FT_Open_Face() ignore preferred subfamily names in `name' table since - * OpenType version 1.4. For backwards compatibility with legacy - * systems that have a 4-face-per-family restriction. - * - */ -#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY FT_MAKE_TAG( 'i', 'g', 'p', 's' ) - - /* */ - - -FT_END_HEADER - -#endif /* __FT_SFNT_NAMES_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftttdrv.h b/win32/include/freetype/ftttdrv.h deleted file mode 100644 index dc0081a0..00000000 --- a/win32/include/freetype/ftttdrv.h +++ /dev/null @@ -1,310 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftttdrv.h */ -/* */ -/* FreeType API for controlling the TrueType driver */ -/* (specification only). */ -/* */ -/* Copyright 2013-2015 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 __FTTTDRV_H__ -#define __FTTTDRV_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * @section: - * tt_driver - * - * @title: - * The TrueType driver - * - * @abstract: - * Controlling the TrueType driver module. - * - * @description: - * While FreeType's TrueType driver doesn't expose API functions by - * itself, it is possible to control its behaviour with @FT_Property_Set - * and @FT_Property_Get. The following lists the available properties - * together with the necessary macros and structures. - * - * The TrueType driver's module name is `truetype'. - * - * We start with a list of definitions, kindly provided by Greg - * Hitchcock. - * - * _Bi-Level_ _Rendering_ - * - * Monochromatic rendering, exclusively used in the early days of - * TrueType by both Apple and Microsoft. Microsoft's GDI interface - * supported hinting of the right-side bearing point, such that the - * advance width could be non-linear. Most often this was done to - * achieve some level of glyph symmetry. To enable reasonable - * performance (e.g., not having to run hinting on all glyphs just to - * get the widths) there was a bit in the head table indicating if the - * side bearing was hinted, and additional tables, `hdmx' and `LTSH', to - * cache hinting widths across multiple sizes and device aspect ratios. - * - * _Font_ _Smoothing_ - * - * Microsoft's GDI implementation of anti-aliasing. Not traditional - * anti-aliasing as the outlines were hinted before the sampling. The - * widths matched the bi-level rendering. - * - * _ClearType_ _Rendering_ - * - * Technique that uses physical subpixels to improve rendering on LCD - * (and other) displays. Because of the higher resolution, many methods - * of improving symmetry in glyphs through hinting the right-side - * bearing were no longer necessary. This lead to what GDI calls - * `natural widths' ClearType, see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec21. Since hinting - * has extra resolution, most non-linearity went away, but it is still - * possible for hints to change the advance widths in this mode. - * - * _ClearType_ _Compatible_ _Widths_ - * - * One of the earliest challenges with ClearType was allowing the - * implementation in GDI to be selected without requiring all UI and - * documents to reflow. To address this, a compatible method of - * rendering ClearType was added where the font hints are executed once - * to determine the width in bi-level rendering, and then re-run in - * ClearType, with the difference in widths being absorbed in the font - * hints for ClearType (mostly in the white space of hints); see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec20. Somewhat by - * definition, compatible width ClearType allows for non-linear widths, - * but only when the bi-level version has non-linear widths. - * - * _ClearType_ _Subpixel_ _Positioning_ - * - * One of the nice benefits of ClearType is the ability to more crisply - * display fractional widths; unfortunately, the GDI model of integer - * bitmaps did not support this. However, the WPF and Direct Write - * frameworks do support fractional widths. DWrite calls this `natural - * mode', not to be confused with GDI's `natural widths'. Subpixel - * positioning, in the current implementation of Direct Write, - * unfortunately does not support hinted advance widths, see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec22. Note that the - * TrueType interpreter fully allows the advance width to be adjusted in - * this mode, just the DWrite client will ignore those changes. - * - * _ClearType_ _Backwards_ _Compatibility_ - * - * This is a set of exceptions made in the TrueType interpreter to - * minimize hinting techniques that were problematic with the extra - * resolution of ClearType; see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and - * http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx. - * This technique is not to be confused with ClearType compatible - * widths. ClearType backwards compatibility has no direct impact on - * changing advance widths, but there might be an indirect impact on - * disabling some deltas. This could be worked around in backwards - * compatibility mode. - * - * _Native_ _ClearType_ _Mode_ - * - * (Not to be confused with `natural widths'.) This mode removes all - * the exceptions in the TrueType interpreter when running with - * ClearType. Any issues on widths would still apply, though. - * - */ - - - /************************************************************************** - * - * @property: - * interpreter-version - * - * @description: - * Currently, two versions are available, representing the bytecode - * interpreter with and without subpixel hinting support, - * respectively. The default is subpixel support if - * TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel - * support otherwise (since it isn't available then). - * - * If subpixel hinting is on, many TrueType bytecode instructions behave - * differently compared to B/W or grayscale rendering (except if `native - * ClearType' is selected by the font). The main idea is to render at a - * much increased horizontal resolution, then sampling down the created - * output to subpixel precision. However, many older fonts are not - * suited to this and must be specially taken care of by applying - * (hardcoded) font-specific tweaks. - * - * Details on subpixel hinting and some of the necessary tweaks can be - * found in Greg Hitchcock's whitepaper at - * `http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'. - * - * The following example code demonstrates how to activate subpixel - * hinting (omitting the error handling). - * - * { - * FT_Library library; - * FT_Face face; - * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_38; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "truetype", - * "interpreter-version", - * &interpreter_version ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - - /************************************************************************** - * - * @enum: - * TT_INTERPRETER_VERSION_XXX - * - * @description: - * A list of constants used for the @interpreter-version property to - * select the hinting engine for Truetype fonts. - * - * The numeric value in the constant names represents the version - * number as returned by the `GETINFO' bytecode instruction. - * - * @values: - * TT_INTERPRETER_VERSION_35 :: - * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in - * Windows~98; only grayscale and B/W rasterizing is supported. - * - * TT_INTERPRETER_VERSION_38 :: - * Version~38 corresponds to MS rasterizer v.1.9; it is roughly - * equivalent to the hinting provided by DirectWrite ClearType (as - * can be found, for example, in the Internet Explorer~9 running on - * Windows~7). - * - * @note: - * This property controls the behaviour of the bytecode interpreter - * and thus how outlines get hinted. It does *not* control how glyph - * get rasterized! In particular, it does not control subpixel color - * filtering. - * - * If FreeType has not been compiled with configuration option - * FT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 causes an - * `FT_Err_Unimplemented_Feature' error. - * - * Depending on the graphics framework, Microsoft uses different - * bytecode and rendering engines. As a consequence, the version - * numbers returned by a call to the `GETINFO' bytecode instruction are - * more convoluted than desired. - * - * Here are two tables that try to shed some light on the possible - * values for the MS rasterizer engine, together with the additional - * features introduced by it. - * - * { - * GETINFO framework version feature - * ------------------------------------------------------------------- - * 3 GDI (Win 3.1), v1.0 16-bit, first version - * TrueImage - * 33 GDI (Win NT 3.1), v1.5 32-bit - * HP Laserjet - * 34 GDI (Win 95) v1.6 font smoothing, - * new SCANTYPE opcode - * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET - * bits in composite glyphs - * 36 MGDI (Win CE 2) v1.6+ classic ClearType - * 37 GDI (XP and later), v1.8 ClearType - * GDI+ old (before Vista) - * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType, - * WPF Y-direction ClearType, - * additional error checking - * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags - * in GETINFO opcode, - * bug fixes - * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag - * DWrite (Win 8) in GETINFO opcode, - * Gray ClearType - * } - * - * The `version' field gives a rough orientation only, since some - * applications provided certain features much earlier (as an example, - * Microsoft Reader used subpixel and Y-direction ClearType already in - * Windows 2000). Similarly, updates to a given framework might include - * improved hinting support. - * - * { - * version sampling rendering comment - * x y x y - * -------------------------------------------------------------- - * v1.0 normal normal B/W B/W bi-level - * v1.6 high high gray gray grayscale - * v1.8 high normal color-filter B/W (GDI) ClearType - * v1.9 high high color-filter gray Color ClearType - * v2.1 high normal gray B/W Gray ClearType - * v2.1 high high gray gray Gray ClearType - * } - * - * Color and Gray ClearType are the two available variants of - * `Y-direction ClearType', meaning grayscale rasterization along the - * Y-direction; the name used in the TrueType specification for this - * feature is `symmetric smoothing'. `Classic ClearType' is the - * original algorithm used before introducing a modified version in - * Win~XP. Another name for v1.6's grayscale rendering is `font - * smoothing', and `Color ClearType' is sometimes also called `DWrite - * ClearType'. To differentiate between today's Color ClearType and the - * earlier ClearType variant with B/W rendering along the vertical axis, - * the latter is sometimes called `GDI ClearType'. - * - * `Normal' and `high' sampling describe the (virtual) resolution to - * access the rasterized outline after the hinting process. `Normal' - * means 1 sample per grid line (i.e., B/W). In the current Microsoft - * implementation, `high' means an extra virtual resolution of 16x16 (or - * 16x1) grid lines per pixel for bytecode instructions like `MIRP'. - * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid - * lines for color filtering if Color ClearType is activated. - * - * Note that `Gray ClearType' is essentially the same as v1.6's - * grayscale rendering. However, the GETINFO instruction handles it - * differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1 - * returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing), - * and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for - * the version~1 gasp table exclusively (like Color ClearType), while - * v1.6 only respects the values of version~0 (bits 0 and~1). - * - * FreeType doesn't provide all capabilities of the most recent - * ClearType incarnation, thus we identify our subpixel support as - * version~38. - * - */ -#define TT_INTERPRETER_VERSION_35 35 -#define TT_INTERPRETER_VERSION_38 38 - - /* */ - - -FT_END_HEADER - - -#endif /* __FTTTDRV_H__ */ - - -/* END */ diff --git a/win32/include/freetype/fttypes.h b/win32/include/freetype/fttypes.h deleted file mode 100644 index 706a1be4..00000000 --- a/win32/include/freetype/fttypes.h +++ /dev/null @@ -1,602 +0,0 @@ -/***************************************************************************/ -/* */ -/* fttypes.h */ -/* */ -/* FreeType simple types definitions (specification only). */ -/* */ -/* Copyright 1996-2015 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 __FTTYPES_H__ -#define __FTTYPES_H__ - - -#include <ft2build.h> -#include FT_CONFIG_CONFIG_H -#include FT_SYSTEM_H -#include FT_IMAGE_H - -#include <stddef.h> - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /* <Title> */ - /* Basic Data Types */ - /* */ - /* <Abstract> */ - /* The basic data types defined by the library. */ - /* */ - /* <Description> */ - /* This section contains the basic data types defined by FreeType~2, */ - /* ranging from simple scalar types to bitmap descriptors. More */ - /* font-specific structures are defined in a different section. */ - /* */ - /* <Order> */ - /* FT_Byte */ - /* FT_Bytes */ - /* FT_Char */ - /* FT_Int */ - /* FT_UInt */ - /* FT_Int16 */ - /* FT_UInt16 */ - /* FT_Int32 */ - /* FT_UInt32 */ - /* FT_Int64 */ - /* FT_UInt64 */ - /* FT_Short */ - /* FT_UShort */ - /* FT_Long */ - /* FT_ULong */ - /* FT_Bool */ - /* FT_Offset */ - /* FT_PtrDist */ - /* FT_String */ - /* FT_Tag */ - /* FT_Error */ - /* FT_Fixed */ - /* FT_Pointer */ - /* FT_Pos */ - /* FT_Vector */ - /* FT_BBox */ - /* FT_Matrix */ - /* FT_FWord */ - /* FT_UFWord */ - /* FT_F2Dot14 */ - /* FT_UnitVector */ - /* FT_F26Dot6 */ - /* FT_Data */ - /* */ - /* FT_MAKE_TAG */ - /* */ - /* FT_Generic */ - /* FT_Generic_Finalizer */ - /* */ - /* FT_Bitmap */ - /* FT_Pixel_Mode */ - /* FT_Palette_Mode */ - /* FT_Glyph_Format */ - /* FT_IMAGE_TAG */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Bool */ - /* */ - /* <Description> */ - /* A typedef of unsigned char, used for simple booleans. As usual, */ - /* values 1 and~0 represent true and false, respectively. */ - /* */ - typedef unsigned char FT_Bool; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_FWord */ - /* */ - /* <Description> */ - /* A signed 16-bit integer used to store a distance in original font */ - /* units. */ - /* */ - typedef signed short FT_FWord; /* distance in FUnits */ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UFWord */ - /* */ - /* <Description> */ - /* An unsigned 16-bit integer used to store a distance in original */ - /* font units. */ - /* */ - typedef unsigned short FT_UFWord; /* unsigned distance */ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Char */ - /* */ - /* <Description> */ - /* A simple typedef for the _signed_ char type. */ - /* */ - typedef signed char FT_Char; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Byte */ - /* */ - /* <Description> */ - /* A simple typedef for the _unsigned_ char type. */ - /* */ - typedef unsigned char FT_Byte; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Bytes */ - /* */ - /* <Description> */ - /* A typedef for constant memory areas. */ - /* */ - typedef const FT_Byte* FT_Bytes; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Tag */ - /* */ - /* <Description> */ - /* A typedef for 32-bit tags (as used in the SFNT format). */ - /* */ - typedef FT_UInt32 FT_Tag; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_String */ - /* */ - /* <Description> */ - /* A simple typedef for the char type, usually used for strings. */ - /* */ - typedef char FT_String; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Short */ - /* */ - /* <Description> */ - /* A typedef for signed short. */ - /* */ - typedef signed short FT_Short; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UShort */ - /* */ - /* <Description> */ - /* A typedef for unsigned short. */ - /* */ - typedef unsigned short FT_UShort; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Int */ - /* */ - /* <Description> */ - /* A typedef for the int type. */ - /* */ - typedef signed int FT_Int; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UInt */ - /* */ - /* <Description> */ - /* A typedef for the unsigned int type. */ - /* */ - typedef unsigned int FT_UInt; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Long */ - /* */ - /* <Description> */ - /* A typedef for signed long. */ - /* */ - typedef signed long FT_Long; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_ULong */ - /* */ - /* <Description> */ - /* A typedef for unsigned long. */ - /* */ - typedef unsigned long FT_ULong; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_F2Dot14 */ - /* */ - /* <Description> */ - /* A signed 2.14 fixed-point type used for unit vectors. */ - /* */ - typedef signed short FT_F2Dot14; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_F26Dot6 */ - /* */ - /* <Description> */ - /* A signed 26.6 fixed-point type used for vectorial pixel */ - /* coordinates. */ - /* */ - typedef signed long FT_F26Dot6; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Fixed */ - /* */ - /* <Description> */ - /* This type is used to store 16.16 fixed-point values, like scaling */ - /* values or matrix coefficients. */ - /* */ - typedef signed long FT_Fixed; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Error */ - /* */ - /* <Description> */ - /* The FreeType error code type. A value of~0 is always interpreted */ - /* as a successful operation. */ - /* */ - typedef int FT_Error; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Pointer */ - /* */ - /* <Description> */ - /* A simple typedef for a typeless pointer. */ - /* */ - typedef void* FT_Pointer; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Offset */ - /* */ - /* <Description> */ - /* This is equivalent to the ANSI~C `size_t' type, i.e., the largest */ - /* _unsigned_ integer type used to express a file size or position, */ - /* or a memory block size. */ - /* */ - typedef size_t FT_Offset; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_PtrDist */ - /* */ - /* <Description> */ - /* This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the */ - /* largest _signed_ integer type used to express the distance */ - /* between two pointers. */ - /* */ - typedef ft_ptrdiff_t FT_PtrDist; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_UnitVector */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2D vector unit vector. Uses */ - /* FT_F2Dot14 types. */ - /* */ - /* <Fields> */ - /* x :: Horizontal coordinate. */ - /* */ - /* y :: Vertical coordinate. */ - /* */ - typedef struct FT_UnitVector_ - { - FT_F2Dot14 x; - FT_F2Dot14 y; - - } FT_UnitVector; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Matrix */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2x2 matrix. Coefficients are */ - /* in 16.16 fixed-point format. The computation performed is: */ - /* */ - /* { */ - /* x' = x*xx + y*xy */ - /* y' = x*yx + y*yy */ - /* } */ - /* */ - /* <Fields> */ - /* xx :: Matrix coefficient. */ - /* */ - /* xy :: Matrix coefficient. */ - /* */ - /* yx :: Matrix coefficient. */ - /* */ - /* yy :: Matrix coefficient. */ - /* */ - typedef struct FT_Matrix_ - { - FT_Fixed xx, xy; - FT_Fixed yx, yy; - - } FT_Matrix; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Data */ - /* */ - /* <Description> */ - /* Read-only binary data represented as a pointer and a length. */ - /* */ - /* <Fields> */ - /* pointer :: The data. */ - /* */ - /* length :: The length of the data in bytes. */ - /* */ - typedef struct FT_Data_ - { - const FT_Byte* pointer; - FT_Int length; - - } FT_Data; - - - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Generic_Finalizer */ - /* */ - /* <Description> */ - /* Describe a function used to destroy the `client' data of any */ - /* FreeType object. See the description of the @FT_Generic type for */ - /* details of usage. */ - /* */ - /* <Input> */ - /* The address of the FreeType object that is under finalization. */ - /* Its client data is accessed through its `generic' field. */ - /* */ - typedef void (*FT_Generic_Finalizer)(void* object); - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Generic */ - /* */ - /* <Description> */ - /* Client applications often need to associate their own data to a */ - /* variety of FreeType core objects. For example, a text layout API */ - /* might want to associate a glyph cache to a given size object. */ - /* */ - /* Some FreeType object contains a `generic' field, of type */ - /* FT_Generic, which usage is left to client applications and font */ - /* servers. */ - /* */ - /* It can be used to store a pointer to client-specific data, as well */ - /* as the address of a `finalizer' function, which will be called by */ - /* FreeType when the object is destroyed (for example, the previous */ - /* client example would put the address of the glyph cache destructor */ - /* in the `finalizer' field). */ - /* */ - /* <Fields> */ - /* data :: A typeless pointer to any client-specified data. This */ - /* field is completely ignored by the FreeType library. */ - /* */ - /* finalizer :: A pointer to a `generic finalizer' function, which */ - /* will be called when the object is destroyed. If this */ - /* field is set to NULL, no code will be called. */ - /* */ - typedef struct FT_Generic_ - { - void* data; - FT_Generic_Finalizer finalizer; - - } FT_Generic; - - - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_MAKE_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags that are used to label */ - /* TrueType tables into an unsigned long, 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 ) - - - /*************************************************************************/ - /*************************************************************************/ - /* */ - /* L I S T M A N A G E M E N T */ - /* */ - /*************************************************************************/ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* list_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_ListNode */ - /* */ - /* <Description> */ - /* Many elements and objects in FreeType are listed through an */ - /* @FT_List record (see @FT_ListRec). As its name suggests, an */ - /* FT_ListNode is a handle to a single list element. */ - /* */ - typedef struct FT_ListNodeRec_* FT_ListNode; - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_List */ - /* */ - /* <Description> */ - /* A handle to a list record (see @FT_ListRec). */ - /* */ - typedef struct FT_ListRec_* FT_List; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_ListNodeRec */ - /* */ - /* <Description> */ - /* A structure used to hold a single list element. */ - /* */ - /* <Fields> */ - /* prev :: The previous element in the list. NULL if first. */ - /* */ - /* next :: The next element in the list. NULL if last. */ - /* */ - /* data :: A typeless pointer to the listed object. */ - /* */ - typedef struct FT_ListNodeRec_ - { - FT_ListNode prev; - FT_ListNode next; - void* data; - - } FT_ListNodeRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_ListRec */ - /* */ - /* <Description> */ - /* A structure used to hold a simple doubly-linked list. These are */ - /* used in many parts of FreeType. */ - /* */ - /* <Fields> */ - /* head :: The head (first element) of doubly-linked list. */ - /* */ - /* tail :: The tail (last element) of doubly-linked list. */ - /* */ - typedef struct FT_ListRec_ - { - FT_ListNode head; - FT_ListNode tail; - - } FT_ListRec; - - /* */ - - -#define FT_IS_EMPTY( list ) ( (list).head == 0 ) -#define FT_BOOL( x ) ( (FT_Bool)( x ) ) - - /* concatenate C tokens */ -#define FT_ERR_XCAT( x, y ) x ## y -#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) - - /* see `ftmoderr.h' for descriptions of the following macros */ - -#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e ) - -#define FT_ERROR_BASE( x ) ( (x) & 0xFF ) -#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U ) - -#define FT_ERR_EQ( x, e ) \ - ( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) ) -#define FT_ERR_NEQ( x, e ) \ - ( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) ) - - -FT_END_HEADER - -#endif /* __FTTYPES_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ftwinfnt.h b/win32/include/freetype/ftwinfnt.h deleted file mode 100644 index caedaa1c..00000000 --- a/win32/include/freetype/ftwinfnt.h +++ /dev/null @@ -1,275 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftwinfnt.h */ -/* */ -/* FreeType API for accessing Windows fnt-specific data. */ -/* */ -/* Copyright 2003-2015 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 __FTWINFNT_H__ -#define __FTWINFNT_H__ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* winfnt_fonts */ - /* */ - /* <Title> */ - /* Window FNT Files */ - /* */ - /* <Abstract> */ - /* Windows FNT specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Windows FNT specific */ - /* functions. */ - /* */ - /*************************************************************************/ - - - /************************************************************************* - * - * @enum: - * FT_WinFNT_ID_XXX - * - * @description: - * A list of valid values for the `charset' byte in - * @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX - * encodings (except for cp1361) can be found at - * ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS - * subdirectory. cp1361 is roughly a superset of - * MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT. - * - * @values: - * FT_WinFNT_ID_DEFAULT :: - * This is used for font enumeration and font creation as a - * `don't care' value. Valid font files don't contain this value. - * When querying for information about the character set of the font - * that is currently selected into a specified device context, this - * return value (of the related Windows API) simply denotes failure. - * - * FT_WinFNT_ID_SYMBOL :: - * There is no known mapping table available. - * - * FT_WinFNT_ID_MAC :: - * Mac Roman encoding. - * - * FT_WinFNT_ID_OEM :: - * From Michael Pöttgen <michael@poettgen.de>: - * - * The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM - * is used for the charset of vector fonts, like `modern.fon', - * `roman.fon', and `script.fon' on Windows. - * - * The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value - * specifies a character set that is operating-system dependent. - * - * The `IFIMETRICS' documentation from the `Windows Driver - * Development Kit' says: This font supports an OEM-specific - * character set. The OEM character set is system dependent. - * - * In general OEM, as opposed to ANSI (i.e., cp1252), denotes the - * second default codepage that most international versions of - * Windows have. It is one of the OEM codepages from - * - * https://msdn.microsoft.com/en-us/goglobal/bb964655, - * - * and is used for the `DOS boxes', to support legacy applications. - * A German Windows version for example usually uses ANSI codepage - * 1252 and OEM codepage 850. - * - * FT_WinFNT_ID_CP874 :: - * A superset of Thai TIS 620 and ISO 8859-11. - * - * FT_WinFNT_ID_CP932 :: - * A superset of Japanese Shift-JIS (with minor deviations). - * - * FT_WinFNT_ID_CP936 :: - * A superset of simplified Chinese GB 2312-1980 (with different - * ordering and minor deviations). - * - * FT_WinFNT_ID_CP949 :: - * A superset of Korean Hangul KS~C 5601-1987 (with different - * ordering and minor deviations). - * - * FT_WinFNT_ID_CP950 :: - * A superset of traditional Chinese Big~5 ETen (with different - * ordering and minor deviations). - * - * FT_WinFNT_ID_CP1250 :: - * A superset of East European ISO 8859-2 (with slightly different - * ordering). - * - * FT_WinFNT_ID_CP1251 :: - * A superset of Russian ISO 8859-5 (with different ordering). - * - * FT_WinFNT_ID_CP1252 :: - * ANSI encoding. A superset of ISO 8859-1. - * - * FT_WinFNT_ID_CP1253 :: - * A superset of Greek ISO 8859-7 (with minor modifications). - * - * FT_WinFNT_ID_CP1254 :: - * A superset of Turkish ISO 8859-9. - * - * FT_WinFNT_ID_CP1255 :: - * A superset of Hebrew ISO 8859-8 (with some modifications). - * - * FT_WinFNT_ID_CP1256 :: - * A superset of Arabic ISO 8859-6 (with different ordering). - * - * FT_WinFNT_ID_CP1257 :: - * A superset of Baltic ISO 8859-13 (with some deviations). - * - * FT_WinFNT_ID_CP1258 :: - * For Vietnamese. This encoding doesn't cover all necessary - * characters. - * - * FT_WinFNT_ID_CP1361 :: - * Korean (Johab). - */ - -#define FT_WinFNT_ID_CP1252 0 -#define FT_WinFNT_ID_DEFAULT 1 -#define FT_WinFNT_ID_SYMBOL 2 -#define FT_WinFNT_ID_MAC 77 -#define FT_WinFNT_ID_CP932 128 -#define FT_WinFNT_ID_CP949 129 -#define FT_WinFNT_ID_CP1361 130 -#define FT_WinFNT_ID_CP936 134 -#define FT_WinFNT_ID_CP950 136 -#define FT_WinFNT_ID_CP1253 161 -#define FT_WinFNT_ID_CP1254 162 -#define FT_WinFNT_ID_CP1258 163 -#define FT_WinFNT_ID_CP1255 177 -#define FT_WinFNT_ID_CP1256 178 -#define FT_WinFNT_ID_CP1257 186 -#define FT_WinFNT_ID_CP1251 204 -#define FT_WinFNT_ID_CP874 222 -#define FT_WinFNT_ID_CP1250 238 -#define FT_WinFNT_ID_OEM 255 - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_WinFNT_HeaderRec */ - /* */ - /* <Description> */ - /* Windows FNT Header info. */ - /* */ - typedef struct FT_WinFNT_HeaderRec_ - { - FT_UShort version; - FT_ULong file_size; - FT_Byte copyright[60]; - FT_UShort file_type; - FT_UShort nominal_point_size; - FT_UShort vertical_resolution; - FT_UShort horizontal_resolution; - FT_UShort ascent; - FT_UShort internal_leading; - FT_UShort external_leading; - FT_Byte italic; - FT_Byte underline; - FT_Byte strike_out; - FT_UShort weight; - FT_Byte charset; - FT_UShort pixel_width; - FT_UShort pixel_height; - FT_Byte pitch_and_family; - FT_UShort avg_width; - FT_UShort max_width; - FT_Byte first_char; - FT_Byte last_char; - FT_Byte default_char; - FT_Byte break_char; - FT_UShort bytes_per_row; - FT_ULong device_offset; - FT_ULong face_name_offset; - FT_ULong bits_pointer; - FT_ULong bits_offset; - FT_Byte reserved; - FT_ULong flags; - FT_UShort A_space; - FT_UShort B_space; - FT_UShort C_space; - FT_UShort color_table_offset; - FT_ULong reserved1[4]; - - } FT_WinFNT_HeaderRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_WinFNT_Header */ - /* */ - /* <Description> */ - /* A handle to an @FT_WinFNT_HeaderRec structure. */ - /* */ - typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header; - - - /********************************************************************** - * - * @function: - * FT_Get_WinFNT_Header - * - * @description: - * Retrieve a Windows FNT font info header. - * - * @input: - * face :: A handle to the input face. - * - * @output: - * aheader :: The WinFNT header. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with Windows FNT faces, returning an error - * otherwise. - */ - FT_EXPORT( FT_Error ) - FT_Get_WinFNT_Header( FT_Face face, - FT_WinFNT_HeaderRec *aheader ); - - /* */ - - -FT_END_HEADER - -#endif /* __FTWINFNT_H__ */ - - -/* END */ - - -/* Local Variables: */ -/* coding: utf-8 */ -/* End: */ diff --git a/win32/include/freetype/t1tables.h b/win32/include/freetype/t1tables.h deleted file mode 100644 index a6ea415a..00000000 --- a/win32/include/freetype/t1tables.h +++ /dev/null @@ -1,761 +0,0 @@ -/***************************************************************************/ -/* */ -/* t1tables.h */ -/* */ -/* Basic Type 1/Type 2 tables definitions and interface (specification */ -/* only). */ -/* */ -/* Copyright 1996-2015 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 __T1TABLES_H__ -#define __T1TABLES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* type1_tables */ - /* */ - /* <Title> */ - /* Type 1 Tables */ - /* */ - /* <Abstract> */ - /* Type~1 (PostScript) specific font tables. */ - /* */ - /* <Description> */ - /* This section contains the definition of Type 1-specific tables, */ - /* including structures related to other PostScript font formats. */ - /* */ - /* <Order> */ - /* PS_FontInfoRec */ - /* PS_FontInfo */ - /* PS_PrivateRec */ - /* PS_Private */ - /* */ - /* CID_FaceDictRec */ - /* CID_FaceDict */ - /* CID_FaceInfoRec */ - /* CID_FaceInfo */ - /* */ - /* FT_Has_PS_Glyph_Names */ - /* FT_Get_PS_Font_Info */ - /* FT_Get_PS_Font_Private */ - /* FT_Get_PS_Font_Value */ - /* */ - /* T1_Blend_Flags */ - /* T1_EncodingType */ - /* PS_Dict_Keys */ - /* */ - /*************************************************************************/ - - - /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */ - /* structures in order to support Multiple Master fonts. */ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_FontInfoRec */ - /* */ - /* <Description> */ - /* A structure used to model a Type~1 or Type~2 FontInfo dictionary. */ - /* Note that for Multiple Master fonts, each instance has its own */ - /* FontInfo dictionary. */ - /* */ - typedef struct PS_FontInfoRec_ - { - FT_String* version; - FT_String* notice; - FT_String* full_name; - FT_String* family_name; - FT_String* weight; - FT_Long italic_angle; - FT_Bool is_fixed_pitch; - FT_Short underline_position; - FT_UShort underline_thickness; - - } PS_FontInfoRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_FontInfo */ - /* */ - /* <Description> */ - /* A handle to a @PS_FontInfoRec structure. */ - /* */ - typedef struct PS_FontInfoRec_* PS_FontInfo; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* T1_FontInfo */ - /* */ - /* <Description> */ - /* This type is equivalent to @PS_FontInfoRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ - typedef PS_FontInfoRec T1_FontInfo; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_PrivateRec */ - /* */ - /* <Description> */ - /* A structure used to model a Type~1 or Type~2 private dictionary. */ - /* Note that for Multiple Master fonts, each instance has its own */ - /* Private dictionary. */ - /* */ - typedef struct PS_PrivateRec_ - { - FT_Int unique_id; - FT_Int lenIV; - - FT_Byte num_blue_values; - FT_Byte num_other_blues; - FT_Byte num_family_blues; - FT_Byte num_family_other_blues; - - FT_Short blue_values[14]; - FT_Short other_blues[10]; - - FT_Short family_blues [14]; - FT_Short family_other_blues[10]; - - FT_Fixed blue_scale; - FT_Int blue_shift; - FT_Int blue_fuzz; - - FT_UShort standard_width[1]; - FT_UShort standard_height[1]; - - FT_Byte num_snap_widths; - FT_Byte num_snap_heights; - FT_Bool force_bold; - FT_Bool round_stem_up; - - FT_Short snap_widths [13]; /* including std width */ - FT_Short snap_heights[13]; /* including std height */ - - FT_Fixed expansion_factor; - - FT_Long language_group; - FT_Long password; - - FT_Short min_feature[2]; - - } PS_PrivateRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_Private */ - /* */ - /* <Description> */ - /* A handle to a @PS_PrivateRec structure. */ - /* */ - typedef struct PS_PrivateRec_* PS_Private; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* T1_Private */ - /* */ - /* <Description> */ - /* This type is equivalent to @PS_PrivateRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ - typedef PS_PrivateRec T1_Private; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* T1_Blend_Flags */ - /* */ - /* <Description> */ - /* A set of flags used to indicate which fields are present in a */ - /* given blend dictionary (font info or private). Used to support */ - /* Multiple Masters fonts. */ - /* */ - /* <Values> */ - /* T1_BLEND_UNDERLINE_POSITION :: */ - /* T1_BLEND_UNDERLINE_THICKNESS :: */ - /* T1_BLEND_ITALIC_ANGLE :: */ - /* T1_BLEND_BLUE_VALUES :: */ - /* T1_BLEND_OTHER_BLUES :: */ - /* T1_BLEND_STANDARD_WIDTH :: */ - /* T1_BLEND_STANDARD_HEIGHT :: */ - /* T1_BLEND_STEM_SNAP_WIDTHS :: */ - /* T1_BLEND_STEM_SNAP_HEIGHTS :: */ - /* T1_BLEND_BLUE_SCALE :: */ - /* T1_BLEND_BLUE_SHIFT :: */ - /* T1_BLEND_FAMILY_BLUES :: */ - /* T1_BLEND_FAMILY_OTHER_BLUES :: */ - /* T1_BLEND_FORCE_BOLD :: */ - /* */ - typedef enum T1_Blend_Flags_ - { - /* required fields in a FontInfo blend dictionary */ - T1_BLEND_UNDERLINE_POSITION = 0, - T1_BLEND_UNDERLINE_THICKNESS, - T1_BLEND_ITALIC_ANGLE, - - /* required fields in a Private blend dictionary */ - T1_BLEND_BLUE_VALUES, - T1_BLEND_OTHER_BLUES, - T1_BLEND_STANDARD_WIDTH, - T1_BLEND_STANDARD_HEIGHT, - T1_BLEND_STEM_SNAP_WIDTHS, - T1_BLEND_STEM_SNAP_HEIGHTS, - T1_BLEND_BLUE_SCALE, - T1_BLEND_BLUE_SHIFT, - T1_BLEND_FAMILY_BLUES, - T1_BLEND_FAMILY_OTHER_BLUES, - T1_BLEND_FORCE_BOLD, - - T1_BLEND_MAX /* do not remove */ - - } T1_Blend_Flags; - - - /* these constants are deprecated; use the corresponding */ - /* `T1_Blend_Flags' values instead */ -#define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION -#define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS -#define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE -#define t1_blend_blue_values T1_BLEND_BLUE_VALUES -#define t1_blend_other_blues T1_BLEND_OTHER_BLUES -#define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH -#define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT -#define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS -#define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS -#define t1_blend_blue_scale T1_BLEND_BLUE_SCALE -#define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT -#define t1_blend_family_blues T1_BLEND_FAMILY_BLUES -#define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES -#define t1_blend_force_bold T1_BLEND_FORCE_BOLD -#define t1_blend_max T1_BLEND_MAX - - /* */ - - - /* maximum number of Multiple Masters designs, as defined in the spec */ -#define T1_MAX_MM_DESIGNS 16 - - /* maximum number of Multiple Masters axes, as defined in the spec */ -#define T1_MAX_MM_AXIS 4 - - /* maximum number of elements in a design map */ -#define T1_MAX_MM_MAP_POINTS 20 - - - /* this structure is used to store the BlendDesignMap entry for an axis */ - typedef struct PS_DesignMap_ - { - FT_Byte num_points; - FT_Long* design_points; - FT_Fixed* blend_points; - - } PS_DesignMapRec, *PS_DesignMap; - - /* backwards-compatible definition */ - typedef PS_DesignMapRec T1_DesignMap; - - - typedef struct PS_BlendRec_ - { - FT_UInt num_designs; - FT_UInt num_axis; - - FT_String* axis_names[T1_MAX_MM_AXIS]; - FT_Fixed* design_pos[T1_MAX_MM_DESIGNS]; - PS_DesignMapRec design_map[T1_MAX_MM_AXIS]; - - FT_Fixed* weight_vector; - FT_Fixed* default_weight_vector; - - PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1]; - PS_Private privates [T1_MAX_MM_DESIGNS + 1]; - - FT_ULong blend_bitflags; - - FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1]; - - /* since 2.3.0 */ - - /* undocumented, optional: the default design instance; */ - /* corresponds to default_weight_vector -- */ - /* num_default_design_vector == 0 means it is not present */ - /* in the font and associated metrics files */ - FT_UInt default_design_vector[T1_MAX_MM_DESIGNS]; - FT_UInt num_default_design_vector; - - } PS_BlendRec, *PS_Blend; - - - /* backwards-compatible definition */ - typedef PS_BlendRec T1_Blend; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceDictRec */ - /* */ - /* <Description> */ - /* A structure used to represent data in a CID top-level dictionary. */ - /* */ - typedef struct CID_FaceDictRec_ - { - PS_PrivateRec private_dict; - - FT_UInt len_buildchar; - FT_Fixed forcebold_threshold; - FT_Pos stroke_width; - FT_Fixed expansion_factor; - - FT_Byte paint_type; - FT_Byte font_type; - FT_Matrix font_matrix; - FT_Vector font_offset; - - FT_UInt num_subrs; - FT_ULong subrmap_offset; - FT_Int sd_bytes; - - } CID_FaceDictRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceDict */ - /* */ - /* <Description> */ - /* A handle to a @CID_FaceDictRec structure. */ - /* */ - typedef struct CID_FaceDictRec_* CID_FaceDict; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FontDict */ - /* */ - /* <Description> */ - /* This type is equivalent to @CID_FaceDictRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ - typedef CID_FaceDictRec CID_FontDict; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceInfoRec */ - /* */ - /* <Description> */ - /* A structure used to represent CID Face information. */ - /* */ - typedef struct CID_FaceInfoRec_ - { - FT_String* cid_font_name; - FT_Fixed cid_version; - FT_Int cid_font_type; - - FT_String* registry; - FT_String* ordering; - FT_Int supplement; - - PS_FontInfoRec font_info; - FT_BBox font_bbox; - FT_ULong uid_base; - - FT_Int num_xuid; - FT_ULong xuid[16]; - - FT_ULong cidmap_offset; - FT_Int fd_bytes; - FT_Int gd_bytes; - FT_ULong cid_count; - - FT_Int num_dicts; - CID_FaceDict font_dicts; - - FT_ULong data_offset; - - } CID_FaceInfoRec; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceInfo */ - /* */ - /* <Description> */ - /* A handle to a @CID_FaceInfoRec structure. */ - /* */ - typedef struct CID_FaceInfoRec_* CID_FaceInfo; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_Info */ - /* */ - /* <Description> */ - /* This type is equivalent to @CID_FaceInfoRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ - typedef CID_FaceInfoRec CID_Info; - - - /************************************************************************ - * - * @function: - * FT_Has_PS_Glyph_Names - * - * @description: - * Return true if a given face provides reliable PostScript glyph - * names. This is similar to using the @FT_HAS_GLYPH_NAMES macro, - * except that certain fonts (mostly TrueType) contain incorrect - * glyph name tables. - * - * When this function returns true, the caller is sure that the glyph - * names returned by @FT_Get_Glyph_Name are reliable. - * - * @input: - * face :: - * face handle - * - * @return: - * Boolean. True if glyph names are reliable. - * - */ - FT_EXPORT( FT_Int ) - FT_Has_PS_Glyph_Names( FT_Face face ); - - - /************************************************************************ - * - * @function: - * FT_Get_PS_Font_Info - * - * @description: - * Retrieve the @PS_FontInfoRec structure corresponding to a given - * PostScript font. - * - * @input: - * face :: - * PostScript face handle. - * - * @output: - * afont_info :: - * Output font info structure pointer. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * String pointers within the @PS_FontInfoRec structure are owned by - * the face and don't need to be freed by the caller. Missing entries - * in the font's FontInfo dictionary are represented by NULL pointers. - * - * If the font's format is not PostScript-based, this function will - * return the `FT_Err_Invalid_Argument' error code. - * - */ - FT_EXPORT( FT_Error ) - FT_Get_PS_Font_Info( FT_Face face, - PS_FontInfo afont_info ); - - - /************************************************************************ - * - * @function: - * FT_Get_PS_Font_Private - * - * @description: - * Retrieve the @PS_PrivateRec structure corresponding to a given - * PostScript font. - * - * @input: - * face :: - * PostScript face handle. - * - * @output: - * afont_private :: - * Output private dictionary structure pointer. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The string pointers within the @PS_PrivateRec structure are owned by - * the face and don't need to be freed by the caller. - * - * If the font's format is not PostScript-based, this function returns - * the `FT_Err_Invalid_Argument' error code. - * - */ - FT_EXPORT( FT_Error ) - FT_Get_PS_Font_Private( FT_Face face, - PS_Private afont_private ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* T1_EncodingType */ - /* */ - /* <Description> */ - /* An enumeration describing the `Encoding' entry in a Type 1 */ - /* dictionary. */ - /* */ - /* <Values> */ - /* T1_ENCODING_TYPE_NONE :: */ - /* T1_ENCODING_TYPE_ARRAY :: */ - /* T1_ENCODING_TYPE_STANDARD :: */ - /* T1_ENCODING_TYPE_ISOLATIN1 :: */ - /* T1_ENCODING_TYPE_EXPERT :: */ - /* */ - typedef enum T1_EncodingType_ - { - T1_ENCODING_TYPE_NONE = 0, - T1_ENCODING_TYPE_ARRAY, - T1_ENCODING_TYPE_STANDARD, - T1_ENCODING_TYPE_ISOLATIN1, - T1_ENCODING_TYPE_EXPERT - - } T1_EncodingType; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* PS_Dict_Keys */ - /* */ - /* <Description> */ - /* An enumeration used in calls to @FT_Get_PS_Font_Value to identify */ - /* the Type~1 dictionary entry to retrieve. */ - /* */ - /* <Values> */ - /* PS_DICT_FONT_TYPE :: */ - /* PS_DICT_FONT_MATRIX :: */ - /* PS_DICT_FONT_BBOX :: */ - /* PS_DICT_PAINT_TYPE :: */ - /* PS_DICT_FONT_NAME :: */ - /* PS_DICT_UNIQUE_ID :: */ - /* PS_DICT_NUM_CHAR_STRINGS :: */ - /* PS_DICT_CHAR_STRING_KEY :: */ - /* PS_DICT_CHAR_STRING :: */ - /* PS_DICT_ENCODING_TYPE :: */ - /* PS_DICT_ENCODING_ENTRY :: */ - /* PS_DICT_NUM_SUBRS :: */ - /* PS_DICT_SUBR :: */ - /* PS_DICT_STD_HW :: */ - /* PS_DICT_STD_VW :: */ - /* PS_DICT_NUM_BLUE_VALUES :: */ - /* PS_DICT_BLUE_VALUE :: */ - /* PS_DICT_BLUE_FUZZ :: */ - /* PS_DICT_NUM_OTHER_BLUES :: */ - /* PS_DICT_OTHER_BLUE :: */ - /* PS_DICT_NUM_FAMILY_BLUES :: */ - /* PS_DICT_FAMILY_BLUE :: */ - /* PS_DICT_NUM_FAMILY_OTHER_BLUES :: */ - /* PS_DICT_FAMILY_OTHER_BLUE :: */ - /* PS_DICT_BLUE_SCALE :: */ - /* PS_DICT_BLUE_SHIFT :: */ - /* PS_DICT_NUM_STEM_SNAP_H :: */ - /* PS_DICT_STEM_SNAP_H :: */ - /* PS_DICT_NUM_STEM_SNAP_V :: */ - /* PS_DICT_STEM_SNAP_V :: */ - /* PS_DICT_FORCE_BOLD :: */ - /* PS_DICT_RND_STEM_UP :: */ - /* PS_DICT_MIN_FEATURE :: */ - /* PS_DICT_LEN_IV :: */ - /* PS_DICT_PASSWORD :: */ - /* PS_DICT_LANGUAGE_GROUP :: */ - /* PS_DICT_VERSION :: */ - /* PS_DICT_NOTICE :: */ - /* PS_DICT_FULL_NAME :: */ - /* PS_DICT_FAMILY_NAME :: */ - /* PS_DICT_WEIGHT :: */ - /* PS_DICT_IS_FIXED_PITCH :: */ - /* PS_DICT_UNDERLINE_POSITION :: */ - /* PS_DICT_UNDERLINE_THICKNESS :: */ - /* PS_DICT_FS_TYPE :: */ - /* PS_DICT_ITALIC_ANGLE :: */ - /* */ - typedef enum PS_Dict_Keys_ - { - /* conventionally in the font dictionary */ - PS_DICT_FONT_TYPE, /* FT_Byte */ - PS_DICT_FONT_MATRIX, /* FT_Fixed */ - PS_DICT_FONT_BBOX, /* FT_Fixed */ - PS_DICT_PAINT_TYPE, /* FT_Byte */ - PS_DICT_FONT_NAME, /* FT_String* */ - PS_DICT_UNIQUE_ID, /* FT_Int */ - PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */ - PS_DICT_CHAR_STRING_KEY, /* FT_String* */ - PS_DICT_CHAR_STRING, /* FT_String* */ - PS_DICT_ENCODING_TYPE, /* T1_EncodingType */ - PS_DICT_ENCODING_ENTRY, /* FT_String* */ - - /* conventionally in the font Private dictionary */ - PS_DICT_NUM_SUBRS, /* FT_Int */ - PS_DICT_SUBR, /* FT_String* */ - PS_DICT_STD_HW, /* FT_UShort */ - PS_DICT_STD_VW, /* FT_UShort */ - PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */ - PS_DICT_BLUE_VALUE, /* FT_Short */ - PS_DICT_BLUE_FUZZ, /* FT_Int */ - PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */ - PS_DICT_OTHER_BLUE, /* FT_Short */ - PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */ - PS_DICT_FAMILY_BLUE, /* FT_Short */ - PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */ - PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */ - PS_DICT_BLUE_SCALE, /* FT_Fixed */ - PS_DICT_BLUE_SHIFT, /* FT_Int */ - PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */ - PS_DICT_STEM_SNAP_H, /* FT_Short */ - PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */ - PS_DICT_STEM_SNAP_V, /* FT_Short */ - PS_DICT_FORCE_BOLD, /* FT_Bool */ - PS_DICT_RND_STEM_UP, /* FT_Bool */ - PS_DICT_MIN_FEATURE, /* FT_Short */ - PS_DICT_LEN_IV, /* FT_Int */ - PS_DICT_PASSWORD, /* FT_Long */ - PS_DICT_LANGUAGE_GROUP, /* FT_Long */ - - /* conventionally in the font FontInfo dictionary */ - PS_DICT_VERSION, /* FT_String* */ - PS_DICT_NOTICE, /* FT_String* */ - PS_DICT_FULL_NAME, /* FT_String* */ - PS_DICT_FAMILY_NAME, /* 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 */ - PS_DICT_FS_TYPE, /* FT_UShort */ - PS_DICT_ITALIC_ANGLE, /* FT_Long */ - - PS_DICT_MAX = PS_DICT_ITALIC_ANGLE - - } PS_Dict_Keys; - - - /************************************************************************ - * - * @function: - * FT_Get_PS_Font_Value - * - * @description: - * Retrieve the value for the supplied key from a PostScript font. - * - * @input: - * face :: - * PostScript face handle. - * - * key :: - * An enumeration value representing the dictionary key to retrieve. - * - * idx :: - * For array values, this specifies the index to be returned. - * - * value :: - * A pointer to memory into which to write the value. - * - * valen_len :: - * The size, in bytes, of the memory supplied for the value. - * - * @output: - * value :: - * The value matching the above key, if it exists. - * - * @return: - * The amount of memory (in bytes) required to hold the requested - * value (if it exists, -1 otherwise). - * - * @note: - * The values returned are not pointers into the internal structures of - * the face, but are `fresh' copies, so that the memory containing them - * belongs to the calling application. This also enforces the - * `read-only' nature of these values, i.e., this function cannot be - * used to manipulate the face. - * - * `value' is a void pointer because the values returned can be of - * various types. - * - * If either `value' is NULL or `value_len' is too small, just the - * required memory size for the requested entry is returned. - * - * The `idx' parameter is used, not only to retrieve elements of, for - * example, the FontMatrix or FontBBox, but also to retrieve name keys - * from the CharStrings dictionary, and the charstrings themselves. It - * is ignored for atomic values. - * - * PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To - * get the value as in the font stream, you need to divide by - * 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale). - * - * IMPORTANT: Only key/value pairs read by the FreeType interpreter can - * be retrieved. So, for example, PostScript procedures such as NP, - * ND, and RD are not available. Arbitrary keys are, obviously, not be - * available either. - * - * If the font's format is not PostScript-based, this function returns - * the `FT_Err_Invalid_Argument' error code. - * - */ - FT_EXPORT( FT_Long ) - FT_Get_PS_Font_Value( FT_Face face, - PS_Dict_Keys key, - FT_UInt idx, - void *value, - FT_Long value_len ); - - /* */ - -FT_END_HEADER - -#endif /* __T1TABLES_H__ */ - - -/* END */ diff --git a/win32/include/freetype/tttables.h b/win32/include/freetype/tttables.h deleted file mode 100644 index 1568f403..00000000 --- a/win32/include/freetype/tttables.h +++ /dev/null @@ -1,829 +0,0 @@ -/***************************************************************************/ -/* */ -/* tttables.h */ -/* */ -/* Basic SFNT/TrueType tables definitions and interface */ -/* (specification only). */ -/* */ -/* Copyright 1996-2015 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 __TTTABLES_H__ -#define __TTTABLES_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - /*************************************************************************/ - /* */ - /* <Section> */ - /* truetype_tables */ - /* */ - /* <Title> */ - /* TrueType Tables */ - /* */ - /* <Abstract> */ - /* TrueType specific table types and functions. */ - /* */ - /* <Description> */ - /* This section contains the definition of TrueType-specific tables */ - /* as well as some routines used to access and process them. */ - /* */ - /* <Order> */ - /* TT_Header */ - /* TT_HoriHeader */ - /* TT_VertHeader */ - /* TT_OS2 */ - /* TT_Postscript */ - /* TT_PCLT */ - /* TT_MaxProfile */ - /* */ - /* FT_Sfnt_Tag */ - /* FT_Get_Sfnt_Table */ - /* FT_Load_Sfnt_Table */ - /* FT_Sfnt_Table_Info */ - /* */ - /* FT_Get_CMap_Language_ID */ - /* FT_Get_CMap_Format */ - /* */ - /* FT_PARAM_TAG_UNPATENTED_HINTING */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_Header */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType font header table. All */ - /* fields follow the TrueType specification. */ - /* */ - typedef struct TT_Header_ - { - FT_Fixed Table_Version; - FT_Fixed Font_Revision; - - FT_Long CheckSum_Adjust; - FT_Long Magic_Number; - - FT_UShort Flags; - FT_UShort Units_Per_EM; - - FT_Long Created [2]; - FT_Long Modified[2]; - - FT_Short xMin; - FT_Short yMin; - FT_Short xMax; - FT_Short yMax; - - FT_UShort Mac_Style; - FT_UShort Lowest_Rec_PPEM; - - FT_Short Font_Direction; - FT_Short Index_To_Loc_Format; - FT_Short Glyph_Data_Format; - - } TT_Header; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_HoriHeader */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType horizontal header, the `hhea' */ - /* table, as well as the corresponding horizontal metrics table, */ - /* i.e., the `hmtx' table. */ - /* */ - /* <Fields> */ - /* Version :: The table version. */ - /* */ - /* Ascender :: The font's ascender, i.e., the distance */ - /* from the baseline to the top-most of all */ - /* glyph points found in the font. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of the */ - /* glyphs found in the font (maybe ASCII). */ - /* */ - /* You should use the `sTypoAscender' field */ - /* of the OS/2 table instead if you want */ - /* the correct one. */ - /* */ - /* Descender :: The font's descender, i.e., the distance */ - /* from the baseline to the bottom-most of */ - /* all glyph points found in the font. It */ - /* is negative. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of the */ - /* glyphs found in the font (maybe ASCII). */ - /* */ - /* You should use the `sTypoDescender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Line_Gap :: The font's line gap, i.e., the distance */ - /* to add to the ascender and descender to */ - /* get the BTB, i.e., the */ - /* baseline-to-baseline distance for the */ - /* font. */ - /* */ - /* advance_Width_Max :: This field is the maximum of all advance */ - /* widths found in the font. It can be */ - /* used to compute the maximum width of an */ - /* arbitrary string of text. */ - /* */ - /* min_Left_Side_Bearing :: The minimum left side bearing of all */ - /* glyphs within the font. */ - /* */ - /* min_Right_Side_Bearing :: The minimum right side bearing of all */ - /* glyphs within the font. */ - /* */ - /* xMax_Extent :: The maximum horizontal extent (i.e., the */ - /* `width' of a glyph's bounding box) for */ - /* all glyphs in the font. */ - /* */ - /* caret_Slope_Rise :: The rise coefficient of the cursor's */ - /* slope of the cursor (slope=rise/run). */ - /* */ - /* caret_Slope_Run :: The run coefficient of the cursor's */ - /* slope. */ - /* */ - /* Reserved :: 8~reserved bytes. */ - /* */ - /* metric_Data_Format :: Always~0. */ - /* */ - /* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */ - /* table -- this value can be smaller than */ - /* the total number of glyphs in the font. */ - /* */ - /* long_metrics :: A pointer into the `hmtx' table. */ - /* */ - /* short_metrics :: A pointer into the `hmtx' table. */ - /* */ - /* <Note> */ - /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */ - /* be identical except for the names of their fields, */ - /* which are different. */ - /* */ - /* This ensures that a single function in the `ttload' */ - /* module is able to read both the horizontal and vertical */ - /* headers. */ - /* */ - typedef struct TT_HoriHeader_ - { - FT_Fixed Version; - FT_Short Ascender; - FT_Short Descender; - FT_Short Line_Gap; - - FT_UShort advance_Width_Max; /* advance width maximum */ - - FT_Short min_Left_Side_Bearing; /* minimum left-sb */ - FT_Short min_Right_Side_Bearing; /* minimum right-sb */ - FT_Short xMax_Extent; /* xmax extents */ - FT_Short caret_Slope_Rise; - FT_Short caret_Slope_Run; - FT_Short caret_Offset; - - FT_Short Reserved[4]; - - FT_Short metric_Data_Format; - FT_UShort number_Of_HMetrics; - - /* The following fields are not defined by the TrueType specification */ - /* but they are used to connect the metrics header to the relevant */ - /* `HMTX' table. */ - - void* long_metrics; - void* short_metrics; - - } TT_HoriHeader; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_VertHeader */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType vertical header, the `vhea' */ - /* table, as well as the corresponding vertical metrics table, i.e., */ - /* the `vmtx' table. */ - /* */ - /* <Fields> */ - /* Version :: The table version. */ - /* */ - /* Ascender :: The font's ascender, i.e., the distance */ - /* from the baseline to the top-most of */ - /* all glyph points found in the font. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of */ - /* the glyphs found in the font (maybe */ - /* ASCII). */ - /* */ - /* You should use the `sTypoAscender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Descender :: The font's descender, i.e., the */ - /* distance from the baseline to the */ - /* bottom-most of all glyph points found */ - /* in the font. It is negative. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of */ - /* the glyphs found in the font (maybe */ - /* ASCII). */ - /* */ - /* You should use the `sTypoDescender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Line_Gap :: The font's line gap, i.e., the distance */ - /* to add to the ascender and descender to */ - /* get the BTB, i.e., the */ - /* baseline-to-baseline distance for the */ - /* font. */ - /* */ - /* advance_Height_Max :: This field is the maximum of all */ - /* advance heights found in the font. It */ - /* can be used to compute the maximum */ - /* height of an arbitrary string of text. */ - /* */ - /* min_Top_Side_Bearing :: The minimum top side bearing of all */ - /* glyphs within the font. */ - /* */ - /* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */ - /* glyphs within the font. */ - /* */ - /* yMax_Extent :: The maximum vertical extent (i.e., the */ - /* `height' of a glyph's bounding box) for */ - /* all glyphs in the font. */ - /* */ - /* caret_Slope_Rise :: The rise coefficient of the cursor's */ - /* slope of the cursor (slope=rise/run). */ - /* */ - /* caret_Slope_Run :: The run coefficient of the cursor's */ - /* slope. */ - /* */ - /* caret_Offset :: The cursor's offset for slanted fonts. */ - /* This value is `reserved' in vmtx */ - /* version 1.0. */ - /* */ - /* Reserved :: 8~reserved bytes. */ - /* */ - /* metric_Data_Format :: Always~0. */ - /* */ - /* number_Of_HMetrics :: Number of VMetrics entries in the */ - /* `vmtx' table -- this value can be */ - /* smaller than the total number of glyphs */ - /* in the font. */ - /* */ - /* long_metrics :: A pointer into the `vmtx' table. */ - /* */ - /* short_metrics :: A pointer into the `vmtx' table. */ - /* */ - /* <Note> */ - /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */ - /* be identical except for the names of their fields, */ - /* which are different. */ - /* */ - /* This ensures that a single function in the `ttload' */ - /* module is able to read both the horizontal and vertical */ - /* headers. */ - /* */ - typedef struct TT_VertHeader_ - { - FT_Fixed Version; - FT_Short Ascender; - FT_Short Descender; - FT_Short Line_Gap; - - FT_UShort advance_Height_Max; /* advance height maximum */ - - FT_Short min_Top_Side_Bearing; /* minimum left-sb or top-sb */ - FT_Short min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */ - FT_Short yMax_Extent; /* xmax or ymax extents */ - FT_Short caret_Slope_Rise; - FT_Short caret_Slope_Run; - FT_Short caret_Offset; - - FT_Short Reserved[4]; - - FT_Short metric_Data_Format; - FT_UShort number_Of_VMetrics; - - /* The following fields are not defined by the TrueType specification */ - /* but they're used to connect the metrics header to the relevant */ - /* `HMTX' or `VMTX' table. */ - - void* long_metrics; - void* short_metrics; - - } TT_VertHeader; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_OS2 */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType OS/2 table. All fields */ - /* comply to the OpenType specification. */ - /* */ - /* Note that we now support old Mac fonts that do not include an OS/2 */ - /* table. In this case, the `version' field is always set to 0xFFFF. */ - /* */ - typedef struct TT_OS2_ - { - FT_UShort version; /* 0x0001 - more or 0xFFFF */ - FT_Short xAvgCharWidth; - FT_UShort usWeightClass; - FT_UShort usWidthClass; - FT_UShort fsType; - FT_Short ySubscriptXSize; - FT_Short ySubscriptYSize; - FT_Short ySubscriptXOffset; - FT_Short ySubscriptYOffset; - FT_Short ySuperscriptXSize; - FT_Short ySuperscriptYSize; - FT_Short ySuperscriptXOffset; - FT_Short ySuperscriptYOffset; - FT_Short yStrikeoutSize; - FT_Short yStrikeoutPosition; - FT_Short sFamilyClass; - - FT_Byte panose[10]; - - FT_ULong ulUnicodeRange1; /* Bits 0-31 */ - FT_ULong ulUnicodeRange2; /* Bits 32-63 */ - FT_ULong ulUnicodeRange3; /* Bits 64-95 */ - FT_ULong ulUnicodeRange4; /* Bits 96-127 */ - - FT_Char achVendID[4]; - - FT_UShort fsSelection; - FT_UShort usFirstCharIndex; - FT_UShort usLastCharIndex; - FT_Short sTypoAscender; - FT_Short sTypoDescender; - FT_Short sTypoLineGap; - FT_UShort usWinAscent; - FT_UShort usWinDescent; - - /* only version 1 and higher: */ - - FT_ULong ulCodePageRange1; /* Bits 0-31 */ - FT_ULong ulCodePageRange2; /* Bits 32-63 */ - - /* only version 2 and higher: */ - - FT_Short sxHeight; - FT_Short sCapHeight; - FT_UShort usDefaultChar; - FT_UShort usBreakChar; - FT_UShort usMaxContext; - - /* only version 5 and higher: */ - - FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */ - FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */ - - } TT_OS2; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_Postscript */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType PostScript table. All fields */ - /* comply to the TrueType specification. This structure does not */ - /* reference the PostScript glyph names, which can be nevertheless */ - /* accessed with the `ttpost' module. */ - /* */ - typedef struct TT_Postscript_ - { - FT_Fixed FormatType; - FT_Fixed italicAngle; - FT_Short underlinePosition; - FT_Short underlineThickness; - FT_ULong isFixedPitch; - FT_ULong minMemType42; - FT_ULong maxMemType42; - FT_ULong minMemType1; - FT_ULong maxMemType1; - - /* Glyph names follow in the file, but we don't */ - /* load them by default. See the ttpost.c file. */ - - } TT_Postscript; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_PCLT */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType PCLT table. All fields */ - /* comply to the TrueType specification. */ - /* */ - typedef struct TT_PCLT_ - { - FT_Fixed Version; - FT_ULong FontNumber; - FT_UShort Pitch; - FT_UShort xHeight; - FT_UShort Style; - FT_UShort TypeFamily; - FT_UShort CapHeight; - FT_UShort SymbolSet; - FT_Char TypeFace[16]; - FT_Char CharacterComplement[8]; - FT_Char FileName[6]; - FT_Char StrokeWeight; - FT_Char WidthType; - FT_Byte SerifStyle; - FT_Byte Reserved; - - } TT_PCLT; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_MaxProfile */ - /* */ - /* <Description> */ - /* The maximum profile is a table containing many max values, which */ - /* can be used to pre-allocate arrays. This ensures that no memory */ - /* allocation occurs during a glyph load. */ - /* */ - /* <Fields> */ - /* version :: The version number. */ - /* */ - /* numGlyphs :: The number of glyphs in this TrueType */ - /* font. */ - /* */ - /* maxPoints :: The maximum number of points in a */ - /* non-composite TrueType glyph. See also */ - /* the structure element */ - /* `maxCompositePoints'. */ - /* */ - /* maxContours :: The maximum number of contours in a */ - /* non-composite TrueType glyph. See also */ - /* the structure element */ - /* `maxCompositeContours'. */ - /* */ - /* maxCompositePoints :: The maximum number of points in a */ - /* composite TrueType glyph. See also the */ - /* structure element `maxPoints'. */ - /* */ - /* maxCompositeContours :: The maximum number of contours in a */ - /* composite TrueType glyph. See also the */ - /* structure element `maxContours'. */ - /* */ - /* maxZones :: The maximum number of zones used for */ - /* glyph hinting. */ - /* */ - /* maxTwilightPoints :: The maximum number of points in the */ - /* twilight zone used for glyph hinting. */ - /* */ - /* maxStorage :: The maximum number of elements in the */ - /* storage area used for glyph hinting. */ - /* */ - /* maxFunctionDefs :: The maximum number of function */ - /* definitions in the TrueType bytecode for */ - /* this font. */ - /* */ - /* maxInstructionDefs :: The maximum number of instruction */ - /* definitions in the TrueType bytecode for */ - /* this font. */ - /* */ - /* maxStackElements :: The maximum number of stack elements used */ - /* during bytecode interpretation. */ - /* */ - /* maxSizeOfInstructions :: The maximum number of TrueType opcodes */ - /* used for glyph hinting. */ - /* */ - /* maxComponentElements :: The maximum number of simple (i.e., non- */ - /* composite) glyphs in a composite glyph. */ - /* */ - /* maxComponentDepth :: The maximum nesting depth of composite */ - /* glyphs. */ - /* */ - /* <Note> */ - /* This structure is only used during font loading. */ - /* */ - typedef struct TT_MaxProfile_ - { - FT_Fixed version; - FT_UShort numGlyphs; - FT_UShort maxPoints; - FT_UShort maxContours; - FT_UShort maxCompositePoints; - FT_UShort maxCompositeContours; - FT_UShort maxZones; - FT_UShort maxTwilightPoints; - FT_UShort maxStorage; - FT_UShort maxFunctionDefs; - FT_UShort maxInstructionDefs; - FT_UShort maxStackElements; - FT_UShort maxSizeOfInstructions; - FT_UShort maxComponentElements; - FT_UShort maxComponentDepth; - - } TT_MaxProfile; - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Sfnt_Tag */ - /* */ - /* <Description> */ - /* An enumeration used to specify the index of an SFNT table. */ - /* Used in the @FT_Get_Sfnt_Table API function. */ - /* */ - /* <Values> */ - /* FT_SFNT_HEAD :: To access the font's @TT_Header structure. */ - /* */ - /* FT_SFNT_MAXP :: To access the font's @TT_MaxProfile structure. */ - /* */ - /* FT_SFNT_OS2 :: To access the font's @TT_OS2 structure. */ - /* */ - /* FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure. */ - /* */ - /* FT_SFNT_VHEA :: To access the font's @TT_VertHeader struture. */ - /* */ - /* FT_SFNT_POST :: To access the font's @TT_Postscript structure. */ - /* */ - /* FT_SFNT_PCLT :: To access the font's @TT_PCLT structure. */ - /* */ - typedef enum FT_Sfnt_Tag_ - { - FT_SFNT_HEAD, - FT_SFNT_MAXP, - FT_SFNT_OS2, - FT_SFNT_HHEA, - FT_SFNT_VHEA, - FT_SFNT_POST, - FT_SFNT_PCLT, - - FT_SFNT_MAX - - } FT_Sfnt_Tag; - - /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */ - /* values instead */ -#define ft_sfnt_head FT_SFNT_HEAD -#define ft_sfnt_maxp FT_SFNT_MAXP -#define ft_sfnt_os2 FT_SFNT_OS2 -#define ft_sfnt_hhea FT_SFNT_HHEA -#define ft_sfnt_vhea FT_SFNT_VHEA -#define ft_sfnt_post FT_SFNT_POST -#define ft_sfnt_pclt FT_SFNT_PCLT - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Table */ - /* */ - /* <Description> */ - /* Return a pointer to a given SFNT table within a face. */ - /* */ - /* <Input> */ - /* face :: A handle to the source. */ - /* */ - /* tag :: The index of the SFNT table. */ - /* */ - /* <Return> */ - /* A type-less pointer to the table. This will be~0 in case of */ - /* error, or if the corresponding table was not found *OR* loaded */ - /* from the file. */ - /* */ - /* Use a typecast according to `tag' to access the structure */ - /* elements. */ - /* */ - /* <Note> */ - /* The table is owned by the face object and disappears with it. */ - /* */ - /* This function is only useful to access SFNT tables that are loaded */ - /* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */ - /* a list. */ - /* */ - /* Here an example how to access the `vhea' table: */ - /* */ - /* { */ - /* TT_VertHeader* vert_header; */ - /* */ - /* */ - /* vert_header = */ - /* (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); */ - /* } */ - /* */ - FT_EXPORT( void* ) - FT_Get_Sfnt_Table( FT_Face face, - FT_Sfnt_Tag tag ); - - - /************************************************************************** - * - * @function: - * FT_Load_Sfnt_Table - * - * @description: - * Load any font table into client memory. - * - * @input: - * face :: - * A handle to the source face. - * - * tag :: - * The four-byte tag of the table to load. Use the value~0 if you want - * to access the whole font file. Otherwise, you can use one of the - * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new - * one with @FT_MAKE_TAG. - * - * offset :: - * The starting offset in the table (or file if tag == 0). - * - * @output: - * buffer :: - * The target buffer address. The client must ensure that the memory - * array is big enough to hold the data. - * - * @inout: - * length :: - * If the `length' parameter is NULL, then try to load the whole table. - * Return an error code if it fails. - * - * Else, if `*length' is~0, exit immediately while returning the - * table's (or file) full size in it. - * - * Else the number of bytes to read from the table or file, from the - * starting offset. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * If you need to determine the table's length you should first call this - * function with `*length' set to~0, as in the following example: - * - * { - * FT_ULong length = 0; - * - * - * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); - * if ( error ) { ... table does not exist ... } - * - * buffer = malloc( length ); - * if ( buffer == NULL ) { ... not enough memory ... } - * - * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); - * if ( error ) { ... could not load table ... } - * } - * - * Note that structures like @TT_Header or @TT_OS2 can't be used with - * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that - * those structures depend on the processor architecture, with varying - * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). - * - */ - FT_EXPORT( FT_Error ) - FT_Load_Sfnt_Table( FT_Face face, - FT_ULong tag, - FT_Long offset, - FT_Byte* buffer, - FT_ULong* length ); - - - /************************************************************************** - * - * @function: - * FT_Sfnt_Table_Info - * - * @description: - * Return information on an SFNT table. - * - * @input: - * face :: - * A handle to the source face. - * - * table_index :: - * The index of an SFNT table. The function returns - * FT_Err_Table_Missing for an invalid value. - * - * @inout: - * tag :: - * The name tag of the SFNT table. If the value is NULL, `table_index' - * is ignored, and `length' returns the number of SFNT tables in the - * font. - * - * @output: - * length :: - * The length of the SFNT table (or the number of SFNT tables, depending - * on `tag'). - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * While parsing fonts, FreeType handles SFNT tables with length zero as - * missing. - * - */ - FT_EXPORT( FT_Error ) - FT_Sfnt_Table_Info( FT_Face face, - FT_UInt table_index, - FT_ULong *tag, - FT_ULong *length ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_CMap_Language_ID */ - /* */ - /* <Description> */ - /* Return TrueType/sfnt specific cmap language ID. Definitions of */ - /* language ID values are in `ttnameid.h'. */ - /* */ - /* <Input> */ - /* charmap :: */ - /* The target charmap. */ - /* */ - /* <Return> */ - /* The language ID of `charmap'. If `charmap' doesn't belong to a */ - /* TrueType/sfnt face, just return~0 as the default value. */ - /* */ - /* For a format~14 cmap (to access Unicode IVS), the return value is */ - /* 0xFFFFFFFF. */ - /* */ - FT_EXPORT( FT_ULong ) - FT_Get_CMap_Language_ID( FT_CharMap charmap ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_CMap_Format */ - /* */ - /* <Description> */ - /* Return TrueType/sfnt specific cmap format. */ - /* */ - /* <Input> */ - /* charmap :: */ - /* The target charmap. */ - /* */ - /* <Return> */ - /* The format of `charmap'. If `charmap' doesn't belong to a */ - /* TrueType/sfnt face, return -1. */ - /* */ - FT_EXPORT( FT_Long ) - FT_Get_CMap_Format( FT_CharMap charmap ); - - /* */ - - -FT_END_HEADER - -#endif /* __TTTABLES_H__ */ - - -/* END */ diff --git a/win32/include/freetype/ttunpat.h b/win32/include/freetype/ttunpat.h deleted file mode 100644 index 8ea55689..00000000 --- a/win32/include/freetype/ttunpat.h +++ /dev/null @@ -1,60 +0,0 @@ -/***************************************************************************/ -/* */ -/* ttunpat.h */ -/* */ -/* Definitions for the unpatented TrueType hinting system */ -/* */ -/* Copyright 2003-2015 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* Written by Graham Asher <graham.asher@btinternet.com> */ -/* */ -/* 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 __TTUNPAT_H__ -#define __TTUNPAT_H__ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_UNPATENTED_HINTING - * - * @description: - * A constant used as the tag of an @FT_Parameter structure to indicate - * that unpatented methods only should be used by the TrueType bytecode - * interpreter for a typeface opened by @FT_Open_Face. - * - */ -#define FT_PARAM_TAG_UNPATENTED_HINTING FT_MAKE_TAG( 'u', 'n', 'p', 'a' ) - - /* */ - - -FT_END_HEADER - - -#endif /* __TTUNPAT_H__ */ - - -/* END */ diff --git a/win32/libs/freetype.dll b/win32/libs/freetype.dll new file mode 100644 index 0000000000000000000000000000000000000000..c133f884b290fa450616147ccbc45fd72e3deb87 GIT binary patch literal 666112 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�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�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 quJjm7Ai<Vc!$Wr%5sRv6~Ya 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�r?jI*KonY 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 literal 0 HcmV?d00001 diff --git a/win32/libs/freetype.lib b/win32/libs/freetype.lib index 539b96a0113fc864c366b30b52ee4882213c0aff..19885451d32e9b7280c269a4a3cf94ad1d69fe5e 100644 GIT binary patch literal 47394 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 K{bK?O=zjqFSok~u literal 1022156 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¬bS#(+20QTU{I(kK%qL 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%0AlrT)xeF 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%0Ahvm3z%*2kNE6 zl7xFAd>gN!wg=(-BHP04!C-aI<!~x4Ym(xMouUjkO~;*raySDwwRz#of@2tw@t`!< zF4<bm#rSuW@%8_=Zx)5}klGUq?pWNs-5Y9KGBPF+Wn%(MAF3;cHVbVMU8El^+Ijv? zKORWsj`D?Sek?mULxZeXltKJga7;?Zlky=}p<ao8!X;Kog>)X%W#V}ulUCt*DRV7{ zl*DwMc#^MJr58_XpJSDm@TB~YRgU60j!DPyoXVtBFmN9^kUUJ63u!)+svyy#R;)rt z{&JZ_|KS|>u>w*7)2)J3#-vS<(wWo(sh&wYAaNhJLt4vpcS52nAFI$|{(L4q0ci`9 zIw853^b({?5O%C`7!v)LCb7y9NSyB|q|FR>9MTRZSy8z+Fv$jqcG{7W$m@elnhWW9 zCZ$5cm>sS;kRD=EKBOO*R0s)!7P!_!`WusckYbnx&q8{Q={h03!=!&f`kF}}LYmH` zqmU*u={TfiO!@-SawgG#35L^$2;(HAHYWW5=?*4QV|6E!=%>jsiv!LEX&#dtkV={4 zghVYttU^CnzKBT)khU@@5fY6n@pC$mE@#q2NHoSnse|+@CM83%u(-{DbTQM-h7`+m zsgOo6DHD>)Tyr3eWx8BQm^FYeAJSP&R|shsla@g`he<0S{fFUJK}uk{a!58NRYAId zNi~q-n6v>B&23_pO_0i&)B<T8lUgCIXA=E<IxicyLgG1nJ0u#5$0~P1n!xz(hV&NG z-3#dmlXgP-m`M*pI>w}jAbr53M<9K{q{kp#!C0Pv^exlvg7hhqo`rOZNu7`$X3}0r zPco?&(k>>w1Zg&7ISA?RO!qpZDNJ`5(!EUgFG#;-(h*3%W73C^{*OsVA<=(36N^s} z)S4t)F%7g`p_L=t-pr=>b=DH9>KL9|?d@4Hp~n77ZOEHtj>o_^;|y0EwztQ|9}ZbA zb!TTb$A>H{spWF_Hbyc8Zq6}ny1eae-{d}XXug6`vnkXRqZ7u)_qrG7H^i@V=wUAO z|I=H#GNp5Qw+nPnqGCFgYjx>XU80!^ax#>eWXtcztU%ao>$U;1hk2tBJex77`3`$~ zdaNF7dK|?g-AandU$W7B`f!-?W#c$|duGE39hlh=AKz8lozhv#rXE(+lMp!BPjivd z?v~9ig%Zx;o9vGB|3sUNSV-?1t>z_S{&4|3(EP&-jssrIL&DP#OhVLNrkVhQcQb>j zi42<_G5Ht?2YY)SGQ=~y>pd%3?-`*9@l4=T5sEU)REL`5K)(8wlzw}ATC9gh=^*5| zczUw9+dGhlX~W|WZ#hGwp~iIgSN8O;)cup6cXu~l5n3`l<V?4>FEE9cBFo;xwC9w) zeMI~zza!P-?r!)fc$1>`AhVWtt35%#!X)T0Q6n9tJQ6Ia$HPWzZJn5nu|yfYBws6F zJ)T6wOeyU?AJ1RtnHCXq8fPK015LX)3V{TRk-ZCIk)v@UP13EJz>`bZ5X^I>bn0QU z30{sZNb|h3<o+Y<9n;icjsug{0<z!1GC1V5xJy~h&@verq16IpMMi&oZ^$yo?a6Gm zZaGD59@POI8`z9GaA}|?_8A&+_Qi&NO>wrj$AxY-xjn4(>)3_<PrRj6_-V0-7yb-g zs?(*w@recMilpQsGIDMxV?+r8r>d(H+1m?ZLJN^5X{SRQO<nI>L)XN_9}KQYazS+l z@2nK`GePY_8l(n}oemZzB?ohp67B61VP4lq*7&3LcC+|vVt-Xn=H$$zxxtzwhx=gj zS%L3HG>i@{_;%L=>eQ!Cyw~*~v-=H0<a;uck`Qa9?NfWJiVW5w?==T{;?&$E7jiK% zfZ)wtA0SoJ%<+eVo06Q!OH#xiMy8|&IxWmVh!%VMY^a=Fp8%}HpM;ONKvz6o<4?kJ zL@qrp@O(UoQ@IZ8gtxa3=PXVt$MD$;txJ>b?J=ypKu7VP=swwKardHG3a6)gMN*O> zVxbHZj7n<jx3@lk_#rpu2D&YXE-UTkckS)h{eYrzTBKga8BOTd)3LkjXpH-)A=}zM z^%b&q(j8ikxWYTdj7pm(^qYGS?v$&jV>Vj2DJj8VArfIq8lsc1$p0vsc?V)Qv8~hI z`d>0P7v^?a%)Kyp3f@s1ulXUAb{f<ZL)B-HLZK!7ECWy`63`DQ?1d7F<qAqc7g>L} z$*v_5GBOE$M%&x=)}QhaCc>XNux}U&%M5$_MsuKRn3hp+N;e0d7w;kn-bNioAn`}H zVE80QaEc*<RIx(YlnqlhIo!3zngnwa5bGHW?QPd%V#pEz1#1zNTzlJ%r~CVPHxt-9 zv6}|Rys}YNa_KshS}twUrB`)nB#JV39j{9?JmtF2bg5sL63m)w;JAw_ZxZ#rNyR0h zHb)}*%?wt53$&Ke-o6O=pEXRhV_C79z?(QVBXjaTcQ3U!<eQR3_Zqs3RH1c0Agals z^wakC^-8GW43fziT7cd_VFi#120Cyq`>5ua)P<RNo%}-l(OnP!=}&(;@g4}0s7n8b z%Baqt@@h&yN`-@}^goayXo8Zdjs^Bxs6wMyAz}#>To5h@&)z;0H9XnU^|3Yn3)EOk zpv%f+USqS!TXGmdTm#ovU|g1PrOmPi_Ssmvz|aKphJcerJqI`1vGoX?#~02n#160V zM<FL@vinOa!aQ;)GcGE^ulmNiPc%oX12^WF?6)3534y(d>M1oNfASgk$>!L}J?^6o z_H_<Hf(8U6*(WeP=<oNHQVVf6dHRRF<Fl^+ICizr%L_=?z<Y78odnmE*31z$e`FG? ze`hEFx;`~)m`jZq&tm^0ed#B<SSXR6+xmTz?H&IZBphEP6dZ3L(hdw`64NP9-KfO& zt&`4#Ylo|wCW5?NU!zM;>C!LsI`L;+dRvzg^zxsoOV{X9t1clGP?V{EY#fQ)v8bu& z(lf2G7<#egV{I6x#-?7yQ0Lp*a~-j52mGVBqT%!4C>mb{W9f;(P;4plh}dZ>xG))| zVZfn8;JB5lq@#!pg%d+){+pwR!X7c~?F9$x@Xw(lPGeu{^br%Pg!(Y{DY7!u7@P7b zFNm>${bJaAnE5}9k#Wo>=eON)K9n==4T(S{r>oEGe#f5OH=lg^_lB}eA<KS*<v>`5 z;dvH{eWDmwhX=PF6B`~zgoZv<kM|xlubyFn{j6)(qI8g%bdZ{Qt@&o=T`00-M931) zlAWrGuvN77ulmYEo-^j>-LS7=c*wF0f)iE_*HeN`0p^7gO5I;K&JI18#Iqrs9wI$` zF3cn@rlo#&wsA(_{<`6neyYuF<Is?6t+q9y)n2HV#;v;as4h*_OJk8Pg-h)c6gO)D z22xbwZnq^O*B+xM4ViX~q}PW=(erLQo@gX#+=Skc51`Ea@3u!2d}^l+Z8lp%>uuD` zg_hgU-%(nhL`#SkHtQtb(HgQI{Un+|(W$4QT?}-=Pu34wy9i@4Fn$=$-l^^4%^FA) zOj_c*&_8HGJX4_XB)DH`80&ty>1@ajw92jp_O|tUl3mk1nFj0TuI1NsvkBHUqH<aJ zo+7Vl)}B-gtsnKU)l|~uCRqZ<ZKy}il+Ge`5^BgsN0z<4gA&Q!{!>aKGV)8vlu(*X z$;IVu@ksW9&~Hf-`Xx(D=4(q2Q3SdyfgTHrx)b9*8VM$%-y3dkpGRqf`NjfE;CYr# zr>K3hw=bkk8IEHJ*oWR?3}}c0`2pYYhbRTW<*;Z9c(ew(ZIoY!XcSD|P~#JYKYROm zl-L;CyhUCi5Dm#LO?H27PygKgpJuCygf#E-yYhS&fq@3F4#o!ak4>eaMs8Bla&Kwy z(v`HsCEj|F1~}S48aTx;fi-F+>TV|*57o1(t=~VXictOa7B&n}Pf};p?~e^-$72Q= z<iNP#wjV&okxi=@vKTX9S8$sPMC?7V*U{GLFQ7Kf)%JFgT3cn$IqbggR*-KRv2wY0 z7fq|sKyJI8f}3%7k?>`Ouk+OGWktpP2Py1M|44Nk`3lCONiDU&YiYL=?=&}$RcNSt z55jaRS3^1rBb->a2>5HJD~9e6lZfGWOro}(tg;pK*E_<2+FJvF6cvZ+W6%_dh87hK z4K1FLZ5sv|@x3KFh&5;ZG))nplW;Oo{p!XfwySX>I>V%pCENUkj_75GUf)P>DO#MB ztjSr9OkrydH1(q5-@&X698bL;FG|W@G{1An?!xJ>vN=~_O6UH}q%jK0q?6`|h3a1@ z7g2;0s8Mcvd-E)eMan}POls~vWy>l2%we@Z4qnbO_1U(ZYQ(F({Z)JBo2l;ZP5%M` zja3uD=2Ew{AjH6iWW|4tz2iPMa@ck+RBCV62bPdC-u*&jf@ns!%&FX1v(_IQ*l1Jy zlLK82_X`buA)6TyKPOb4q->d;=<#I0eFNO%1Dy_cS3}?QxBFrqH>s=;ty4;>HdL=} zEZ(sq>0(&-6NT~}WygMJPiw!A3?8TSSz6!rU!-PbVhW#7!b=8qM}+Ez$Fp1C_E~^V zP_ta*tR6<uK^=3TFKMIypx_o@Dg(P|8C3C~>n(l83Sp(%y&QF8Zpurd7^HTqSxMv{ z+%7dMQHY6ZR<aN$s##M=4D3w=hDMl<Rs=B~wL#5FKwL!NHXgWtalV?h!k}#V{x*Bt zEtHrnmDv}11Xfd%X=dbxu`1Hus@PjEhn&(`8Qk_A;1pEfO8EBYZ`n=DsulhQpWn`s z2Qw%KG)mu9g7l~4Ax!!)R@*eve?m5r(tN3{n;?h*wzPTjX)(9}5s<aR_iv*)wW)77 zi%%Q#J&~u3l}trO*>+J^3iD~{UCmkr)dY=QWR7n%^G^SrhZYAlD>WK4mVquL(6%HL zak|v3xdcN{$f(&uObpdJ?H$|b)KF-%E9h|q_BxmmJz30CPaOTJoWm^g744z{Qf1q= zNASm&-Lfg^ER>C+bq>CQL1joJg1zlQtZD~tLT}UdD=-wTGYx=g0jBS!qIKg2a4Uz~ zoGitkIve$Gut4UCK*)Wd04{)g$-1)!pdUu`asE`q!G$=KtQ$Q5=m;9ez&z$0Gk|j! zoYigrLi(zkt$~v<zF~orW`FFKSCmv%f5x?ZZ}OW1ub2X_xB_S`6#tklyXi;s>F2I| zgoD?>?jxk}0cUC1&6ZtAP7Lh+f-;We)GBH*xB;wz_f4v5C~K;W)VN4vzz{!}Qw{_- zTgi}_yl{!EoQPbfT>K;1;EQ{TZ0H;Dkm+d>>{%~7l;}G@a3H471>8$e(J>F@Aro9$ zpNCBcOvS-GzI>bVX<)BqPHocW96pv(Jril7p{R2ovUhl`x6e7p50dN=>Jp3lpuLs; z>*Bz7m|l5E=t8^N3UI?)DV<rtY>T@#Y13}?FSOl*CV2|YR%t6p^;FqASX)GmwVIOv zt7@UA!d!{oVpL?@{G;j6E>#Z~{Usk*aCYRcLn&0&IhL@d3*7>S?I`hR_U&ya07PGz ziKQWg_yBw%*)XuD_E@b=G#|rBnB*n-=m;lb%voco@AfuIJUC^dWps6&jI9i2DfSM` zo$Y%L*dOh(cl4{T96Dz1g7d^*p}jxRPhAI4F$~ppBsQ3ZW!lW7=}feRMGIJy(8o+k zCDX_t_dfg9>u9)wrYewUjS1E!^x4!j>#;qU{gG1jSRX<e4D_0U9_zOrtI6JaF3hv< z*|wL`!ZQQXekRR^)XSu~kX~R?D$<o&{K}vw6XL(P=&^U)_HT&xj)RrKyc{?jA&1Fb zmFDMxTu|Bes=u}p)4J-&Z1627GK5`;5y@0EAx}W|Ukv3gQU*PqO7%7>Zj~qAvUhY6 z9mt8V??Q3~kbFSQ0kECK$-R~4JP%+CD%EZ8bK`QgN;4cDrUTVyvG0LRK~El{^>6Z~ z-u5s2`PJm-51k~6U|v4FGnb%eDRL!OrIEz)h)xZSgK|D<cdW7&K0iQdbSh1Fr>#k+ za*r;x>(bl0^t~>P0}c0ar7m5gOZ0z6{gv_2Mj@Bze}v)^ZHUot7de$yNYB8YSmm#} zGy(nGUCebZx@B%3jc73Nw71fKc2b~v%Zt=UX?TOx$#d1LeDo!;CDaXD)U5LGOUoYG zGF6I09VdbHT@tuj@!5*|o2x_zZ|$M~YYVl>gMjFdjsAqTe+YEG2J7#jA!*Nc+MA`T zpl3U6&eGMhoi$@j`bOv&b$<tqk9xL~PrBfTMx1mpcdYquCj?!U!R<7p3T^)eQPV?J zo2x?GA0j)7d$ym13th}_Xgk|s*4oG9p6!o_pj-B^7Pe>m6GBnyo7vxyODQI-%7@&u zoiuc5>t~Lh?c_k${_TvSzatS8+?{NtH@eV3!(3WmM8XeOvu5x_?{9XB5Sm>**)$s0 zLTpa#$)=IH_TF(f{PtugGF4A@0{vySVFcB)ogC@v*-m*&7l!xU`S?r!)0|VG^Tb@D z4N1N`^P(<&s=Lx=E5|u?DGd_$QKC!Dy7Yi9J+4dLy7Z1Nq0Ndsf@ejLL)rzS`6`-e z)JG>a!>Sx9Z>y$MbOJ7{nwu1RARQrK9(yqK9Ie}Q{Rb<4{_*zqUiE~%y>JmWO>!5- zRbr}G8Gp#$MlDxgB6LNVV$dcSX1cjWaq(XUK0awa;XYw+rStD?-`ZQLxwE&A3T+m< zWrytTi~B**j>(6e`#lDgDgGFr$}Z-(J%lq8ZZWpG-m}syz}`Wx!!TFH1jDxsF>zpb zGFJUE<<&lm`j5#p!F66tbM(OHr_K9Awk6ninPxtvtwAg{g>DvBe2Kv0zx0hllkPJA zd&>tjF7&6Qr@G&0c#|d_jAa=0?>u$3en{;<=CG_O<MY<#+DsOWThN4&JH4+Ao+BhS zqZ3=np(3ZdAhT(dwx)_g3>7VBhZ?Z>oHfkee!~xJ(Uz@+WW_QW4*K5RX_~&JYa1T1 zY>h-)?;aI6<-{^m+VMk2-93g?Z(5z*GzA^_L>0lv+sq5uqLNk#t&0cPX2uXxEOb7i zOH>3)Fo$%i8yunRSiW<qqV1zH6XWg1hA50RiAbdLeI(l4pfqt7+uIvx*;{iSM(f|{ zv9vBiLL3vYPkc$pVlU8lMbV^=L%7a@d^HC>vW?BfOHnu5zV(d`S!RWiq%2)dCu2v$ z;%-)L*F)-J5}jUoo=Fr7Z3z`iDp+YsAF0_iN)zmwFdBQ}?F$^*>ljTK%LHwg+*zp| z3&?C3r|ptcKoLu>2plzHz$I5LVI78q#o1gddjDa8-hN8k(O5>K%}cgf8KVhiB<uAo zS%nKr)-)|y(?qhq>PtYzIYO4RBU9E|N@E6vCFVKYeO9FVFl@gfQJDeZM6J~m^)^GI zioN!H+H1cFQC(omrnI%UU(1t^Egq#0ki@hkn?8mXoJbhU1otU>`YH9q<S(&OIysa+ zHe{){w_}SdHQb(H^~xXX$;Of>+kJnY1{>YsJ$EFkEpXgHWzSWlUbl>|?6o|@I%dDK zzp+ZM0GRK#{T^{q19apG=08KdHs)PDR<=5XVWKlM<F`R9ETQ+g2@S$T6jZ-@D73(I zOH6uer~lMsYMmUul{nskrHZUkq2_-0N(l6v32$;|$AoTXoA;q63p;4xIYZ0SXkO_U zHLcskA9Z8t5^HG~@`fybhDnNfU&ux~m#&5W=MW_)#S*j0ZW!_ft!oDM57Qbtk2sxz zRK#JFZ@V4#)<1#)-Ng4OcvwN*%<Cp=Y&@q$QTCkCgcxdUJZ9F&P)X&j4ULssEJzm| zXIVM9%YCr1gpJtM7EHGka~GXBNfte+4P(+P0w34|-<z8+>reU(MF8oaqy`wl$wpVc z8eraf)+t&^BTwhj%3)yth(-3c88i-$h$zxxN{@-kspgd$-ZY#$Vd((ql;8#nbUifZ z!hAzg(@0FHv7a1$B|-5%YZ++j^D`#3Li!j|tU}%M9ZcuK^Ao0{jT|n~=!8aRI1`5F zF(&aUuN}pRI%(76aUpvBhmK)dl$R)uVw85%o(r`}&XOKXugF4mGtTQf=<t5$2u!sc zAusLi+T3q7U4|GZgwQW8?Qcp9dXfs3tg~oINfR$ji81xQ1}IywG$DmnJQL9s%narC zhw9ISHk@XA>Wj^xo8u|BLrrvMCbTr3iemanRu+P}zfm%<%kOOXM^7fpL`B`V(p!p@ zwPH-q($d<U4m0^^8P!be7QuWr2vbX3>f!{o&VgEC3pJRqvp5YFCBbgz(*EYeV0Kcm z!R~Cb+lgfj+Mz%a+Jemq7;PuEy=rfz^Kv2o@X#V_C@U_oFZT98C$`efNDmhVGD%q5 zPQp6*M6{3CR_8}GX#JaFM}0SQXM4M_z=gGJv3-E3(hew{esBWgjMz=}#0B<KvY^H% z@Z%B4oFskQVJ7W7P`^c9ArKA837U-7;aoM_ftoP|6+~1HT0$OA<s4nt1)A&r2v^^* z;AEVeAP9m>SODXlWHLr3Nz}U7+sr6CJye_(H9HaO&saKlunb{>ThEY0q!{n_u7(uu z_juW4-*C_YwIK~4mrx7pptEH>k6rl%RT;VI8R~XgdJlEHj#6LJgP9YJo)6=NOSFE& zr6WQT%c*`_&vtSoZJ!^!XcHI}qs?ODdRnzR&)~GCu4c97<R8Tu5WE85Gy{;9Z~;`m zK+<3!+O``g4ySbE=2G(-IAyhOy%&xuvxb&D-vI#YO?Eax$C{J9jfVKz;Efoq#8?AQ zyz3~icYMJz7ZdFQYVO%ffqGQrxFc}J)Hs69vnj`BQcxI(R|Za+d?WA#{rS*sInBr6 zqsg5&`&QuHT}`o}>XTic#)w|(s5PHUWQUFH_z<wrPbvA)Rgj-0`2|6i11xwQ_bi-( zk5Vq6z@YA4(_OqIii*|}RYrxf<_bPa*(gRFY<NLq3s$z%!UGR&1cCv_miKAn9rZ72 z*s%rc#W7e0V=2%#OPs8m6tXmR9kB#Dt?qqI_Ryk};)I3zRo7?3f*oWiKQ?zw_ioCw zz#fVtrm6JDH$o%>G9z5v)crh*0b@t+uIaWQIsX8>Q#l*b!%U)D!6o|nU7EW(**R32 z>^haL&^^ecTOsi+8d@p&Bh$U9OFzdupW;!AZ4GTBv-10!!c+TgdM#k9m}FGXHi{Nq zrQNhb&I!;y*w!gD@S<BQG~IRp?q#8(Kv-!mVReVde?uG_j;!of+o%Q=Q=z>9hOt7M zzyy>kI%=-AkyZ9~-wtcYwgWlCH%}pqU=0_9c#P7j*bC~9Ghc0^>dd!5inOXaD&(=a z;o3BO7v%)XPdDGoHt)~ZHnpky{&<~5d!<(H%>w>bqSX)nYVY_BO$$?A#gYnE32l|Z zS(U-&82cVJue3k99}9ISzD{{Hm~DfOEsaI!9QHjSrrXnY1T2%g@J{nlb62EKEW5Y8 z53QzK9?Zr$M>1T!i;^T{n@|00*LxN-W|iqPDuZ-Z@(QeL#n^YJyJ)G<W3%sGa8B2I zv6H)kd5)mR35W4eU1077^jvc<oT&SDfwXiNIF*&%cj3tk&wY@1;i2IhFM_nr#0%bD zU80piUhsIMtPL1`bV9P<<5Gfo6Y0op;P@0Oe=|z>QaKfc<Df*+=At+>UCbJoe?o(z zl~1!a8mHybt*zg<`Yt0ia^Hr(sl{4PgvQrjmQU~;Rx-453H5>#SdYc06xcs#xp_>S z|4P+Uh++Rk;2hlhIum49ehJ@2rL7AmhQuxg(05kVZrVHz?48nmOJ>pp1eCBNdkpoT z!E9?K{w7rh(Rnr%@^;Kqh`O$}+>5xZ4CGj7%FR7{S>iLExp4e9vcjnpLVANq*Fk!V zNk515DwFPq^cs`sI5`yvr}7b``<N6so=KfuF5A{zRuZ~VKf~zW%#NFANrxUkTkOmp zg@{d8T2>EPCezW=bJ-zR9Dvc$YHjA^K0*XeI}E4xaIhgZbYuAZF_;d+cg!Zox7{W> zoupG7>Z5J6kmVg}J={kPEaby}YYQCo$poeV*(RD!Wn;c1KGMu)C)TsY@nN!i80^Nj zqq;A?`ymsZz2U*3)ybqJ$B^StpZlN9=Y}ljxu0(sd+1YhpZh=lcs6N#?TGuZ!9p4( zAn%ri=B|V#N~p>as#&R+PlxhHk%1V%B!z6=kmVYh%%HPO-ZTk|N7v$fW#+Y*xV(oI zre40#?d~-a1E2CLMwT;(7d*3Zqg2^jM<ds$xGV}SJ2RP%f+ne5_=`P=ke8-ksaQ%e z1@^Hdz!^16+XCG&$cMRsE^HFe(YLt(C!!jq!l;Qfj3Z?dAi4JT1dJ6;JoP%+;oC%j z^X=`ae44d~29Al^2oh&fV!)AuP~k0AJ0Ha%mRJO_BEA=ZOn0B*m}n{`G{$*2Ofe0k z#>-gQ86A-m_<Gmcch(%7-fWI{zt$WVzyvX-Zy5bCfjyHd{_98=_GK{NWHFy)Ea$p6 zB_%h^#Sx8tsUcf7z*Ee~A9ruxC6FCC?q0ub3(kIG3C!Yt$2XqAM{>9&JNghcqpWrJ zHLhDc`5kmgIcyq{&DYjM3B#uZ5l5G#<J<?~Ef>WkzwZ(%5jWAoj$}q;p@+LueGSRu zq7};-@J{(P8x)C1XD50lhkdJymgvxSppD1;BvYJTAn76`3qP#4M3>g-(w(~Wm@b*o z1#%xWT;tMDb*To$jq5_XG!FeD*A?qhP?rM7oz$Qtum)vfsK8O;E@tb2dcB5@&hdn9 zz|qu<VWD+=GLG0nouRD<X2f9;MJyD4U=5}JumI7Yg368q;;0HJ<?@ka?5R=N#<|$D z0;e1eqXS)Eh;bI3VtviffZ!DCry#=d7<(&y{L>dF4pkssr{F{qRc%ausGL&3m@G}P zU{Z<-LkG|&vh@UZ06oJJ=;jBx5H@0vMqW8yTTFnb^Y}z+B3lqrSk)2-l<24t6!2)p z9wyvTW1I{y5rIz;{xF3DjLlRLJS{G1wNO9N4u1*m?+rCA5furGCU*CC&5>n{mFw}U zCtrPW@+)+TcyiYqlqUKPN6#c0uVksOQ4+baN^ED#!hA4|{w?D0-A=tEwdtjX<`}$$ zbm|ftIktW49~SalRN9RlHaaQ5zOQhfY_NKFQ6pd4U7+6QLP2YL+aDLoh@<01YK8-w zt(e`wiojkAc0|=}ufywAG>7nCu%(|qs<Q{W;T=%EMFLPtCp)YJRE*-UZrNQ9R>d#2 z=D~wDq>WB$z>q39xlh^yEkv=6O8irdv%|8X5=Uvq=7X1QcZF%yUUgeNfNJZGli&CE zhaIj`S`gkGExeIhdLlgkMS56`IOap)*mqlIn@>iX4WntKvje8Q2Y^#KsY|Rv*#xs% zTW)WCgBdImBL)izKZBy6zn!T0zysS!EFkFlb`pzh%G;IhZR-GPoL$mq73KbR9wU3l z_x&?=iJ=UOV+IOQk7XB8RJ!jYZw;?|``an{`sk*IAqm2cw-9K@HcIm47%=iQnH*^s zQR;><FO&(~3w-QneicZ`pyV4#v;@l~8hCQ4SC_=0`b3;uqvPn;IYL?5Vm+V3`iHZL zU|_Ec>&j<goy3Hd06HFsSsqm;k2cH0Vjy2urXP5KUTcs%e1ihZ{t4)`{)S+t;QW|A zGqbU#*wr1fOu_>8IC7TUO4O6^VsCeasw`+!(2-`H7E8ccXEcF-c2R=H#Kp#f_V%+; zTxs7({Q~0`vW}w2_KTR!hnT&ns5rdqKMRdda*3Ef@3rv`!iAj!KP`4A!F7h@h)-F_ zmwA8KU@S3=&?-A6ShGcag9cA9BTiio!zZy>6gxzp9g8(%_KNWe&Bzo?8BFm<@kX;x zdW)e?J?L{HSc#9T(2mj(gem5i-N%};(b7ywc{OC4o*uLXQr&MheS>x{0oo+?^$J#p zUCpcQ?Xy@Cz&{0r4T{Avnt)G<EPW5VKWnrErvy^rIgvaj!lTo^J;W@)uxkPPfC(FL z3u4HWW2|v~ei&JFtdZ7V0mtw!(S4|S1@X8K*#lJQ(e5}x{{GNSX9D|9Pkw<~XEqEd zGKbbvdSFp;7;+%ggxxw6DfVsEp`bI6iZjbj|C`>@9!mf;3QYj0^nuTXp-n<_sfhTm z$#tOUyZ_#J<>X`N7hSZaH46*r2o8N_UB4FdGfcqbvS0WAM$<P4*yVp&3ivDp!?%cT zgtQ;^&B;D+-p3^R*mW<H=%aD2qa_25%YoF%T+#dBfKqJp=KiEMc%k(h%a*R4Bz3XF z!dtoyhhJKrVmsWv{4HG*K_MV1om;wSMd@jFMs3b$duFfhnOZabg;q4^B{RvAa$r~z z447lJXAwB%03HZu(2EWi(04eo3Y`V`oJqGs`i4m~5c-NqcSE9c1+nbY*)N&26S}XN z^dO}FGKno!V->Ro5q6;gD5pV=vjkOcEOp4<<)!wH79tCp=+yKkOblq4(!q`!xDPfA z_b%T>dq?Qd*kJ_otE%N-(9B=d%!5{ZxxgI2gjXA*(az~2jnyqQ8MJo<DGZv*_o8b$ zo95AK{~U)n<2jO_@%)^H)J>Bae9JNnyNJON{q@vrXbUdZ?p)CDIXjxp`|-k0xjNaJ zd=mA`Q%Y1XU)`g&ip^&Eng(7mLZ>Zutb^FwsLC_fDq_*rMCiLp=8UyIDkP3Arxq6$ zF7}NlXo)uOrsIkX^`=14RM;83jq(QvrEE*q;l#!^iZYfPaqLR_$R@~+#G*QBM$ld- zWNaPS^i>)`?%#}lm!;Yfi{!RiZKrgl9uWaIdQi2+I!-W_HNPc64?m3!!OArB140fQ zSyOSwthadt#!en<vpKNeL8q;p8ScZIp5qj-$AP9Bkx#@vf_^5*)onqD{7lezNDrcX zIhD&GJ<6m7kftF`@j*N!I(~u^Ly-Q)q{krL#U%O(0iJ`OL*lD0W8m)*=1NDkxO9;& zP0=O#5`wS9tb@c){ZLurgS1zDSK^!&C7H_7Su1X%^@27kvY??zBY({~RyEbuHv$Lj z=v7UnMST~_-^jp~ia$0OL*p7XhSpeIOTtTsj?(UW1oV4m^pawf4hun?bo1oqYrp=p z$Rlnl#=KZk8Qfob4O?8Kr46St3C~|LCKeIC&d85CSCyAlRI$UuwASMaZQBWKJ}a_% zP#`Sro(TOI+_CIGKIO^J*s$tE%Y~ucbU=um38<<sTfau<ydbpg8@S~6&mv2i?I1)? z8q1HqVk|oYynJny9kB`==*ON&Tjxgh<5u{xyuhB`oANfg80<T=9k91jc8Z<Oj_p>w zxDVR{-+)AYl#P;c!ti5y%W|+0GE&N-ZVwNR$87nY500tfD>&AICm#=Iw(Oz7nc^R* zRaY9Hu19Od#=?giSF77;5UGuWmth>-kfC<am`{CT8x48;=J8?O>;b7JgsINvR2b^I z%-uMV&4<z|?H##pv0gdKe{Smm-<Vr+OjqWa{3us3f&DS92mBwVboLE9uM?*ak%CT? zDAcUC>|4LV%oigqwntA#$i3aSARc_EOv7O=f!l&DZ8XAk!o7Y&+4|69)R*L|EtG}Y zQm?<5<-e8&$SeQqlmlC?rkO=BFE*GrBA7QSm^UVvcUCa(T%7hBzbReza(QK7vop1E z_*1C}A0X#b-_z0SIeCsI3tqANv3Y!X)9|Otx$}6G11hI;aK|dic=9r~5>f`!t<iPZ zWJFY)XbIU@6PQykQE~eJp=F3fK~=^2vfAKEM`WbXoF-A5Or0$s=M}LihIeYH?GhlG z`6FR%SQNK}mc)iEH;0^CDLiu*P5S^#a35^KcM>ai-2s!>9y99a#GWi_z!WscC1{bI ze2Npyvhn74B8C44xP!0jNQ^$Fq}G_Zsc=*MHtf$X;fbjaNIAkk%ifV^#UW7NR5i<r z<r{~|V^fQ5_%_kiFe+pjftEU<8Q-uu`$p2|{M6Ia*-o74d33Vhwrg!=W#x&_3c9{C ztIu~Gy}<l@FiU(-LyKX1EtP5(@?}dQ#U3W{A+n=;9$0u&oCT>6cPxHZPs<&O5N~$( zL*k9?`;dxo$Ff6pJQo*$l{c)S&0uAaw;Ux^(=RVrthX08Y}rqPAh|%5;l!{fzcO&O zDVVn`n71OBx9TYxDFr=+C{N`LX|k88K*uyplpV&wVOWDb%0U#t>zVP!BKRoNg^M8d zJah;fKca#sk0i~T>CjuOLQ^rWlN(%LV_m%-Sv0uRE)CY;KFipq{RmrOZbp728w~~r zW1}sA$mW}dYF66G%~+*AUQYS`%nEu|VQ<rS6$)Y^dhh<3`jnY%>|%<FLUl6K<Xr6k zpr3gQPj>^vLKmG3=m`)TT`Mbt0jit9z$!eKcV7w}pQ%!(&Ltd9WJAZIluy;b-G~L% zm#gvD-tlWHlPL#E0<ZMPzlnvZ+s=g=Wi;Wr;iz%NY72#mO5&^xY>18ZPs1Op(lp85 zksLT<_K(7AjL9EYIj72E&pd^FSihZAir<Pq7R8=<C@s+GbicT%^Eom$fbGjx>K_n7 zBKm5lno}OK?6G(Fwpv38TWOp|YjXMajtncU6({5`IrN#<t*J+GcEO?8+nO|j)BTM$ zwWSKL`7lxIp{dqWhg(i8tnU{Ln!`dCa(W_if`7}}GF$OG&>gg#N^G#UoN8$_@33d1 zTgdZ&v~+(QKfel#lTedOgAY*xs{6b&wZgY{=y!{FbJX96d1lI|#g)MfYcPX<UI1Uo z)cjrNi1x_7B6tL8f`XD5viwZ_Ii<9{V-r$h##VJ<IVDCur2+lkKn=DI`O$wGf$)Uz zU*F$kQ-4j-*P1gehLcK)G!+esDK*aCVY!@Az0|A4fJdOei9W?nNa-wzXx3PQ6+z>m zTocLXNcj}g1groX3HAVSCz8a;aC~$~=ZJWNl?sVBPOBmD;z;=?7E>T`zaK#2e!qqE ze~fQBo*b8|OA)`3vQAM;6N>qvhN}9;vbFr+0u@#&--lq=I*Ya#Mk&M8)QE5;GHQDQ zh*|XLWxV!+G_DNnA-9-@F|<^~oOW5^6{G6zB74W9ghdXy&?C`z85W-0L3WUucS<fK z`eJdqEI-l=a+s<9HW3Ud{a7kJUpL3{46~&&nE6Z$+JbEN>4p!uBc(e^9~}<ro(?m3 z;$}nQ8=lm6aH$LuPw;yn@&1DvQ|^PN+#GjAm*_XZBKi;G2)3eXbz~E`6WGC;z~~X| zV84{~93t*S(}HpJ|7SmL^#90v^Z2N$^AGq=W(a|d+yMuT8f%16qd^TMU~odoLKc>U zum!9@WJx3l1d|ySWgh|=u2XI8W>>r0_Sb5y1?{4Q2tlk0QWdoBwm%?Maf7H}-tYH0 z_uiSw1@-rN|9U^~h1@y!InVQ)=bZDL=j`YFO~PP@Q-y}~OI#$%`uj_*%0X)gxtwN4 z*|ITgw^hVEfnFY5rR&9T-7r|HG*>t)QW$Vy(H*+)6adSZIm$E+tFBzeE|`T5>1@-{ z4+34_W);FzWOK!@4Z)j7c%;gSYzk&~nA8D8pSP+uVG^4MS6v;NH-AaJw!En&)Uu$t zae3(Kh9*Fl&0AWp-MnP=@<mrKY+Ml1<}Yl}LZPb{ES<N!MZ@+ougWO1VQV%jLgz0+ z&t`?K7^61sVe7AJFv0O2&m|l896}s=H3X1ynEVe!%h3$#sDytmNK<iMs#UFbBB}5p zC!1+>og)ZLBAQ;m_W!}@o{N|~|9_kA;i|gK-p5U$vPqugc?aDqYuxwCPx5R>g8o^w zL6nrmYg+Bh(7BJS3N2j`d)SY16Z_snK<FAs(4yGGJ^^ujLapjV#f?32X6MXY#};O< zk3D{WG+j(_1hYSV>(J%DvEv5lpK7d6v4WIC9F{MdiOyo1gm@Q=fw4it9b~jgkaw{R z7#kQcs`_knbWm;RJ4%LNXIW@Ak|WDF5<K0~5c56~E9NqwjFsh666=dhl$d;2q0D$K z(hzmS!eC1#_Xb*Uh&~LphIlkYUD$qsCQIHE4be1KVQzLhZs>@4e-mjxg=U4%3hb~W zu+9Xg(j+wlyB{I=a!%v?f|z%8tT=_TuFzE|;EsS0fP>rC1a78?g6slvJ(5P%`Wzqr zgXAYykto-*wlDKS!8p9HC`Q4hU_6>kW~vGq6iroO-rF^`i<ULl-=dlac`waG6KWVH zII_)-xZe6MvkDEONVlg&I-DFTMVl_WV`JxAkYuKv+-ySSvq|wcl3-}fxDIx>FjhDq zvd0tMb_B?nUdYA7jkO*DPMp{Ba27ZQ_v#f~k&rEWGX0~u0AkA=F#0S0xM@3ZSFAiW z*r{(V1b~x5#ybtNmSjIZ+}wuHYcoUSlL5LMaN$0N10pKkjl6!6k&Arn(px#E87m(^ zcK?7Aw5i5(iXA7Gu-<k+`re%9W1jKuox%NU2XL<Xs*}fXHqg;a-23`r4xM8_?0TCs zR@TH+uc@k7F&BQIU5T?;*7b?a^~9E8I5NdvB9Cc<Di318Q$r?Nj>*aq+_mB&RFr#C zk@`NYGmdm%HYc@`{KAi8s}X)tP-N#QvN9Li?}1?I_>7N=4|E_g{Y*DZwq)y@xOEgn zfPsi>cr%$dV3Hr*_Fv}AZ;$i+{SWbG5nu*?4e?WBVv+x{KF*^0v@z4sL3)7sDVbwz zAOrV%Jg@`360B0@{%{UbWI-D?b9d;>SaE7_k1m_)FrA)ayr&Yo8y{}2^DmZlK<>}b z+QDG$PS9fAN^zfl_zixBpmX(#&p5~5`aO!NZ+?^+SS%U%C&`84RO1E36H{?Kd2T@Z z@tgx#+nJn!Sk!rm`+ck%%is>J@CqbGJ`y4qL1ebS=}X6Yj@C^~1AQ~wg?VqI^HYU6 zoWg4kyo(M7&a1#awBl1SPcfs1r8TD|=b1QgaH&oD{`d#Z$Os+`6}I$=HMzP{jFZ84 zn*WTX_cN9VHE>{|T34M7F)}f*6TtfN)&pYbvBDjBkje4eERtA@e;$LP7rVN~K(0s5 zx(i2SLdaOQkXju+)ODwoz`Bt4Vfg9$PaqZ2Lg~gacAJhaL3+5Aa~_;?EdgLPeu|V( za}WXckIl0Up#!B}4C;eAqo$T`{PF0AfLSH5FCjAs<ER07Jq^K9j~?NuDD02fB(w~; z+5OU6cf#8!r=sS<By9Z!Kc@$Vai@pA^*j6mZP^$O8HcVMvk>j>(2y||)#Imy`*))2 zf{?VX<}t<7%c{b+0FWVod2nUY75R9SzKIzdEAiTP%j^y6t(@+IXg<>iA!Wd>)1qyJ zkG`X`2n&TV>Xp@-G`z5)A$Yq--!v2{hxSWF4?4FP$-2eU(E4^b1Lf&qsFcQ2H3Ifz zLw1L%n=Z$XAIp;QgPjtBEGD)WGR9SzC>&w6&gIBXn6BXXwKDiDwH!Z8)oy}I4FUbj z_B{cYn#|xzWJNIzE;Z4x!FGMyc7Z_q5x)B4H$@wKF26b9(U)1_F*Ku+wkQpbBFwt1 zNPQT%TE|5@JBWA*Uw9aOKF<gtUH9>Y$MV?)cVDzw)d_sm5Dp8qWMUOLnjoT5`i^eo z2Lj9GG&S?(c2MJc7$*4A5Nxn}om5e1!mx_Mls|CI!BF#T2S8<9AeToEWazEM;1KhS zO&SY@EyXx3Jn~Mo_N+Ts^;yx|3}c~&r#yIa&D++ffhX_nyk~)PB}!BV&k@jfcxyL) z%%Ph#zKuuOzt?x*G{ALkeaF#~;0tSBWzmy!1{Tu?vZ3#da*}VB8Cp$0G$B{hTe)Zl zBPA#|yY<L^L<uuscED&<<m<6_2xS~CI84xSlbmNb2eBk~y%_;$PXXl5c{<p>ZivE% zFa#M-=j_Eq$BC|Vi;XAexS4dZau<bkp|PjRwXt8{@eI=(DH-#$MST(+#Lm)N?}a$E zQ!OSe(~^`?fI*Q}VQ70isaUFVTHln1k^+f_0UoHEi$UK-Dl2`_jZ2gZ3$lO1)hctM z8<#ULxRWZQ1H>(zl87v=D)N+%f94nf%mpwZWz@4xgbSxvU}zYW&HK9y(E8&mYkEc{ zOfjXYeIuBp&%~a%@S6+<^6~6KSUAZca|{d6qR8VuRZ(W(w63mKFMu?voyF+_HK4%O zni^1`<x&F*zk%yM#K*6FV&e@#R;f1g^>F=Od}rD)&I2mnjkfE@aG8VNaH(;iv7l41 zm2jyMp�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 V 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�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�=WKSo2XsBhKQivi4C<R)l$pdQ? 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%0A?!RnQh@8` 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