From 95cb026446a86f3f14c73a863eb1c7d4864a4f14 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 12 Feb 2019 21:32:11 -0800 Subject: [PATCH] Add SDL2_ttf for macOS --- app/app.pro | 6 +- .../Frameworks/SDL2_ttf.framework/Frameworks | 1 + .../mac/Frameworks/SDL2_ttf.framework/Headers | 1 + .../Frameworks/SDL2_ttf.framework/Resources | 1 + .../Frameworks/SDL2_ttf.framework/SDL2_ttf | 1 + .../A/Frameworks/FreeType.framework/FreeType | 1 + .../A/Frameworks/FreeType.framework/Headers | 1 + .../A/Frameworks/FreeType.framework/Resources | 1 + .../FreeType.framework/Versions/A/FreeType | Bin 0 -> 744448 bytes .../A/Headers/freetype/config/ftconfig.h | 603 +++ .../A/Headers/freetype/config/ftheader.h | 804 +++ .../A/Headers/freetype/config/ftmodule.h | 20 + .../A/Headers/freetype/config/ftoption.h | 977 ++++ .../A/Headers/freetype/config/ftstdlib.h | 175 + .../Versions/A/Headers/freetype/freetype.h | 4657 +++++++++++++++++ .../Versions/A/Headers/freetype/ftadvanc.h | 187 + .../Versions/A/Headers/freetype/ftbbox.h | 101 + .../Versions/A/Headers/freetype/ftbdf.h | 210 + .../Versions/A/Headers/freetype/ftbitmap.h | 240 + .../Versions/A/Headers/freetype/ftbzip2.h | 102 + .../Versions/A/Headers/freetype/ftcache.h | 1042 ++++ .../Versions/A/Headers/freetype/ftchapters.h | 139 + .../Versions/A/Headers/freetype/ftcid.h | 168 + .../Versions/A/Headers/freetype/ftdriver.h | 1225 +++++ .../Versions/A/Headers/freetype/fterrdef.h | 280 + .../Versions/A/Headers/freetype/fterrors.h | 226 + .../Versions/A/Headers/freetype/ftfntfmt.h | 95 + .../Versions/A/Headers/freetype/ftgasp.h | 142 + .../Versions/A/Headers/freetype/ftglyph.h | 614 +++ .../Versions/A/Headers/freetype/ftgxval.h | 357 ++ .../Versions/A/Headers/freetype/ftgzip.h | 151 + .../Versions/A/Headers/freetype/ftimage.h | 1205 +++++ .../Versions/A/Headers/freetype/ftincrem.h | 343 ++ .../Versions/A/Headers/freetype/ftlcdfil.h | 309 ++ .../Versions/A/Headers/freetype/ftlist.h | 276 + .../Versions/A/Headers/freetype/ftlzw.h | 99 + .../Versions/A/Headers/freetype/ftmac.h | 275 + .../Versions/A/Headers/freetype/ftmm.h | 638 +++ .../Versions/A/Headers/freetype/ftmodapi.h | 711 +++ .../Versions/A/Headers/freetype/ftmoderr.h | 194 + .../Versions/A/Headers/freetype/ftotval.h | 204 + .../Versions/A/Headers/freetype/ftoutln.h | 582 ++ .../Versions/A/Headers/freetype/ftparams.h | 205 + .../Versions/A/Headers/freetype/ftpfr.h | 172 + .../Versions/A/Headers/freetype/ftrender.h | 233 + .../Versions/A/Headers/freetype/ftsizes.h | 159 + .../Versions/A/Headers/freetype/ftsnames.h | 253 + .../Versions/A/Headers/freetype/ftstroke.h | 785 +++ .../Versions/A/Headers/freetype/ftsynth.h | 84 + .../Versions/A/Headers/freetype/ftsystem.h | 355 ++ .../Versions/A/Headers/freetype/fttrigon.h | 350 ++ .../Versions/A/Headers/freetype/fttypes.h | 602 +++ .../Versions/A/Headers/freetype/ftwinfnt.h | 275 + .../Versions/A/Headers/freetype/t1tables.h | 770 +++ .../Versions/A/Headers/freetype/ttnameid.h | 1236 +++++ .../Versions/A/Headers/freetype/tttables.h | 846 +++ .../Versions/A/Headers/freetype/tttags.h | 121 + .../Versions/A/Headers/ft2build.h | 42 + .../Resources/English.lproj/InfoPlist.strings | Bin 0 -> 664 bytes .../Versions/A/Resources/Info.plist | 24 + .../Versions/A/Resources/LICENSE.freetype.txt | 173 + .../Versions/A/_CodeSignature/CodeResources | 500 ++ .../FreeType.framework/Versions/Current | 1 + .../Versions/A/Headers/SDL_ttf.h | 294 ++ .../Versions/A/Resources/Info.plist | 42 + .../SDL2_ttf.framework/Versions/A/SDL2_ttf | Bin 0 -> 48848 bytes .../Versions/A/_CodeSignature/CodeResources | 152 + .../SDL2_ttf.framework/Versions/Current | 1 + 68 files changed, 25037 insertions(+), 2 deletions(-) create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Frameworks create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Headers create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Resources create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/SDL2_ttf create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/FreeType create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Headers create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Resources create mode 100755 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/FreeType create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftconfig.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftheader.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftmodule.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftoption.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftstdlib.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/freetype.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftadvanc.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbbox.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbdf.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbitmap.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbzip2.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcache.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftchapters.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcid.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftdriver.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrdef.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrors.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftfntfmt.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgasp.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftglyph.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgxval.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgzip.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftimage.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftincrem.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlcdfil.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlist.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlzw.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmac.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmm.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmodapi.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmoderr.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftotval.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftoutln.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftparams.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftpfr.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftrender.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsizes.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsnames.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftstroke.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsynth.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsystem.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttrigon.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttypes.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftwinfnt.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/t1tables.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ttnameid.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttables.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttags.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/ft2build.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/English.lproj/InfoPlist.strings create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/Info.plist create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/LICENSE.freetype.txt create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/_CodeSignature/CodeResources create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/Current create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Headers/SDL_ttf.h create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Resources/Info.plist create mode 100755 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/SDL2_ttf create mode 100644 libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/_CodeSignature/CodeResources create mode 120000 libs/mac/Frameworks/SDL2_ttf.framework/Versions/Current diff --git a/app/app.pro b/app/app.pro index 67312f54..fa4c112e 100644 --- a/app/app.pro +++ b/app/app.pro @@ -53,7 +53,9 @@ win32 { LIBS += ws2_32.lib winmm.lib dxva2.lib ole32.lib gdi32.lib user32.lib d3d9.lib dwmapi.lib dbghelp.lib } macx { - INCLUDEPATH += $$PWD/../libs/mac/include $$PWD/../libs/mac/Frameworks/SDL2.framework/Versions/A/Headers + INCLUDEPATH += $$PWD/../libs/mac/include + INCLUDEPATH += $$PWD/../libs/mac/Frameworks/SDL2.framework/Versions/A/Headers + INCLUDEPATH += $$PWD/../libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Headers LIBS += -L$$PWD/../libs/mac/lib -F$$PWD/../libs/mac/Frameworks } @@ -93,7 +95,7 @@ win32 { CONFIG += ffmpeg soundio } macx { - LIBS += -lssl -lcrypto -lavcodec.58 -lavutil.56 -lopus -framework SDL2 + LIBS += -lssl -lcrypto -lavcodec.58 -lavutil.56 -lopus -framework SDL2 -framework SDL2_ttf LIBS += -lobjc -framework VideoToolbox -framework AVFoundation -framework CoreVideo -framework CoreGraphics -framework CoreMedia -framework AppKit # For libsoundio diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Frameworks b/libs/mac/Frameworks/SDL2_ttf.framework/Frameworks new file mode 120000 index 00000000..78816f62 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Frameworks @@ -0,0 +1 @@ +Versions/Current/Frameworks \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Headers b/libs/mac/Frameworks/SDL2_ttf.framework/Headers new file mode 120000 index 00000000..a177d2a6 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Resources b/libs/mac/Frameworks/SDL2_ttf.framework/Resources new file mode 120000 index 00000000..953ee36f --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/SDL2_ttf b/libs/mac/Frameworks/SDL2_ttf.framework/SDL2_ttf new file mode 120000 index 00000000..bda75a39 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/SDL2_ttf @@ -0,0 +1 @@ +Versions/Current/SDL2_ttf \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/FreeType b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/FreeType new file mode 120000 index 00000000..5cd5ef14 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/FreeType @@ -0,0 +1 @@ +Versions/Current/FreeType \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Headers b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Headers new file mode 120000 index 00000000..a177d2a6 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Resources b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Resources new file mode 120000 index 00000000..953ee36f --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/FreeType b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/FreeType new file mode 100755 index 0000000000000000000000000000000000000000..873c3aa30f7a4d7726476e0e77554ac9d6c8e646 GIT binary patch literal 744448 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

1Zv9 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 z%0A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

+7LK>8or6K2 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', 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 8 +#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 */ + /* (mostly for environments 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 + + /* we handle the LLP64 scheme separately for GCC and clang, */ + /* suppressing the `long long' warning */ +#elif ( FT_SIZEOF_LONG == 4 ) && \ + defined( HAVE_LONG_LONG_INT ) && \ + defined( __GNUC__ ) +#pragma GCC diagnostic ignored "-Wlong-long" +#define FT_LONG64 +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + + /*************************************************************************/ + /* */ + /* A 64-bit data type may create compilation problems if you compile */ + /* in 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 == 8 */ + +#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 ) || 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( __cplusplus ) +#define FT_EXPORT( x ) extern "C" x +#else +#define FT_EXPORT( x ) extern x +#endif + +#else + +#if defined( FT2_DLLIMPORT ) +#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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftheader.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftheader.h new file mode 100644 index 00000000..702f77cc --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftheader.h @@ -0,0 +1,804 @@ +/***************************************************************************/ +/* */ +/* ftheader.h */ +/* */ +/* Build macros of the FreeType 2 library. */ +/* */ +/* Copyright 1996-2018 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 FTHEADER_H_ +#define FTHEADER_H_ + + + /*@***********************************************************************/ + /* */ + /* */ + /* FT_BEGIN_HEADER */ + /* */ + /* */ + /* 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 */ + /* C++ compiler. */ + /* */ +#ifdef __cplusplus +#define FT_BEGIN_HEADER extern "C" { +#else +#define FT_BEGIN_HEADER /* nothing */ +#endif + + + /*@***********************************************************************/ + /* */ + /* */ + /* FT_END_HEADER */ + /* */ + /* */ + /* 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 */ + /* C++ compiler. */ + /* */ +#ifdef __cplusplus +#define FT_END_HEADER } +#else +#define FT_END_HEADER /* nothing */ +#endif + + + /*************************************************************************/ + /* */ + /* Aliases for the FreeType 2 public and configuration files. */ + /* */ + /*************************************************************************/ + + /*************************************************************************/ + /* */ + /*
*/ + /* header_file_macros */ + /* */ + /* */ + /* 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 + * FreeType~2 configuration data. + * + */ +#ifndef FT_CONFIG_CONFIG_H +#define FT_CONFIG_CONFIG_H <freetype/config/ftconfig.h> +#endif + + + /************************************************************************* + * + * @macro: + * FT_CONFIG_STANDARD_LIBRARY_H + * + * @description: + * A macro used in #include statements to name the file containing + * FreeType~2 interface to the standard C library functions. + * + */ +#ifndef FT_CONFIG_STANDARD_LIBRARY_H +#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h> +#endif + + + /************************************************************************* + * + * @macro: + * FT_CONFIG_OPTIONS_H + * + * @description: + * A macro used in #include statements to name the file containing + * FreeType~2 project-specific configuration options. + * + */ +#ifndef FT_CONFIG_OPTIONS_H +#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h> +#endif + + + /************************************************************************* + * + * @macro: + * FT_CONFIG_MODULES_H + * + * @description: + * 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. + * + */ +#ifndef FT_CONFIG_MODULES_H +#define FT_CONFIG_MODULES_H <freetype/config/ftmodule.h> +#endif + + /* */ + + /* public headers */ + + /************************************************************************* + * + * @macro: + * FT_FREETYPE_H + * + * @description: + * 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 + * list of FreeType~2 error codes (and messages). + * + * It is included by @FT_FREETYPE_H. + * + */ +#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 + * 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 + * FreeType~2 interface to low-level operations (i.e., memory management + * and stream i/o). + * + * It is included by @FT_FREETYPE_H. + * + */ +#define FT_SYSTEM_H <freetype/ftsystem.h> + + + /************************************************************************* + * + * @macro: + * FT_IMAGE_H + * + * @description: + * A macro used in #include statements to name the file containing type + * definitions related to glyph images (i.e., bitmaps, outlines, + * scan-converter parameters). + * + * It is included by @FT_FREETYPE_H. + * + */ +#define FT_IMAGE_H <freetype/ftimage.h> + + + /************************************************************************* + * + * @macro: + * FT_TYPES_H + * + * @description: + * 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. + * + */ +#define FT_TYPES_H <freetype/fttypes.h> + + + /************************************************************************* + * + * @macro: + * FT_LIST_H + * + * @description: + * 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.) + * + */ +#define FT_LIST_H <freetype/ftlist.h> + + + /************************************************************************* + * + * @macro: + * FT_OUTLINE_H + * + * @description: + * 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 + * 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 + * 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 + * 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 + * structures and macros related to the auto-hinting module. + * + * Deprecated since version 2.9; use @FT_DRIVER_H instead. + * + */ +#define FT_AUTOHINTER_H FT_DRIVER_H + + + /************************************************************************* + * + * @macro: + * FT_CFF_DRIVER_H + * + * @description: + * 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 FT_DRIVER_H + + + /************************************************************************* + * + * @macro: + * FT_TRUETYPE_DRIVER_H + * + * @description: + * 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 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 + * 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 + * 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. + * + */ +#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 + * 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 + * 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. + * + */ +#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. + * + */ +#define FT_CID_H <freetype/ftcid.h> + + + /************************************************************************* + * + * @macro: + * FT_GZIP_H + * + * @description: + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * API of the optional FreeType~2 cache sub-system. + * + */ +#define FT_CACHE_H <freetype/ftcache.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. + * + * This header file must be explicitly included by client applications + * compiled on the Mac (note that the base API still works though). + * + */ +#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 + * 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 + * 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). + * + */ +#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). + * + */ +#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 + * 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 + * 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 + * 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 + * FreeType~2 API which provides functions specific to font formats. + */ +#define FT_FONT_FORMATS_H <freetype/ftfntfmt.h> + + /* deprecated */ +#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 + * 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 + * FreeType~2 API which performs color filtering for subpixel rendering. + */ +#define FT_LCD_FILTER_H <freetype/ftlcdfil.h> + + + /************************************************************************* + * + * @macro: + * FT_INCREMENTAL_H + * + * @description: + * 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 + * 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 + * FreeType~2 API which returns individual and ranged glyph advances. + */ +#define FT_ADVANCES_H <freetype/ftadvanc.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. */ + /* */ +#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. + */ +#ifdef FT2_BUILD_LIBRARY +#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h> +#include FT_INTERNAL_INTERNAL_H +#endif /* FT2_BUILD_LIBRARY */ + + +#endif /* FTHEADER_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftmodule.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftmodule.h new file mode 100644 index 00000000..b7299779 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftmodule.h @@ -0,0 +1,20 @@ +/* This is a generated file. */ +FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class ) +FT_USE_MODULE( FT_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, pshinter_module_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_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 ) +/* EOF */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftoption.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftoption.h new file mode 100644 index 00000000..241d3010 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftoption.h @@ -0,0 +1,977 @@ +/***************************************************************************/ +/* */ +/* ftoption.h */ +/* */ +/* User-selectable configuration macros (specification only). */ +/* */ +/* Copyright 1996-2018 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 precendence, 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 precendence, 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 precendence, overwriting the */ + /* value here with the configured one. */ + /* */ +/* #undef 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 precendence, overwriting the */ + /* value here with the configured one. */ + /* */ +/* #undef 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 + + + /*************************************************************************/ + /* */ + /* 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. [Note that standard compilers like gcc or */ + /* clang handle PIC generation automatically; you don't have to set */ + /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */ + /* compilers.] */ + /* */ + /* Note that FT_CONFIG_OPTION_PIC support is not available for all */ + /* modules (see `modules.cfg' for a complete list). For building with */ + /* FT_CONFIG_OPTION_PIC support, do the following. */ + /* */ + /* 0. Clone the repository. */ + /* 1. Define FT_CONFIG_OPTION_PIC. */ + /* 2. Remove all subdirectories in `src' that don't have */ + /* FT_CONFIG_OPTION_PIC support. */ + /* 3. Comment out the corresponding modules in `modules.cfg'. */ + /* 4. Compile. */ + /* */ +/* #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 */ + /* 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). 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 + + + /*************************************************************************/ + /* */ + /* 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. */ + /* */ + /* 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 `ftdriver.h' for more */ + /* information; by default it is switched off). */ + /* */ +#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 */ + + + /* + * This macro is defined if native TrueType hinting is requested by the + * definitions above. + */ +#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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftstdlib.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftstdlib.h new file mode 100644 index 00000000..42f9a06e --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/config/ftstdlib.h @@ -0,0 +1,175 @@ +/***************************************************************************/ +/* */ +/* ftstdlib.h */ +/* */ +/* ANSI-specific library and header configuration file (specification */ +/* only). */ +/* */ +/* Copyright 2002-2018 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 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 <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/freetype.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/freetype.h new file mode 100644 index 00000000..96644046 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/freetype.h @@ -0,0 +1,4657 @@ +/***************************************************************************/ +/* */ +/* freetype.h */ +/* */ +/* FreeType high-level API and common types (specification only). */ +/* */ +/* Copyright 1996-2018 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 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_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). */ + /* */ + /* 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. 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. */ + /* */ + /* 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. To access color */ + /* glyphs use @FT_LOAD_COLOR. */ + /* */ + /* 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( 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_NAMED_INSTANCE( face ) + * + * @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( face ) + * + * @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( 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. + * + * @since: + * 2.5.1 + * + */ +#define FT_HAS_COLOR( face ) \ + ( (face)->face_flags & FT_FACE_FLAG_COLOR ) + + + /*************************************************************************/ + /* */ + /* <Const> */ + /* 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. */ + /* */ + /* 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->rsb_delta - slot->lsb_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 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) */ + /* 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. */ + /* */ + /* 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. 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 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 :: + * 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 :: + * [Since 2.5] Load embedded color bitmap images. The resulting color + * bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format. + * If the flag is not set and color bitmaps are found, they are + * converted to 256-level gray bitmaps transparently, using the + * @FT_PIXEL_MODE_GRAY format. + * + * 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. + * + * 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. */ + /* */ + /* <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_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. */ + /* */ + 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. + * + * @note: + * Here 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 ); + + + /************************************************************************* + * + * @macro: + * 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). + * + * @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 + * OpenType 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 */ + /* 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 `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 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. */ + /* */ + /* <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* 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 9 +#define FREETYPE_PATCH 1 + + + /*************************************************************************/ + /* */ + /* <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftadvanc.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftadvanc.h new file mode 100644 index 00000000..f78e8b1a --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftadvanc.h @@ -0,0 +1,187 @@ +/***************************************************************************/ +/* */ +/* ftadvanc.h */ +/* */ +/* Quick computation of advance widths (specification only). */ +/* */ +/* Copyright 2008-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbbox.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbbox.h new file mode 100644 index 00000000..f9eb70b1 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbbox.h @@ -0,0 +1,101 @@ +/***************************************************************************/ +/* */ +/* ftbbox.h */ +/* */ +/* FreeType exact bbox computation (specification). */ +/* */ +/* Copyright 1996-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbdf.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbdf.h new file mode 100644 index 00000000..1b6dea65 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbdf.h @@ -0,0 +1,210 @@ +/***************************************************************************/ +/* */ +/* ftbdf.h */ +/* */ +/* FreeType API for accessing BDF-specific strings (specification). */ +/* */ +/* Copyright 2002-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbitmap.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbitmap.h new file mode 100644 index 00000000..a43187ca --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbitmap.h @@ -0,0 +1,240 @@ +/***************************************************************************/ +/* */ +/* ftbitmap.h */ +/* */ +/* FreeType utility functions for bitmaps (specification). */ +/* */ +/* Copyright 2004-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbzip2.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbzip2.h new file mode 100644 index 00000000..6edfa031 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftbzip2.h @@ -0,0 +1,102 @@ +/***************************************************************************/ +/* */ +/* ftbzip2.h */ +/* */ +/* Bzip2-compressed stream support. */ +/* */ +/* Copyright 2010-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcache.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcache.h new file mode 100644 index 00000000..52d5f00e --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcache.h @@ -0,0 +1,1042 @@ +/***************************************************************************/ +/* */ +/* ftcache.h */ +/* */ +/* FreeType Cache subsystem (specification). */ +/* */ +/* Copyright 1996-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftchapters.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftchapters.h new file mode 100644 index 00000000..51257bb7 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftchapters.h @@ -0,0 +1,139 @@ +/***************************************************************************/ +/* */ +/* 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 */ +/* t1_cid_driver */ +/* tt_driver */ +/* pcf_driver */ +/* properties */ +/* parameter_tags */ +/* */ +/***************************************************************************/ + + +/***************************************************************************/ +/* */ +/* <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcid.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcid.h new file mode 100644 index 00000000..5e9100a6 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftcid.h @@ -0,0 +1,168 @@ +/***************************************************************************/ +/* */ +/* ftcid.h */ +/* */ +/* FreeType API for accessing CID font information (specification). */ +/* */ +/* Copyright 2007-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftdriver.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftdriver.h new file mode 100644 index 00000000..e90475b2 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftdriver.h @@ -0,0 +1,1225 @@ +/***************************************************************************/ +/* */ +/* ftdriver.h */ +/* */ +/* FreeType API for controlling driver modules (specification only). */ +/* */ +/* Copyright 2017-2018 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://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_ _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://www.beatstamm.com/typography/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. + * + * 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_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. + * + * This property can be set via the `FREETYPE_PROPERTIES' environment + * variable (using values `adobe' or `freetype'). + * + * @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. + * + * { + * 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. + * + * 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. + * + * @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, as the following + * example demonstrates for the Type~1 driver. + * + * { + * 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 ); + * } + * + * 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 + * } + * + * @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. + * + * { + * 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 ); + * } + * + * @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). + * + * @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. + * + * 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 ); + * } + * + * @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'). + * + * @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. + * + * 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. + * + * { + * 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. + * + * @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. + * + * { + * 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. + * + * @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. + * + * { + * 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). + * + * @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. 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. + * + * 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. + * + * @since: + * 2.6 + * + */ + + + /* */ + + +FT_END_HEADER + + +#endif /* FTDRIVER_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrdef.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrdef.h new file mode 100644 index 00000000..8ffd346c --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrdef.h @@ -0,0 +1,280 @@ +/***************************************************************************/ +/* */ +/* fterrdef.h */ +/* */ +/* FreeType error codes (specification). */ +/* */ +/* Copyright 2002-2018 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. */ + /* */ + /*************************************************************************/ + + + /*************************************************************************/ + /* */ + /* <Enum> */ + /* FT_Err_XXX */ + /* */ + /*************************************************************************/ + + /* generic errors */ + + FT_NOERRORDEF_( Ok, 0x00, + "no error" ) + + FT_ERRORDEF_( Cannot_Open_Resource, 0x01, + "cannot open resource" ) + FT_ERRORDEF_( Unknown_File_Format, 0x02, + "unknown file format" ) + FT_ERRORDEF_( Invalid_File_Format, 0x03, + "broken file" ) + FT_ERRORDEF_( Invalid_Version, 0x04, + "invalid FreeType version" ) + FT_ERRORDEF_( Lower_Module_Version, 0x05, + "module version is too low" ) + FT_ERRORDEF_( Invalid_Argument, 0x06, + "invalid argument" ) + FT_ERRORDEF_( Unimplemented_Feature, 0x07, + "unimplemented feature" ) + FT_ERRORDEF_( Invalid_Table, 0x08, + "broken table" ) + FT_ERRORDEF_( Invalid_Offset, 0x09, + "broken offset within table" ) + FT_ERRORDEF_( Array_Too_Large, 0x0A, + "array allocation size too large" ) + FT_ERRORDEF_( Missing_Module, 0x0B, + "missing module" ) + FT_ERRORDEF_( Missing_Property, 0x0C, + "missing property" ) + + /* glyph/character errors */ + + FT_ERRORDEF_( Invalid_Glyph_Index, 0x10, + "invalid glyph index" ) + FT_ERRORDEF_( Invalid_Character_Code, 0x11, + "invalid character code" ) + FT_ERRORDEF_( Invalid_Glyph_Format, 0x12, + "unsupported glyph image format" ) + FT_ERRORDEF_( Cannot_Render_Glyph, 0x13, + "cannot render this glyph format" ) + FT_ERRORDEF_( Invalid_Outline, 0x14, + "invalid outline" ) + FT_ERRORDEF_( Invalid_Composite, 0x15, + "invalid composite glyph" ) + FT_ERRORDEF_( Too_Many_Hints, 0x16, + "too many hints" ) + FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, + "invalid pixel size" ) + + /* handle errors */ + + FT_ERRORDEF_( Invalid_Handle, 0x20, + "invalid object handle" ) + FT_ERRORDEF_( Invalid_Library_Handle, 0x21, + "invalid library handle" ) + FT_ERRORDEF_( Invalid_Driver_Handle, 0x22, + "invalid module handle" ) + FT_ERRORDEF_( Invalid_Face_Handle, 0x23, + "invalid face handle" ) + FT_ERRORDEF_( Invalid_Size_Handle, 0x24, + "invalid size handle" ) + FT_ERRORDEF_( Invalid_Slot_Handle, 0x25, + "invalid glyph slot handle" ) + FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26, + "invalid charmap handle" ) + FT_ERRORDEF_( Invalid_Cache_Handle, 0x27, + "invalid cache manager handle" ) + FT_ERRORDEF_( Invalid_Stream_Handle, 0x28, + "invalid stream handle" ) + + /* driver errors */ + + FT_ERRORDEF_( Too_Many_Drivers, 0x30, + "too many modules" ) + FT_ERRORDEF_( Too_Many_Extensions, 0x31, + "too many extensions" ) + + /* memory errors */ + + FT_ERRORDEF_( Out_Of_Memory, 0x40, + "out of memory" ) + FT_ERRORDEF_( Unlisted_Object, 0x41, + "unlisted object" ) + + /* stream errors */ + + FT_ERRORDEF_( Cannot_Open_Stream, 0x51, + "cannot open stream" ) + FT_ERRORDEF_( Invalid_Stream_Seek, 0x52, + "invalid stream seek" ) + FT_ERRORDEF_( Invalid_Stream_Skip, 0x53, + "invalid stream skip" ) + FT_ERRORDEF_( Invalid_Stream_Read, 0x54, + "invalid stream read" ) + FT_ERRORDEF_( Invalid_Stream_Operation, 0x55, + "invalid stream operation" ) + FT_ERRORDEF_( Invalid_Frame_Operation, 0x56, + "invalid frame operation" ) + FT_ERRORDEF_( Nested_Frame_Access, 0x57, + "nested frame access" ) + FT_ERRORDEF_( Invalid_Frame_Read, 0x58, + "invalid frame read" ) + + /* raster errors */ + + FT_ERRORDEF_( Raster_Uninitialized, 0x60, + "raster uninitialized" ) + FT_ERRORDEF_( Raster_Corrupted, 0x61, + "raster corrupted" ) + FT_ERRORDEF_( Raster_Overflow, 0x62, + "raster overflow" ) + FT_ERRORDEF_( Raster_Negative_Height, 0x63, + "negative height while rastering" ) + + /* cache errors */ + + FT_ERRORDEF_( Too_Many_Caches, 0x70, + "too many registered caches" ) + + /* TrueType and SFNT errors */ + + FT_ERRORDEF_( Invalid_Opcode, 0x80, + "invalid opcode" ) + FT_ERRORDEF_( Too_Few_Arguments, 0x81, + "too few arguments" ) + FT_ERRORDEF_( Stack_Overflow, 0x82, + "stack overflow" ) + FT_ERRORDEF_( Code_Overflow, 0x83, + "code overflow" ) + FT_ERRORDEF_( Bad_Argument, 0x84, + "bad argument" ) + FT_ERRORDEF_( Divide_By_Zero, 0x85, + "division by zero" ) + FT_ERRORDEF_( Invalid_Reference, 0x86, + "invalid reference" ) + FT_ERRORDEF_( Debug_OpCode, 0x87, + "found debug opcode" ) + FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88, + "found ENDF opcode in execution stream" ) + FT_ERRORDEF_( Nested_DEFS, 0x89, + "nested DEFS" ) + FT_ERRORDEF_( Invalid_CodeRange, 0x8A, + "invalid code range" ) + FT_ERRORDEF_( Execution_Too_Long, 0x8B, + "execution context too long" ) + FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C, + "too many function definitions" ) + FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D, + "too many instruction definitions" ) + FT_ERRORDEF_( Table_Missing, 0x8E, + "SFNT font table missing" ) + FT_ERRORDEF_( Horiz_Header_Missing, 0x8F, + "horizontal header (hhea) table missing" ) + FT_ERRORDEF_( Locations_Missing, 0x90, + "locations (loca) table missing" ) + FT_ERRORDEF_( Name_Table_Missing, 0x91, + "name table missing" ) + FT_ERRORDEF_( CMap_Table_Missing, 0x92, + "character map (cmap) table missing" ) + FT_ERRORDEF_( Hmtx_Table_Missing, 0x93, + "horizontal metrics (hmtx) table missing" ) + FT_ERRORDEF_( Post_Table_Missing, 0x94, + "PostScript (post) table missing" ) + FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95, + "invalid horizontal metrics" ) + FT_ERRORDEF_( Invalid_CharMap_Format, 0x96, + "invalid character map (cmap) format" ) + FT_ERRORDEF_( Invalid_PPem, 0x97, + "invalid ppem value" ) + FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98, + "invalid vertical metrics" ) + FT_ERRORDEF_( Could_Not_Find_Context, 0x99, + "could not find context" ) + FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A, + "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 */ + + FT_ERRORDEF_( Syntax_Error, 0xA0, + "opcode syntax error" ) + FT_ERRORDEF_( Stack_Underflow, 0xA1, + "argument stack underflow" ) + FT_ERRORDEF_( Ignore, 0xA2, + "ignore" ) + FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3, + "no Unicode glyph name found" ) + FT_ERRORDEF_( Glyph_Too_Big, 0xA4, + "glyph too big for hinting" ) + + /* BDF errors */ + + FT_ERRORDEF_( Missing_Startfont_Field, 0xB0, + "`STARTFONT' field missing" ) + FT_ERRORDEF_( Missing_Font_Field, 0xB1, + "`FONT' field missing" ) + FT_ERRORDEF_( Missing_Size_Field, 0xB2, + "`SIZE' field missing" ) + FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3, + "`FONTBOUNDINGBOX' field missing" ) + FT_ERRORDEF_( Missing_Chars_Field, 0xB4, + "`CHARS' field missing" ) + FT_ERRORDEF_( Missing_Startchar_Field, 0xB5, + "`STARTCHAR' field missing" ) + FT_ERRORDEF_( Missing_Encoding_Field, 0xB6, + "`ENCODING' field missing" ) + FT_ERRORDEF_( Missing_Bbx_Field, 0xB7, + "`BBX' field missing" ) + FT_ERRORDEF_( Bbx_Too_Big, 0xB8, + "`BBX' too big" ) + FT_ERRORDEF_( Corrupted_Font_Header, 0xB9, + "Font header corrupted or missing fields" ) + FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA, + "Font glyphs corrupted or missing fields" ) + + /* */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrors.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrors.h new file mode 100644 index 00000000..f6ee5c24 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fterrors.h @@ -0,0 +1,226 @@ +/***************************************************************************/ +/* */ +/* fterrors.h */ +/* */ +/* FreeType error code handling (specification). */ +/* */ +/* Copyright 1996-2018 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. */ + /* */ + /*************************************************************************/ + + /* */ + + /* 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_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_ && __FTERRORS_H__) */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftfntfmt.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftfntfmt.h new file mode 100644 index 00000000..cc86efac --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftfntfmt.h @@ -0,0 +1,95 @@ +/***************************************************************************/ +/* */ +/* ftfntfmt.h */ +/* */ +/* Support functions for font formats. */ +/* */ +/* Copyright 2002-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgasp.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgasp.h new file mode 100644 index 00000000..fc1248ff --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgasp.h @@ -0,0 +1,142 @@ +/***************************************************************************/ +/* */ +/* ftgasp.h */ +/* */ +/* Access of TrueType's `gasp' table (specification). */ +/* */ +/* Copyright 2007-2018 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 + + + /************************************************************************* + * + * @func: + * 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftglyph.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftglyph.h new file mode 100644 index 00000000..5f3fc009 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftglyph.h @@ -0,0 +1,614 @@ +/***************************************************************************/ +/* */ +/* ftglyph.h */ +/* */ +/* FreeType convenience functions to handle glyphs (specification). */ +/* */ +/* Copyright 1996-2018 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. */ + /* */ + /* <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 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. */ + /* */ + /* 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgxval.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgxval.h new file mode 100644 index 00000000..8382d599 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgxval.h @@ -0,0 +1,357 @@ +/***************************************************************************/ +/* */ +/* ftgxval.h */ +/* */ +/* FreeType API for validating TrueTypeGX/AAT tables (specification). */ +/* */ +/* Copyright 2004-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgzip.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgzip.h new file mode 100644 index 00000000..db033da0 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftgzip.h @@ -0,0 +1,151 @@ +/***************************************************************************/ +/* */ +/* ftgzip.h */ +/* */ +/* Gzip-compressed stream support. */ +/* */ +/* Copyright 2002-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftimage.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftimage.h new file mode 100644 index 00000000..79ede195 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftimage.h @@ -0,0 +1,1205 @@ +/***************************************************************************/ +/* */ +/* ftimage.h */ +/* */ +/* FreeType glyph image formats and default raster interface */ +/* (specification). */ +/* */ +/* Copyright 1996-2018 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 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 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. */ + /* */ + /* 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftincrem.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftincrem.h new file mode 100644 index 00000000..44619f94 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftincrem.h @@ -0,0 +1,343 @@ +/***************************************************************************/ +/* */ +/* ftincrem.h */ +/* */ +/* FreeType incremental loading (specification). */ +/* */ +/* Copyright 2002-2018 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_ + +#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: + * incremental + * + * @title: + * Incremental Loading + * + * @abstract: + * Custom Glyph Loading. + * + * @description: + * This section contains various functions used to perform so-called + * `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 + * file. This mode is useful when FreeType is used within another + * engine, e.g., a PostScript Imaging Processor. + * + * To enable this mode, you must use @FT_Open_Face, passing an + * @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an + * @FT_Incremental_Interface value. See the comments for + * @FT_Incremental_InterfaceRec for an example. + * + */ + + + /*************************************************************************** + * + * @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. + * + * @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. + * + * See the description of @FT_Incremental_InterfaceRec to understand how + * to use incremental objects with FreeType. + * + */ + 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. + * + * @fields: + * bearing_x :: + * Left bearing, in font units. + * + * bearing_y :: + * Top bearing, in font units. + * + * advance :: + * Horizontal component of glyph advance, in font units. + * + * advance_v :: + * Vertical component of glyph advance, in font units. + * + * @note: + * These correspond to horizontal or vertical metrics depending on the + * value of the `vertical' argument to the function + * @FT_Incremental_GetGlyphMetricsFunc. + * + */ + typedef struct FT_Incremental_MetricsRec_ + { + FT_Long bearing_x; + FT_Long bearing_y; + FT_Long advance; + FT_Long advance_v; /* since 2.3.12 */ + + } FT_Incremental_MetricsRec; + + + /*************************************************************************** + * + * @struct: + * FT_Incremental_Metrics + * + * @description: + * A handle to an @FT_Incremental_MetricsRec structure. + * + */ + typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics; + + + /*************************************************************************** + * + * @type: + * FT_Incremental_GetGlyphDataFunc + * + * @description: + * A function called by FreeType to access a given glyph's data bytes + * during @FT_Load_Glyph or @FT_Load_Char if incremental loading is + * enabled. + * + * 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 + * undefined for any other format. + * + * @input: + * incremental :: + * Handle to an opaque @FT_Incremental handle provided by the client + * application. + * + * glyph_index :: + * Index of relevant glyph. + * + * @output: + * adata :: + * A structure describing the returned glyph data bytes (which will be + * accessed as a read-only byte block). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If this function returns successfully the method + * @FT_Incremental_FreeGlyphDataFunc will be called later to release + * the data bytes. + * + * Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for + * compound glyphs. + * + */ + typedef FT_Error + (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental incremental, + FT_UInt glyph_index, + FT_Data* adata ); + + + /*************************************************************************** + * + * @type: + * FT_Incremental_FreeGlyphDataFunc + * + * @description: + * A function used to release the glyph data bytes returned by a + * successful call to @FT_Incremental_GetGlyphDataFunc. + * + * @input: + * incremental :: + * A handle to an opaque @FT_Incremental handle provided by the client + * application. + * + * data :: + * A structure describing the glyph data bytes (which will be accessed + * as a read-only byte block). + * + */ + typedef void + (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental incremental, + FT_Data* data ); + + + /*************************************************************************** + * + * @type: + * FT_Incremental_GetGlyphMetricsFunc + * + * @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. + * + * @input: + * incremental :: + * A handle to an opaque @FT_Incremental handle provided by the client + * application. + * + * glyph_index :: + * Index of relevant glyph. + * + * vertical :: + * 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. + * + * @output: + * ametrics :: + * The replacement glyph metrics in font units. + * + */ + typedef FT_Error + (*FT_Incremental_GetGlyphMetricsFunc) + ( FT_Incremental incremental, + FT_UInt glyph_index, + FT_Bool vertical, + FT_Incremental_MetricsRec *ametrics ); + + + /************************************************************************** + * + * @struct: + * FT_Incremental_FuncsRec + * + * @description: + * A table of functions for accessing fonts that load data + * incrementally. Used in @FT_Incremental_InterfaceRec. + * + * @fields: + * get_glyph_data :: + * The function to get glyph data. Must not be null. + * + * free_glyph_data :: + * 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. + * + */ + typedef struct FT_Incremental_FuncsRec_ + { + FT_Incremental_GetGlyphDataFunc get_glyph_data; + FT_Incremental_FreeGlyphDataFunc free_glyph_data; + FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics; + + } FT_Incremental_FuncsRec; + + + /*************************************************************************** + * + * @struct: + * FT_Incremental_InterfaceRec + * + * @description: + * A structure to be used with @FT_Open_Face to indicate that the user + * 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; + * + * + * // 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 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 ); + * ... + * } + * + */ + typedef struct FT_Incremental_InterfaceRec_ + { + const FT_Incremental_FuncsRec* funcs; + FT_Incremental object; + + } FT_Incremental_InterfaceRec; + + + /*************************************************************************** + * + * @type: + * FT_Incremental_Interface + * + * @description: + * A pointer to an @FT_Incremental_InterfaceRec structure. + * + */ + typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface; + + + /* */ + + +FT_END_HEADER + +#endif /* FTINCREM_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlcdfil.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlcdfil.h new file mode 100644 index 00000000..2a27196c --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlcdfil.h @@ -0,0 +1,309 @@ +/***************************************************************************/ +/* */ +/* ftlcdfil.h */ +/* */ +/* FreeType API for color filtering of subpixel bitmap glyphs */ +/* (specification). */ +/* */ +/* Copyright 2006-2018 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_filtering + * + * @title: + * LCD Filtering + * + * @abstract: + * Reduce color fringes of subpixel-rendered bitmaps. + * + * @description: + * 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. The default FreeType LCD + * rendering uses different technology, and API described below, + * although available, does nothing. + * + * 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. 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. + * + * 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. + * + * The filter affects glyph bitmaps rendered through @FT_Render_Glyph, + * @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 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 3~subpixels to the left, and + * 3~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. + * + * 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. The default filter + * weights are [0x08 0x4D 0x56 0x4D 0x08]. + * + * 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. The light filter weights are + * [0x00 0x55 0x56 0x55 0x00]. + * + * 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. + * + * @since: + * 2.3.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdFilter( FT_Library library, + FT_LcdFilter filter ); + + + /************************************************************************** + * + * @func: + * 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. + * + * @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]; + + + /* */ + + +FT_END_HEADER + +#endif /* FTLCDFIL_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlist.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlist.h new file mode 100644 index 00000000..117473b9 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlist.h @@ -0,0 +1,276 @@ +/***************************************************************************/ +/* */ +/* ftlist.h */ +/* */ +/* Generic list support for FreeType (specification). */ +/* */ +/* Copyright 1996-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlzw.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlzw.h new file mode 100644 index 00000000..1615912d --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftlzw.h @@ -0,0 +1,99 @@ +/***************************************************************************/ +/* */ +/* ftlzw.h */ +/* */ +/* LZW-compressed stream support. */ +/* */ +/* Copyright 2004-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmac.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmac.h new file mode 100644 index 00000000..c1e497ca --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmac.h @@ -0,0 +1,275 @@ +/***************************************************************************/ +/* */ +/* ftmac.h */ +/* */ +/* Additional Mac-specific API. */ +/* */ +/* Copyright 1996-2018 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. */ + /* */ + /* <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmm.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmm.h new file mode 100644 index 00000000..9948102c --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmm.h @@ -0,0 +1,638 @@ +/***************************************************************************/ +/* */ +/* ftmm.h */ +/* */ +/* FreeType Multiple Master font interface (specification). */ +/* */ +/* Copyright 1996-2018 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 ); + + + /*************************************************************************/ + /* */ + /* <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmodapi.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmodapi.h new file mode 100644 index 00000000..a6eb876e --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmodapi.h @@ -0,0 +1,711 @@ +/***************************************************************************/ +/* */ +/* ftmodapi.h */ +/* */ +/* FreeType modules public interface (specification). */ +/* */ +/* Copyright 1996-2018 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. */ + /* */ + /* <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 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 ); + + /* */ + + 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 :: + * 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; + + + /************************************************************************** + * + * @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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmoderr.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmoderr.h new file mode 100644 index 00000000..e0fc1312 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftmoderr.h @@ -0,0 +1,194 @@ +/***************************************************************************/ +/* */ +/* ftmoderr.h */ +/* */ +/* FreeType module error offsets (specification). */ +/* */ +/* Copyright 2001-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftotval.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftotval.h new file mode 100644 index 00000000..26731c2b --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftotval.h @@ -0,0 +1,204 @@ +/***************************************************************************/ +/* */ +/* ftotval.h */ +/* */ +/* FreeType API for validating OpenType tables (specification). */ +/* */ +/* Copyright 2004-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftoutln.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftoutln.h new file mode 100644 index 00000000..89389a49 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftoutln.h @@ -0,0 +1,582 @@ +/***************************************************************************/ +/* */ +/* ftoutln.h */ +/* */ +/* Support for the FT_Outline type used to store glyph shapes of */ +/* most scalable font formats (specification). */ +/* */ +/* Copyright 1996-2018 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 ); + + + 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. */ + /* */ + 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. */ + /* */ + /* <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. */ + /* */ + /* 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. */ + /* */ + /* <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftparams.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftparams.h new file mode 100644 index 00000000..5a9006c5 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftparams.h @@ -0,0 +1,205 @@ +/***************************************************************************/ +/* */ +/* ftparams.h */ +/* */ +/* FreeType API for possible FT_Parameter tags (specification only). */ +/* */ +/* Copyright 2017-2018 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. + * + */ + + + /*************************************************************************** + * + * @constant: + * 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 + + + /*************************************************************************** + * + * @constant: + * 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 + + + /*************************************************************************** + * + * @constant: + * 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' ) + + + /************************************************************************** + * + * @constant: + * 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' ) + + + /************************************************************************** + * + * @constant: + * 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' ) + + + /************************************************************************** + * + * @constant: + * 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' ) + + + /*************************************************************************** + * + * @constant: + * 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftpfr.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftpfr.h new file mode 100644 index 00000000..a69cc482 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftpfr.h @@ -0,0 +1,172 @@ +/***************************************************************************/ +/* */ +/* ftpfr.h */ +/* */ +/* FreeType API for accessing PFR-specific data (specification only). */ +/* */ +/* Copyright 2002-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftrender.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftrender.h new file mode 100644 index 00000000..fa8ad22b --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftrender.h @@ -0,0 +1,233 @@ +/***************************************************************************/ +/* */ +/* ftrender.h */ +/* */ +/* FreeType renderer modules public interface (specification). */ +/* */ +/* Copyright 1996-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsizes.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsizes.h new file mode 100644 index 00000000..72cb08bf --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsizes.h @@ -0,0 +1,159 @@ +/***************************************************************************/ +/* */ +/* ftsizes.h */ +/* */ +/* FreeType size objects management (specification). */ +/* */ +/* Copyright 1996-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsnames.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsnames.h new file mode 100644 index 00000000..8eb8d70f --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsnames.h @@ -0,0 +1,253 @@ +/***************************************************************************/ +/* */ +/* 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-2018 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. */ + /* */ + 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. */ + /* */ + 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. */ + /* */ + /* <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftstroke.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftstroke.h new file mode 100644 index 00000000..44b6fbe1 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftstroke.h @@ -0,0 +1,785 @@ +/***************************************************************************/ +/* */ +/* ftstroke.h */ +/* */ +/* FreeType path stroker (specification). */ +/* */ +/* Copyright 2002-2018 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 FTSTROKE_H_ +#define FTSTROKE_H_ + +#include <ft2build.h> +#include FT_OUTLINE_H +#include FT_GLYPH_H + + +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 + * + */ + + + /************************************************************** + * + * @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. + * + * @values: + * FT_STROKER_LINEJOIN_ROUND :: + * 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. + * + * 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. + * + * 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 + * backward compatibility. + */ + typedef enum FT_Stroker_LineJoin_ + { + FT_STROKER_LINEJOIN_ROUND = 0, + FT_STROKER_LINEJOIN_BEVEL = 1, + FT_STROKER_LINEJOIN_MITER_VARIABLE = 2, + FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE, + FT_STROKER_LINEJOIN_MITER_FIXED = 3 + + } FT_Stroker_LineJoin; + + + /************************************************************** + * + * @enum: + * FT_Stroker_LineCap + * + * @description: + * 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. + * + * FT_STROKER_LINECAP_ROUND :: + * 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. + */ + typedef enum FT_Stroker_LineCap_ + { + FT_STROKER_LINECAP_BUTT = 0, + FT_STROKER_LINECAP_ROUND, + FT_STROKER_LINECAP_SQUARE + + } 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. + * + * @values: + * FT_STROKER_BORDER_LEFT :: + * Select the left border, relative to the drawing direction. + * + * FT_STROKER_BORDER_RIGHT :: + * Select the right border, relative to the drawing direction. + * + * @note: + * 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 + * drawing orientation, which varies between font formats. + * + * You can however use @FT_Outline_GetInsideBorder and + * @FT_Outline_GetOutsideBorder to get these. + */ + typedef enum FT_StrokerBorder_ + { + FT_STROKER_BORDER_LEFT = 0, + FT_STROKER_BORDER_RIGHT + + } FT_StrokerBorder; + + + /************************************************************** + * + * @function: + * FT_Outline_GetInsideBorder + * + * @description: + * Retrieve the @FT_StrokerBorder value corresponding to the + * `inside' borders of a given outline. + * + * @input: + * outline :: + * The source outline handle. + * + * @return: + * The border index. @FT_STROKER_BORDER_RIGHT for empty or invalid + * outlines. + */ + FT_EXPORT( FT_StrokerBorder ) + 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. + * + * @input: + * outline :: + * The source outline handle. + * + * @return: + * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid + * outlines. + */ + FT_EXPORT( FT_StrokerBorder ) + FT_Outline_GetOutsideBorder( FT_Outline* outline ); + + + /************************************************************** + * + * @function: + * FT_Stroker_New + * + * @description: + * Create a new stroker object. + * + * @input: + * library :: + * FreeType library handle. + * + * @output: + * astroker :: + * A new stroker object handle. NULL in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_New( FT_Library library, + FT_Stroker *astroker ); + + + /************************************************************** + * + * @function: + * FT_Stroker_Set + * + * @description: + * Reset a stroker object's attributes. + * + * @input: + * stroker :: + * The target stroker handle. + * + * radius :: + * The border radius. + * + * line_cap :: + * The line cap style. + * + * line_join :: + * 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. + * + * @note: + * The radius is expressed in the same units as the outline + * coordinates. + * + * This function calls @FT_Stroker_Rewind automatically. + */ + FT_EXPORT( void ) + FT_Stroker_Set( FT_Stroker stroker, + FT_Fixed radius, + FT_Stroker_LineCap line_cap, + FT_Stroker_LineJoin line_join, + 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. + * + * @input: + * stroker :: + * The target stroker handle. + */ + FT_EXPORT( void ) + 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. + * + * @input: + * stroker :: + * The target stroker handle. + * + * outline :: + * The source outline. + * + * opened :: + * 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~1, the outline is processed as an open path, and the + * stroker generates a single `stroke' outline. + * + * This function calls @FT_Stroker_Rewind automatically. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_ParseOutline( FT_Stroker stroker, + FT_Outline* outline, + FT_Bool opened ); + + + /************************************************************** + * + * @function: + * FT_Stroker_BeginSubPath + * + * @description: + * Start a new sub-path in the stroker. + * + * @input: + * stroker :: + * The target stroker handle. + * + * to :: + * A pointer to the start vector. + * + * open :: + * A boolean. If~1, the sub-path is treated as an open one. + * + * @return: + * 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. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_BeginSubPath( FT_Stroker stroker, + FT_Vector* to, + FT_Bool open ); + + + /************************************************************** + * + * @function: + * FT_Stroker_EndSubPath + * + * @description: + * Close the current sub-path in the stroker. + * + * @input: + * stroker :: + * The target stroker handle. + * + * @return: + * 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. + */ + 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. + * + * @input: + * stroker :: + * The target stroker handle. + * + * to :: + * A pointer to the destination point. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should call this function between @FT_Stroker_BeginSubPath and + * @FT_Stroker_EndSubPath. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_LineTo( FT_Stroker stroker, + FT_Vector* to ); + + + /************************************************************** + * + * @function: + * FT_Stroker_ConicTo + * + * @description: + * `Draw' a single quadratic Bezier in the stroker's current sub-path, + * from the last position. + * + * @input: + * stroker :: + * The target stroker handle. + * + * control :: + * A pointer to a Bezier control point. + * + * to :: + * A pointer to the destination point. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should call this function between @FT_Stroker_BeginSubPath and + * @FT_Stroker_EndSubPath. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_ConicTo( FT_Stroker stroker, + FT_Vector* control, + FT_Vector* to ); + + + /************************************************************** + * + * @function: + * FT_Stroker_CubicTo + * + * @description: + * `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 Bezier control point. + * + * control2 :: + * A pointer to second Bezier control point. + * + * to :: + * A pointer to the destination point. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should call this function between @FT_Stroker_BeginSubPath and + * @FT_Stroker_EndSubPath. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_CubicTo( FT_Stroker stroker, + FT_Vector* control1, + FT_Vector* control2, + 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. + * + * @input: + * stroker :: + * The target stroker handle. + * + * border :: + * The border index. + * + * @output: + * anum_points :: + * The number of points. + * + * anum_contours :: + * The number of contours. + * + * @return: + * 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 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. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_GetBorderCounts( FT_Stroker stroker, + FT_StrokerBorder border, + FT_UInt *anum_points, + 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. + * + * Note that this function appends the border points and + * contours to your outline, but does not try to resize its + * arrays. + * + * @input: + * stroker :: + * The target stroker handle. + * + * border :: + * The border index. + * + * outline :: + * 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. + * + * 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. + * + * 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, + FT_StrokerBorder border, + 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. + * + * @input: + * stroker :: + * The target stroker handle. + * + * @output: + * anum_points :: + * The number of points. + * + * anum_contours :: + * The number of contours. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_GetCounts( FT_Stroker stroker, + FT_UInt *anum_points, + 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. + * + * Note that this function appends the border points and + * contours to your outline, but does not try to resize its + * arrays. + * + * @input: + * stroker :: + * The target stroker handle. + * + * outline :: + * The target outline handle. + */ + FT_EXPORT( void ) + FT_Stroker_Export( FT_Stroker stroker, + FT_Outline* outline ); + + + /************************************************************** + * + * @function: + * FT_Stroker_Done + * + * @description: + * Destroy a stroker object. + * + * @input: + * stroker :: + * A stroker handle. Can be NULL. + */ + FT_EXPORT( void ) + FT_Stroker_Done( FT_Stroker stroker ); + + + /************************************************************** + * + * @function: + * FT_Glyph_Stroke + * + * @description: + * Stroke a given outline glyph object with a given stroker. + * + * @inout: + * pglyph :: + * Source glyph handle on input, new glyph handle on output. + * + * @input: + * stroker :: + * A stroker handle. + * + * destroy :: + * A Boolean. If~1, the source glyph object is destroyed + * on success. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source glyph is untouched in case of error. + * + * 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. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_Stroke( FT_Glyph *pglyph, + FT_Stroker stroker, + 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. + * + * @inout: + * pglyph :: + * Source glyph handle on input, new glyph handle on output. + * + * @input: + * stroker :: + * A stroker handle. + * + * inside :: + * 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. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source glyph is untouched in case of error. + * + * 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. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_StrokeBorder( FT_Glyph *pglyph, + FT_Stroker stroker, + FT_Bool inside, + FT_Bool destroy ); + + /* */ + +FT_END_HEADER + +#endif /* FTSTROKE_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsynth.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsynth.h new file mode 100644 index 00000000..ff9fb43d --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsynth.h @@ -0,0 +1,84 @@ +/***************************************************************************/ +/* */ +/* ftsynth.h */ +/* */ +/* FreeType synthesizing code for emboldening and slanting */ +/* (specification). */ +/* */ +/* Copyright 2000-2018 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 IS ALPHA CODE! THIS API *********/ + /********* IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE *********/ + /********* FREETYPE DEVELOPMENT TEAM *********/ + /********* *********/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /* Main reason for not lifting the functions in this module to a */ + /* `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_ + + +#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 + + /* 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. */ + /* */ + /* For emboldened outlines the height, width, and advance metrics are */ + /* increased by the strength of the emboldening -- this even affects */ + /* mono-width fonts! */ + /* */ + /* You can also call @FT_Outline_Get_CBox to get precise values. */ + FT_EXPORT( void ) + FT_GlyphSlot_Embolden( FT_GlyphSlot slot ); + + /* Slant an outline glyph to the right by about 12 degrees. */ + FT_EXPORT( void ) + FT_GlyphSlot_Oblique( FT_GlyphSlot slot ); + + /* */ + + +FT_END_HEADER + +#endif /* FTSYNTH_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsystem.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsystem.h new file mode 100644 index 00000000..f6b1629e --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftsystem.h @@ -0,0 +1,355 @@ +/***************************************************************************/ +/* */ +/* ftsystem.h */ +/* */ +/* FreeType low-level system interface definition (specification). */ +/* */ +/* Copyright 1996-2018 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_ + + +#include <ft2build.h> + + +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. */ + /* */ + /*************************************************************************/ + + + /*************************************************************************/ + /* */ + /* M E M O R Y M A N A G E M E N T */ + /* */ + /*************************************************************************/ + + + /************************************************************************* + * + * @type: + * FT_Memory + * + * @description: + * A handle to a given memory manager object, defined with an + * @FT_MemoryRec structure. + * + */ + typedef struct FT_MemoryRec_* FT_Memory; + + + /************************************************************************* + * + * @functype: + * FT_Alloc_Func + * + * @description: + * A function used to allocate `size' bytes from `memory'. + * + * @input: + * memory :: + * A handle to the source memory manager. + * + * size :: + * The size in bytes to allocate. + * + * @return: + * Address of new memory block. 0~in case of failure. + * + */ + typedef void* + (*FT_Alloc_Func)( FT_Memory memory, + long size ); + + + /************************************************************************* + * + * @functype: + * FT_Free_Func + * + * @description: + * A function used to release a given block of memory. + * + * @input: + * memory :: + * A handle to the source memory manager. + * + * block :: + * The address of the target memory block. + * + */ + typedef void + (*FT_Free_Func)( FT_Memory memory, + void* block ); + + + /************************************************************************* + * + * @functype: + * FT_Realloc_Func + * + * @description: + * A function used to re-allocate a given block of memory. + * + * @input: + * memory :: + * A handle to the source memory manager. + * + * cur_size :: + * The block's current size in bytes. + * + * new_size :: + * The block's requested new size. + * + * block :: + * The block's current address. + * + * @return: + * New block address. 0~in case of memory shortage. + * + * @note: + * In case of error, the old block must still be available. + * + */ + typedef void* + (*FT_Realloc_Func)( FT_Memory memory, + long cur_size, + long new_size, + void* block ); + + + /************************************************************************* + * + * @struct: + * FT_MemoryRec + * + * @description: + * A structure used to describe a given memory manager to FreeType~2. + * + * @fields: + * user :: + * A generic typeless pointer for user data. + * + * alloc :: + * A pointer type to an allocation function. + * + * free :: + * A pointer type to an memory freeing function. + * + * realloc :: + * A pointer type to a reallocation function. + * + */ + struct FT_MemoryRec_ + { + void* user; + FT_Alloc_Func alloc; + FT_Free_Func free; + FT_Realloc_Func realloc; + }; + + + /*************************************************************************/ + /* */ + /* I / O M A N A G E M E N T */ + /* */ + /*************************************************************************/ + + + /************************************************************************* + * + * @type: + * FT_Stream + * + * @description: + * A handle to an input stream. + * + * @also: + * 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. + * + */ + typedef union FT_StreamDesc_ + { + long value; + void* pointer; + + } FT_StreamDesc; + + + /************************************************************************* + * + * @functype: + * FT_Stream_IoFunc + * + * @description: + * A function used to seek and read data from a given input stream. + * + * @input: + * stream :: + * A handle to the source stream. + * + * offset :: + * The offset of read in stream (always from start). + * + * buffer :: + * The address of the read buffer. + * + * count :: + * The number of bytes to read from the stream. + * + * @return: + * 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. + * + */ + typedef unsigned long + (*FT_Stream_IoFunc)( FT_Stream stream, + unsigned long offset, + unsigned char* buffer, + unsigned long count ); + + + /************************************************************************* + * + * @functype: + * FT_Stream_CloseFunc + * + * @description: + * A function used to close a given input stream. + * + * @input: + * stream :: + * A handle to the target stream. + * + */ + typedef void + (*FT_Stream_CloseFunc)( FT_Stream stream ); + + + /************************************************************************* + * + * @struct: + * FT_StreamRec + * + * @description: + * A structure used to describe an input stream. + * + * @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 + * 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. + * (Note that this size value can occur for normal streams also; it is + * thus just a hint.) + * + * pos :: + * The current position within the stream. + * + * 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*' + * pointers. + * + * pathname :: + * This field is completely ignored by FreeType. However, it is often + * useful during debugging to use it to store the stream's filename + * (where available). + * + * read :: + * The stream's input function. + * + * close :: + * 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. + * + * cursor :: + * This field is set and used internally by FreeType when parsing + * frames. + * + * limit :: + * This field is set and used internally by FreeType when parsing + * frames. + * + */ + typedef struct FT_StreamRec_ + { + unsigned char* base; + unsigned long size; + unsigned long pos; + + FT_StreamDesc descriptor; + FT_StreamDesc pathname; + FT_Stream_IoFunc read; + FT_Stream_CloseFunc close; + + FT_Memory memory; + unsigned char* cursor; + unsigned char* limit; + + } FT_StreamRec; + + /* */ + + +FT_END_HEADER + +#endif /* FTSYSTEM_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttrigon.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttrigon.h new file mode 100644 index 00000000..2e3f3f1f --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttrigon.h @@ -0,0 +1,350 @@ +/***************************************************************************/ +/* */ +/* fttrigon.h */ +/* */ +/* FreeType trigonometric functions (specification). */ +/* */ +/* Copyright 2001-2018 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_ + +#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> */ + /* computations */ + /* */ + /*************************************************************************/ + + + /************************************************************************* + * + * @type: + * FT_Angle + * + * @description: + * This type is used to model angle values in FreeType. Note that the + * angle is a 16.16 fixed-point value expressed in degrees. + * + */ + typedef FT_Fixed FT_Angle; + + + /************************************************************************* + * + * @macro: + * FT_ANGLE_PI + * + * @description: + * The angle pi expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_PI ( 180L << 16 ) + + + /************************************************************************* + * + * @macro: + * FT_ANGLE_2PI + * + * @description: + * The angle 2*pi expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) + + + /************************************************************************* + * + * @macro: + * FT_ANGLE_PI2 + * + * @description: + * The angle pi/2 expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) + + + /************************************************************************* + * + * @macro: + * FT_ANGLE_PI4 + * + * @description: + * The angle pi/4 expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) + + + /************************************************************************* + * + * @function: + * FT_Sin + * + * @description: + * Return the sinus of a given angle in fixed-point format. + * + * @input: + * angle :: + * The input angle. + * + * @return: + * The sinus value. + * + * @note: + * If you need both the sinus and cosinus for a given angle, use the + * function @FT_Vector_Unit. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Sin( FT_Angle angle ); + + + /************************************************************************* + * + * @function: + * FT_Cos + * + * @description: + * Return the cosinus of a given angle in fixed-point format. + * + * @input: + * angle :: + * The input angle. + * + * @return: + * The cosinus value. + * + * @note: + * If you need both the sinus and cosinus for a given angle, use the + * function @FT_Vector_Unit. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Cos( FT_Angle angle ); + + + /************************************************************************* + * + * @function: + * FT_Tan + * + * @description: + * Return the tangent of a given angle in fixed-point format. + * + * @input: + * angle :: + * The input angle. + * + * @return: + * The tangent value. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Tan( FT_Angle angle ); + + + /************************************************************************* + * + * @function: + * FT_Atan2 + * + * @description: + * Return the arc-tangent corresponding to a given vector (x,y) in + * the 2d plane. + * + * @input: + * x :: + * The horizontal vector coordinate. + * + * y :: + * The vertical vector coordinate. + * + * @return: + * The arc-tangent value (i.e. angle). + * + */ + FT_EXPORT( FT_Angle ) + FT_Atan2( FT_Fixed x, + FT_Fixed y ); + + + /************************************************************************* + * + * @function: + * FT_Angle_Diff + * + * @description: + * Return the difference between two angles. The result is always + * constrained to the ]-PI..PI] interval. + * + * @input: + * angle1 :: + * First angle. + * + * angle2 :: + * Second angle. + * + * @return: + * Constrained value of `value2-value1'. + * + */ + FT_EXPORT( FT_Angle ) + FT_Angle_Diff( FT_Angle angle1, + 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)'. + * + * This function is useful to retrieve both the sinus and cosinus of a + * given angle quickly. + * + * @output: + * vec :: + * The address of target vector. + * + * @input: + * angle :: + * The input angle. + * + */ + FT_EXPORT( void ) + FT_Vector_Unit( FT_Vector* vec, + FT_Angle angle ); + + + /************************************************************************* + * + * @function: + * FT_Vector_Rotate + * + * @description: + * Rotate a vector by a given angle. + * + * @inout: + * vec :: + * The address of target vector. + * + * @input: + * angle :: + * The input angle. + * + */ + FT_EXPORT( void ) + FT_Vector_Rotate( FT_Vector* vec, + FT_Angle angle ); + + + /************************************************************************* + * + * @function: + * FT_Vector_Length + * + * @description: + * Return the length of a given vector. + * + * @input: + * vec :: + * The address of target vector. + * + * @return: + * The vector length, expressed in the same units that the original + * vector coordinates. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Vector_Length( FT_Vector* vec ); + + + /************************************************************************* + * + * @function: + * FT_Vector_Polarize + * + * @description: + * Compute both the length and angle of a given vector. + * + * @input: + * vec :: + * The address of source vector. + * + * @output: + * length :: + * The vector length. + * + * angle :: + * The vector angle. + * + */ + FT_EXPORT( void ) + FT_Vector_Polarize( FT_Vector* vec, + FT_Fixed *length, + FT_Angle *angle ); + + + /************************************************************************* + * + * @function: + * FT_Vector_From_Polar + * + * @description: + * Compute vector coordinates from a length and angle. + * + * @output: + * vec :: + * The address of source vector. + * + * @input: + * length :: + * The vector length. + * + * angle :: + * The vector angle. + * + */ + FT_EXPORT( void ) + FT_Vector_From_Polar( FT_Vector* vec, + FT_Fixed length, + FT_Angle angle ); + + /* */ + + +FT_END_HEADER + +#endif /* FTTRIGON_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttypes.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttypes.h new file mode 100644 index 00000000..f638c2e5 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/fttypes.h @@ -0,0 +1,602 @@ +/***************************************************************************/ +/* */ +/* fttypes.h */ +/* */ +/* FreeType simple types definitions (specification only). */ +/* */ +/* Copyright 1996-2018 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftwinfnt.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftwinfnt.h new file mode 100644 index 00000000..461c65b7 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ftwinfnt.h @@ -0,0 +1,275 @@ +/***************************************************************************/ +/* */ +/* ftwinfnt.h */ +/* */ +/* FreeType API for accessing Windows fnt-specific data. */ +/* */ +/* Copyright 2003-2018 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://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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/t1tables.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/t1tables.h new file mode 100644 index 00000000..3503c261 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/t1tables.h @@ -0,0 +1,770 @@ +/***************************************************************************/ +/* */ +/* t1tables.h */ +/* */ +/* Basic Type 1/Type 2 tables definitions and interface (specification */ +/* only). */ +/* */ +/* Copyright 1996-2018 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; + + /* 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. */ + /* */ + 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 :: */ + /* */ + /* <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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ttnameid.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ttnameid.h new file mode 100644 index 00000000..8605183d --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/ttnameid.h @@ -0,0 +1,1236 @@ +/***************************************************************************/ +/* */ +/* ttnameid.h */ +/* */ +/* TrueType name ID definitions (specification only). */ +/* */ +/* Copyright 1996-2018 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_ + + +#include <ft2build.h> + + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /* */ + /* <Section> */ + /* truetype_tables */ + /* */ + + + /*************************************************************************/ + /* */ + /* 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 + * @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 + * 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). + * + * 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. + * + * TT_PLATFORM_MICROSOFT :: + * Used by Microsoft to indicate Windows-specific charmaps. See + * @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_CUSTOM :: + * Used to indicate application-specific charmaps. + * + * TT_PLATFORM_ADOBE :: + * This value isn't part of any font format specification, but is used + * by FreeType to report Adobe-specific charmaps in an @FT_CharMapRec + * structure. See @TT_ADOBE_ID_XXX. + */ + +#define TT_PLATFORM_APPLE_UNICODE 0 +#define TT_PLATFORM_MACINTOSH 1 +#define TT_PLATFORM_ISO 2 /* deprecated */ +#define TT_PLATFORM_MICROSOFT 3 +#define TT_PLATFORM_CUSTOM 4 +#define TT_PLATFORM_ADOBE 7 /* artificial */ + + + /*********************************************************************** + * + * @enum: + * TT_APPLE_ID_XXX + * + * @description: + * A list of valid values for the `encoding_id' for + * @TT_PLATFORM_APPLE_UNICODE charmaps and name entries. + * + * @values: + * TT_APPLE_ID_DEFAULT :: + * Unicode version 1.0. + * + * TT_APPLE_ID_UNICODE_1_1 :: + * Unicode 1.1; specifies Hangul characters starting at U+34xx. + * + * TT_APPLE_ID_ISO_10646 :: + * Deprecated (identical to preceding). + * + * TT_APPLE_ID_UNICODE_2_0 :: + * Unicode 2.0 and beyond (UTF-16 BMP only). + * + * TT_APPLE_ID_UNICODE_32 :: + * 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. + * + * 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_UNICODE_32 4 /* 2.0 or later, full repertoire */ +#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 + * @TT_PLATFORM_MACINTOSH charmaps and name entries. + */ + +#define TT_MAC_ID_ROMAN 0 +#define TT_MAC_ID_JAPANESE 1 +#define TT_MAC_ID_TRADITIONAL_CHINESE 2 +#define TT_MAC_ID_KOREAN 3 +#define TT_MAC_ID_ARABIC 4 +#define TT_MAC_ID_HEBREW 5 +#define TT_MAC_ID_GREEK 6 +#define TT_MAC_ID_RUSSIAN 7 +#define TT_MAC_ID_RSYMBOL 8 +#define TT_MAC_ID_DEVANAGARI 9 +#define TT_MAC_ID_GURMUKHI 10 +#define TT_MAC_ID_GUJARATI 11 +#define TT_MAC_ID_ORIYA 12 +#define TT_MAC_ID_BENGALI 13 +#define TT_MAC_ID_TAMIL 14 +#define TT_MAC_ID_TELUGU 15 +#define TT_MAC_ID_KANNADA 16 +#define TT_MAC_ID_MALAYALAM 17 +#define TT_MAC_ID_SINHALESE 18 +#define TT_MAC_ID_BURMESE 19 +#define TT_MAC_ID_KHMER 20 +#define TT_MAC_ID_THAI 21 +#define TT_MAC_ID_LAOTIAN 22 +#define TT_MAC_ID_GEORGIAN 23 +#define TT_MAC_ID_ARMENIAN 24 +#define TT_MAC_ID_MALDIVIAN 25 +#define TT_MAC_ID_SIMPLIFIED_CHINESE 25 +#define TT_MAC_ID_TIBETAN 26 +#define TT_MAC_ID_MONGOLIAN 27 +#define TT_MAC_ID_GEEZ 28 +#define TT_MAC_ID_SLAVIC 29 +#define TT_MAC_ID_VIETNAMESE 30 +#define TT_MAC_ID_SINDHI 31 +#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. + * + * Their use is now deprecated. + * + * @values: + * TT_ISO_ID_7BIT_ASCII :: + * ASCII. + * TT_ISO_ID_10646 :: + * ISO/10646. + * TT_ISO_ID_8859_1 :: + * Also known as Latin-1. + */ + +#define TT_ISO_ID_7BIT_ASCII 0 +#define TT_ISO_ID_10646 1 +#define TT_ISO_ID_8859_1 2 + + + /*********************************************************************** + * + * @enum: + * TT_MS_ID_XXX + * + * @description: + * A list of valid values for the `encoding_id' for + * @TT_PLATFORM_MICROSOFT charmaps and name entries. + * + * @values: + * TT_MS_ID_SYMBOL_CS :: + * Microsoft symbol encoding. See @FT_ENCODING_MS_SYMBOL. + * + * TT_MS_ID_UNICODE_CS :: + * Microsoft WGL4 charmap, matching Unicode. See + * @FT_ENCODING_UNICODE. + * + * TT_MS_ID_SJIS :: + * Shift JIS Japanese encoding. See @FT_ENCODING_SJIS. + * + * 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 :: + * Traditional Chinese as used in Taiwan and Hong Kong. See + * @FT_ENCODING_BIG5. + * + * TT_MS_ID_WANSUNG :: + * Korean Extended Wansung encoding. See @FT_ENCODING_WANSUNG. + * + * TT_MS_ID_JOHAB :: + * Korean Johab encoding. See @FT_ENCODING_JOHAB. + * + * TT_MS_ID_UCS_4 :: + * 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_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! + * + * @values: + * TT_ADOBE_ID_STANDARD :: + * Adobe standard encoding. + * TT_ADOBE_ID_EXPERT :: + * Adobe expert encoding. + * TT_ADOBE_ID_CUSTOM :: + * Adobe custom encoding. + * TT_ADOBE_ID_LATIN_1 :: + * Adobe Latin~1 encoding. + */ + +#define TT_ADOBE_ID_STANDARD 0 +#define TT_ADOBE_ID_EXPERT 1 +#define TT_ADOBE_ID_CUSTOM 2 +#define TT_ADOBE_ID_LATIN_1 3 + + + /*********************************************************************** + * + * @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 +#define TT_MAC_LANGID_ITALIAN 3 +#define TT_MAC_LANGID_DUTCH 4 +#define TT_MAC_LANGID_SWEDISH 5 +#define TT_MAC_LANGID_SPANISH 6 +#define TT_MAC_LANGID_DANISH 7 +#define TT_MAC_LANGID_PORTUGUESE 8 +#define TT_MAC_LANGID_NORWEGIAN 9 +#define TT_MAC_LANGID_HEBREW 10 +#define TT_MAC_LANGID_JAPANESE 11 +#define TT_MAC_LANGID_ARABIC 12 +#define TT_MAC_LANGID_FINNISH 13 +#define TT_MAC_LANGID_GREEK 14 +#define TT_MAC_LANGID_ICELANDIC 15 +#define TT_MAC_LANGID_MALTESE 16 +#define TT_MAC_LANGID_TURKISH 17 +#define TT_MAC_LANGID_CROATIAN 18 +#define TT_MAC_LANGID_CHINESE_TRADITIONAL 19 +#define TT_MAC_LANGID_URDU 20 +#define TT_MAC_LANGID_HINDI 21 +#define TT_MAC_LANGID_THAI 22 +#define TT_MAC_LANGID_KOREAN 23 +#define TT_MAC_LANGID_LITHUANIAN 24 +#define TT_MAC_LANGID_POLISH 25 +#define TT_MAC_LANGID_HUNGARIAN 26 +#define TT_MAC_LANGID_ESTONIAN 27 +#define TT_MAC_LANGID_LETTISH 28 +#define TT_MAC_LANGID_SAAMISK 29 +#define TT_MAC_LANGID_FAEROESE 30 +#define TT_MAC_LANGID_FARSI 31 +#define TT_MAC_LANGID_RUSSIAN 32 +#define TT_MAC_LANGID_CHINESE_SIMPLIFIED 33 +#define TT_MAC_LANGID_FLEMISH 34 +#define TT_MAC_LANGID_IRISH 35 +#define TT_MAC_LANGID_ALBANIAN 36 +#define TT_MAC_LANGID_ROMANIAN 37 +#define TT_MAC_LANGID_CZECH 38 +#define TT_MAC_LANGID_SLOVAK 39 +#define TT_MAC_LANGID_SLOVENIAN 40 +#define TT_MAC_LANGID_YIDDISH 41 +#define TT_MAC_LANGID_SERBIAN 42 +#define TT_MAC_LANGID_MACEDONIAN 43 +#define TT_MAC_LANGID_BULGARIAN 44 +#define TT_MAC_LANGID_UKRAINIAN 45 +#define TT_MAC_LANGID_BYELORUSSIAN 46 +#define TT_MAC_LANGID_UZBEK 47 +#define TT_MAC_LANGID_KAZAKH 48 +#define TT_MAC_LANGID_AZERBAIJANI 49 +#define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49 +#define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50 +#define TT_MAC_LANGID_ARMENIAN 51 +#define TT_MAC_LANGID_GEORGIAN 52 +#define TT_MAC_LANGID_MOLDAVIAN 53 +#define TT_MAC_LANGID_KIRGHIZ 54 +#define TT_MAC_LANGID_TAJIKI 55 +#define TT_MAC_LANGID_TURKMEN 56 +#define TT_MAC_LANGID_MONGOLIAN 57 +#define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57 +#define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58 +#define TT_MAC_LANGID_PASHTO 59 +#define TT_MAC_LANGID_KURDISH 60 +#define TT_MAC_LANGID_KASHMIRI 61 +#define TT_MAC_LANGID_SINDHI 62 +#define TT_MAC_LANGID_TIBETAN 63 +#define TT_MAC_LANGID_NEPALI 64 +#define TT_MAC_LANGID_SANSKRIT 65 +#define TT_MAC_LANGID_MARATHI 66 +#define TT_MAC_LANGID_BENGALI 67 +#define TT_MAC_LANGID_ASSAMESE 68 +#define TT_MAC_LANGID_GUJARATI 69 +#define TT_MAC_LANGID_PUNJABI 70 +#define TT_MAC_LANGID_ORIYA 71 +#define TT_MAC_LANGID_MALAYALAM 72 +#define TT_MAC_LANGID_KANNADA 73 +#define TT_MAC_LANGID_TAMIL 74 +#define TT_MAC_LANGID_TELUGU 75 +#define TT_MAC_LANGID_SINHALESE 76 +#define TT_MAC_LANGID_BURMESE 77 +#define TT_MAC_LANGID_KHMER 78 +#define TT_MAC_LANGID_LAO 79 +#define TT_MAC_LANGID_VIETNAMESE 80 +#define TT_MAC_LANGID_INDONESIAN 81 +#define TT_MAC_LANGID_TAGALOG 82 +#define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83 +#define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84 +#define TT_MAC_LANGID_AMHARIC 85 +#define TT_MAC_LANGID_TIGRINYA 86 +#define TT_MAC_LANGID_GALLA 87 +#define TT_MAC_LANGID_SOMALI 88 +#define TT_MAC_LANGID_SWAHILI 89 +#define TT_MAC_LANGID_RUANDA 90 +#define TT_MAC_LANGID_RUNDI 91 +#define TT_MAC_LANGID_CHEWA 92 +#define TT_MAC_LANGID_MALAGASY 93 +#define TT_MAC_LANGID_ESPERANTO 94 +#define TT_MAC_LANGID_WELSH 128 +#define TT_MAC_LANGID_BASQUE 129 +#define TT_MAC_LANGID_CATALAN 130 +#define TT_MAC_LANGID_LATIN 131 +#define TT_MAC_LANGID_QUECHUA 132 +#define TT_MAC_LANGID_GUARANI 133 +#define TT_MAC_LANGID_AYMARA 134 +#define TT_MAC_LANGID_TATAR 135 +#define TT_MAC_LANGID_UIGHUR 136 +#define TT_MAC_LANGID_DZONGKHA 137 +#define TT_MAC_LANGID_JAVANESE 138 +#define TT_MAC_LANGID_SUNDANESE 139 + + /* The following codes are new as of 2000-03-10 */ +#define TT_MAC_LANGID_GALICIAN 140 +#define TT_MAC_LANGID_AFRIKAANS 141 +#define TT_MAC_LANGID_BRETON 142 +#define TT_MAC_LANGID_INUKTITUT 143 +#define TT_MAC_LANGID_SCOTTISH_GAELIC 144 +#define TT_MAC_LANGID_MANX_GAELIC 145 +#define TT_MAC_LANGID_IRISH_GAELIC 146 +#define TT_MAC_LANGID_TONGAN 147 +#define TT_MAC_LANGID_GREEK_POLYTONIC 148 +#define TT_MAC_LANGID_GREELANDIC 149 +#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150 + + + /*********************************************************************** + * + * @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://www.microsoft.com/globaldev/reference/lcid-all.mspx , + * + * 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_SAUDI_ARABIA 0x0401 +#define TT_MS_LANGID_ARABIC_IRAQ 0x0801 +#define TT_MS_LANGID_ARABIC_EGYPT 0x0C01 +#define TT_MS_LANGID_ARABIC_LIBYA 0x1001 +#define TT_MS_LANGID_ARABIC_ALGERIA 0x1401 +#define TT_MS_LANGID_ARABIC_MOROCCO 0x1801 +#define TT_MS_LANGID_ARABIC_TUNISIA 0x1C01 +#define TT_MS_LANGID_ARABIC_OMAN 0x2001 +#define TT_MS_LANGID_ARABIC_YEMEN 0x2401 +#define TT_MS_LANGID_ARABIC_SYRIA 0x2801 +#define TT_MS_LANGID_ARABIC_JORDAN 0x2C01 +#define TT_MS_LANGID_ARABIC_LEBANON 0x3001 +#define TT_MS_LANGID_ARABIC_KUWAIT 0x3401 +#define TT_MS_LANGID_ARABIC_UAE 0x3801 +#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_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 +#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_LIECHTENSTEIN 0x1407 +#define TT_MS_LANGID_GREEK_GREECE 0x0408 +#define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409 +#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809 +#define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09 +#define TT_MS_LANGID_ENGLISH_CANADA 0x1009 +#define TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409 +#define TT_MS_LANGID_ENGLISH_IRELAND 0x1809 +#define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1C09 +#define TT_MS_LANGID_ENGLISH_JAMAICA 0x2009 +#define TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409 +#define TT_MS_LANGID_ENGLISH_BELIZE 0x2809 +#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_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_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 +#define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1C0A +#define TT_MS_LANGID_SPANISH_VENEZUELA 0x200A +#define TT_MS_LANGID_SPANISH_COLOMBIA 0x240A +#define TT_MS_LANGID_SPANISH_PERU 0x280A +#define TT_MS_LANGID_SPANISH_ARGENTINA 0x2C0A +#define TT_MS_LANGID_SPANISH_ECUADOR 0x300A +#define TT_MS_LANGID_SPANISH_CHILE 0x340A +#define TT_MS_LANGID_SPANISH_URUGUAY 0x380A +#define TT_MS_LANGID_SPANISH_PARAGUAY 0x3C0A +#define TT_MS_LANGID_SPANISH_BOLIVIA 0x400A +#define TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440A +#define TT_MS_LANGID_SPANISH_HONDURAS 0x480A +#define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A +#define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A +#define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A +#define TT_MS_LANGID_FINNISH_FINLAND 0x040B +#define TT_MS_LANGID_FRENCH_FRANCE 0x040C +#define TT_MS_LANGID_FRENCH_BELGIUM 0x080C +#define TT_MS_LANGID_FRENCH_CANADA 0x0C0C +#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_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_KOREA 0x0412 +#define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413 +#define TT_MS_LANGID_DUTCH_BELGIUM 0x0813 +#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414 +#define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814 +#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_ROMANSH_SWITZERLAND 0x0417 +#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418 +#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419 +#define TT_MS_LANGID_CROATIAN_CROATIA 0x041A +#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A +#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A +#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A +#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A +#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A +#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 +#define TT_MS_LANGID_SWEDISH_FINLAND 0x081D +#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_INDONESIAN_INDONESIA 0x0421 +#define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422 +#define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423 +#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_TAJIK_TAJIKISTAN 0x0428 +#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_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_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 +#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B +#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B +#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B +#define TT_MS_LANGID_SAMI_LULE_NORWAY 0x103B +#define TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143B +#define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183B +#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B +#define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B +#define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B +#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_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_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_GUJARATI_INDIA 0x0447 +#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 +#define TT_MS_LANGID_MALAYALAM_INDIA 0x044C +#define TT_MS_LANGID_ASSAMESE_INDIA 0x044D +#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_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_GALICIAN_GALICIAN 0x0456 +#define TT_MS_LANGID_KONKANI_INDIA 0x0457 +#define TT_MS_LANGID_SYRIAC_SYRIA 0x045A +#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_ALGERIA 0x085F +#define TT_MS_LANGID_NEPALI_NEPAL 0x0461 +#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 +#define TT_MS_LANGID_HAUSA_NIGERIA 0x0468 +#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_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 +#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 +#define TT_MS_LANGID_YI_CHINA \ + TT_MS_LANGID_YI_PRC +#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479 +#define TT_MS_LANGID_UIGHUR_CHINA \ + TT_MS_LANGID_UIGHUR_PRC + + + /*********************************************************************** + * + * @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 + /* number 15 is reserved */ +#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 + + /* This is new in OpenType 1.3 */ +#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 + + /* 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 + + + /*********************************************************************** + * + * @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 */ + /* Bit 1 C1 Controls and Latin-1 Supplement */ +#define TT_UCR_LATIN1_SUPPLEMENT (1L << 1) /* U+0080-U+00FF */ + /* Bit 2 Latin Extended-A */ +#define TT_UCR_LATIN_EXTENDED_A (1L << 2) /* U+0100-U+017F */ + /* Bit 3 Latin Extended-B */ +#define TT_UCR_LATIN_EXTENDED_B (1L << 3) /* U+0180-U+024F */ + /* Bit 4 IPA Extensions */ + /* Phonetic Extensions */ + /* Phonetic Extensions Supplement */ +#define TT_UCR_IPA_EXTENSIONS (1L << 4) /* U+0250-U+02AF */ + /* U+1D00-U+1D7F */ + /* U+1D80-U+1DBF */ + /* Bit 5 Spacing Modifier Letters */ + /* Modifier Tone Letters */ +#define TT_UCR_SPACING_MODIFIER (1L << 5) /* U+02B0-U+02FF */ + /* U+A700-U+A71F */ + /* Bit 6 Combining Diacritical Marks */ + /* Combining Diacritical Marks Supplement */ +#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 */ + /* Bit 8 Coptic */ +#define TT_UCR_COPTIC (1L << 8) /* U+2C80-U+2CFF */ + /* Bit 9 Cyrillic */ + /* Cyrillic Supplement */ + /* Cyrillic Extended-A */ + /* Cyrillic Extended-B */ +#define TT_UCR_CYRILLIC (1L << 9) /* U+0400-U+04FF */ + /* U+0500-U+052F */ + /* U+2DE0-U+2DFF */ + /* U+A640-U+A69F */ + /* Bit 10 Armenian */ +#define TT_UCR_ARMENIAN (1L << 10) /* U+0530-U+058F */ + /* Bit 11 Hebrew */ +#define TT_UCR_HEBREW (1L << 11) /* U+0590-U+05FF */ + /* Bit 12 Vai */ +#define TT_UCR_VAI (1L << 12) /* U+A500-U+A63F */ + /* Bit 13 Arabic */ + /* Arabic Supplement */ +#define TT_UCR_ARABIC (1L << 13) /* U+0600-U+06FF */ + /* U+0750-U+077F */ + /* Bit 14 NKo */ +#define TT_UCR_NKO (1L << 14) /* U+07C0-U+07FF */ + /* Bit 15 Devanagari */ +#define TT_UCR_DEVANAGARI (1L << 15) /* U+0900-U+097F */ + /* Bit 16 Bengali */ +#define TT_UCR_BENGALI (1L << 16) /* U+0980-U+09FF */ + /* Bit 17 Gurmukhi */ +#define TT_UCR_GURMUKHI (1L << 17) /* U+0A00-U+0A7F */ + /* Bit 18 Gujarati */ +#define TT_UCR_GUJARATI (1L << 18) /* U+0A80-U+0AFF */ + /* Bit 19 Oriya */ +#define TT_UCR_ORIYA (1L << 19) /* U+0B00-U+0B7F */ + /* Bit 20 Tamil */ +#define TT_UCR_TAMIL (1L << 20) /* U+0B80-U+0BFF */ + /* Bit 21 Telugu */ +#define TT_UCR_TELUGU (1L << 21) /* U+0C00-U+0C7F */ + /* Bit 22 Kannada */ +#define TT_UCR_KANNADA (1L << 22) /* U+0C80-U+0CFF */ + /* Bit 23 Malayalam */ +#define TT_UCR_MALAYALAM (1L << 23) /* U+0D00-U+0D7F */ + /* Bit 24 Thai */ +#define TT_UCR_THAI (1L << 24) /* U+0E00-U+0E7F */ + /* Bit 25 Lao */ +#define TT_UCR_LAO (1L << 25) /* U+0E80-U+0EFF */ + /* Bit 26 Georgian */ + /* Georgian Supplement */ +#define TT_UCR_GEORGIAN (1L << 26) /* U+10A0-U+10FF */ + /* U+2D00-U+2D2F */ + /* Bit 27 Balinese */ +#define TT_UCR_BALINESE (1L << 27) /* U+1B00-U+1B7F */ + /* Bit 28 Hangul Jamo */ +#define TT_UCR_HANGUL_JAMO (1L << 28) /* U+1100-U+11FF */ + /* Bit 29 Latin Extended Additional */ + /* Latin Extended-C */ + /* Latin Extended-D */ +#define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1L << 29) /* U+1E00-U+1EFF */ + /* U+2C60-U+2C7F */ + /* U+A720-U+A7FF */ + /* Bit 30 Greek Extended */ +#define TT_UCR_GREEK_EXTENDED (1L << 30) /* U+1F00-U+1FFF */ + /* Bit 31 General Punctuation */ + /* 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_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 */ +#define TT_UCR_NUMBER_FORMS (1L << 4) /* U+2150-U+218F */ + /* Bit 37 Arrows */ + /* Supplemental Arrows-A */ + /* Supplemental Arrows-B */ + /* Miscellaneous Symbols and Arrows */ +#define TT_UCR_ARROWS (1L << 5) /* U+2190-U+21FF */ + /* U+27F0-U+27FF */ + /* U+2900-U+297F */ + /* U+2B00-U+2BFF */ + /* Bit 38 Mathematical Operators */ + /* Supplemental Mathematical Operators */ + /* Miscellaneous Mathematical Symbols-A */ + /* Miscellaneous Mathematical Symbols-B */ +#define TT_UCR_MATHEMATICAL_OPERATORS (1L << 6) /* U+2200-U+22FF */ + /* U+2A00-U+2AFF */ + /* U+27C0-U+27EF */ + /* U+2980-U+29FF */ + /* Bit 39 Miscellaneous Technical */ +#define TT_UCR_MISCELLANEOUS_TECHNICAL (1L << 7) /* U+2300-U+23FF */ + /* Bit 40 Control Pictures */ +#define TT_UCR_CONTROL_PICTURES (1L << 8) /* U+2400-U+243F */ + /* Bit 41 Optical Character Recognition */ +#define TT_UCR_OCR (1L << 9) /* U+2440-U+245F */ + /* Bit 42 Enclosed Alphanumerics */ +#define TT_UCR_ENCLOSED_ALPHANUMERICS (1L << 10) /* U+2460-U+24FF */ + /* Bit 43 Box Drawing */ +#define TT_UCR_BOX_DRAWING (1L << 11) /* U+2500-U+257F */ + /* Bit 44 Block Elements */ +#define TT_UCR_BLOCK_ELEMENTS (1L << 12) /* U+2580-U+259F */ + /* Bit 45 Geometric Shapes */ +#define TT_UCR_GEOMETRIC_SHAPES (1L << 13) /* U+25A0-U+25FF */ + /* Bit 46 Miscellaneous Symbols */ +#define TT_UCR_MISCELLANEOUS_SYMBOLS (1L << 14) /* U+2600-U+26FF */ + /* Bit 47 Dingbats */ +#define TT_UCR_DINGBATS (1L << 15) /* U+2700-U+27BF */ + /* Bit 48 CJK Symbols and Punctuation */ +#define TT_UCR_CJK_SYMBOLS (1L << 16) /* U+3000-U+303F */ + /* Bit 49 Hiragana */ +#define TT_UCR_HIRAGANA (1L << 17) /* U+3040-U+309F */ + /* Bit 50 Katakana */ + /* Katakana Phonetic Extensions */ +#define TT_UCR_KATAKANA (1L << 18) /* U+30A0-U+30FF */ + /* U+31F0-U+31FF */ + /* Bit 51 Bopomofo */ + /* Bopomofo Extended */ +#define TT_UCR_BOPOMOFO (1L << 19) /* U+3100-U+312F */ + /* U+31A0-U+31BF */ + /* Bit 52 Hangul Compatibility Jamo */ +#define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1L << 20) /* U+3130-U+318F */ + /* Bit 53 Phags-Pa */ +#define TT_UCR_CJK_MISC (1L << 21) /* U+A840-U+A87F */ +#define TT_UCR_KANBUN TT_UCR_CJK_MISC /* deprecated */ +#define TT_UCR_PHAGSPA + /* Bit 54 Enclosed CJK Letters and Months */ +#define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1L << 22) /* U+3200-U+32FF */ + /* Bit 55 CJK Compatibility */ +#define TT_UCR_CJK_COMPATIBILITY (1L << 23) /* U+3300-U+33FF */ + /* Bit 56 Hangul Syllables */ +#define TT_UCR_HANGUL (1L << 24) /* U+AC00-U+D7A3 */ + /* 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. */ +#define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DB7F */ + /* U+DB80-U+DBFF */ + /* U+DC00-U+DFFF */ +#define TT_UCR_NON_PLANE_0 TT_UCR_SURROGATES + /* Bit 58 Phoenician */ +#define TT_UCR_PHOENICIAN (1L << 26) /*U+10900-U+1091F*/ + /* Bit 59 CJK Unified Ideographs */ + /* CJK Radicals Supplement */ + /* Kangxi Radicals */ + /* Ideographic Description Characters */ + /* CJK Unified Ideographs Extension A */ + /* CJK Unified Ideographs Extension B */ + /* Kanbun */ +#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1L << 27) /* U+4E00-U+9FFF */ + /* U+2E80-U+2EFF */ + /* U+2F00-U+2FDF */ + /* U+2FF0-U+2FFF */ + /* U+3400-U+4DB5 */ + /*U+20000-U+2A6DF*/ + /* U+3190-U+319F */ + /* Bit 60 Private Use */ +#define TT_UCR_PRIVATE_USE (1L << 28) /* U+E000-U+F8FF */ + /* Bit 61 CJK Strokes */ + /* CJK Compatibility Ideographs */ + /* CJK Compatibility Ideographs Supplement */ +#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1L << 29) /* U+31C0-U+31EF */ + /* U+F900-U+FAFF */ + /*U+2F800-U+2FA1F*/ + /* 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_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 */ + /* CJK Compatibility Forms */ +#define TT_UCR_CJK_COMPATIBILITY_FORMS (1L << 1) /* U+FE10-U+FE1F */ + /* U+FE30-U+FE4F */ + /* 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_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 */ +#define TT_UCR_SPECIALS (1L << 5) /* U+FFF0-U+FFFD */ + /* Bit 70 Tibetan */ +#define TT_UCR_TIBETAN (1L << 6) /* U+0F00-U+0FFF */ + /* Bit 71 Syriac */ +#define TT_UCR_SYRIAC (1L << 7) /* U+0700-U+074F */ + /* Bit 72 Thaana */ +#define TT_UCR_THAANA (1L << 8) /* U+0780-U+07BF */ + /* Bit 73 Sinhala */ +#define TT_UCR_SINHALA (1L << 9) /* U+0D80-U+0DFF */ + /* Bit 74 Myanmar */ +#define TT_UCR_MYANMAR (1L << 10) /* U+1000-U+109F */ + /* Bit 75 Ethiopic */ + /* Ethiopic Supplement */ + /* Ethiopic Extended */ +#define TT_UCR_ETHIOPIC (1L << 11) /* U+1200-U+137F */ + /* U+1380-U+139F */ + /* U+2D80-U+2DDF */ + /* Bit 76 Cherokee */ +#define TT_UCR_CHEROKEE (1L << 12) /* U+13A0-U+13FF */ + /* Bit 77 Unified Canadian Aboriginal Syllabics */ +#define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1L << 13) /* U+1400-U+167F */ + /* Bit 78 Ogham */ +#define TT_UCR_OGHAM (1L << 14) /* U+1680-U+169F */ + /* Bit 79 Runic */ +#define TT_UCR_RUNIC (1L << 15) /* U+16A0-U+16FF */ + /* Bit 80 Khmer */ + /* Khmer Symbols */ +#define TT_UCR_KHMER (1L << 16) /* U+1780-U+17FF */ + /* U+19E0-U+19FF */ + /* Bit 81 Mongolian */ +#define TT_UCR_MONGOLIAN (1L << 17) /* U+1800-U+18AF */ + /* Bit 82 Braille Patterns */ +#define TT_UCR_BRAILLE (1L << 18) /* U+2800-U+28FF */ + /* Bit 83 Yi Syllables */ + /* Yi Radicals */ +#define TT_UCR_YI (1L << 19) /* U+A000-U+A48F */ + /* U+A490-U+A4CF */ + /* Bit 84 Tagalog */ + /* Hanunoo */ + /* Buhid */ + /* Tagbanwa */ +#define TT_UCR_PHILIPPINE (1L << 20) /* U+1700-U+171F */ + /* U+1720-U+173F */ + /* U+1740-U+175F */ + /* U+1760-U+177F */ + /* Bit 85 Old Italic */ +#define TT_UCR_OLD_ITALIC (1L << 21) /*U+10300-U+1032F*/ + /* Bit 86 Gothic */ +#define TT_UCR_GOTHIC (1L << 22) /*U+10330-U+1034F*/ + /* Bit 87 Deseret */ +#define TT_UCR_DESERET (1L << 23) /*U+10400-U+1044F*/ + /* Bit 88 Byzantine Musical Symbols */ + /* Musical Symbols */ + /* Ancient Greek Musical Notation */ +#define TT_UCR_MUSICAL_SYMBOLS (1L << 24) /*U+1D000-U+1D0FF*/ + /*U+1D100-U+1D1FF*/ + /*U+1D200-U+1D24F*/ + /* Bit 89 Mathematical Alphanumeric Symbols */ +#define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1L << 25) /*U+1D400-U+1D7FF*/ + /* Bit 90 Private Use (plane 15) */ + /* Private Use (plane 16) */ +#define TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1L << 26) /*U+F0000-U+FFFFD*/ + /*U+100000-U+10FFFD*/ + /* Bit 91 Variation Selectors */ + /* Variation Selectors Supplement */ +#define TT_UCR_VARIATION_SELECTORS (1L << 27) /* U+FE00-U+FE0F */ + /*U+E0100-U+E01EF*/ + /* Bit 92 Tags */ +#define TT_UCR_TAGS (1L << 28) /*U+E0000-U+E007F*/ + /* Bit 93 Limbu */ +#define TT_UCR_LIMBU (1L << 29) /* U+1900-U+194F */ + /* Bit 94 Tai Le */ +#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 */ +#define TT_UCR_GLAGOLITIC (1L << 1) /* U+2C00-U+2C5F */ + /* Bit 98 Tifinagh */ +#define TT_UCR_TIFINAGH (1L << 2) /* U+2D30-U+2D7F */ + /* Bit 99 Yijing Hexagram Symbols */ +#define TT_UCR_YIJING (1L << 3) /* U+4DC0-U+4DFF */ + /* Bit 100 Syloti Nagri */ +#define TT_UCR_SYLOTI_NAGRI (1L << 4) /* U+A800-U+A82F */ + /* Bit 101 Linear B Syllabary */ + /* Linear B Ideograms */ + /* Aegean Numbers */ +#define TT_UCR_LINEAR_B (1L << 5) /*U+10000-U+1007F*/ + /*U+10080-U+100FF*/ + /*U+10100-U+1013F*/ + /* Bit 102 Ancient Greek Numbers */ +#define TT_UCR_ANCIENT_GREEK_NUMBERS (1L << 6) /*U+10140-U+1018F*/ + /* Bit 103 Ugaritic */ +#define TT_UCR_UGARITIC (1L << 7) /*U+10380-U+1039F*/ + /* Bit 104 Old Persian */ +#define TT_UCR_OLD_PERSIAN (1L << 8) /*U+103A0-U+103DF*/ + /* Bit 105 Shavian */ +#define TT_UCR_SHAVIAN (1L << 9) /*U+10450-U+1047F*/ + /* Bit 106 Osmanya */ +#define TT_UCR_OSMANYA (1L << 10) /*U+10480-U+104AF*/ + /* Bit 107 Cypriot Syllabary */ +#define TT_UCR_CYPRIOT_SYLLABARY (1L << 11) /*U+10800-U+1083F*/ + /* Bit 108 Kharoshthi */ +#define TT_UCR_KHAROSHTHI (1L << 12) /*U+10A00-U+10A5F*/ + /* Bit 109 Tai Xuan Jing Symbols */ +#define TT_UCR_TAI_XUAN_JING (1L << 13) /*U+1D300-U+1D35F*/ + /* Bit 110 Cuneiform */ + /* Cuneiform Numbers and Punctuation */ +#define TT_UCR_CUNEIFORM (1L << 14) /*U+12000-U+123FF*/ + /*U+12400-U+1247F*/ + /* Bit 111 Counting Rod Numerals */ +#define TT_UCR_COUNTING_ROD_NUMERALS (1L << 15) /*U+1D360-U+1D37F*/ + /* Bit 112 Sundanese */ +#define TT_UCR_SUNDANESE (1L << 16) /* U+1B80-U+1BBF */ + /* Bit 113 Lepcha */ +#define TT_UCR_LEPCHA (1L << 17) /* U+1C00-U+1C4F */ + /* Bit 114 Ol Chiki */ +#define TT_UCR_OL_CHIKI (1L << 18) /* U+1C50-U+1C7F */ + /* Bit 115 Saurashtra */ +#define TT_UCR_SAURASHTRA (1L << 19) /* U+A880-U+A8DF */ + /* Bit 116 Kayah Li */ +#define TT_UCR_KAYAH_LI (1L << 20) /* U+A900-U+A92F */ + /* Bit 117 Rejang */ +#define TT_UCR_REJANG (1L << 21) /* U+A930-U+A95F */ + /* Bit 118 Cham */ +#define TT_UCR_CHAM (1L << 22) /* U+AA00-U+AA5F */ + /* Bit 119 Ancient Symbols */ +#define TT_UCR_ANCIENT_SYMBOLS (1L << 23) /*U+10190-U+101CF*/ + /* Bit 120 Phaistos Disc */ +#define TT_UCR_PHAISTOS_DISC (1L << 24) /*U+101D0-U+101FF*/ + /* Bit 121 Carian */ + /* Lycian */ + /* Lydian */ +#define TT_UCR_OLD_ANATOLIAN (1L << 25) /*U+102A0-U+102DF*/ + /*U+10280-U+1029F*/ + /*U+10920-U+1093F*/ + /* Bit 122 Domino Tiles */ + /* Mahjong Tiles */ +#define TT_UCR_GAME_TILES (1L << 26) /*U+1F030-U+1F09F*/ + /*U+1F000-U+1F02F*/ + /* Bit 123-127 Reserved for process-internal usage */ + + /* */ + + /* 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 + +#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_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttables.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttables.h new file mode 100644 index 00000000..ce6a6177 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttables.h @@ -0,0 +1,846 @@ +/***************************************************************************/ +/* */ +/* tttables.h */ +/* */ +/* Basic SFNT/TrueType tables definitions and interface */ +/* (specification only). */ +/* */ +/* Copyright 1996-2018 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. */ + /* */ + 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 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. */ + /* */ + /* 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 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/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttags.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttags.h new file mode 100644 index 00000000..e5cee68a --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/freetype/tttags.h @@ -0,0 +1,121 @@ +/***************************************************************************/ +/* */ +/* tttags.h */ +/* */ +/* Tags for TrueType and OpenType tables (specification only). */ +/* */ +/* Copyright 1996-2018 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_ + + +#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 + + +#define TTAG_avar FT_MAKE_TAG( 'a', 'v', 'a', 'r' ) +#define TTAG_BASE FT_MAKE_TAG( 'B', 'A', 'S', 'E' ) +#define TTAG_bdat FT_MAKE_TAG( 'b', 'd', 'a', 't' ) +#define TTAG_BDF FT_MAKE_TAG( 'B', 'D', 'F', ' ' ) +#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' ) +#define TTAG_bloc FT_MAKE_TAG( 'b', 'l', 'o', 'c' ) +#define TTAG_bsln FT_MAKE_TAG( 'b', 's', 'l', 'n' ) +#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_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' ) +#define TTAG_EBDT FT_MAKE_TAG( 'E', 'B', 'D', 'T' ) +#define TTAG_EBLC FT_MAKE_TAG( 'E', 'B', 'L', 'C' ) +#define TTAG_EBSC FT_MAKE_TAG( 'E', 'B', 'S', 'C' ) +#define TTAG_feat FT_MAKE_TAG( 'f', 'e', 'a', 't' ) +#define TTAG_FOND FT_MAKE_TAG( 'F', 'O', 'N', 'D' ) +#define TTAG_fpgm FT_MAKE_TAG( 'f', 'p', 'g', 'm' ) +#define TTAG_fvar FT_MAKE_TAG( 'f', 'v', 'a', 'r' ) +#define TTAG_gasp FT_MAKE_TAG( 'g', 'a', 's', 'p' ) +#define TTAG_GDEF FT_MAKE_TAG( 'G', 'D', 'E', 'F' ) +#define TTAG_glyf FT_MAKE_TAG( 'g', 'l', 'y', 'f' ) +#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' ) +#define TTAG_hmtx FT_MAKE_TAG( 'h', 'm', 't', 'x' ) +#define TTAG_JSTF FT_MAKE_TAG( 'J', 'S', 'T', 'F' ) +#define TTAG_just FT_MAKE_TAG( 'j', 'u', 's', 't' ) +#define TTAG_kern FT_MAKE_TAG( 'k', 'e', 'r', 'n' ) +#define TTAG_lcar FT_MAKE_TAG( 'l', 'c', 'a', 'r' ) +#define TTAG_loca FT_MAKE_TAG( 'l', 'o', 'c', 'a' ) +#define TTAG_LTSH FT_MAKE_TAG( 'L', 'T', 'S', 'H' ) +#define TTAG_LWFN FT_MAKE_TAG( 'L', 'W', 'F', 'N' ) +#define TTAG_MATH FT_MAKE_TAG( 'M', 'A', 'T', 'H' ) +#define TTAG_maxp FT_MAKE_TAG( 'm', 'a', 'x', 'p' ) +#define TTAG_META FT_MAKE_TAG( 'M', 'E', 'T', 'A' ) +#define TTAG_MMFX FT_MAKE_TAG( 'M', 'M', 'F', 'X' ) +#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' ) +#define TTAG_OTTO FT_MAKE_TAG( 'O', 'T', 'T', 'O' ) +#define TTAG_PCLT FT_MAKE_TAG( 'P', 'C', 'L', 'T' ) +#define TTAG_POST FT_MAKE_TAG( 'P', 'O', 'S', 'T' ) +#define TTAG_post FT_MAKE_TAG( 'p', 'o', 's', 't' ) +#define TTAG_prep FT_MAKE_TAG( 'p', 'r', 'e', 'p' ) +#define TTAG_prop FT_MAKE_TAG( 'p', 'r', 'o', 'p' ) +#define TTAG_sbix FT_MAKE_TAG( 's', 'b', 'i', 'x' ) +#define TTAG_sfnt FT_MAKE_TAG( 's', 'f', 'n', 't' ) +#define TTAG_SING FT_MAKE_TAG( 'S', 'I', 'N', 'G' ) +#define TTAG_trak FT_MAKE_TAG( 't', 'r', 'a', 'k' ) +#define TTAG_true FT_MAKE_TAG( 't', 'r', 'u', 'e' ) +#define TTAG_ttc FT_MAKE_TAG( 't', 't', 'c', ' ' ) +#define TTAG_ttcf FT_MAKE_TAG( 't', 't', 'c', 'f' ) +#define TTAG_TYP1 FT_MAKE_TAG( 'T', 'Y', 'P', '1' ) +#define TTAG_typ1 FT_MAKE_TAG( 't', 'y', 'p', '1' ) +#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_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/ft2build.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/ft2build.h new file mode 100644 index 00000000..e7ce99bc --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Headers/ft2build.h @@ -0,0 +1,42 @@ +/***************************************************************************/ +/* */ +/* ft2build.h */ +/* */ +/* FreeType 2 build and setup macros. */ +/* */ +/* Copyright 1996-2018 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 */ + /* */ + /*************************************************************************/ + + +#ifndef FT2BUILD_H_ +#define FT2BUILD_H_ + +#include <freetype/config/ftheader.h> + +#endif /* FT2BUILD_H_ */ + + +/* END */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..72f737beb0e64aa7af7dc03f117194e4d211c44a GIT binary patch literal 664 zcmc(cOKSo_5QOXOuUI^a8Wjmb$VJ5m1P@tB&YB%JA?~`24@iD|lCNijf^5!VnCY4B z>gwvAuW#L`p-2zf=|wAT^`=ibCHPKQuRWffa%_a%aL##cxVKdV{9XsV@1Q>dssU$> zHPS>w9YH7HoEGqB*hu&6I#JKdX-Qszt?RBLE7mKuJT;!cT=c|vJlb-lXT~0y`s~3U zTvHehXZ=+S*P5=U5b08*N!=0J3iO+j6s0zao;s{swZg5dt_(S*`x7Xe?2@T?lv_U* zdxT{jUY7q1Y73X+%tCw>W@r)1DD&*k9Pu(Q{q1<6SToo&s^#!HY{FiLAE;7W{zX;f HAN%+Lg&S`Y literal 0 HcmV?d00001 diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/Info.plist b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/Info.plist new file mode 100644 index 00000000..84c2cde1 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>FreeType</string> + <key>CFBundleGetInfoString</key> + <string>FreeType 2.4.8</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>FreeType</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>2.4.8</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>2.4.8</string> +</dict> +</plist> diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/LICENSE.freetype.txt b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/LICENSE.freetype.txt new file mode 100644 index 00000000..2122ec7c --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/Resources/LICENSE.freetype.txt @@ -0,0 +1,173 @@ +The source code to this library used with SDL_ttf can be found here: +http://www.libsdl.org/projects/SDL_ttf/libs/ +--- + + The FreeType Project LICENSE + ---------------------------- + + 2006-Jan-27 + + Copyright 1996-2002, 2006 by + David Turner, Robert Wilhelm, and Werner Lemberg + + + +Introduction +============ + + The FreeType Project is distributed in several archive packages; + some of them may contain, in addition to the FreeType font engine, + various tools and contributions which rely on, or relate to, the + FreeType Project. + + This license applies to all files found in such packages, and + which do not fall under their own explicit license. The license + affects thus the FreeType font engine, the test programs, + documentation and makefiles, at the very least. + + This license was inspired by the BSD, Artistic, and IJG + (Independent JPEG Group) licenses, which all encourage inclusion + and use of free software in commercial and freeware products + alike. As a consequence, its main points are that: + + o We don't promise that this software works. However, we will be + interested in any kind of bug reports. (`as is' distribution) + + o You can use this software for whatever you want, in parts or + full form, without having to pay us. (`royalty-free' usage) + + o You may not pretend that you wrote this software. If you use + it, or only parts of it, in a program, you must acknowledge + somewhere in your documentation that you have used the + FreeType code. (`credits') + + We specifically permit and encourage the inclusion of this + software, with or without modifications, in commercial products. + We disclaim all warranties covering The FreeType Project and + assume no liability related to The FreeType Project. + + + Finally, many people asked us for a preferred form for a + credit/disclaimer to use in compliance with this license. We thus + encourage you to use the following text: + + """ + Portions of this software are copyright © <year> The FreeType + Project (www.freetype.org). All rights reserved. + """ + + Please replace <year> with the value from the FreeType version you + actually use. + + +Legal Terms +=========== + +0. Definitions +-------------- + + Throughout this license, the terms `package', `FreeType Project', + and `FreeType archive' refer to the set of files originally + distributed by the authors (David Turner, Robert Wilhelm, and + Werner Lemberg) as the `FreeType Project', be they named as alpha, + beta or final release. + + `You' refers to the licensee, or person using the project, where + `using' is a generic term including compiling the project's source + code as well as linking it to form a `program' or `executable'. + This program is referred to as `a program using the FreeType + engine'. + + This license applies to all files distributed in the original + FreeType Project, including all source code, binaries and + documentation, unless otherwise stated in the file in its + original, unmodified form as distributed in the original archive. + If you are unsure whether or not a particular file is covered by + this license, you must contact us to verify this. + + The FreeType Project is copyright (C) 1996-2000 by David Turner, + Robert Wilhelm, and Werner Lemberg. All rights reserved except as + specified below. + +1. No Warranty +-------------- + + THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO + USE, OF THE FREETYPE PROJECT. + +2. Redistribution +----------------- + + This license grants a worldwide, royalty-free, perpetual and + irrevocable right and license to use, execute, perform, compile, + display, copy, create derivative works of, distribute and + sublicense the FreeType Project (in both source and object code + forms) and derivative works thereof for any purpose; and to + authorize others to exercise some or all of the rights granted + herein, subject to the following conditions: + + o Redistribution of source code must retain this license file + (`FTL.TXT') unaltered; any additions, deletions or changes to + the original files must be clearly indicated in accompanying + documentation. The copyright notices of the unaltered, + original files must be preserved in all copies of source + files. + + o Redistribution in binary form must provide a disclaimer that + states that the software is based in part of the work of the + FreeType Team, in the distribution documentation. We also + encourage you to put an URL to the FreeType web page in your + documentation, though this isn't mandatory. + + These conditions apply to any software derived from or based on + the FreeType Project, not just the unmodified files. If you use + our work, you must acknowledge us. However, no fee need be paid + to us. + +3. Advertising +-------------- + + Neither the FreeType authors and contributors nor you shall use + the name of the other for commercial, advertising, or promotional + purposes without specific prior written permission. + + We suggest, but do not require, that you use one or more of the + following phrases to refer to this software in your documentation + or advertising materials: `FreeType Project', `FreeType Engine', + `FreeType library', or `FreeType Distribution'. + + As you have not signed this license, you are not required to + accept it. However, as the FreeType Project is copyrighted + material, only this license, or another one contracted with the + authors, grants you the right to use, distribute, and modify it. + Therefore, by using, distributing, or modifying the FreeType + Project, you indicate that you understand and accept all the terms + of this license. + +4. Contacts +----------- + + There are two mailing lists related to FreeType: + + o freetype@nongnu.org + + Discusses general use and applications of FreeType, as well as + future and wanted additions to the library and distribution. + If you are looking for support, start in this list if you + haven't found anything to help you in the documentation. + + o freetype-devel@nongnu.org + + Discusses bugs, as well as engine internals, design issues, + specific licenses, porting, etc. + + Our home page can be found at + + http://www.freetype.org + + +--- end of FTL.TXT --- diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/_CodeSignature/CodeResources b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/_CodeSignature/CodeResources new file mode 100644 index 00000000..6ac49877 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/A/_CodeSignature/CodeResources @@ -0,0 +1,500 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>files</key> + <dict> + <key>Resources/English.lproj/InfoPlist.strings</key> + <dict> + <key>hash</key> + <data> + HVTFMg5638sbz7hs64liIWXohnM= + </data> + <key>optional</key> + <true/> + </dict> + <key>Resources/Info.plist</key> + <data> + 1FPRdIH76VylC1rjdLR7Ib9yAoY= + </data> + <key>Resources/LICENSE.freetype.txt</key> + <data> + CFzqT4LNMTCORxPV3xOqm66oAiE= + </data> + </dict> + <key>files2</key> + <dict> + <key>Headers/freetype/config/ftconfig.h</key> + <dict> + <key>hash2</key> + <data> + ii44OqswYCZ6O0mV6QCSeeWVuaMkyM1jvxqrfz8j9+c= + </data> + </dict> + <key>Headers/freetype/config/ftheader.h</key> + <dict> + <key>hash2</key> + <data> + ZIac2Y0iUDl8dlOgUE7SULllneCynoxFg6Zb6CgTl0U= + </data> + </dict> + <key>Headers/freetype/config/ftmodule.h</key> + <dict> + <key>hash2</key> + <data> + Dgadi2klZ5YqXd2DIzPHkV7YqXbKCNLaAXtk4AGraDQ= + </data> + </dict> + <key>Headers/freetype/config/ftoption.h</key> + <dict> + <key>hash2</key> + <data> + cLtqqTwQOSF/l8qW6XxWknhV1K+ZT4mmMv2/t45whu0= + </data> + </dict> + <key>Headers/freetype/config/ftstdlib.h</key> + <dict> + <key>hash2</key> + <data> + 7/e0zUfA367udzTP+hig27CYl6UzL5VhkDhFfQVonJA= + </data> + </dict> + <key>Headers/freetype/freetype.h</key> + <dict> + <key>hash2</key> + <data> + +uISfLymGZkItfm2ygWogZ9K3SpANjSl/G75a3235Ds= + </data> + </dict> + <key>Headers/freetype/ftadvanc.h</key> + <dict> + <key>hash2</key> + <data> + N3Ti1qyvARnQvYwEf6FzrzcAbOOgvIOJsABCrWqPRTM= + </data> + </dict> + <key>Headers/freetype/ftbbox.h</key> + <dict> + <key>hash2</key> + <data> + gF7Ga4aLvykJ0vfhq5LDagey+UXMFnzwjgICfEwqZ2k= + </data> + </dict> + <key>Headers/freetype/ftbdf.h</key> + <dict> + <key>hash2</key> + <data> + aJnf99F/B/HSKg6TaI3jfQ0udwzN+InlQcISSzSpdRM= + </data> + </dict> + <key>Headers/freetype/ftbitmap.h</key> + <dict> + <key>hash2</key> + <data> + 7AnoE1mGHNF5bMLIPRt0CKMZ5QUU77xk3G4S6xlNZck= + </data> + </dict> + <key>Headers/freetype/ftbzip2.h</key> + <dict> + <key>hash2</key> + <data> + XHkOvZAhM9wsyMFA0ITNGrqzzsxf4Ux7fi3aN586I+M= + </data> + </dict> + <key>Headers/freetype/ftcache.h</key> + <dict> + <key>hash2</key> + <data> + j5gEshUTm2hssVVRarOMc6QlOGn7B833x+PCJ4k/guE= + </data> + </dict> + <key>Headers/freetype/ftchapters.h</key> + <dict> + <key>hash2</key> + <data> + 4HmrUDpT5dkppdiu1Uaz/ok1BI+VBZNifNYzqi+eDg8= + </data> + </dict> + <key>Headers/freetype/ftcid.h</key> + <dict> + <key>hash2</key> + <data> + /IMl/nBy+tSpEiT56uk0mFFHwgJTb6DlaHSdT7zn1+Y= + </data> + </dict> + <key>Headers/freetype/ftdriver.h</key> + <dict> + <key>hash2</key> + <data> + bx4DfXGnBYxWlbBkLSOtwylHiNSFhhqzvEwb1OpZtpQ= + </data> + </dict> + <key>Headers/freetype/fterrdef.h</key> + <dict> + <key>hash2</key> + <data> + G8LZMdG2OIa/PAVZgMnBVjTGDFtIpwjBa5R5DpAw4no= + </data> + </dict> + <key>Headers/freetype/fterrors.h</key> + <dict> + <key>hash2</key> + <data> + uKfe6Zh5qziNihWlB4z0zxf4ca0GuRSxC8TXA9iXo44= + </data> + </dict> + <key>Headers/freetype/ftfntfmt.h</key> + <dict> + <key>hash2</key> + <data> + hv9Jwwvs2cC3pAkiKIovkwqUjDfy77K7C5OVO+cKHDk= + </data> + </dict> + <key>Headers/freetype/ftgasp.h</key> + <dict> + <key>hash2</key> + <data> + hP8nOIRJQfiv7Ul+rFG83qsYoDeytmB88uTwpBS4q8g= + </data> + </dict> + <key>Headers/freetype/ftglyph.h</key> + <dict> + <key>hash2</key> + <data> + 8kmQULsTZAMEtU9XBsG2LA5vonm9xVNY+PKBQzZZzAQ= + </data> + </dict> + <key>Headers/freetype/ftgxval.h</key> + <dict> + <key>hash2</key> + <data> + qcJ2HMYFwDvB98mK1KnPXXPYqhGKWhHTLq5nvSanRsg= + </data> + </dict> + <key>Headers/freetype/ftgzip.h</key> + <dict> + <key>hash2</key> + <data> + T4cjM0y69/j98GOuLdpDHQbs/QEKiXb8ktgmlh6Om3g= + </data> + </dict> + <key>Headers/freetype/ftimage.h</key> + <dict> + <key>hash2</key> + <data> + 1NsVTUw62v0nBw3QXS7IvLUpFup94yVcjdBx6tRc6ec= + </data> + </dict> + <key>Headers/freetype/ftincrem.h</key> + <dict> + <key>hash2</key> + <data> + YnjDytEzybejBlqoV7xCBBI8ptd/HT+Nv/wxtCZrMZY= + </data> + </dict> + <key>Headers/freetype/ftlcdfil.h</key> + <dict> + <key>hash2</key> + <data> + JgRBRSSxe/1fypki4av8CifYntpOVC15heRG6ZNocO8= + </data> + </dict> + <key>Headers/freetype/ftlist.h</key> + <dict> + <key>hash2</key> + <data> + P0GFjO3Hu3GbxFSKjKXHer0DkKIRV3UL/T09m9cb3hE= + </data> + </dict> + <key>Headers/freetype/ftlzw.h</key> + <dict> + <key>hash2</key> + <data> + Sp2MQZOJOx2Tk58bCYvbqC3shMbzWR7glJknKhJT5VE= + </data> + </dict> + <key>Headers/freetype/ftmac.h</key> + <dict> + <key>hash2</key> + <data> + MKJAKPBAwhAHUkwylq3C+uiWlu96rBTvU4dd3buCAws= + </data> + </dict> + <key>Headers/freetype/ftmm.h</key> + <dict> + <key>hash2</key> + <data> + qW/nFZKHVt5BzjG9OQdVUO7TpCK1BSvQufrxXOmM68U= + </data> + </dict> + <key>Headers/freetype/ftmodapi.h</key> + <dict> + <key>hash2</key> + <data> + FQAOqPdHcDKU0FmTixf6CyWA7zu629vOTRYB4pdCmN0= + </data> + </dict> + <key>Headers/freetype/ftmoderr.h</key> + <dict> + <key>hash2</key> + <data> + b0NkwkaD+I3TaNC6xa5GEA5309p9LHb/07THyXRivwo= + </data> + </dict> + <key>Headers/freetype/ftotval.h</key> + <dict> + <key>hash2</key> + <data> + i1tVudMs2cuyLiOTJX7IbliBBl9lT7pM2tU3c2z+Zys= + </data> + </dict> + <key>Headers/freetype/ftoutln.h</key> + <dict> + <key>hash2</key> + <data> + fnIqqoWkXFiEPotq+o7wSN1jnrROZLonySBf6Ypwhbs= + </data> + </dict> + <key>Headers/freetype/ftparams.h</key> + <dict> + <key>hash2</key> + <data> + KsIc+RhBt7zaa3/0XcKe8RTnHtyUhET/rxufmSPivGc= + </data> + </dict> + <key>Headers/freetype/ftpfr.h</key> + <dict> + <key>hash2</key> + <data> + 8svWMbEW5Zb8FbQO86jcB8wA9lo1LmZ2Yla4l7Qag5M= + </data> + </dict> + <key>Headers/freetype/ftrender.h</key> + <dict> + <key>hash2</key> + <data> + f1Dkxs0msHFJumAnSyuWY7jw4uugZW4xkgwPiNM4whI= + </data> + </dict> + <key>Headers/freetype/ftsizes.h</key> + <dict> + <key>hash2</key> + <data> + L8VaJOH/FNHCqAUAIGOXBS8/e9Ux2NF1i1l4Fey2BTU= + </data> + </dict> + <key>Headers/freetype/ftsnames.h</key> + <dict> + <key>hash2</key> + <data> + L5l/ckLRcykw13cXi2i1+6VXmB+NbAO+qiQLGPoqrxA= + </data> + </dict> + <key>Headers/freetype/ftstroke.h</key> + <dict> + <key>hash2</key> + <data> + 8VEOnPE0AIpRbAwWRZWru4ApDVXTBM9i29X7kx4/I9Q= + </data> + </dict> + <key>Headers/freetype/ftsynth.h</key> + <dict> + <key>hash2</key> + <data> + T6ArKW3lj+8axy3kJr2E3bM019R4Cys0JQHTAhDp1bk= + </data> + </dict> + <key>Headers/freetype/ftsystem.h</key> + <dict> + <key>hash2</key> + <data> + KhdFdd7T5vnqi6BG8x36oDzFL6Fvt0mMg/g/BUu3Ddo= + </data> + </dict> + <key>Headers/freetype/fttrigon.h</key> + <dict> + <key>hash2</key> + <data> + MYzKF2xDzzkmZjud5RxghGPEfzzeXq22puQuuoca+z4= + </data> + </dict> + <key>Headers/freetype/fttypes.h</key> + <dict> + <key>hash2</key> + <data> + BxrNb/QHOaTm7KHw4sni0mYiUNLXdTHv3QHNUzLn6NQ= + </data> + </dict> + <key>Headers/freetype/ftwinfnt.h</key> + <dict> + <key>hash2</key> + <data> + PaZmX8yotzM/STNOeOV+O3M+lY93iWytoCRdfPDGSAI= + </data> + </dict> + <key>Headers/freetype/t1tables.h</key> + <dict> + <key>hash2</key> + <data> + rdyBqfN1wCaaH9uKuIgdo33eyv32Dc4jtxoAjyfkb/Q= + </data> + </dict> + <key>Headers/freetype/ttnameid.h</key> + <dict> + <key>hash2</key> + <data> + fsj4W7TJ8cznJ/qkmNrJUxEz/CxZskpm9gVIB2h1dVw= + </data> + </dict> + <key>Headers/freetype/tttables.h</key> + <dict> + <key>hash2</key> + <data> + cR9gEaRNfOCraWLZ4GhI69ryrkrzF5ze8FgfecVedh4= + </data> + </dict> + <key>Headers/freetype/tttags.h</key> + <dict> + <key>hash2</key> + <data> + /1A7piohdzpWBACeIvNwtc32AvuW30fgCqlSuSualIo= + </data> + </dict> + <key>Headers/ft2build.h</key> + <dict> + <key>hash2</key> + <data> + 7d2Bo9BdTHC7uz/IkAU9Edj9EWtopYhYwD3KtQJMDeU= + </data> + </dict> + <key>Resources/English.lproj/InfoPlist.strings</key> + <dict> + <key>hash2</key> + <data> + pye1r8MDxlZwdXGVcJXkL7yCWVUL2EBKaPwboOik/Ys= + </data> + <key>optional</key> + <true/> + </dict> + <key>Resources/Info.plist</key> + <dict> + <key>hash2</key> + <data> + LgLWiOAfeKfElgJRbXLL9cgzUidG06AqyWs5IvYZyvg= + </data> + </dict> + <key>Resources/LICENSE.freetype.txt</key> + <dict> + <key>hash2</key> + <data> + fovJndE7TC9qX3uBKeu1a+/6GIyAwTQSeqtkzn9T0iU= + </data> + </dict> + </dict> + <key>rules</key> + <dict> + <key>^Resources/</key> + <true/> + <key>^Resources/.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^Resources/.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Resources/Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^version.plist$</key> + <true/> + </dict> + <key>rules2</key> + <dict> + <key>.*\.dSYM($|/)</key> + <dict> + <key>weight</key> + <real>11</real> + </dict> + <key>^(.*/)?\.DS_Store$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>2000</real> + </dict> + <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key> + <dict> + <key>nested</key> + <true/> + <key>weight</key> + <real>10</real> + </dict> + <key>^.*</key> + <true/> + <key>^Info\.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^PkgInfo$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^Resources/</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + <key>^Resources/.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^Resources/.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Resources/Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^[^/]+$</key> + <dict> + <key>nested</key> + <true/> + <key>weight</key> + <real>10</real> + </dict> + <key>^embedded\.provisionprofile$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + <key>^version\.plist$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + </dict> +</dict> +</plist> diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/Current b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/Current new file mode 120000 index 00000000..8c7e5a66 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Frameworks/FreeType.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Headers/SDL_ttf.h b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Headers/SDL_ttf.h new file mode 100644 index 00000000..d3681d1d --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Headers/SDL_ttf.h @@ -0,0 +1,294 @@ +/* + SDL_ttf: A companion library to SDL for working with TrueType (tm) fonts + Copyright (C) 2001-2019 Sam Lantinga <slouken@libsdl.org> + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* This library is a wrapper around the excellent FreeType 2.0 library, + available at: + http://www.freetype.org/ +*/ + +/* Note: In many places, SDL_ttf will say "glyph" when it means "code point." + Unicode is hard, we learn as we go, and we apologize for adding to the + confusion. */ + +#ifndef SDL_TTF_H_ +#define SDL_TTF_H_ + +#include <SDL.h> +#include <begin_code.h> + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_TTF_MAJOR_VERSION 2 +#define SDL_TTF_MINOR_VERSION 0 +#define SDL_TTF_PATCHLEVEL 15 + +/* This macro can be used to fill a version structure with the compile-time + * version of the SDL_ttf library. + */ +#define SDL_TTF_VERSION(X) \ +{ \ + (X)->major = SDL_TTF_MAJOR_VERSION; \ + (X)->minor = SDL_TTF_MINOR_VERSION; \ + (X)->patch = SDL_TTF_PATCHLEVEL; \ +} + +/* Backwards compatibility */ +#define TTF_MAJOR_VERSION SDL_TTF_MAJOR_VERSION +#define TTF_MINOR_VERSION SDL_TTF_MINOR_VERSION +#define TTF_PATCHLEVEL SDL_TTF_PATCHLEVEL +#define TTF_VERSION(X) SDL_TTF_VERSION(X) + +/** + * This is the version number macro for the current SDL_ttf version. + */ +#define SDL_TTF_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_TTF_MAJOR_VERSION, SDL_TTF_MINOR_VERSION, SDL_TTF_PATCHLEVEL) + +/** + * This macro will evaluate to true if compiled with SDL_ttf at least X.Y.Z. + */ +#define SDL_TTF_VERSION_ATLEAST(X, Y, Z) \ + (SDL_TTF_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) + +/* Make sure this is defined (only available in newer SDL versions) */ +#ifndef SDL_DEPRECATED +#define SDL_DEPRECATED +#endif + +/* This function gets the version of the dynamically linked SDL_ttf library. + it should NOT be used to fill a version structure, instead you should + use the SDL_TTF_VERSION() macro. + */ +extern DECLSPEC const SDL_version * SDLCALL TTF_Linked_Version(void); + +/* ZERO WIDTH NO-BREAKSPACE (Unicode byte order mark) */ +#define UNICODE_BOM_NATIVE 0xFEFF +#define UNICODE_BOM_SWAPPED 0xFFFE + +/* This function tells the library whether UNICODE text is generally + byteswapped. A UNICODE BOM character in a string will override + this setting for the remainder of that string. +*/ +extern DECLSPEC void SDLCALL TTF_ByteSwappedUNICODE(int swapped); + +/* The internal structure containing font information */ +typedef struct _TTF_Font TTF_Font; + +/* Initialize the TTF engine - returns 0 if successful, -1 on error */ +extern DECLSPEC int SDLCALL TTF_Init(void); + +/* Open a font file and create a font of the specified point size. + * Some .fon fonts will have several sizes embedded in the file, so the + * point size becomes the index of choosing which size. If the value + * is too high, the last indexed size will be the default. */ +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFont(const char *file, int ptsize); +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndex(const char *file, int ptsize, long index); +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontRW(SDL_RWops *src, int freesrc, int ptsize); +extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndexRW(SDL_RWops *src, int freesrc, int ptsize, long index); + +/* Set and retrieve the font style */ +#define TTF_STYLE_NORMAL 0x00 +#define TTF_STYLE_BOLD 0x01 +#define TTF_STYLE_ITALIC 0x02 +#define TTF_STYLE_UNDERLINE 0x04 +#define TTF_STYLE_STRIKETHROUGH 0x08 +extern DECLSPEC int SDLCALL TTF_GetFontStyle(const TTF_Font *font); +extern DECLSPEC void SDLCALL TTF_SetFontStyle(TTF_Font *font, int style); +extern DECLSPEC int SDLCALL TTF_GetFontOutline(const TTF_Font *font); +extern DECLSPEC void SDLCALL TTF_SetFontOutline(TTF_Font *font, int outline); + +/* Set and retrieve FreeType hinter settings */ +#define TTF_HINTING_NORMAL 0 +#define TTF_HINTING_LIGHT 1 +#define TTF_HINTING_MONO 2 +#define TTF_HINTING_NONE 3 +extern DECLSPEC int SDLCALL TTF_GetFontHinting(const TTF_Font *font); +extern DECLSPEC void SDLCALL TTF_SetFontHinting(TTF_Font *font, int hinting); + +/* Get the total height of the font - usually equal to point size */ +extern DECLSPEC int SDLCALL TTF_FontHeight(const TTF_Font *font); + +/* Get the offset from the baseline to the top of the font + This is a positive value, relative to the baseline. + */ +extern DECLSPEC int SDLCALL TTF_FontAscent(const TTF_Font *font); + +/* Get the offset from the baseline to the bottom of the font + This is a negative value, relative to the baseline. + */ +extern DECLSPEC int SDLCALL TTF_FontDescent(const TTF_Font *font); + +/* Get the recommended spacing between lines of text for this font */ +extern DECLSPEC int SDLCALL TTF_FontLineSkip(const TTF_Font *font); + +/* Get/Set whether or not kerning is allowed for this font */ +extern DECLSPEC int SDLCALL TTF_GetFontKerning(const TTF_Font *font); +extern DECLSPEC void SDLCALL TTF_SetFontKerning(TTF_Font *font, int allowed); + +/* Get the number of faces of the font */ +extern DECLSPEC long SDLCALL TTF_FontFaces(const TTF_Font *font); + +/* Get the font face attributes, if any */ +extern DECLSPEC int SDLCALL TTF_FontFaceIsFixedWidth(const TTF_Font *font); +extern DECLSPEC char * SDLCALL TTF_FontFaceFamilyName(const TTF_Font *font); +extern DECLSPEC char * SDLCALL TTF_FontFaceStyleName(const TTF_Font *font); + +/* Check wether a glyph is provided by the font or not */ +extern DECLSPEC int SDLCALL TTF_GlyphIsProvided(const TTF_Font *font, Uint16 ch); + +/* Get the metrics (dimensions) of a glyph + To understand what these metrics mean, here is a useful link: + http://freetype.sourceforge.net/freetype2/docs/tutorial/step2.html + */ +extern DECLSPEC int SDLCALL TTF_GlyphMetrics(TTF_Font *font, Uint16 ch, + int *minx, int *maxx, + int *miny, int *maxy, int *advance); + +/* Get the dimensions of a rendered string of text */ +extern DECLSPEC int SDLCALL TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h); +extern DECLSPEC int SDLCALL TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h); +extern DECLSPEC int SDLCALL TTF_SizeUNICODE(TTF_Font *font, const Uint16 *text, int *w, int *h); + +/* Create an 8-bit palettized surface and render the given text at + fast quality with the given font and color. The 0 pixel is the + colorkey, giving a transparent background, and the 1 pixel is set + to the text color. + This function returns the new surface, or NULL if there was an error. +*/ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Solid(TTF_Font *font, + const char *text, SDL_Color fg); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Solid(TTF_Font *font, + const char *text, SDL_Color fg); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Solid(TTF_Font *font, + const Uint16 *text, SDL_Color fg); + +/* Create an 8-bit palettized surface and render the given glyph at + fast quality with the given font and color. The 0 pixel is the + colorkey, giving a transparent background, and the 1 pixel is set + to the text color. The glyph is rendered without any padding or + centering in the X direction, and aligned normally in the Y direction. + This function returns the new surface, or NULL if there was an error. +*/ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Solid(TTF_Font *font, + Uint16 ch, SDL_Color fg); + +/* Create an 8-bit palettized surface and render the given text at + high quality with the given font and colors. The 0 pixel is background, + while other pixels have varying degrees of the foreground color. + This function returns the new surface, or NULL if there was an error. +*/ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Shaded(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Shaded(TTF_Font *font, + const char *text, SDL_Color fg, SDL_Color bg); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Shaded(TTF_Font *font, + const Uint16 *text, SDL_Color fg, SDL_Color bg); + +/* Create an 8-bit palettized surface and render the given glyph at + high quality with the given font and colors. The 0 pixel is background, + while other pixels have varying degrees of the foreground color. + The glyph is rendered without any padding or centering in the X + direction, and aligned normally in the Y direction. + This function returns the new surface, or NULL if there was an error. +*/ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Shaded(TTF_Font *font, + Uint16 ch, SDL_Color fg, SDL_Color bg); + +/* Create a 32-bit ARGB surface and render the given text at high quality, + using alpha blending to dither the font with the given color. + This function returns the new surface, or NULL if there was an error. +*/ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Blended(TTF_Font *font, + const char *text, SDL_Color fg); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Blended(TTF_Font *font, + const char *text, SDL_Color fg); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Blended(TTF_Font *font, + const Uint16 *text, SDL_Color fg); + + +/* Create a 32-bit ARGB surface and render the given text at high quality, + using alpha blending to dither the font with the given color. + Text is wrapped to multiple lines on line endings and on word boundaries + if it extends beyond wrapLength in pixels. + This function returns the new surface, or NULL if there was an error. +*/ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Blended_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, Uint32 wrapLength); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Blended_Wrapped(TTF_Font *font, + const char *text, SDL_Color fg, Uint32 wrapLength); +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Blended_Wrapped(TTF_Font *font, + const Uint16 *text, SDL_Color fg, Uint32 wrapLength); + +/* Create a 32-bit ARGB surface and render the given glyph at high quality, + using alpha blending to dither the font with the given color. + The glyph is rendered without any padding or centering in the X + direction, and aligned normally in the Y direction. + This function returns the new surface, or NULL if there was an error. +*/ +extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Blended(TTF_Font *font, + Uint16 ch, SDL_Color fg); + +/* For compatibility with previous versions, here are the old functions */ +#define TTF_RenderText(font, text, fg, bg) \ + TTF_RenderText_Shaded(font, text, fg, bg) +#define TTF_RenderUTF8(font, text, fg, bg) \ + TTF_RenderUTF8_Shaded(font, text, fg, bg) +#define TTF_RenderUNICODE(font, text, fg, bg) \ + TTF_RenderUNICODE_Shaded(font, text, fg, bg) + +/* Close an opened font file */ +extern DECLSPEC void SDLCALL TTF_CloseFont(TTF_Font *font); + +/* De-initialize the TTF engine */ +extern DECLSPEC void SDLCALL TTF_Quit(void); + +/* Check if the TTF engine is initialized */ +extern DECLSPEC int SDLCALL TTF_WasInit(void); + +/* Get the kerning size of two glyphs indices */ +/* DEPRECATED: this function requires FreeType font indexes, not glyphs, + by accident, which we don't expose through this API, so it could give + wildly incorrect results, especially with non-ASCII values. + Going forward, please use TTF_GetFontKerningSizeGlyphs() instead, which + does what you probably expected this function to do. */ +extern DECLSPEC int TTF_GetFontKerningSize(TTF_Font *font, int prev_index, int index) SDL_DEPRECATED; + +/* Get the kerning size of two glyphs */ +extern DECLSPEC int TTF_GetFontKerningSizeGlyphs(TTF_Font *font, Uint16 previous_ch, Uint16 ch); + +/* We'll use SDL for reporting errors */ +#define TTF_SetError SDL_SetError +#define TTF_GetError SDL_GetError + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include <close_code.h> + +#endif /* SDL_TTF_H_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Resources/Info.plist b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Resources/Info.plist new file mode 100644 index 00000000..8f0e4ff2 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>BuildMachineOSBuild</key> + <string>18C54</string> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>SDL2_ttf</string> + <key>CFBundleIdentifier</key> + <string>org.libsdl.SDL2-ttf</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>SDL2_ttf</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>2.0.15</string> + <key>CFBundleSupportedPlatforms</key> + <array> + <string>MacOSX</string> + </array> + <key>CFBundleVersion</key> + <string>2.0.15</string> + <key>DTCompiler</key> + <string>com.apple.compilers.llvm.clang.1_0</string> + <key>DTPlatformBuild</key> + <string>10B61</string> + <key>DTPlatformVersion</key> + <string>GM</string> + <key>DTSDKBuild</key> + <string>18B71</string> + <key>DTSDKName</key> + <string>macosx10.14</string> + <key>DTXcode</key> + <string>1010</string> + <key>DTXcodeBuild</key> + <string>10B61</string> +</dict> +</plist> diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/SDL2_ttf b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/SDL2_ttf new file mode 100755 index 0000000000000000000000000000000000000000..8da339d56cdc52a392bec7c293bdb1648dfd2d63 GIT binary patch literal 48848 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 literal 0 HcmV?d00001 diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/_CodeSignature/CodeResources b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/_CodeSignature/CodeResources new file mode 100644 index 00000000..08533676 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/_CodeSignature/CodeResources @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>files</key> + <dict> + <key>Resources/Info.plist</key> + <data> + IfLC5JMCapmKtefZrmJcxZV4NMA= + </data> + </dict> + <key>files2</key> + <dict> + <key>Frameworks/FreeType.framework</key> + <dict> + <key>cdhash</key> + <data> + 7QiXe3F/Kkx1E+Qs7nq27ZOleU4= + </data> + <key>requirement</key> + <string>identifier FreeType and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "45U78722YL"</string> + </dict> + <key>Headers/SDL_ttf.h</key> + <dict> + <key>hash</key> + <data> + wuhCDit3v14GFg2+LWc+UTKSKsE= + </data> + <key>hash2</key> + <data> + T1XsXFvOExAvEeSokWuDjAxPzjfUhdYqMQ7oVafG/Ug= + </data> + </dict> + <key>Resources/Info.plist</key> + <dict> + <key>hash</key> + <data> + IfLC5JMCapmKtefZrmJcxZV4NMA= + </data> + <key>hash2</key> + <data> + /IL1YRtl9s1fvhfRZrQYffaUK0FTRX5NjUZY5ahDouY= + </data> + </dict> + </dict> + <key>rules</key> + <dict> + <key>^Resources/</key> + <true/> + <key>^Resources/.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^Resources/.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Resources/Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^version.plist$</key> + <true/> + </dict> + <key>rules2</key> + <dict> + <key>.*\.dSYM($|/)</key> + <dict> + <key>weight</key> + <real>11</real> + </dict> + <key>^(.*/)?\.DS_Store$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>2000</real> + </dict> + <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key> + <dict> + <key>nested</key> + <true/> + <key>weight</key> + <real>10</real> + </dict> + <key>^.*</key> + <true/> + <key>^Info\.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^PkgInfo$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^Resources/</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + <key>^Resources/.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^Resources/.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Resources/Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^[^/]+$</key> + <dict> + <key>nested</key> + <true/> + <key>weight</key> + <real>10</real> + </dict> + <key>^embedded\.provisionprofile$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + <key>^version\.plist$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + </dict> +</dict> +</plist> diff --git a/libs/mac/Frameworks/SDL2_ttf.framework/Versions/Current b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/Current new file mode 120000 index 00000000..8c7e5a66 --- /dev/null +++ b/libs/mac/Frameworks/SDL2_ttf.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file