From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- modules/freetype2/docs/CHANGES | 4694 ++++++++++++++++++++ modules/freetype2/docs/CMAKE | 2 + modules/freetype2/docs/CUSTOMIZE | 152 + modules/freetype2/docs/DEBUG | 204 + modules/freetype2/docs/FTL.TXT | 169 + modules/freetype2/docs/GPLv2.TXT | 340 ++ modules/freetype2/docs/INSTALL | 88 + modules/freetype2/docs/INSTALL.ANY | 156 + modules/freetype2/docs/INSTALL.CROSS | 177 + modules/freetype2/docs/INSTALL.GNU | 161 + modules/freetype2/docs/INSTALL.MAC | 32 + modules/freetype2/docs/INSTALL.UNIX | 115 + modules/freetype2/docs/INSTALL.VMS | 62 + modules/freetype2/docs/LICENSE.TXT | 39 + modules/freetype2/docs/MAKEPP | 5 + modules/freetype2/docs/PROBLEMS | 90 + modules/freetype2/docs/TODO | 40 + modules/freetype2/docs/VERSIONS.TXT | 123 + modules/freetype2/docs/formats.txt | 199 + modules/freetype2/docs/freetype-config.1 | 108 + modules/freetype2/docs/raster.txt | 635 +++ modules/freetype2/docs/reference/README | 5 + .../freetype2/docs/reference/ft2-auto_hinter.html | 420 ++ .../docs/reference/ft2-base_interface.html | 3053 +++++++++++++ .../freetype2/docs/reference/ft2-basic_types.html | 866 ++++ .../freetype2/docs/reference/ft2-bdf_fonts.html | 280 ++ .../docs/reference/ft2-bitmap_handling.html | 323 ++ modules/freetype2/docs/reference/ft2-bzip2.html | 149 + .../docs/reference/ft2-cache_subsystem.html | 1010 +++++ .../freetype2/docs/reference/ft2-cff_driver.html | 233 + .../freetype2/docs/reference/ft2-cid_fonts.html | 240 + .../freetype2/docs/reference/ft2-computations.html | 700 +++ .../docs/reference/ft2-error_code_values.html | 339 ++ .../docs/reference/ft2-error_enumerations.html | 144 + .../freetype2/docs/reference/ft2-font_formats.html | 147 + .../freetype2/docs/reference/ft2-gasp_table.html | 187 + .../docs/reference/ft2-glyph_management.html | 594 +++ .../docs/reference/ft2-glyph_stroker.html | 819 ++++ .../docs/reference/ft2-glyph_variants.html | 292 ++ .../docs/reference/ft2-gx_validation.html | 362 ++ modules/freetype2/docs/reference/ft2-gzip.html | 199 + .../docs/reference/ft2-header_file_macros.html | 739 +++ .../docs/reference/ft2-header_inclusion.html | 117 + .../freetype2/docs/reference/ft2-incremental.html | 387 ++ modules/freetype2/docs/reference/ft2-index.html | 385 ++ .../docs/reference/ft2-lcd_filtering.html | 247 + .../docs/reference/ft2-list_processing.html | 446 ++ modules/freetype2/docs/reference/ft2-lzw.html | 149 + .../freetype2/docs/reference/ft2-mac_specific.html | 374 ++ .../docs/reference/ft2-module_management.html | 779 ++++ .../docs/reference/ft2-multiple_masters.html | 570 +++ .../docs/reference/ft2-ot_validation.html | 247 + .../docs/reference/ft2-outline_processing.html | 968 ++++ .../freetype2/docs/reference/ft2-pfr_fonts.html | 242 + .../docs/reference/ft2-quick_advance.html | 224 + modules/freetype2/docs/reference/ft2-raster.html | 531 +++ .../freetype2/docs/reference/ft2-sfnt_names.html | 256 ++ .../docs/reference/ft2-sizes_management.html | 202 + .../docs/reference/ft2-system_interface.html | 405 ++ modules/freetype2/docs/reference/ft2-toc.html | 281 ++ .../docs/reference/ft2-truetype_engine.html | 175 + .../docs/reference/ft2-truetype_tables.html | 1174 +++++ .../freetype2/docs/reference/ft2-tt_driver.html | 258 ++ .../freetype2/docs/reference/ft2-type1_tables.html | 858 ++++ .../docs/reference/ft2-user_allocation.html | 110 + modules/freetype2/docs/reference/ft2-version.html | 251 ++ .../freetype2/docs/reference/ft2-winfnt_fonts.html | 310 ++ modules/freetype2/docs/release | 202 + 68 files changed, 28840 insertions(+) create mode 100644 modules/freetype2/docs/CHANGES create mode 100644 modules/freetype2/docs/CMAKE create mode 100644 modules/freetype2/docs/CUSTOMIZE create mode 100644 modules/freetype2/docs/DEBUG create mode 100644 modules/freetype2/docs/FTL.TXT create mode 100644 modules/freetype2/docs/GPLv2.TXT create mode 100644 modules/freetype2/docs/INSTALL create mode 100644 modules/freetype2/docs/INSTALL.ANY create mode 100644 modules/freetype2/docs/INSTALL.CROSS create mode 100644 modules/freetype2/docs/INSTALL.GNU create mode 100644 modules/freetype2/docs/INSTALL.MAC create mode 100644 modules/freetype2/docs/INSTALL.UNIX create mode 100644 modules/freetype2/docs/INSTALL.VMS create mode 100644 modules/freetype2/docs/LICENSE.TXT create mode 100644 modules/freetype2/docs/MAKEPP create mode 100644 modules/freetype2/docs/PROBLEMS create mode 100644 modules/freetype2/docs/TODO create mode 100644 modules/freetype2/docs/VERSIONS.TXT create mode 100644 modules/freetype2/docs/formats.txt create mode 100644 modules/freetype2/docs/freetype-config.1 create mode 100644 modules/freetype2/docs/raster.txt create mode 100644 modules/freetype2/docs/reference/README create mode 100644 modules/freetype2/docs/reference/ft2-auto_hinter.html create mode 100644 modules/freetype2/docs/reference/ft2-base_interface.html create mode 100644 modules/freetype2/docs/reference/ft2-basic_types.html create mode 100644 modules/freetype2/docs/reference/ft2-bdf_fonts.html create mode 100644 modules/freetype2/docs/reference/ft2-bitmap_handling.html create mode 100644 modules/freetype2/docs/reference/ft2-bzip2.html create mode 100644 modules/freetype2/docs/reference/ft2-cache_subsystem.html create mode 100644 modules/freetype2/docs/reference/ft2-cff_driver.html create mode 100644 modules/freetype2/docs/reference/ft2-cid_fonts.html create mode 100644 modules/freetype2/docs/reference/ft2-computations.html create mode 100644 modules/freetype2/docs/reference/ft2-error_code_values.html create mode 100644 modules/freetype2/docs/reference/ft2-error_enumerations.html create mode 100644 modules/freetype2/docs/reference/ft2-font_formats.html create mode 100644 modules/freetype2/docs/reference/ft2-gasp_table.html create mode 100644 modules/freetype2/docs/reference/ft2-glyph_management.html create mode 100644 modules/freetype2/docs/reference/ft2-glyph_stroker.html create mode 100644 modules/freetype2/docs/reference/ft2-glyph_variants.html create mode 100644 modules/freetype2/docs/reference/ft2-gx_validation.html create mode 100644 modules/freetype2/docs/reference/ft2-gzip.html create mode 100644 modules/freetype2/docs/reference/ft2-header_file_macros.html create mode 100644 modules/freetype2/docs/reference/ft2-header_inclusion.html create mode 100644 modules/freetype2/docs/reference/ft2-incremental.html create mode 100644 modules/freetype2/docs/reference/ft2-index.html create mode 100644 modules/freetype2/docs/reference/ft2-lcd_filtering.html create mode 100644 modules/freetype2/docs/reference/ft2-list_processing.html create mode 100644 modules/freetype2/docs/reference/ft2-lzw.html create mode 100644 modules/freetype2/docs/reference/ft2-mac_specific.html create mode 100644 modules/freetype2/docs/reference/ft2-module_management.html create mode 100644 modules/freetype2/docs/reference/ft2-multiple_masters.html create mode 100644 modules/freetype2/docs/reference/ft2-ot_validation.html create mode 100644 modules/freetype2/docs/reference/ft2-outline_processing.html create mode 100644 modules/freetype2/docs/reference/ft2-pfr_fonts.html create mode 100644 modules/freetype2/docs/reference/ft2-quick_advance.html create mode 100644 modules/freetype2/docs/reference/ft2-raster.html create mode 100644 modules/freetype2/docs/reference/ft2-sfnt_names.html create mode 100644 modules/freetype2/docs/reference/ft2-sizes_management.html create mode 100644 modules/freetype2/docs/reference/ft2-system_interface.html create mode 100644 modules/freetype2/docs/reference/ft2-toc.html create mode 100644 modules/freetype2/docs/reference/ft2-truetype_engine.html create mode 100644 modules/freetype2/docs/reference/ft2-truetype_tables.html create mode 100644 modules/freetype2/docs/reference/ft2-tt_driver.html create mode 100644 modules/freetype2/docs/reference/ft2-type1_tables.html create mode 100644 modules/freetype2/docs/reference/ft2-user_allocation.html create mode 100644 modules/freetype2/docs/reference/ft2-version.html create mode 100644 modules/freetype2/docs/reference/ft2-winfnt_fonts.html create mode 100644 modules/freetype2/docs/release (limited to 'modules/freetype2/docs') diff --git a/modules/freetype2/docs/CHANGES b/modules/freetype2/docs/CHANGES new file mode 100644 index 000000000..dccdb6e28 --- /dev/null +++ b/modules/freetype2/docs/CHANGES @@ -0,0 +1,4694 @@ + +CHANGES BETWEEN 2.7 and 2.7.1 + + I. IMPORTANT CHANGES + + - Support for the new CFF2 font format as introduced with OpenType + 1.8 has been contributed by Dave Arnolds from Adobe. + + - Preliminary support for variation fonts as specified in OpenType + 1.8 (in addition to the already existing support for Adobe's MM + and Apple's GX formats). Dave Arnolds contributed handling of + advance width change variation; more will come in the next + version. + + + II. IMPORTANT BUG FIXES + + - Handling of raw CID fonts was partially broken (bug introduced + in 2.6.4). + + + III. MISCELLANEOUS + + - Some limits for TrueType bytecode execution have been tightened + to speed up FreeType's handling of malformed fonts, in + particular to quickly abort endless loops. + + - The number of twilight points can no longer be set to an + arbitrarily large value. + + - The total number of jump opcode instructions (like JMPR) with + negative arguments is dynamically restricted; the same holds + for the total number of iterations in LOOPCALL opcodes. + + The dynamic limits are based on the number of points in a glyph + and the number of CVT entries. Please report if you encounter a + font where the selected values are not adequate. + + - PCF family names are made more `colourful'; they now include the + foundry and information whether they contain wide characters. + For example, you no longer get `Fixed' but rather `Sony Fixed' + or `Misc Fixed Wide'. + + - A new function `FT_Get_Var_Blend_Coordinates' (with its alias + name `FT_Get_MM_Blend_Coordinates') to retrieve the normalized + blend coordinates of the currently selected variation instance + has been added to the Multiple Masters interface. + + - A new function `FT_Get_Var_Design_Coordinates' to retrieve the + design coordinates of the currently selected variation instance + has been added to the Multiple Masters interface. + + - A new load flag `FT_LOAD_BITMAP_METRICS_ONLY' to retrieve bitmap + information without loading the (embedded) bitmap itself. + + - Retrieving advance widths from bitmap strikes (using + `FT_Get_Advance' and `FT_Get_Advances') have been sped up. + + - The usual round of fuzzer fixes to better reject malformed + fonts. + + - The `ftmulti' demo program can now switch engines with key `H'. + + - The `ftstring' demo program can now show some built-in, + non-latin sample strings (to be selected with the TAB key). + + - The `ftview' demo program can now switch between a font's + charmaps using the TAB key. + + +====================================================================== + +CHANGES BETWEEN 2.6.5 and 2.7 + + I. IMPORTANT CHANGES + + - As announced earlier, the 2.7.x series now uses the new subpixel + hinting mode as the default, emulating a modern version of + ClearType. + + This change inevitably leads to different rendering results, and + you might change the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' + configuration option to adapt it to your taste (or use the new + `FREETYPE_PROPERTIES' environment variable). See the + corresponding entry below for version 2.6.4, which gives more + information. + + - A new option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' has been + introduced. If set (which is the default), an environment + variable `FREETYPE_PROPERTIES' can be used to control driver + properties. Example: + + FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ + cff:no-stem-darkening=1 \ + autofitter:warping=1 + + This allows to select, say, the subpixel hinting mode at runtime + for a given application. See file `ftoption.h' for more. + + + II. IMPORTANT BUG FIXES + + - After loading a named instance of a GX variation font, the + `face_index' value in the returned `FT_Face' structure now + correctly holds the named instance index in the upper 16bits as + documented. + + + III. MISCELLANEOUS + + - A new macro `FT_IS_NAMED_INSTANCE' to test whether a given face + is a named instance. + + - More fixes to GX font handling. + + - Apple's `GETVARIATION' bytecode operator (needed for GX + variation font support) has been implemented. + + - Another round of fuzzer fixes, mainly to reject invalid fonts + faster. + + - Handling of raw CID fonts was broken (bug introduced in version + 2.6.4). + + - The smooth rasterizer has been streamlined to make it faster by + approx. 20%. + + - The `ftgrid' demo program now understands command line option + `-d' to give start-up design coordinates. + + - The `ftdump' demo program has a new command line option `-p' to + dump TrueType bytecode instructions. + + +====================================================================== + +CHANGES BETWEEN 2.6.4 and 2.6.5 + + I. IMPORTANT BUG FIXES + + - Compilation works again on Mac OS X (bug introduced in version + 2.6.4). + + + II. IMPORTANT CHANGES + + - The new subpixel hinting mode is now disabled by default; it + will be enabled by default in the forthcoming 2.7.x series. + Main reason for reverting this feature is the principle of least + surprise: a sudden change in appearance of all fonts (even if + the rendering improves for almost all recent fonts) should not + be expected in a new micro version of a series. + + +====================================================================== + +CHANGES BETWEEN 2.6.3 and 2.6.4 + + I. IMPORTANT CHANGES + + - A new subpixel hinting mode has been contributed by Nikolaus + Waxweiler, which is now the default rendering mode for TrueType + fonts. It implements (almost everything of) version 40 of the + bytecode engine. + + The existing code base in FreeType (the `Infinality code') 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. + + Activation of the subpixel hinting support can be controlled + with the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration + option at compile time: If set to value 1, you get the old + Infinality mode (which was never the default due to its + slowness). Value 2 activates the new subpixel hinting mode, and + value 3 activates both. The default is value 2. + + At run time, you can select the subpixel hinting mode with the + `interpreter-version' property (provided you have compiled in + the corresponding hinting mode); see `ftttdrv.h' for more. + + - Support for the following scripts has been added to the + auto-hinter. + + Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, + Malayalam, Sinhala, Tamil + + + II. MISCELLANEOUS + + - Type 42 fonts as created by LilyPond are now supported. + + - Minor rendering improvments in the auto-hinter. + + - For experimental reasons, the old CFF engine now supports all + CFF operators except `random', including the deprecated Multiple + Masters instructions. This allows the display of fonts like + `ITCGaramondMM-It.otf' (without font variations, though). + + - Another round of fixes to improve handling of invalid fonts. + + - The `ftgrid' demo program now displays the rendered pixels also; + this can be switched off with the `b' key. Selection of various + LCD filtering modes can be done with the `L' key. + + - The demo programs have been extended to allow selection of all + available TrueType bytecode engines. + + - A very early beta version of a new, Qt based demo program called + `ftinspect' is part of the source code bundle; it will + eventually supersede the other demo programs. Currently, you + have to compile it manually with `qmake; make'; note that many + features are still missing. + + +====================================================================== + +CHANGES BETWEEN 2.6.2 and 2.6.3 + + I. IMPORTANT CHANGES + + - Khmer, Myanmar, Bengali, and Kannada script support has been + added to the auto-hinter. + + + II. MISCELLANEOUS + + - Better support of Indic scripts like Devanagari by using a + top-to-bottom hinting flow. + + - All FreeType macros starting with two underscores have been + renamed to avoid a violation of both the C and C++ standards. + Example: Header macros of the form `__FOO_H__' are now called + `FOO_H_'. In most cases, this should be completely transparent + to the user. The exception to this is `__FTERRORS_H__', which + must be sometimes undefined by the user to get FreeType error + strings: Both this form and the new `FTERRORS_H_' macro are + accepted for backwards compatibility. + + - Minor improvements mainly to the Type 1 driver. + + - The new CFF engine now supports all Type 2 operators except + `random'. + + - The macro `_STANDALONE_', used for compiling the B/W and smooth + rasterizers as stand-alone modules, has been renamed to + `STANDALONE_', since macro names starting with an underscore and + followed by an uppercase letter are reserved in both C and C++. + + - Function `FT_Library_SetLcdFilterWeights' now also activates + custom LCD filter weights (instead of just adjusting them). + + - Support for `unpatented hinting' has been completely removed: + Consequently, the two functions `FT_Face_CheckTrueTypePatents' + and `FT_Face_SetUnpatentedHinting' now return always false, + doing nothing. + + - The `ftgamma' demo program has been modernized; the gamma grid + display has been moved from `ftview' to this program. + + - In `ftview', it is now possible to cycle through the available + LCD filtering modes. + + +====================================================================== + +CHANGES BETWEEN 2.6.1 and 2.6.2 + + I. IMPORTANT CHANGES + + - The auto-hinter now supports stem darkening, to be controlled by + the new `no-stem-darkening' and `darkening-parameters' + properties. This is an experimental feature contributed by + Nikolaus Waxweiler, and the interface might change in a future + release. + + - By default, stem darkening is now switched off (for both the CFF + engine and the auto-hinter). The main reason is that you need + linear alpha blending and gamma correction to get correct + rendering results, and the latter is not yet available in most + freely available rendering stacks like X11. Applying stem + darkening without proper gamma correction leads to far too dark + rendering results. + + - The meaning of `FT_RENDER_MODE_LIGHT' has been slightly + modified. It now essentially means `no hinting along the + horizontal axis'; in particular, no change of glyph advance + widths. Consequently, the auto-hinter is used for all scalable + font formats except for CFF. It is planned that other + font-specific rendering engines (TrueType, Type 1) will follow. + + + II. MISCELLANEOUS + + - The default LCD filter has been changed to be normalized and + color-balanced. + + - For better compatibility with FontConfig, function + `FT_Library_SetLcdFilter' accepts a new enumeration value + `FT_LCD_FILTER_LEGACY1' (which has the same meaning as + `FT_LCD_FILTER_LEGACY'). + + - A large number of bugs have been detected by using the libFuzzer + framework, which should further improve handling of invalid + fonts. Thanks again to Kostya Serebryany and Bungeman! + + - `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES', a new configuration + option, controls the maximum number of executed opcodes within a + bytecode program. 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). + + - The smooth renderer has been made faster. + + - The `ftstring' demo program now supports sub-pixel rendering; + use key `l' to cycle through the LCD modes. + + - The `ftstring' demo program now supports colour rendering; use + the `space' key to cycle through various colour combinations. + + - The graphical demo programs now use a default gamma value of 1.8 + (instead of 1.2). + + +====================================================================== + +CHANGES BETWEEN 2.6 and 2.6.1 + + I. IMPORTANT BUG FIXES + + - It turned out that for CFFs only the advance widths should be + taken from the `htmx' table, not the side bearings. This bug, + introduced in version 2.6.0, makes it necessary to upgrade if + you are using CFFs; otherwise, you get cropped glyphs with GUI + interfaces like GTK or Qt. + + - Accessing Type 42 fonts returned incorrect results if the glyph + order of the embedded TrueType font differs from the glyph order + of the Type 42 charstrings table. + + + II. IMPORTANT CHANGES + + - The header file layout has been changed (again), moving all + header files except `ft2build.h' into a subdirectory tree. + + Doing so reduces the possibility of header file name clashes + (e.g., FTGL's `FTGlyph.h' with FreeType's `ftglyph.h') on case + insensitive file systems like Mac OS X or Windows. + + Applications that use (a) the `freetype-config' script or + FreeType's `freetype2.pc' file for pkg-config to get the include + directory for the compiler, and (b) the documented way for + header inclusion like + + #include + #include FT_FREETYPE_H + ... + + don't need any change to the source code. + + - Simple access to named instances in GX variation fonts is now + available (in addition to the previous method via FreeType's MM + interface). In the `FT_Face' structure, bits 16-30 of the + `face_index' field hold the current named instance index for the + given face index, and bits 16-30 of `style_flags' contain the + number of instances for the given face index. `FT_Open_Face' + and friends also understand the extended bits of the face index + parameter. + + You need to enable TT_CONFIG_OPTION_GX_VAR_SUPPORT for this new + feature. Otherwise, bits 16-30 of the two fields are zero (or + are ignored). + + - Lao script support has been added to the auto-hinter. + + + III. MISCELLANEOUS + + - The auto-hinter's Arabic script support has been enhanced. + + - Superscript-like and subscript-like glyphs as used by various + phonetic alphabets like the IPA are now better supported by the + auto-hinter. + + - The TrueType bytecode interpreter now runs slightly faster. + + - Improved support for builds with cmake. + + - The function `FT_CeilFix' now always rounds towards plus + infinity. + + - The function `FT_FloorFix' now always rounds towards minus + infinity. + + - A new load flag `FT_LOAD_COMPUTE_METRICS' has been added; it + makes FreeType ignore pre-computed metrics, as needed by font + validating or font editing programs. Right now, only the + TrueType module supports it to ignore data from the `hdmx' + table. + + - Another round of bug fixes to better handle broken fonts, found + by Kostya Serebryany . + + +====================================================================== + +CHANGES BETWEEN 2.5.5 and 2.6 + + I. IMPORTANT CHANGES + + - Behdad Esfahbod contributed code for improved thread-safety, + which results in the following model. + + * An `FT_Face' object can only be safely used from one thread at + a time. + + * An `FT_Library' object can now be used without modification + from multiple threads at the same time. + + * `FT_Face' creation and destruction with the same `FT_Library' + object can only be done from one thread at a time. + + One can use a single `FT_Library' object across threads as long + as a mutex lock is used around `FT_New_Face' and `FT_Done_Face'. + Any calls to `FT_Load_Glyph' and similar API are safe and do not + need the lock to be held as long as the same `FT_Face' is not + used from multiple threads at the same time. + + - Thai script support has been added to the auto-hinter. + + - Arabic script support has been added to the auto-hinter. + + - Following OpenType version 1.7, advance widths and side bearing + values in CFFs (wrapped in an SFNT structure) are now always + taken from the `hmtx' table. + + - Following OpenType version 1.7, the PostScript font name of a + CFF font (wrapped in an SFNT structure) is now always taken from + the `name' table. This is also true for OpenType Collections + (i.e., TTCs using CFFs subfonts instead of TTFs), where it may + have a significant difference. + + - Fonts natively hinted for ClearType are now supported, properly + handling selector index 3 of the INSTCTRL bytecode instruction. + + - Major improvements to the GX TrueType variation font handling. + + + II. MISCELLANEOUS + + - A new auto-hinter property `warping' can switch on and off the + warping code if this experimental feature is compiled in (by + defining the AF_CONFIG_OPTION_USE_WARPER configuration option; + by default this option is now enabled but warping is switched + off). + + The AF_CONFIG_OPTION_USE_WARPER option itself is an old feature, + available since 2006. Warping only works in `light' + auto-hinting mode. The idea of the code is to slightly scale + and shift a glyph along the non-hinted dimension (which is + usually the horizontal axis) so that as much of its segments are + aligned (more or less) to the grid. To find out a glyph's + optimal scaling and shifting value, various parameter + combinations are tried and scored. + + See file `ftautoh.h' for more; the demo programs `ftdiff', + `ftview', and `ftgrid' can toggle warping with key `w'. + + - Some fields in the `FTC_ImageTypeRec' structure have been + changed from signed to unsigned type, which better reflects the + actual usage. It is also an additional means to protect against + malformed input. + + This change doesn't break the ABI; however, it might cause + compiler warnings. + + - Function `FT_Bitmap_New' has been renamed to `FT_Bitmap_Init', + since this name better reflects its function. For backwards + compatibility, the old function name is still available. + + - Function `FT_Get_X11_Font_Format' has been renamed to + `FT_Get_Font_Format', since this name better reflects its + function. For backwards compatibility, the old function name is + still available. + + Additionally, the header file macro for this function has been + renamed to `FT_FONT_FORMATS_H' (the old name `FT_XFREE86_H' is + retained for backwards compatibility). + + - Various improvements to the `ftgrid' demo program. + + . It can now display GX and MM fonts while interactively + manipulating the axes (with keys F2, F3, and F4). + + . Anti-aliasing rendering modes can now be selected (with keys + F5 and F6). + + . The display of point numbers can be toggled with key `D'. + + - Various improvements to the `ftdump' demo program. + + . It now displays information on MM and GX variation axes. + + . New command line option `-u' makes it output data in utf-8 + encoding. + + - The `ftmulti' demo program can now handle up to six MM or GX + axes. + + +====================================================================== + +CHANGES BETWEEN 2.5.4 and 2.5.5 + + I. IMPORTANT BUG FIXES + + - Handling of uncompressed PCF files works again (bug introduced + in version 2.5.4). + + +====================================================================== + +CHANGES BETWEEN 2.5.3 and 2.5.4 + + I. IMPORTANT BUG FIXES + + - A variant of vulnerability CVE-2014-2240 was identified + (cf. http://savannah.nongnu.org/bugs/?43661) and fixed in the + new CFF driver. All users should upgrade. + + - The new auto-hinter code using HarfBuzz crashed for some invalid + fonts. + + - Many fixes to better protect against malformed input. + + + II. IMPORTANT CHANGES + + - Full auto-hinter support of the Devanagari script. + + - Experimental auto-hinter support of the Telugu script. + + - CFF stem darkening behaviour can now be controlled at build time + using the eight macros + + CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} . + + - Some fields in the `FT_Bitmap' structure have been changed from + signed to unsigned type, which better reflects the actual usage. + It is also an additional means to protect against malformed + input. + + This change doesn't break the ABI; however, it might cause + compiler warnings. + + + III. MISCELLANEOUS + + - Improvements to the auto-hinter's algorithm to recognize stems + and local extrema. + + - Function `FT_Get_SubGlyph_Info' always returned an error even in + case of success. + + - Version 2.5.1 introduced major bugs in the cjk part of the + auto-hinter, which are now fixed. + + - The `FT_Sfnt_Tag' enumeration values have been changed to + uppercase, e.g. `FT_SFNT_HEAD'. The lowercase variants are + deprecated. This is for orthogonality with all other + enumeration (and enumeration-like) values in FreeType. + + - `cmake' now supports builds of FreeType as an OS X framework and + for iOS. + + - Improved project files for vc2010, introducing a property file. + + - The documentation generator for the API reference has been + updated to produce better HTML code (with proper CSS). At the + same time, the documentation got a better structure. + + - The FT_LOAD_BITMAP_CROP flag is obsolete; it is not used by any + driver. + + - The TrueType DELTAP[123] bytecode instructions now work in + subpixel hinting mode as described in the ClearType whitepaper + (i.e., for touched points in the non-subpixel direction). + + - Many small improvements to the internal arithmetic routines. + + +====================================================================== + +CHANGES BETWEEN 2.5.2 and 2.5.3 + + I. IMPORTANT BUG FIXES + + - A vulnerability (CVE-2014-2240) was identified and fixed in the + new CFF driver (cf. http://savannah.nongnu.org/bugs/?41697). + All users should upgrade. + + - More bug fixes related to correct positioning of composite + glyphs. + + - Many fixes to better protect against malformed input. + + + II. IMPORTANT CHANGES + + - FreeType can now use the HarfBuzz library to greatly improve the + auto-hinting of fonts that use OpenType features: Many glyphs + that are part of such features but don't have cmap entries are + now handled properly, for example small caps or superscripts. + Define the configuration macro FT_CONFIG_OPTION_USE_HARFBUZZ to + activate HarfBuzz support. + + You need HarfBuzz version 0.9.19 or newer. + + Note that HarfBuzz depends on FreeType; this currently causes a + chicken-and-egg problem that can be solved as follows in case + HarfBuzz is not yet installed on your system. + + 1. Compile and install FreeType without the configuration + macro FT_CONFIG_OPTION_USE_HARFBUZZ. + + 2. Compile and install HarfBuzz. + + 3. Define macro FT_CONFIG_OPTION_USE_HARFBUZZ, then compile + and install FreeType again. + + With FreeType's `configure' script the procedure boils down to + configure, build, and install Freetype, then configure, compile, + and install HarfBuzz, then configure, compile, and install + FreeType again (after executing `make distclean'). + + - All libraries FreeType depends on are now checked using the + `pkg-config' configuration files first, followed by alternative + methods. + + - The new value `auto' for the various `--with-XXX' library + options (for example `--with-harfbuzz=auto') makes the + `configure' script automatically link to the libraries it finds. + This is now the default. + + - In case FreeType's `configure' script can't find a library, you + can pass environment variables to circumvent pkg-config, and + those variables have been harmonized as a consequence of the + changes mentioned above: + + LIBZ -> removed; use LIBZ_CFLAGS and LIBZ_LIBS + LIBBZ2 -> removed; use BZIP2_CFLAGS and BZIP2_LIBS + LIBPNG_LDFLAGS -> LIBPNG_LIBS + + `./configure --help' shows all available environment variables. + + - The `freetype-config' script now understands option `--static' + to emit static linking information. + + +====================================================================== + +CHANGES BETWEEN 2.5.1 and 2.5.2 + + I. IMPORTANT BUG FIXES + + - Improving the display of some broken TrueType fonts introduced a + bug that made FreeType crash on some popular (but not fully + conformant) fonts like `ahronbd.ttf'. + + - Another round of improvements to correct positioning and hinting + of composite glyphs in TrueType fonts. + + + II. MISCELLANEOUS + + - Version 2.5.1 introduced a bug in handling embedded bitmap + strikes of TrueType fonts, causing garbage display under some + circumstances. + + - The `ftgrid' demo program couldn't be compiled in + non-development builds. + + +====================================================================== + +CHANGES BETWEEN 2.5 and 2.5.1 + + I. IMPORTANT BUG FIXES + + - For some WinFNT files, the last glyph wasn't displayed but + incorrectly marked as invalid. + + - The vertical size of glyphs was incorrectly set after a call to + `FT_GlyphSlot_Embolden', resulting in clipped glyphs. + + - Many fields of the `PCLT' table in SFNT based fonts (if accessed + with `FT_Get_Sfnt_Table') were computed incorrectly. + + - In TrueType fonts, hinting of composite glyphs could sometimes + deliver incorrect positions of components or even distorted + shapes. + + + II. IMPORTANT CHANGES + + - WOFF font format support has been added. + + - The auto-hinter now supports Hebrew. Greek and Cyrillic support + has been improved. + + - Support for the forthcoming `OS/2' SFNT table version 5, as can + be found e.g. in the `Sitka' font family for Windows 8.1. + + - The header file layout has been changed. After installation, + all files are now located in `/include/freetype2'. + + Applications that use (a) `freetype-config' or FreeType's + `pkg-config' file to get the include directory for the compiler, + and (b) the documented way for header inclusion like + + #include + #include FT_FREETYPE_H + ... + + don't need any change to the source code. + + + III. MISCELLANEOUS + + - The stem darkening feature of the new CFF engine can now be + fine-tuned with the new `darkening-parameters' property. + + - `ftgrid' has been updated to toggle various engines with the `H' + key, similar to `ftview' and `ftdiff'. + + - The functionality of `ttdebug' has been greatly enhanced. + + . It now displays twilight, storage, and control value data; key + `T' shows the twilight point table, key `S' the storage data, + and key `C' the control value table. + + . Some keys have been reassigned from lowercase to their + uppercase equivalents; for example `q' to quit the program is + now `Q'. + + . Key `f' finishes the current function. + + . Key `R' restarts the debugger. + + . Keys `b' and `p' set a breakpoint. + + . Key `B' provides a function call backtrace. + + - Better support of ARMv7 and x86_64 processors. + + - Apple's `sbix' color bitmap format is now supported. + + - Improved auto-hinter rendering for many TrueType fonts, + especially in the range 20-40ppem. + + - A new face flag `FT_FACE_FLAG_COLOR' has been added (to be + accessed with the macro `FT_HAS_COLOR'). + + - `FT_Gzip_Uncompress' (modeled after zlib's `uncompress' + function) has been added; this is a by-product of the newly + added WOFF support. + + - Support for a build with `cmake' has been contributed by John + Cary . + + - Support for x64 builds with Visual C++ has been contributed by + Kenneth Miller + + - Manual pages for most demo programs have been added. + + - The GETINFO bytecode instruction for TrueType fonts was buggy if + used to retrieve subpixel hinting information. It was necessary + to set selector bit 6 to get results for selector bits 7-10, + which is wrong. + + - Improved computation of emulated vertical metrics for TrueType + fonts. + + - Fixed horizontal start-up position of vertical phantom points in + TrueType bytecode. + + +====================================================================== + +CHANGES BETWEEN 2.4.12 and 2.5 + + I. IMPORTANT BUG FIXES + + - The cache manager function `FTC_Manager_Reset' didn't flush the + cache. + + + II. IMPORTANT CHANGES + + - Behdad Esfahbod (on behalf of Google) contributed support for + color embedded bitmaps (eg. color emoji). + + A new load flag, FT_LOAD_COLOR, makes FreeType load color + embedded-bitmaps, following this draft specification + + https://color-emoji.googlecode.com/git/specification/v1.html + + which defines two new SFNT tables, `CBDT' and `CBLC' (named and + modeled after `EBDT' and `EBLC', respectively). The color + bitmaps are stored in the new FT_PIXEL_MODE_BGRA format to + represent BGRA pre-multiplied sRGB images. If PNG support is + available, PNG color images as defined in the same proposed + specification are supported also. + + Note that color bitmaps are converted to grayscale if client + didn't ask for color. + + - As announced in the previous release, the old FreeType CFF + engine is now disabled by default. It can be conditionally + compiled by defining the configuration macro + CFF_CONFIG_OPTION_OLD_ENGINE. + + - As announced in the previous release, all code related to macro + FT_CONFIG_OPTION_OLD_INTERNALS has been removed, thus becoming + obsolete. + + + III. MISCELLANEOUS + + - The property API (`FT_Property_Get' and `FT_Property_Set') is + now declared as stable. + + The exception, however, are the experimental auto-hinter + properties `glyph-to-script-map' and `fallback-script' which are + subject to change in a forthcoming release. + + - `ftview' has been updated to support color embedded bitmaps; it + can be toggled on and off with key `c'. The small cache toggle + is now key `K'. + + - It is now possible to control the version of the TrueType + hinting engine using the new `interpreter-version' property of + the `truetype' module: Versions 35 and 38 (the default) are + supported, which roughly corresponds to disable and enable + subpixel hinting support, respectively. + + In both `ftview' and `ftdiff', switching between the two + versions can be done with key `H'. In the `ftbench' demo + program, command line option `-H' has been extended to activate + the non-default interpreter version. + + - The `ttdebug' program has been further improved. In particular, + it accepts a new command line option `-H' to select the hinting + engine. + + - `ftdump's verbose option has been renamed to `-V'. For all demo + programs, `-v' now shows version information. + + - Another round of TrueType subpixel hinting fixes. + + - The `apinames' tool can now create an import file for NetWare. + + - 64bit compilation of the new CFF engine was buggy. + + - Some fixes to improve robustness in memory-tight situations. + + +====================================================================== + +CHANGES BETWEEN 2.4.11 and 2.4.12 + + - We have another CFF parsing and hinting engine! Written by Dave + Arnold , this work has been contributed by + Adobe in collaboration with Google. It is vastly superior to + the old CFF engine, and it will replace it in the next release. + Right now, it is still off by default, and you have to + explicitly select it using the new `hinting-engine' property of + the cff driver: + + ... + #include FT_MODULE_H + #include FT_CFF_DRIVER_H + + FT_Library library; + int engine = FT_CFF_HINTING_ADOBE; + + + ... + FT_Property_Set( library, "cff", "hinting-engine", &engine ); + + The code has a (mature) beta status; we encourage all users to + test it and report any problems. + + In case you want to activate the new CFF engine unconditionally, + apply this patch: + +--- snip --- +diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c +index ebcf189..3f2ce6b 100644 +--- a/src/cff/cffobjs.c ++++ b/src/cff/cffobjs.c +@@ -1056,7 +1056,7 @@ + + + /* set default property values */ +- driver->hinting_engine = FT_CFF_HINTING_FREETYPE; ++ driver->hinting_engine = FT_CFF_HINTING_ADOBE; + driver->no_stem_darkening = FALSE; + + return FT_Err_Ok; +--- snip --- + + - The macro FT_CONFIG_OPTION_OLD_INTERNALS is no longer set by + default. In the next release, we will completely remove the + associated code. Please update your programs in case you are + still using this macro. + + + II. MISCELLANEOUS + + - The (top-level) `configure' script now respects the MAKE + environment variable to specify a `make' binary. For backwards + compatibility, GNUMAKE still overrides MAKE, though. + + - The `ftview' and `ftdiff' demo programs have been redesigned, + showing more options permanently on the screen, among other + minor improvements. + + - Using the `H' key, it is now possible to select the CFF engine + in both `ftview' and `ftdiff'. + + - The new command line option `-H' for `ftbench' selects the Adobe + CFF engine. + + - It is now possible to directly select the LCD rendering mode + with the keys `A'-`F' in `ftview'. The key mapping for cycling + through LCD modes has been changed from `K' and `L' to `k' and + `l', and toggling custom LCD filtering is no longer mapped to + key `F' but to key `L'. + + - In `ftdiff', key `x' toggles between layout modes: Either use + the advance width (this is new and now the default) or the + bounding box information to determine line breaks. + + - For all demo tools, the new command line option `-v' shows the + version. + + - For the demo tools with a GUI, the new command line options `-w' + and `-h' select the width and the height of the output window, + respectively. + + - The `ttdebug' program was broken and has been reactivated. Note + that this program is not compiled by default. + + +====================================================================== + +CHANGES BETWEEN 2.4.10 and 2.4.11 + + I. IMPORTANT BUG FIXES + + - Some vulnerabilities in the BDF implementation have been fixed. + Users of this font format should upgrade. + + + II. IMPORTANT CHANGES + + - Subpixel hinting support has been contributed by Infinality, + based on Greg Hitchcock's whitepaper at + + http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx + + Originally, it was a separate patch available from + + http://www.infinality.net/blog/ + + and which has been integrated. + + Note that ClearType support is not completely implemented! In + particular, full support for the options `compatible_widths', + `symmetrical_smoothing, and `bgr' (via the GETINFO bytecode + instruction) is missing. + + Activation of subpixel hinting support can be controlled with + the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration option; it + is switched off by default. This feature is still experimental; + we welcome test reports! + + - Support for OpenType collections (OTC) has been added. + + - Pure CFF fonts within an SFNT wrapper are now supported. + + + III. MISCELLANEOUS + + - Minor rendering improvements to the auto-hinter. + + - `FT_GlyphSlot_Oblique' now uses a shear angle of 12°. + + - Experimental support to handle `property modules', for example + to control the behaviour of the auto-hinter. The API consists + of two new functions, `FT_Property_Set' and `FT_Property_Get'. + + The code is still subject to change and should not be used for + production. + + - The `ftdiff' demo program now supports UTF-8 encoded input files + for option `-f'. + + - Using keys `r' and `R', you can now adjust the stroker radius in + the `ftview' demo program. + + - Other, minor fixes and improvements. + + +====================================================================== + +CHANGES BETWEEN 2.4.9 and 2.4.10 + + I. IMPORTANT BUG FIXES + + - Incremental glyph loading as needed by ghostscript was broken. + + + II. MISCELLANEOUS + + - A new function `FT_Outline_EmboldenXY', contributed by Alexei + Podtelezhnikov. + + - In the `ftview' demo program, key `e' has been replaced with `x' + and `y' to embolden in the horizontal and vertical direction, + respectively. + + - The glyph spacing computation in `FT_GlyphSlot_Embolden' (and + similar code in `ftview') has been improved. + + - Minor improvements to the TrueType bytecode interpreter and + glyph loader, the auto-hinter, and the B/W rasterizer. + + +====================================================================== + +CHANGES BETWEEN 2.4.8 and 2.4.9 + + I. IMPORTANT BUG FIXES + + - Another round of fixes to better handle invalid fonts. Many of + them are vulnerabilities (see CVE-2012-1126 up to CVE-2012-1144 + and SA48320) so all users should upgrade. + + + II. MISCELLANEOUS + + - The `ENCODING -1 ' format of BDF fonts is now supported. + + - For BDF fonts, support for the whole Unicode encoding range has + been added. + + - Better TTF support for x_ppem != y_ppem. + + - `FT_Get_Advances' sometimes returned bogus values. + + - The demo programs no longer recognize and handle default + suffixes; you now have to always specify the complete font name. + + - Better rendering and LCD mode cycling added to `ftview'. + + +====================================================================== + +CHANGES BETWEEN 2.4.7 and 2.4.8 + + I. IMPORTANT BUG FIXES + + - Some vulnerabilities in handling CID-keyed PostScript fonts have + been fixed; see CVE-2011-3439. + + + II. MISCELLANEOUS + + - Chris Liddell contributed a new API, `FT_Get_PS_Font_Value', to + retrieve most of the dictionary keys in Type 1 fonts. + + +====================================================================== + +CHANGES BETWEEN 2.4.6 and 2.4.7 + + I. IMPORTANT BUG FIXES + + - Some vulnerabilities in handling Type 1 fonts have been fixed; + see CVE-2011-3256. + + + II. MISCELLANEOUS + + - FreeType now properly handles ZapfDingbats glyph names while + constructing a Unicode character map (for fonts which don't have + one). + + +====================================================================== + +CHANGES BETWEEN 2.4.5 and 2.4.6 + + I. IMPORTANT BUG FIXES + + - For TrueType based fonts, the ascender and descender values were + incorrect sometimes (off by a pixel if the ppem value was not a + multiple of 5). Depending on the use you might now experience + a different layout; the change should result in better, more + consistent line spacing. + + - Fix CVE-2011-0226 which causes a vulnerability while handling + Type 1 fonts. + + - BDF fonts containing glyphs with negative values for ENCODING + were incorrectly rejected. This bug has been introduced in + FreeType version 2.2.0. + + - David Bevan contributed a major revision of the FreeType stroker + code: + + . The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected. + + . A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has + been introduced to support PostScript and PDF miter joins. + + . FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an + alias for FT_STROKER_LINEJOIN_MITER. + + . Various stroking glitches has been fixed. + + + II. MISCELLANEOUS + + - SFNT bitmap fonts which contain an outline glyph for `.notdef' + only no longer set the FT_FACE_FLAG_SCALABLE flag. + + +====================================================================== + +CHANGES BETWEEN 2.4.4 and 2.4.5 + + I. IMPORTANT BUG FIXES + + - A rendering regression for second-order Bézier curves has been + fixed, introduced in 2.4.3. + + + II. IMPORTANT CHANGES + + - If autohinting is not explicitly disabled, FreeType now uses + the autohinter if a TrueType based font doesn't contain native + hints. + + - The load flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH has been made + redundant and is simply ignored; this means that FreeType now + ignores the global advance width value in TrueType fonts. + + + III. MISCELLANEOUS + + - `FT_Sfnt_Table_Info' can now return the number of SFNT tables of + a font. + + - Support for PCF files compressed with bzip2 has been contributed + by Joel Klinghed. To make this work, the OS must provide a + bzip2 library. + + - Bradley Grainger contributed project and solution files in + Visual Studio 2010 format. + + - Again some fixes to better handle broken fonts. + + - Some improvements to the B/W rasterizer. + + - Fixes to the cache module to improve robustness. + + - Just Fill Bugs contributed (experimental) code to compute blue + zones for CJK Ideographs, improving the alignment of horizontal + stems at the top or bottom edges. + + - The `ftgrid' demo program can now display autohinter segments, + to be toggled on and off with key `s'. + + +====================================================================== + +CHANGES BETWEEN 2.4.3 and 2.4.4 + + I. IMPORTANT BUG FIXES + + - UVS support (TrueType/OpenType cmap format 14) support is fixed. + This regression has been introduced in version 2.4.0. + + + II. MISCELLANEOUS + + - Detect tricky fonts (e.g. MingLiU) by the lengths and checksums + of Type42-persistent subtables (`cvt ', `fpgm', and `prep') when + a TrueType font without family name is given. The previous fix, + introduced in 2.4.3, was too rigorous, causing many subsetted + fonts (mainly from PDF files) displayed badly because FreeType + forced rendering with the TrueType bytecode engine instead of + the autohinter. + + - Better support for 64bit platforms. + + - More fixes to improve handling of broken fonts. + + +====================================================================== + +CHANGES BETWEEN 2.4.2 and 2.4.3 + + I. IMPORTANT BUG FIXES + + - Fix rendering of certain cubic, S-shaped arcs. This regression + has been introduced in version 2.4.0. + + + II. MISCELLANEOUS + + - To fix the above mentioned rendering issue, a new spline + flattening algorithm has been introduced which speeds up both + conic and cubic arcs. + + - Handling of broken fonts has been further improved. + + +====================================================================== + +CHANGES BETWEEN 2.4.1 and 2.4.2 + + I. IMPORTANT BUG FIXES + + - A stack overflow in CFF Type2 CharStrings interpreter is fixed. + + - Handling Type 42 font deallocation was broken; additionally, the + library is now more robust against malformed Type 42 fonts. + + + II. MISCELLANEOUS + + - Two new functions, `FT_Reference_Library' (in FT_MODULE_H) and + `FT_Reference_Face' (in FT_FREETYPE_H), have been added to + simplify life-cycle management. A counter gets initialized to 1 + at the time an FT_Library (or FT_Face) structure is created. + The two new functions increment the respective counter. + `FT_Done_Library' and `FT_Done_Face' then only destroy a library + or face if the counter is 1, otherwise they simply decrement the + counter. + + +====================================================================== + +CHANGES BETWEEN 2.4.0 and 2.4.1 + + I. IMPORTANT CHANGES + + - A serious bug in the CFF font module prevented display of many + glyphs in CFF fonts like `MinionPro-Regular.otf'. + + +====================================================================== + +CHANGES BETWEEN 2.3.12 and 2.4.0 + + I. IMPORTANT CHANGES + + - Since May 2010, all patents regarding the TrueType bytecode + interpreter have expired worldwide. Consequently, we now define + TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine + TT_CONFIG_OPTION_UNPATENTED_HINTING). + + - A new function `FT_Library_SetLcdFilterWeights' is available to + adjust the filter weights set by `FT_Library_SetLcdFilter'. + + + II. MISCELLANEOUS + + - Thanks to many reports from Robert Święcki, FreeType's stability + in handling broken or damaged fonts is much improved. + + - Support for LCD filter control has been added to the demo + programs `ftdiff' and `ftview'. + + +====================================================================== + +CHANGES BETWEEN 2.3.11 and 2.3.12 + + I. IMPORTANT CHANGES + + - For `FT_Open_Face', new parameters are available to ignore + preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and + FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY. + + + II. MISCELLANEOUS + + - Support for incremental font loading (controlled with the + FT_CONFIG_OPTION_INCREMENTAL macro) is now active by default. + + - Better support for vertical metrics. + + - Various minor bug fixes. + + +====================================================================== + +CHANGES BETWEEN 2.3.10 and 2.3.11 + + I. IMPORTANT BUG FIXES + + - Version 2.3.10 broke PCF support. + + +====================================================================== + +CHANGES BETWEEN 2.3.10 and 2.3.9 + + I. IMPORTANT BUG FIXES + + - If all ASCII digits in a font have the same (unscaled) width, + the autohinter respects this and won't change it. + + - TrueType fonts are now rasterized correctly if the horizontal + and vertical resolution differ. + + - Type 1 fonts are now handled with increased precision internally + to avoid serious rounding issues if non-integral coordinates are + encountered. + + - Horizontally condensed CFF fonts (using the font matrix) were + rendered incorrectly. This bug has been introduced after + release 2.3.5. + + + II. IMPORTANT CHANGES + + - Support for the SFNT cmap 13 table format (as defined by the new + OpenType 1.6 specification) has been added. + + - B/W rasterization of well-hinted TrueType fonts at small sizes + has been greatly improved. + + - Calculation of vertical metrics in OpenType fonts has been + improved. + + + III. MISCELLANEOUS + + - It is now possible to change the emboldening factor in the + `ftview' demo program with keys `e' and `E'. + + - It is now possible to change the slant value in the `ftview' + demo program with keys `s' and `S'. + + - The 5-levels grayscale mode of the `ftraster' module (which + FreeType doesn't use by default) was broken since version 2.3.0. + + - Compilation of the `ftgrays' and `ftraster' modules was broken + in stand-alone mode. + + - Various fixes for compilation on 64bit and 16bit architectures. + + +====================================================================== + +CHANGES BETWEEN 2.3.9 and 2.3.8 + + I. IMPORTANT BUG FIXES + + - Very unfortunately, FreeType 2.3.8 contained a change that broke + its official ABI. The end result is that programs compiled + against previous versions of the library, but dynamically linked + to 2.3.8 can experience memory corruption if they call the + `FT_Get_PS_Font_Info' function. + + We recommend all users to upgrade to 2.3.9 as soon as possible, + or to downgrade to a previous release of the library if this is + not an option. + + The origin of the bug is that a new field was added to the + publicly defined `PS_FontInfoRec' structure. Unfortunately, + objects of this type can be stack or heap allocated by callers + of `FT_Get_PS_Font_Info', resulting in a memory buffer + overwrite with its implementation in 2.3.8. + + If you want to know whether your code is vulnerable to this + issue, simply search for the substrings `PS_FontInfo' and + `PS_Font_Info' in your source code. If none is found, your code + is safe and is not affected. + + The FreeType team apologizes for the problem. + + - The POSIX support of MacOS resource-fork fonts (Suitcase fonts + and LaserWriter Type1 PostScript fonts) was broken in 2.3.8. If + FreeType2 is built without Carbon framework, these fonts are not + handled correctly. Version 2.3.7 didn't have this bug. + + - `FT_Get_Advance' (and `FT_Get_Advances') returned bad values for + almost all font formats except TrueType fonts. + + - Fix a bug in the SFNT kerning table loader/parser which could + crash the engine if certain malformed tables were encountered. + + - Composite SFNT bitmaps are now handled correctly. + + + II. IMPORTANT CHANGES + + - The new functions `FT_Get_CID_Is_Internally_CID_keyed' and + `FT_Get_CID_From_Glyph_Index' can be used to access CID-keyed + CFF fonts via CID values. This code has been contributed by + Michael Toftdal. + + + III. MISCELLANEOUS + + - `FT_Outline_Get_InsideBorder' returns FT_STROKER_BORDER_RIGHT + for empty outlines. This was incorrectly documented. + + - The `ftview' demo program now supports UTF-8 encoded strings. + + +====================================================================== + +CHANGES BETWEEN 2.3.8 and 2.3.7 + + I. IMPORTANT BUG FIXES + + - CID-keyed fonts in an SFNT wrapper were not handled correctly. + + - The smooth renderer produced truncated images (on the right) for + outline parts with negative horizontal values. Most fonts don't + contain outlines left to the y coordinate axis, but the effect + was very noticeable for outlines processed with FT_Glyph_Stroke, + using thick strokes. + + - `FT_Get_TrueType_Engine_Type' returned a wrong value if both + configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and + TT_CONFIG_OPTION_UNPATENTED_HINTING were defined. + + - The `face_index' field in the `FT_Face' structure wasn't + initialized properly after calling FT_Open_Face and friends with + a positive face index for CFFs, WinFNTs, and, most importantly, + for TrueType Collections (TTCs). + + + II. IMPORTANT CHANGES + + - Rudimentary support for Type 1 fonts and CID-keyed Type 1 fonts + in an SFNT wrapper has been added -- such fonts are used on the + Mac. The core SFNT tables `TYP1' and `CID ' are passed to the + PS Type 1 and CID-keyed PS font drivers; other tables (`ALMX', + `BBOX', etc.) are not supported yet. + + - A new interface to extract advance values of glyphs without + loading their outlines has been added. The functions are called + `FT_Get_Advance' and `FT_Get_Advances'; they are defined in file + `ftadvanc.h' (to be accessed as FT_ADVANCES_H). + + - A new function `FT_Get_FSType_Flags' (in FT_FREETYPE_H) has been + contributed by David Bevan to access the embedding and + subsetting restriction information of fonts. + + + III. MISCELLANEOUS + + - FT_MulFix is now an inlined function; by default, assembler code + is provided for x86 and ARM. See FT_CONFIG_OPTION_INLINE_MULFIX + and FT_CONFIG_OPTION_NO_ASSEMBLER (in ftoption.h) for more. + + - The handling of `tricky' fonts (this is, fonts which don't work + with the autohinter, needing the font format's hinting engine) + has been generalized and changed slightly: + + . A new face flag FT_FACE_FLAG_TRICKY indicates that the font + format's hinting engine is necessary for correct rendering. + The macro FT_IS_TRICKY can be used to check this flag. + + . FT_LOAD_NO_HINTING is now ignored for tricky fonts. To really + force raw loading of such fonts (without hinting), both + FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT must be used -- + this is something which you probably never want to do. + + . Tricky TrueType fonts always use the bytecode interpreter, + either the patented or unpatented version. + + - The function `FT_GlyphSlot_Own_Bitmap' has been moved from + FT_SYNTHESIS_H to FT_BITMAP_H; it is now part of the `official' + API. (The functions in FT_SYNTHESIS_H are still subject to + change, however.) + + - In the `ftdiff' demo program you can now toggle the use of + FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH with key `a'. + + +====================================================================== + +CHANGES BETWEEN 2.3.7 and 2.3.6 + + I. IMPORTANT BUG FIXES + + - If the library was compiled on an i386 platform using gcc, and + compiler option -O3 was given, `FT_MulFix' sometimes returned + incorrect results which could have caused problems with + `FT_Request_Metrics' and `FT_Select_Metrics', returning an + incorrect descender size. + + - Pure CFFs without subfonts were scaled incorrectly if the font + matrix was non-standard. This bug has been introduced in + version 2.3.6. + + - The `style_name' field in the `FT_FaceRec' structure often + contained a wrong value for Type 1 fonts. This misbehaviour + has been introduced in version 2.3.6 while trying to fix + another problem. [Note, however, that this value is + informative only since the used algorithm to extract it is + very simplistic.] + + + II. IMPORTANT CHANGES + + - Two new macros, FT_OUTLINE_SMART_DROPOUTS and + FT_OUTLINE_EXCLUDE_STUBS, have been introduced. Together with + FT_OUTLINE_IGNORE_DROPOUTS (which was ignored previously) it is + now possible to control the dropout mode of the `raster' module + (for B&W rasterization), using the `flags' field in the + `FT_Outline' structure. + + - The TrueType bytecode interpreter now passes the dropout mode to + the B&W rasterizer. This greatly increases the output for small + ppem values of many fonts like `pala.ttf'. + + +====================================================================== + +CHANGES BETWEEN 2.3.6 and 2.3.5 + + I. IMPORTANT BUG FIXES + + - A bunch of potential security problems have been found. All + users should update. + + - Microsoft Unicode cmaps in TrueType fonts are now always + preferred over Apple cmaps. This is not a bug per se, but there + exist some buggy fonts created for MS which have broken Apple + cmaps. This affects only the automatic selection of FreeType; + it's always possible to manually select an Apple Unicode cmap if + desired. + + - Many bug fixes to the TrueType bytecode interpreter. + + - Improved Mac support. + + - Subsetted CID-keyed CFFs are now supported correctly. + + - CID-keyed CFFs with subfonts which are scaled in a non-standard + way are now handled correctly. + + - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if + the font was a Windows (bitmap) FNT/FON. + + + II. IMPORTANT CHANGES + + - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives + access to those fields in a CID-keyed font. The code has been + contributed by Derek Clegg. + + - George Williams contributed code to validate the new `MATH' + OpenType table (within the `otvalid' module). The `ftvalid' + demo program has been extended accordingly. + + - An API for cmap 14 support (for Unicode Variant Selectors, UVS) + has been contributed by George Williams. + + - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together + with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is + CID-keyed. + + + III. MISCELLANEOUS + + - Build support for symbian has been contributed. + + - Better WGL4 glyph name support, contributed by Sergey Tolstov. + + - Debugging output of the various FT_TRACEX macros is now sent to + stderr. + + - The `ftview' demo program now provides artificial slanting too. + + - The `ftvalid' demo program has a new option `-f' to select the + font index. + + +====================================================================== + +CHANGES BETWEEN 2.3.5 and 2.3.4 + + I. IMPORTANT BUG FIXES + + - Some subglyphs in TrueType fonts were handled incorrectly due to + a missing graphics state reinitialization. + + - Large .Z files (as distributed with some X11 packages) weren't + handled correctly, making FreeType increase the heap stack in an + endless loop. + + - A large number of bugs have been fixed to avoid crashes and + endless loops with invalid fonts. + + + II. IMPORTANT CHANGES + + - The two new cache functions `FTC_ImageCache_LookupScaler' and + `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of + glyphs using an `FTC_Scaler' object; this makes it possible to + use fractional pixel sizes in the cache. The demo programs have + been updated accordingly to use this feature. + + - A new API `FT_Get_CMap_Format' has been added to get the cmap + format of a TrueType font. This is useful in handling PDF + files. The code has been contributed by Derek Clegg. + + - The auto-hinter now produces better output by default for + non-Latin scripts like Indic. This was done by using the CJK + hinting module as the default instead of the Latin one. Thanks + to Rahul Bhalerao for this suggestion. + + - A new API `FT_Face_CheckTrueTypePatents' has been added to find + out whether a given TrueType font uses patented bytecode + instructions. The `ft2demos' bundle contains a new program + called `ftpatchk' which demonstrates its usage. + + - A new API `FT_Face_SetUnpatentedHinting' has been added to + enable or disable the unpatented hinter. + + - Support for Windows FON files in PE format has been contributed + by Dmitry Timoshkov. + + + III. MISCELLANEOUS + + - Vincent Richomme contributed Visual C++ project files for Pocket + PCs. + + +====================================================================== + +CHANGES BETWEEN 2.3.4 and 2.3.3 + + I. IMPORTANT BUG FIXES + + - A serious bug in the handling of bitmap fonts (and bitmap + strikes of outline fonts) has been introduced in 2.3.3. + + +====================================================================== + +CHANGES BETWEEN 2.3.3 and 2.3.2 + + I. IMPORTANT BUG FIXES + + - Remove a serious regression in the TrueType bytecode interpreter + that was introduced in version 2.3.2. Note that this does not + disable the improvements introduced to the interpreter in + version 2.3.2, only some ill cases that occurred with certain + fonts (though a few popular ones). + + - The auto-hinter now ignores single-point contours for computing + blue zones. This bug created `wavy' baselines when rendering + text with various fonts that use these contours to model + mark-attach points (these are points that are never rasterized + and are placed outside of the glyph's real outline). + + - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to + zero for mono-spaced fonts. Otherwise code that uses them would + essentially ruin the fixed-advance property. + + - Fix CVE-2007-1351 which can cause an integer overflow while + parsing BDF fonts, leading to a potentially exploitable heap + overflow condition. + + + II. MISCELLANEOUS + + - Fixed compilation issues on some 64-bit platforms (see ChangeLog + for details). + + - A new demo program `ftdiff' has been added to compare TrueType + hinting, FreeType's auto hinting, and rendering without hinting + in three columns. + + +====================================================================== + +CHANGES BETWEEN 2.3.2 and 2.3.1 + + I. IMPORTANT BUG FIXES + + - FreeType returned incorrect kerning information from TrueType + fonts when the bytecode interpreter was enabled. This happened + due to a typo introduced in version 2.3.0. + + - Negative kerning values from PFM files are now reported + correctly (they were read as 16-bit unsigned values from the + file). + + - Fixed a small memory leak when `FT_Init_FreeType' failed for + some reason. + + - The Postscript hinter placed and sized very thin and ghost stems + incorrectly. + + - The TrueType bytecode interpreter has been fixed to get rid of + most of the rare differences seen in comparison to the Windows + font loader. + + + II. IMPORTANT CHANGES + + - The auto-hinter now better deals with serifs and corner cases + (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves + spacing adjustments and doesn't change widths for non-spacing + glyphs. + + - Many Mac-specific functions are deprecated (but still + available); modern replacements have been provided for them. + See the documentation in file `ftmac.h'. + + +====================================================================== + +CHANGES BETWEEN 2.3.1 and 2.3.0 + + I. IMPORTANT BUG FIXES + + - The TrueType interpreter sometimes returned incorrect horizontal + metrics due to a bug in the handling of the SHZ instruction. + + - A typo in a security check introduced after version 2.2.1 + prevented FreeType to render some glyphs in CFF fonts. + + +====================================================================== + +CHANGES BETWEEN 2.3.0 and 2.2.1 + + I. IMPORTANT BUG FIXES + + - The PCF font loader is now much more robust while loading + malformed font files. + + - Various memory leaks have been found and fixed. + + - The TrueType name loader now deals properly with some fonts that + encode their names in UTF-16 (the specification was vague, and + the code incorrectly assumed UCS-4). + + - Fixed the TrueType bytecode loader to deal properly with subtle + monochrome/gray issues when scaling the CVT. Some fonts + exhibited bad rendering artifacts otherwise. + + - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly + (it mangled the vertical advance height). + + - Fixed byte endian issues of `ftmac.c' to support Mac OS X on + i386. + + - The PFR font loader no longer erroneously tags font files + without any outlines as FT_FACE_FLAG_SCALABLE. + + + II. NEW API FUNCTIONS + + - `FT_Library_SetLcdFilter' allows you to select a special filter + to be applied to the bitmaps generated by `FT_Render_Glyph' if + one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has + been selected. This filter is used to reduce color fringes; + several settings are available through the FT_LCD_FILTER_XXX + enumeration. + + Its declaration and documentation can be found in file + `include/freetype/ftlcdfil.h' (to be accessed with macro + FT_LCD_FILTER_H). + + *IMPORTANT*: This function returns an error + (FT_Err_Unimplemented_Feature) in default builds of the library + for patent reasons. See below. + + - `FT_Get_Gasp' allows you to query the flags of the TrueType + `gasp' table for a given character pixel size. This is useful + to duplicate the text rendering of MS Windows when the native + bytecode interpreter is enabled (which isn't the default for + other patent reasons). + + Its declaration and documentation can be found in file + `include/freetype/ftgasp.h' (to be accessed with macro + FT_GASP_H). + + + III. IMPORTANT CHANGES + + - The auto-hinter has been tuned a lot to improve its results with + serif fonts, resulting in much better font rendering of many web + pages. + + - The unpatented hinter is now part of the default build of the + library; we have added code to automatically support `tricky' + fonts that need it. + + This means that FreeType should `just work' with certain Asian + fonts, like MingLiU, which cannot properly be loaded without a + bytecode interpreter, but which fortunately do not use any of + the patented bytecode opcodes. We detect these fonts by name, + so please report any font file that doesn't seem to work with + FreeType, and we shall do what we can to support it in a next + release. + + Note that the API hasn't changed, so you can still force + unpatented hinting with a special parameter to `FT_Open_Face' as + well. This might be useful in same cases; for example, a PDF + reader might present a user option to activate it to deal with + certain `tricky' embedded fonts which cannot be clearly + identified. + + If you are a developer for embedded systems, you might want to + *disable* the feature to save code space by undefining + TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'. + + - LCD-optimized rendering is now *disabled* in all default builds + of the library, mainly due to patent issues. For more + information see: + + http://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html + + A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING + has been introduced in `ftoption.h'; manually define it in this + file if you want to re-enable the feature. + + The change only affects the implementation, not the FreeType + API. This means that clients don't need to be modified, because + the library still generates LCD decimated bitmaps, but with the + added constraint that R=G=B on each triplet. + + The displayed result should be equal to normal anti-aliased + rendering. + + Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not + defined, the new `FT_Library_SetLcdFilter' function returns the + FT_Err_Unimplemented_Feature error code. + + - Some computation bugs in the TrueType bytecode interpreter were + found, which allow us to get rid of very subtle and rare + differences we had experienced with the Windows renderer. + + - It is now possible to cross-compile the library easily. See the + file `docs/INSTALL.CROSS' for details. + + - The file `src/base/ftmac.c' now contains code for Mac OS X only; + its deprecated function `FT_GetFile_From_Mac_Font_Name' always + returns an error even if the QuickDraw framework is available. + The previous version has been moved to `builds/mac/ftmac.c'. + + Selecting configure option `--with-quickdraw-carbon' makes the + build process use the original `ftmac.c' file instead of the Mac + OS X-only version. + + + IV. MISCELLANEOUS + + - Various performance and memory footprint optimizations have been + performed on the TrueType and CFF font loaders, sometimes with + very drastic benefits (e.g., the TrueType loader is now about + 25% faster; FreeType should use less heap memory under nearly + all conditions). + + - The anti-aliased rasterizer has been optimized and is now 15% to + 25% percent faster than in previous versions, depending on + content. + + - The Type 1 loader has been improved; as an example, it now skips + top-level dictionaries properly. + + - Better support for Mac fonts on POSIX systems, plus compilation + fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built. + + - Configuration without `--with-old-mac-fonts' does not include + `ftmac.c' (this was the behaviour in FreeType version 2.1.10). + + - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs + in the kern table. + + +====================================================================== + +CHANGES BETWEEN 2.2.1 and 2.2 + + I. IMPORTANT BUG FIXES + + - Various integer overflows have been fixed. + + - PFB fonts with MacOS resource fork weren't handled correctly on + non-MacOS platforms. + + +====================================================================== + +CHANGES BETWEEN 2.2 and 2.1.10 + +(not released officially) + + I. IMPORTANT BUG FIXES + + - Vertical metrics for SFNT fonts were incorrect sometimes. + + - The FT_HAS_KERNING macro always returned 0. + + - CFF OpenType fonts didn't return correct vertical metrics for + glyphs with outlines. + + - If FreeType was compiled without hinters, all font formats based + on PS outlines weren't scaled correctly. + + + II. IMPORTANT CHANGES + + - Version 2.2 no longer exposes its internals, this is, the header + files located in the `include/freetype/internal' directory of + the source package are not copied anymore by the `make install' + command. Consequently, a number of rogue clients which directly + access FreeType's internal functions and structures won't + compile without modification. + + We provide patches for most of those rogue clients. See the + following page for more information: + + http://www.freetype.org/freetype2/patches/rogue-patches.html + + Note that, as a convenience to our Unix desktop users, version + 2.2 is *binary* compatible with FreeType 2.1.7, which means that + installing this release on an existing distribution shall not + break any working desktop. + + - FreeType's build mechanism has been redesigned. With GNU make + it is now sufficient in most cases to edit two files: + `modules.cfg', to select the library components, and the + configuration file `include/freetype/config/ftoption.h' (which + can be copied to the objects directory). Removing unused module + directories to prevent its compilation and editing + `include/freetype/config/ftmodule.h' is no longer necessary. + + - The LIGHT hinting algorithm produces more pleasant results. + Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph + always forces auto-hinting, as a special exception. This allows + you to experiment with it even if you have enabled the TrueType + bytecode interpreter in your build. + + - The auto hinter now employs a new algorithm for CJK fonts, based + on Akito Hirai's patch. Note that this only works for fonts + with a Unicode charmap at the moment. + + - The following callback function types have changed slightly (by + adding the `const' keyword where appropriate): + + FT_Outline_MoveToFunc + FT_Outline_LineToFunc + FT_Outline_ConicToFunc + FT_Outline_CubicToFunc + FT_SpanFunc + FT_Raster_RenderFunc + + FT_Glyph_TransformFunc + FT_Renderer_RenderFunc + FT_Renderer_TransformFunc + + Note that this doesn't affect binary backward compatibility. + + - On MacOS, new APIs have been added as replacements for legacy + APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec', + and `FT_GetFile_From_Mac_ATS_Name' for + `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if + FreeType is built without disabling them. + + - A new API `FT_Select_Size' has been added to select a bitmap + strike by its index. Code using other functions to select + bitmap strikes should be updated to use this function. + + - A new API `FT_Get_SubGlyph_Info' has been added to retrieve + subglyph data. This can be used by rogue clients which used to + access the internal headers to get the corresponding data. + + - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for + BDF/PCF fonts, and only for them. This causes inconsistency. + In this release, we undo the change. The intent of the change + in 2.1.10 is to allow size selection through real dimensions, + which can now be done through `FT_Request_Size'. + + - Some security issues were discovered and fixed in the CFF and + Type 1 loader, causing crashes of FreeType by malformed font + files. + + + III. MISCELLANEOUS + + - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX + values now better reflects its usage and differences: One set is + used to specify the hinting algorithm, the other to specify the + pixel rendering mode. + + - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been + changed to count supported scalable faces (sfnt, LWFN) only, and + to return the number of available faces via face->num_faces. + Unsupported bitmap faces (fbit, NFNT) are ignored. + + - builds/unix/configure has been improved for MacOS X. It now + automatically checks available functions in Carbon library, and + prepare to use newest functions by default. Options to specify + the dependencies of each Carbon APIs (FSSpec, FSRef, old/new + QuickDraw, ATS) are available too. By manual disabling of all + QuickDraw functionality, FreeType can be built without + `deprecated function' warnings on MacOS 10.4.x, but + FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy + function, and returns an `unimplemented' error. For details see + builds/mac/README. + + - SFNT cmap handling has been improved, mainly to run much faster + with CJK fonts. + + - A new function `FT_Get_TrueType_Engine_Type (declared in + `FT_MODULE_H') is provided to determine the status of the + TrueType bytecode interpreter compiled into the library + (patented, unpatented, unimplemented). + + - Vertical metrics of glyphs are synthesized if the font does not + provide such information. You can tell whether the metrics are + synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of + the face. + + - The demo programs `ftview' and `ftstring' have been rewritten + for better readability. `ftview' has a new switch `-p' to test + FT_New_Memory_Face (instead of FT_New_Face). + + - FreeType now honours bit 1 in the `head' table of TrueType fonts + (meaning `left sidebearing point at x=0'). This helps with some + buggy fonts. + + - Rudimentary support for Adobe's new `SING Glyphlet' format. See + + http://www.adobe.com/products/indesign/sing_gaiji.html + + for more information. + + - The `ftdump' program from the `ft2demos' bundle now shows some + information about charmaps. It also supports a new switch `-v' + to increase verbosity. + + - Better AFM support. This includes track kerning support. + + +====================================================================== + +CHANGES BETWEEN 2.1.10 and 2.1.9 + + I. IMPORTANT BUG FIXES + + - The size comparison for BDF and PCF files could fail sometimes. + + - Some CFF files were still not loaded correctly. Patch from + Derek Noonburg. + + - The stroker still had some serious bugs. + + - Boris Letocha fixed a bug in the TrueType interpreter: The + NPUSHW instruction wasn't skipped correctly in IF clauses. Some + fonts like `Helvetica 75 Bold' failed. + + - Another serious bug in handling TrueType hints caused many + distortions. It has been introduced in version 2.1.8, and it is + highly recommended to upgrade. + + - FreeType didn't properly parse empty Type 1 glyphs. + + - An unbound dynamic buffer growth was fixed in the PFR loader. + + - Several bugs have been fixed in the cache sub-system. + + - FreeType behaved incorrectly when resizing two distinct but very + close character pixel sizes through `FT_Set_Char_Size' (Savannah + bug #12263). + + - The auto-hinter didn't work properly for fonts without a Unicode + charmap -- it even refused to load the glyphs. + + + II. IMPORTANT CHANGES + + - Many fixes have been applied to drastically reduce the amount of + heap memory used by FreeType, especially when using + memory-mapped font files (which is the default on Unix systems + which support them). + + - The auto-hinter has been replaced with a new module, called the + `auto-fitter'. It consumes less memory than its predecessor, + and it is prepared to support non-latin scripts better in next + releases. + + - George Williams contributed code to read kerning data from PFM + files. + + - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and + TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for + setting family and style in SFNT fonts (patch from Kornfeld + Eliyahu Peter). + + - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has + been added to retrieve name and size information of SFNT tables. + + - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has + been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB, + JSTF). After validation it is no longer necessary to check + for errors in those tables while accessing them. + + Note that this module might be moved to another library in the + future to avoid a tight dependency between FreeType and the + OpenType specification. + + - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert', + `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has + been added. Its use is to convert an FT_Bitmap structure in + 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap, + probably using a different pitch, and to further manipulate it. + + - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer + control how outlines are embolded. + + - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps + also (code contributed by Chia I Wu). Note that this function + is still experimental and may be replaced with a better API. + + - The method how BDF and PCF bitmap fonts are accessed has been + refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size + were synonyms in FreeType's BDF and PCF interface. This has + changed now. FT_Set_Pixel_Sizes should be used to select the + actual font dimensions (the `strike', which is the sum of the + `FONT_ASCENT' and `FONT_DESCENT' properties), while + FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE' + property). In both functions, the width parameter is ignored. + + + III. MISCELLANEOUS + + - The BDF driver no longer converts all returned bitmaps with a + depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has + not mentioned this explicitly, but implementors might have + relied on this after looking into the source files. + + - A new option `--ftversion' has been added to freetype-config to + return the FreeType version. + + - The memory debugger has been updated to dump allocation + statistics on all allocation sources in the library. This is + useful to spot greedy allocations when loading and processing + fonts. + + - We removed a huge array of constant pointers to constant strings + in the `psnames' module. The problem was that compilations in + PIC mode (i.e., when generating a Unix shared object/dll) put + the array into the non-shared writable section of the library + since absolute pointers are not relocatable by nature. + + This reduces the memory consumption by approximately 16KByte per + process linked to FreeType. We now also store the array in a + compressed form (as a trie) which saves about 20KByte of code as + well. + + - Kirill Smelkov provided patches to make src/raster/ftraster.c + compile stand-alone again. + + +====================================================================== + +CHANGES BETWEEN 2.1.9 and 2.1.8 + + I. IMPORTANT BUG FIXES + + - The function `FT_Get_CharMap_Index' was only declared, without + any real code. For consistency, it has been renamed to + `FT_Get_Charmap_Index'. (This function is needed to implement + cmap caches.) + + - `FT_Outline_Get_BBox' sometimes returned incorrect values for + conic outlines (e.g., for TrueType fonts). + + - Handling of `bhed' table has been fixed. + + - The TrueType driver with enabled byte code interpreter sometimes + returned artifacts due to incorrect rounding. This bug has been + introduced after version 2.1.4. + + - The BDF driver dropped the last glyph in the font. + + - The BDF driver now uses the DEFAULT_CHAR property (if available) + to select a glyph shape for the undefined glyph. + + - The stroker failed for closed outlines and single points. + + + II. IMPORTANT CHANGES + + - George Williams contributed code to handle Apple's font + distortion technology found in GX fonts (`avar', `cvar', `fvar', + and `gvar' tables; the Multiple Masters API has been slightly + extended to cope with the new functionality). + + - The `FT_GlyphSlotRec' structure has been extended: The elements + `lsb_delta' and `rsb_delta' give the difference between hinted + and unhinted left and right side bearings if autohinting is + active. Using those values can improve the inter-letter spacing + considerably. See the documentation of `FT_GlyphSlotRec' and + the `ftstring' demo program how to use it. + + - Loading TrueType and Type 1 fonts has been made much faster. + + - The stroker is no longer experimental (but the cache subsystem + still is). + + + III. MISCELLANEOUS + + - A new documentation file `formats.txt' describes various font + formats supported (and not supported) by FreeType. + + +====================================================================== + +CHANGES BETWEEN 2.1.8 and 2.1.7 + + I. IMPORTANT BUG FIXES + + - The native TrueType hinter contained some bugs which prevented + some fonts to be rendered correctly, most notably Legendum.otf. + + - The PostScript hinter now produces improved results. + + - The linear advance width and height values were incorrectly + rounded, making them virtually unusable if not loaded with + FT_LOAD_LINEAR_DESIGN. + + - Indexing CID-keyed CFF fonts is now working: The glyph index is + correctly treated as a CID, similar to FreeType's CID driver + module. Note that CID CMap support is still missing. + + - The FT_FACE_FLAGS_GLYPH_NAMES flag is now set correctly for all + font formats. + + - Some subsetted Type 1 fonts weren't parsed correctly. This bug + has been introduced in 2.1.7. In summary, the Type 1 parser has + become more robust. + + - Non-decimal numbers weren't parsed correctly in PS fonts. + + - The WinFNT driver now correctly reports FT_ENCODING_NONE for all + but one encoding. Use the new FT_WinFNT_ID_XXX values together + with `FT_Get_WinFNT_Header' to get the WinFNT charset ID. + + - The descender metrics (face->size->metrics.descender) for WinFNT + bitmap fonts had the wrong sign. + + - The (emulated) `seac' support for CFF fonts was broken. + + - The `flex' operator didn't work for CFF fonts. + + - PS glyphs which use the `hintmask' operator haven't been + rendered correctly in some cases. + + - Metrics for BDF and PCF bitmap font formats have been fixed. + + - Autohinting is now disabled for glyphs which are vertically + distorted or mirrored (using a transformation matrix). This + fixes a bug which produced zero-height glyphs. + + - The `freetype-config' script now handles --prefix and + --exec-prefix correctly; it also returns the proper --rpath (or + -R) value if FreeType has been built as a shared library. + + + II. IMPORTANT CHANGES + + - Both PCF and BDF drivers now handle the SETWIDTH_NAME and + ADD_STYLE_NAME properties. Values are appended to + face->style_name; example: `Bold SemiCondensed'. + + - The PCF driver now handles bitmap fonts compressed with the LZW + algorithm (extension .pcf.Z, compressed with `compress'). + + - A new API function `FT_Get_CMap_Language_ID' (declared in + `tttables.h') is available to get the language ID of a + TrueType/SFNT cmap. + + - The hexadecimal format of data after the `StartData' command in + CID-keyed Type 1 fonts is now supported. While this can't occur + in file-based fonts, it can happen in document-embedded + resources of PostScript documents. + + - Embedded bitmaps in SFNT-based CFF fonts are now supported. + + - A simple API is now available to control FreeType's tracing + mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file + `ftdebug.h' for more details. + + - YAMATO Masatake contributed improved handling of MacOS resource + forks on non-MacOS platforms (for example, Linux can mount MacOS + file systems). + + - Support for MacOS has been improved; there is now a new function + `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that + it accepts an FSSpec instead of a path. + + - The cache sub-system has been rewritten. + + - There is now support for deinstallation of faces. + + - A new API function `FTC_Manager_RemoveFaceID' has been added + to delete all `idle' nodes that correspond to a given + FTC_FaceID. All `locked' nodes (i.e., those with a reference + count > 0), will be modified to prevent them from appearing in + further lookups (they will be cleaned normally when their + reference count reaches 0). + + - There is now support for point scaling (i.e., providing + character sizes in points + dpis, instead of pixels). + + - Three abstract cache classes are now available: + + FTC_GCache: Used to store one glyph item per cache node, + with the ability to group common attributes into + `families'. This replaces the old + FTC_GlyphCache class. + + FTC_ICache: Used to store one FT_Glyph per cache node. This + extends FTC_GCache. Family definition, family + comparison, and glyph loading are however left + to sub-classes. + + FTC_SCache: Used to store up to 16 small bitmaps per cache + node. This extends FTC_GCache. Family + definition, family comparison and glyph loading + are however left to sub-classes. + + - The file `src/cache/ftcbasic.c' implements: + + FTC_ImageCache: Extends FTC_ICache; implements family + definitions and glyph loading similar to the + old API. + + FTC_SBitCache: Extends FTC_SCache, implements family + definitions and glyph loading similar to the + old API + + Client applications should be able to extend FTC_GCache, + FTC_ICache, or FTC_SCache much more easily (i.e., less code to + write, and less callbacks). For example, one could envision + caches that are capable of storing transformed (obliqued), + stroked, emboldened, or colored glyph images. Use + `ftcbasic.c' as an example. + + - All public APIs are now in `include/freetype/ftcache.h', (to + be accessed as `FT_CACHE_H'). The contents of + `include/freetype/cache/' is only needed by applications that + wish to implement their own caches. + + - There were some major performance improvements through the use + of various programming tricks. Cache hits are up to 70% + faster than in the old code. + + - The FTC_CMapCache has been simplified. Charmaps can only be + accessed by index right now. There is also a new API named + `FT_Charmap_GetIndex' for this purpose. + + - The demo programs have been updated to the new code. The + previous versions will not work with the current one. + + - Using an invalid face index in FT_Open_Face and friends now + causes an error even if the font contains a single face only. + + + III. MISCELLANEOUS + + - Wolfgang Domröse contributed support files for building FreeType + on the Atari using the PureC compiler. Note that the Atari is a + 16bit platform. + + - Vitaliy Pasternak contributed project files for VS.NET 2003. + + +====================================================================== + +CHANGES BETWEEN 2.1.7 and 2.1.6 + + I. IMPORTANT BUG FIXES + + - Updated to newest libtool version, fixing build problems on + various platforms. + + - On Unix platforms, `make install' didn't copy the correct + `ftconfig.h' file. + + Note that version 2.1.7 contains the same library C source code as + version 2.1.6. + + +====================================================================== + +CHANGES BETWEEN 2.1.6 and 2.1.5 + + I. IMPORTANT BUG FIXES + + - The PFR font driver didn't load kerning tables correctly, and + the functions in FT_PFR_H didn't work at all. + + - Type 1 font files in binary format (PFB) with an end-of-file + indicator weren't accepted by the FreeType engine. + + - Fonts which contain /PaintType and /StrokeWidth no longer cause + a segfault. This bug has been introduced in version 2.1.5. + + - Fonts loaded with FT_LOAD_RENDER no longer cause strange + results. This bug has been introduced in version 2.1.5. + + - Some Windows (bitmap) FNT/FON files couldn't be handled + correctly. + + + II. IMPORTANT CHANGES + + - The internal module API has been heavily changed in favor of + massive simplifications within the font engine. This also means + that authors of third-party modules must adapt their code to the + new scheme. + + NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A + FINAL ANNOUNCEMENT! + + - The PostScript parser has been enhanced to handle comments and + strings correctly. Additionally, more syntax forms are + recognized. + + - Added the optional unpatented hinting system for TrueType. It + allows typefaces which need hinting to produce correct glyph + forms (e.g., Chinese typefaces from Dynalab) to work acceptably + without infringing Apple patents. This system is compiled only + if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in + ftoption.h (activated by default). + + + III. MISCELLANEOUS + + - There is now a guard in the public header files to protect + against inclusion of freetype.h from FreeType 1. + + - Direct inclusion of freetype.h and other public header files no + longer works. You have to use the documented scheme + + #include + #include FT_FREETYPE_H + + to load freetype.h with a symbolic name. This protects against + renaming of public header files (which shouldn't happen but + actually has, avoiding two public header files with the same + name). + + +====================================================================== + +CHANGES BETWEEN 2.1.5 and 2.1.4 + + I. IMPORTANT BUG FIXES + + - Parsing the /CIDFontName field now removes the leading slash to + be in sync with other font drivers. + + - gzip support was buggy. Some fonts could not be read. + + - Fonts which have nested subglyphs more than one level deep no + longer cause a segfault. + + - Creation of synthetic cmaps for fonts in CFF format was broken + partially. + + - Numeric font dictionary entries for synthetic fonts are no + longer overwritten. + + - The font matrix wasn't applied to the advance width for Type1, + CID, and CFF fonts. This caused problems when loading certain + synthetic Type 1 fonts like `Helvetica Narrow'. + + - The test for the charset registry in BDF and PCF fonts is now + case-insensitive. + + - FT_Vector_Rotate sometimes returned strange values due to + rounding errors. + + - The PCF driver now returns the correct number of glyphs + (including an artificial `notdef' glyph at index 0). + + - FreeType now supports buggy CMaps which are contained in many + CJK fonts from Dynalab. + + - Opening an invalid font on a Mac caused a segfault due to + double-freeing memory. + + - BDF fonts with more than 32768 glyphs weren't supported + properly. + + + II. IMPORTANT CHANGES + + - Accessing bitmap font formats has been synchronized. To do that + the FT_Bitmap_Size structure has been extended to contain new + fields `size', `x_ppem', and `y_ppem'. + + - The FNT driver now returns multiple faces, not multiple strikes. + + - The `psnames' module has been updated to the Adobe Glyph List + version 2.0. + + - The `psnames' module now understands `uXXXX[X[X]]' glyph names. + + - The algorithm for guessing the font style has been improved. + + - For fonts in SFNT format, root->height is no longer increased if + the line gap is zero. There exist fonts (containing e.g. form + drawing characters) which intentionally have a zero line gap + value. + + - ft_glyph_bbox_xxx flags are now deprecated in favour of + FT_GLYPH_BBOX_XXX. + + - ft_module_xxx flags are now deprecated in favour of + FT_MODULE_XXX. + + - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now + deprecated in favour of + FT_ENCODING_{SJIS,GB2312,GIB5,WANSONG,JOHAB} -- those encodings + are not specific to Microsoft. + + + III. MISCELLANEOUS + + - The autohinter has been further improved; for example, `m' + glyphs now retain its vertical symmetry. + + - Partial support of Mac fonts on non-Mac platforms. + + - `make refdoc' (after first `make') builds the HTML + documentation. You need Python for this. + + - The make build system should now work more reliably on DOS-like + platforms. + + - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has + been added. + + - Better VMS build support. + + - Support for the pkg-config package by providing a `freetype.pc' + file. + + - New configure option --with-old-mac-fonts for Darwin. + + - Some source files have been renamed (mainly to fit into the 8.3 + naming scheme). + + +====================================================================== + +CHANGES BETWEEN 2.1.4 and 2.1.3 + + I. IMPORTANT BUG FIXES + + - Updated to newest libtool version, fixing build problems on + various platforms. + + - A fix in the Gzip stream reader: It couldn't read certain .gz + files properly due to a small typo. In certain cases, FreeType + could also loop endlessly when trying to load tiny gzipped + files. + + - The configure script now tries to use the system-wide zlib when + it finds one (instead of the copy found in src/gzip). And + `freetype-config' has been updated to return relevant flags in + this case when invoked with `--libs' (e.g. `-lzlib'). + + - Certain fonts couldn't be loaded by 2.1.3 because they lacked a + Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously + rejected them. + + - The CFF loader was modified to accept fonts which only contain a + subset of their reference charset. This prevented the correct + use of PDF-embedded fonts. + + - The logic to detect Unicode charmaps has been modified. This is + required to support fonts which include both 16-bit and 32-bit + charmaps (like very recent asian ones) using the new 10 and 12 + SFNT formats. + + - The TrueType loader now limits the depth of composite glyphs. + This is necessary to prevent broken fonts to break the engine by + blowing the stack with recursive glyph definitions. + + - The CMap cache is now capable of managing UCS-4 character codes + that are mapped through extended charmaps in recent + TrueType/OpenType fonts. + + - The cache sub-system now properly manages out-of-memory + conditions instead of blindly reporting them to the caller. + This means that it will try to empty the cache before restarting + its allocations to see if that can help. + + - The PFR driver didn't return the list of available embedded + bitmaps properly. + + - There was a nasty memory leak when using embedded bitmaps in + certain font formats. + + + II. IMPORTANT CHANGES + + - David Chester contributed some enhancements to the auto-hinter + that significantly increase the quality of its output. The + Postscript hinter was also improved in several ways. + + - The FT_RENDER_MODE_LIGHT render mode was implemented. + + - A new API function called `FT_Get_BDF_Property' has been added + to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font + files. THIS IS STILL EXPERIMENTAL, since it hasn't been + properly tested yet. + + - A Windows FNT specific API has been added, mostly to access font + headers. This is used by Wine. + + - TrueType tables without an `hmtx' table are now tolerated when + an incremental interface is used. This happens for certain + Type42 fonts passed from Ghostscript to FreeType. + + - The PFR font driver is now capable of returning the font family + and style names when they are available (instead of the sole + `FontID'). This is performed by parsing an *undocumented* + portion of the font file! + + + III. MISCELLANEOUS + + - The path stroker in FT_STROKER_H has entered beta stage. It now + works very well, but its interface might change a bit in the + future. More on this in later releases. + + - The documentation for FT_Size_Metrics didn't appear properly in + the API reference. + + - The file docs/VERSION.DLL has been updated to explain versioning + with FreeType (i.e., comparing release/libtool/so numbers, and + how to use them in autoconf scripts). + + - The installation documentation has been seriously revamped. + Everything is now in the `docs' directory. + + +====================================================================== + +CHANGES BETWEEN 2.1.3 and 2.1.2 + + I. IMPORTANT BUG FIXES + + - FT_Vector_Transform had been incorrectly modified in 2.1.2, + resulting in incorrect transformations being applied (for + example, rotations were processed in opposite angles). + + - The format 8 and 12 TrueType charmap enumeration routines have + been fixed (FT_Get_Next_Char returned invalid values). + + - The PFR font driver returned incorrect advance widths if the + outline and metrics resolution defined in the font file were + different. + + - FT_Glyph_To_Bitmap now returns successfully when called with an + FT_BitmapGlyph argument (it previously returned an error). + + - A bug in the Type 1 loader that prevented valid font bounding + boxes to be loaded from multiple master fonts. + + - The SFNT validation code has been rewritten. FreeType can now + load `broken' fonts that were usable on Windows, but not with + previous versions of the library. + + - The computation of bearings in the BDF driver has been fixed. + + - The Postscript hinter crashed when trying to hint certain glyphs + (more precisely, when trying to apply hints to an empty glyph + outline). + + - The TrueType glyph loader now supports composites in `Apple + format' (they differ slightly from Microsoft/OpenType ones in + the way transformation offsets are computed). + + - FreeType was very slow at opening certain asian CID/CFF fonts, + due to fixed increment in dynamic array re-allocations. This + has been changed to exponential behaviour to get acceptable + performance. + + + + II. IMPORTANT CHANGES + + - The PCF driver now supports gzip-compressed font files natively. + This means that you will be able to use all these bitmap fonts + that come with XFree86 with FreeType (and libXft/libXft2, by + extension). + + - The automatic and postscript hinters have both been updated. + This results in a relatively important increase of rendering + quality since many nasty defaults have been suppressed. Please + visit the web page: + + http://www.freetype.org/hinting/smooth-hinting.html + + for additional details on this topic. + + - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32 + (instead of just being an FT_Int). This breaks source and + binary compatibility for 16bit systems only, while retaining + both of them for 32 and 64 bit ones. + + Some new flags have been added consequently: + + FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter + (but not native format hinters). + + FT_LOAD_TARGET_NORMAL :: Hint and render for normal + anti-aliased displays. + + FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays. + + FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or + BGR sub-pixel displays (like LCD + screens). THIS IS STILL + EXPERIMENTAL! + + FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for + vertical sub-pixel displays (like + rotated LCD screens). THIS IS STILL + EXPERIMENTAL! + + FT_LOAD_MONOCHROME is still supported, but only affects + rendering, not the hinting. + + Note that the `ftview' demo program available in the `ft2demos' + package has been updated to support LCD-optimized display on + non-paletted displays (under Win32 and X11). + + - The PFR driver now supports embedded bitmaps (all formats + supported), and returns correct kerning metrics for all glyphs. + + - The TrueType charmap loader now supports certain `broken' fonts + that load under Windows without problems. + + - The cache API has been slightly modified (it's still a beta!): + + - The type FTC_ImageDesc has been removed; it is now replaced + by FTC_ImageTypeRec. Note that one of its fields is a + `load_flag' parameter for FT_Load_Glyph. + + - The field `num_grays' of FT_SBitRec has been changed to + `max_grays' in order to fit within a single byte. Its + maximum value is thus 255 (instead of 256 as previously). + + + III. MISCELLANEOUS + + - Added support for the DESTDIR variable during `make install'. + This simplifies packaging of FreeType. + + - Included modified copies of the ZLib sources in `src/gzip' in + order to support gzip-compressed PCF fonts. We do not use the + system-provided zlib for now, though this is a probable + enhancement for future releases. + + - The DocMaker tool used to generate the on-line API reference has + been completely rewritten. It is now located in + `src/tools/docmaker/docmaker.py'. Features: + + - better cross-referenced output + - more polished output + - uses Python regular expressions (though it didn't speed the + program) + - much more modular structure, which allows for different + `backends' in order to generate HTML, XML, or whatever + format. + + One can regenerate the API reference by calling: + + python src/tools/docmaker/docmaker.py \ + --prefix=ft2 \ + --title=FreeType-2.1.3 \ + --output= + include/freetype/*.h \ + include/freetype/config/*.h \ + include/freetype/cache/*.h + + - A new, experimental, support for incremental font loading (i.e., + loading of fonts where the glyphs are not in the font file + itself, but provided by an external component, like a Postscript + interpreter) has been added by Graham Asher. This is still work + in progress, however. + + - A new, EXPERIMENTAL, path stroker has been added. It doesn't + suffer from severe rounding errors and treat bezier arcs + directly. Still work in progress (i.e. not part of the official + API). See the file for some of the + details. + + - The massive re-formatting of sources and internal re-design is + still under-way. Many internal functions, constants, and types + have been renamed. + + +====================================================================== + +CHANGES BETWEEN 2.1.2 and 2.1.1 + + I. IMPORTANT BUG FIXES + + - Many font drivers didn't select a Unicode charmap by default + when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS + options enabled), causing many applications to not be able to + display text correctly with the 2.1.x releases. + + - The PFR driver had a bug in its composite loading code that + produces incorrectly placed accents with many fonts. + + - The Type42 driver crashed sometimes due to a nasty bug. + + - The Type 1 custom encoding charmap didn't handle the case where + the first glyph index wasn't 0. + + - A serious typo in the TrueType composite loader produced + incorrectly placed glyphs in fonts like `Wingdings' and a few + others. + + + II. MISCELLANEOUS + + - The Win32 Visual C++ project file has been updated to include + the PFR driver as well. + + - `freetype.m4' is now installed by default by `make install' on + Unix systems. + + - The function FT_Get_PS_Font_Info now works with CID and Type42 + fonts as well. + + +====================================================================== + +CHANGES BETWEEN 2.1.1 and 2.1.0 + + I. IMPORTANT BUG FIXES + + - The `version_info' returned by `freetype-config' in 2.1.0 + returned an invalid value. It now returns 9:1:3 (2.0.9 returned + 9:0:3). + + - Version 2.1.0 couldn't be linked against applications on Win32 + and Amiga systems due to a new debug function that wasn't + properly propagated to the system-specific directory in + `builds'. + + - Various MacOS and Mac OS X specific fixes. + + - Fixed a bug in the TrueType charmap validation routines that + made version 2.1.0 too restrictive -- many popular fonts have + been rejected. + + - There was still a very small difference between the monochrome + glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the + bytecode interpreter enabled. This was caused by an invalid + flag setting in the TrueType glyph loader, making the rasterizer + change its drop-out control mode. Now the results should + _really_ be completely identical. + + - The TrueType name table loader has been improved to support many + popular though buggy Asian fonts. It now ignores empty name + entries, invalid pointer offsets and a few other incorrect + subtleties. Moreover, name strings are now loaded on demand, + which reduces the memory load of many faces (e.g. the ARIAL.TTF + font file contains a 10kByte name table with 70 names). + + - Fixed a bug in the Postscript hinter that prevented family blues + substitution to happen correctly. + + + II. NEW FEATURES + + - Three new font drivers in this release: + + * A BDF font driver, contributed by Franco Zappa Nardelli, + heavily modified by Werner Lemberg. It also supports + anti-aliased bitmaps (using a slightly extended BDF format). + + * A Type42 font driver, contributed by Roberto Alameda. It is + still experimental but seems to work relatively well. + + * A PFR font driver, contributed by David Turner himself. It + doesn't support PFR hinting -- note that BitStream has at + least two patents on this format! + + + III. MISCELLANEOUS + + - The cache sub-system has been optimized in important ways. + Cache hits are now significantly faster. For example, using the + CMap cache is about twice faster than calling FT_Get_Char_Index + on most platforms. Similarly, using an SBit cache is about five + times faster than loading the bitmaps from a bitmap file, and + 300 to 500 times faster than generating them from a scalable + format. + + Note that you should recompile your sources if you designed a + custom cache class for the FT2 Cache subsystem, since the + changes performed are source, but not binary, compatible. + + +====================================================================== + +CHANGES BETWEEN 2.1.0 and 2.0.9 + + I. IMPORTANT BUG FIXES + + - The TrueType bytecode interpreter has been fixed to produce + _exactly_ the same output as FreeType 1.x. Previous differences + were due to slightly distinct fixed-point computation routines + used to perform dot products and vector length measurements. + + It seems that native TrueType hinting is _extremely_ sensitive + to rounding errors. The required vector computation routines + have been optimized and placed within the `ttinterp.c' file. + + - Fixed the parsing of accelerator tables in the PCF font driver. + + - Fixed the Type1 glyph loader routine used to compute the font's + maximum advance width. + + + II. NEW FEATURES + + - The `configure' script used on Unix systems has been modified to + check that GNU Make is being used to build the library. + Otherwise, it will display a message proposing to use the + GNUMAKE environment variable to name it. + + The Unix-specific file README.UNX has been modified accordingly. + + + III. MISCELLANEOUS + + - The FreeType License in `docs/FTL.TXT' has been updated to + include a proposed preferred disclaimer. If you are using + FreeType in your products, you are encouraged (but not mandated) + to use the following text in your documentation: + + """ + Portions of this software are copyright © 1996-2002 The + FreeType Project (www.freetype.org). All rights reserved. + """ + + - The default size of the render pool has been reduced to 16kByte. + This shouldn't result in any noticeable performance penalty, + unless you are using the engine as-is to render very large and + complex glyphs. + + - The FreeType 2 redesign has begun. More information can be + found at this URL: + + http://www.freetype.org/freetype2/redesign.html + + The following internal changes have been performed within the + sources of this release: + + - Many internal types have been renamed to increase + consistency. The following should be true, except for + public types: + + * All structure types have a name ending in `Rec' (short + for `record'). + + * A pointer-to-structure type has the same name as the + structure, _without_ the `Rec' suffix. + + Example: + + typedef struct FooRec_ + { + ... + + } FooRec, *Foo; + + - Many internal macros have been renamed to increase + consistency. The following should be true: + + * All macros have a name beginning with `FT_'. This + required a few changes like + + ALLOC => FT_ALLOC + FREE => FT_FREE + REALLOC => FT_REALLOC + + * All macros are completely UPPERCASE. This required a + few changes like: + + READ_Short => FT_READ_SHORT + NEXT_Short => FT_NEXT_SHORT + GET_ULongLE => FT_GET_ULONG_LE + MEM_Set => FT_MEM_SET + MEM_Copy => FT_MEM_COPY + etc. + + * Whenever possible, all macro names follow the + FT__ pattern. For example + + ACCESS_Frame => FT_FRAME_ENTER + FORGET_Frame => FT_FRAME_EXIT + EXTRACT_Frame => FT_FRAME_EXTRACT + RELEASE_Frame => FT_FRAME_RELEASE + + FILE_Pos => FT_STREAM_POS + FILE_Seek => FT_STREAM_SEEK + FILE_Read => FT_STREAM_READ + FILE_ReadAt => FT_STREAM_READ_AT + READ_Fields => FT_STREAM_READ_FIELDS + + - Many internal functions have been renamed to follow the + FT__ pattern. For example: + + FT_Seek_Stream => FT_Stream_Seek + FT_Read_Stream_At => FT_Stream_ReadAt + FT_Done_Stream => FT_Stream_Close + FT_New_Stream => FT_Stream_Open + FT_New_Memory_Stream => FT_Stream_OpenMemory + FT_Extract_Frame => FT_Stream_ExtractFrame + + Note that method names do not contain `_'. + + - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced + with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a + type as the fourth argument. Instead, the array element + type size is computed automatically from the type of the + target pointer used. + + - A new object class, FT_CMap, has been introduced. These + internal objects are used to model character maps. This + eases the support of additional charmap types within the + engine. + + - A new configuration file named `ftstdlib.h' has been added + to `include/freetype/config'. It is used to define aliases + for _every_ routine of the ISO C library that the font + engine uses. Each aliases has a `ft_' prefix + (e.g. `ft_strlen' is an alias for `strlen'). + + This is used to ease the porting of FreeType 2 to exotic + runtime environments where the ISO C Library isn't available + (e.g. XFree86 extension modules). + + More details are available in the `ChangeLog' file. + + +====================================================================== + +CHANGES BETWEEN 2.0.9 and 2.0.8 + + I. IMPORTANT BUG FIXES + + - Certain fonts like `foxjump.ttf' contain broken name tables with + invalid entries and wild offsets. This caused FreeType to crash + when trying to load them. + + The SFNT `name' table loader has been fixed to be able to + support these strange fonts. + + Moreover, the code in charge of processing this table has been + changed to always favour Windows-formatted entries over other + ones. Hence, a font that works on Windows but not on the Mac + will load cleanly in FreeType and report accurate values for + Family & PostScript names. + + - The CID font driver has been fixed. It unfortunately returned a + Postscript Font name with a leading slash, as in + `/MunhwaGothic-Regular'. + + - FreeType 2 should now compile fine on AIX 4.3.3 as a shared + library. + + - A bug in the Postscript hinter has been found and fixed, + removing un-even stem widths at small pixel sizes (like 14-17). + + This improves the quality of a certain number of Postscript + fonts. + + + II. NEW FEATURES + + - A new function named `FT_Library_Version' has been added to + return the current library's major, minor, and patch version + numbers. This is important since the macros FREETYPE_MAJOR, + FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the + library is dynamically linked by a program. + + - Two new APIs have been added: `FT_Get_First_Char' and + `FT_Get_Next_Char'. + + Together, these can be used to iterate efficiently over the + currently selected charmap of a given face. Read the API + reference for more details. + + + III. MISCELLANEOUS + + - The FreeType sources are under heavy internal re-factoring. As + a consequence, we have created a branch named `STABLE' on the + CVS to hold all future releases/fixes in the 2.0.x family. + + The HEAD branch now contains the re-factored sources and + shouldn't be used for testing or packaging new releases. In + case you would like to access the 2.0.9 sources from our CVS + repository, use the tag `VER-2-0-9'. + + +====================================================================== + +CHANGES BETWEEN 2.0.8 and 2.0.7 + + I. IMPORTANT BUG FIXES + + - There was a small but nasty bug in `freetype-config.in' which + caused the `freetype-config' script to fail on Unix. + + This didn't prevent the installation of the library or even its + execution, but caused problems when trying to compile many Unix + packages that depend on it. + + - Some TrueType or OpenType fonts embedded in PDF documents do not + have a 'cmap', 'post' and 'name' as is required by the + specification. FreeType no longer refuses to load such fonts. + + - Various fixes to the PCF font driver. + + +====================================================================== + +CHANGES BETWEEN 2.0.7 and 2.0.6 + + I. IMPORTANT BUG FIXES + + - Fixed two bugs in the Type 1 font driver. The first one + resulted in a memory leak in subtle cases. The other one caused + FreeType to crash when trying to load `.gsf' files (Ghostscript + so-called Postscript fonts). + + (This made _many_ KDE applications crash on certain systems. + FreeType _is_ becoming a critical system component on Linux :-) + + - Fixed a memory leak in the CFF font driver. + + - Fixed a memory leak in the PCF font driver. + + - Fixed the Visual C++ project file + `builds/win32/visualc/freetype.dsp' since it didn't include the + Postscript hinter component, causing errors at build time. + + - Fixed a small rendering bug in the anti-aliased renderer that + only occurred when trying to draw thin (less than 1 pixel) + strokes. + + - Fixed `builds/unix/freetype2.a4' which is used to generate a + valid `freetype2.m4' for use with autoconf. + + - Fixed the OpenVMS Makefiles. + + + II. MISCELLANEOUS + + - Added `configure' and `install' scripts to the top-level + directory. A GNU-style installation is thus now easily possible + with + + ./configure + make + make install + + +====================================================================== + +CHANGES BETWEEN 2.0.6 and 2.0.5 + + I. IMPORTANT BUG FIXES + + - It wasn't possible to load embedded bitmaps when the auto-hinter + was used. This is now fixed. + + - The TrueType font driver didn't load some composites properly + (the sub-glyphs were slightly shifted, and this was only + noticeable when using monochrome rendering). + + - Various fixes to the auto-hinter. They merely improve the + output of sans-serif fonts. Note that there are still problems + with serifed fonts and composites (accented characters). + + - All scalable font drivers erroneously returned un-fitted glyph + advances when hinting was requested. This created problems for + a number of layout applications. This is a very old bug that + got undetected mainly because most test/demo program perform + rounding explicitly or implicitly (through the cache). + + - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in + certain cases. + + - `glnames.py' still contained a bug that made FreeType return + invalid names for certain glyphs. + + - The library crashed when loading certain Type 1 fonts like + `sadn.pfb' (`Stalingrad Normal'), which appear to contain + pathetic font info dictionaries. + + - The TrueType glyph loader is now much more paranoid and checks + everything when loading a given glyph image. This was necessary + to avoid problems (crashes and/or memory overwrites) with broken + fonts that came from a really buggy automatic font converter. + + + II. IMPORTANT UPDATES AND NEW FEATURES + + - Important updates to the Mac-specific parts of the library. + + - The caching sub-system has been completely re-designed, and its + API has evolved (the old one is still supported for backward + compatibility). + + The documentation for it is not yet completed, sorry. For now, + you are encouraged to continue using the old API. However, the + ftview demo program in the ft2demos package has already been + updated to use the new caching functions. + + - A new charmap cache is provided too. See `FTC_CMapCache'. This + is useful to perform character code -> glyph index translations + quickly, without the need for an opened FT_Face. + + - A NEW POSTSCRIPT HINTER module has been added to support native + hints in the following formats: PostScript Type 1, PostScript + CID, and CFF/CEF. + + Please test! Note that the auto-hinter produces better results + for a number of badly-hinted fonts (mostly auto-generated ones) + though. + + - A memory debugger is now part of the standard FreeType sources. + To enable it, define FT_DEBUG_MEMORY in + , and recompile the library. + + Additionally, define the _environment_ variable FT_DEBUG_MEMORY + and run any program using FreeType. When the library is exited, + a summary of memory footprints and possible leaks will be + displayed. + + This works transparently with _any_ program that uses FreeType. + However, you will need a lot of memory to use this (allocated + blocks are never released to the heap to detect double deletes + easily). + + + III. MISCELLANEOUS + + - We are aware of subtle differences between the output of + FreeType versions 1 and 2 when it comes to monochrome + TrueType-hinted glyphs. These are most probably due to small + differences in the monochrome rasterizers and will be worked out + in an upcoming release. + + - We have decided to fork the sources in a `stable' branch, and an + `unstable' one, since FreeType is becoming a critical component + of many Unix systems. + + The next bug-fix releases of the library will be named 2.0.7, + 2.0.8, etc., while the `2.1' branch will contain a version of + the sources where we will start major reworking of the library's + internals, in order to produce FreeType 2.2.0 (or even 3.0) in a + more distant future. + + We also hope that this scheme will allow much more frequent + releases than in the past. + + +====================================================================== + +CHANGES BETWEEN 2.0.5 and 2.0.4 + + NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE + WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1) + + - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and + `lslash' unavailable from Unicode charmaps of Postscript fonts. + This prevented the correct display of Polish text, for example. + + - The kerning table of Type 1 fonts was loaded by FreeType, when its + AFM file was attached to its face, but the + FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly, + preventing FT_Get_Kerning to return meaningful values. + + - Improved SFNT (TrueType & OpenType) charmap support. Slightly + better performance, as well as support for the new formats defined + by the OpenType 1.3 specification (8, 10, and 12) + + - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid + computations in certain rare cases, producing ugly artefacts. + + - The size of the EM square is computed with a more accurate + algorithm for Postscript fonts. The old one caused slight errors + with embedded fonts found in PDF documents. + + - Fixed a bug in the cache manager that prevented normal LRU + behaviour within the cache manager, causing unnecessary reloads + (for FT_Face and FT_Size objects only). + + - Added a new function named `FT_Get_Name_Index' to retrieve the + glyph index of a given glyph name, when found in a face. + + - Added a new function named `FT_Get_Postscript_Name' to retrieve + the `unique' Postscript font name of a given face. + + - Added a new public header size named FT_SIZES_H (or + ) providing new FT_Size-management functions: + FT_New_Size, FT_Activate_Size, FT_Done_Size. + + - Fixed a reallocation bug that generated a dangling pointer (and + possibly memory leaks) with Postscript fonts (in + src/psaux/psobjs.c). + + - Many fixes for 16-bit correctness. + + - Removed many pedantic compiler warnings from the sources. + + - Added an Amiga build directory in `builds/amiga'. + + +====================================================================== + +CHANGES BETWEEN 2.0.4 and 2.0.3 + + - Fixed a rather annoying bug that was introduced in 2.0.3. Namely, + the font transformation set through FT_Set_Transform was applied + twice to auto-hinted glyphs, resulting in incorrectly rotated text + output. + + - Fixed _many_ compiler warnings. FT2 should now compile cleanly + with Visual C++'s most pedantic warning level (/W4). It already + compiled fine with GCC and a few other compilers. + + - Fixed a bug that prevented the linear advance width of composite + TrueType glyphs to be correctly returned. + + - Fixed the Visual C++ project files located in + `builds/win32/visualc' (previous versions used older names of the + library). + + - Many 32-bit constants have an `L' appended to their value, in + order to improve the 16-bitness of the code. Someone is actually + trying to use FT2 on an Atari ST machine! + + - Updated the `builds/detect.mk' file in order to automatically + build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of + `/sbin/init' and wasn't previously detected as a Unix platform by + the FreeType build system. + + - Updated the Unix-specific portions of the build system (new + libtool version, etc.). + + - The SFNT kerning loader now ensures that the table is sorted + (since some problem fonts do not meet this requirement). + + +======================================================================= + +CHANGES BETWEEN 2.0.3 and 2.0.2 + + I. CHANGES TO THE MODULES / FONT DRIVERS + + - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix + several annoying artefacts, mainly: + + - Blue zone alignment of horizontal stems wasn't performed + correctly, resulting in artefacts like the `d' being placed + one pixel below the `b' in some fonts like Time New Roman. + + - Overshoot thresholding wasn't performed correctly, creating + unpleasant artefacts at large character pixel sizes. + + - Composite glyph loading has been simplified. This gets rid + of various artefacts where the components of a composite + glyphs were not correctly spaced. + + These are the last changes to the current auto-hinting module. + A new hinting sub-system is currently in the work in order to + support native hints in Type 1 / CFF / OpenType fonts, as well + as globally improve rendering. + + - The PCF driver has been fixed. It reported invalid glyph + dimensions for the fonts available on Solaris. + + - The Type 1, CID and CFF drivers have been modified to fix the + computation of the EM size. + + - The Type 1 driver has been fixed to avoid a dangerous bug that + crashed the library with non-conforming fonts (i.e. ones that do + not place the .notdef glyph at position 0). + + - The TrueType driver had a rather subtle bug (dangling pointer + when loading composite glyphs) that could crash the library in + rare occasions! + + + II. HIGH-LEVEL API CHANGES + + - The error code enumeration values have been changed. An error + value is decomposed in a generic error code, and a module + number. see for details. + + - A new public header file has been introduced, named + FT_TRIGONOMETRY_H (include/freetype/fttrigon.h), providing + trigonometric functions to compute sines, cosines, arctangents, + etc. with 16.16 fixed precision. The implementation is based on + the CORDIC algorithm and is very fast while being sufficiently + accurate. + + + III. INTERNALS + + - Added BeOS-specific files in the old build sub-system. Note + that no changes were required to compile the library with Jam. + + - The configuration is now capable of automatically detecting + 64-bit integers on a set of predefined compilers (GCC, Visual + C++, Borland C++) and will use them by default. This provides a + small performance boost. + + - A small memory leak that happened when opening 0-sized files + (duh!) have been fixed. + + - Fixed bezier stack depth bug in the routines provided by the + FT_BBOX_H header file. Also fixed similar bugs in the + rasterizers. + + - The outline bounding box code has been rewritten to use direct + computations, instead of bezier sub-division, to compute the + exact bounding box of glyphs. This is slightly slower but more + accurate. + + - The build system has been improved and fixed, mainly to support + `make' on Windows 2000 correctly, avoid problems with `make + distclean' on non Unix systems, etc. + + - Hexadecimal constants have been suffixed with `U' to avoid + problems with certain compilers on 64-bit platforms. + + - A new directory named `src/tools' has been created. It contains + Python scripts and simple unit test programs used to develop the + library. + + - The DocMaker tool has been moved from `docs' to `src/tools' and + has been updated with the following: + + - Now accepts the `--title=XXXX' or `-t XXXX' option from the + command line to set the project's name in the generated API + reference. + + - Now accepts the `--output=DIR' or `-o DIR' option from the + command line to set the output directory for all generated + HTML files. + + - Now accepts the `--prefix=XXXX' or `-p XXX' option from the + command line to set the file prefix to use for all + generated HTML files. + + - Now generates the current time/data on each generated page + in order to distinguish between versions. + + DocMaker can be used with other projects now, not only FT2 + (e.g. MLib, FTLayout, etc.). + + +====================================================================== + +CHANGES BETWEEN 2.0.2 and 2.0.1 + + I. CHANGES TO THE MODULES / FONT DRIVERS + + - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to + avoid legal problems with the Apple patents. It seems that we + mistakenly turned this option on in previous releases of the + build. + + Note that if you want to use the bytecode interpreter in order + to get high-quality TrueType rendering, you will need to toggle + by hand the definition of the + TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file + `include/freetype/config/ftoption.h'. + + - The CFF driver has been improved by Tom Kacvinsky and Sander van + der Wal: + + * Support for `seac' emulation. + * Support for `dotsection'. + * Support for retrieving glyph names through + `FT_Get_Glyph_Name'. + + The first two items are necessary to correctly a large number of + Type 1 fonts converted to the CFF formats by Adobe Acrobat. + + - The Type 1 driver was also improved by Tom & others: + + * Better EM size computation. + * Better support for synthetic (transformed) fonts. + * The Type 1 driver returns the charstrings corresponding to + each glyph in the `glyph->control_data' field after a call to + `FT_Load_Glyph' (thanks Ha Shao). + + - Various other bugfixes, including the following: + + * Fixed a nasty memory leak in the Type 1 driver. + * The autohinter and the pcf driver used static writable data + when they shouldn't. + * Many casts were added to make the code more 64-bits safe. It + also now compiles on Windows XP 64-bits without warnings. + * Some incorrect writable statics were removed in the `autohint' + and `pcf' drivers. FreeType 2 now compiles on Epoc again. + + + II. CHANGES TO THE HIGH-LEVEL API + + - The library header files inclusion scheme has been changed. The + old scheme looked like: + + #include + #include + #include + #include + + Now you should use: + + #include + #include FT_FREETYPE_H + #include FT_GLYPH_H + #include FT_CACHE_H + #include FT_CACHE_IMAGE_H + + NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS + RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE + TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1). + + The file is used to define the header filename + macros. The complete and commented list of macros is available + in the API reference under the section name `Header File Macros' + in Chapter I. + + For more information, see section I of the following document: + + http://www.freetype.org/ + freetype2/docs/tutorial/step1.html + + or + + http://freetype.sourceforge.net/ + freetype2/docs/tutorial/step1.html + + - Many, many comments have been added to the public source file in + order to automatically generate the API Reference through the + `docmaker.py' Python script. + + The latter has been updated to support the grouping of sections + in chapters and better index sort. See: + + http://www.freetype.org/freetype2/docs/reference/ft2-toc.html + + + III. CHANGES TO THE BUILD PROCESS + + - If you are not building FreeType 2 with its own build system + (but with your own Makefiles or project files), you will need to + be aware that the build process has changed a little bit. + + You don't need to put the `src' directory in the include path + when compiling any FT2 component. Instead, simply put the + component's directory in the current include path. + + So, if you were doing something like: + + cc -c -Iinclude -Isrc src/base/ftbase.c + + change the line to: + + cc -c -Iinclude -Isrc/base src/base/ftbase.c + + If you were doing something like: + + cd src/base + cc -c -I../../include -I.. ftbase.c + + change it to: + + cd src/base + cc -c -I../../include ftbase.c + + +====================================================================== + +CHANGES BETWEEN 2.0.1 and 2.0 + + 2.0.1 introduces a few changes: + + - Fixed many bugs related to the support of CFF / OpenType fonts. + These formats are now much better supported though there is + still work planned to deal with charset tables and PDF-embedded + CFF files that use the old `seac' command. + + - The library could not be compiled in debug mode with a very + small number of C compilers whose pre-processors didn't + implement the `##' directive correctly (i.e. per se the ANSI C + specification!) An elegant fix was found. + + - Added support for the free Borland command-line C++ Builder + compiler. Use `make setup bcc32'. Also fixed a few source + lines that generated new warnings with BCC32. + + - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of + a conic Bezier arc. + + - Updated the INSTALL file to add IDE compilation. + + - Other minor bug fixes, from invalid Type 1 style flags to + correct support of synthetic (obliqued) fonts in the + auto-hinter, better support for embedded bitmaps in a SFNT font. + + - Fixed some problems with `freetype-config'. + + Finally, the `standard' scheme for including FreeType headers is now + gradually changing, but this will be explained in a later release + (probably 2.0.2). + + And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi + for their contributions! + + +====================================================================== + +CHANGES BETWEEN beta8 and 2.0 + + - Changed the default installation path for public headers from + `include/freetype' to `include/freetype2'. + + Also added a new `freetype-config' that is automatically generated + and installed on Unix and Cygwin systems. The script itself is + used to retrieve the current install path, C compilation flags as + well as linker flags. + + - Fixed several small bugs: + + * Incorrect max advance width for fixed-pitch Type 1 fonts. + * Incorrect glyph names for certain TrueType fonts. + * The glyph advance was not copied when FT_Glyph_To_Bitmap was + called. + * The linearHoriAdvance and linearVertAdvance fields were not + correctly returned for glyphs processed by the auto-hinter. + * `type1z' renamed back to `type1'; the old `type1' module has + been removed. + + - Revamped the build system to make it a lot more generic. This + will allow us to re-use nearly un-modified in lots of other + projects (including FreeType Layout). + + - Changed `cid' to use `psaux' too. + + - Added the cache sub-system. See as well as + the sources in `src/cache'. Note that it compiles but is still + untested for now. + + - Updated `docs/docmaker.py', a draft API reference is available at + http://www.freetype.org/ft2api.html. + + - Changed `type1' to use `psaux'. + + - Created a new module named `psaux' to hold the Type 1 & Type 2 + parsing routines. It should be used by `type1', `cid', and `cff' + in the future. + + - Fixed an important bug in `FT_Glyph_Get_CBox'. + + - Fixed some compiler warnings that happened since the TrueType + bytecode decoder was deactivated by default. + + - Fixed two memory leaks: + + * The memory manager (16 bytes) isn't released in + FT_Done_FreeType! + * Using custom input streams, the copy of the original stream was + never released. + + - Fixed the auto-hinter by performing automatic computation of the + `filling direction' of each glyph. This is done through a simple + and fast approximation, and seems to work (problems spotted by + Werner though). The Arphic fonts are a lot nicer though there are + still a lot of things to do to handle Asian fonts correctly. + + +====================================================================== + +BETA-8 (RELEASE CANDIDATE) CHANGES + + - Deactivated the TrueType bytecode interpreter by default. + + - Deactivated the `src/type1' font driver. Now `src/type1z' is used + by default. + + - Updates to the build system. We now compile the library correctly + under Unix system through `configure' which is automatically + called on the first `make' invocation. + + - Added the auto-hinting module! Fixing some bugs here and there. + + - Found some bugs in the composite loader (seac) of the Type1-based + font drivers. + + - Renamed the directory `freetype2/config' to `freetype2/builds' and + updated all relevant files. + + - Found a memory leak in the `type1' driver. + + - Incorporated Tom's patches to support flex operators correctly in + OpenType/CFF fonts. Now all I need is to support pure CFF and CEF + fonts to be done with this driver :-) + + - Added the Windows FNT/FON driver in `src/winfonts'. For now, it + always `simulates' a Unicode charmap, so it shouldn't be + considered completed right now. + + It is there to be more a proof of concept than anything else + anyway. The driver is a single C source file, that compiles to 3 + Kb of code. + + I'm still working on the PCF/BDF drivers, but I'm too lazy to + finish them now. + + - CHANGES TO THE HIGH-LEVEL API + + * FT_Get_Kerning has a new parameter that allows you to select the + coordinates of the kerning vector (font units, scaled, scaled + + grid-fitted). + * The outline functions are now in and not + part of anymore. + * now contains declarations for + FT_New_Library, FT_Done_Library, FT_Add_Default_Modules. + * The so-called convenience functions have moved from `ftoutln.c' + to `ftglyph.c', and are thus available with this optional + component of the library. They are declared in + now. + * Anti-aliased rendering is now the default for FT_Render_Glyph + (i.e. corresponds to render_mode == 0 == ft_render_mode_normal). + To generate a monochrome bitmap, use ft_render_mode_mono, or the + FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char. + FT_LOAD_ANTI_ALIAS is still defined, but values to 0. + * now include , + solving a few headaches :-) + * The type FT_GlyphSlotRec has now a `library' field. + + - CHANGES TO THE `ftglyph.h' API + + This API has been severely modified in order to make it simpler, + clearer, and more efficient. It certainly now looks like a real + `glyph factory' object, and allows client applications to manage + (i.e. transform, bbox and render) glyph images without ever + knowing their original format. + + - Added support for CID-keyed fonts to the CFF driver. Maybe + support for pure CFF + CEF fonts should come in? + + - Cleaned up source code in order to avoid two functions with the + same name. Also changed the names of the files in `type1z' from + `t1XXXX' to `z1XXXX' in order to avoid any conflicts. + + `make multi' now works well :-) + + Also removed the use of `cidafm' for now, even if the source files + are still there. This functionality will certainly go into a + specific module. + + - ADDED SUPPORT FOR THE AUTO-HINTER + + It works :-) I have a demo program which simply is a copy of + `ftview' that does a `FT_Add_Module(library, + &autohinter_module_class)' after library initialization, and Type + 1 & OpenType/CFF fonts are now hinted. + + CID fonts are not hinted, as they include no charmap and the + auto-hinter doesn't include `generic' global metrics computations + yet. + + Now, I need to release this thing to the FreeType 2 source. + + - CHANGES TO THE RENDERER MODULES + + The monochrome and smooth renderers are now in two distinct + directories, namely `src/raster1' and `src/smooth'. Note that the + old `src/renderer' is now gone. + + I ditched the 5-gray-levels renderers. Basically, it involved a + simple #define toggle in 'src/raster1/ftraster.c'. + + FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now + select the best renderer available, depending on render mode. If + the current renderer for a given glyph image format isn't capable + of supporting the render mode, another one will be found in the + library's list. This means that client applications do not need + to switch or set the renderers themselves (as in the latest + change), they'll get what they want automatically. At last. + + Changed the demo programs accordingly. + + - MAJOR INTERNAL REDESIGN: + + A lot of internal modifications have been performed lately on the + source in order to provide the following enhancements: + + * More generic module support: + + The FT_Module type is now defined to represent a handle to a + given module. The file contains the + FT_Module_Class definition, as well as the module-loading public + API. + + The FT_Driver type is still defined, and still represents a + pointer to a font driver. Note that FT_Add_Driver is replaced + by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc. + + * Support for generic glyph image types: + + The FT_Renderer type is a pointer to a module used to perform + various operations on glyph image. + + Each renderer is capable of handling images in a single format + (e.g. ft_glyph_format_outline). Its functions are used to: + + - transform an glyph image + - render a glyph image into a bitmap + - return the control box (dimensions) of a given glyph image + + The scan converters `ftraster.c' and `ftgrays.c' have been moved + to the new directory `src/renderer', and are used to provide two + default renderer modules. + + One corresponds to the `standard' scan-converter, the other to + the `smooth' one. + + he current renderer can be set through the new function + FT_Set_Renderer. + + The old raster-related function FT_Set_Raster, FT_Get_Raster and + FT_Set_Raster_Mode have now disappeared, in favor of the new: + + FT_Get_Renderer + FT_Set_Renderer + + See the file for more details. + + These changes were necessary to properly support different + scalable formats in the future, like bi-color glyphs, etc. + + * Glyph loader object: + + A new internal object, called a 'glyph loader' has been + introduced in the base layer. It is used by all scalable format + font drivers to load glyphs and composites. + + This object has been created to reduce the code size of each + driver, as each one of them basically re-implemented its + functionality. + + See and the FT_GlyphLoader type for + more information. + + * FT_GlyphSlot has new fields: + + In order to support extended features (see below), the + FT_GlyphSlot structure has a few new fields: + + linearHoriAdvance: + + This field gives the linearly scaled (i.e. scaled but + unhinted) advance width for the glyph, expressed as a 16.16 + fixed pixel value. This is useful to perform WYSIWYG text. + + linearVertAdvance: + This field gives the linearly scaled advance height for the + glyph (relevant in vertical glyph layouts only). This is + useful to perform WYSIWYG text. + + Note that the two above field replace the removed `metrics2' + field in the glyph slot. + + advance: + This field is a vector that gives the transformed advance for + the glyph. By default, it corresponds to the advance width, + unless FT_LOAD_VERTICAL_LAYOUT was specified when calling + FT_Load_Glyph or FT_Load_Char. + + bitmap_left: + This field gives the distance in integer pixels from the + current pen position to the left-most pixel of a glyph image + IF IT IS A BITMAP. It is only valid when the `format' field + is set to `ft_glyph_format_bitmap', for example, after calling + the new function FT_Render_Glyph. + + bitmap_top: + This field gives the distance in integer pixels from the + current pen position (located on the baseline) to the top-most + pixel of the glyph image IF IT IS A BITMAP. Positive values + correspond to upwards Y. + + loader: + This is a new private field for the glyph slot. Client + applications should not touch it. + + + * Support for transforms and direct rendering in FT_Load_Glyph: + + Most of the functionality found in has been + moved to the core library. Hence, the following: + + - A transform can be specified for a face through + FT_Set_Transform. this transform is applied by FT_Load_Glyph + to scalable glyph images (i.e. NOT TO BITMAPS) before the + function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM + was set in the load flags. + + - Once a glyph image has been loaded, it can be directly + converted to a bitmap by using the new FT_Render_Glyph + function. Note that this function takes the glyph image from + the glyph slot, and converts it to a bitmap whose properties + are returned in `face.glyph.bitmap', `face.glyph.bitmap_left' + and `face.glyph.bitmap_top'. The original native image might + be lost after the conversion. + + - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph + and FT_Load_Char functions will call FT_Render_Glyph + automatically when needed. + + - Reformatted all modules source code in order to get rid of the + basic data types redefinitions (i.e. `TT_Int' instead of `FT_Int', + `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific + prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for + relevant structures. + + +====================================================================== + +OLD CHANGES FOR BETA 7 + + - bug-fixed the OpenType/CFF parser. It now loads and displays my + two fonts nicely, but I'm pretty certain that more testing is + needed :-) + + - fixed the crummy Type 1 hinter, it now handles accented characters + correctly (well, the accent is not always well placed, but that's + another problem..) + + - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well + for only 13 Kb of code ;-) Doesn't read AFM files though, nor the + really useful CMAP files.. + + - fixed two bugs in the smooth renderer (src/base/ftgrays.c). + Thanks to Boris Letocha for spotting them and providing a fix. + + - fixed potential `divide by zero' bugs in ftcalc.c. + + - added source code for the OpenType/CFF driver (still incomplete + though..) + + - modified the SFNT driver slightly to perform more robust header + checks in TT_Load_SFNT_Header. This prevents certain font files + (e.g. some Type 1 Multiple Masters) from being incorrectly + `recognized' as TrueType font files.. + + - moved a lot of stuff from the TrueType driver to the SFNT module, + this allows greater code re-use between font drivers + (e.g. TrueType, OpenType, Compact-TrueType, etc..) + + - added a tiny segment cache to the SFNT Charmap 4 decoder, in order + to minimally speed it up.. + + - added support for Multiple Master fonts in `type1z'. There is + also a new file named which defines functions to + manage them from client applications. + + The new file `src/base/ftmm.c' is also optional to the engine.. + + - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) + + small bug fixes in FT_Load_Glyph, the `type1' driver, etc.. + + - a minor fix to the Type 1 driver to let them apply the font matrix + correctly (used for many oblique fonts..) + + - some fixes for 64-bit systems (mainly changing some FT_TRACE calls + to use %p instead of %lx). Thanks to Karl Robillard. + + - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) + + added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be + cropped when loaded from a file (maybe I should move the bitmap + cropper to the base layer ??). + + - changed the default number of gray levels of the smooth renderer + to 256 (instead of the previous 128). Of course, the human eye + can't see any difference ;-) + + - removed TT_MAX_SUBGLYPHS, there is no static limit on the number + of subglyphs in a TrueType font now.. + + +====================================================================== + +OLD CHANGES 16 May 2000 + + - tagged `BETA-6' in the CVS tree. This one is a serious release + candidate even though it doesn't incorporate the auto-hinter yet.. + + - various obsolete files were removed, and copyright header updated + + - finally updated the standard raster to fix the monochrome + rendering bug + re-enable support for 5-gray levels anti-aliasing + (suck, suck..) + + - created new header files, and modified sources accordingly: + + + - simple FreeType types, without the API + + - definition of memory-management macros + + - added the `DSIG' (OpenType Digital Signature) tag to + + + - light update/cleaning of the build system + changes to the sources + in order to get rid of _all_ compiler warnings with three + compilers, i.e: + + gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and + LCC + + IMPORTANT NOTE FOR WIN32-LCC USERS: + | + | It seems the C pre-processor that comes with LCC is broken, it + | doesn't recognize the ANSI standard directives # and ## + | correctly when one of the argument is a macro. Also, + | something like: + | + | #define F(x) print##x + | + | F(("hello")) + | + | will get incorrectly translated to: + | + | print "hello") + | + | by its pre-processor. For this reason, you simply cannot build + | FreeType 2 in debug mode with this compiler.. + + - yet another massive grunt work. I've changed the definition of + the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These + now take an argument, which is the function's return value type. + + This is necessary to compile FreeType as a DLL on Windows and + OS/2. Depending on the compiler used, a compiler-specific keyword + like __export or __system must be placed before (VisualC++) or + after (BorlandC++) the type.. + + Of course, this needed a lot of changes throughout the source code + to make it compile again... All cleaned up now, apparently.. + + Note also that there is a new EXPORT_VAR macro defined to allow + the _declaration_ of an exportable public (constant) + variable. This is the case of the raster interfaces (see + ftraster.h and ftgrays.h), as well as each module's interface (see + sfdriver.h, psdriver.h, etc..) + + - new feature: it is now possible to pass extra parameters to font + drivers when creating a new face object. For now, + this capability is unused. It could however prove to + be useful in a near future.. + + the FT_Open_Args structure was changes, as well as the internal + driver interface (the specific `init_face' module function has + now a different signature). + + - updated the tutorial (not finished though). + + - updated the top-level BUILD document + + - fixed a potential memory leak that could occur when loading + embedded bitmaps. + + - added the declaration of FT_New_Memory_Face in + , as it was missing from the public header + (the implementation was already in `ftobjs.c'). + + - the file has been seriously updated in order + to allow the automatic generation of error message tables. See + the comments within it for more information. + + - major directory hierarchy re-organisation. This was done for two + things: + + * first, to ease the `manual' compilation of the library by + requiring at lot less include paths :-) + + * second, to allow external programs to effectively access + internal data fields. For example, this can be extremely + useful if someone wants to write a font producer or a font + manager on top of FreeType. + + Basically, you should now use the 'freetype/' prefix for header + inclusion, as in: + + #include + #include + + Some new include sub-directories are available: + + a. the `freetype/config' directory, contains two files used to + configure the build of the library. Client applications + should not need to look at these normally, but they can if + they want. + + #include + #include + + b. the `freetype/internal' directory, contains header files that + describes library internals. These are the header files that + were previously found in the `src/base' and `src/shared' + directories. + + + As usual, the build system and the demos have been updated to + reflect the change.. + + Here's a layout of the new directory hierarchy: + + TOP_DIR + include/ + freetype/ + freetype.h + ... + config/ + ftoption.h + ftconfig.h + ftmodule.h + + internal/ + ftobjs.h + ftstream.h + ftcalc.h + ... + + src/ + base/ + ... + + sfnt/ + psnames/ + truetype/ + type1/ + type1z/ + + + Compiling a module is now much easier, for example, the following + should work when in the TOP_DIR directory on an ANSI build: + + gcc -c -I./include -I./src/base src/base/ftbase.c + gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c + etc.. + + (of course, using -Iconfig/ if you provide system-specific + configuration files). + + - updated the structure of FT_Outline_Funcs in order to allow direct + coordinate scaling within the outline decomposition routine (this + is important for virtual `on' points with TrueType outlines) + + updates to the rasters to support this.. + + - updated the OS/2 table loading code in `src/sfnt/ttload.c' in + order to support version 2 of the table (see OpenType 1.2 spec) + + - created `include/tttables.h' and `include/t1tables.h' to allow + client applications to access some of the SFNT and T1 tables of a + face with a procedural interface (see `FT_Get_Sfnt_Table') + + updates to internal source files to reflect the change.. + + - some cleanups in the source code to get rid of warnings when + compiling with the `-Wall -W -ansi -pedantic' options in gcc. + + - debugged and moved the smooth renderer to `src/base/ftgrays.c' and + its header to `include/ftgrays.h' + + - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites + with up to 80 sub-glyphs !! Thanks to Werner + + +====================================================================== + +OLD CHANGES - 14-apr-2000 + + - fixed a bug in the TrueType glyph loader that prevented the + correct loading of some CJK glyphs in mingli.ttf + + - improved the standard Type 1 hinter in `src/type1' + + - fixed two bugs in the experimental Type 1 driver in `src/type1z' + to handle the new XFree86 4.0 fonts (and a few other ones..) + + - the smooth renderer is now complete and supports sub-banding to + render large glyphs at high speed. However, it is still located + in `demos/src/ftgrays.c' and should move to the library itself in + the next beta. NOTE: The smooth renderer doesn't compile in + stand-alone mode anymore, but this should be fixed RSN.. + + - introduced convenience functions to more easily deal with glyph + images, see `include/ftglyph.h' for more details, as well as the + new demo program named `demos/src/ftstring.c' that demonstrates + its use + + - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1 + drivers (this is required by the auto-hinter to improve its + results). + + - changed the raster interface, in order to allow client + applications to provide their own span-drawing callbacks. + However, only the smooth renderer supports this. See + `FT_Raster_Params' in the file `include/ftimage.h'. + + - fixed a small bug in FT_MulFix that caused incorrect transform + computation! + + - Note: The tutorial is out-of-date. + + +====================================================================== + +OLD CHANGES - 12-mar-2000 + + - changed the layout of configuration files : now, all ANSI + configuration files are located in + `freetype2/config'. System-specific over-rides can be placed in + `freetype2/config/'. + + - moved all configuration macros to `config/ftoption.h' + + - improvements in the Type 1 driver with AFM support + + - changed the fields in the FT_Outline structure : the old `flags' + array is re-named `tags', while all ancient flags are encoded into + a single unsigned int named `flags'. + + - introduced new flags in FT_Outline.flags (see + ft_outline_.... enums in `ftimage.h'). + + - changed outline functions to `FT_Outline_' syntax + + - added a smooth anti-alias renderer to the demonstration programs + + - added Mac graphics driver (thanks Just) + + - FT_Open_Face changed in order to received a pointer to a + FT_Open_Args descriptor.. + + - various cleanups, a few more API functions implemented (see + FT_Attach_File) + + - updated some docs + + +====================================================================== + +OLD CHANGES - 22-feb-2000 + + - introduced the `psnames' module. It is used to: + + o convert a Postscript glyph name into the equivalent Unicode + character code (used by the Type 1 driver(s) to synthesize on + the fly a Unicode charmap). + + o provide an interface to retrieve the Postscript names of the + Macintosh, Adobe Standard & Adobe Expert character codes. + (the Macintosh names are used by the SFNT-module postscript + names support routines, while the other two tables are used by + the Type 1 driver(s)). + + - introduced the `type1z' alternate Type 1 driver. This is a (still + experimental) driver for the Type 1 format that will ultimately + replace the one in `src/type1'. It uses pattern matching to load + data from the font, instead of a finite state analyzer. It works + much better than the `old' driver with `broken' fonts. It is also + much smaller (under 15 Kb). + + - the Type 1 drivers (both in `src/type1' and `src/type1z') are + nearly complete. They both provide automatic Unicode charmap + synthesis through the `psnames' module. No re-encoding vector is + needed. (note that they still leak memory due to some code + missing, and I'm getting lazy). + + Trivial AFM support has been added to read kerning information but + wasn't exactly tested as it should ;-) + + - The TrueType glyph loader has been seriously rewritten (see the + file `src/truetype/ttgload.c'. It is now much, much simpler as + well as easier to read, maintain and understand :-) Preliminary + versions introduced a memory leak that has been reported by Jack + Davis, and is now fixed.. + + - introduced the new `ft_glyph_format_plotter', used to represent + stroked outlines like Windows `Vector' fonts, and certain Type 1 + fonts like `Hershey'. The corresponding raster will be written + soon. + + - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new + interface that uses a structure to describe the input stream, the + driver (if required), etc.. + + +TODO + + - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap + + - Add a function like FT_Load_Character(face, char_code, load_flags) + that would really embed a call to FT_Get_Char_Index then + FT_Load_Glyph to ease developer's work. + + - Update the tutorial! + + - consider adding support for Multiple Master fonts in the Type 1 + drivers. + + - Test the AFM routines of the Type 1 drivers to check that kerning + information is returned correctly. + + - write a decent auto-gridding component !! We need this to release + FreeType 2.0 gold ! + + +less urgent needs: + + - add a CFF/Type2 driver + - add a BDF driver + - add a FNT/PCF/HBF driver + - add a Speedo driver from the X11 sources + + +====================================================================== + +OLDER CHANGES - 27-jan-2000 + + - updated the `sfnt' module interface to allow several SFNT-based + drivers to co-exist peacefully + + - updated the `T1_Face' type to better separate Postscript font + content from the rest of the FT_Face structure. Might be used + later by the CFF/Type2 driver.. + + - added an experimental replacement Type 1 driver featuring advanced + (and speedy) pattern matching to retrieve the data from postscript + fonts. + + - very minor changes in the implementation of FT_Set_Char_Size and + FT_Set_Pixel_Sizes (they now implement default to lighten the font + driver's code). + + +====================================================================== + +OLD MESSAGE + +This file summarizes the changes that occurred since the last `beta' +of FreeType 2. Because the list is important, it has been divided into +separate sections: + +Table Of Contents: + + I High-Level Interface (easier !) + II Directory Structure + III Glyph Image Formats + IV Build System + V Portability + VI Font Drivers + + +---------------------------------------------------------------------- + +High-Level Interface: + + The high-level API has been considerably simplified. Here is how: + + - resource objects have disappeared. this means that face objects + can now be created with a single function call (see FT_New_Face + and FT_Open_Face) + + - when calling either FT_New_Face & FT_Open_Face, a size object + and a glyph slot object are automatically created for the face, + and can be accessed through `face->glyph' and `face->size' if + one really needs to. In most cases, there's no need to call + FT_New_Size or FT_New_Glyph. + + - similarly, FT_Load_Glyph now only takes a `face' argument + (instead of a glyph slot and a size). Also, its `result' + parameter is gone, as the glyph image type is returned in the + field `face->glyph.format' + + - the list of available charmaps is directly accessible through + `face->charmaps', counting `face->num_charmaps' elements. Each + charmap has an 'encoding' field which specifies which known + encoding it deals with. Valid values are, for example: + + ft_encoding_unicode (for ASCII, Latin-1 and Unicode) + ft_encoding_apple_roman + ft_encoding_sjis + ft_encoding_adobe_standard + ft_encoding_adobe_expert + + other values may be added in the future. Each charmap still + holds its `platform_id' and `encoding_id' values in case the + encoding is too exotic for the current library + + +---------------------------------------------------------------------- + +Directory Structure: + + Should seem obvious to most of you: + + freetype/ + config/ -- configuration sub-makefiles + ansi/ + unix/ -- platform-specific configuration files + win32/ + os2/ + msdos/ + + include/ -- public header files, those to be included + directly by client apps + + src/ -- sources of the library + base/ -- the base layer + sfnt/ -- the sfnt `driver' (see the drivers section + below) + truetype/ -- the truetype driver + type1/ -- the type1 driver + shared/ -- some header files shared between drivers + + demos/ -- demos/tools + + docs/ -- documentation (a bit empty for now) + + +---------------------------------------------------------------------- + +Glyph Image Formats: + + Drivers are now able to register new glyph image formats within the + library. For now, the base layer supports of course bitmaps and + vector outlines, but one could imagine something different like + colored bitmaps, bi-color vectors or whatever else (Metafonts anyone + ??). + + See the file `include/ftimage.h'. Note also that the type + FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which + should encompass all known bitmap types. + + Each new image format must provide at least one `raster', i.e. a + module capable of transforming the glyph image into a bitmap. It's + also possible to change the default raster used for a given glyph + image format. + + The default outline scan-converter now uses 128 levels of grays by + default, which tends to smooth many things. Note that the demo + programs have been updated significantly in order to display these.. + + +---------------------------------------------------------------------- + +Build system: + + You still need GNU Make to build the library. The build system has + been very seriously re-vamped in order to provide things like : + + - automatic host platform detection (reverting to 'config/ansi' if + it is not detected, with pseudo-standard compilation flags) + + - the ability to compile from the Makefiles with very different and + exotic compilers. Note that linking the library can be difficult + for some platforms. + + For example, the file `config/win32/lcclib.bat' is invoked by the + build system to create the `.lib' file with LCC-Win32 because its + librarian has too many flaws to be invoked directly from the + Makefile. + + Here's how it works: + + - the first time you type `make', the build system runs a series of + sub-makefiles in order to detect your host platform. It then + dumps what it found, and creates a file called `config.mk' in the + current directory. This is a sub-Makefile used to define many + important Make variables used to build the library. + + - the second time, the build system detects the `config.mk' then use + it to build the library. All object files go into 'obj' by + default, as well as the library file, but this can easily be + changed. + + Note that you can run `make setup' to force another host platform + detection even if a `config.mk' is present in the current + directory. Another solution is simply to delete the file, then + re-run make. + + Finally, the default compiler for all platforms is gcc (for now, + this will hopefully changed in the future). You can however specify + a different compiler by specifying it after the 'setup' target as + in: + + gnumake setup lcc on Win32 to use the LCC compiler + gnumake setup visualc on Win32 to use Visual C++ + + See the file `config//detect.mk' for a list of supported + compilers for your platforms. + + It should be relatively easy to write new detection rules files and + config.mk.. + + Finally, to build the demo programs, go to `demos' and launch GNU + Make, it will use the `config.mk' in the top directory to build the + test programs.. + + +---------------------------------------------------------------------- + +Portability: + + In the previous beta, a single FT_System object was used to + encompass all low-level operations like thread synchronisation, + memory management and i/o access. This has been greatly simplified: + + - thread synchronisation has been dropped, for the simple reason + that the library is already re-entrant, and that if you really + need two threads accessing the same FT_Library, you should + really synchronize access to it yourself with a simple mutex. + + - memory management is performed through a very simple object + called `FT_Memory', which really is a table containing a table + of pointers to functions like malloc, realloc and free as well + as some user data (closure). + + - resources have disappeared (they created more problems than they + solved), and i/o management have been simplified greatly as a + result. Streams are defined through FT_Stream objects, which + can be either memory-based or disk-based. + + Note that each face has its own stream, which is closed only + when the face object is destroyed. Hence, a function like + TT_Flush_Face in 1.x cannot be directly supported. However, if + you really need something like this, you can easily tailor your + own streams to achieve the same feature at a lower level (and + use FT_Open_Face instead of FT_New_Face to create the face). + + See the file `include/ftsystem.h' for more details, as well as the + implementations found in `config/unix' and `config/ansi'. + + +---------------------------------------------------------------------- + +Font Drivers: + + The Font Driver interface has been modified in order to support + extensions & versioning. + + + The list of the font drivers that are statically linked to the + library at compile time is managed through a new configuration file + called `config//ftmodule.h'. + + This file is autogenerated when invoking `make modules'. This + target will parse all sub-directories of 'src', looking for a + `module.mk' rules file, used to describe the driver to the build + system. + + Hence, one should call `make modules' each time a font driver is + added or removed from the `src' directory. + + Finally, this version provides a `pseudo-driver' in `src/sfnt'. + This driver doesn't support font files directly, but provides + services used by all TrueType-like font drivers. Hence, its code is + shared between the TrueType & OpenType font formats, and possibly + more formats to come if we're lucky.. + + +---------------------------------------------------------------------- + +Extensions support: + + The extensions support is inspired by the one found in 1.x. + + Now, each font driver has its own `extension registry', which lists + which extensions are available for the font faces managed by the + driver. + + Extension ids are now strings, rather than 4-byte tags, as this is + usually more readable. + + Each extension has: + - some data, associated to each face object + - an interface (table of function pointers) + + An extension that is format-specific should simply register itself + to the correct font driver. Here is some example code: + + // Registering an extensions + // + FT_Error FT_Init_XXXX_Extension( FT_Library library ) + { + FT_DriverInterface* tt_driver; + + driver = FT_Get_Driver( library, "truetype" ); + if (!driver) return FT_Err_Unimplemented_Feature; + + return FT_Register_Extension( driver, &extension_class ); + } + + + // Implementing the extensions + // + FT_Error FT_Proceed_Extension_XXX( FT_Face face ) + { + FT_XXX_Extension ext; + FT_XXX_Extension_Interface ext_interface; + + ext = FT_Get_Extension( face, "extensionid", &ext_interface ); + if (!ext) return error; + + return ext_interface->do_it(ext); + } + +------------------------------------------------------------------------ + +Copyright 2000-2016 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. + + +Local Variables: +version-control: never +coding: utf-8 +End: + +--- end of CHANGES --- diff --git a/modules/freetype2/docs/CMAKE b/modules/freetype2/docs/CMAKE new file mode 100644 index 000000000..31237ae15 --- /dev/null +++ b/modules/freetype2/docs/CMAKE @@ -0,0 +1,2 @@ +Support for a cmake build has been contributed. See the remarks in the +top-level `CMakeLists.txt' file for more. diff --git a/modules/freetype2/docs/CUSTOMIZE b/modules/freetype2/docs/CUSTOMIZE new file mode 100644 index 000000000..e8817b72b --- /dev/null +++ b/modules/freetype2/docs/CUSTOMIZE @@ -0,0 +1,152 @@ +How to customize the compilation of the library +=============================================== + + FreeType is highly customizable to fit various needs, and this + document describes how it is possible to select options and + components at compilation time. + + +I. Configuration macros + + The file `include/freetype/config/ftoption.h' contains a list of + commented configuration macros that can be toggled by developers to + indicate which features should be active while building the library. + + These options range from debug level to availability of certain + features, like native TrueType hinting through a bytecode + interpreter. + + We invite you to read this file for more information. You can + change the file's content to suit your needs, or override it with + one of the techniques described below. + + +II. Modules list + + If you use GNU make please edit the top-level file `modules.cfg'. + It contains a list of available FreeType modules and extensions to + be compiled. Change it to suit your own preferences. Be aware that + certain modules depend on others, as described in the file. GNU + make uses `modules.cfg' to generate `ftmodule.h' (in the object + directory). + + If you build FreeType in a directory separate from the source files, + put your customized `modules.cfg' in that directory; that way you + can keep the source files `clean'. + + If you don't use GNU make you have to manually edit the file + `include/freetype/config/ftmodule.h' (which is *not* used with if + compiled with GNU make) to add or remove the drivers and components + you want to compile into the library. See `INSTALL.ANY' for more + information. + + +III. System interface + + FreeType's default interface to the system (i.e., the parts that + deal with memory management and i/o streams) is located in + `src/base/ftsystem.c'. + + The current implementation uses standard C library calls to manage + memory and to read font files. It is however possible to write + custom implementations to suit specific systems. + + To tell the GNU Make-based build system to use a custom system + interface, you have to define the environment variable FTSYS_SRC to + point to the relevant implementation: + + on Unix: + + ./configure + export FTSYS_SRC=foo/my_ftsystem.c + make + make install + + on Windows: + + make setup + set FTSYS_SRC=foo/my_ftsystem.c + make + + +IV. Overriding default configuration and module headers + + It is possible to override the default configuration and module + headers without changing the original files. There are three ways + to do that: + + + 1. With GNU make + + [This is actually a combination of method 2 and 3.] + + Just put your custom `ftoption.h' file into the objects directory + (normally `/objs' if you build in the source tree, or the + directory where you invoke configure if you build in a separate + directory), which GNU make prefers over the standard location. No + action is needed for `ftmodule.h' because it is generated + automatically in the objects directory. + + 2. Using the C include path + + Use the C include path to ensure that your own versions of the + files are used at compile time when the lines + + #include FT_CONFIG_OPTIONS_H + #include FT_CONFIG_MODULES_H + + are compiled. Their default values being + and , you + can do something like: + + custom/ + config/ + ftoption.h => custom options header + ftmodule.h => custom modules list + + include/ => normal FreeType 2 include + ... + + then change the C include path to always give the path to `custom' + before the FreeType 2 `include'. + + + 3. Redefining FT_CONFIG_OPTIONS_H and FT_CONFIG_MODULES_H + + Another way to do the same thing is to redefine the macros used to + name the configuration headers. To do so, you need a custom + `ft2build.h' whose content can be as simple as: + + #ifndef FT2_BUILD_MY_PLATFORM_H_ + #define FT2_BUILD_MY_PLATFORM_H_ + + #define FT_CONFIG_OPTIONS_H + #define FT_CONFIG_MODULES_H + + #include + + #endif /* FT2_BUILD_MY_PLATFORM_H_ */ + + Place those files in a separate directory, e.g., + + custom/ + ft2build.h => custom version described above + my-ftoption.h => custom options header + my-ftmodule.h => custom modules list header + + and change the C include path to ensure that `custom' is always + placed before the FT2 `include' during compilation. + +---------------------------------------------------------------------- + +Copyright 2003-2016 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. + + +--- end of CUSTOMIZE --- diff --git a/modules/freetype2/docs/DEBUG b/modules/freetype2/docs/DEBUG new file mode 100644 index 000000000..29e10721c --- /dev/null +++ b/modules/freetype2/docs/DEBUG @@ -0,0 +1,204 @@ +Debugging within the FreeType sources +===================================== + +I. Configuration macros +----------------------- + +There are several ways to enable debugging features in a FreeType 2 +builds. This is controlled through the definition of special macros +located in the file `ftoptions.h'. The macros are: + + + FT_DEBUG_LEVEL_ERROR + + #define this macro if you want to compile the FT_ERROR macro calls + to print error messages during program execution. This will not + stop the program. Very useful to spot invalid fonts during + development and to code workarounds for them. + + FT_DEBUG_LEVEL_TRACE + + #define this macro if you want to compile both macros FT_ERROR and + FT_TRACE. This also includes the variants FT_TRACE0, FT_TRACE1, + FT_TRACE2, ..., FT_TRACE7. + + The trace macros are used to send debugging messages when an + appropriate `debug level' is configured at runtime through the + FT2_DEBUG environment variable (more on this later). + + FT_DEBUG_MEMORY + + If this macro is #defined, the FreeType engine is linked with a + small but effective debugging memory manager that tracks all + allocations and frees that are performed within the font engine. + + When the FT2_DEBUG_MEMORY environment variable is defined at + runtime, a call to FT_Done_FreeType will dump memory statistics, + including the list of leaked memory blocks with the source + locations where these were allocated. It is always a very good + idea to define this in development builds. This works with _any_ + program linked to FreeType, but requires a big deal of memory (the + debugging memory manager never frees the blocks to the heap in + order to detect double frees). + + When FT2_DEBUG_MEMORY isn't defined at runtime, the debugging + memory manager is ignored, and performance is unaffected. + + +II. Debugging macros +-------------------- + +Several macros can be used within the FreeType sources to help +debugging its code: + + + 1. FT_ERROR(( ... )) + + This macro is used to send debug messages that indicate relatively + serious errors (like broken font files), but will not stop the + execution of the running program. Its code is compiled only when + either FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined in + `ftoption.h'. + + Note that you have to use a printf-like signature, but with double + parentheses, like in + + FT_ERROR(( "your %s is not %s\n", "foo", "bar" )); + + + 2. FT_ASSERT( condition ) + + This macro is used to check strong assertions at runtime. If its + condition isn't TRUE, the program will abort with a panic message. + Its code is compiled when either FT_DEBUG_LEVEL_ERROR or + FT_DEBUG_LEVEL_TRACE are defined. You don't need double + parentheses here. For example + + FT_ASSERT( ptr != NULL ); + + + 3. FT_TRACE( level, (message...) ) + + The FT_TRACE macro is used to send general-purpose debugging + messages during program execution. This macro uses an *implicit* + macro named FT_COMPONENT used to name the current FreeType + component being run. + + The developer should always define FT_COMPONENT as appropriate, + for example as in + + #undef FT_COMPONENT + #define FT_COMPONENT trace_io + + The value of the FT_COMPONENT macro is an enumeration named + `trace_XXXX' where `XXXX' is one of the component names defined in + the internal file `internal/fttrace.h'. If you modify FreeType + source and insert new `trace_XXXX' macro, you must register it in + `fttrace.h'. If you insert or remove many trace macros, you can + check the undefined or the unused trace macro by + `src/tools/chktrcmp.py'. + + Each such component is assigned a `debug level', ranging from 0 to + 7, through the use of the FT2_DEBUG environment variable + (described below) when a program linked with FreeType starts. + + When FT_TRACE is called, its level is compared to the one of the + corresponding component. Messages with trace levels *higher* than + the corresponding component level are filtered and never printed. + + This means that trace messages with level 0 are always printed, + those with level 2 are only printed when the component level is + *at least* 2. + + The second parameter to FT_TRACE must contain parentheses and + correspond to a printf-like call, as in + + FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) ) + + The shortcut macros FT_TRACE0, FT_TRACE1, FT_TRACE2, ..., + FT_TRACE7 can be used with constant level indices, and are much + cleaner to use, as in + + FT_TRACE2(( "your %s is not %s\n", "foo", "bar" )); + + +III. Environment variables +-------------------------- + +The following environment variables control debugging output and +behaviour of FreeType at runtime. + + + FT2_DEBUG + + This variable is only used when FreeType is built with + FT_DEBUG_LEVEL_TRACE defined. It contains a list of component + level definitions, following this format: + + component1:level1 component2:level2 component3:level3 ... + + where `componentX' is the name of a tracing component, as defined + in `fttrace.h', but without the `trace_' prefix. `levelX' is the + corresponding level to use at runtime. + + `any' is a special component name that will be interpreted as + `any/all components'. For example, the following definitions + + set FT2_DEBUG=any:2 memory:5 io:4 (on Windows) + export FT2_DEBUG="any:2 memory:5 io:4" (on Linux with bash) + + both stipulate that all components should have level 2, except for + the memory and io components which will be set to trace levels 5 + and 4, respectively. + + + FT2_DEBUG_MEMORY + + This environment variable, when defined, tells FreeType to use a + debugging memory manager that will track leaking memory blocks as + well as other common errors like double frees. It is also capable + of reporting _where_ the leaking blocks were allocated, which + considerably saves time when debugging new additions to the + library. + + This code is only compiled when FreeType is built with the + FT_DEBUG_MEMORY macro #defined in `ftoption.h' though, it will be + ignored in other builds. + + + FT2_ALLOC_TOTAL_MAX + + This variable is ignored if FT2_DEBUG_MEMORY is not defined. It + allows you to specify a maximum heap size for all memory + allocations performed by FreeType. This is very useful to test + the robustness of the font engine and programs that use it in + tight memory conditions. + + If it is undefined, or if its value is not strictly positive, then + no allocation bounds are checked at runtime. + + + FT2_ALLOC_COUNT_MAX + + This variable is ignored if FT2_DEBUG_MEMORY is not defined. It + allows you to specify a maximum number of memory allocations + performed by FreeType before returning the error + FT_Err_Out_Of_Memory. This is useful for debugging and testing + the engine's robustness. + + If it is undefined, or if its value is not strictly positive, then + no allocation bounds are checked at runtime. + +------------------------------------------------------------------------ + +Copyright 2002-2016 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. + + +--- end of DEBUG --- diff --git a/modules/freetype2/docs/FTL.TXT b/modules/freetype2/docs/FTL.TXT new file mode 100644 index 000000000..433ab060e --- /dev/null +++ b/modules/freetype2/docs/FTL.TXT @@ -0,0 +1,169 @@ + 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 © The FreeType + Project (www.freetype.org). All rights reserved. + """ + + Please replace 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/modules/freetype2/docs/GPLv2.TXT b/modules/freetype2/docs/GPLv2.TXT new file mode 100644 index 000000000..b2fe7b6af --- /dev/null +++ b/modules/freetype2/docs/GPLv2.TXT @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/modules/freetype2/docs/INSTALL b/modules/freetype2/docs/INSTALL new file mode 100644 index 000000000..5155a4b2e --- /dev/null +++ b/modules/freetype2/docs/INSTALL @@ -0,0 +1,88 @@ + +There are several ways to build the FreeType library, depending on +your system and the level of customization you need. Here is a short +overview of the documentation available: + + +I. Normal installation and upgrades +=================================== + + 1. Unix Systems (including Mac OS X, Cygwin, and MSys on Windows) + + Please read `INSTALL.UNIX' to install or upgrade FreeType 2 on a + Unix system. Note that you *need* GNU Make for automatic + compilation, since other make tools won't work (this includes BSD + Make). + + GNU Make VERSION 3.80 OR NEWER IS NEEDED! + + + 2. On VMS with the `mms' build tool + + See `INSTALL.VMS' for installation instructions on this platform. + + + 3. Other systems using GNU Make + + On non-Unix platforms, it is possible to build the library using + GNU Make utility. Note that *NO OTHER MAKE TOOL WILL WORK*[1]! + This methods supports several compilers on Windows, OS/2, and + BeOS, including MinGW, Visual C++, Borland C++, and more. + + Instructions are provided in the file `INSTALL.GNU'. + + + 4. With an IDE Project File (e.g., for Visual Studio or CodeWarrior) + + We provide a small number of `project files' for various IDEs to + automatically build the library as well. Note that these files + are not supported and only sporadically maintained by FreeType + developers, so don't expect them to work in each release. + + To find them, have a look at the content of the `builds/' + directory, where stands for your OS or environment. + + + 5. Using cmake + + See the top-level `CMakeLists.txt' file for more information. + + + 6. From you own IDE, or own Makefiles + + If you want to create your own project file, follow the + instructions given in the `INSTALL.ANY' document of this + directory. + + +II. Custom builds of the library +================================ + + Customizing the compilation of FreeType is easy, and allows you to + select only the components of the font engine that you really need. + For more details read the file `CUSTOMIZE'. + + +---------------------------------------------------------------------- + +[1] make++, a make tool written in Perl, has sufficient support of GNU + make extensions to build FreeType. See + + http://makepp.sourceforge.net + + for more information; you need version 1.19 or newer, and you must + pass option `--norc-substitution'. + +---------------------------------------------------------------------- + +Copyright 2000-2016 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. + + +--- end of INSTALL --- diff --git a/modules/freetype2/docs/INSTALL.ANY b/modules/freetype2/docs/INSTALL.ANY new file mode 100644 index 000000000..aae277308 --- /dev/null +++ b/modules/freetype2/docs/INSTALL.ANY @@ -0,0 +1,156 @@ +Instructions on how to build FreeType with your own build tool +============================================================== + +See the file `CUSTOMIZE' to learn how to customize FreeType to +specific environments. + + +I. Standard procedure +--------------------- + + * DISABLE PRE-COMPILED HEADERS! This is very important for Visual + C++, because FreeType uses lines like: + + #include FT_FREETYPE_H + + which are not correctly supported by this compiler while being ISO + C compliant! + + * You need to add the directory `include' to your include path when + compiling the library. + + * FreeType 2 is made of several components; each of them is located + in a subdirectory of `freetype2/src'. For example, + `freetype2/src/truetype/' contains the TrueType font driver. + + * DO NOT COMPILE ALL C FILES! Rather, compile the following ones. + + -- base components (required) + + src/base/ftsystem.c + src/base/ftinit.c + src/base/ftdebug.c + + src/base/ftbase.c + + src/base/ftbbox.c -- recommended, see + src/base/ftglyph.c -- recommended, see + + src/base/ftbdf.c -- optional, see + src/base/ftbitmap.c -- optional, see + src/base/ftcid.c -- optional, see + src/base/ftfntfmt.c -- optional, see + src/base/ftfstype.c -- optional + src/base/ftgasp.c -- optional, see + src/base/ftgxval.c -- optional, see + src/base/ftlcdfil.c -- optional, see + src/base/ftmm.c -- optional, see + src/base/ftotval.c -- optional, see + src/base/ftpatent.c -- optional + src/base/ftpfr.c -- optional, see + src/base/ftstroke.c -- optional, see + src/base/ftsynth.c -- optional, see + src/base/fttype1.c -- optional, see + src/base/ftwinfnt.c -- optional, see + + src/base/ftmac.c -- only on the Macintosh + + -- font drivers (optional; at least one is needed) + + src/bdf/bdf.c -- BDF font driver + src/cff/cff.c -- CFF/OpenType font driver + src/cid/type1cid.c -- Type 1 CID-keyed font driver + src/pcf/pcf.c -- PCF font driver + src/pfr/pfr.c -- PFR/TrueDoc font driver + src/sfnt/sfnt.c -- SFNT files support + (TrueType & OpenType) + src/truetype/truetype.c -- TrueType font driver + src/type1/type1.c -- Type 1 font driver + src/type42/type42.c -- Type 42 font driver + src/winfonts/winfnt.c -- Windows FONT / FNT font driver + + -- rasterizers (optional; at least one is needed for vector + formats) + + src/raster/raster.c -- monochrome rasterizer + src/smooth/smooth.c -- anti-aliasing rasterizer + + -- auxiliary modules (optional) + + src/autofit/autofit.c -- auto hinting module + src/cache/ftcache.c -- cache sub-system (in beta) + src/gzip/ftgzip.c -- support for compressed fonts (.gz) + src/lzw/ftlzw.c -- support for compressed fonts (.Z) + src/bzip2/ftbzip2.c -- support for compressed fonts (.bz2) + src/gxvalid/gxvalid.c -- TrueTypeGX/AAT table validation + src/otvalid/otvalid.c -- OpenType table validation + src/psaux/psaux.c -- PostScript Type 1 parsing + src/pshinter/pshinter.c -- PS hinting module + src/psnames/psnames.c -- PostScript glyph names support + + + Notes: + + `ftcache.c' needs `ftglyph.c' + `ftfstype.c' needs `fttype1.c' + `ftglyph.c' needs `ftbitmap.c' + `ftstroke.c' needs `ftglyph.c' + `ftsynth.c' needs `ftbitmap.c' + + `cff.c' needs `sfnt.c', `pshinter.c', and `psnames.c' + `truetype.c' needs `sfnt.c' and `psnames.c' + `type1.c' needs `psaux.c' `pshinter.c', and `psnames.c' + `type1cid.c' needs `psaux.c', `pshinter.c', and `psnames.c' + `type42.c' needs `truetype.c' + + Please consult the central `include/freetype/config/ftoption.h' + configuration file for details on additional libraries necessary + for some optional features. + + + Read the file `CUSTOMIZE' in case you want to compile only a subset + of the drivers, renderers, and optional modules; a detailed + description of the various base extension is given in the top-level + file `modules.cfg'. + + You are done. In case of problems, see the archives of the FreeType + development mailing list. + + +II. Support for flat-directory compilation +------------------------------------------ + + It is possible to put all FreeType 2 source files into a single + directory, with the *exception* of the `include' hierarchy. + + 1. Copy all files in current directory + + cp freetype2/src/base/*.[hc] . + cp freetype2/src/raster1/*.[hc] . + cp freetype2/src/smooth/*.[hc] . + etc. + + 2. Compile sources + + cc -c -Iinclude -DFT2_BUILD_LIBRARY ftsystem.c + cc -c -Iinclude -DFT2_BUILD_LIBRARY ftinit.c + cc -c -Iinclude -DFT2_BUILD_LIBRARY ftdebug.c + cc -c -Iinclude -DFT2_BUILD_LIBRARY ftbase.c + etc. + + You don't need to define the FT_FLAT_COMPILATION macro (as this + was required in previous releases of FreeType 2). + +---------------------------------------------------------------------- + +Copyright 2003-2016 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. + + +--- end of INSTALL.ANY --- diff --git a/modules/freetype2/docs/INSTALL.CROSS b/modules/freetype2/docs/INSTALL.CROSS new file mode 100644 index 000000000..428580416 --- /dev/null +++ b/modules/freetype2/docs/INSTALL.CROSS @@ -0,0 +1,177 @@ +This document contains instructions on how to cross-build the FreeType +library on Unix systems, for example, building binaries for Linux/MIPS +on FreeBSD/i386. Before reading this document, please consult the +file `INSTALL.UNIX' for required tools and the basic self-building +procedure. + + + 1. Required Tools + ----------------- + + For self-building the FreeType library on a Unix system, GNU Make + 3.80 or newer is required. `INSTALL.UNIX' contains hints how to + check the installed `make'. + + The GNU C compiler to cross-build the target system is required. + Currently, using a non-GNU cross compiler is untested. The cross + compiler is expected to be installed with a system prefix. For + example, if your building system is FreeBSD/i386 and the target + system is Linux/MIPS, the cross compiler should be installed with + the name `mips-ip22-linuxelf-gcc'. + + A C compiler for a self-build is required also, to build a tool + (`apinames') that is executed during the build procedure. Non-GNU + self compilers are acceptable, but such a setup is untested. + + + 2. Configuration + ---------------- + + 2.1. Building and target system + + To configure a cross-build, the options `--host=' and + `--build=' must be passed to the `configure' script. + For example, if your build system is FreeBSD/i386 and the target + system is Linux/MIPS, say + + ./configure \ + --build=i386-unknown-freebsd \ + --host=mips-ip22-linuxelf \ + [other options] + + It should be noted that `--host=' specifies the system + where the built binaries will be executed, not the system where + the build actually happens. Older versions of GNU autoconf use + the option pair `--host=' and `--target='. This is broken and + doesn't work. Similarly, an explicit CC specification like + + env CC=mips-ip22-linux-gcc ./configure # BAD + + or + + env CC=/usr/local/mips-ip22-linux/bin/gcc ./configure # BAD + + doesn't work either; such a configuration confuses the + `configure' script while trying to find the cross and native C + compilers. + + + 2.2. The prefix to install FreeType2 + + Setting `--prefix=' properly is important. The prefix + to install FreeType2 is written into the `freetype-config' + script and `freetype2.pc' configuration file. + + If the built FreeType 2 library is used as a part of the + cross-building system, the prefix is expected to be different + from the self-building system. For example, a configuration + with `--prefix=/usr/local' installs binaries into the + system-wide `/usr/local' directory, which then can't be executed + due to the incorrect architecture. This causes confusion in + configuration of all applications that use FreeType2. Instead, + use a prefix to install the cross-build into a separate system + tree, for example, `--prefix=/usr/local/mips-ip22-linux/'. + + On the other hand, if the built FreeType 2 library is used as a + part of the target system, the prefix to install should reflect + the file system structure of the target system. + + + 2.3. Library dependencies + + FreeType normally depends on external libraries like `libpng' or + `libharfbuzz'. The easiest case is to deactivate all such + dependencies using the `--without-XXX' configuration options. + However, if you want to use those libraries, you should ensure + that they are available both on the target system and as + (cross-compiled) libraries on the build system. + + FreeType uses `pkg-config' to find most of the libraries; the + other libraries it links to are expected in the standard system + directories. Since the default pkg-config's meta-information + files (like `harfbuzz.pc') of the build platform don't work, use + one of the two possible solutions below. + + o Use pkg-config's meta-information files that are adjusted to + cross-compile and cross-link with the target platform's + libraries. Make sure those files are found before the build + system's default files. Example: + + ./configure \ + --build=i386-unknown-freebsd \ + --host=mips-ip22-linuxelf \ + PKG_CONFIG_LIBDIR="/usr/local/mips-ip22-linux/lib/pkgconfig" \ + [other options] + + See the manpage of `pkg-config' for more details. + + o Set variables like LIBPNG_LIBS as additional options to the + `configure' script, overriding the values `pkg-config' would + provide. `configure --help' shows the available environment + variables. Example: + + ./configure \ + --build=i386-unknown-freebsd \ + --host=mips-ip22-linuxelf \ + LIBPNG_CFLAGS="-I/usr/local/mips-ip22-linux/include" \ + LIBPNG_LIBS="-L/usr/local/mips-ip22-linux/lib -lpng12" \ + [other options] + + + 3. Building command + ------------------- + + If the configuration finishes successfully, invoking GNU make + builds FreeType2. Just say + + make + + or + + gmake + + depending on the name the GNU make binary actually has. + + + 4. Installation + --------------- + + Saying + + make install + + as usual to install FreeType2 into the directory tree specified by + the argument of the `--prefix' option. + + As noted in section 2.2, FreeType2 is sometimes configured to be + installed into the system directory of the target system, and + should not be installed in the cross-building system. In such + cases, the make variable `DESTDIR' is useful to change the root + directory in the installation. For example, after + + make DESTDIR=/mnt/target_system_root/ install + + the built FreeType2 library files are installed into the directory + `/mnt/target_system_root//lib'. + + + 5. TODO + ------- + + Cross building between Cygwin (or MSys) and Unix must be tested. + + +---------------------------------------------------------------------- + +Copyright 2006-2016 by +suzuki toshiya, 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. + + +--- end of INSTALL.CROSS --- diff --git a/modules/freetype2/docs/INSTALL.GNU b/modules/freetype2/docs/INSTALL.GNU new file mode 100644 index 000000000..f1eb0819f --- /dev/null +++ b/modules/freetype2/docs/INSTALL.GNU @@ -0,0 +1,161 @@ +This document contains instructions how to build the FreeType library +on non-Unix systems with the help of GNU Make. Note that if you are +running Cygwin or MinGW/MSYS in Windows, you should follow the +instructions in the file `INSTALL.UNIX' instead. + + + FreeType 2 includes a powerful and flexible build system that allows + you to easily compile it on a great variety of platforms from the + command line. To do so, just follow these simple instructions. + + 1. Install GNU Make + ------------------- + + Because GNU Make is the only Make tool supported to compile + FreeType 2, you should install it on your machine. + + The FreeType 2 build system relies on many features special to GNU + Make. + + NEARLY ALL OTHER MAKE TOOLS FAIL, INCLUDING `BSD MAKE', SO REALLY + INSTALL A RECENT VERSION OF GNU MAKE ON YOUR SYSTEM! + + Note that make++, a make tool written in Perl, supports enough + features of GNU make to compile FreeType. See + + http://makepp.sourceforge.net + + for more information; you need version 1.19 or newer, and you must + pass option `--norc-substitution'. + + Make sure that you are invoking GNU Make from the command line, by + typing something like: + + make -v + + to display its version number. + + VERSION 3.80 OR NEWER IS NEEDED! + + + 2. Invoke `make' + ---------------- + + Go to the root directory of FreeType 2, then simply invoke GNU + Make from the command line. This will launch the FreeType 2 host + platform detection routines. A summary will be displayed, for + example, on Win32. + + + ============================================================== + FreeType build system -- automatic system detection + + The following settings are used: + + platform windows + compiler gcc + configuration directory .\builds\windows + configuration rules .\builds\windows\w32-gcc.mk + + If this does not correspond to your system or settings please + remove the file 'config.mk' from this directory then read the + INSTALL file for help. + + Otherwise, simply type 'make' again to build the library + or 'make refdoc' to build the API reference (the latter needs + python). + ============================================================= + + + If the detected settings correspond to your platform and compiler, + skip to step 5. Note that if your platform is completely alien to + the build system, the detected platform will be `ansi'. + + + 3. Configure the build system for a different compiler + ------------------------------------------------------ + + If the build system correctly detected your platform, but you want + to use a different compiler than the one specified in the summary + (for most platforms, gcc is the default compiler), invoke GNU Make + with + + make setup + + Examples: + + to use Visual C++ on Win32, type: `make setup visualc' + to use Borland C++ on Win32, type `make setup bcc32' + to use Watcom C++ on Win32, type `make setup watcom' + to use Intel C++ on Win32, type `make setup intelc' + to use LCC-Win32 on Win32, type: `make setup lcc' + to use Watcom C++ on OS/2, type `make setup watcom' + to use VisualAge C++ on OS/2, type `make setup visualage' + + The name to use is platform-dependent. The list of + available compilers for your system is available in the file + `builds//detect.mk'. + + If you are satisfied by the new configuration summary, skip to + step 5. + + + 4. Configure the build system for an unknown platform/compiler + -------------------------------------------------------------- + + The auto-detection/setup phase of the build system copies a file + to the current directory under the name `config.mk'. + + For example, on OS/2+gcc, it would simply copy + `builds/os2/os2-gcc.mk' to `./config.mk'. + + If for some reason your platform isn't correctly detected, copy + manually the configuration sub-makefile to `./config.mk' and go to + step 5. + + Note that this file is a sub-Makefile used to specify Make + variables for compiler and linker invocation during the build. + You can easily create your own version from one of the existing + configuration files, then copy it to the current directory under + the name `./config.mk'. + + + 5. Build the library + -------------------- + + The auto-detection/setup phase should have copied a file in the + current directory, called `./config.mk'. This file contains + definitions of various Make variables used to invoke the compiler + and linker during the build. [It has also generated a file called + `ftmodule.h' in the objects directory (which is normally + `/objs/'); please read the file `docs/CUSTOMIZE' for + customization of FreeType.] + + To launch the build, simply invoke GNU Make again: The top + Makefile will detect the configuration file and run the build with + it. + + + Final note + + The above instructions build a _statically_ linked library of the + font engine in the `objs' directory. On Windows, you can build a + DLL either with MinGW (within an MSYS shell, following the + instructions in `INSTALL.UNIX'), or you use one of the Visual C++ + project files; see the subdirectories of `builds/windows'. For + everything else, you are on your own, and you might follow the + instructions in `INSTALL.ANY' to create your own Makefiles. + +---------------------------------------------------------------------- + +Copyright 2003-2016 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. + + +--- end of INSTALL.GNU --- diff --git a/modules/freetype2/docs/INSTALL.MAC b/modules/freetype2/docs/INSTALL.MAC new file mode 100644 index 000000000..42bb0d863 --- /dev/null +++ b/modules/freetype2/docs/INSTALL.MAC @@ -0,0 +1,32 @@ +Please follow the instructions in INSTALL.UNIX to install FreeType on +Mac OS X. + +Currently FreeType2 functions based on some deprecated Carbon APIs +return FT_Err_Unimplemented_Feature always, even if FreeType2 is +configured and built on the system that deprecated Carbon APIs are +available. To enable deprecated FreeType2 functions as far as possible, +replace src/base/ftmac.c by builds/mac/ftmac.c. + +Starting with Mac OS X 10.5, gcc defaults the deployment target +to 10.5. In previous versions of Mac OS X, this defaulted to 10.1. +If you want your built binaries to run only on 10.5, this change +does not concern you. If you want them to also run on older versions +of Mac OS X, then you must either set the MACOSX_DEPLOYMENT_TARGET +environment variable or pass -mmacosx-version-min to gcc. You should +specify the oldest version of Mac OS you want the code to run on. +For example, if you use Bourne shell: + + export MACOSX_DEPLOYMENT_TARGET=10.2 + +or, if you use C shell: + + setenv MACOSX_DEPLOYMENT_TARGET 10.2 + +Alternatively, you could pass "-mmacosx-version-min=10.2" to gcc. + +Here the number 10.2 is the lowest version that the built binaries +can run on. In the cases in above, the built binaries will run on +Mac OS X 10.2 and later, but _not_ earlier. If you want to run on +earlier, you have to set lower version, e.g. 10.0. + +For classic Mac OS (Mac OS 7, 8, 9) please refer to builds/mac/README. diff --git a/modules/freetype2/docs/INSTALL.UNIX b/modules/freetype2/docs/INSTALL.UNIX new file mode 100644 index 000000000..b043883a1 --- /dev/null +++ b/modules/freetype2/docs/INSTALL.UNIX @@ -0,0 +1,115 @@ +This document contains instructions on how to build the FreeType +library on Unix systems. This also works for emulations like Cygwin +or MSys on Win32: + + + 1. Ensure that you are using GNU Make + ------------------------------------- + + The FreeType build system _exclusively_ works with GNU Make. You + will not be able to compile the library with the instructions + below using any other alternative (including BSD Make). + + Check that you have GNU make by running the command: + + make -v + + This should dump some text that begins with: + + GNU Make + Copyright (C) Free Software Foundation Inc. + + Note that version 3.80 or higher is *required* or the build will + fail. + + It is also fine to have GNU Make under another name (e.g. 'gmake') + if you use the MAKE variable as described below. + + As a special exception, 'makepp' can also be used to build + FreeType 2. See the file docs/MAKEPP for details. + + + 2. Regenerate the configure script if needed + -------------------------------------------- + + This only applies if you are building a git snapshot or checkout, + *not* if you grabbed the sources of an official release. + + You need to invoke the `autogen.sh' script in the top-level + directory in order to create the `configure' script for your + platform. Normally, this simply means typing: + + sh autogen.sh + + In case of problems, you may need to install or upgrade Automake, + Autoconf or Libtool. See README.git in the top-level directory + for more information. + + + 3. Build and install the library + -------------------------------- + + The following should work on all Unix systems where the `make' + command invokes GNU Make: + + ./configure [options] + make + make install (as root) + + The default installation path is `/usr/local'. It can be changed + with the `--prefix=' option. Example: + + ./configure --prefix=/usr + + When using a different command to invoke GNU Make, use the MAKE + variable. For example, if `gmake' is the command to use on your + system, do something like: + + MAKE=gmake ./configure [options] + gmake + gmake install (as root) + + If this still doesn't work, there must be a problem with your + system (e.g., you are using a very old version of GNU Make). + + It is possible to compile FreeType in a different directory. + Assuming the FreeType source files in directory `/src/freetype' a + compilation in directory `foo' works as follows: + + cd foo + /src/freetype/configure [options] + make + make install + + + 3.1 Interdependency with HarfBuzz + ................................. + + Note that there is a chicken-and-egg problem currently since the + HarfBuzz library (used by the auto-hinter to improve support of + OpenType fonts) depends on FreeType, which can be solved as + follows in case HarfBuzz is not yet installed on your system. + + 1. Call FreeType's `configure' script with option + `--without-harfbuzz', then compile and install FreeType. + + 2. Compile and install HarfBuzz. + + 3. Call FreeType's `configure' script without option + `--without-harfbuzz' (after executing `make distclean'), then + compile and install FreeType again. + + +---------------------------------------------------------------------- + +Copyright 2003-2016 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. + + +--- end of INSTALL.UNIX --- diff --git a/modules/freetype2/docs/INSTALL.VMS b/modules/freetype2/docs/INSTALL.VMS new file mode 100644 index 000000000..ef371d70b --- /dev/null +++ b/modules/freetype2/docs/INSTALL.VMS @@ -0,0 +1,62 @@ +How to build the freetype2 library on VMS +----------------------------------------- + +It is actually very straightforward to install the Freetype2 library. +Just execute vms_make.com from the toplevel directory to build the +library. This procedure currently accepts the following options: + +DEBUG + Build the library with debug information and without optimization. + +lopts= + Options to pass to the link command e.g. lopts=/traceback + +ccopt= + Options to pass to the C compiler e.g. ccopt=/float=ieee + +In case you did download the demos, place them in a separate directory +sharing the same toplevel as the directory of Freetype2 and follow the +same instructions as above for the demos from there. The build +process relies on this to figure the location of the Freetype2 include +files. + + +To rebuild the sources it is necessary to have MMS/MMK installed on +the system. + +The library is available in the directory + + [.LIB] + +To compile applications using FreeType 2 you have to define the +logical FREETYPE pointing to the directory + + [.INCLUDE.FREETYPE] + +i.e., if the directory in which this INSTALL.VMS file is located is +$disk:[freetype] then define the logical with + + define freetype $disk:[freetype.include.freetype] + +This version has been tested with Compaq C V6.2-006 on OpenVMS Alpha +V7.2-1. + + + Any problems can be reported to + + Jouk Jansen or + Martin P.J. Zinser + +------------------------------------------------------------------------ + +Copyright 2000-2016 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. + + +--- end of INSTALL.VMS --- diff --git a/modules/freetype2/docs/LICENSE.TXT b/modules/freetype2/docs/LICENSE.TXT new file mode 100644 index 000000000..af5a1c50f --- /dev/null +++ b/modules/freetype2/docs/LICENSE.TXT @@ -0,0 +1,39 @@ + +The FreeType 2 font engine is copyrighted work and cannot be used +legally without a software license. In order to make this project +usable to a vast majority of developers, we distribute it under two +mutually exclusive open-source licenses. + +This means that *you* must choose *one* of the two licenses described +below, then obey all its terms and conditions when using FreeType 2 in +any of your projects or products. + + - The FreeType License, found in the file `FTL.TXT', which is similar + to the original BSD license *with* an advertising clause that forces + you to explicitly cite the FreeType project in your product's + documentation. All details are in the license file. This license + is suited to products which don't use the GNU General Public + License. + + Note that this license is compatible to the GNU General Public + License version 3, but not version 2. + + - The GNU General Public License version 2, found in `GPLv2.TXT' (any + later version can be used also), for programs which already use the + GPL. Note that the FTL is incompatible with GPLv2 due to its + advertisement clause. + +The contributed BDF and PCF drivers come with a license similar to that +of the X Window System. It is compatible to the above two licenses (see +file src/bdf/README and src/pcf/README). The same holds for the files +`fthash.c' and `fthash.h'; their code was part of the BDF driver in +earlier FreeType versions. + +The gzip module uses the zlib license (see src/gzip/zlib.h) which too is +compatible to the above two licenses. + +The MD5 checksum support (only used for debugging in development builds) +is in the public domain. + + +--- end of LICENSE.TXT --- diff --git a/modules/freetype2/docs/MAKEPP b/modules/freetype2/docs/MAKEPP new file mode 100644 index 000000000..58eaf551d --- /dev/null +++ b/modules/freetype2/docs/MAKEPP @@ -0,0 +1,5 @@ +As a special exception, FreeType can also be built with the 'makepp' +build tool, available from http://makepp.sourceforge.net. + +Note, however. that you will need at least version 1.19 and pass the +option --norc-substitution to have it work correctly. diff --git a/modules/freetype2/docs/PROBLEMS b/modules/freetype2/docs/PROBLEMS new file mode 100644 index 000000000..40bdc35a6 --- /dev/null +++ b/modules/freetype2/docs/PROBLEMS @@ -0,0 +1,90 @@ +This file describes various problems that have been encountered in +compiling, installing and running FreeType 2. Suggestions for +additions or other improvements to this file are welcome. + +---------------------------------------------------------------------- + +Running Problems +================ + + +* Some Type 1, Multiple Masters, and CID-keyed PostScript fonts aren't + handled correctly. + +----- + +Of course, there might be bugs in FreeType, but some fonts based on +the PostScript format can't be handled indeed. The reason is that +FreeType doesn't contain a full PostScript interpreter but applies +pattern matching instead. In case a font doesn't follow the standard +structure of the given font format, FreeType fails. A typical example +is Adobe's `Optima' font family which contains extra code to switch +between low and high resolution versions of the glyphs. + +It might be possible to patch FreeType in some situations, though. +Please report failing fonts so that we investigate the problem and set +up a list of such problematic fonts. + + +* Why do identical FreeType versions render differently on different + platforms? + +----- + +Different distributions compile FreeType with different options. The +developer version of a distribution's FreeType package, which is +needed to compile your program against FreeType, includes the file +ftoption.h. Compare each platform's copy of ftoption.h to find the +differences. + + +---------------------------------------------------------------------- + + +Compilation Problems +==================== + + +* I get an `internal compilation error' (ICE) while compiling FreeType + 2.2.1 with Intel C++. + + This has been reported for the following compiler version: + + Intel(R) C++ Compiler for 32-bit applications, + Version 9.0 Build 20050430Z Package ID: W_CC_P_9.0.019 + +----- + +The best solution is to update the compiler to version + + Intel(R) C++ Compiler for 32-bit applications, + Version 9.1 Build 20060323Z Package ID: W_CC_P_9.1.022 + +or newer. If this isn't feasible, apply the following patch. + + +--- src/cache/ftcbasic.c 20 Mar 2006 12:10:24 -0000 1.20 ++++ src/cache/ftcbasic.c.patched 15 May 2006 02:51:02 -0000 +@@ -252,7 +252,7 @@ + */ + + FT_CALLBACK_TABLE_DEF +- const FTC_IFamilyClassRec ftc_basic_image_family_class = ++ FTC_IFamilyClassRec ftc_basic_image_family_class = + { + { + sizeof ( FTC_BasicFamilyRec ), +@@ -266,7 +266,7 @@ + + + FT_CALLBACK_TABLE_DEF +- const FTC_GCacheClassRec ftc_basic_image_cache_class = ++ FTC_GCacheClassRec ftc_basic_image_cache_class = + { + { + ftc_inode_new, + + +---------------------------------------------------------------------- + +--- end of PROBLEMS --- diff --git a/modules/freetype2/docs/TODO b/modules/freetype2/docs/TODO new file mode 100644 index 000000000..4aa3f0904 --- /dev/null +++ b/modules/freetype2/docs/TODO @@ -0,0 +1,40 @@ +Here is a list of items that need to be addressed in FreeType 2 +--------------------------------------------------------------- + +* Implement stem3/counter hints properly in the Postscript hinter. + +* Add CIDCMap support to the CID driver. + +* Add track kerning support to the PFR driver. + +* Add kerning (AFM file) support to the CID driver. + + +Here is a list of bugs which should be handled +---------------------------------------------- + +Other bugs have been registered at the savannah bugzilla of FreeType. + +* CID driver: + Handle the case where a CID font has a top-level font matrix also + (see PLRM, 5.11.3, Type 0 CIDFonts). Since CID_FaceInfoRec lacks + a font_matrix entry we have to directly apply it to all subfont + matrices. + +* CID driver: + Use top-level font matrix entry for setting the upem value, not the + entries in the FDarray. If absent, use 1000. + +------------------------------------------------------------------------ + +Copyright 2001-2016 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. + + +--- end of TODO --- diff --git a/modules/freetype2/docs/VERSIONS.TXT b/modules/freetype2/docs/VERSIONS.TXT new file mode 100644 index 000000000..82f63a3a6 --- /dev/null +++ b/modules/freetype2/docs/VERSIONS.TXT @@ -0,0 +1,123 @@ +Due to our use of `libtool' to generate and install the FreeType 2 +libraries on Unix systems, as well as other historical events, it is +generally very difficult to know precisely which release of the font +engine is installed on a given system. + +This file tries to explain why and to document ways to properly detect +FreeType on Unix. + + +1. Version and Release numbers +------------------------------ + +For each new public release of FreeType 2, there are generally *three* +distinct `version' numbers to consider: + + * The official FreeType 2 release number, like 2.3.1 or 2.4.10. + + * The libtool (and Unix) specific version number, like 13.0.7. This + is what `freetype-config --version' returns. + + * The platform-specific shared object number, used for example when + the library is installed as `/usr/lib/libfreetype.so.6.7.1'. + +The platform-specific number is, unsurprisingly, platform-specific and +varies with the operating system you are using (several variants of +Linux, FreeBSD, Solaris, etc.). You should thus _never_ use it, even +for simple tests. + +The libtool-specific number does not equal the release number but is +tied to it. + +The release number is available at *compile* time through the following +macros defined in FT_FREETYPE_H: + + - FREETYPE_MAJOR: major release number + - FREETYPE_MINOR: minor release number + - FREETYPE_PATCH: patch release number + +See below for a small autoconf fragment. + +The release number is also available at *runtime* through the +`FT_Library_Version' API. + + +2. History +---------- + +The following table gives, for all releases since 2.4.0, the +corresponding libtool number, as well as the shared object number found +on _most_ systems, but not all of them: + + + release libtool so + ------------------------------- + 2.7.1 19.0.13 6.13.0 + 2.7.0 18.6.12 6.12.6 + 2.6.5 18.5.12 6.12.5 + 2.6.4 18.4.12 6.12.4 + 2.6.3 18.3.12 6.12.3 + 2.6.2 18.2.12 6.12.2 + 2.6.1 18.1.12 6.12.1 + 2.6.0 18.0.12 6.12.0 + 2.5.5 17.4.11 6.11.4 + 2.5.4 17.3.11 6.11.3 + 2.5.3 17.2.11 6.11.2 + 2.5.2 17.1.11 6.11.1 + 2.5.1 17.0.11 6.11.0 + 2.5.0 16.2.10 6.10.2 + 2.4.12 16.1.10 6.10.1 + 2.4.11 16.0.10 6.10.0 + 2.4.10 15.0.9 6.9.0 + 2.4.9 14.1.8 6.8.1 + 2.4.8 14.0.8 6.8.0 + 2.4.7 13.2.7 6.7.2 + 2.4.6 13.1.7 6.7.1 + 2.4.5 13.0.7 6.7.0 + 2.4.4 12.2.6 6.6.2 + 2.4.3 12.1.6 6.6.1 + 2.4.2 12.0.6 6.6.0 + 2.4.1 11.1.5 6.5.1 + 2.4.0 11.0.5 6.5.0 + + +3. Autoconf Code Fragment +------------------------- + +Lars Clausen contributed the following autoconf fragment to detect which +version of FreeType is installed on a system. This one tests for a +version that is at least 2.0.9; you should change it to check against +other release numbers. + + + AC_MSG_CHECKING([whether FreeType version is 2.0.9 or higher]) + old_CPPFLAGS="$CPPFLAGS" + CPPFLAGS=`freetype-config --cflags` + AC_TRY_CPP([ + +#include +#include FT_FREETYPE_H +#if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2000009 +#error Freetype version too low. +#endif + ], + [AC_MSG_RESULT(yes) + FREETYPE_LIBS=`freetype-config --libs` + AC_SUBST(FREETYPE_LIBS) + AC_DEFINE(HAVE_FREETYPE,1,[Define if you have the FreeType2 library]) + CPPFLAGS="$old_CPPFLAGS"], + [AC_MSG_ERROR([Need FreeType library version 2.0.9 or higher])]) + +------------------------------------------------------------------------ + +Copyright 2002-2016 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. + + +--- end of VERSIONS.TXT --- diff --git a/modules/freetype2/docs/formats.txt b/modules/freetype2/docs/formats.txt new file mode 100644 index 000000000..2181352bd --- /dev/null +++ b/modules/freetype2/docs/formats.txt @@ -0,0 +1,199 @@ +This file contains a list of various font formats. It gives the +reference document and whether it is supported in FreeType 2. + +Table fields +------------ + + wrapper format + The format used to represent the font data. In the table below it + is used only if the font format differs. Possible values are + `SFNT' (binary), `PS' (a text header, followed by binary or text + data), `LZW' (compressed with either `gzip' or `compress'), and + `BZ2' (compressed with `bzip2`). + + font format + How the font is to be accessed, possibly after converting the file + type and wrapper format into a generic form. Bitmap formats are + `BDF', `PCF', and one form of `WINFNT'; all others are vector + formats. `PS' indicates third-order, `TT' second-order Bézier + curves. + + font type + Sub-formats of the font format. `SBIT' and `MACSBIT' are bitmap + formats, `MM' and `VAR' support optical axes. `CFF2' supports + optical axes also. + + glyph access + If not specified, the glyph access is `standard' to the font + format. Values are `CID' for CID-keyed fonts, `SYNTHETIC' for + fonts that are modified versions of other fonts by means of a + transformation matrix, and `TYPE_0' for PS fonts which are to be + accessed in a tree-like structure. + + FreeType driver + The module in the FreeType library which handles the specific font + format. A missing entry means that FreeType doesn't support the + font format (yet). + + +Notes +----- + + The SFNT container format also provides `collections' (usually + having the file extension `.ttc' or `.otc'). A collection contains + multiple font faces that share some tables to avoid redundancy, thus + reducing the file size. In FreeType, elements of a collection can + be accessed with a proper face index. + + Both the GX and the OpenType 1.8 variation fonts provide `named + instances'. FreeType maps them to face indices (they can also be + accessed with the standard MM interface). + + Other font formats (not using the SFNT wrapper) also provide + multiple faces within one file; they are marked with an asterisk + (`*') in the table below. + + FreeType can be configured to support Mac files (on older Mac OS + versions, a `file' is stored as a data and a resource fork, this is, + within two separate data chunks). If a file can't be opened as a + font, FreeType then checks whether it is a resource fork, trying to + extract the contained font data from either a `POST' or `sfnt' + resource. + + +Please send additions and/or corrections to wl@gnu.org or to the +FreeType developer's list at freetype-devel@nongnu.org (for +subscribers only). If you can provide a font example for a format +which isn't supported yet please send a mail too. + + + wrapper font font glyph FreeType reference + format format type access driver documents + ----------------------------------------------------------------------------- + + --- BDF --- --- bdf 5005.BDF_Spec.pdf, X11 + + + SFNT PS TYPE_1 --- type1 Type 1 GX Font Format + (for the Mac) [3] + SFNT PS TYPE_1 CID cid 5180.sfnt.pdf (for the Mac) + [3] + SFNT PS CFF --- cff OT spec, 5176.CFF.pdf + (`OTTO' format) + SFNT PS CFF CID cff OT spec, 5176.CFF.pdf + SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf + SFNT PS CFF2 --- cff OT spec 1.8 + + SFNT TT SBIT --- sfnt XFree86 (bitmaps only; + with `head' table) + SFNT TT MACSBIT --- sfnt OT spec (for the Mac; + bitmaps only; `bhed' table) + SFNT TT --- --- truetype OT spec (`normal' TT font) + SFNT TT VAR --- truetype GX spec (`?var' tables) + SFNT TT VAR --- truetype OT spec 1.8 + (`?var' + `?VAR' tables) + + + --- PS TYPE_1 --- type1 T1_SPEC.pdf + (`normal' Type 1 font) + --- PS TYPE_1 CID cid PLRM.pdf (CID Font Type 0; + Type 9 font) + --- PS MM --- type1 5015.Type1_Supp.pdf + (Multiple Masters) + --- PS CFF --- cff 5176.CFF.pdf (`pure' CFF) + --- PS* CFF CID cff 5176.CFF.pdf (`pure' CFF) + --- PS CFF SYNTHETIC --- 5176.CFF.pdf (`pure' CFF) + --- PS CFF/MM --- cff old 5167.CFF.pdf (`pure' CFF) + [3] + --- PS* CFF/MM CID cff old 5167.CFF.pdf (`pure' CFF) + [3] + --- PS CFF/MM SYNTHETIC --- old 5167.CFF.pdf (`pure' CFF) + [3] + PS PS CFF --- --- PLRM.pdf (Type 2) [1] + PS PS* CFF CID --- PLRM.pdf (Type 2) [1] + PS PS CFF SYNTHETIC --- PLRM.pdf (Type 2) [1] + PS PS CFF/MM --- --- PLRM.pdf (Type 2) [1] + PS PS* CFF/MM CID --- PLRM.pdf (Type 2) [1] + PS PS CFF/MM SYNTHETIC --- PLRM.pdf (Type 2) [1] + --- PS --- TYPE_0 --- PLRM.pdf + --- PS TYPE_3 --- --- PLRM.pdf (never supported) + --- PS TYPE_3 CID --- PLRM.pdf (CID Font Type 1; + Type 10 font; never supported) + PS PS TYPE_14 --- --- PLRM.pdf (Chameleon font; + Type 14 font; never supported?) + --- PS TYPE_32 CID --- PLRM.pdf (CID Font Type 4; + Type 32 font; never supported?) + PS TT --- --- type42 5012.Type42_Spec.pdf + (Type 42 font) + PS TT --- CID --- PLRM.pdf (CID Font Type 2; + Type 11 font) + + + ? ? CEF ? cff ? + + + --- PCF --- --- pcf X11 [4] + LZW PCF --- --- pcf X11 [4] + BZ2 PCF --- --- pcf X11 [4] + + + --- PFR* PFR0 --- pfr [2] + --- PFR PFR1 --- --- (undocumented, proprietary; + probably never supported) + + + --- WINFNT* --- --- winfonts Windows developer's notes [5] + --- WINFNT VECTOR --- --- Windows developer's notes [5] + + +[1] Support should be rather simple since this is identical to `CFF' + but in a PS wrapper. + +[2] Official PFR specification: + + http://www.bitstream.com/categories/developer/truedoc/pfrspec.html + http://www.bitstream.com/categories/developer/truedoc/pfrspec1.2.pdf + + The syntax of the auxiliary data is not defined there, but is + partially defined in MHP 1.0.3 (also called ETSI TS 101812 V1.3.1) + section 7.4. + + http://www.etsi.org/ + http://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=18799 + + (free registration required). + +[3] Support is rudimentary currently; some tables or data are not + loaded yet. + +[4] See + + THE X WINDOW SYSTEM SERVER: X VERSION 11, RELEASE 5 + Elias Israel, Erik Fortune, Digital Press, 1992 + ISBN 1-55558-096-3 + + for a specification given in Appendix D on pgs. 436-450. However, + this information might be out of date; unfortunately, there is no + PCF specification available online, and this book is out of print. + George Williams deduced the font format from the X11 sources and + documented it for his FontForge font editor: + + http://fontforge.github.io/pcf-format.html + +[5] This is from MS Windows 3; see Microsoft's Knowledge Base article at + + http://support.microsoft.com/kb/65123 + +------------------------------------------------------------------------ + +Copyright 2004-2016 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. + + +--- end of formats.txt --- diff --git a/modules/freetype2/docs/freetype-config.1 b/modules/freetype2/docs/freetype-config.1 new file mode 100644 index 000000000..76082ec11 --- /dev/null +++ b/modules/freetype2/docs/freetype-config.1 @@ -0,0 +1,108 @@ +.TH FREETYPE-CONFIG 1 "December 2016" "FreeType 2.7.1" +. +. +.SH NAME +. +freetype-config \- Get information about a libfreetype installation +. +. +.SH SYNOPSIS +. +.B freetype-config +.RI [ options ] +. +. +.SH DESCRIPTION +. +.B freetype-config +returns information needed for compiling and linking programs with the +FreeType library, such as linker flags and compilation parameters. +. +Alternatively, it can be used to query information about the +FreeType library version installed on the system, such as the +installation (directory path) prefix or the FreeType version number. +. +.PP +This program is part of the FreeType package. +. +. +.SH OPTIONS +. +There are two types of options: output/display selection options, and +path override options. +. +. +.SS Output selection options +. +Only one of the output selection options should be given at each program +invocation. +. +.TP +.B \-\-prefix +Return the prefix value of the installed FreeType library (the default +prefix will be `/usr' in most cases for distribution-installed +packages). +. +.TP +.B \-\-exec-prefix +Return the executable prefix value of the installed FreeType library +(will often be the same as the prefix value). +. +.TP +.B \-\-ftversion +Return the FreeType version number. +. +.TP +.B \-\-version +Return the `libtool version' of the FreeType library. +. +.TP +.B \-\-libtool +Return the library name for linking with libtool. +. +.TP +.B \-\-libs +Return compiler flags for linking with the installed FreeType library. +. +.TP +.B \-\-cflags +Return compiler flags for compiling against the installed FreeType library. +. +.TP +.B \-\-static +Make command line options display flags for static linking. +. +. +.SS Path override options +. +These affect any selected output option, except the libtool version +returned by `--version'. +. +.TP +.BI \-\-prefix= PREFIX +Override `--prefix' value with +.IR PREFIX . +. +.TP +.BI \-\-exec-prefix= EPREFIX +Override `--exec-prefix' value with +.IR EPREFIX . +. +. +.SH BUGS +In case the libraries FreeType links to are located in non-standard +directories, the output from option +.B \-\-libs +might be incomplete. +It is thus recommended to use the +.BR pkg-config (1) +interface instead, which is able to correctly resolve all dependencies. +. +. +.SH AUTHOR +. +This manual page was contributed by Nis Martensen , +with further refinements from the FreeType team. +. +. +.\" eof diff --git a/modules/freetype2/docs/raster.txt b/modules/freetype2/docs/raster.txt new file mode 100644 index 000000000..5e8df51e3 --- /dev/null +++ b/modules/freetype2/docs/raster.txt @@ -0,0 +1,635 @@ + + How FreeType's rasterizer work + + by David Turner + + Revised 2007-Feb-01 + + +This file is an attempt to explain the internals of the FreeType +rasterizer. The rasterizer is of quite general purpose and could +easily be integrated into other programs. + + + I. Introduction + + II. Rendering Technology + 1. Requirements + 2. Profiles and Spans + a. Sweeping the Shape + b. Decomposing Outlines into Profiles + c. The Render Pool + d. Computing Profiles Extents + e. Computing Profiles Coordinates + f. Sweeping and Sorting the Spans + + +I. Introduction +=============== + + A rasterizer is a library in charge of converting a vectorial + representation of a shape into a bitmap. The FreeType rasterizer + has been originally developed to render the glyphs found in + TrueType files, made up of segments and second-order Béziers. + Meanwhile it has been extended to render third-order Bézier curves + also. This document is an explanation of its design and + implementation. + + While these explanations start from the basics, a knowledge of + common rasterization techniques is assumed. + + +II. Rendering Technology +======================== + +1. Requirements +--------------- + + We assume that all scaling, rotating, hinting, etc., has been + already done. The glyph is thus described by a list of points in + the device space. + + - All point coordinates are in the 26.6 fixed float format. The + used orientation is: + + + ^ y + | reference orientation + | + *----> x + 0 + + + `26.6' means that 26 bits are used for the integer part of a + value and 6 bits are used for the fractional part. + Consequently, the `distance' between two neighbouring pixels is + 64 `units' (1 unit = 1/64th of a pixel). + + Note that, for the rasterizer, pixel centers are located at + integer coordinates. The TrueType bytecode interpreter, + however, assumes that the lower left edge of a pixel (which is + taken to be a square with a length of 1 unit) has integer + coordinates. + + + ^ y ^ y + | | + | (1,1) | (0.5,0.5) + +-----------+ +-----+-----+ + | | | | | + | | | | | + | | | o-----+-----> x + | | | (0,0) | + | | | | + o-----------+-----> x +-----------+ + (0,0) (-0.5,-0.5) + + TrueType bytecode interpreter FreeType rasterizer + + + A pixel line in the target bitmap is called a `scanline'. + + - A glyph is usually made of several contours, also called + `outlines'. A contour is simply a closed curve that delimits an + outer or inner region of the glyph. It is described by a series + of successive points of the points table. + + Each point of the glyph has an associated flag that indicates + whether it is `on' or `off' the curve. Two successive `on' + points indicate a line segment joining the two points. + + One `off' point amidst two `on' points indicates a second-degree + (conic) Bézier parametric arc, defined by these three points + (the `off' point being the control point, and the `on' ones the + start and end points). Similarly, a third-degree (cubic) Bézier + curve is described by four points (two `off' control points + between two `on' points). + + Finally, for second-order curves only, two successive `off' + points forces the rasterizer to create, during rendering, an + `on' point amidst them, at their exact middle. This greatly + facilitates the definition of successive Bézier arcs. + + The parametric form of a second-order Bézier curve is: + + P(t) = (1-t)^2*P1 + 2*t*(1-t)*P2 + t^2*P3 + + (P1 and P3 are the end points, P2 the control point.) + + The parametric form of a third-order Bézier curve is: + + P(t) = (1-t)^3*P1 + 3*t*(1-t)^2*P2 + 3*t^2*(1-t)*P3 + t^3*P4 + + (P1 and P4 are the end points, P2 and P3 the control points.) + + For both formulae, t is a real number in the range [0..1]. + + Note that the rasterizer does not use these formulae directly. + They exhibit, however, one very useful property of Bézier arcs: + Each point of the curve is a weighted average of the control + points. + + As all weights are positive and always sum up to 1, whatever the + value of t, each arc point lies within the triangle (polygon) + defined by the arc's three (four) control points. + + In the following, only second-order curves are discussed since + rasterization of third-order curves is completely identical. + + Here some samples for second-order curves. + + + * # on curve + * off curve + __---__ + #-__ _-- -_ + --__ _- - + --__ # \ + --__ # + -# + Two `on' points + Two `on' points and one `off' point + between them + + * + # __ Two `on' points with two `off' + \ - - points between them. The point + \ / \ marked `0' is the middle of the + - 0 \ `off' points, and is a `virtual + -_ _- # on' point where the curve passes. + -- It does not appear in the point + * list. + + +2. Profiles and Spans +--------------------- + + The following is a basic explanation of the _kind_ of computations + made by the rasterizer to build a bitmap from a vector + representation. Note that the actual implementation is slightly + different, due to performance tuning and other factors. + + However, the following ideas remain in the same category, and are + more convenient to understand. + + + a. Sweeping the Shape + + The best way to fill a shape is to decompose it into a number of + simple horizontal segments, then turn them on in the target + bitmap. These segments are called `spans'. + + __---__ + _-- -_ + _- - + - \ + / \ + / \ + | \ + + __---__ Example: filling a shape + _----------_ with spans. + _-------------- + ----------------\ + /-----------------\ This is typically done from the top + / \ to the bottom of the shape, in a + | | \ movement called a `sweep'. + V + + __---__ + _----------_ + _-------------- + ----------------\ + /-----------------\ + /-------------------\ + |---------------------\ + + + In order to draw a span, the rasterizer must compute its + coordinates, which are simply the x coordinates of the shape's + contours, taken on the y scanlines. + + + /---/ |---| Note that there are usually + /---/ |---| several spans per scanline. + | /---/ |---| + | /---/_______|---| When rendering this shape to the + V /----------------| current scanline y, we must + /-----------------| compute the x values of the + a /----| |---| points a, b, c, and d. + - - - * * - - - - * * - - y - + / / b c| |d + + + /---/ |---| + /---/ |---| And then turn on the spans a-b + /---/ |---| and c-d. + /---/_______|---| + /----------------| + /-----------------| + a /----| |---| + - - - ####### - - - - ##### - - y - + / / b c| |d + + + b. Decomposing Outlines into Profiles + + For each scanline during the sweep, we need the following + information: + + o The number of spans on the current scanline, given by the + number of shape points intersecting the scanline (these are + the points a, b, c, and d in the above example). + + o The x coordinates of these points. + + x coordinates are computed before the sweep, in a phase called + `decomposition' which converts the glyph into *profiles*. + + Put it simply, a `profile' is a contour's portion that can only + be either ascending or descending, i.e., it is monotonic in the + vertical direction (we also say y-monotonic). There is no such + thing as a horizontal profile, as we shall see. + + Here are a few examples: + + + this square + 1 2 + ---->---- is made of two + | | | | + | | profiles | | + ^ v ^ + v + | | | | + | | | | + ----<---- + + up down + + + this triangle + + P2 1 2 + + |\ is made of two | \ + ^ | \ \ | \ + | | \ \ profiles | \ | + | | \ v ^ | \ | + | \ | | + \ v + | \ | | \ + P1 ---___ \ ---___ \ + ---_\ ---_ \ + <--__ P3 up down + + + + A more general contour can be made of more than two profiles: + + __ ^ + / | / ___ / | + / | / | / | / | + | | / / => | v / / + | | | | | | ^ | + ^ | |___| | | ^ + | + | + v + | | | v | | + | | | up | + |___________| | down | + + <-- up down + + + Successive profiles are always joined by horizontal segments + that are not part of the profiles themselves. + + For the rasterizer, a profile is simply an *array* that + associates one horizontal *pixel* coordinate to each bitmap + *scanline* crossed by the contour's section containing the + profile. Note that profiles are *oriented* up or down along the + glyph's original flow orientation. + + In other graphics libraries, profiles are also called `edges' or + `edgelists'. + + + c. The Render Pool + + FreeType has been designed to be able to run well on _very_ + light systems, including embedded systems with very few memory. + + A render pool will be allocated once; the rasterizer uses this + pool for all its needs by managing this memory directly in it. + The algorithms that are used for profile computation make it + possible to use the pool as a simple growing heap. This means + that this memory management is actually quite easy and faster + than any kind of malloc()/free() combination. + + Moreover, we'll see later that the rasterizer is able, when + dealing with profiles too large and numerous to lie all at once + in the render pool, to immediately decompose recursively the + rendering process into independent sub-tasks, each taking less + memory to be performed (see `sub-banding' below). + + The render pool doesn't need to be large. A 4KByte pool is + enough for nearly all renditions, though nearly 100% slower than + a more comfortable 16KByte or 32KByte pool (that was tested with + complex glyphs at sizes over 500 pixels). + + + d. Computing Profiles Extents + + Remember that a profile is an array, associating a _scanline_ to + the x pixel coordinate of its intersection with a contour. + + Though it's not exactly how the FreeType rasterizer works, it is + convenient to think that we need a profile's height before + allocating it in the pool and computing its coordinates. + + The profile's height is the number of scanlines crossed by the + y-monotonic section of a contour. We thus need to compute these + sections from the vectorial description. In order to do that, + we are obliged to compute all (local and global) y extrema of + the glyph (minima and maxima). + + + P2 For instance, this triangle has only + two y-extrema, which are simply + |\ + | \ P2.y as a vertical maximum + | \ P3.y as a vertical minimum + | \ + | \ P1.y is not a vertical extremum (though + | \ it is a horizontal minimum, which we + P1 ---___ \ don't need). + ---_\ + P3 + + + Note that the extrema are expressed in pixel units, not in + scanlines. The triangle's height is certainly (P3.y-P2.y+1) + pixel units, but its profiles' heights are computed in + scanlines. The exact conversion is simple: + + - min scanline = FLOOR ( min y ) + - max scanline = CEILING( max y ) + + A problem arises with Bézier Arcs. While a segment is always + necessarily y-monotonic (i.e., flat, ascending, or descending), + which makes extrema computations easy, the ascent of an arc can + vary between its control points. + + + P2 + * + # on curve + * off curve + __-x--_ + _-- -_ + P1 _- - A non y-monotonic Bézier arc. + # \ + - The arc goes from P1 to P3. + \ + \ P3 + # + + + We first need to be able to easily detect non-monotonic arcs, + according to their control points. I will state here, without + proof, that the monotony condition can be expressed as: + + P1.y <= P2.y <= P3.y for an ever-ascending arc + + P1.y >= P2.y >= P3.y for an ever-descending arc + + with the special case of + + P1.y = P2.y = P3.y where the arc is said to be `flat'. + + As you can see, these conditions can be very easily tested. + They are, however, extremely important, as any arc that does not + satisfy them necessarily contains an extremum. + + Note also that a monotonic arc can contain an extremum too, + which is then one of its `on' points: + + + P1 P2 + #---__ * P1P2P3 is ever-descending, but P1 + -_ is an y-extremum. + - + ---_ \ + -> \ + \ P3 + # + + + Let's go back to our previous example: + + + P2 + * + # on curve + * off curve + __-x--_ + _-- -_ + P1 _- - A non-y-monotonic Bézier arc. + # \ + - Here we have + \ P2.y >= P1.y && + \ P3 P2.y >= P3.y (!) + # + + + We need to compute the vertical maximum of this arc to be able + to compute a profile's height (the point marked by an `x'). The + arc's equation indicates that a direct computation is possible, + but we rely on a different technique, which use will become + apparent soon. + + Bézier arcs have the special property of being very easily + decomposed into two sub-arcs, which are themselves Bézier arcs. + Moreover, it is easy to prove that there is at most one vertical + extremum on each Bézier arc (for second-degree curves; similar + conditions can be found for third-order arcs). + + For instance, the following arc P1P2P3 can be decomposed into + two sub-arcs Q1Q2Q3 and R1R2R3: + + + P2 + * + # on curve + * off curve + + + original Bézier arc P1P2P3. + __---__ + _-- --_ + _- -_ + - - + / \ + / \ + # # + P1 P3 + + + + P2 + * + + + + Q3 Decomposed into two subarcs + Q2 R2 Q1Q2Q3 and R1R2R3 + * __-#-__ * + _-- --_ + _- R1 -_ Q1 = P1 R3 = P3 + - - Q2 = (P1+P2)/2 R2 = (P2+P3)/2 + / \ + / \ Q3 = R1 = (Q2+R2)/2 + # # + Q1 R3 Note that Q2, R2, and Q3=R1 + are on a single line which is + tangent to the curve. + + + We have then decomposed a non-y-monotonic Bézier curve into two + smaller sub-arcs. Note that in the above drawing, both sub-arcs + are monotonic, and that the extremum is then Q3=R1. However, in + a more general case, only one sub-arc is guaranteed to be + monotonic. Getting back to our former example: + + + Q2 + * + + __-x--_ R1 + _-- #_ + Q1 _- Q3 - R2 + # \ * + - + \ + \ R3 + # + + + Here, we see that, though Q1Q2Q3 is still non-monotonic, R1R2R3 + is ever descending: We thus know that it doesn't contain the + extremum. We can then re-subdivide Q1Q2Q3 into two sub-arcs and + go on recursively, stopping when we encounter two monotonic + subarcs, or when the subarcs become simply too small. + + We will finally find the vertical extremum. Note that the + iterative process of finding an extremum is called `flattening'. + + + e. Computing Profiles Coordinates + + Once we have the height of each profile, we are able to allocate + it in the render pool. The next task is to compute coordinates + for each scanline. + + In the case of segments, the computation is straightforward, + using the Euclidean algorithm (also known as Bresenham). + However, for Bézier arcs, the job is a little more complicated. + + We assume that all Béziers that are part of a profile are the + result of flattening the curve, which means that they are all + y-monotonic (ascending or descending, and never flat). We now + have to compute the intersections of arcs with the profile's + scanlines. One way is to use a similar scheme to flattening + called `stepping'. + + + Consider this arc, going from P1 to + --------------------- P3. Suppose that we need to + compute its intersections with the + drawn scanlines. As already + --------------------- mentioned this can be done + directly, but the involved + * P2 _---# P3 algorithm is far too slow. + ------------- _-- -- + _- + _/ Instead, it is still possible to + ---------/----------- use the decomposition property in + / the same recursive way, i.e., + | subdivide the arc into subarcs + ------|-------------- until these get too small to cross + | more than one scanline! + | + -----|--------------- This is very easily done using a + | rasterizer-managed stack of + | subarcs. + # P1 + + + f. Sweeping and Sorting the Spans + + Once all our profiles have been computed, we begin the sweep to + build (and fill) the spans. + + As both the TrueType and Type 1 specifications use the winding + fill rule (but with opposite directions), we place, on each + scanline, the present profiles in two separate lists. + + One list, called the `left' one, only contains ascending + profiles, while the other `right' list contains the descending + profiles. + + As each glyph is made of closed curves, a simple geometric + property ensures that the two lists contain the same number of + elements. + + Creating spans is thus straightforward: + + 1. We sort each list in increasing horizontal order. + + 2. We pair each value of the left list with its corresponding + value in the right list. + + + / / | | For example, we have here + / / | | four profiles. Two of + >/ / | | | them are ascending (1 & + 1// / ^ | | | 2 3), while the two others + // // 3| | | v are descending (2 & 4). + / //4 | | | On the given scanline, + a / /< | | the left list is (1,3), + - - - *-----* - - - - *---* - - y - and the right one is + / / b c| |d (4,2) (sorted). + + There are then two spans, joining + 1 to 4 (i.e. a-b) and 3 to 2 + (i.e. c-d)! + + + Sorting doesn't necessarily take much time, as in 99 cases out + of 100, the lists' order is kept from one scanline to the next. + We can thus implement it with two simple singly-linked lists, + sorted by a classic bubble-sort, which takes a minimum amount of + time when the lists are already sorted. + + A previous version of the rasterizer used more elaborate + structures, like arrays to perform `faster' sorting. It turned + out that this old scheme is not faster than the one described + above. + + Once the spans have been `created', we can simply draw them in + the target bitmap. + +------------------------------------------------------------------------ + +Copyright 2003-2016 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. + + +--- end of raster.txt --- + +Local Variables: +coding: utf-8 +End: diff --git a/modules/freetype2/docs/reference/README b/modules/freetype2/docs/reference/README new file mode 100644 index 000000000..51b04d6f1 --- /dev/null +++ b/modules/freetype2/docs/reference/README @@ -0,0 +1,5 @@ +After saying `make refdoc' this directory contains the FreeType API +reference. You need python to make this target. + +This also works with Jam: Just type `jam refdoc' in the main directory. + diff --git a/modules/freetype2/docs/reference/ft2-auto_hinter.html b/modules/freetype2/docs/reference/ft2-auto_hinter.html new file mode 100644 index 000000000..79d1fe0e4 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-auto_hinter.html @@ -0,0 +1,420 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

The auto-hinter

+

Synopsis

+ + + + + + +
glyph-to-script-mapincrease-x-height
FT_AUTOHINTER_SCRIPT_XXXFT_Prop_IncreaseXHeight
FT_Prop_GlyphToScriptMapwarping
fallback-scriptno-stem-darkening
default-scriptdarkening-parameters
+ + +

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.

+ +
+

glyph-to-script-map

+ +

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 );
+
+ +
+
+ +
+

FT_AUTOHINTER_SCRIPT_XXX

+

Defined in FT_AUTOHINTER_H (freetype/ftautoh.h).

+
+#define FT_AUTOHINTER_SCRIPT_NONE   0
+#define FT_AUTOHINTER_SCRIPT_LATIN  1
+#define FT_AUTOHINTER_SCRIPT_CJK    2
+#define FT_AUTOHINTER_SCRIPT_INDIC  3
+
+ +

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.

+
+ +
+
+ +
+

FT_Prop_GlyphToScriptMap

+

Defined in FT_AUTOHINTER_H (freetype/ftautoh.h).

+
+  typedef struct  FT_Prop_GlyphToScriptMap_
+  {
+    FT_Face     face;
+    FT_UShort*  map;
+
+  } FT_Prop_GlyphToScriptMap;
+
+ +

Experimental only

+

The data exchange structure for the glyph-to-script-map property.

+ +
+
+ +
+

fallback-script

+ +

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.

+ +
+
+ +
+

default-script

+ +

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.

+ +
+
+ +
+

increase-x-height

+ +

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).

+ +
+
+ +
+

FT_Prop_IncreaseXHeight

+

Defined in FT_AUTOHINTER_H (freetype/ftautoh.h).

+
+  typedef struct  FT_Prop_IncreaseXHeight_
+  {
+    FT_Face  face;
+    FT_UInt  limit;
+
+  } FT_Prop_IncreaseXHeight;
+
+ +

The data exchange structure for the increase-x-height property.

+ +
+
+ +
+

warping

+ +

Experimental only

+

If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to activate the warp hinting code in the auto-hinter, this property switches warping on and off.

+

Warping only works in ‘light’ auto-hinting mode. The idea of the code is to slightly scale and shift a glyph along the non-hinted dimension (which is usually the horizontal axis) so that as much of its segments are aligned (more or less) to the grid. To find out a glyph's optimal scaling and shifting value, various parameter combinations are tried and scored.

+

By default, warping is off. The example below shows how to switch on warping (omitting the error handling).

+
+  FT_Library  library;
+  FT_Bool     warping = 1;
+
+
+  FT_Init_FreeType( &library );
+
+  FT_Property_Set( library, "autofitter",
+                            "warping", &warping );
+
+ +

note

+

This property can be used with FT_Property_Get also.

+

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 ‘light’ hinting mode.

+ +
+
+ +
+

no-stem-darkening

+ +

Experimental *only,* requires linear alpha blending and gamma correction

+

Stem darkening emboldens glyphs at smaller sizes to make them more readable on common low-DPI screens when using linear alpha blending and gamma correction, see FT_Render_Glyph. When not using linear alpha blending and gamma correction, glyphs will appear heavy and fuzzy!

+

Gamma correction essentially lightens fonts since shades of grey are shifted to higher pixel values (= higher brightness) to match the original intention to the reality of our screens. The side-effect is that glyphs ‘thin out’. Mac OS X and Adobe's proprietary font rendering library implement a counter-measure: stem darkening at smaller sizes where shades of gray dominate. By emboldening a glyph slightly in relation to its pixel size, individual pixels get higher coverage of filled-in outlines and are therefore ‘blacker’. This counteracts the ‘thinning out’ of glyphs, making text remain readable at smaller sizes. All glyphs that pass through the auto-hinter will be emboldened unless this property is set to TRUE.

+

See the description of the CFF driver for algorithmic details. Total consistency with the CFF driver is currently not achieved because the emboldening method differs and glyphs must be scaled down on the Y-axis to keep outline points inside their precomputed blue zones. The smaller the size (especially 9ppem and down), the higher the loss of emboldening versus the CFF driver.

+

This property can be set via the ‘FREETYPE_PROPERTIES’ environment variable similar to the CFF driver.

+ +
+
+ +
+

darkening-parameters

+ +

Experimental only

+

See the description of the CFF driver for details. This implementation appropriates the CFF_CONFIG_OPTION_DARKENING_PARAMETER_* #defines for consistency. Note the differences described in no-stem-darkening.

+

This property can be set via the ‘FREETYPE_PROPERTIES’ environment variable similar to the CFF driver.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-base_interface.html b/modules/freetype2/docs/reference/ft2-base_interface.html new file mode 100644 index 000000000..e4d876cbc --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-base_interface.html @@ -0,0 +1,3053 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Base Interface

+

Synopsis

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FT_LibraryFT_SubGlyph 
FT_Face FT_LOAD_VERTICAL_LAYOUT
FT_SizeFT_Bitmap_SizeFT_LOAD_IGNORE_TRANSFORM
FT_GlyphSlot FT_LOAD_FORCE_AUTOHINT
FT_CharMapFT_Init_FreeTypeFT_LOAD_NO_RECURSE
FT_EncodingFT_Done_FreeTypeFT_LOAD_PEDANTIC
FT_ENC_TAG  
 FT_New_FaceFT_LOAD_TARGET_NORMAL
FT_FaceRecFT_Done_FaceFT_LOAD_TARGET_LIGHT
 FT_Reference_FaceFT_LOAD_TARGET_MONO
FT_FACE_FLAG_SCALABLEFT_New_Memory_FaceFT_LOAD_TARGET_LCD
FT_FACE_FLAG_FIXED_SIZESFT_Open_FaceFT_LOAD_TARGET_LCD_V
FT_FACE_FLAG_FIXED_WIDTHFT_Open_Args 
FT_FACE_FLAG_HORIZONTALFT_ParameterFT_LOAD_TARGET_MODE
FT_FACE_FLAG_VERTICALFT_Attach_File 
FT_FACE_FLAG_COLORFT_Attach_StreamFT_Render_Glyph
FT_FACE_FLAG_SFNT FT_Render_Mode
FT_FACE_FLAG_CID_KEYEDFT_Set_Char_SizeFT_Get_Kerning
FT_FACE_FLAG_TRICKYFT_Set_Pixel_SizesFT_Kerning_Mode
FT_FACE_FLAG_KERNINGFT_Request_SizeFT_Get_Track_Kerning
FT_FACE_FLAG_MULTIPLE_MASTERSFT_Select_SizeFT_Get_Glyph_Name
FT_FACE_FLAG_GLYPH_NAMESFT_Size_Request_TypeFT_Get_Postscript_Name
FT_FACE_FLAG_EXTERNAL_STREAMFT_Size_RequestRec 
FT_FACE_FLAG_HINTERFT_Size_RequestFT_CharMapRec
 FT_Set_TransformFT_Select_Charmap
FT_HAS_HORIZONTALFT_Load_GlyphFT_Set_Charmap
FT_HAS_VERTICALFT_Get_Char_IndexFT_Get_Charmap_Index
FT_HAS_KERNINGFT_Get_First_Char 
FT_HAS_FIXED_SIZESFT_Get_Next_CharFT_Get_FSType_Flags
FT_HAS_GLYPH_NAMESFT_Get_Name_IndexFT_Get_SubGlyph_Info
FT_HAS_MULTIPLE_MASTERSFT_Load_Char 
FT_HAS_COLOR FT_Face_Internal
 FT_OPEN_MEMORYFT_Size_Internal
FT_IS_SFNTFT_OPEN_STREAMFT_Slot_Internal
FT_IS_SCALABLEFT_OPEN_PATHNAME 
FT_IS_FIXED_WIDTHFT_OPEN_DRIVERFT_FACE_FLAG_XXX
FT_IS_CID_KEYEDFT_OPEN_PARAMSFT_STYLE_FLAG_XXX
FT_IS_TRICKY FT_OPEN_XXX
 FT_LOAD_DEFAULTFT_LOAD_XXX
FT_STYLE_FLAG_BOLDFT_LOAD_RENDERFT_LOAD_TARGET_XXX
FT_STYLE_FLAG_ITALICFT_LOAD_MONOCHROMEFT_SUBGLYPH_FLAG_XXX
 FT_LOAD_LINEAR_DESIGNFT_FSTYPE_XXX
FT_SizeRecFT_LOAD_NO_SCALE 
FT_Size_MetricsFT_LOAD_NO_HINTINGFT_HAS_FAST_GLYPHS
 FT_LOAD_NO_BITMAP 
FT_GlyphSlotRecFT_LOAD_NO_AUTOHINTFT_IS_NAMED_INSTANCE
FT_Glyph_MetricsFT_LOAD_COLOR
+ + +

This section describes the most important public high-level API functions of FreeType 2.

+ +
+

FT_Library

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_LibraryRec_  *FT_Library;
+
+ +

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.

+ +
+
+ +
+

FT_Face

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_FaceRec_*  FT_Face;
+
+ +

A handle to a given typographic face object. A face object models a given typeface, in a given style.

+ +

note

+

Each face object also owns a single FT_GlyphSlot object, as well as one or more FT_Size objects.

+

Use FT_New_Face or FT_Open_Face to create a new face object from a given filepathname or a custom input stream.

+

Use FT_Done_Face to destroy it (along with its slot and sizes).

+

An ‘FT_Face’ object can only be safely used from one thread at a time. Similarly, creation and destruction of ‘FT_Face’ with the same FT_Library object can only be done from one thread at a time. On the other hand, functions like FT_Load_Glyph and its siblings are thread-safe and do not need the lock to be held as long as the same ‘FT_Face’ object is not used from multiple threads at the same time.

+ +

also

+

See FT_FaceRec for the publicly accessible fields of a given face object.

+ +
+
+ +
+

FT_Size

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_SizeRec_*  FT_Size;
+
+ +

A handle to an object used to model a face scaled to a given character size.

+ +

note

+

Each FT_Face has an active FT_Size object that is used by functions like FT_Load_Glyph to determine the scaling transformation that in turn is used to load and hint glyphs and metrics.

+

You can use FT_Set_Char_Size, FT_Set_Pixel_Sizes, FT_Request_Size or even FT_Select_Size to change the content (i.e., the scaling values) of the active FT_Size.

+

You can use FT_New_Size to create additional size objects for a given FT_Face, but they won't be used by other functions until you activate it through FT_Activate_Size. Only one size can be activated at any given time per face.

+ +

also

+

See FT_SizeRec for the publicly accessible fields of a given size object.

+ +
+
+ +
+

FT_GlyphSlot

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_GlyphSlotRec_*  FT_GlyphSlot;
+
+ +

A handle to a given ‘glyph slot’. A slot is a container where it is possible to load any of the glyphs contained in its parent face.

+

In other words, each time you call FT_Load_Glyph or FT_Load_Char, the slot's content is erased by the new glyph data, i.e., the glyph's metrics, its image (bitmap or outline), and other control information.

+ +

also

+

See FT_GlyphSlotRec for the publicly accessible glyph fields.

+ +
+
+ +
+

FT_CharMap

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_CharMapRec_*  FT_CharMap;
+
+ +

A handle to a given character map. A charmap is used to translate character codes in a given encoding into glyph indexes for its parent's face. Some font formats may provide several charmaps per font.

+

Each face object owns zero or more charmaps, but only one of them can be ‘active’ and used by FT_Get_Char_Index or FT_Load_Char.

+

The list of available charmaps in a face is available through the ‘face->num_charmaps’ and ‘face->charmaps’ fields of FT_FaceRec.

+

The currently active charmap is available as ‘face->charmap’. You should call FT_Set_Charmap to change it.

+ +

note

+

When a new face is created (either through FT_New_Face or FT_Open_Face), the library looks for a Unicode charmap within the list and automatically activates it.

+ +

also

+

See FT_CharMapRec for the publicly accessible fields of a given character map.

+ +
+
+ +
+

FT_Encoding

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef enum  FT_Encoding_
+  {
+    FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ),
+
+    FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ),
+    FT_ENC_TAG( FT_ENCODING_UNICODE,   'u', 'n', 'i', 'c' ),
+
+    FT_ENC_TAG( FT_ENCODING_SJIS,    's', 'j', 'i', 's' ),
+    FT_ENC_TAG( FT_ENCODING_GB2312,  'g', 'b', ' ', ' ' ),
+    FT_ENC_TAG( FT_ENCODING_BIG5,    'b', 'i', 'g', '5' ),
+    FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ),
+    FT_ENC_TAG( FT_ENCODING_JOHAB,   'j', 'o', 'h', 'a' ),
+
+    /* for backwards compatibility */
+    FT_ENCODING_MS_SJIS    = FT_ENCODING_SJIS,
+    FT_ENCODING_MS_GB2312  = FT_ENCODING_GB2312,
+    FT_ENCODING_MS_BIG5    = FT_ENCODING_BIG5,
+    FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,
+    FT_ENCODING_MS_JOHAB   = FT_ENCODING_JOHAB,
+
+    FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ),
+    FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT,   'A', 'D', 'B', 'E' ),
+    FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM,   'A', 'D', 'B', 'C' ),
+    FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1,  'l', 'a', 't', '1' ),
+
+    FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ),
+
+    FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' )
+
+  } FT_Encoding;
+
+
+  /* these constants are deprecated; use the corresponding `FT_Encoding' */
+  /* values instead                                                      */
+#define ft_encoding_none            FT_ENCODING_NONE
+#define ft_encoding_unicode         FT_ENCODING_UNICODE
+#define ft_encoding_symbol          FT_ENCODING_MS_SYMBOL
+#define ft_encoding_latin_1         FT_ENCODING_ADOBE_LATIN_1
+#define ft_encoding_latin_2         FT_ENCODING_OLD_LATIN_2
+#define ft_encoding_sjis            FT_ENCODING_SJIS
+#define ft_encoding_gb2312          FT_ENCODING_GB2312
+#define ft_encoding_big5            FT_ENCODING_BIG5
+#define ft_encoding_wansung         FT_ENCODING_WANSUNG
+#define ft_encoding_johab           FT_ENCODING_JOHAB
+
+#define ft_encoding_adobe_standard  FT_ENCODING_ADOBE_STANDARD
+#define ft_encoding_adobe_expert    FT_ENCODING_ADOBE_EXPERT
+#define ft_encoding_adobe_custom    FT_ENCODING_ADOBE_CUSTOM
+#define ft_encoding_apple_roman     FT_ENCODING_APPLE_ROMAN
+
+ +

An enumeration used to specify character sets supported by charmaps. Used in the FT_Select_Charmap API function.

+ +

note

+

Despite the name, this enumeration lists specific character repertories (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16, etc.).

+

Other encodings might be defined in the future.

+ +

values

+ + + + + + + + + + + + + + + + + + + + +
FT_ENCODING_NONE +

The encoding value 0 is reserved.

+
FT_ENCODING_UNICODE +

Corresponds to the Unicode character set. This value covers all versions of the Unicode repertoire, including ASCII and Latin-1. Most fonts include a Unicode charmap, but not all of them.

+

For example, if you want to access Unicode value U+1F028 (and the font contains it), use value 0x1F028 as the input value for FT_Get_Char_Index.

+
FT_ENCODING_MS_SYMBOL +

Corresponds to the Microsoft Symbol encoding, used to encode mathematical symbols and wingdings. For more information, see ‘http://www.microsoft.com/typography/otspec/recom.htm’, ‘http://www.kostis.net/charsets/symbol.htm’, and ‘http://www.kostis.net/charsets/wingding.htm’.

+

This encoding uses character codes from the PUA (Private Unicode Area) in the range U+F020-U+F0FF.

+
FT_ENCODING_SJIS +

Corresponds to Japanese SJIS encoding. More info at ‘http://en.wikipedia.org/wiki/Shift_JIS’. See note on multi-byte encodings below.

+
FT_ENCODING_GB2312 +

Corresponds to an encoding system for Simplified Chinese as used in mainland China.

+
FT_ENCODING_BIG5 +

Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong.

+
FT_ENCODING_WANSUNG +

Corresponds to the Korean encoding system known as Wansung. For more information see ‘https://msdn.microsoft.com/en-US/goglobal/cc305154’.

+
FT_ENCODING_JOHAB +

The Korean standard character set (KS C 5601-1992), which corresponds to MS Windows code page 1361. This character set includes all possible Hangeul character combinations.

+
FT_ENCODING_ADOBE_LATIN_1 +

Corresponds to a Latin-1 encoding as defined in a Type 1 PostScript font. It is limited to 256 character codes.

+
FT_ENCODING_ADOBE_STANDARD +

Corresponds to the Adobe Standard encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.

+
FT_ENCODING_ADOBE_EXPERT +

Corresponds to the Adobe Expert encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.

+
FT_ENCODING_ADOBE_CUSTOM +

Corresponds to a custom encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.

+
FT_ENCODING_APPLE_ROMAN +

Corresponds to the 8-bit Apple roman encoding. Many TrueType and OpenType fonts contain a charmap for this encoding, since older versions of Mac OS are able to use it.

+
FT_ENCODING_OLD_LATIN_2 +

This value is deprecated and was never used nor reported by FreeType. Don't use or test for it.

+
FT_ENCODING_MS_SJIS +

Same as FT_ENCODING_SJIS. Deprecated.

+
FT_ENCODING_MS_GB2312 +

Same as FT_ENCODING_GB2312. Deprecated.

+
FT_ENCODING_MS_BIG5 +

Same as FT_ENCODING_BIG5. Deprecated.

+
FT_ENCODING_MS_WANSUNG +

Same as FT_ENCODING_WANSUNG. Deprecated.

+
FT_ENCODING_MS_JOHAB +

Same as FT_ENCODING_JOHAB. Deprecated.

+
+ +

note

+

By default, FreeType automatically synthesizes a Unicode charmap for PostScript fonts, using their glyph names dictionaries. However, it also reports the encodings defined explicitly in the font file, for the cases when they are needed, with the Adobe values as well.

+

FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap is neither Unicode nor ISO-8859-1 (otherwise it is set to FT_ENCODING_UNICODE). Use FT_Get_BDF_Charset_ID to find out which encoding is really present. If, for example, the ‘cs_registry’ field is ‘KOI8’ and the ‘cs_encoding’ field is ‘R’, the font is encoded in KOI8-R.

+

FT_ENCODING_NONE is always set (with a single exception) by the winfonts driver. Use FT_Get_WinFNT_Header and examine the ‘charset’ field of the FT_WinFNT_HeaderRec structure to find out which encoding is really present. For example, FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for Russian).

+

FT_ENCODING_NONE is set if ‘platform_id’ is TT_PLATFORM_MACINTOSH and ‘encoding_id’ is not TT_MAC_ID_ROMAN (otherwise it is set to FT_ENCODING_APPLE_ROMAN).

+

If ‘platform_id’ is TT_PLATFORM_MACINTOSH, use the function FT_Get_CMap_Language_ID to query the Mac language ID that may be needed to be able to distinguish Apple encoding variants. See

+

http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt

+

to get an idea how to do that. Basically, if the language ID is 0, don't use it, otherwise subtract 1 from the language ID. Then examine ‘encoding_id’. If, for example, ‘encoding_id’ is TT_MAC_ID_ROMAN and the language ID (minus 1) is ‘TT_MAC_LANGID_GREEK’, it is the Greek encoding, not Roman. TT_MAC_ID_ARABIC with ‘TT_MAC_LANGID_FARSI’ means the Farsi variant the Arabic encoding.

+ +
+
+ +
+

FT_ENC_TAG

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#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 */
+
+ +

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.

+ +
+
+ +
+

FT_FaceRec

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

FreeType root face class structure. A face object models a typeface in a font file.

+ +

fields

+ + + + + + + + + + + + + + + + + + + + + + + + + +
num_faces +

The number of faces in the font file. Some font formats can have multiple faces in a font file.

+
face_index +

This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value 0). They are set to 0 if there is only one face in the font file.

+

Bits 16-30 are relevant to GX variation fonts only, holding the named instance index for the current face index (starting with value 1; value 0 indicates font access without GX variation data). For non-GX fonts, bits 16-30 are ignored. If we have the third named instance of face 4, say, ‘face_index’ is set to 0x00030004.

+

Bit 31 is always zero (this is, ‘face_index’ is always a positive value).

+
face_flags +

A set of bit flags that give important information about the face; see FT_FACE_FLAG_XXX for the details.

+
style_flags +

The lower 16 bits contain a set of bit flags indicating the style of the face; see FT_STYLE_FLAG_XXX for the details. Bits 16-30 hold the number of named instances available for the current face if we have a GX variation (sub)font. Bit 31 is always zero (this is, ‘style_flags’ is always a positive value).

+
num_glyphs +

The number of glyphs in the face. If the face is scalable and has sbits (see ‘num_fixed_sizes’), it is set to the number of outline glyphs.

+

For CID-keyed fonts, this value gives the highest CID used in the font.

+
family_name +

The face's family name. This is an ASCII string, usually in English, that describes the typeface's family (like ‘Times New Roman’, ‘Bodoni’, ‘Garamond’, etc). This is a least common denominator used to list fonts. Some formats (TrueType & OpenType) provide localized and Unicode versions of this string. Applications should use the format specific interface to access them. Can be NULL (e.g., in fonts embedded in a PDF file).

+

In case the font doesn't provide a specific family name entry, FreeType tries to synthesize one, deriving it from other name entries.

+
style_name +

The face's style name. This is an ASCII string, usually in English, that describes the typeface's style (like ‘Italic’, ‘Bold’, ‘Condensed’, etc). Not all font formats provide a style name, so this field is optional, and can be set to NULL. As for ‘family_name’, some formats provide localized and Unicode versions of this string. Applications should use the format specific interface to access them.

+
num_fixed_sizes +

The number of bitmap strikes in the face. Even if the face is scalable, there might still be bitmap strikes, which are called ‘sbits’ in that case.

+
available_sizes +

An array of FT_Bitmap_Size for all bitmap strikes in the face. It is set to NULL if there is no bitmap strike.

+

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 usually negative. Only relevant for scalable formats.

+
height +

This value is the vertical distance between two consecutive baselines, expressed in font units. It is always positive. Only relevant for scalable formats.

+

If you want the global glyph height, use ‘ascender - descender’.

+
max_advance_width +

The maximum advance width, in font units, for all glyphs in this face. This can be used to make word wrapping computations faster. Only relevant for scalable formats.

+
max_advance_height +

The maximum advance height, in font units, for all glyphs in this face. This is only relevant for vertical layouts, and is set to ‘height’ for fonts that do not provide vertical metrics. Only relevant for scalable formats.

+
underline_position +

The position, in font units, of the underline line for this face. It is the center of the underlining stem. Only relevant for scalable formats.

+
underline_thickness +

The thickness, in font units, of the underline for this face. Only relevant for scalable formats.

+
glyph +

The face's associated glyph slot(s).

+
size +

The current active size for this face.

+
charmap +

The current active charmap for this face.

+
+ +

note

+

Fields may be changed after a call to FT_Attach_File or FT_Attach_Stream.

+ +
+
+ +
+

FT_HAS_HORIZONTAL

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_HORIZONTAL( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
+
+ +

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.

+ +
+
+ +
+

FT_HAS_VERTICAL

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_VERTICAL( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
+
+ +

A macro that returns true whenever a face object contains real vertical metrics (and not only synthesized ones).

+ +
+
+ +
+

FT_HAS_KERNING

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_KERNING( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_KERNING )
+
+ +

A macro that returns true whenever a face object contains kerning data that can be accessed with FT_Get_Kerning.

+ +
+
+ +
+

FT_HAS_FIXED_SIZES

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_FIXED_SIZES( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES )
+
+ +

A macro that returns true whenever a face object contains some embedded bitmaps. See the ‘available_sizes’ field of the FT_FaceRec structure.

+ +
+
+ +
+

FT_HAS_GLYPH_NAMES

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_GLYPH_NAMES( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
+
+ +

A macro that returns true whenever a face object contains some glyph names that can be accessed through FT_Get_Glyph_Name.

+ +
+
+ +
+

FT_HAS_MULTIPLE_MASTERS

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_MULTIPLE_MASTERS( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
+
+ +

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.

+ +
+
+ +
+

FT_HAS_COLOR

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_COLOR( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_COLOR )
+
+ +

A macro that returns true whenever a face object contains tables for color glyphs.

+ +
+
+ +
+

FT_IS_SFNT

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_IS_SFNT( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_SFNT )
+
+ +

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.

+ +
+
+ +
+

FT_IS_SCALABLE

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_IS_SCALABLE( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_SCALABLE )
+
+ +

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.

+ +
+
+ +
+

FT_IS_FIXED_WIDTH

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_IS_FIXED_WIDTH( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
+
+ +

A macro that returns true whenever a face object contains a font face that contains fixed-width (or ‘monospace’, ‘fixed-pitch’, etc.) glyphs.

+ +
+
+ +
+

FT_IS_CID_KEYED

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_IS_CID_KEYED( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
+
+ +

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.

+ +
+
+ +
+

FT_IS_TRICKY

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_IS_TRICKY( face ) \
+          ( (face)->face_flags & FT_FACE_FLAG_TRICKY )
+
+ +

A macro that returns true whenever a face represents a ‘tricky’ font. See the discussion of FT_FACE_FLAG_TRICKY for more details.

+ +
+
+ +
+

FT_SizeRec

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FT_Size_Metrics

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

The size metrics structure gives the metrics of a size object.

+ +

fields

+ + + + + + + + + +
x_ppem +

The width of the scaled EM square in pixels, hence the term ‘ppem’ (pixels per EM). It is also referred to as ‘nominal width’.

+
y_ppem +

The height of the scaled EM square in pixels, hence the term ‘ppem’ (pixels per EM). It is also referred to as ‘nominal height’.

+
x_scale +

A 16.16 fractional scaling value used to convert horizontal metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.

+
y_scale +

A 16.16 fractional scaling value used to convert vertical metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.

+
ascender +

The ascender in 26.6 fractional pixels. See FT_FaceRec for the details.

+
descender +

The descender in 26.6 fractional pixels. See FT_FaceRec for the details.

+
height +

The height in 26.6 fractional pixels. See FT_FaceRec for the details.

+
max_advance +

The maximum advance width in 26.6 fractional pixels. See FT_FaceRec for the details.

+
+ +

note

+

The scaling values, if relevant, are determined first during a size changing operation. The remaining fields are then set by the driver. For scalable formats, they are usually set to scaled values of the corresponding fields in FT_FaceRec.

+

Note that due to glyph hinting, these values might not be exact for certain fonts. Thus they must be treated as unreliable with an error margin of at least one pixel!

+

Indeed, the only way to get the exact metrics is to render all glyphs. As this would be a definite performance hit, it is up to client applications to perform such computations.

+

The FT_Size_Metrics structure is valid for bitmap fonts also.

+ +
+
+ +
+

FT_GlyphSlotRec

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

FreeType root glyph slot class structure. A glyph slot is a container where individual glyphs can be loaded, be they in outline or bitmap format.

+ +

fields

+ + + + + + + + + + + + + + + + + + + + + +
library +

A handle to the FreeType library instance this slot belongs to.

+
face +

A handle to the parent face object.

+
next +

In some cases (like some font tools), several glyph slots per face object can be a good thing. As this is rare, the glyph slots are listed through a direct, single-linked list using its ‘next’ field.

+
generic +

A typeless pointer unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each glyph slot object.

+
metrics +

The metrics of the last loaded glyph in the slot. The returned values depend on the last load flags (see the FT_Load_Glyph API function) and can be expressed either in 26.6 fractional pixels or font units.

+

Note that even when the glyph image is transformed, the metrics are not.

+
linearHoriAdvance +

The advance width of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless FT_LOAD_LINEAR_DESIGN is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs.

+
linearVertAdvance +

The advance height of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless FT_LOAD_LINEAR_DESIGN is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs.

+
advance +

This shorthand is, depending on FT_LOAD_IGNORE_TRANSFORM, the transformed (hinted) advance width for the glyph, in 26.6 fractional pixel format. As specified with FT_LOAD_VERTICAL_LAYOUT, it uses either the ‘horiAdvance’ or the ‘vertAdvance’ value of ‘metrics’ field.

+
format +

This field indicates the format of the image contained in the glyph slot. Typically FT_GLYPH_FORMAT_BITMAP, FT_GLYPH_FORMAT_OUTLINE, or FT_GLYPH_FORMAT_COMPOSITE, but others are possible.

+
bitmap +

This field is used as a bitmap descriptor when the slot format is FT_GLYPH_FORMAT_BITMAP. Note that the address and content of the bitmap buffer can change between calls of FT_Load_Glyph and a few other functions.

+
bitmap_left +

The bitmap's left bearing expressed in integer pixels. Only valid if the format is FT_GLYPH_FORMAT_BITMAP, this is, if the glyph slot contains a bitmap.

+
bitmap_top +

The bitmap's top bearing expressed in integer pixels. Remember that this is the distance from the baseline to the top-most glyph scanline, upwards y coordinates being positive.

+
outline +

The outline descriptor for the current glyph image if its format is FT_GLYPH_FORMAT_OUTLINE. Once a glyph is loaded, ‘outline’ can be transformed, distorted, embolded, etc. However, it must not be freed.

+
num_subglyphs +

The number of subglyphs in a composite glyph. This field is only valid for the composite glyph format that should normally only be loaded with the FT_LOAD_NO_RECURSE flag.

+
subglyphs +

An array of subglyph descriptors for composite glyphs. There are ‘num_subglyphs’ elements in there. Currently internal to FreeType.

+
control_data +

Certain font drivers can also return the control data for a given glyph image (e.g. TrueType bytecode, Type 1 charstrings, etc.). This field is a pointer to such data.

+
control_len +

This is the length in bytes of the control data.

+
other +

Really wicked formats can use this pointer to present their own glyph image to client applications. Note that the application needs to know about the image format.

+
lsb_delta +

The difference between hinted and unhinted left side bearing while auto-hinting is active. Zero otherwise.

+
rsb_delta +

The difference between hinted and unhinted right side bearing while auto-hinting is active. Zero otherwise.

+
+ +

note

+

If FT_Load_Glyph is called with default flags (see FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in its native format (e.g., an outline glyph for TrueType and Type 1 formats).

+

This image can later be converted into a bitmap by calling FT_Render_Glyph. This function finds the current renderer for the native image's format, then invokes it.

+

The renderer is in charge of transforming the native image through the slot's face transformation fields, then converting it into a bitmap that is returned in ‘slot->bitmap’.

+

Note that ‘slot->bitmap_left’ and ‘slot->bitmap_top’ are also used to specify the position of the bitmap relative to the current pen position (e.g., coordinates (0,0) on the baseline). Of course, ‘slot->format’ is also changed to FT_GLYPH_FORMAT_BITMAP.

+

Here is a small pseudo code fragment that shows how to use ‘lsb_delta’ and ‘rsb_delta’:

+
+  FT_Pos  origin_x       = 0;
+  FT_Pos  prev_rsb_delta = 0;
+
+
+  for all glyphs do
+    <compute kern between current and previous glyph and add it to
+     `origin_x'>
+
+    <load glyph with `FT_Load_Glyph'>
+
+    if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 )
+      origin_x -= 64;
+    else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 )
+      origin_x += 64;
+
+    prev_rsb_delta = face->glyph->rsb_delta;
+
+    <save glyph image, or render glyph, or ...>
+
+    origin_x += face->glyph->advance.x;
+  endfor
+
+

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.

+ +
+
+ +
+

FT_Glyph_Metrics

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

A structure used to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel format; if the flag FT_LOAD_NO_SCALE has been used while loading the glyph, values are expressed in font units instead.

+ +

fields

+ + + + + + + + + +
width +

The glyph's width.

+
height +

The glyph's height.

+
horiBearingX +

Left side bearing for horizontal layout.

+
horiBearingY +

Top side bearing for horizontal layout.

+
horiAdvance +

Advance width for horizontal layout.

+
vertBearingX +

Left side bearing for vertical layout.

+
vertBearingY +

Top side bearing for vertical layout. Larger positive values mean further below the vertical glyph origin.

+
vertAdvance +

Advance height for vertical layout. Positive values mean the glyph has a positive advance downward.

+
+ +

note

+

If not disabled with FT_LOAD_NO_HINTING, the values represent dimensions of the hinted glyph (in case hinting is applicable).

+

Stroking a glyph with an outside border does not increase ‘horiAdvance’ or ‘vertAdvance’; you have to manually adjust these values to account for the added width and height.

+ +
+
+ +
+

FT_SubGlyph

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_SubGlyphRec_*  FT_SubGlyph;
+
+ +

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.

+ +
+
+ +
+

FT_Bitmap_Size

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

This structure models the metrics of a bitmap strike (i.e., a set of glyphs for a given point size and resolution) in a bitmap font. It is used for the ‘available_sizes’ field of FT_Face.

+ +

fields

+ + + + + + +
height +

The vertical distance, in pixels, between two consecutive baselines. It is always positive.

+
width +

The average width, in pixels, of all glyphs in the strike.

+
size +

The nominal size of the strike in 26.6 fractional points. This field is not very useful.

+
x_ppem +

The horizontal ppem (nominal width) in 26.6 fractional pixels.

+
y_ppem +

The vertical ppem (nominal height) in 26.6 fractional pixels.

+
+ +

note

+

Windows FNT: The nominal size given in a FNT font is not reliable. Thus when the driver finds it incorrect, it sets ‘size’ to some calculated values and sets ‘x_ppem’ and ‘y_ppem’ to the pixel width and height given in the font, respectively.

+

TrueType embedded bitmaps: ‘size’, ‘width’, and ‘height’ values are not contained in the bitmap strike itself. They are computed from the global font parameters.

+ +
+
+ +
+

FT_Init_FreeType

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Init_FreeType( FT_Library  *alibrary );
+
+ +

Initialize a new FreeType library object. The set of modules that are registered by this function is determined at build time.

+ +

output

+ + +
alibrary +

A handle to a new library object.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

In case you want to provide your own memory allocating routines, use FT_New_Library instead, followed by a call to FT_Add_Default_Modules (or a series of calls to FT_Add_Module).

+

See the documentation of FT_Library and FT_Face for multi-threading issues.

+

If you need reference-counting (cf. FT_Reference_Library), use FT_New_Library and FT_Done_Library.

+ +
+
+ +
+

FT_Done_FreeType

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Done_FreeType( FT_Library  library );
+
+ +

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_New_Face

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_New_Face( FT_Library   library,
+               const char*  filepathname,
+               FT_Long      face_index,
+               FT_Face     *aface );
+
+ +

This function calls FT_Open_Face to open a font by its pathname.

+ +

inout

+ + +
library +

A handle to the library resource.

+
+ +

input

+ + + +
pathname +

A path to the font file.

+
face_index +

See FT_Open_Face for a detailed description of this parameter.

+
+ +

output

+ + +
aface +

A handle to a new face object. If ‘face_index’ is greater than or equal to zero, it must be non-NULL.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

Use FT_Done_Face to destroy the created FT_Face object (along with its slot and sizes).

+ +
+
+ +
+

FT_Done_Face

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Done_Face( FT_Face  face );
+
+ +

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_Reference_Face

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Reference_Face( FT_Face  face );
+
+ +

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_New_Memory_Face

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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 );
+
+ +

This function calls FT_Open_Face to open a font that has been loaded into memory.

+ +

inout

+ + +
library +

A handle to the library resource.

+
+ +

input

+ + + + +
file_base +

A pointer to the beginning of the font data.

+
file_size +

The size of the memory chunk used by the font data.

+
face_index +

See FT_Open_Face for a detailed description of this parameter.

+
+ +

output

+ + +
aface +

A handle to a new face object. If ‘face_index’ is greater than or equal to zero, it must be non-NULL.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

You must not deallocate the memory before calling FT_Done_Face.

+ +
+
+ +
+

FT_Open_Face

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Open_Face( FT_Library           library,
+                const FT_Open_Args*  args,
+                FT_Long              face_index,
+                FT_Face             *aface );
+
+ +

Create a face object from a given resource described by FT_Open_Args.

+ +

inout

+ + +
library +

A handle to the library resource.

+
+ +

input

+ + + +
args +

A pointer to an ‘FT_Open_Args’ structure that must be filled by the caller.

+
face_index +

This field holds two different values. Bits 0-15 are the index of the face in the font file (starting with value 0). Set it to 0 if there is only one face in the font file.

+

Bits 16-30 are relevant to GX variation fonts only, specifying the named instance index for the current face index (starting with value 1; value 0 makes FreeType ignore named instances). For non-GX fonts, bits 16-30 are ignored. Assuming that you want to access the third named instance in face 4, ‘face_index’ should be set to 0x00030004. If you want to access face 4 without GX variation handling, simply set ‘face_index’ to value 4.

+

FT_Open_Face and its siblings can be used to quickly check whether the font format of a given font resource is supported by FreeType. In general, if the ‘face_index’ argument is negative, the function's return value is 0 if the font format is recognized, or non-zero otherwise. The function allocates a more or less empty face handle in ‘*aface’ (if ‘aface’ isn't NULL); the only two useful fields in this special case are ‘face->num_faces’ and ‘face->style_flags’. For any negative value of ‘face_index’, ‘face->num_faces’ gives the number of faces within the font file. For the negative value ‘-(N+1)’ (with ‘N’ a 16-bit value), bits 16-30 in ‘face->style_flags’ give the number of named instances in face ‘N’ if we have a GX variation font (or zero otherwise). After examination, the returned FT_Face structure should be deallocated with a call to FT_Done_Face.

+
+ +

output

+ + +
aface +

A handle to a new face object. If ‘face_index’ is greater than or equal to zero, it must be non-NULL.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object that can be accessed directly through ‘face->glyph’.

+

Each new face object created with this function also owns a default FT_Size object, accessible as ‘face->size’.

+

One FT_Library instance can have multiple face objects, this is, FT_Open_Face and its siblings can be called multiple times using the same ‘library’ argument.

+

See the discussion of reference counters in the description of FT_Reference_Face.

+

To loop over all faces, use code similar to the following snippet (omitting the error handling).

+
+  ...
+  FT_Face  face;
+  FT_Long  i, num_faces;
+
+
+  error = FT_Open_Face( library, args, -1, &face );
+  if ( error ) { ... }
+
+  num_faces = face->num_faces;
+  FT_Done_Face( face );
+
+  for ( i = 0; i < num_faces; i++ )
+  {
+    ...
+    error = FT_Open_Face( library, args, i, &face );
+    ...
+    FT_Done_Face( face );
+    ...
+  }
+
+

To loop over all valid values for ‘face_index’, use something similar to the following snippet, again without error handling. The code accesses all faces immediately (thus only a single call of ‘FT_Open_Face’ within the do-loop), with and without named instances.

+
+  ...
+  FT_Face  face;
+
+  FT_Long  num_faces     = 0;
+  FT_Long  num_instances = 0;
+
+  FT_Long  face_idx     = 0;
+  FT_Long  instance_idx = 0;
+
+
+  do
+  {
+    FT_Long  id = ( instance_idx << 16 ) + face_idx;
+
+
+    error = FT_Open_Face( library, args, id, &face );
+    if ( error ) { ... }
+
+    num_faces     = face->num_faces;
+    num_instances = face->style_flags >> 16;
+
+    ...
+
+    FT_Done_Face( face );
+
+    if ( instance_idx < num_instances )
+      instance_idx++;
+    else
+    {
+      face_idx++;
+      instance_idx = 0;
+    }
+
+  } while ( face_idx < num_faces )
+
+ +
+
+ +
+

FT_Open_Args

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

A structure used to indicate how to open a new font file or stream. A pointer to such a structure can be used as a parameter for the functions FT_Open_Face and FT_Attach_Stream.

+ +

fields

+ + + + + + + + + +
flags +

A set of bit flags indicating how to use the structure.

+
memory_base +

The first byte of the file in memory.

+
memory_size +

The size in bytes of the file in memory.

+
pathname +

A pointer to an 8-bit file pathname.

+
stream +

A handle to a source stream object.

+
driver +

This field is exclusively used by FT_Open_Face; it simply specifies the font driver to use to open the face. If set to 0, FreeType tries to load the face with each one of the drivers in its list.

+
num_params +

The number of extra parameters.

+
params +

Extra parameters passed to the font driver when opening a new face.

+
+ +

note

+

The stream type is determined by the contents of ‘flags’ that are tested in the following order by FT_Open_Face:

+

If the FT_OPEN_MEMORY bit is set, assume that this is a memory file of ‘memory_size’ bytes, located at ‘memory_address’. The data are not copied, and the client is responsible for releasing and destroying them after the corresponding call to FT_Done_Face.

+

Otherwise, if the FT_OPEN_STREAM bit is set, assume that a custom input stream ‘stream’ is used.

+

Otherwise, if the FT_OPEN_PATHNAME bit is set, assume that this is a normal file and use ‘pathname’ to open it.

+

If the FT_OPEN_DRIVER bit is set, FT_Open_Face only tries to open the file with the driver whose handler is in ‘driver’.

+

If the FT_OPEN_PARAMS bit is set, the parameters given by ‘num_params’ and ‘params’ is used. They are ignored otherwise.

+

Ideally, both the ‘pathname’ and ‘params’ fields should be tagged as ‘const’; this is missing for API backwards compatibility. In other words, applications should treat them as read-only.

+ +
+
+ +
+

FT_Parameter

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct  FT_Parameter_
+  {
+    FT_ULong    tag;
+    FT_Pointer  data;
+
+  } FT_Parameter;
+
+ +

A simple structure used to pass more or less generic parameters to FT_Open_Face.

+ +

fields

+ + + +
tag +

A four-byte identification tag.

+
data +

A pointer to the parameter data.

+
+ +

note

+

The ID and function of parameters are driver-specific. See the various FT_PARAM_TAG_XXX flags for more information.

+ +
+
+ +
+

FT_Attach_File

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Attach_File( FT_Face      face,
+                  const char*  filepathname );
+
+ +

This function calls FT_Attach_Stream to attach a file.

+ +

inout

+ + +
face +

The target face object.

+
+ +

input

+ + +
filepathname +

The pathname.

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Attach_Stream

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Attach_Stream( FT_Face        face,
+                    FT_Open_Args*  parameters );
+
+ +

‘Attach’ data to a face object. Normally, this is used to read additional information for the face object. For example, you can attach an AFM file that comes with a Type 1 font to get the kerning values and other metrics.

+ +

inout

+ + +
face +

The target face object.

+
+ +

input

+ + +
parameters +

A pointer to FT_Open_Args that must be filled by the caller.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

The meaning of the ‘attach’ (i.e., what really happens when the new file is read) is not fixed by FreeType itself. It really depends on the font format (and thus the font driver).

+

Client applications are expected to know what they are doing when invoking this function. Most drivers simply do not implement file attachments.

+ +
+
+ +
+

FT_Set_Char_Size

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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 );
+
+ +

This function calls FT_Request_Size to request the nominal size (in points).

+ +

inout

+ + +
face +

A handle to a target face object.

+
+ +

input

+ + + + + +
char_width +

The nominal width, in 26.6 fractional points.

+
char_height +

The nominal height, in 26.6 fractional points.

+
horz_resolution +

The horizontal resolution in dpi.

+
vert_resolution +

The vertical resolution in dpi.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

If either the character width or height is zero, it is set equal to the other value.

+

If either the horizontal or vertical resolution is zero, it is set equal to the other value.

+

A character width or height smaller than 1pt is set to 1pt; if both resolution values are zero, they are set to 72dpi.

+

Don't use this function if you are using the FreeType cache API.

+ +
+
+ +
+

FT_Set_Pixel_Sizes

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Set_Pixel_Sizes( FT_Face  face,
+                      FT_UInt  pixel_width,
+                      FT_UInt  pixel_height );
+
+ +

This function calls FT_Request_Size to request the nominal size (in pixels).

+ +

inout

+ + +
face +

A handle to the target face object.

+
+ +

input

+ + + +
pixel_width +

The nominal width, in pixels.

+
pixel_height +

The nominal height, in pixels.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

You should not rely on the resulting glyphs matching, or being constrained, to this pixel size. Refer to FT_Request_Size to understand how requested sizes relate to actual sizes.

+

Don't use this function if you are using the FreeType cache API.

+ +
+
+ +
+

FT_Request_Size

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Request_Size( FT_Face          face,
+                   FT_Size_Request  req );
+
+ +

Resize the scale of the active FT_Size object in a face.

+ +

inout

+ + +
face +

A handle to a target face object.

+
+ +

input

+ + +
req +

A pointer to a FT_Size_RequestRec.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

Although drivers may select the bitmap strike matching the request, you should not rely on this if you intend to select a particular bitmap strike. Use FT_Select_Size instead in that case.

+

The relation between the requested size and the resulting glyph size is dependent entirely on how the size is defined in the source face. The font designer chooses the final size of each glyph relative to this size. For more information refer to ‘http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html

+

Don't use this function if you are using the FreeType cache API.

+ +
+
+ +
+

FT_Select_Size

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Select_Size( FT_Face  face,
+                  FT_Int   strike_index );
+
+ +

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 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_Size_Request_Type

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

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 are used to determine both scaling values.

+
FT_SIZE_REQUEST_TYPE_BBOX +

The font bounding box. The width and height of the ‘bbox’ field of FT_FaceRec are used to determine the horizontal and vertical scaling value, respectively.

+
FT_SIZE_REQUEST_TYPE_CELL +

The ‘max_advance_width’ field of FT_FaceRec is used to determine the horizontal scaling value; the vertical scaling value is determined the same way as FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling values are set to the smaller one. This type is useful if you want to specify the font size for, say, a window of a given dimension and 80x24 cells.

+
FT_SIZE_REQUEST_TYPE_SCALES +

Specify the scaling values directly.

+
+ +

note

+

The above descriptions only apply to scalable formats. For bitmap formats, the behaviour is up to the driver.

+

See the note section of FT_Size_Metrics if you wonder how size requesting relates to scaling values.

+ +
+
+ +
+

FT_Size_RequestRec

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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;
+
+ +

A structure used 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.

+
vertResolution +

The vertical resolution (dpi, i.e., pixels per inch). If set to zero, ‘height’ is treated as a 26.6 fractional pixel value.

+
+ +

note

+

If ‘width’ is zero, then the horizontal scaling value is set equal to the vertical scaling value, and vice versa.

+

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.

+ +
+
+ +
+

FT_Size_Request

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_Size_RequestRec_  *FT_Size_Request;
+
+ +

A handle to a size request structure.

+ +
+
+ +
+

FT_Set_Transform

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( void )
+  FT_Set_Transform( FT_Face     face,
+                    FT_Matrix*  matrix,
+                    FT_Vector*  delta );
+
+ +

A function used to set the transformation that is applied to glyph images when they are loaded into a glyph slot through FT_Load_Glyph.

+ +

inout

+ + +
face +

A handle to the source face object.

+
+ +

input

+ + + +
matrix +

A pointer to the transformation's 2x2 matrix. Use 0 for the identity matrix.

+
delta +

A pointer to the translation vector. Use 0 for the null vector.

+
+ +

note

+

The transformation is only applied to scalable image formats after the glyph has been loaded. It means that hinting is unaltered by the transformation and is performed on the character size given in the last call to FT_Set_Char_Size or FT_Set_Pixel_Sizes.

+

Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’.

+ +
+
+ +
+

FT_Load_Glyph

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Load_Glyph( FT_Face   face,
+                 FT_UInt   glyph_index,
+                 FT_Int32  load_flags );
+
+ +

A function used to load a single glyph into the glyph slot of a face object.

+ +

inout

+ + +
face +

A handle to the target face object where the glyph is loaded.

+
+ +

input

+ + + +
glyph_index +

The index of the glyph in the font file. For CID-keyed fonts (either in PS or in CFF format) this argument specifies the CID value.

+
load_flags +

A flag indicating what to load for this glyph. The FT_LOAD_XXX constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc).

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

The loaded glyph may be transformed. See FT_Set_Transform for the details.

+

For subsetted CID-keyed fonts, ‘FT_Err_Invalid_Argument’ is returned for invalid CID values (this is, for CID values that don't have a corresponding glyph in the font). See the discussion of the FT_FACE_FLAG_CID_KEYED flag for more details.

+

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_Get_Char_Index

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_UInt )
+  FT_Get_Char_Index( FT_Face   face,
+                     FT_ULong  charcode );
+
+ +

Return the glyph index of a given character code. This function uses a charmap object to do the mapping.

+ +

input

+ + + +
face +

A handle to the source face object.

+
charcode +

The character code.

+
+ +

return

+

The glyph index. 0 means ‘undefined character code’.

+ +

note

+

If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index returned by this function doesn't always correspond to the internal indices used within the file. This is done to ensure that value 0 always corresponds to the ‘missing glyph’. If the first glyph is not named ‘.notdef’, then for Type 1 and Type 42 fonts, ‘.notdef’ will be moved into the glyph ID 0 position, and whatever was there will be moved to the position ‘.notdef’ had. For Type 1 fonts, if there is no ‘.notdef’ glyph at all, then one will be created at index 0 and whatever was there will be moved to the last index -- Type 42 fonts are considered invalid under this condition.

+ +
+
+ +
+

FT_Get_First_Char

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_ULong )
+  FT_Get_First_Char( FT_Face   face,
+                     FT_UInt  *agindex );
+
+ +

This function is used to return the first character code in the current charmap of a given face. It also returns the corresponding glyph index.

+ +

input

+ + +
face +

A handle to the source face object.

+
+ +

output

+ + +
agindex +

Glyph index of first character code. 0 if charmap is empty.

+
+ +

return

+

The charmap's first character code.

+ +

note

+

You should use this function with FT_Get_Next_Char to be able to parse all character codes available in a given charmap. The code should look like this:

+
+  FT_ULong  charcode;
+  FT_UInt   gindex;
+
+
+  charcode = FT_Get_First_Char( face, &gindex );
+  while ( gindex != 0 )
+  {
+    ... do something with (charcode,gindex) pair ...
+
+    charcode = FT_Get_Next_Char( face, charcode, &gindex );
+  }
+
+

Be aware that character codes can have values up to 0xFFFFFFFF; this might happen for non-Unicode or malformed cmaps. However, even with regular Unicode encoding, so-called ‘last resort fonts’ (using SFNT cmap format 13, see function FT_Get_CMap_Format) normally have entries for all Unicode characters up to 0x1FFFFF, which can cause *a lot* of iterations.

+

Note that ‘*agindex’ is set to 0 if the charmap is empty. The result itself can be 0 in two cases: if the charmap is empty or if the value 0 is the first valid character code.

+ +
+
+ +
+

FT_Get_Next_Char

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_ULong )
+  FT_Get_Next_Char( FT_Face    face,
+                    FT_ULong   char_code,
+                    FT_UInt   *agindex );
+
+ +

This function is used to return the next character code in the current charmap of a given face following the value ‘char_code’, as well as the corresponding glyph index.

+ +

input

+ + + +
face +

A handle to the source face object.

+
char_code +

The starting character code.

+
+ +

output

+ + +
agindex +

Glyph index of next character code. 0 if charmap is empty.

+
+ +

return

+

The charmap's next character code.

+ +

note

+

You should use this function with FT_Get_First_Char to walk over all character codes available in a given charmap. See the note for this function for a simple code example.

+

Note that ‘*agindex’ is set to 0 when there are no more codes in the charmap.

+ +
+
+ +
+

FT_Get_Name_Index

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_UInt )
+  FT_Get_Name_Index( FT_Face     face,
+                     FT_String*  glyph_name );
+
+ +

Return the glyph index of a given glyph name. This function uses driver specific objects to do the translation.

+ +

input

+ + + +
face +

A handle to the source face object.

+
glyph_name +

The glyph name.

+
+ +

return

+

The glyph index. 0 means ‘undefined character code’.

+ +
+
+ +
+

FT_Load_Char

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Load_Char( FT_Face   face,
+                FT_ULong  char_code,
+                FT_Int32  load_flags );
+
+ +

A function used to load a single glyph into the glyph slot of a face object, according to its character code.

+ +

inout

+ + +
face +

A handle to a target face object where the glyph is loaded.

+
+ +

input

+ + + +
char_code +

The glyph's character code, according to the current charmap used in the face.

+
load_flags +

A flag indicating what to load for this glyph. The FT_LOAD_XXX constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc).

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

This function simply calls FT_Get_Char_Index and FT_Load_Glyph.

+ +
+
+ +
+

FT_LOAD_TARGET_MODE

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_LOAD_TARGET_MODE( x )  ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )
+
+ +

Return the FT_Render_Mode corresponding to a given FT_LOAD_TARGET_XXX value.

+ +
+
+ +
+

FT_Render_Glyph

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Render_Glyph( FT_GlyphSlot    slot,
+                   FT_Render_Mode  render_mode );
+
+ +

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 +

This is the render mode used to render the glyph image into a bitmap. See FT_Render_Mode for a list of possible values.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

To get meaningful results, font scaling values must be set with functions like FT_Set_Char_Size before calling FT_Render_Glyph.

+

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_Render_Mode

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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
+
+ +

An enumeration type that lists the render modes supported by FreeType 2. Each mode corresponds to a specific type of scanline conversion performed on the outline.

+

For bitmap fonts and embedded bitmaps the ‘bitmap->pixel_mode’ field in the FT_GlyphSlotRec structure gives the format of the returned bitmap.

+

All modes except FT_RENDER_MODE_MONO use 256 levels of opacity, indicating pixel coverage. Use linear alpha blending and gamma correction to correctly render non-monochrome glyph bitmaps onto a surface; see FT_Render_Glyph.

+ +

values

+ + + + + + +
FT_RENDER_MODE_NORMAL +

This is the default render mode; it corresponds to 8-bit anti-aliased bitmaps.

+
FT_RENDER_MODE_LIGHT +

This is equivalent to FT_RENDER_MODE_NORMAL. It is only defined as a separate value because render modes are also used indirectly to define hinting algorithm selectors. See FT_LOAD_TARGET_XXX for details.

+
FT_RENDER_MODE_MONO +

This mode corresponds to 1-bit bitmaps (with 2 levels of opacity).

+
FT_RENDER_MODE_LCD +

This mode corresponds to horizontal RGB and BGR sub-pixel displays like LCD screens. It produces 8-bit bitmaps that are 3 times the width of the original glyph outline in pixels, and which use the FT_PIXEL_MODE_LCD mode.

+
FT_RENDER_MODE_LCD_V +

This mode corresponds to vertical RGB and BGR sub-pixel displays (like PDA screens, rotated LCD displays, etc.). It produces 8-bit bitmaps that are 3 times the height of the original glyph outline in pixels and use the FT_PIXEL_MODE_LCD_V mode.

+
+ +

note

+

The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be filtered to reduce color-fringes by using FT_Library_SetLcdFilter (not active in the default builds). It is up to the caller to either call FT_Library_SetLcdFilter (if available) or do the filtering itself.

+

The selected render mode only affects vector glyphs of a font. Embedded bitmaps often have a different pixel mode like FT_PIXEL_MODE_MONO. You can use FT_Bitmap_Convert to transform them into 8-bit pixmaps.

+ +
+
+ +
+

FT_Get_Kerning

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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 );
+
+ +

Return the kerning vector between two glyphs of a same face.

+ +

input

+ + + + + +
face +

A handle to a source face object.

+
left_glyph +

The index of the left glyph in the kern pair.

+
right_glyph +

The index of the right glyph in the kern pair.

+
kern_mode +

See FT_Kerning_Mode for more information. Determines the scale and dimension of the returned kerning vector.

+
+ +

output

+ + +
akerning +

The kerning vector. This is either in font units, fractional pixels (26.6 format), or pixels for scalable formats, and in pixels for fixed-sizes formats.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

Only horizontal layouts (left-to-right & right-to-left) are supported by this method. Other layouts, or more sophisticated kernings, are out of the scope of this API function -- they can be implemented through format-specific interfaces.

+ +
+
+ +
+

FT_Kerning_Mode

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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
+
+ +

An enumeration used to specify which kerning values to return in FT_Get_Kerning.

+ +

values

+ + + + +
FT_KERNING_DEFAULT +

Return grid-fitted kerning distances in pixels (value is 0). Whether they are scaled depends on FT_LOAD_NO_SCALE.

+
FT_KERNING_UNFITTED +

Return un-grid-fitted kerning distances in 26.6 fractional pixels. Whether they are scaled depends on FT_LOAD_NO_SCALE.

+
FT_KERNING_UNSCALED +

Return the kerning vector in original font units.

+
+ +

note

+

FT_KERNING_DEFAULT returns full pixel values; it also makes FreeType heuristically scale down kerning distances at small ppem values so that they don't become too big.

+ +
+
+ +
+

FT_Get_Track_Kerning

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Track_Kerning( FT_Face    face,
+                        FT_Fixed   point_size,
+                        FT_Int     degree,
+                        FT_Fixed*  akerning );
+
+ +

Return the track kerning for a given face object at a given size.

+ +

input

+ + + + +
face +

A handle to a source face object.

+
point_size +

The point size in 16.16 fractional points.

+
degree +

The degree of tightness. Increasingly negative values represent tighter track kerning, while increasingly positive values represent looser track kerning. Value zero means no track kerning.

+
+ +

output

+ + +
akerning +

The kerning in 16.16 fractional points, to be uniformly applied between all glyphs.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

Currently, only the Type 1 font driver supports track kerning, using data from AFM files (if attached with FT_Attach_File or FT_Attach_Stream).

+

Only very few AFM files come with track kerning data; please refer to the Adobe's AFM specification for more details.

+ +
+
+ +
+

FT_Get_Glyph_Name

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Glyph_Name( FT_Face     face,
+                     FT_UInt     glyph_index,
+                     FT_Pointer  buffer,
+                     FT_UInt     buffer_max );
+
+ +

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_Get_Postscript_Name

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( const char* )
+  FT_Get_Postscript_Name( FT_Face  face );
+
+ +

Retrieve the ASCII PostScript name of a given face, if available. This only works with PostScript and TrueType fonts.

+ +

input

+ + +
face +

A handle to the source face object.

+
+ +

return

+

A pointer to the face's PostScript name. NULL if unavailable.

+ +

note

+

The returned pointer is owned by the face and is destroyed with it.

+ +
+
+ +
+

FT_CharMapRec

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct  FT_CharMapRec_
+  {
+    FT_Face      face;
+    FT_Encoding  encoding;
+    FT_UShort    platform_id;
+    FT_UShort    encoding_id;
+
+  } FT_CharMapRec;
+
+ +

The base charmap structure.

+ +

fields

+ + + + + +
face +

A handle to the parent face object.

+
encoding +

An FT_Encoding tag identifying the charmap. Use this with FT_Select_Charmap.

+
platform_id +

An ID number describing the platform for the following encoding ID. This comes directly from the TrueType specification and should be emulated for other formats.

+
encoding_id +

A platform specific encoding number. This also comes from the TrueType specification and should be emulated similarly.

+
+ +
+
+ +
+

FT_Select_Charmap

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Select_Charmap( FT_Face      face,
+                     FT_Encoding  encoding );
+
+ +

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_Set_Charmap

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Set_Charmap( FT_Face     face,
+                  FT_CharMap  charmap );
+
+ +

Select a given charmap for character code to glyph index mapping.

+ +

inout

+ + +
face +

A handle to the source face object.

+
+ +

input

+ + +
charmap +

A handle to the selected charmap.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

This function returns an error if the charmap is not part of the face (i.e., if it is not listed in the ‘face->charmaps’ table).

+

It also fails if a type 14 charmap is selected.

+ +
+
+ +
+

FT_Get_Charmap_Index

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Int )
+  FT_Get_Charmap_Index( FT_CharMap  charmap );
+
+ +

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_Get_FSType_Flags

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_UShort )
+  FT_Get_FSType_Flags( FT_Face  face );
+
+ +

Return the fsType flags for a font.

+ +

input

+ + +
face +

A handle to the source face object.

+
+ +

return

+

The fsType flags, FT_FSTYPE_XXX.

+ +

note

+

Use this function rather than directly reading the ‘fs_type’ field in the PS_FontInfoRec structure, which is only guaranteed to return the correct results for Type 1 fonts.

+ +

since

+

2.3.8

+ +
+
+ +
+

FT_Get_SubGlyph_Info

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  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 );
+
+ +

Retrieve a description of a given subglyph. Only use it if ‘glyph->format’ is FT_GLYPH_FORMAT_COMPOSITE; an error is returned otherwise.

+ +

input

+ + + +
glyph +

The source glyph slot.

+
sub_index +

The index of the subglyph. Must be less than ‘glyph->num_subglyphs’.

+
+ +

output

+ + + + + + +
p_index +

The glyph index of the subglyph.

+
p_flags +

The subglyph flags, see FT_SUBGLYPH_FLAG_XXX.

+
p_arg1 +

The subglyph's first argument (if any).

+
p_arg2 +

The subglyph's second argument (if any).

+
p_transform +

The subglyph transformation (if any).

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

The values of ‘*p_arg1’, ‘*p_arg2’, and ‘*p_transform’ must be interpreted depending on the flags returned in ‘*p_flags’. See the TrueType specification for details.

+ +
+
+ +
+

FT_Face_Internal

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_Face_InternalRec_*  FT_Face_Internal;
+
+ +

An opaque handle to an ‘FT_Face_InternalRec’ structure, used to model private data of a given FT_Face object.

+

This structure might change between releases of FreeType 2 and is not generally available to client applications.

+ +
+
+ +
+

FT_Size_Internal

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_Size_InternalRec_*  FT_Size_Internal;
+
+ +

An opaque handle to an ‘FT_Size_InternalRec’ structure, used to model private data of a given FT_Size object.

+ +
+
+ +
+

FT_Slot_Internal

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_Slot_InternalRec_*  FT_Slot_Internal;
+
+ +

An opaque handle to an ‘FT_Slot_InternalRec’ structure, used to model private data of a given FT_GlyphSlot object.

+ +
+
+ +
+

FT_FACE_FLAG_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#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 )
+
+ +

A list of bit flags used in the ‘face_flags’ field of the FT_FaceRec structure. They inform client applications of properties of the corresponding face.

+ +

values

+ + + + + + + + + + + + + + + + +
FT_FACE_FLAG_SCALABLE +

Indicates that the face contains outline glyphs. This doesn't prevent bitmap strikes, i.e., a face can have both this and FT_FACE_FLAG_FIXED_SIZES set.

+
FT_FACE_FLAG_FIXED_SIZES +

Indicates that the face contains bitmap strikes. See also the ‘num_fixed_sizes’ and ‘available_sizes’ fields of FT_FaceRec.

+
FT_FACE_FLAG_FIXED_WIDTH +

Indicates that the face contains fixed-width characters (like Courier, Lucido, MonoType, etc.).

+
FT_FACE_FLAG_SFNT +

Indicates that the face uses the ‘sfnt’ storage scheme. For now, this means TrueType and OpenType.

+
FT_FACE_FLAG_HORIZONTAL +

Indicates that the face contains horizontal glyph metrics. This should be set for all common formats.

+
FT_FACE_FLAG_VERTICAL +

Indicates that the face contains vertical glyph metrics. This is only available in some formats, not all of them.

+
FT_FACE_FLAG_KERNING +

Indicates that the face contains kerning information. If set, the kerning distance can be retrieved through the function FT_Get_Kerning. Otherwise the function always return the vector (0,0). Note that FreeType doesn't handle kerning data from the ‘GPOS’ table (as present in some OpenType fonts).

+
FT_FACE_FLAG_FAST_GLYPHS +

THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.

+
FT_FACE_FLAG_MULTIPLE_MASTERS +

Indicates that the font contains multiple masters and is capable of interpolating between them. See the multiple-masters specific API for details.

+
FT_FACE_FLAG_GLYPH_NAMES +

Indicates that the font contains glyph names that can be retrieved through FT_Get_Glyph_Name. Note that some TrueType fonts contain broken glyph name tables. Use the function FT_Has_PS_Glyph_Names when needed.

+
FT_FACE_FLAG_EXTERNAL_STREAM +

Used internally by FreeType to indicate that a face's stream was provided by the client application and should not be destroyed when FT_Done_Face is called. Don't read or test this flag.

+
FT_FACE_FLAG_HINTER +

Set if the font driver has a hinting machine of its own. For example, with TrueType fonts, it makes sense to use data from the SFNT ‘gasp’ table only if the native TrueType hinting engine (with the bytecode interpreter) is available and active.

+
FT_FACE_FLAG_CID_KEYED +

Set if the font is CID-keyed. In that case, the font is not accessed by glyph indices but by CID values. For subsetted CID-keyed fonts this has the consequence that not all index values are a valid argument to FT_Load_Glyph. Only the CID values for which corresponding glyphs in the subsetted font exist make FT_Load_Glyph return successfully; in all other cases you get an ‘FT_Err_Invalid_Argument’ error.

+

Note that CID-keyed fonts that are in an SFNT wrapper don't have this flag set since the glyphs are accessed in the normal way (using contiguous indices); the ‘CID-ness’ isn't visible to the application.

+
FT_FACE_FLAG_TRICKY +

Set if the font is ‘tricky’, this is, it always needs the font format's native hinting engine to get a reasonable result. A typical example is the Chinese font ‘mingli.ttf’ that uses TrueType bytecode instructions to move and scale all of its subglyphs.

+

It is not possible to auto-hint such fonts using FT_LOAD_FORCE_AUTOHINT; it will also ignore FT_LOAD_NO_HINTING. You have to set both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT to really disable hinting; however, you probably never want this except for demonstration purposes.

+

Currently, there are about a dozen TrueType fonts in the list of tricky fonts; they are hard-coded in file ‘ttobjs.c’.

+
FT_FACE_FLAG_COLOR +

Set if the font has color glyph tables. To access color glyphs use FT_LOAD_COLOR.

+
+ +
+
+ +
+

FT_STYLE_FLAG_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_STYLE_FLAG_ITALIC  ( 1 << 0 )
+#define FT_STYLE_FLAG_BOLD    ( 1 << 1 )
+
+ +

A list of bit flags used to indicate the style of a given face. These are used in the ‘style_flags’ field of FT_FaceRec.

+ +

values

+ + + +
FT_STYLE_FLAG_ITALIC +

Indicates that a given face style is italic or oblique.

+
FT_STYLE_FLAG_BOLD +

Indicates that a given face is bold.

+
+ +

note

+

The style information as provided by FreeType is very basic. More details are beyond the scope and should be done on a higher level (for example, by analyzing various fields of the ‘OS/2’ table in SFNT based fonts).

+ +
+
+ +
+

FT_OPEN_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#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
+
+ +

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.

+ +
+
+ +
+

FT_LOAD_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#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 )
+
+ +

A list of bit field constants used with FT_Load_Glyph to indicate what kind of operations to perform during glyph loading.

+ +

values

+ + + + + + + + + + + + + + + + + + + +
FT_LOAD_DEFAULT +

Corresponding to 0, this value is used as the default glyph load operation. In this case, the following happens:

+

1. FreeType looks for a bitmap for the glyph corresponding to the face's current size. If one is found, the function returns. The bitmap data can be accessed from the glyph slot (see note below).

+

2. If no embedded bitmap is searched or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then ‘hinted’ to the pixel grid in order to optimize it. The outline data can be accessed from the glyph slot (see note below).

+

Note that by default, the glyph loader doesn't render outlines into bitmaps. The following flags are used to modify this default behaviour to more specific and useful cases.

+
FT_LOAD_NO_SCALE +

Don't scale the loaded outline glyph but keep it in font units.

+

This flag implies FT_LOAD_NO_HINTING and FT_LOAD_NO_BITMAP, and unsets FT_LOAD_RENDER.

+

If the font is ‘tricky’ (see FT_FACE_FLAG_TRICKY for more), using FT_LOAD_NO_SCALE usually yields meaningless outlines because the subglyphs must be scaled and positioned with hinting instructions. This can be solved by loading the font without FT_LOAD_NO_SCALE and setting the character size to ‘font->units_per_EM’.

+
FT_LOAD_NO_HINTING +

Disable hinting. This generally generates ‘blurrier’ bitmap glyphs when the glyph are rendered in any of the anti-aliased modes. See also the note below.

+

This flag is implied by FT_LOAD_NO_SCALE.

+
FT_LOAD_RENDER +

Call FT_Render_Glyph after the glyph is loaded. By default, the glyph is rendered in FT_RENDER_MODE_NORMAL mode. This can be overridden by FT_LOAD_TARGET_XXX or FT_LOAD_MONOCHROME.

+

This flag is unset by FT_LOAD_NO_SCALE.

+
FT_LOAD_NO_BITMAP +

Ignore bitmap strikes when loading. Bitmap-only fonts ignore this flag.

+

FT_LOAD_NO_SCALE always sets this flag.

+
FT_LOAD_VERTICAL_LAYOUT +

Load the glyph for vertical text layout. In particular, the ‘advance’ value in the FT_GlyphSlotRec structure is set to the ‘vertAdvance’ value of the ‘metrics’ field.

+

In case FT_HAS_VERTICAL doesn't return true, you shouldn't use this flag currently. Reason is that in this case vertical metrics get synthesized, and those values are not always consistent across various font formats.

+
FT_LOAD_FORCE_AUTOHINT +

Indicates that the auto-hinter is preferred over the font's native hinter. See also the note below.

+
FT_LOAD_PEDANTIC +

Indicates that the font driver should perform pedantic verifications during glyph loading. This is mostly used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also.

+

In particular, errors from the TrueType bytecode engine are not passed to the application if this flag is not set; this might result in partially hinted or distorted glyphs in case a glyph's bytecode is buggy.

+
FT_LOAD_NO_RECURSE +

Indicate that the font driver should not load composite glyphs recursively. Instead, it should set the ‘num_subglyph’ and ‘subglyphs’ values of the glyph slot accordingly, and set ‘glyph->format’ to FT_GLYPH_FORMAT_COMPOSITE. The description of subglyphs can then be accessed with FT_Get_SubGlyph_Info.

+

This flag implies FT_LOAD_NO_SCALE and FT_LOAD_IGNORE_TRANSFORM.

+
FT_LOAD_IGNORE_TRANSFORM +

Indicates that the transform matrix set by FT_Set_Transform should be ignored.

+
FT_LOAD_MONOCHROME +

This flag is used with FT_LOAD_RENDER to indicate that you want to render an outline glyph to a 1-bit monochrome bitmap glyph, with 8 pixels packed into each byte of the bitmap data.

+

Note that this has no effect on the hinting algorithm used. You should rather use FT_LOAD_TARGET_MONO so that the monochrome-optimized hinting algorithm is used.

+
FT_LOAD_LINEAR_DESIGN +

Indicates that the ‘linearHoriAdvance’ and ‘linearVertAdvance’ fields of FT_GlyphSlotRec should be kept in font units. See FT_GlyphSlotRec for details.

+
FT_LOAD_NO_AUTOHINT +

Disable auto-hinter. See also the note below.

+
FT_LOAD_COLOR +

This flag is used to request loading of color embedded-bitmap images. The resulting color bitmaps, if available, will have the FT_PIXEL_MODE_BGRA format. When the flag is not used and color bitmaps are found, they will be converted to 256-level gray bitmaps transparently. Those bitmaps will be in the FT_PIXEL_MODE_GRAY format.

+
FT_LOAD_COMPUTE_METRICS +

This flag sets computing glyph metrics without the use of bundled metrics tables (for example, the ‘hdmx’ table in TrueType fonts). Well-behaving fonts have optimized bundled metrics and these should be used. This flag is mainly used by font validating or font editing applications, which need to ignore, verify, or edit those tables.

+

Currently, this flag is only implemented for TrueType fonts.

+
FT_LOAD_BITMAP_METRICS_ONLY +

This flag is used to 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.

+ +
+
+ +
+

FT_LOAD_TARGET_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#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  )
+
+ +

A list of values that are used to select a specific hinting algorithm to use by the hinter. You should OR one of these values to your ‘load_flags’ when calling FT_Load_Glyph.

+

Note that font's native hinters may ignore the hinting algorithm you have specified (e.g., the TrueType bytecode interpreter). You can set FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used.

+ +

values

+ + + + + + +
FT_LOAD_TARGET_NORMAL +

This corresponds to the default hinting algorithm, optimized for standard gray-level rendering. For monochrome output, use FT_LOAD_TARGET_MONO instead.

+
FT_LOAD_TARGET_LIGHT +

A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by Microsoft's ClearType and Adobe's proprietary font renderer. This preserves inter-glyph spacing in horizontal text. The snapping is done either by the native font driver if the driver itself and the font support it or by the auto-hinter.

+
FT_LOAD_TARGET_MONO +

Strong hinting algorithm that should only be used for monochrome output. The result is probably unpleasant if the glyph is rendered in non-monochrome modes.

+
FT_LOAD_TARGET_LCD +

A variant of FT_LOAD_TARGET_NORMAL optimized for horizontally decimated LCD displays.

+
FT_LOAD_TARGET_LCD_V +

A variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.

+
+ +

note

+

You should use only one of the FT_LOAD_TARGET_XXX values in your ‘load_flags’. They can't be ORed.

+

If FT_LOAD_RENDER is also set, the glyph is rendered in the corresponding mode (i.e., the mode that matches the used algorithm best). An 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 );
+
+ +
+
+ +
+

FT_SUBGLYPH_FLAG_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#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
+
+ +

A list of constants used to describe subglyphs. Please refer to the TrueType specification for the meaning of the various flags.

+ +

values

+ + + + + + + + +
FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS +

+
FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES +

+
FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID +

+
FT_SUBGLYPH_FLAG_SCALE +

+
FT_SUBGLYPH_FLAG_XY_SCALE +

+
FT_SUBGLYPH_FLAG_2X2 +

+
FT_SUBGLYPH_FLAG_USE_MY_METRICS +

+
+ +
+
+ +
+

FT_FSTYPE_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#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
+
+ +

A list of bit flags used in the ‘fsType’ field of the OS/2 table in a TrueType or OpenType font and the ‘FSType’ entry in a PostScript font. These bit flags are returned by FT_Get_FSType_Flags; they inform client applications of embedding and subsetting restrictions associated with a font.

+

See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf for more details.

+ +

values

+ + + + + + + +
FT_FSTYPE_INSTALLABLE_EMBEDDING +

Fonts with no fsType bit set may be embedded and permanently installed on the remote system by an application.

+
FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING +

Fonts that have only this bit set must not be modified, embedded or exchanged in any manner without first obtaining permission of the font software copyright owner.

+
FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING +

If this bit is set, the font may be embedded and temporarily loaded on the remote system. Documents containing Preview & Print fonts must be opened ‘read-only’; no edits can be applied to the document.

+
FT_FSTYPE_EDITABLE_EMBEDDING +

If this bit is set, the font may be embedded but must only be installed temporarily on other systems. In contrast to Preview & Print fonts, documents containing editable fonts may be opened for reading, editing is permitted, and changes may be saved.

+
FT_FSTYPE_NO_SUBSETTING +

If this bit is set, the font may not be subsetted prior to embedding.

+
FT_FSTYPE_BITMAP_EMBEDDING_ONLY +

If this bit is set, only bitmaps contained in the font may be embedded; no outline data may be embedded. If there are no bitmaps available in the font, then the font is unembeddable.

+
+ +

note

+

The flags are ORed together, thus more than a single value can be returned.

+

While the fsType flags can indicate that a font may be embedded, a license with the font vendor may be separately required to use the font in this way.

+ +
+
+ +
+

FT_HAS_FAST_GLYPHS

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_HAS_FAST_GLYPHS( face )  0
+
+ +

Deprecated.

+ +
+
+ +
+

FT_IS_NAMED_INSTANCE

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FT_IS_NAMED_INSTANCE( face ) \
+          ( (face)->face_index & 0x7FFF0000L )
+
+ +

A macro that returns true whenever a face object is a named instance of a GX variation font.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-basic_types.html b/modules/freetype2/docs/reference/ft2-basic_types.html new file mode 100644 index 000000000..373d81182 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-basic_types.html @@ -0,0 +1,866 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Basic Data Types

+

Synopsis

+ + + + + + + + + + + + + + + + +
FT_ByteFT_BoolFT_UnitVector
FT_BytesFT_OffsetFT_F26Dot6
FT_CharFT_PtrDistFT_Data
FT_IntFT_String 
FT_UIntFT_TagFT_MAKE_TAG
FT_Int16FT_Error 
FT_UInt16FT_FixedFT_Generic
FT_Int32FT_PointerFT_Generic_Finalizer
FT_UInt32FT_Pos 
FT_Int64FT_VectorFT_Bitmap
FT_UInt64FT_BBoxFT_Pixel_Mode
FT_ShortFT_MatrixFT_Palette_Mode
FT_UShortFT_FWordFT_Glyph_Format
FT_LongFT_UFWordFT_IMAGE_TAG
FT_ULongFT_F2Dot14
+ + +

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.

+ +
+

FT_Byte

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef unsigned char  FT_Byte;
+
+ +

A simple typedef for the unsigned char type.

+ +
+
+ +
+

FT_Bytes

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef const FT_Byte*  FT_Bytes;
+
+ +

A typedef for constant memory areas.

+ +
+
+ +
+

FT_Char

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed char  FT_Char;
+
+ +

A simple typedef for the signed char type.

+ +
+
+ +
+

FT_Int

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed int  FT_Int;
+
+ +

A typedef for the int type.

+ +
+
+ +
+

FT_UInt

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef unsigned int  FT_UInt;
+
+ +

A typedef for the unsigned int type.

+ +
+
+ +
+

FT_Int16

+

Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).

+
+  typedef signed short  FT_Int16;
+
+ +

A typedef for a 16bit signed integer type.

+ +
+
+ +
+

FT_UInt16

+

Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).

+
+  typedef unsigned short  FT_UInt16;
+
+ +

A typedef for a 16bit unsigned integer type.

+ +
+
+ +
+

FT_Int32

+

Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).

+
+  typedef signed XXX  FT_Int32;
+
+ +

A typedef for a 32bit signed integer type. The size depends on the configuration.

+ +
+
+ +
+

FT_UInt32

+

Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).

+
+  typedef unsigned XXX  FT_UInt32;
+
+
+
+ +
+

FT_Int64

+

Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).

+
+  typedef signed XXX  FT_Int64;
+
+
+
+ +
+

FT_UInt64

+

Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).

+
+  typedef unsigned XXX  FT_UInt64;
+
+
+
+ +
+

FT_Short

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed short  FT_Short;
+
+ +

A typedef for signed short.

+ +
+
+ +
+

FT_UShort

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef unsigned short  FT_UShort;
+
+ +

A typedef for unsigned short.

+ +
+
+ +
+

FT_Long

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed long  FT_Long;
+
+ +

A typedef for signed long.

+ +
+
+ +
+

FT_ULong

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef unsigned long  FT_ULong;
+
+ +

A typedef for unsigned long.

+ +
+
+ +
+

FT_Bool

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef unsigned char  FT_Bool;
+
+ +

A typedef of unsigned char, used for simple booleans. As usual, values 1 and 0 represent true and false, respectively.

+ +
+
+ +
+

FT_Offset

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef size_t  FT_Offset;
+
+ +

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.

+ +
+
+ +
+

FT_PtrDist

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef ft_ptrdiff_t  FT_PtrDist;
+
+ +

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.

+ +
+
+ +
+

FT_String

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef char  FT_String;
+
+ +

A simple typedef for the char type, usually used for strings.

+ +
+
+ +
+

FT_Tag

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef FT_UInt32  FT_Tag;
+
+ +

A typedef for 32-bit tags (as used in the SFNT format).

+ +
+
+ +
+

FT_Error

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef int  FT_Error;
+
+ +

The FreeType error code type. A value of 0 is always interpreted as a successful operation.

+ +
+
+ +
+

FT_Fixed

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed long  FT_Fixed;
+
+ +

This type is used to store 16.16 fixed-point values, like scaling values or matrix coefficients.

+ +
+
+ +
+

FT_Pointer

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef void*  FT_Pointer;
+
+ +

A simple typedef for a typeless pointer.

+ +
+
+ +
+

FT_Pos

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef signed long  FT_Pos;
+
+ +

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.

+ +
+
+ +
+

FT_Vector

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef struct  FT_Vector_
+  {
+    FT_Pos  x;
+    FT_Pos  y;
+
+  } FT_Vector;
+
+ +

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.

+
+ +
+
+ +
+

FT_BBox

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef struct  FT_BBox_
+  {
+    FT_Pos  xMin, yMin;
+    FT_Pos  xMax, yMax;
+
+  } FT_BBox;
+
+ +

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.

+ +
+
+ +
+

FT_Matrix

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct  FT_Matrix_
+  {
+    FT_Fixed  xx, xy;
+    FT_Fixed  yx, yy;
+
+  } FT_Matrix;
+
+ +

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.

+
+ +
+
+ +
+

FT_FWord

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed short  FT_FWord;   /* distance in FUnits */
+
+ +

A signed 16-bit integer used to store a distance in original font units.

+ +
+
+ +
+

FT_UFWord

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef unsigned short  FT_UFWord;  /* unsigned distance */
+
+ +

An unsigned 16-bit integer used to store a distance in original font units.

+ +
+
+ +
+

FT_F2Dot14

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed short  FT_F2Dot14;
+
+ +

A signed 2.14 fixed-point type used for unit vectors.

+ +
+
+ +
+

FT_UnitVector

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct  FT_UnitVector_
+  {
+    FT_F2Dot14  x;
+    FT_F2Dot14  y;
+
+  } FT_UnitVector;
+
+ +

A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14 types.

+ +

fields

+ + + +
x +

Horizontal coordinate.

+
y +

Vertical coordinate.

+
+ +
+
+ +
+

FT_F26Dot6

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef signed long  FT_F26Dot6;
+
+ +

A signed 26.6 fixed-point type used for vectorial pixel coordinates.

+ +
+
+ +
+

FT_Data

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct  FT_Data_
+  {
+    const FT_Byte*  pointer;
+    FT_Int          length;
+
+  } FT_Data;
+
+ +

Read-only binary data represented as a pointer and a length.

+ +

fields

+ + + +
pointer +

The data.

+
length +

The length of the data in bytes.

+
+ +
+
+ +
+

FT_MAKE_TAG

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+#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         )
+
+ +

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.

+ +
+
+ +
+

FT_Generic

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct  FT_Generic_
+  {
+    void*                 data;
+    FT_Generic_Finalizer  finalizer;
+
+  } FT_Generic;
+
+ +

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.

+
+ +
+
+ +
+

FT_Generic_Finalizer

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef void  (*FT_Generic_Finalizer)(void*  object);
+
+ +

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.

+ +
+
+ +
+

FT_Bitmap

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FT_Pixel_Mode

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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
+
+ +

An enumeration type used to describe the format of pixels in a given bitmap. Note that additional formats may be added in the future.

+ +

values

+ + + + + + + + + +
FT_PIXEL_MODE_NONE +

Value 0 is reserved.

+
FT_PIXEL_MODE_MONO +

A monochrome bitmap, using 1 bit per pixel. Note that pixels are stored in most-significant order (MSB), which means that the left-most pixel in a byte has value 128.

+
FT_PIXEL_MODE_GRAY +

An 8-bit bitmap, generally used to represent anti-aliased glyph images. Each pixel is stored in one byte. Note that the number of ‘gray’ levels is stored in the ‘num_grays’ field of the FT_Bitmap structure (it generally is 256).

+
FT_PIXEL_MODE_GRAY2 +

A 2-bit per pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.

+
FT_PIXEL_MODE_GRAY4 +

A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.

+
FT_PIXEL_MODE_LCD +

An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on LCD displays; the bitmap is three times wider than the original glyph image. See also FT_RENDER_MODE_LCD.

+
FT_PIXEL_MODE_LCD_V +

An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on rotated LCD displays; the bitmap is three times taller than the original glyph image. See also FT_RENDER_MODE_LCD_V.

+
FT_PIXEL_MODE_BGRA +

An image with four 8-bit channels per pixel, representing a color image (such as emoticons) with alpha channel. For each pixel, the format is BGRA, which means, the blue channel comes first in memory. The color channels are pre-multiplied and in the sRGB colorspace. For example, full red at half-translucent opacity will be represented as ‘00,00,80,80’, not ‘00,00,FF,80’. See also FT_LOAD_COLOR.

+
+ +
+
+ +
+

FT_Glyph_Format

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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
+
+ +

An enumeration type used to describe the format of a given glyph image. Note that this version of FreeType only supports two image formats, even though future font drivers will be able to register their own format.

+ +

values

+ + + + + + +
FT_GLYPH_FORMAT_NONE +

The value 0 is reserved.

+
FT_GLYPH_FORMAT_COMPOSITE +

The glyph image is a composite of several other images. This format is only used with FT_LOAD_NO_RECURSE, and is used to report compound glyphs (like accented characters).

+
FT_GLYPH_FORMAT_BITMAP +

The glyph image is a bitmap, and can be described as an FT_Bitmap. You generally need to access the ‘bitmap’ field of the FT_GlyphSlotRec structure to read it.

+
FT_GLYPH_FORMAT_OUTLINE +

The glyph image is a vectorial outline made of line segments and Bézier arcs; it can be described as an FT_Outline; you generally want to access the ‘outline’ field of the FT_GlyphSlotRec structure to read it.

+
FT_GLYPH_FORMAT_PLOTTER +

The glyph image is a vectorial path with no inside and outside contours. Some Type 1 fonts, like those in the Hershey family, contain glyphs in this format. These are described as FT_Outline, but FreeType isn't currently capable of rendering them correctly.

+
+ +
+
+ +
+

FT_IMAGE_TAG

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+#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 */
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-bdf_fonts.html b/modules/freetype2/docs/reference/ft2-bdf_fonts.html new file mode 100644 index 000000000..331336641 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-bdf_fonts.html @@ -0,0 +1,280 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

BDF and PCF Files

+

Synopsis

+ + + +
BDF_PropertyTypeBDF_PropertyRecFT_Get_BDF_Property
BDF_PropertyFT_Get_BDF_Charset_ID
+ + +

This section contains the declaration of functions specific to BDF and PCF fonts.

+ +
+

BDF_PropertyType

+

Defined in FT_BDF_H (freetype/ftbdf.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

BDF_Property

+

Defined in FT_BDF_H (freetype/ftbdf.h).

+
+  typedef struct BDF_PropertyRec_*  BDF_Property;
+
+ +

A handle to a BDF_PropertyRec structure to model a given BDF/PCF property.

+ +
+
+ +
+

BDF_PropertyRec

+

Defined in FT_BDF_H (freetype/ftbdf.h).

+
+  typedef struct  BDF_PropertyRec_
+  {
+    BDF_PropertyType  type;
+    union {
+      const char*     atom;
+      FT_Int32        integer;
+      FT_UInt32       cardinal;
+
+    } u;
+
+  } BDF_PropertyRec;
+
+ +

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.

+
+ +
+
+ +
+

FT_Get_BDF_Charset_ID

+

Defined in FT_BDF_H (freetype/ftbdf.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_BDF_Charset_ID( FT_Face       face,
+                         const char*  *acharset_encoding,
+                         const char*  *acharset_registry );
+
+ +

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_Get_BDF_Property

+

Defined in FT_BDF_H (freetype/ftbdf.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_BDF_Property( FT_Face           face,
+                       const char*       prop_name,
+                       BDF_PropertyRec  *aproperty );
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-bitmap_handling.html b/modules/freetype2/docs/reference/ft2-bitmap_handling.html new file mode 100644 index 000000000..9a11f1044 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-bitmap_handling.html @@ -0,0 +1,323 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Bitmap Handling

+

Synopsis

+ + + +
FT_Bitmap_InitFT_Bitmap_EmboldenFT_GlyphSlot_Own_Bitmap
FT_Bitmap_CopyFT_Bitmap_ConvertFT_Bitmap_Done
+ + +

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’).

+ +
+

FT_Bitmap_Init

+

Defined in FT_BITMAP_H (freetype/ftbitmap.h).

+
+  FT_EXPORT( void )
+  FT_Bitmap_Init( FT_Bitmap  *abitmap );
+
+
+  /* deprecated */
+  FT_EXPORT( void )
+  FT_Bitmap_New( FT_Bitmap  *abitmap );
+
+ +

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_Bitmap_Copy

+

Defined in FT_BITMAP_H (freetype/ftbitmap.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Copy( FT_Library        library,
+                  const FT_Bitmap  *source,
+                  FT_Bitmap        *target);
+
+ +

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_Bitmap_Embolden

+

Defined in FT_BITMAP_H (freetype/ftbitmap.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Embolden( FT_Library  library,
+                      FT_Bitmap*  bitmap,
+                      FT_Pos      xStrength,
+                      FT_Pos      yStrength );
+
+ +

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_Bitmap_Convert

+

Defined in FT_BITMAP_H (freetype/ftbitmap.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Convert( FT_Library        library,
+                     const FT_Bitmap  *source,
+                     FT_Bitmap        *target,
+                     FT_Int            alignment );
+
+ +

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_GlyphSlot_Own_Bitmap

+

Defined in FT_BITMAP_H (freetype/ftbitmap.h).

+
+  FT_EXPORT( FT_Error )
+  FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot  slot );
+
+ +

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_Bitmap_Done

+

Defined in FT_BITMAP_H (freetype/ftbitmap.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Done( FT_Library  library,
+                  FT_Bitmap  *bitmap );
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-bzip2.html b/modules/freetype2/docs/reference/ft2-bzip2.html new file mode 100644 index 000000000..1b9fe9d61 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-bzip2.html @@ -0,0 +1,149 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

BZIP2 Streams

+

Synopsis

+ + +
FT_Stream_OpenBzip2
+ + +

This section contains the declaration of Bzip2-specific functions.

+ +
+

FT_Stream_OpenBzip2

+

Defined in FT_BZIP2_H (freetype/ftbzip2.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stream_OpenBzip2( FT_Stream  stream,
+                       FT_Stream  source );
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-cache_subsystem.html b/modules/freetype2/docs/reference/ft2-cache_subsystem.html new file mode 100644 index 000000000..7c5d65715 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-cache_subsystem.html @@ -0,0 +1,1010 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Cache Sub-System

+

Synopsis

+ + + + + + + + + + + + + + + + + + +
FTC_Manager 
FTC_FaceIDFTC_SBit
FTC_Face_RequesterFTC_SBitCache
 FTC_SBitCache_New
FTC_Manager_NewFTC_SBitCache_Lookup
FTC_Manager_Reset 
FTC_Manager_DoneFTC_CMapCache
FTC_Manager_LookupFaceFTC_CMapCache_New
FTC_Manager_LookupSizeFTC_CMapCache_Lookup
FTC_Manager_RemoveFaceID 
 FTC_ScalerRec
FTC_NodeFTC_Scaler
FTC_Node_UnrefFTC_ImageTypeRec
 FTC_ImageType
FTC_ImageCacheFTC_ImageCache_LookupScaler
FTC_ImageCache_NewFTC_SBitRec
FTC_ImageCache_LookupFTC_SBitCache_LookupScaler
+ + +

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.

+ +
+

FTC_Manager

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_ManagerRec_*  FTC_Manager;
+
+ +

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.

+ +
+
+ +
+

FTC_FaceID

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef FT_Pointer  FTC_FaceID;
+
+ +

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.

+ +
+
+ +
+

FTC_Face_Requester

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef FT_Error
+  (*FTC_Face_Requester)( FTC_FaceID  face_id,
+                         FT_Library  library,
+                         FT_Pointer  req_data,
+                         FT_Face*    aface );
+
+ +

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!

+ +
+
+ +
+

FTC_Manager_New

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  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 );
+
+ +

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.

+ +
+
+ +
+

FTC_Manager_Reset

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( void )
+  FTC_Manager_Reset( FTC_Manager  manager );
+
+ +

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.

+
+ +
+
+ +
+

FTC_Manager_Done

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( void )
+  FTC_Manager_Done( FTC_Manager  manager );
+
+ +

Destroy a given manager after emptying it.

+ +

input

+ + +
manager +

A handle to the target cache manager object.

+
+ +
+
+ +
+

FTC_Manager_LookupFace

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_Error )
+  FTC_Manager_LookupFace( FTC_Manager  manager,
+                          FTC_FaceID   face_id,
+                          FT_Face     *aface );
+
+ +

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.

+ +
+
+ +
+

FTC_Manager_LookupSize

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_Error )
+  FTC_Manager_LookupSize( FTC_Manager  manager,
+                          FTC_Scaler   scaler,
+                          FT_Size     *asize );
+
+ +

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.

+ +
+
+ +
+

FTC_Manager_RemoveFaceID

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( void )
+  FTC_Manager_RemoveFaceID( FTC_Manager  manager,
+                            FTC_FaceID   face_id );
+
+ +

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.

+ +
+
+ +
+

FTC_Node

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_NodeRec_*  FTC_Node;
+
+ +

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.

+ +
+
+ +
+

FTC_Node_Unref

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( void )
+  FTC_Node_Unref( FTC_Node     node,
+                  FTC_Manager  manager );
+
+ +

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.

+
+ +
+
+ +
+

FTC_ImageCache

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_ImageCacheRec_*  FTC_ImageCache;
+
+ +

A handle to a glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold.

+ +
+
+ +
+

FTC_ImageCache_New

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_Error )
+  FTC_ImageCache_New( FTC_Manager      manager,
+                      FTC_ImageCache  *acache );
+
+ +

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.

+ +
+
+ +
+

FTC_ImageCache_Lookup

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_Error )
+  FTC_ImageCache_Lookup( FTC_ImageCache  cache,
+                         FTC_ImageType   type,
+                         FT_UInt         gindex,
+                         FT_Glyph       *aglyph,
+                         FTC_Node       *anode );
+
+ +

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!

+ +
+
+ +
+

FTC_SBit

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_SBitRec_*  FTC_SBit;
+
+ +

A handle to a small bitmap descriptor. See the FTC_SBitRec structure for details.

+ +
+
+ +
+

FTC_SBitCache

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_SBitCacheRec_*  FTC_SBitCache;
+
+ +

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.

+ +
+
+ +
+

FTC_SBitCache_New

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_Error )
+  FTC_SBitCache_New( FTC_Manager     manager,
+                     FTC_SBitCache  *acache );
+
+ +

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.

+ +
+
+ +
+

FTC_SBitCache_Lookup

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_Error )
+  FTC_SBitCache_Lookup( FTC_SBitCache    cache,
+                        FTC_ImageType    type,
+                        FT_UInt          gindex,
+                        FTC_SBit        *sbit,
+                        FTC_Node        *anode );
+
+ +

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!

+ +
+
+ +
+

FTC_CMapCache

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_CMapCacheRec_*  FTC_CMapCache;
+
+ +

An opaque handle used to model a charmap cache. This cache is to hold character codes -> glyph indices mappings.

+ +
+
+ +
+

FTC_CMapCache_New

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_Error )
+  FTC_CMapCache_New( FTC_Manager     manager,
+                     FTC_CMapCache  *acache );
+
+ +

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.

+ +
+
+ +
+

FTC_CMapCache_Lookup

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  FT_EXPORT( FT_UInt )
+  FTC_CMapCache_Lookup( FTC_CMapCache  cache,
+                        FTC_FaceID     face_id,
+                        FT_Int         cmap_index,
+                        FT_UInt32      char_code );
+
+ +

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’.

+ +
+
+ +
+

FTC_ScalerRec

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  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;
+
+ +

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.

+ +
+
+ +
+

FTC_Scaler

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_ScalerRec_*  FTC_Scaler;
+
+ +

A handle to an FTC_ScalerRec structure.

+ +
+
+ +
+

FTC_ImageTypeRec

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct  FTC_ImageTypeRec_
+  {
+    FTC_FaceID  face_id;
+    FT_UInt     width;
+    FT_UInt     height;
+    FT_Int32    flags;
+
+  } FTC_ImageTypeRec;
+
+ +

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.

+
+ +
+
+ +
+

FTC_ImageType

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  typedef struct FTC_ImageTypeRec_*  FTC_ImageType;
+
+ +

A handle to an FTC_ImageTypeRec structure.

+ +
+
+ +
+

FTC_ImageCache_LookupScaler

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  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 );
+
+ +

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.

+ +
+
+ +
+

FTC_SBitRec

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FTC_SBitCache_LookupScaler

+

Defined in FT_CACHE_H (freetype/ftcache.h).

+
+  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 );
+
+ +

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!

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-cff_driver.html b/modules/freetype2/docs/reference/ft2-cff_driver.html new file mode 100644 index 000000000..4fc747ed5 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-cff_driver.html @@ -0,0 +1,233 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

The CFF driver

+

Synopsis

+ + + + +
hinting-engine 
no-stem-darkeningFT_CFF_HINTING_XXX
darkening-parameters
+ + +

While FreeType's CFF driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get. The list below gives the available properties together with the necessary macros and structures.

+

The CFF driver's module name is ‘cff’.

+

Hinting and antialiasing principles of the new engine

+

The rasterizer is positioning horizontal features (e.g., ascender height & x-height, or crossbars) on the pixel grid and minimizing the amount of antialiasing applied to them, while placing vertical features (vertical stems) on the pixel grid without hinting, thus representing the stem position and weight accurately. Sometimes the vertical stems may be only partially black. In this context, ‘antialiasing’ means that stems are not positioned exactly on pixel borders, causing a fuzzy appearance.

+

There are two principles behind this approach.

+

1) No hinting in the horizontal direction: Unlike ‘superhinted’ TrueType, which changes glyph widths to accommodate regular inter-glyph spacing, Adobe's approach is ‘faithful to the design’ in representing both the glyph width and the inter-glyph spacing designed for the font. This makes the screen display as close as it can be to the result one would get with infinite resolution, while preserving what is considered the key characteristics of each glyph. Note that the distances between unhinted and grid-fitted positions at small sizes are comparable to kerning values and thus would be noticeable (and distracting) while reading if hinting were applied.

+

One of the reasons to not hint horizontally is antialiasing for LCD screens: The pixel geometry of modern displays supplies three vertical sub-pixels as the eye moves horizontally across each visible pixel. On devices where we can be certain this characteristic is present a rasterizer can take advantage of the sub-pixels to add increments of weight. In Western writing systems this turns out to be the more critical direction anyway; the weights and spacing of vertical stems (see above) are central to Armenian, Cyrillic, Greek, and Latin type designs. Even when the rasterizer uses greyscale antialiasing instead of color (a necessary compromise when one doesn't know the screen characteristics), the unhinted vertical features preserve the design's weight and spacing much better than aliased type would.

+

2) 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.

+ +
+

hinting-engine

+ +

Thanks to Adobe, which contributed a new hinting (and parsing) engine, an application can select between ‘freetype’ and ‘adobe’ if compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration macro isn't defined, ‘hinting-engine’ does nothing.

+

The default engine is ‘freetype’ if CFF_CONFIG_OPTION_OLD_ENGINE is defined, and ‘adobe’ otherwise.

+

The following example code demonstrates how to select Adobe's hinting engine (omitting the error handling).

+
+  FT_Library  library;
+  FT_UInt     hinting_engine = FT_CFF_HINTING_ADOBE;
+
+
+  FT_Init_FreeType( &library );
+
+  FT_Property_Set( library, "cff",
+                            "hinting-engine", &hinting_engine );
+
+ +

note

+

This property can be used with FT_Property_Get also.

+

This property can be set via the ‘FREETYPE_PROPERTIES’ environment variable (using values ‘adobe’ or ‘freetype’).

+ +
+
+ +
+

no-stem-darkening

+ +

By default, the Adobe CFF engine darkens stems at smaller sizes, regardless of hinting, to enhance contrast. This feature requires a rendering system with proper gamma correction. Setting this property, stem darkening gets switched off.

+

Note that stem darkening is never applied if FT_LOAD_NO_SCALE is set.

+
+  FT_Library  library;
+  FT_Bool     no_stem_darkening = TRUE;
+
+
+  FT_Init_FreeType( &library );
+
+  FT_Property_Set( library, "cff",
+                            "no-stem-darkening", &no_stem_darkening );
+
+ +

note

+

This property can be used with FT_Property_Get also.

+

This property can be set via the ‘FREETYPE_PROPERTIES’ environment variable (using values 1 and 0 for ‘on’ and ‘off’, respectively).

+ +
+
+ +
+

darkening-parameters

+ +

By default, the Adobe CFF engine darkens stems as follows (if the ‘no-stem-darkening’ property isn't set):

+
+  stem width <= 0.5px:   darkening amount = 0.4px
+  stem width  = 1px:     darkening amount = 0.275px
+  stem width  = 1.667px: darkening amount = 0.275px
+  stem width >= 2.333px: darkening amount = 0px
+
+

and piecewise linear in-between. At configuration time, these four control points can be set with the macro ‘CFF_CONFIG_OPTION_DARKENING_PARAMETERS’. At runtime, the control points can be changed using the ‘darkening-parameters’ property, as the following example demonstrates.

+
+  FT_Library  library;
+  FT_Int      darken_params[8] = {  500, 300,   // x1, y1
+                                   1000, 200,   // x2, y2
+                                   1500, 100,   // x3, y3
+                                   2000,   0 }; // x4, y4
+
+
+  FT_Init_FreeType( &library );
+
+  FT_Property_Set( library, "cff",
+                            "darkening-parameters", darken_params );
+
+

The x values give the stem width, and the y values the darkening amount. The unit is 1000th of pixels. All coordinate values must be positive; the x values must be monotonically increasing; the y values must be monotonically decreasing and smaller than or equal to 500 (corresponding to half a pixel); the slope of each linear piece must be shallower than -1 (e.g., -.4).

+ +

note

+

This property can be used with FT_Property_Get also.

+

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=\
+  cff:darkening-parameters=500,300,1000,200,1500,100,2000,0
+
+ +
+
+ +
+

FT_CFF_HINTING_XXX

+

Defined in FT_CFF_DRIVER_H (freetype/ftcffdrv.h).

+
+#define FT_CFF_HINTING_FREETYPE  0
+#define FT_CFF_HINTING_ADOBE     1
+
+ +

A list of constants used for the hinting-engine property to select the hinting engine for CFF fonts.

+ +

values

+ + + +
FT_CFF_HINTING_FREETYPE +

Use the old FreeType hinting engine.

+
FT_CFF_HINTING_ADOBE +

Use the hinting engine contributed by Adobe.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-cid_fonts.html b/modules/freetype2/docs/reference/ft2-cid_fonts.html new file mode 100644 index 000000000..282563666 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-cid_fonts.html @@ -0,0 +1,240 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

CID Fonts

+

Synopsis

+ + + + +
FT_Get_CID_Registry_Ordering_Supplement
FT_Get_CID_Is_Internally_CID_Keyed
FT_Get_CID_From_Glyph_Index
+ + +

This section contains the declaration of CID-keyed font specific functions.

+ +
+

FT_Get_CID_Registry_Ordering_Supplement

+

Defined in FT_CID_H (freetype/ftcid.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_CID_Registry_Ordering_Supplement( FT_Face       face,
+                                           const char*  *registry,
+                                           const char*  *ordering,
+                                           FT_Int       *supplement);
+
+ +

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_Get_CID_Is_Internally_CID_Keyed

+

Defined in FT_CID_H (freetype/ftcid.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_CID_Is_Internally_CID_Keyed( FT_Face   face,
+                                      FT_Bool  *is_cid );
+
+ +

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_Get_CID_From_Glyph_Index

+

Defined in FT_CID_H (freetype/ftcid.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_CID_From_Glyph_Index( FT_Face   face,
+                               FT_UInt   glyph_index,
+                               FT_UInt  *cid );
+
+ +

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

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-computations.html b/modules/freetype2/docs/reference/ft2-computations.html new file mode 100644 index 000000000..9f840e862 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-computations.html @@ -0,0 +1,700 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Computations

+

Synopsis

+ + + + + + + + + + +
FT_MulDiv FT_Atan2
FT_MulFixFT_AngleFT_Angle_Diff
FT_DivFixFT_ANGLE_PIFT_Vector_Unit
FT_RoundFixFT_ANGLE_2PIFT_Vector_Rotate
FT_CeilFixFT_ANGLE_PI2FT_Vector_Length
FT_FloorFixFT_ANGLE_PI4FT_Vector_Polarize
FT_Vector_TransformFT_SinFT_Vector_From_Polar
FT_Matrix_MultiplyFT_Cos
FT_Matrix_InvertFT_Tan
+ + +

This section contains various functions used to perform computations on 16.16 fixed-float numbers or 2d vectors.

+ +
+

FT_MulDiv

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Long )
+  FT_MulDiv( FT_Long  a,
+             FT_Long  b,
+             FT_Long  c );
+
+ +

A very simple function used to perform the computation ‘(a*b)/c’ with maximum accuracy (it uses a 64-bit intermediate integer whenever necessary).

+

This function isn't necessarily as fast as some processor specific operations, but is at least completely portable.

+ +

input

+ + + + +
a +

The first multiplier.

+
b +

The second multiplier.

+
c +

The divisor.

+
+ +

return

+

The result of ‘(a*b)/c’. This function never traps when trying to divide by zero; it simply returns ‘MaxInt’ or ‘MinInt’ depending on the signs of ‘a’ and ‘b’.

+ +
+
+ +
+

FT_MulFix

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Long )
+  FT_MulFix( FT_Long  a,
+             FT_Long  b );
+
+ +

A very simple function used to perform the computation ‘(a*b)/0x10000’ with maximum accuracy. Most of the time this is used to multiply a given value by a 16.16 fixed-point factor.

+ +

input

+ + + +
a +

The first multiplier.

+
b +

The second multiplier. Use a 16.16 factor here whenever possible (see note below).

+
+ +

return

+

The result of ‘(a*b)/0x10000’.

+ +

note

+

This function has been optimized for the case where the absolute value of ‘a’ is less than 2048, and ‘b’ is a 16.16 scaling factor. As this happens mainly when scaling from notional units to fractional pixels in FreeType, it resulted in noticeable speed improvements between versions 2.x and 1.x.

+

As a conclusion, always try to place a 16.16 factor as the second argument of this function; this can make a great difference.

+ +
+
+ +
+

FT_DivFix

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Long )
+  FT_DivFix( FT_Long  a,
+             FT_Long  b );
+
+ +

A very simple function used to perform the computation ‘(a*0x10000)/b’ with maximum accuracy. Most of the time, this is used to divide a given value by a 16.16 fixed-point factor.

+ +

input

+ + + +
a +

The numerator.

+
b +

The denominator. Use a 16.16 factor here.

+
+ +

return

+

The result of ‘(a*0x10000)/b’.

+ +
+
+ +
+

FT_RoundFix

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Fixed )
+  FT_RoundFix( FT_Fixed  a );
+
+ +

A very simple function used to round a 16.16 fixed number.

+ +

input

+ + +
a +

The number to be rounded.

+
+ +

return

+

‘a’ rounded to nearest 16.16 fixed integer, halfway cases away from zero.

+ +
+
+ +
+

FT_CeilFix

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Fixed )
+  FT_CeilFix( FT_Fixed  a );
+
+ +

A very simple function used to compute the ceiling function of a 16.16 fixed number.

+ +

input

+ + +
a +

The number for which the ceiling function is to be computed.

+
+ +

return

+

‘a’ rounded towards plus infinity.

+ +
+
+ +
+

FT_FloorFix

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Fixed )
+  FT_FloorFix( FT_Fixed  a );
+
+ +

A very simple function used to compute the floor function of a 16.16 fixed number.

+ +

input

+ + +
a +

The number for which the floor function is to be computed.

+
+ +

return

+

‘a’ rounded towards minus infinity.

+ +
+
+ +
+

FT_Vector_Transform

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( void )
+  FT_Vector_Transform( FT_Vector*        vec,
+                       const FT_Matrix*  matrix );
+
+ +

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_Matrix_Multiply

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( void )
+  FT_Matrix_Multiply( const FT_Matrix*  a,
+                      FT_Matrix*        b );
+
+ +

Perform the matrix operation ‘b = a*b’.

+ +

input

+ + +
a +

A pointer to matrix ‘a’.

+
+ +

inout

+ + +
b +

A pointer to matrix ‘b’.

+
+ +

note

+

The result is undefined if either ‘a’ or ‘b’ is zero.

+ +
+
+ +
+

FT_Matrix_Invert

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Matrix_Invert( FT_Matrix*  matrix );
+
+ +

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_Angle

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  typedef FT_Fixed  FT_Angle;
+
+ +

This type is used to model angle values in FreeType. Note that the angle is a 16.16 fixed-point value expressed in degrees.

+ +
+
+ +
+

FT_ANGLE_PI

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+#define FT_ANGLE_PI  ( 180L << 16 )
+
+ +

The angle pi expressed in FT_Angle units.

+ +
+
+ +
+

FT_ANGLE_2PI

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+#define FT_ANGLE_2PI  ( FT_ANGLE_PI * 2 )
+
+ +

The angle 2*pi expressed in FT_Angle units.

+ +
+
+ +
+

FT_ANGLE_PI2

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+#define FT_ANGLE_PI2  ( FT_ANGLE_PI / 2 )
+
+ +

The angle pi/2 expressed in FT_Angle units.

+ +
+
+ +
+

FT_ANGLE_PI4

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+#define FT_ANGLE_PI4  ( FT_ANGLE_PI / 4 )
+
+ +

The angle pi/4 expressed in FT_Angle units.

+ +
+
+ +
+

FT_Sin

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( FT_Fixed )
+  FT_Sin( FT_Angle  angle );
+
+ +

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_Cos

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( FT_Fixed )
+  FT_Cos( FT_Angle  angle );
+
+ +

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_Tan

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( FT_Fixed )
+  FT_Tan( FT_Angle  angle );
+
+ +

Return the tangent of a given angle in fixed-point format.

+ +

input

+ + +
angle +

The input angle.

+
+ +

return

+

The tangent value.

+ +
+
+ +
+

FT_Atan2

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( FT_Angle )
+  FT_Atan2( FT_Fixed  x,
+            FT_Fixed  y );
+
+ +

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_Angle_Diff

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( FT_Angle )
+  FT_Angle_Diff( FT_Angle  angle1,
+                 FT_Angle  angle2 );
+
+ +

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_Vector_Unit

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( void )
+  FT_Vector_Unit( FT_Vector*  vec,
+                  FT_Angle    angle );
+
+ +

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_Vector_Rotate

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( void )
+  FT_Vector_Rotate( FT_Vector*  vec,
+                    FT_Angle    angle );
+
+ +

Rotate a vector by a given angle.

+ +

inout

+ + +
vec +

The address of target vector.

+
+ +

input

+ + +
angle +

The input angle.

+
+ +
+
+ +
+

FT_Vector_Length

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( FT_Fixed )
+  FT_Vector_Length( FT_Vector*  vec );
+
+ +

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_Vector_Polarize

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( void )
+  FT_Vector_Polarize( FT_Vector*  vec,
+                      FT_Fixed   *length,
+                      FT_Angle   *angle );
+
+ +

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_Vector_From_Polar

+

Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).

+
+  FT_EXPORT( void )
+  FT_Vector_From_Polar( FT_Vector*  vec,
+                        FT_Fixed    length,
+                        FT_Angle    angle );
+
+ +

Compute vector coordinates from a length and angle.

+ +

output

+ + +
vec +

The address of source vector.

+
+ +

input

+ + + +
length +

The vector length.

+
angle +

The vector angle.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-error_code_values.html b/modules/freetype2/docs/reference/ft2-error_code_values.html new file mode 100644 index 000000000..a8d89102a --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-error_code_values.html @@ -0,0 +1,339 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Error Code Values

+

Synopsis

+ + +
FT_Err_XXX
+ + +

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.

+ +
+

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" )
+
+  /* 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" )
+
+
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-error_enumerations.html b/modules/freetype2/docs/reference/ft2-error_enumerations.html new file mode 100644 index 000000000..3798e4957 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-error_enumerations.html @@ -0,0 +1,144 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Error Enumerations

+ +

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&nbsp;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&nbsp;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.

+ + + diff --git a/modules/freetype2/docs/reference/ft2-font_formats.html b/modules/freetype2/docs/reference/ft2-font_formats.html new file mode 100644 index 000000000..c63a9a28d --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-font_formats.html @@ -0,0 +1,147 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Font Formats

+

Synopsis

+ + +
FT_Get_Font_Format
+ + +

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.

+ +
+

FT_Get_Font_Format

+

Defined in FT_FONT_FORMATS_H (freetype/ftfntfmt.h).

+
+  FT_EXPORT( const char* )
+  FT_Get_Font_Format( FT_Face  face );
+
+
+  /* deprecated */
+  FT_EXPORT( const char* )
+  FT_Get_X11_Font_Format( FT_Face  face );
+
+ +

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’.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-gasp_table.html b/modules/freetype2/docs/reference/ft2-gasp_table.html new file mode 100644 index 000000000..5e6afe005 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-gasp_table.html @@ -0,0 +1,187 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Gasp Table

+

Synopsis

+ + +
FT_GASP_XXXFT_Get_Gasp
+ + +

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.

+ +
+

FT_GASP_XXX

+

Defined in FT_GASP_H (freetype/ftgasp.h).

+
+#define FT_GASP_NO_TABLE               -1
+#define FT_GASP_DO_GRIDFIT           0x01
+#define FT_GASP_DO_GRAY              0x02
+#define FT_GASP_SYMMETRIC_SMOOTHING  0x08
+#define FT_GASP_SYMMETRIC_GRIDFIT    0x10
+
+ +

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

+ +
+
+ +
+

FT_Get_Gasp

+

Defined in FT_GASP_H (freetype/ftgasp.h).

+
+  FT_EXPORT( FT_Int )
+  FT_Get_Gasp( FT_Face  face,
+               FT_UInt  ppem );
+
+ +

Read the ‘gasp’ table from a TrueType or OpenType font file and return the entry corresponding to a given character pixel size.

+ +

input

+ + + +
face +

The source face handle.

+
ppem +

The vertical character pixel size.

+
+ +

return

+

Bit flags (see FT_GASP_XXX), or FT_GASP_NO_TABLE if there is no ‘gasp’ table in the face.

+ +

since

+

2.3.0

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-glyph_management.html b/modules/freetype2/docs/reference/ft2-glyph_management.html new file mode 100644 index 000000000..682369fad --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-glyph_management.html @@ -0,0 +1,594 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Glyph Management

+

Synopsis

+ + + + + + +
FT_GlyphFT_OutlineGlyphRecFT_Glyph_Get_CBox
FT_GlyphRecFT_Get_GlyphFT_Glyph_To_Bitmap
FT_BitmapGlyphFT_Glyph_CopyFT_Done_Glyph
FT_BitmapGlyphRecFT_Glyph_Transform
FT_OutlineGlyphFT_Glyph_BBox_Mode
+ + +

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.

+ +
+

FT_Glyph

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  typedef struct FT_GlyphRec_*  FT_Glyph;
+
+ +

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.

+ +
+
+ +
+

FT_GlyphRec

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  typedef struct  FT_GlyphRec_
+  {
+    FT_Library             library;
+    const FT_Glyph_Class*  clazz;
+    FT_Glyph_Format        format;
+    FT_Vector              advance;
+
+  } FT_GlyphRec;
+
+ +

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.

+
+ +
+
+ +
+

FT_BitmapGlyph

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  typedef struct FT_BitmapGlyphRec_*  FT_BitmapGlyph;
+
+ +

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.

+ +
+
+ +
+

FT_BitmapGlyphRec

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  typedef struct  FT_BitmapGlyphRec_
+  {
+    FT_GlyphRec  root;
+    FT_Int       left;
+    FT_Int       top;
+    FT_Bitmap    bitmap;
+
+  } FT_BitmapGlyphRec;
+
+ +

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.

+ +
+
+ +
+

FT_OutlineGlyph

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  typedef struct FT_OutlineGlyphRec_*  FT_OutlineGlyph;
+
+ +

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.

+ +
+
+ +
+

FT_OutlineGlyphRec

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  typedef struct  FT_OutlineGlyphRec_
+  {
+    FT_GlyphRec  root;
+    FT_Outline   outline;
+
+  } FT_OutlineGlyphRec;
+
+ +

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.

+ +
+
+ +
+

FT_Get_Glyph

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Glyph( FT_GlyphSlot  slot,
+                FT_Glyph     *aglyph );
+
+ +

A function used to extract a glyph image from a slot. Note that the created FT_Glyph object must be released with FT_Done_Glyph.

+ +

input

+ + +
slot +

A handle to the source glyph slot.

+
+ +

output

+ + +
aglyph +

A handle to the glyph object.

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Glyph_Copy

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Glyph_Copy( FT_Glyph   source,
+                 FT_Glyph  *target );
+
+ +

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_Glyph_Transform

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Glyph_Transform( FT_Glyph    glyph,
+                      FT_Matrix*  matrix,
+                      FT_Vector*  delta );
+
+ +

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_Glyph_BBox_Mode

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  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
+
+ +

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.

+
+ +
+
+ +
+

FT_Glyph_Get_CBox

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( void )
+  FT_Glyph_Get_CBox( FT_Glyph  glyph,
+                     FT_UInt   bbox_mode,
+                     FT_BBox  *acbox );
+
+ +

Return a glyph's ‘control box’. The control box encloses all the outline's points, including Bézier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bézier outside arcs).

+

Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the ‘ftbbox’ component, which is dedicated to this single task.

+ +

input

+ + + +
glyph +

A handle to the source glyph object.

+
mode +

The mode that indicates how to interpret the returned bounding box values.

+
+ +

output

+ + +
acbox +

The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted.

+
+ +

note

+

Coordinates are relative to the glyph origin, using the y upwards convention.

+

If the glyph has been loaded with FT_LOAD_NO_SCALE, ‘bbox_mode’ must be set to FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6 pixel format. The value FT_GLYPH_BBOX_SUBPIXELS is another name for this constant.

+

If the font is tricky and the glyph has been loaded with FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get reasonable values for the CBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the CBox, which can be eventually converted back to font units.

+

Note that the maximum coordinates are exclusive, which means that one can compute the width and height of the glyph image (be it in integer or 26.6 pixels) as:

+
+  width  = bbox.xMax - bbox.xMin;
+  height = bbox.yMax - bbox.yMin;
+
+

Note also that for 26.6 coordinates, if ‘bbox_mode’ is set to FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, which corresponds to:

+
+  bbox.xMin = FLOOR(bbox.xMin);
+  bbox.yMin = FLOOR(bbox.yMin);
+  bbox.xMax = CEILING(bbox.xMax);
+  bbox.yMax = CEILING(bbox.yMax);
+
+

To get the bbox in pixel coordinates, set ‘bbox_mode’ to FT_GLYPH_BBOX_TRUNCATE.

+

To get the bbox in grid-fitted pixel coordinates, set ‘bbox_mode’ to FT_GLYPH_BBOX_PIXELS.

+ +
+
+ +
+

FT_Glyph_To_Bitmap

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
+                      FT_Render_Mode  render_mode,
+                      FT_Vector*      origin,
+                      FT_Bool         destroy );
+
+ +

Convert a given glyph object to a bitmap glyph object.

+ +

inout

+ + +
the_glyph +

A pointer to a handle to the target glyph.

+
+ +

input

+ + + + +
render_mode +

An enumeration that describes how the data is rendered.

+
origin +

A pointer to a vector used to translate the glyph image before rendering. Can be 0 (if no translation). The origin is expressed in 26.6 pixels.

+
destroy +

A boolean that indicates that the original glyph image should be destroyed by this function. It is never destroyed in case of error.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

This function does nothing if the glyph format isn't scalable.

+

The glyph image is translated with the ‘origin’ vector before rendering.

+

The first parameter is a pointer to an FT_Glyph handle, that will be replaced by this function (with newly allocated data). Typically, you would use (omitting error handling):

+

+
+  FT_Glyph        glyph;
+  FT_BitmapGlyph  glyph_bitmap;
+
+
+  // load glyph
+  error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT );
+
+  // extract glyph image
+  error = FT_Get_Glyph( face->glyph, &glyph );
+
+  // convert to a bitmap (default render mode + destroying old)
+  if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
+  {
+    error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,
+                                0, 1 );
+    if ( error ) // `glyph' unchanged
+      ...
+  }
+
+  // access bitmap content by typecasting
+  glyph_bitmap = (FT_BitmapGlyph)glyph;
+
+  // do funny stuff with it, like blitting/drawing
+  ...
+
+  // discard glyph image (bitmap or not)
+  FT_Done_Glyph( glyph );
+
+

+

Here another example, again without error handling:

+

+
+  FT_Glyph  glyphs[MAX_GLYPHS]
+
+
+  ...
+
+  for ( idx = 0; i < MAX_GLYPHS; i++ )
+    error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||
+            FT_Get_Glyph ( face->glyph, &glyph[idx] );
+
+  ...
+
+  for ( idx = 0; i < MAX_GLYPHS; i++ )
+  {
+    FT_Glyph  bitmap = glyphs[idx];
+
+
+    ...
+
+    // after this call, `bitmap' no longer points into
+    // the `glyphs' array (and the old value isn't destroyed)
+    FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 );
+
+    ...
+
+    FT_Done_Glyph( bitmap );
+  }
+
+  ...
+
+  for ( idx = 0; i < MAX_GLYPHS; i++ )
+    FT_Done_Glyph( glyphs[idx] );
+
+ +
+
+ +
+

FT_Done_Glyph

+

Defined in FT_GLYPH_H (freetype/ftglyph.h).

+
+  FT_EXPORT( void )
+  FT_Done_Glyph( FT_Glyph  glyph );
+
+ +

Destroy a given glyph.

+ +

input

+ + +
glyph +

A handle to the target glyph object.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-glyph_stroker.html b/modules/freetype2/docs/reference/ft2-glyph_stroker.html new file mode 100644 index 000000000..c1348704d --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-glyph_stroker.html @@ -0,0 +1,819 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Glyph Stroker

+

Synopsis

+ + + + + + + + + + + + + + + + +
FT_StrokerFT_Stroker_ParseOutline
 FT_Stroker_Done
FT_Stroker_LineJoin 
FT_Stroker_LineCapFT_Stroker_BeginSubPath
FT_StrokerBorderFT_Stroker_EndSubPath
  
FT_Outline_GetInsideBorderFT_Stroker_LineTo
FT_Outline_GetOutsideBorderFT_Stroker_ConicTo
 FT_Stroker_CubicTo
FT_Glyph_Stroke 
FT_Glyph_StrokeBorderFT_Stroker_GetBorderCounts
 FT_Stroker_ExportBorder
FT_Stroker_NewFT_Stroker_GetCounts
FT_Stroker_SetFT_Stroker_Export
FT_Stroker_Rewind
+ + +

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.

+ +
+

FT_Stroker

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  typedef struct FT_StrokerRec_*  FT_Stroker;
+
+ +

Opaque handle to a path stroker object.

+ +
+
+ +
+

FT_Stroker_LineJoin

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  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;
+
+ +

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 backwards compatibility.

+
+ +
+
+ +
+

FT_Stroker_LineCap

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  typedef enum  FT_Stroker_LineCap_
+  {
+    FT_STROKER_LINECAP_BUTT = 0,
+    FT_STROKER_LINECAP_ROUND,
+    FT_STROKER_LINECAP_SQUARE
+
+  } FT_Stroker_LineCap;
+
+ +

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.

+
+ +
+
+ +
+

FT_StrokerBorder

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  typedef enum  FT_StrokerBorder_
+  {
+    FT_STROKER_BORDER_LEFT = 0,
+    FT_STROKER_BORDER_RIGHT
+
+  } FT_StrokerBorder;
+
+ +

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.

+ +
+
+ +
+

FT_Outline_GetInsideBorder

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_StrokerBorder )
+  FT_Outline_GetInsideBorder( FT_Outline*  outline );
+
+ +

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_Outline_GetOutsideBorder

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_StrokerBorder )
+  FT_Outline_GetOutsideBorder( FT_Outline*  outline );
+
+ +

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_Glyph_Stroke

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Glyph_Stroke( FT_Glyph    *pglyph,
+                   FT_Stroker   stroker,
+                   FT_Bool      destroy );
+
+ +

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_Glyph_StrokeBorder

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Glyph_StrokeBorder( FT_Glyph    *pglyph,
+                         FT_Stroker   stroker,
+                         FT_Bool      inside,
+                         FT_Bool      destroy );
+
+ +

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_Stroker_New

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_New( FT_Library   library,
+                  FT_Stroker  *astroker );
+
+ +

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_Stroker_Set

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  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 );
+
+ +

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_Stroker_Rewind

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( void )
+  FT_Stroker_Rewind( FT_Stroker  stroker );
+
+ +

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_Stroker_ParseOutline

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_ParseOutline( FT_Stroker   stroker,
+                           FT_Outline*  outline,
+                           FT_Bool      opened );
+
+ +

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_Stroker_Done

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( void )
+  FT_Stroker_Done( FT_Stroker  stroker );
+
+ +

Destroy a stroker object.

+ +

input

+ + +
stroker +

A stroker handle. Can be NULL.

+
+ +
+
+ +
+

FT_Stroker_BeginSubPath

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_BeginSubPath( FT_Stroker  stroker,
+                           FT_Vector*  to,
+                           FT_Bool     open );
+
+ +

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_Stroker_EndSubPath

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_EndSubPath( FT_Stroker  stroker );
+
+ +

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_Stroker_LineTo

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_LineTo( FT_Stroker  stroker,
+                     FT_Vector*  to );
+
+ +

‘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_Stroker_ConicTo

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_ConicTo( FT_Stroker  stroker,
+                      FT_Vector*  control,
+                      FT_Vector*  to );
+
+ +

‘Draw’ a single quadratic Bézier in the stroker's current sub-path, from the last position.

+ +

input

+ + + + +
stroker +

The target stroker handle.

+
control +

A pointer to a Bézier 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_Stroker_CubicTo

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_CubicTo( FT_Stroker  stroker,
+                      FT_Vector*  control1,
+                      FT_Vector*  control2,
+                      FT_Vector*  to );
+
+ +

‘Draw’ a single cubic Bézier in the stroker's current sub-path, from the last position.

+ +

input

+ + + + + +
stroker +

The target stroker handle.

+
control1 +

A pointer to the first Bézier control point.

+
control2 +

A pointer to second Bézier 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_Stroker_GetBorderCounts

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_GetBorderCounts( FT_Stroker        stroker,
+                              FT_StrokerBorder  border,
+                              FT_UInt          *anum_points,
+                              FT_UInt          *anum_contours );
+
+ +

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_Stroker_ExportBorder

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( void )
+  FT_Stroker_ExportBorder( FT_Stroker        stroker,
+                           FT_StrokerBorder  border,
+                           FT_Outline*       outline );
+
+ +

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_Stroker_GetCounts

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stroker_GetCounts( FT_Stroker  stroker,
+                        FT_UInt    *anum_points,
+                        FT_UInt    *anum_contours );
+
+ +

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_Stroker_Export

+

Defined in FT_STROKER_H (freetype/ftstroke.h).

+
+  FT_EXPORT( void )
+  FT_Stroker_Export( FT_Stroker   stroker,
+                     FT_Outline*  outline );
+
+ +

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.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-glyph_variants.html b/modules/freetype2/docs/reference/ft2-glyph_variants.html new file mode 100644 index 000000000..b1585526d --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-glyph_variants.html @@ -0,0 +1,292 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Glyph Variants

+

Synopsis

+ + + + +
FT_Face_GetCharVariantIndexFT_Face_GetVariantsOfChar
FT_Face_GetCharVariantIsDefaultFT_Face_GetCharsOfVariant
FT_Face_GetVariantSelectors
+ + +

Many CJK characters have variant forms. They are a sort of grey area somewhere between being totally irrelevant and semantically distinct; for this reason, the Unicode consortium decided to introduce Ideographic Variation Sequences (IVS), consisting of a Unicode base character and one of 240 variant selectors (U+E0100-U+E01EF), instead of further extending the already huge code range for CJK characters.

+

An IVS is registered and unique; for further details please refer to Unicode Technical Standard #37, the Ideographic Variation Database:

+

http://www.unicode.org/reports/tr37/

+

To date (November 2014), the character with the most variants is U+9089, having 32 such IVS.

+

Adobe and MS decided to support IVS with a new cmap subtable (format 14). It is an odd subtable because it is not a mapping of input code points to glyphs, but contains lists of all variants supported by the font.

+

A variant may be either ‘default’ or ‘non-default’. A default variant is the one you will get for that code point if you look it up in the standard Unicode cmap. A non-default variant is a different glyph.

+ +
+

FT_Face_GetCharVariantIndex

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_UInt )
+  FT_Face_GetCharVariantIndex( FT_Face   face,
+                               FT_ULong  charcode,
+                               FT_ULong  variantSelector );
+
+ +

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_Face_GetCharVariantIsDefault

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Int )
+  FT_Face_GetCharVariantIsDefault( FT_Face   face,
+                                   FT_ULong  charcode,
+                                   FT_ULong  variantSelector );
+
+ +

Check whether this variant of this Unicode character is the one to be found in the ‘cmap’.

+ +

input

+ + + + +
face +

A handle to the source face object.

+
charcode +

The character codepoint in Unicode.

+
variantSelector +

The Unicode codepoint of the variation selector.

+
+ +

return

+

1 if found in the standard (Unicode) cmap, 0 if found in the variation selector cmap, or -1 if it is not a variant.

+ +

note

+

This function is only meaningful if the font has a variation selector cmap subtable.

+ +

since

+

2.3.6

+ +
+
+ +
+

FT_Face_GetVariantSelectors

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_UInt32* )
+  FT_Face_GetVariantSelectors( FT_Face  face );
+
+ +

Return a zero-terminated list of Unicode variant selectors found in the font.

+ +

input

+ + +
face +

A handle to the source face object.

+
+ +

return

+

A pointer to an array of selector code points, or NULL if there is no valid variant selector cmap subtable.

+ +

note

+

The last item in the array is 0; the array is owned by the FT_Face object but can be overwritten or released on the next call to a FreeType function.

+ +

since

+

2.3.6

+ +
+
+ +
+

FT_Face_GetVariantsOfChar

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_UInt32* )
+  FT_Face_GetVariantsOfChar( FT_Face   face,
+                             FT_ULong  charcode );
+
+ +

Return a zero-terminated list of Unicode variant selectors found for the specified character code.

+ +

input

+ + + +
face +

A handle to the source face object.

+
charcode +

The character codepoint in Unicode.

+
+ +

return

+

A pointer to an array of variant selector code points that are active for the given character, or NULL if the corresponding list is empty.

+ +

note

+

The last item in the array is 0; the array is owned by the FT_Face object but can be overwritten or released on the next call to a FreeType function.

+ +

since

+

2.3.6

+ +
+
+ +
+

FT_Face_GetCharsOfVariant

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_UInt32* )
+  FT_Face_GetCharsOfVariant( FT_Face   face,
+                             FT_ULong  variantSelector );
+
+ +

Return a zero-terminated list of Unicode character codes found for the specified variant selector.

+ +

input

+ + + +
face +

A handle to the source face object.

+
variantSelector +

The variant selector code point in Unicode.

+
+ +

return

+

A list of all the code points that are specified by this selector (both default and non-default codes are returned) or NULL if there is no valid cmap or the variant selector is invalid.

+ +

note

+

The last item in the array is 0; the array is owned by the FT_Face object but can be overwritten or released on the next call to a FreeType function.

+ +

since

+

2.3.6

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-gx_validation.html b/modules/freetype2/docs/reference/ft2-gx_validation.html new file mode 100644 index 000000000..995877fb4 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-gx_validation.html @@ -0,0 +1,362 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

TrueTypeGX/AAT Validation

+

Synopsis

+ + + + +
FT_TrueTypeGX_ValidateFT_ClassicKern_ValidateFT_VALIDATE_GX_LENGTH
FT_TrueTypeGX_FreeFT_ClassicKern_FreeFT_VALIDATE_GXXXX
  FT_VALIDATE_CKERNXXX
+ + +

This section contains the declaration of functions to validate some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop, lcar).

+ +
+

FT_TrueTypeGX_Validate

+

Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).

+
+  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 );
+
+ +

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_TrueTypeGX_Free

+

Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).

+
+  FT_EXPORT( void )
+  FT_TrueTypeGX_Free( FT_Face   face,
+                      FT_Bytes  table );
+
+ +

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_ClassicKern_Validate

+

Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).

+
+  FT_EXPORT( FT_Error )
+  FT_ClassicKern_Validate( FT_Face    face,
+                           FT_UInt    validation_flags,
+                           FT_Bytes  *ckern_table );
+
+ +

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_ClassicKern_Free

+

Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).

+
+  FT_EXPORT( void )
+  FT_ClassicKern_Free( FT_Face   face,
+                       FT_Bytes  table );
+
+ +

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_VALIDATE_GX_LENGTH

+

Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).

+
+#define FT_VALIDATE_GX_LENGTH     (FT_VALIDATE_GX_LAST_INDEX + 1)
+
+ +

The number of tables checked in this module. Use it as a parameter for the ‘table-length’ argument of function FT_TrueTypeGX_Validate.

+ +
+
+ +
+

FT_VALIDATE_GXXXX

+

Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).

+
+#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 )
+
+ +

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).

+
+ +
+
+ +
+

FT_VALIDATE_CKERNXXX

+

Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).

+
+#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 )
+
+ +

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.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-gzip.html b/modules/freetype2/docs/reference/ft2-gzip.html new file mode 100644 index 000000000..4f2c33361 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-gzip.html @@ -0,0 +1,199 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

GZIP Streams

+

Synopsis

+ + +
FT_Stream_OpenGzipFT_Gzip_Uncompress
+ + +

This section contains the declaration of Gzip-specific functions.

+ +
+

FT_Stream_OpenGzip

+

Defined in FT_GZIP_H (freetype/ftgzip.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stream_OpenGzip( FT_Stream  stream,
+                      FT_Stream  source );
+
+ +

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_Gzip_Uncompress

+

Defined in FT_GZIP_H (freetype/ftgzip.h).

+
+  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 );
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-header_file_macros.html b/modules/freetype2/docs/reference/ft2-header_file_macros.html new file mode 100644 index 000000000..5ff5f9305 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-header_file_macros.html @@ -0,0 +1,739 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Header File Macros

+

Synopsis

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FT_CONFIG_CONFIG_HFT_BZIP2_H
FT_CONFIG_STANDARD_LIBRARY_HFT_WINFONTS_H
FT_CONFIG_OPTIONS_HFT_GLYPH_H
FT_CONFIG_MODULES_HFT_BITMAP_H
FT_FREETYPE_HFT_BBOX_H
FT_ERRORS_HFT_CACHE_H
FT_MODULE_ERRORS_HFT_CACHE_IMAGE_H
FT_SYSTEM_HFT_CACHE_SMALL_BITMAPS_H
FT_IMAGE_HFT_CACHE_CHARMAP_H
FT_TYPES_HFT_MAC_H
FT_LIST_HFT_MULTIPLE_MASTERS_H
FT_OUTLINE_HFT_SFNT_NAMES_H
FT_SIZES_HFT_OPENTYPE_VALIDATE_H
FT_MODULE_HFT_GX_VALIDATE_H
FT_RENDER_HFT_PFR_H
FT_AUTOHINTER_HFT_STROKER_H
FT_CFF_DRIVER_HFT_SYNTHESIS_H
FT_TRUETYPE_DRIVER_HFT_FONT_FORMATS_H
FT_TYPE1_TABLES_HFT_TRIGONOMETRY_H
FT_TRUETYPE_IDS_HFT_LCD_FILTER_H
FT_TRUETYPE_TABLES_HFT_UNPATENTED_HINTING_H
FT_TRUETYPE_TAGS_HFT_INCREMENTAL_H
FT_BDF_HFT_GASP_H
FT_CID_HFT_ADVANCES_H
FT_GZIP_H':'
FT_LZW_H
+ + +

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.

+ +
+

FT_CONFIG_CONFIG_H

+
+#ifndef FT_CONFIG_CONFIG_H
+#define FT_CONFIG_CONFIG_H  <freetype/config/ftconfig.h>
+#endif
+
+ +

A macro used in #include statements to name the file containing FreeType 2 configuration data.

+ +
+
+ +
+

FT_CONFIG_STANDARD_LIBRARY_H

+
+#ifndef FT_CONFIG_STANDARD_LIBRARY_H
+#define FT_CONFIG_STANDARD_LIBRARY_H  <freetype/config/ftstdlib.h>
+#endif
+
+ +

A macro used in #include statements to name the file containing FreeType 2 interface to the standard C library functions.

+ +
+
+ +
+

FT_CONFIG_OPTIONS_H

+
+#ifndef FT_CONFIG_OPTIONS_H
+#define FT_CONFIG_OPTIONS_H  <freetype/config/ftoption.h>
+#endif
+
+ +

A macro used in #include statements to name the file containing FreeType 2 project-specific configuration options.

+ +
+
+ +
+

FT_CONFIG_MODULES_H

+
+#ifndef FT_CONFIG_MODULES_H
+#define FT_CONFIG_MODULES_H  <freetype/config/ftmodule.h>
+#endif
+
+ +

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.

+ +
+
+ +
+

FT_FREETYPE_H

+
+#define FT_FREETYPE_H  <freetype/freetype.h>
+
+ +

A macro used in #include statements to name the file containing the base FreeType 2 API.

+ +
+
+ +
+

FT_ERRORS_H

+
+#define FT_ERRORS_H  <freetype/fterrors.h>
+
+ +

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.

+ +
+
+ +
+

FT_MODULE_ERRORS_H

+
+#define FT_MODULE_ERRORS_H  <freetype/ftmoderr.h>
+
+ +

A macro used in #include statements to name the file containing the list of FreeType 2 module error offsets (and messages).

+ +
+
+ +
+

FT_SYSTEM_H

+
+#define FT_SYSTEM_H  <freetype/ftsystem.h>
+
+ +

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.

+ +
+
+ +
+

FT_IMAGE_H

+
+#define FT_IMAGE_H  <freetype/ftimage.h>
+
+ +

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.

+ +
+
+ +
+

FT_TYPES_H

+
+#define FT_TYPES_H  <freetype/fttypes.h>
+
+ +

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.

+ +
+
+ +
+

FT_LIST_H

+
+#define FT_LIST_H  <freetype/ftlist.h>
+
+ +

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.)

+ +
+
+ +
+

FT_OUTLINE_H

+
+#define FT_OUTLINE_H  <freetype/ftoutln.h>
+
+ +

A macro used in #include statements to name the file containing the scalable outline management API of FreeType 2.

+ +
+
+ +
+

FT_SIZES_H

+
+#define FT_SIZES_H  <freetype/ftsizes.h>
+
+ +

A macro used in #include statements to name the file containing the API which manages multiple FT_Size objects per face.

+ +
+
+ +
+

FT_MODULE_H

+
+#define FT_MODULE_H  <freetype/ftmodapi.h>
+
+ +

A macro used in #include statements to name the file containing the module management API of FreeType 2.

+ +
+
+ +
+

FT_RENDER_H

+
+#define FT_RENDER_H  <freetype/ftrender.h>
+
+ +

A macro used in #include statements to name the file containing the renderer module management API of FreeType 2.

+ +
+
+ +
+

FT_AUTOHINTER_H

+
+#define FT_AUTOHINTER_H  <freetype/ftautoh.h>
+
+ +

A macro used in #include statements to name the file containing structures and macros related to the auto-hinting module.

+ +
+
+ +
+

FT_CFF_DRIVER_H

+
+#define FT_CFF_DRIVER_H  <freetype/ftcffdrv.h>
+
+ +

A macro used in #include statements to name the file containing structures and macros related to the CFF driver module.

+ +
+
+ +
+

FT_TRUETYPE_DRIVER_H

+
+#define FT_TRUETYPE_DRIVER_H  <freetype/ftttdrv.h>
+
+ +

A macro used in #include statements to name the file containing structures and macros related to the TrueType driver module.

+ +
+
+ +
+

FT_TYPE1_TABLES_H

+
+#define FT_TYPE1_TABLES_H  <freetype/t1tables.h>
+
+ +

A macro used in #include statements to name the file containing the types and API specific to the Type 1 format.

+ +
+
+ +
+

FT_TRUETYPE_IDS_H

+
+#define FT_TRUETYPE_IDS_H  <freetype/ttnameid.h>
+
+ +

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.

+ +
+
+ +
+

FT_TRUETYPE_TABLES_H

+
+#define FT_TRUETYPE_TABLES_H  <freetype/tttables.h>
+
+ +

A macro used in #include statements to name the file containing the types and API specific to the TrueType (as well as OpenType) format.

+ +
+
+ +
+

FT_TRUETYPE_TAGS_H

+
+#define FT_TRUETYPE_TAGS_H  <freetype/tttags.h>
+
+ +

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).

+ +
+
+ +
+

FT_BDF_H

+
+#define FT_BDF_H  <freetype/ftbdf.h>
+
+ +

A macro used in #include statements to name the file containing the definitions of an API which accesses BDF-specific strings from a face.

+ +
+
+ +
+

FT_CID_H

+
+#define FT_CID_H  <freetype/ftcid.h>
+
+ +

A macro used in #include statements to name the file containing the definitions of an API which access CID font information from a face.

+ +
+
+ +
+

FT_GZIP_H

+
+#define FT_GZIP_H  <freetype/ftgzip.h>
+
+ +

A macro used in #include statements to name the file containing the definitions of an API which supports gzip-compressed files.

+ +
+
+ +
+

FT_LZW_H

+
+#define FT_LZW_H  <freetype/ftlzw.h>
+
+ +

A macro used in #include statements to name the file containing the definitions of an API which supports LZW-compressed files.

+ +
+
+ +
+

FT_BZIP2_H

+
+#define FT_BZIP2_H  <freetype/ftbzip2.h>
+
+ +

A macro used in #include statements to name the file containing the definitions of an API which supports bzip2-compressed files.

+ +
+
+ +
+

FT_WINFONTS_H

+
+#define FT_WINFONTS_H   <freetype/ftwinfnt.h>
+
+ +

A macro used in #include statements to name the file containing the definitions of an API which supports Windows FNT files.

+ +
+
+ +
+

FT_GLYPH_H

+
+#define FT_GLYPH_H  <freetype/ftglyph.h>
+
+ +

A macro used in #include statements to name the file containing the API of the optional glyph management component.

+ +
+
+ +
+

FT_BITMAP_H

+
+#define FT_BITMAP_H  <freetype/ftbitmap.h>
+
+ +

A macro used in #include statements to name the file containing the API of the optional bitmap conversion component.

+ +
+
+ +
+

FT_BBOX_H

+
+#define FT_BBOX_H  <freetype/ftbbox.h>
+
+ +

A macro used in #include statements to name the file containing the API of the optional exact bounding box computation routines.

+ +
+
+ +
+

FT_CACHE_H

+
+#define FT_CACHE_H  <freetype/ftcache.h>
+
+ +

A macro used in #include statements to name the file containing the API of the optional FreeType 2 cache sub-system.

+ +
+
+ +
+

FT_CACHE_IMAGE_H

+
+#define FT_CACHE_IMAGE_H  FT_CACHE_H
+
+ +

A macro used in #include statements to name the file containing the ‘glyph image’ API of the FreeType 2 cache sub-system.

+

It is used to define a cache for FT_Glyph elements. You can also use the API defined in FT_CACHE_SMALL_BITMAPS_H if you only need to store small glyph bitmaps, as it will use less memory.

+

This macro is deprecated. Simply include FT_CACHE_H to have all glyph image-related cache declarations.

+ +
+
+ +
+

FT_CACHE_SMALL_BITMAPS_H

+
+#define FT_CACHE_SMALL_BITMAPS_H  FT_CACHE_H
+
+ +

A macro used in #include statements to name the file containing the ‘small bitmaps’ API of the FreeType 2 cache sub-system.

+

It is used to define a cache for small glyph bitmaps in a relatively memory-efficient way. You can also use the API defined in FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images, including scalable outlines.

+

This macro is deprecated. Simply include FT_CACHE_H to have all small bitmaps-related cache declarations.

+ +
+
+ +
+

FT_CACHE_CHARMAP_H

+
+#define FT_CACHE_CHARMAP_H  FT_CACHE_H
+
+ +

A macro used in #include statements to name the file containing the ‘charmap’ API of the FreeType 2 cache sub-system.

+

This macro is deprecated. Simply include FT_CACHE_H to have all charmap-based cache declarations.

+ +
+
+ +
+

FT_MAC_H

+
+#define FT_MAC_H  <freetype/ftmac.h>
+
+ +

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).

+ +
+
+ +
+

FT_MULTIPLE_MASTERS_H

+
+#define FT_MULTIPLE_MASTERS_H  <freetype/ftmm.h>
+
+ +

A macro used in #include statements to name the file containing the optional multiple-masters management API of FreeType 2.

+ +
+
+ +
+

FT_SFNT_NAMES_H

+
+#define FT_SFNT_NAMES_H  <freetype/ftsnames.h>
+
+ +

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).

+ +
+
+ +
+

FT_OPENTYPE_VALIDATE_H

+
+#define FT_OPENTYPE_VALIDATE_H  <freetype/ftotval.h>
+
+ +

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).

+ +
+
+ +
+

FT_GX_VALIDATE_H

+
+#define FT_GX_VALIDATE_H  <freetype/ftgxval.h>
+
+ +

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).

+ +
+
+ +
+

FT_PFR_H

+
+#define FT_PFR_H  <freetype/ftpfr.h>
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which accesses PFR-specific data.

+ +
+
+ +
+

FT_STROKER_H

+
+#define FT_STROKER_H  <freetype/ftstroke.h>
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which provides functions to stroke outline paths.

+ +
+
+ +
+

FT_SYNTHESIS_H

+
+#define FT_SYNTHESIS_H  <freetype/ftsynth.h>
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which performs artificial obliquing and emboldening.

+ +
+
+ +
+

FT_FONT_FORMATS_H

+
+#define FT_FONT_FORMATS_H  <freetype/ftfntfmt.h>
+
+  /* deprecated */
+#define FT_XFREE86_H  FT_FONT_FORMATS_H
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which provides functions specific to font formats.

+ +
+
+ +
+

FT_TRIGONOMETRY_H

+
+#define FT_TRIGONOMETRY_H  <freetype/fttrigon.h>
+
+ +

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).

+ +
+
+ +
+

FT_LCD_FILTER_H

+
+#define FT_LCD_FILTER_H  <freetype/ftlcdfil.h>
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which performs color filtering for subpixel rendering.

+ +
+
+ +
+

FT_UNPATENTED_HINTING_H

+
+#define FT_UNPATENTED_HINTING_H  <freetype/ttunpat.h>
+
+ +

Deprecated.

+ +
+
+ +
+

FT_INCREMENTAL_H

+
+#define FT_INCREMENTAL_H  <freetype/ftincrem.h>
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which performs incremental glyph loading.

+ +
+
+ +
+

FT_GASP_H

+
+#define FT_GASP_H  <freetype/ftgasp.h>
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which returns entries from the TrueType GASP table.

+ +
+
+ +
+

FT_ADVANCES_H

+
+#define FT_ADVANCES_H  <freetype/ftadvanc.h>
+
+ +

A macro used in #include statements to name the file containing the FreeType 2 API which returns individual and ranged glyph advances.

+ +
+
+ +
+

':'

+

Defined in FT_CONFIG_OPTIONS_H (freetype/config/ftoption.h).

+
+#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+
+

property-name1

+

'=' <property-value1>

+ +

module-name2

+

':'

+ +

property-name2

+

'=' <property-value2> ...

+

Example:

+

FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ cff:no-stem-darkening=1 \ autofitter:warping=1

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-header_inclusion.html b/modules/freetype2/docs/reference/ft2-header_inclusion.html new file mode 100644 index 000000000..7be8391e0 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-header_inclusion.html @@ -0,0 +1,117 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

FreeType's header inclusion scheme

+ +

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.

+ + + diff --git a/modules/freetype2/docs/reference/ft2-incremental.html b/modules/freetype2/docs/reference/ft2-incremental.html new file mode 100644 index 000000000..8f65b9f87 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-incremental.html @@ -0,0 +1,387 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Incremental Loading

+

Synopsis

+ + + + + + +
FT_IncrementalFT_Incremental_GetGlyphMetricsFunc
FT_Incremental_MetricsRecFT_Incremental_FuncsRec
FT_Incremental_MetricsFT_Incremental_InterfaceRec
FT_Incremental_GetGlyphDataFuncFT_Incremental_Interface
FT_Incremental_FreeGlyphDataFuncFT_PARAM_TAG_INCREMENTAL
+ + +

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.

+ +
+

FT_Incremental

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  typedef struct FT_IncrementalRec_*  FT_Incremental;
+
+ +

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.

+ +
+
+ +
+

FT_Incremental_MetricsRec

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  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;
+
+ +

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.

+ +
+
+ +
+

FT_Incremental_Metrics

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+   typedef struct FT_Incremental_MetricsRec_*  FT_Incremental_Metrics;
+
+ +

A handle to an FT_Incremental_MetricsRec structure.

+ +
+
+ +
+

FT_Incremental_GetGlyphDataFunc

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  typedef FT_Error
+  (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental  incremental,
+                                      FT_UInt         glyph_index,
+                                      FT_Data*        adata );
+
+ +

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.

+ +
+
+ +
+

FT_Incremental_FreeGlyphDataFunc

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  typedef void
+  (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental  incremental,
+                                       FT_Data*        data );
+
+ +

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).

+
+ +
+
+ +
+

FT_Incremental_GetGlyphMetricsFunc

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  typedef FT_Error
+  (*FT_Incremental_GetGlyphMetricsFunc)
+                      ( FT_Incremental              incremental,
+                        FT_UInt                     glyph_index,
+                        FT_Bool                     vertical,
+                        FT_Incremental_MetricsRec  *ametrics );
+
+ +

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.

+
+ +
+
+ +
+

FT_Incremental_FuncsRec

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FT_Incremental_InterfaceRec

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  typedef struct  FT_Incremental_InterfaceRec_
+  {
+    const FT_Incremental_FuncsRec*  funcs;
+    FT_Incremental                  object;
+
+  } FT_Incremental_InterfaceRec;
+
+ +

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     = &parameter; // we use one optional argument
+
+  // open the font
+  error = FT_Open_Face( library, &open_args, index, &face );
+  ...
+
+ +
+
+ +
+

FT_Incremental_Interface

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+  typedef FT_Incremental_InterfaceRec*   FT_Incremental_Interface;
+
+ +

A pointer to an FT_Incremental_InterfaceRec structure.

+ +
+
+ +
+

FT_PARAM_TAG_INCREMENTAL

+

Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).

+
+#define FT_PARAM_TAG_INCREMENTAL  FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
+
+ +

A constant used as the tag of FT_Parameter structures to indicate an incremental loading object to be used by FreeType.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-index.html b/modules/freetype2/docs/reference/ft2-index.html new file mode 100644 index 000000000..b61bddb6f --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-index.html @@ -0,0 +1,385 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
':'FT_LCD_FILTER_NONEFT_SUBGLYPH_FLAG_XY_SCALE
BDF_PROPERTY_TYPE_ATOMFT_LcdFilterFT_SubGlyph
BDF_PROPERTY_TYPE_CARDINALFT_LIST_HFT_SYNTHESIS_H
BDF_PROPERTY_TYPE_INTEGERFT_LibraryFT_SYSTEM_H
BDF_PROPERTY_TYPE_NONEFT_Library_SetLcdFilterFT_Tag
BDF_PropertyFT_Library_SetLcdFilterWeightsFT_Tan
BDF_PropertyRecFT_Library_VersionFT_TRIGONOMETRY_H
BDF_PropertyTypeFT_ListFT_TRUETYPE_DRIVER_H
CID_FaceDictFT_List_AddFT_TRUETYPE_ENGINE_TYPE_NONE
CID_FaceDictRecFT_List_DestructorFT_TRUETYPE_ENGINE_TYPE_PATENTED
CID_FaceInfoFT_List_FinalizeFT_TRUETYPE_ENGINE_TYPE_UNPATENTED
CID_FaceInfoRecFT_List_FindFT_TRUETYPE_IDS_H
CID_FontDictFT_List_InsertFT_TRUETYPE_TABLES_H
CID_InfoFT_List_IterateFT_TRUETYPE_TAGS_H
darkening-parameters (autofit)FT_List_IteratorFT_TrueTypeEngineType
darkening-parameters (cff)FT_List_RemoveFT_TrueTypeGX_Free
default-scriptFT_List_UpFT_TrueTypeGX_Validate
FREETYPE_MAJORFT_ListNodeFT_TYPE1_TABLES_H
FREETYPE_MINORFT_ListNodeRecFT_TYPES_H
FREETYPE_PATCHFT_ListRecFT_UFWord
FREETYPE_XXXFT_LOAD_BITMAP_METRICS_ONLYFT_UInt
FT_Activate_SizeFT_LOAD_COLORFT_UInt16
FT_ADVANCE_FLAG_FAST_ONLYFT_LOAD_COMPUTE_METRICSFT_UInt32
FT_ADVANCES_HFT_LOAD_CROP_BITMAPFT_UInt64
FT_Add_Default_ModulesFT_LOAD_DEFAULTFT_ULong
FT_Add_ModuleFT_LOAD_FORCE_AUTOHINTFT_UNPATENTED_HINTING_H
FT_Alloc_FuncFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTHFT_UnitVector
FT_ANGLE_2PIFT_LOAD_IGNORE_TRANSFORMFT_UShort
FT_ANGLE_PIFT_LOAD_LINEAR_DESIGNFT_VALIDATE_APPLE
FT_ANGLE_PI2FT_LOAD_MONOCHROMEFT_VALIDATE_BASE
FT_ANGLE_PI4FT_LOAD_NO_AUTOHINTFT_VALIDATE_bsln
FT_AngleFT_LOAD_NO_BITMAPFT_VALIDATE_CKERN
FT_Angle_DiffFT_LOAD_NO_HINTINGFT_VALIDATE_CKERNXXX
FT_Atan2FT_LOAD_NO_RECURSEFT_VALIDATE_feat
FT_Attach_FileFT_LOAD_NO_SCALEFT_VALIDATE_GDEF
FT_Attach_StreamFT_LOAD_PEDANTICFT_VALIDATE_GPOS
FT_AUTOHINTER_HFT_LOAD_RENDERFT_VALIDATE_GSUB
FT_AUTOHINTER_SCRIPT_CJKFT_LOAD_TARGET_LCDFT_VALIDATE_GX
FT_AUTOHINTER_SCRIPT_INDICFT_LOAD_TARGET_LCD_VFT_VALIDATE_GX_LENGTH
FT_AUTOHINTER_SCRIPT_LATINFT_LOAD_TARGET_LIGHTFT_VALIDATE_GXXXX
FT_AUTOHINTER_SCRIPT_NONEFT_LOAD_TARGET_MODEFT_VALIDATE_JSTF
FT_AUTOHINTER_SCRIPT_XXXFT_LOAD_TARGET_MONOFT_VALIDATE_just
FT_BBOX_HFT_LOAD_TARGET_NORMALFT_VALIDATE_kern
FT_BBoxFT_LOAD_TARGET_XXXFT_VALIDATE_lcar
FT_BDF_HFT_LOAD_VERTICAL_LAYOUTFT_VALIDATE_MATH
FT_BITMAP_HFT_LOAD_XXXFT_VALIDATE_MS
FT_BitmapFT_Load_CharFT_VALIDATE_mort
FT_Bitmap_ConvertFT_Load_GlyphFT_VALIDATE_morx
FT_Bitmap_CopyFT_Load_Sfnt_TableFT_VALIDATE_OT
FT_Bitmap_DoneFT_LongFT_VALIDATE_OTXXX
FT_Bitmap_EmboldenFT_LZW_HFT_VALIDATE_opbd
FT_Bitmap_InitFT_MAC_HFT_VALIDATE_prop
FT_Bitmap_SizeFT_MAKE_TAGFT_VALIDATE_trak
FT_BitmapGlyphFT_MatrixFT_Var_Axis
FT_BitmapGlyphRecFT_Matrix_InvertFT_Var_Named_Style
FT_BoolFT_Matrix_MultiplyFT_Vector
FT_ByteFT_MemoryFT_Vector_From_Polar
FT_BytesFT_MemoryRecFT_Vector_Length
FT_BZIP2_HFT_MM_AxisFT_Vector_Polarize
FT_CACHE_CHARMAP_HFT_MM_VarFT_Vector_Rotate
FT_CACHE_HFT_MODULE_ERRORS_HFT_Vector_Transform
FT_CACHE_IMAGE_HFT_MODULE_HFT_Vector_Unit
FT_CACHE_SMALL_BITMAPS_HFT_ModuleFT_WINFONTS_H
FT_CeilFixFT_Module_ClassFT_WinFNT_Header
FT_CFF_DRIVER_HFT_Module_ConstructorFT_WinFNT_HeaderRec
FT_CFF_HINTING_ADOBEFT_Module_DestructorFT_WinFNT_ID_CP1250
FT_CFF_HINTING_FREETYPEFT_Module_RequesterFT_WinFNT_ID_CP1251
FT_CFF_HINTING_XXXFT_MULTIPLE_MASTERS_HFT_WinFNT_ID_CP1252
FT_CharFT_MulDivFT_WinFNT_ID_CP1253
FT_CharMapFT_MulFixFT_WinFNT_ID_CP1254
FT_CharMapRecFT_Multi_MasterFT_WinFNT_ID_CP1255
FT_CID_HFT_New_FaceFT_WinFNT_ID_CP1256
FT_ClassicKern_FreeFT_New_Face_From_FONDFT_WinFNT_ID_CP1257
FT_ClassicKern_ValidateFT_New_Face_From_FSRefFT_WinFNT_ID_CP1258
FT_CONFIG_CONFIG_HFT_New_Face_From_FSSpecFT_WinFNT_ID_CP1361
FT_CONFIG_MODULES_HFT_New_LibraryFT_WinFNT_ID_CP874
FT_CONFIG_OPTIONS_HFT_New_Memory_FaceFT_WinFNT_ID_CP932
FT_CONFIG_STANDARD_LIBRARY_HFT_New_SizeFT_WinFNT_ID_CP936
FT_CosFT_OffsetFT_WinFNT_ID_CP949
FT_DataFT_OPEN_DRIVERFT_WinFNT_ID_CP950
FT_DivFixFT_OPEN_MEMORYFT_WinFNT_ID_DEFAULT
FT_Done_FaceFT_OPEN_PARAMSFT_WinFNT_ID_MAC
FT_Done_FreeTypeFT_OPEN_PATHNAMEFT_WinFNT_ID_OEM
FT_Done_GlyphFT_OPEN_STREAMFT_WinFNT_ID_SYMBOL
FT_Done_LibraryFT_OPEN_XXXFT_WinFNT_ID_XXX
FT_Done_SizeFT_OPENTYPE_VALIDATE_HFTC_CMapCache
FT_DriverFT_Open_ArgsFTC_CMapCache_Lookup
FT_ENC_TAGFT_Open_FaceFTC_CMapCache_New
FT_ENCODING_ADOBE_CUSTOMFT_OpenType_FreeFTC_Face_Requester
FT_ENCODING_ADOBE_EXPERTFT_OpenType_ValidateFTC_FaceID
FT_ENCODING_ADOBE_LATIN_1FT_ORIENTATION_FILL_LEFTFTC_ImageCache
FT_ENCODING_ADOBE_STANDARDFT_ORIENTATION_FILL_RIGHTFTC_ImageCache_Lookup
FT_ENCODING_APPLE_ROMANFT_ORIENTATION_NONEFTC_ImageCache_LookupScaler
FT_ENCODING_BIG5FT_ORIENTATION_POSTSCRIPTFTC_ImageCache_New
FT_ENCODING_GB2312FT_ORIENTATION_TRUETYPEFTC_ImageType
FT_ENCODING_JOHABFT_OrientationFTC_ImageTypeRec
FT_ENCODING_MS_BIG5FT_OUTLINE_EVEN_ODD_FILLFTC_Manager
FT_ENCODING_MS_GB2312FT_OUTLINE_HFTC_Manager_Done
FT_ENCODING_MS_JOHABFT_OUTLINE_HIGH_PRECISIONFTC_Manager_LookupFace
FT_ENCODING_MS_SJISFT_OUTLINE_IGNORE_DROPOUTSFTC_Manager_LookupSize
FT_ENCODING_MS_SYMBOLFT_OUTLINE_INCLUDE_STUBSFTC_Manager_New
FT_ENCODING_MS_WANSUNGFT_OUTLINE_NONEFTC_Manager_RemoveFaceID
FT_ENCODING_NONEFT_OUTLINE_OWNERFTC_Manager_Reset
FT_ENCODING_OLD_LATIN_2FT_OUTLINE_REVERSE_FILLFTC_Node
FT_ENCODING_SJISFT_OUTLINE_SINGLE_PASSFTC_Node_Unref
FT_ENCODING_UNICODEFT_OUTLINE_SMART_DROPOUTSFTC_SBit
FT_ENCODING_WANSUNGFT_OUTLINE_XXXFTC_SBitCache
FT_EncodingFT_OutlineFTC_SBitCache_Lookup
FT_ERRORS_HFT_Outline_CheckFTC_SBitCache_LookupScaler
FT_Err_XXXFT_Outline_ConicToFuncFTC_SBitCache_New
FT_ErrorFT_Outline_CopyFTC_SBitRec
FT_F26Dot6FT_Outline_CubicToFuncFTC_Scaler
FT_F2Dot14FT_Outline_DecomposeFTC_ScalerRec
FT_FACE_FLAG_CID_KEYEDFT_Outline_Donefallback-script
FT_FACE_FLAG_COLORFT_Outline_Emboldenglyph-to-script-map
FT_FACE_FLAG_EXTERNAL_STREAMFT_Outline_EmboldenXYhinting-engine (cff)
FT_FACE_FLAG_FAST_GLYPHSFT_Outline_Funcsincrease-x-height
FT_FACE_FLAG_FIXED_SIZESFT_Outline_Get_BBoxinterpreter-version
FT_FACE_FLAG_FIXED_WIDTHFT_Outline_Get_Bitmapno-stem-darkening (autofit)
FT_FACE_FLAG_GLYPH_NAMESFT_Outline_Get_CBoxno-stem-darkening (cff)
FT_FACE_FLAG_HINTERFT_Outline_Get_OrientationPS_DICT_BLUE_FUZZ
FT_FACE_FLAG_HORIZONTALFT_Outline_GetInsideBorderPS_DICT_BLUE_SCALE
FT_FACE_FLAG_KERNINGFT_Outline_GetOutsideBorderPS_DICT_BLUE_SHIFT
FT_FACE_FLAG_MULTIPLE_MASTERSFT_Outline_LineToFuncPS_DICT_BLUE_VALUE
FT_FACE_FLAG_SCALABLEFT_Outline_MoveToFuncPS_DICT_CHAR_STRING
FT_FACE_FLAG_SFNTFT_Outline_NewPS_DICT_CHAR_STRING_KEY
FT_FACE_FLAG_TRICKYFT_Outline_RenderPS_DICT_ENCODING_ENTRY
FT_FACE_FLAG_VERTICALFT_Outline_ReversePS_DICT_ENCODING_TYPE
FT_FACE_FLAG_XXXFT_Outline_TransformPS_DICT_FAMILY_BLUE
FT_FaceFT_Outline_TranslatePS_DICT_FAMILY_NAME
FT_Face_CheckTrueTypePatentsFT_OutlineGlyphPS_DICT_FAMILY_OTHER_BLUE
FT_Face_GetCharsOfVariantFT_OutlineGlyphRecPS_DICT_FONT_BBOX
FT_Face_GetCharVariantIndexFT_PARAM_TAG_IGNORE_PREFERRED_FAMILYPS_DICT_FONT_MATRIX
FT_Face_GetCharVariantIsDefaultFT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILYPS_DICT_FONT_NAME
FT_Face_GetVariantSelectorsFT_PARAM_TAG_INCREMENTALPS_DICT_FONT_TYPE
FT_Face_GetVariantsOfCharFT_PARAM_TAG_UNPATENTED_HINTINGPS_DICT_FORCE_BOLD
FT_Face_InternalFT_ParameterPS_DICT_FS_TYPE
FT_Face_SetUnpatentedHintingFT_PFR_HPS_DICT_FULL_NAME
FT_FaceRecFT_PIXEL_MODE_BGRAPS_DICT_IS_FIXED_PITCH
FT_FixedFT_PIXEL_MODE_GRAYPS_DICT_ITALIC_ANGLE
FT_FloorFixFT_PIXEL_MODE_GRAY2PS_DICT_LANGUAGE_GROUP
FT_FONT_FORMATS_HFT_PIXEL_MODE_GRAY4PS_DICT_LEN_IV
FT_FREETYPE_HFT_PIXEL_MODE_LCDPS_DICT_MIN_FEATURE
FT_Free_FuncFT_PIXEL_MODE_LCD_VPS_DICT_NOTICE
FT_FSTYPE_BITMAP_EMBEDDING_ONLYFT_PIXEL_MODE_MONOPS_DICT_NUM_BLUE_VALUES
FT_FSTYPE_EDITABLE_EMBEDDINGFT_PIXEL_MODE_NONEPS_DICT_NUM_CHAR_STRINGS
FT_FSTYPE_INSTALLABLE_EMBEDDINGFT_Pixel_ModePS_DICT_NUM_FAMILY_BLUES
FT_FSTYPE_NO_SUBSETTINGFT_PointerPS_DICT_NUM_FAMILY_OTHER_BLUES
FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDINGFT_PosPS_DICT_NUM_OTHER_BLUES
FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDINGFT_Prop_GlyphToScriptMapPS_DICT_NUM_STEM_SNAP_H
FT_FSTYPE_XXXFT_Prop_IncreaseXHeightPS_DICT_NUM_STEM_SNAP_V
FT_FWordFT_Property_GetPS_DICT_NUM_SUBRS
FT_GASP_DO_GRAYFT_Property_SetPS_DICT_OTHER_BLUE
FT_GASP_DO_GRIDFITFT_PtrDistPS_DICT_PAINT_TYPE
FT_GASP_HFT_RASTER_FLAG_AAPS_DICT_PASSWORD
FT_GASP_NO_TABLEFT_RASTER_FLAG_CLIPPS_DICT_RND_STEM_UP
FT_GASP_SYMMETRIC_GRIDFITFT_RASTER_FLAG_DEFAULTPS_DICT_STD_HW
FT_GASP_SYMMETRIC_SMOOTHINGFT_RASTER_FLAG_DIRECTPS_DICT_STD_VW
FT_GASP_XXXFT_RASTER_FLAG_XXXPS_DICT_STEM_SNAP_H
FT_GenericFT_RasterPS_DICT_STEM_SNAP_V
FT_Generic_FinalizerFT_Raster_BitSet_FuncPS_DICT_SUBR
FT_Get_AdvanceFT_Raster_BitTest_FuncPS_DICT_UNDERLINE_POSITION
FT_Get_AdvancesFT_Raster_DoneFuncPS_DICT_UNDERLINE_THICKNESS
FT_Get_BDF_Charset_IDFT_Raster_FuncsPS_DICT_UNIQUE_ID
FT_Get_BDF_PropertyFT_Raster_NewFuncPS_DICT_VERSION
FT_Get_Char_IndexFT_Raster_ParamsPS_DICT_WEIGHT
FT_Get_Charmap_IndexFT_Raster_RenderFuncPS_Dict_Keys
FT_Get_CID_From_Glyph_IndexFT_Raster_ResetFuncPS_FontInfo
FT_Get_CID_Is_Internally_CID_KeyedFT_Raster_SetModeFuncPS_FontInfoRec
FT_Get_CID_Registry_Ordering_SupplementFT_RENDER_HPS_Private
FT_Get_CMap_FormatFT_RENDER_MODE_LCDPS_PrivateRec
FT_Get_CMap_Language_IDFT_RENDER_MODE_LCD_VT1_BLEND_BLUE_SCALE
FT_Get_First_CharFT_RENDER_MODE_LIGHTT1_BLEND_BLUE_SHIFT
FT_Get_Font_FormatFT_RENDER_MODE_MONOT1_BLEND_BLUE_VALUES
FT_Get_FSType_FlagsFT_RENDER_MODE_NORMALT1_BLEND_FAMILY_BLUES
FT_Get_GaspFT_Realloc_FuncT1_BLEND_FAMILY_OTHER_BLUES
FT_Get_GlyphFT_Reference_FaceT1_BLEND_FORCE_BOLD
FT_Get_Glyph_NameFT_Reference_LibraryT1_BLEND_ITALIC_ANGLE
FT_Get_KerningFT_Remove_ModuleT1_BLEND_OTHER_BLUES
FT_Get_MM_Blend_CoordinatesFT_Render_GlyphT1_BLEND_STANDARD_HEIGHT
FT_Get_MM_VarFT_Render_ModeT1_BLEND_STANDARD_WIDTH
FT_Get_ModuleFT_RendererT1_BLEND_STEM_SNAP_HEIGHTS
FT_Get_Multi_MasterFT_Renderer_ClassT1_BLEND_STEM_SNAP_WIDTHS
FT_Get_Name_IndexFT_Request_SizeT1_BLEND_UNDERLINE_POSITION
FT_Get_Next_CharFT_RoundFixT1_BLEND_UNDERLINE_THICKNESS
FT_Get_PFR_AdvanceFT_Select_CharmapT1_Blend_Flags
FT_Get_PFR_KerningFT_Select_SizeT1_ENCODING_TYPE_ARRAY
FT_Get_PFR_MetricsFT_Set_Char_SizeT1_ENCODING_TYPE_EXPERT
FT_Get_Postscript_NameFT_Set_CharmapT1_ENCODING_TYPE_ISOLATIN1
FT_Get_PS_Font_InfoFT_Set_Debug_HookT1_ENCODING_TYPE_NONE
FT_Get_PS_Font_PrivateFT_Set_MM_Blend_CoordinatesT1_ENCODING_TYPE_STANDARD
FT_Get_PS_Font_ValueFT_Set_MM_Design_CoordinatesT1_EncodingType
FT_Get_RendererFT_Set_Pixel_SizesT1_FontInfo
FT_Get_Sfnt_NameFT_Set_RendererT1_Private
FT_Get_Sfnt_Name_CountFT_Set_TransformTT_ADOBE_ID_CUSTOM
FT_Get_Sfnt_TableFT_Set_Var_Blend_CoordinatesTT_ADOBE_ID_EXPERT
FT_Get_SubGlyph_InfoFT_Set_Var_Design_CoordinatesTT_ADOBE_ID_LATIN_1
FT_Get_Track_KerningFT_SFNT_HEADTT_ADOBE_ID_STANDARD
FT_Get_TrueType_Engine_TypeFT_SFNT_HHEATT_ADOBE_ID_XXX
FT_Get_Var_Blend_CoordinatesFT_SFNT_MAXPTT_APPLE_ID_DEFAULT
FT_Get_Var_Design_CoordinatesFT_SFNT_NAMES_HTT_APPLE_ID_ISO_10646
FT_Get_WinFNT_HeaderFT_SFNT_OS2TT_APPLE_ID_UNICODE_1_1
FT_GetFile_From_Mac_ATS_NameFT_SFNT_PCLTTT_APPLE_ID_UNICODE_2_0
FT_GetFile_From_Mac_NameFT_SFNT_POSTTT_APPLE_ID_UNICODE_32
FT_GetFilePath_From_Mac_ATS_NameFT_SFNT_VHEATT_APPLE_ID_VARIANT_SELECTOR
FT_GLYPH_BBOX_GRIDFITFT_Sfnt_Table_InfoTT_APPLE_ID_XXX
FT_GLYPH_BBOX_PIXELSFT_Sfnt_TagTT_Header
FT_GLYPH_BBOX_SUBPIXELSFT_SfntNameTT_HoriHeader
FT_GLYPH_BBOX_TRUNCATEFT_ShortTT_INTERPRETER_VERSION_35
FT_GLYPH_BBOX_UNSCALEDFT_SIZE_REQUEST_TYPE_BBOXTT_INTERPRETER_VERSION_38
FT_GLYPH_FORMAT_BITMAPFT_SIZE_REQUEST_TYPE_CELLTT_INTERPRETER_VERSION_40
FT_GLYPH_FORMAT_COMPOSITEFT_SIZE_REQUEST_TYPE_NOMINALTT_INTERPRETER_VERSION_XXX
FT_GLYPH_FORMAT_NONEFT_SIZE_REQUEST_TYPE_REAL_DIMTT_ISO_ID_10646
FT_GLYPH_FORMAT_OUTLINEFT_SIZE_REQUEST_TYPE_SCALESTT_ISO_ID_7BIT_ASCII
FT_GLYPH_FORMAT_PLOTTERFT_SIZES_HTT_ISO_ID_8859_1
FT_GLYPH_HFT_SinTT_ISO_ID_XXX
FT_GlyphFT_SizeTT_MAC_ID_ARABIC
FT_Glyph_BBox_ModeFT_Size_InternalTT_MAC_ID_ARMENIAN
FT_Glyph_CopyFT_Size_MetricsTT_MAC_ID_BENGALI
FT_Glyph_FormatFT_Size_RequestTT_MAC_ID_BURMESE
FT_Glyph_Get_CBoxFT_Size_Request_TypeTT_MAC_ID_DEVANAGARI
FT_Glyph_MetricsFT_Size_RequestRecTT_MAC_ID_GEEZ
FT_Glyph_StrokeFT_SizeRecTT_MAC_ID_GEORGIAN
FT_Glyph_StrokeBorderFT_Slot_InternalTT_MAC_ID_GREEK
FT_Glyph_To_BitmapFT_SpanTT_MAC_ID_GUJARATI
FT_Glyph_TransformFT_SpanFuncTT_MAC_ID_GURMUKHI
FT_GlyphRecFT_STROKER_BORDER_LEFTTT_MAC_ID_HEBREW
FT_GlyphSlotFT_STROKER_BORDER_RIGHTTT_MAC_ID_JAPANESE
FT_GlyphSlot_Own_BitmapFT_STROKER_HTT_MAC_ID_KANNADA
FT_GlyphSlotRecFT_STROKER_LINECAP_BUTTTT_MAC_ID_KHMER
FT_GX_VALIDATE_HFT_STROKER_LINECAP_ROUNDTT_MAC_ID_KOREAN
FT_GZIP_HFT_STROKER_LINECAP_SQUARETT_MAC_ID_LAOTIAN
FT_Gzip_UncompressFT_STROKER_LINEJOIN_BEVELTT_MAC_ID_MALAYALAM
FT_HAS_COLORFT_STROKER_LINEJOIN_MITERTT_MAC_ID_MALDIVIAN
FT_HAS_FAST_GLYPHSFT_STROKER_LINEJOIN_MITER_FIXEDTT_MAC_ID_MONGOLIAN
FT_HAS_FIXED_SIZESFT_STROKER_LINEJOIN_MITER_VARIABLETT_MAC_ID_ORIYA
FT_HAS_GLYPH_NAMESFT_STROKER_LINEJOIN_ROUNDTT_MAC_ID_ROMAN
FT_HAS_HORIZONTALFT_STYLE_FLAG_BOLDTT_MAC_ID_RSYMBOL
FT_HAS_KERNINGFT_STYLE_FLAG_ITALICTT_MAC_ID_RUSSIAN
FT_HAS_MULTIPLE_MASTERSFT_STYLE_FLAG_XXXTT_MAC_ID_SIMPLIFIED_CHINESE
FT_HAS_VERTICALFT_StreamTT_MAC_ID_SINDHI
FT_Has_PS_Glyph_NamesFT_Stream_CloseFuncTT_MAC_ID_SINHALESE
FT_IMAGE_HFT_Stream_IoFuncTT_MAC_ID_SLAVIC
FT_IMAGE_TAGFT_Stream_OpenBzip2TT_MAC_ID_TAMIL
FT_INCREMENTAL_HFT_Stream_OpenGzipTT_MAC_ID_TELUGU
FT_IncrementalFT_Stream_OpenLZWTT_MAC_ID_THAI
FT_Incremental_FreeGlyphDataFuncFT_StreamDescTT_MAC_ID_TIBETAN
FT_Incremental_FuncsRecFT_StreamRecTT_MAC_ID_TRADITIONAL_CHINESE
FT_Incremental_GetGlyphDataFuncFT_StringTT_MAC_ID_UNINTERP
FT_Incremental_GetGlyphMetricsFuncFT_StrokerTT_MAC_ID_VIETNAMESE
FT_Incremental_InterfaceFT_Stroker_BeginSubPathTT_MAC_ID_XXX
FT_Incremental_InterfaceRecFT_Stroker_ConicToTT_MaxProfile
FT_Incremental_MetricsFT_Stroker_CubicToTT_MS_ID_BIG_5
FT_Incremental_MetricsRecFT_Stroker_DoneTT_MS_ID_GB2312
FT_Init_FreeTypeFT_Stroker_EndSubPathTT_MS_ID_JOHAB
FT_IntFT_Stroker_ExportTT_MS_ID_SJIS
FT_Int16FT_Stroker_ExportBorderTT_MS_ID_SYMBOL_CS
FT_Int32FT_Stroker_GetBorderCountsTT_MS_ID_UCS_4
FT_Int64FT_Stroker_GetCountsTT_MS_ID_UNICODE_CS
FT_IS_CID_KEYEDFT_Stroker_LineCapTT_MS_ID_WANSUNG
FT_IS_FIXED_WIDTHFT_Stroker_LineJoinTT_MS_ID_XXX
FT_IS_NAMED_INSTANCEFT_Stroker_LineToTT_OS2
FT_IS_SCALABLEFT_Stroker_NewTT_PCLT
FT_IS_SFNTFT_Stroker_ParseOutlineTT_PLATFORM_ADOBE
FT_IS_TRICKYFT_Stroker_RewindTT_PLATFORM_APPLE_UNICODE
FT_KERNING_DEFAULTFT_Stroker_SetTT_PLATFORM_CUSTOM
FT_KERNING_UNFITTEDFT_StrokerBorderTT_PLATFORM_ISO
FT_KERNING_UNSCALEDFT_SUBGLYPH_FLAG_2X2TT_PLATFORM_MACINTOSH
FT_Kerning_ModeFT_SUBGLYPH_FLAG_ARGS_ARE_WORDSTT_PLATFORM_MICROSOFT
FT_LCD_FILTER_DEFAULTFT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUESTT_PLATFORM_XXX
FT_LCD_FILTER_HFT_SUBGLYPH_FLAG_ROUND_XY_TO_GRIDTT_Postscript
FT_LCD_FILTER_LEGACYFT_SUBGLYPH_FLAG_SCALETT_VertHeader
FT_LCD_FILTER_LEGACY1FT_SUBGLYPH_FLAG_USE_MY_METRICSwarping
FT_LCD_FILTER_LIGHTFT_SUBGLYPH_FLAG_XXX
+
+ + +
generated on Fri Dec 30 21:17:18 2016
+ diff --git a/modules/freetype2/docs/reference/ft2-lcd_filtering.html b/modules/freetype2/docs/reference/ft2-lcd_filtering.html new file mode 100644 index 000000000..27d74da8a --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-lcd_filtering.html @@ -0,0 +1,247 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

LCD Filtering

+

Synopsis

+ + + +
FT_LcdFilterFT_Library_SetLcdFilterWeights
FT_Library_SetLcdFilter
+ + +

Subpixel rendering exploits the color-striped structure of LCD pixels, increasing the available resolution in the direction of the stripe (usually horizontal RGB) by a factor of 3. Since these subpixels are color pixels, using them unfiltered creates severe color fringes. Use the FT_Library_SetLcdFilter API to specify a low-pass filter, which is then applied to subpixel-rendered bitmaps generated through FT_Render_Glyph. The filter sacrifices some of the higher resolution to reduce color fringes, making the glyph image slightly blurrier. Positional improvements will remain.

+

Note that no filter is active by default, and that this function is not implemented in default builds of the library. You need to #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your ‘ftoption.h’ file in order to activate it and explicitly call FT_Library_SetLcdFilter to enable it.

+

A filter should have two properties:

+

1) It should be normalized, meaning the sum of the 5 components should be 256 (0x100). It is possible to go above or under this target sum, however: going under means tossing out contrast, going over means invoking clamping and thereby non-linearities that increase contrast somewhat at the expense of greater distortion and color-fringing. Contrast is better enhanced through stem darkening.

+

2) It should be color-balanced, meaning a filter ‘{ a, b, c, b, a }’ where a + b = c. It distributes the computed coverage for one subpixel to all subpixels equally, sacrificing some won resolution but drastically reducing color-fringing. Positioning improvements remain! Note that color-fringing can only really be minimized when using a color-balanced filter and alpha-blending the glyph onto a surface in linear space; see FT_Render_Glyph.

+

Regarding the form, a filter can be a ‘boxy’ filter or a ‘beveled’ filter. Boxy filters are sharper but are less forgiving of non-ideal gamma curves of a screen (viewing angles!), beveled filters are fuzzier but more tolerant.

+

Examples:

+

- [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor normalized.

+

- [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not normalized.

+

- [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not balanced.

+

- [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not balanced.

+

- [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost balanced.

+

- [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost balanced.

+

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.

+ +
+

FT_LcdFilter

+

Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).

+
+  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;
+
+ +

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)

+ +
+
+ +
+

FT_Library_SetLcdFilter

+

Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Library_SetLcdFilter( FT_Library    library,
+                           FT_LcdFilter  filter );
+
+ +

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_Library_SetLcdFilterWeights

+

Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Library_SetLcdFilterWeights( FT_Library      library,
+                                  unsigned char  *weights );
+
+ +

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.

+ +

since

+

2.4.0

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-list_processing.html b/modules/freetype2/docs/reference/ft2-list_processing.html new file mode 100644 index 000000000..d590ae954 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-list_processing.html @@ -0,0 +1,446 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

List Processing

+

Synopsis

+ + + + + + +
FT_ListFT_List_AddFT_List_Iterate
FT_ListNodeFT_List_InsertFT_List_Iterator
FT_ListRecFT_List_FindFT_List_Finalize
FT_ListNodeRecFT_List_RemoveFT_List_Destructor
 FT_List_Up
+ + +

This section contains various definitions related to list processing using doubly-linked nodes.

+ +
+

FT_List

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct FT_ListRec_*  FT_List;
+
+ +

A handle to a list record (see FT_ListRec).

+ +
+
+ +
+

FT_ListNode

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct FT_ListNodeRec_*  FT_ListNode;
+
+ +

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.

+ +
+
+ +
+

FT_ListRec

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct  FT_ListRec_
+  {
+    FT_ListNode  head;
+    FT_ListNode  tail;
+
+  } FT_ListRec;
+
+ +

A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType.

+ +

fields

+ + + +
+

The head (first element) of doubly-linked list.

+
tail +

The tail (last element) of doubly-linked list.

+
+ +
+
+ +
+

FT_ListNodeRec

+

Defined in FT_TYPES_H (freetype/fttypes.h).

+
+  typedef struct  FT_ListNodeRec_
+  {
+    FT_ListNode  prev;
+    FT_ListNode  next;
+    void*        data;
+
+  } FT_ListNodeRec;
+
+ +

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.

+
+ +
+
+ +
+

FT_List_Add

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  FT_EXPORT( void )
+  FT_List_Add( FT_List      list,
+               FT_ListNode  node );
+
+ +

Append an element to the end of a list.

+ +

inout

+ + + +
list +

A pointer to the parent list.

+
node +

The node to append.

+
+ +
+
+ +
+

FT_List_Insert

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  FT_EXPORT( void )
+  FT_List_Insert( FT_List      list,
+                  FT_ListNode  node );
+
+ +

Insert an element at the head of a list.

+ +

inout

+ + + +
list +

A pointer to parent list.

+
node +

The node to insert.

+
+ +
+
+ +
+

FT_List_Find

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  FT_EXPORT( FT_ListNode )
+  FT_List_Find( FT_List  list,
+                void*    data );
+
+ +

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_List_Remove

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  FT_EXPORT( void )
+  FT_List_Remove( FT_List      list,
+                  FT_ListNode  node );
+
+ +

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_List_Up

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  FT_EXPORT( void )
+  FT_List_Up( FT_List      list,
+              FT_ListNode  node );
+
+ +

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_List_Iterate

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  FT_EXPORT( FT_Error )
+  FT_List_Iterate( FT_List           list,
+                   FT_List_Iterator  iterator,
+                   void*             user );
+
+ +

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_List_Iterator

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  typedef FT_Error
+  (*FT_List_Iterator)( FT_ListNode  node,
+                       void*        user );
+
+ +

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.

+
+ +
+
+ +
+

FT_List_Finalize

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  FT_EXPORT( void )
+  FT_List_Finalize( FT_List             list,
+                    FT_List_Destructor  destroy,
+                    FT_Memory           memory,
+                    void*               user );
+
+ +

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_List_Destructor

+

Defined in FT_LIST_H (freetype/ftlist.h).

+
+  typedef void
+  (*FT_List_Destructor)( FT_Memory  memory,
+                         void*      data,
+                         void*      user );
+
+ +

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.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-lzw.html b/modules/freetype2/docs/reference/ft2-lzw.html new file mode 100644 index 000000000..2040b605e --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-lzw.html @@ -0,0 +1,149 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

LZW Streams

+

Synopsis

+ + +
FT_Stream_OpenLZW
+ + +

This section contains the declaration of LZW-specific functions.

+ +
+

FT_Stream_OpenLZW

+

Defined in FT_LZW_H (freetype/ftlzw.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Stream_OpenLZW( FT_Stream  stream,
+                     FT_Stream  source );
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-mac_specific.html b/modules/freetype2/docs/reference/ft2-mac_specific.html new file mode 100644 index 000000000..c8c465c16 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-mac_specific.html @@ -0,0 +1,374 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Mac Specific Interface

+

Synopsis

+ + + + +
FT_New_Face_From_FONDFT_GetFilePath_From_Mac_ATS_Name
FT_GetFile_From_Mac_NameFT_New_Face_From_FSSpec
FT_GetFile_From_Mac_ATS_NameFT_New_Face_From_FSRef
+ + +

The following definitions are only available if FreeType is compiled on a Macintosh.

+ +
+

FT_New_Face_From_FOND

+

Defined in FT_MAC_H (freetype/ftmac.h).

+
+  FT_EXPORT( FT_Error )
+  FT_New_Face_From_FOND( FT_Library  library,
+                         Handle      fond,
+                         FT_Long     face_index,
+                         FT_Face    *aface )
+                       FT_DEPRECATED_ATTRIBUTE;
+
+ +

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_GetFile_From_Mac_Name

+

Defined in FT_MAC_H (freetype/ftmac.h).

+
+  FT_EXPORT( FT_Error )
+  FT_GetFile_From_Mac_Name( const char*  fontName,
+                            FSSpec*      pathSpec,
+                            FT_Long*     face_index )
+                          FT_DEPRECATED_ATTRIBUTE;
+
+ +

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_GetFile_From_Mac_ATS_Name

+

Defined in FT_MAC_H (freetype/ftmac.h).

+
+  FT_EXPORT( FT_Error )
+  FT_GetFile_From_Mac_ATS_Name( const char*  fontName,
+                                FSSpec*      pathSpec,
+                                FT_Long*     face_index )
+                              FT_DEPRECATED_ATTRIBUTE;
+
+ +

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_GetFilePath_From_Mac_ATS_Name

+

Defined in FT_MAC_H (freetype/ftmac.h).

+
+  FT_EXPORT( FT_Error )
+  FT_GetFilePath_From_Mac_ATS_Name( const char*  fontName,
+                                    UInt8*       path,
+                                    UInt32       maxPathSize,
+                                    FT_Long*     face_index )
+                                  FT_DEPRECATED_ATTRIBUTE;
+
+ +

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_New_Face_From_FSSpec

+

Defined in FT_MAC_H (freetype/ftmac.h).

+
+  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;
+
+ +

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_New_Face_From_FSRef

+

Defined in FT_MAC_H (freetype/ftmac.h).

+
+  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;
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-module_management.html b/modules/freetype2/docs/reference/ft2-module_management.html new file mode 100644 index 000000000..52d364781 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-module_management.html @@ -0,0 +1,779 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Module Management

+

Synopsis

+ + + + + + + + + + +
FT_ModuleFT_Add_Default_ModulesFT_Renderer
FT_Module_Constructor FT_Renderer_Class
FT_Module_DestructorFT_Property_Set 
FT_Module_RequesterFT_Property_GetFT_Get_Renderer
FT_Module_Class FT_Set_Renderer
 FT_New_Library 
FT_Add_ModuleFT_Done_LibraryFT_Set_Debug_Hook
FT_Get_ModuleFT_Reference_Library 
FT_Remove_Module FT_Driver
+ + +

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.

+ +
+

FT_Module

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_ModuleRec_*  FT_Module;
+
+ +

A handle to a given FreeType module object. Each module can be a font driver, a renderer, or anything else that provides services to the formers.

+ +
+
+ +
+

FT_Module_Constructor

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  typedef FT_Error
+  (*FT_Module_Constructor)( FT_Module  module );
+
+ +

A function used to initialize (not create) a new module object.

+ +

input

+ + +
module +

The module to initialize.

+
+ +
+
+ +
+

FT_Module_Destructor

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  typedef void
+  (*FT_Module_Destructor)( FT_Module  module );
+
+ +

A function used to finalize (not destroy) a given module object.

+ +

input

+ + +
module +

The module to finalize.

+
+ +
+
+ +
+

FT_Module_Requester

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  typedef FT_Module_Interface
+  (*FT_Module_Requester)( FT_Module    module,
+                          const char*  name );
+
+ +

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.

+
+ +
+
+ +
+

FT_Module_Class

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FT_Add_Module

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Add_Module( FT_Library              library,
+                 const FT_Module_Class*  clazz );
+
+ +

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_Get_Module

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Module )
+  FT_Get_Module( FT_Library   library,
+                 const char*  module_name );
+
+ +

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_Remove_Module

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Remove_Module( FT_Library  library,
+                    FT_Module   module );
+
+ +

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_Add_Default_Modules

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( void )
+  FT_Add_Default_Modules( FT_Library  library );
+
+ +

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_Property_Set

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Property_Set( FT_Library        library,
+                   const FT_String*  module_name,
+                   const FT_String*  property_name,
+                   const void*       value );
+
+ +

Set a property for a given module.

+ +

input

+ + + + + +
library +

A handle to the library the module is part of.

+
module_name +

The module name.

+
property_name +

The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation.

+

Note that only a few modules have properties.

+
value +

A generic pointer to a variable or structure that gives the new value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

If ‘module_name’ isn't a valid module name, or ‘property_name’ doesn't specify a valid property, or if ‘value’ doesn't represent a valid value for the given property, an error is returned.

+

The following example sets property ‘bar’ (a simple integer) in module ‘foo’ to value 1.

+
+  FT_UInt  bar;
+
+
+  bar = 1;
+  FT_Property_Set( library, "foo", "bar", &bar );
+
+

Note that the FreeType Cache sub-system doesn't recognize module property changes. To avoid glyph lookup confusion within the cache you should call FTC_Manager_Reset to completely flush the cache if a module property gets changed after FTC_Manager_New has been called.

+

It is not possible to set properties of the FreeType Cache sub-system itself with FT_Property_Set; use ?FTC_Property_Set? instead.

+ +

since

+

2.4.11

+ +
+
+ +
+

FT_Property_Get

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Property_Get( FT_Library        library,
+                   const FT_String*  module_name,
+                   const FT_String*  property_name,
+                   void*             value );
+
+ +

Get a module's property value.

+ +

input

+ + + + +
library +

A handle to the library the module is part of.

+
module_name +

The module name.

+
property_name +

The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation.

+
+ +

inout

+ + +
value +

A generic pointer to a variable or structure that gives the value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

If ‘module_name’ isn't a valid module name, or ‘property_name’ doesn't specify a valid property, or if ‘value’ doesn't represent a valid value for the given property, an error is returned.

+

The following example gets property ‘baz’ (a range) in module ‘foo’.

+
+  typedef  range_
+  {
+    FT_Int32  min;
+    FT_Int32  max;
+
+  } range;
+
+  range  baz;
+
+
+  FT_Property_Get( library, "foo", "baz", &baz );
+
+

It is not possible to retrieve properties of the FreeType Cache sub-system with FT_Property_Get; use ?FTC_Property_Get? instead.

+ +

since

+

2.4.11

+ +
+
+ +
+

FT_New_Library

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Error )
+  FT_New_Library( FT_Memory    memory,
+                  FT_Library  *alibrary );
+
+ +

This function is used to create a new FreeType library instance from a given memory object. It is thus possible to use libraries with distinct memory allocators within the same program. Note, however, that the used FT_Memory structure is expected to remain valid for the life of the FT_Library object.

+

Normally, you would call this function (followed by a call to FT_Add_Default_Modules or a series of calls to FT_Add_Module) instead of FT_Init_FreeType to initialize the FreeType library.

+

Don't use FT_Done_FreeType but FT_Done_Library to destroy a library instance.

+ +

input

+ + +
memory +

A handle to the original memory object.

+
+ +

output

+ + +
alibrary +

A pointer to handle of a new library object.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

See the discussion of reference counters in the description of FT_Reference_Library.

+ +
+
+ +
+

FT_Done_Library

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Done_Library( FT_Library  library );
+
+ +

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_Reference_Library

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Reference_Library( FT_Library  library );
+
+ +

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_Renderer

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_RendererRec_*  FT_Renderer;
+
+ +

A handle to a given FreeType renderer. A renderer is a special module in charge of converting a glyph image to a bitmap, when necessary. Each renderer supports a given glyph image format, and one or more target surface depths.

+ +
+
+ +
+

FT_Renderer_Class

+

Defined in FT_RENDER_H (freetype/ftrender.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FT_Get_Renderer

+

Defined in FT_RENDER_H (freetype/ftrender.h).

+
+  FT_EXPORT( FT_Renderer )
+  FT_Get_Renderer( FT_Library       library,
+                   FT_Glyph_Format  format );
+
+ +

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_Set_Renderer

+

Defined in FT_RENDER_H (freetype/ftrender.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Set_Renderer( FT_Library     library,
+                   FT_Renderer    renderer,
+                   FT_UInt        num_params,
+                   FT_Parameter*  parameters );
+
+ +

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_Set_Debug_Hook

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( void )
+  FT_Set_Debug_Hook( FT_Library         library,
+                     FT_UInt            hook_index,
+                     FT_DebugHook_Func  debug_hook );
+
+ +

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_Driver

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  typedef struct FT_DriverRec_*  FT_Driver;
+
+ +

A handle to a given FreeType font driver object. Each font driver is a special module capable of creating faces from font files.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-multiple_masters.html b/modules/freetype2/docs/reference/ft2-multiple_masters.html new file mode 100644 index 000000000..2c4d590cd --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-multiple_masters.html @@ -0,0 +1,570 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Multiple Masters

+

Synopsis

+ + + + + + + + +
FT_MM_AxisFT_Set_MM_Design_Coordinates
FT_Multi_MasterFT_Set_Var_Design_Coordinates
FT_Var_AxisFT_Get_Var_Design_Coordinates
FT_Var_Named_StyleFT_Set_MM_Blend_Coordinates
FT_MM_VarFT_Get_MM_Blend_Coordinates
FT_Get_Multi_MasterFT_Set_Var_Blend_Coordinates
FT_Get_MM_VarFT_Get_Var_Blend_Coordinates
+ + +

The following types and functions are used to manage Multiple Master fonts, i.e., the selection of specific design instances by setting design axis coordinates.

+

George Williams has extended this interface to make it work with both Type 1 Multiple Masters fonts and GX distortable (var) fonts. Some of these routines only work with MM fonts, others will work with both types. They are similar enough that a consistent interface makes sense.

+ +
+

FT_MM_Axis

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  typedef struct  FT_MM_Axis_
+  {
+    FT_String*  name;
+    FT_Long     minimum;
+    FT_Long     maximum;
+
+  } FT_MM_Axis;
+
+ +

A simple structure used to model a given axis in design space for Multiple Masters fonts.

+

This structure can't be used for GX var fonts.

+ +

fields

+ + + + +
name +

The axis's name.

+
minimum +

The axis's minimum design coordinate.

+
maximum +

The axis's maximum design coordinate.

+
+ +
+
+ +
+

FT_Multi_Master

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  typedef struct  FT_Multi_Master_
+  {
+    FT_UInt     num_axis;
+    FT_UInt     num_designs;
+    FT_MM_Axis  axis[T1_MAX_MM_AXIS];
+
+  } FT_Multi_Master;
+
+ +

A structure used to model the axes and space of a Multiple Masters font.

+

This structure can't be used for GX var fonts.

+ +

fields

+ + + + +
num_axis +

Number of axes. Cannot exceed 4.

+
num_designs +

Number of designs; should be normally 2^num_axis even though the Type 1 specification strangely allows for intermediate designs to be present. This number cannot exceed 16.

+
axis +

A table of axis descriptors.

+
+ +
+
+ +
+

FT_Var_Axis

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  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;
+
+ +

A simple structure used to model a given axis in design space for Multiple Masters and GX var fonts.

+ +

fields

+ + + + + + + +
name +

The axis's name. Not always meaningful for GX.

+
minimum +

The axis's minimum design coordinate.

+
def +

The axis's default design coordinate. FreeType computes meaningful default values for MM; it is then an integer value, not in 16.16 format.

+
maximum +

The axis's maximum design coordinate.

+
tag +

The axis's tag (the GX equivalent to ‘name’). FreeType provides default values for MM if possible.

+
strid +

The entry in ‘name’ table (another GX version of ‘name’). Not meaningful for MM.

+
+ +
+
+ +
+

FT_Var_Named_Style

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  typedef struct  FT_Var_Named_Style_
+  {
+    FT_Fixed*  coords;
+    FT_UInt    strid;
+    FT_UInt    psid;   /* since 2.7.1 */
+
+  } FT_Var_Named_Style;
+
+ +

A simple structure used to model a named style in a GX var font.

+

This structure can't be used for MM fonts.

+ +

fields

+ + + +
coords +

The design coordinates for this style. This is an array with one entry for each axis.

+
strid +

The entry in ‘name’ table identifying this style.

+
+ +
+
+ +
+

FT_MM_Var

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  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;
+
+ +

A structure used to model the axes and space of a Multiple Masters or GX var distortable font.

+

Some fields are specific to one format and not to the other.

+ +

fields

+ + + + + + +
num_axis +

The number of axes. The maximum value is 4 for MM; no limit in GX.

+
num_designs +

The number of designs; should be normally 2^num_axis for MM fonts. Not meaningful for GX (where every glyph could have a different number of designs).

+
num_namedstyles +

The number of named styles; 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’.

+

For Type 1 Multiple Masters fonts, this value is always zero because the format does not support named styles.

+
axis +

An axis descriptor table. GX fonts contain slightly more data than MM. Memory management of this pointer is done internally by FreeType.

+
namedstyle +

A named style table. Only meaningful with GX. Memory management of this pointer is done internally by FreeType.

+
+ +
+
+ +
+

FT_Get_Multi_Master

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Multi_Master( FT_Face           face,
+                       FT_Multi_Master  *amaster );
+
+ +

Retrieve the Multiple Master descriptor of a given font.

+

This function can't be used with GX fonts.

+ +

input

+ + +
face +

A handle to the source face.

+
+ +

output

+ + +
amaster +

The Multiple Masters descriptor.

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Get_MM_Var

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_MM_Var( FT_Face      face,
+                 FT_MM_Var*  *amaster );
+
+ +

Retrieve the Multiple Master/GX var descriptor of a given font.

+ +

input

+ + +
face +

A handle to the source face.

+
+ +

output

+ + +
amaster +

The Multiple Masters/GX var descriptor. Allocates a data structure, which the user must deallocate with ‘free’ after use.

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Set_MM_Design_Coordinates

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Set_MM_Design_Coordinates( FT_Face   face,
+                                FT_UInt   num_coords,
+                                FT_Long*  coords );
+
+ +

For Multiple Masters fonts, choose an interpolated font design through design coordinates.

+

This function can't be used with GX fonts.

+ +

inout

+ + +
face +

A handle to the source face.

+
+ +

input

+ + + +
num_coords +

The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.

+
coords +

An array of design coordinates.

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Set_Var_Design_Coordinates

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Set_Var_Design_Coordinates( FT_Face    face,
+                                 FT_UInt    num_coords,
+                                 FT_Fixed*  coords );
+
+ +

For Multiple Master or GX Var fonts, choose an interpolated font design through design coordinates.

+ +

inout

+ + +
face +

A handle to the source face.

+
+ +

input

+ + + +
num_coords +

The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.

+
coords +

An array of design coordinates.

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Get_Var_Design_Coordinates

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Var_Design_Coordinates( FT_Face    face,
+                                 FT_UInt    num_coords,
+                                 FT_Fixed*  coords );
+
+ +

For Multiple Master and GX Var fonts, get the design coordinates of the currently selected interpolated font.

+ +

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.

+ +
+
+ +
+

FT_Set_MM_Blend_Coordinates

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Set_MM_Blend_Coordinates( FT_Face    face,
+                               FT_UInt    num_coords,
+                               FT_Fixed*  coords );
+
+ +

For Multiple Masters and GX var fonts, choose an interpolated font design through normalized blend coordinates.

+ +

inout

+ + +
face +

A handle to the source face.

+
+ +

input

+ + + +
num_coords +

The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.

+
coords +

The design coordinates array (each element must be between 0 and 1.0 for MM fonts, and between -1.0 and 1.0 for GX var fonts).

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Get_MM_Blend_Coordinates

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_MM_Blend_Coordinates( FT_Face    face,
+                               FT_UInt    num_coords,
+                               FT_Fixed*  coords );
+
+ +

For Multiple Masters and GX var fonts, get the normalized blend coordinates of the currently selected interpolated font.

+ +

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 MM fonts, and to 0 for GX var fonts.

+
+ +

output

+ + +
coords +

The normalized blend coordinates array.

+
+ +

return

+

FreeType error code. 0 means success.

+ +
+
+ +
+

FT_Set_Var_Blend_Coordinates

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Set_Var_Blend_Coordinates( FT_Face    face,
+                                FT_UInt    num_coords,
+                                FT_Fixed*  coords );
+
+ +

This is another name of FT_Set_MM_Blend_Coordinates.

+ +
+
+ +
+

FT_Get_Var_Blend_Coordinates

+

Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Var_Blend_Coordinates( FT_Face    face,
+                                FT_UInt    num_coords,
+                                FT_Fixed*  coords );
+
+ +

This is another name of FT_Get_MM_Blend_Coordinates.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-ot_validation.html b/modules/freetype2/docs/reference/ft2-ot_validation.html new file mode 100644 index 000000000..342a8cf2a --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-ot_validation.html @@ -0,0 +1,247 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

OpenType Validation

+

Synopsis

+ + + +
FT_OpenType_Validate 
FT_OpenType_FreeFT_VALIDATE_OTXXX
+ + +

This section contains the declaration of functions to validate some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).

+ +
+

FT_OpenType_Validate

+

Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).

+
+  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 );
+
+ +

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_OpenType_Free

+

Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).

+
+  FT_EXPORT( void )
+  FT_OpenType_Free( FT_Face   face,
+                    FT_Bytes  table );
+
+ +

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_VALIDATE_OTXXX

+

Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).

+
+#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 )
+
+ +

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).

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-outline_processing.html b/modules/freetype2/docs/reference/ft2-outline_processing.html new file mode 100644 index 000000000..0cc16fca6 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-outline_processing.html @@ -0,0 +1,968 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Outline Processing

+

Synopsis

+ + + + + + + + + + + + + + + +
FT_OutlineFT_Outline_Get_Bitmap
FT_Outline_NewFT_Outline_Render
FT_Outline_DoneFT_Outline_Decompose
FT_Outline_CopyFT_Outline_Funcs
FT_Outline_TranslateFT_Outline_MoveToFunc
FT_Outline_TransformFT_Outline_LineToFunc
FT_Outline_EmboldenFT_Outline_ConicToFunc
FT_Outline_EmboldenXYFT_Outline_CubicToFunc
FT_Outline_Reverse 
FT_Outline_CheckFT_Orientation
 FT_Outline_Get_Orientation
FT_Outline_Get_CBox 
FT_Outline_Get_BBoxFT_OUTLINE_XXX
 
+ + +

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.

+ +
+

FT_Outline

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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;
+
+ +

This structure is used to describe an outline to the scan-line converter.

+ +

fields

+ + + + + + + +
n_contours +

The number of contours in the outline.

+
n_points +

The number of points in the outline.

+
points +

A pointer to an array of ‘n_points’ FT_Vector elements, giving the outline's point coordinates.

+
tags +

A pointer to an array of ‘n_points’ chars, giving each outline point's type.

+

If bit 0 is unset, the point is ‘off’ the curve, i.e., a Bézier control point, while it is ‘on’ if set.

+

Bit 1 is meaningful for ‘off’ points only. If set, it indicates a third-order Bézier arc control point; and a second-order control point if unset.

+

If bit 2 is set, bits 5-7 contain the drop-out mode (as defined in the OpenType specification; the value is the same as the argument to the SCANMODE instruction).

+

Bits 3 and 4 are reserved for internal purposes.

+
contours +

An array of ‘n_contours’ shorts, giving the end point of each contour within the outline. For example, the first contour is defined by the points ‘0’ to ‘contours[0]’, the second one is defined by the points ‘contours[0]+1’ to ‘contours[1]’, etc.

+
flags +

A set of bit flags used to characterize the outline and give hints to the scan-converter and hinter on how to convert/grid-fit it. See FT_OUTLINE_XXX.

+
+ +

note

+

The B/W rasterizer only checks bit 2 in the ‘tags’ array for the first point of each contour. The drop-out mode as given with FT_OUTLINE_IGNORE_DROPOUTS, FT_OUTLINE_SMART_DROPOUTS, and FT_OUTLINE_INCLUDE_STUBS in ‘flags’ is then overridden.

+ +
+
+ +
+

FT_Outline_New

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  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 );
+
+ +

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_Outline_Done

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  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 );
+
+ +

Destroy an outline created with FT_Outline_New.

+ +

input

+ + + +
library +

A handle of the library object used to allocate the outline.

+
outline +

A pointer to the outline object to be discarded.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

If the outline's ‘owner’ field is not set, only the outline descriptor will be released.

+

The reason why this function takes an ‘library’ parameter is simply to use ft_mem_free().

+ +
+
+ +
+

FT_Outline_Copy

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Copy( const FT_Outline*  source,
+                   FT_Outline        *target );
+
+ +

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_Outline_Translate

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( void )
+  FT_Outline_Translate( const FT_Outline*  outline,
+                        FT_Pos             xOffset,
+                        FT_Pos             yOffset );
+
+ +

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_Outline_Transform

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( void )
+  FT_Outline_Transform( const FT_Outline*  outline,
+                        const FT_Matrix*   matrix );
+
+ +

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_Outline_Embolden

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Embolden( FT_Outline*  outline,
+                       FT_Pos       strength );
+
+ +

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_Outline_EmboldenXY

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_EmboldenXY( FT_Outline*  outline,
+                         FT_Pos       xstrength,
+                         FT_Pos       ystrength );
+
+ +

Embolden an outline. The new outline will be ‘xstrength’ pixels wider and ‘ystrength’ pixels higher. Otherwise, it is similar to FT_Outline_Embolden, which uses the same strength in both directions.

+ +
+
+ +
+

FT_Outline_Reverse

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( void )
+  FT_Outline_Reverse( FT_Outline*  outline );
+
+ +

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_Outline_Check

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Check( FT_Outline*  outline );
+
+ +

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_Outline_Get_CBox

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( void )
+  FT_Outline_Get_CBox( const FT_Outline*  outline,
+                       FT_BBox           *acbox );
+
+ +

Return an outline's ‘control box’. The control box encloses all the outline's points, including Bézier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline that contains Bézier outside arcs).

+

Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the ‘ftbbox’ component, which is dedicated to this single task.

+ +

input

+ + +
outline +

A pointer to the source outline descriptor.

+
+ +

output

+ + +
acbox +

The outline's control box.

+
+ +

note

+

See FT_Glyph_Get_CBox for a discussion of tricky fonts.

+ +
+
+ +
+

FT_Outline_Get_BBox

+

Defined in FT_BBOX_H (freetype/ftbbox.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Get_BBox( FT_Outline*  outline,
+                       FT_BBox     *abbox );
+
+ +

Compute the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm that returns very quickly when the two boxes coincide. Otherwise, the outline Bézier arcs are traversed to extract their extrema.

+ +

input

+ + +
outline +

A pointer to the source outline.

+
+ +

output

+ + +
abbox +

The outline's exact bounding box.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

If the font is tricky and the glyph has been loaded with FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get reasonable values for the BBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the BBox, which can be eventually converted back to font units.

+ +
+
+ +
+

FT_Outline_Get_Bitmap

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Get_Bitmap( FT_Library        library,
+                         FT_Outline*       outline,
+                         const FT_Bitmap  *abitmap );
+
+ +

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_Outline_Render

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Render( FT_Library         library,
+                     FT_Outline*        outline,
+                     FT_Raster_Params*  params );
+
+ +

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_Outline_Decompose

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Decompose( FT_Outline*              outline,
+                        const FT_Outline_Funcs*  func_interface,
+                        void*                    user );
+
+ +

Walk over an outline's structure to decompose it into individual segments and Bézier arcs. This function also emits ‘move to’ operations to indicate the start of new contours in the outline.

+ +

input

+ + + +
outline +

A pointer to the source target.

+
func_interface +

A table of ‘emitters’, i.e., function pointers called during decomposition to indicate path operations.

+
+ +

inout

+ + +
user +

A typeless pointer that is passed to each emitter during the decomposition. It can be used to store the state during the decomposition.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

A contour that contains a single point only is represented by a ‘move to’ operation followed by ‘line to’ to the same point. In most cases, it is best to filter this out before using the outline for stroking purposes (otherwise it would result in a visible dot when round caps are used).

+

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_Outline_Funcs

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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;
+
+ +

A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Béziers.

+ +

fields

+ + + + + + + +
move_to +

The ‘move to’ emitter.

+
line_to +

The segment emitter.

+
conic_to +

The second-order Bézier arc emitter.

+
cubic_to +

The third-order Bézier arc emitter.

+
shift +

The shift that is applied to coordinates before they are sent to the emitter.

+
delta +

The delta that is applied to coordinates before they are sent to the emitter, but after the shift.

+
+ +

note

+

The point coordinates sent to the emitters are the transformed version of the original coordinates (this is important for high accuracy during scan-conversion). The transformation is simple:

+
+  x' = (x << shift) - delta
+  y' = (x << shift) - delta
+
+

Set the values of ‘shift’ and ‘delta’ to 0 to get the original point coordinates.

+ +
+
+ +
+

FT_Outline_MoveToFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef int
+  (*FT_Outline_MoveToFunc)( const FT_Vector*  to,
+                            void*             user );
+
+#define FT_Outline_MoveTo_Func  FT_Outline_MoveToFunc
+
+ +

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.

+ +
+
+ +
+

FT_Outline_LineToFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef int
+  (*FT_Outline_LineToFunc)( const FT_Vector*  to,
+                            void*             user );
+
+#define FT_Outline_LineTo_Func  FT_Outline_LineToFunc
+
+ +

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.

+ +
+
+ +
+

FT_Outline_ConicToFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef int
+  (*FT_Outline_ConicToFunc)( const FT_Vector*  control,
+                             const FT_Vector*  to,
+                             void*             user );
+
+#define FT_Outline_ConicTo_Func  FT_Outline_ConicToFunc
+
+ +

A function pointer type used to describe the signature of a ‘conic to’ function during outline walking or decomposition.

+

A ‘conic to’ is emitted to indicate a second-order Bézier arc in the outline.

+ +

input

+ + + + +
control +

An intermediate control point between the last position and the new target in ‘to’.

+
to +

A pointer to the target end point of the conic arc.

+
user +

A typeless pointer, which is passed from the caller of the decomposition function.

+
+ +

return

+

Error code. 0 means success.

+ +
+
+ +
+

FT_Outline_CubicToFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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
+
+ +

A function pointer type used to describe the signature of a ‘cubic to’ function during outline walking or decomposition.

+

A ‘cubic to’ is emitted to indicate a third-order Bézier arc.

+ +

input

+ + + + + +
control1 +

A pointer to the first Bézier control point.

+
control2 +

A pointer to the second Bézier control point.

+
to +

A pointer to the target end point.

+
user +

A typeless pointer, which is passed from the caller of the decomposition function.

+
+ +

return

+

Error code. 0 means success.

+ +
+
+ +
+

FT_Orientation

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FT_Outline_Get_Orientation

+

Defined in FT_OUTLINE_H (freetype/ftoutln.h).

+
+  FT_EXPORT( FT_Orientation )
+  FT_Outline_Get_Orientation( FT_Outline*  outline );
+
+ +

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_OUTLINE_XXX

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+#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
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-pfr_fonts.html b/modules/freetype2/docs/reference/ft2-pfr_fonts.html new file mode 100644 index 000000000..c9eca0fe2 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-pfr_fonts.html @@ -0,0 +1,242 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

PFR Fonts

+

Synopsis

+ + +
FT_Get_PFR_MetricsFT_Get_PFR_KerningFT_Get_PFR_Advance
+ + +

This section contains the declaration of PFR-specific functions.

+ +
+

FT_Get_PFR_Metrics

+

Defined in FT_PFR_H (freetype/ftpfr.h).

+
+  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 );
+
+ +

Return the outline and metrics resolutions of a given PFR face.

+ +

input

+ + +
face +

Handle to the input face. It can be a non-PFR face.

+
+ +

output

+ + + + + +
aoutline_resolution +

Outline resolution. This is equivalent to ‘face->units_per_EM’ for non-PFR fonts. Optional (parameter can be NULL).

+
ametrics_resolution +

Metrics resolution. This is equivalent to ‘outline_resolution’ for non-PFR fonts. Optional (parameter can be NULL).

+
ametrics_x_scale +

A 16.16 fixed-point number used to scale distance expressed in metrics units to device sub-pixels. This is equivalent to ‘face->size->x_scale’, but for metrics only. Optional (parameter can be NULL).

+
ametrics_y_scale +

Same as ‘ametrics_x_scale’ but for the vertical direction. optional (parameter can be NULL).

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

If the input face is not a PFR, this function will return an error. However, in all cases, it will return valid values.

+ +
+
+ +
+

FT_Get_PFR_Kerning

+

Defined in FT_PFR_H (freetype/ftpfr.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_PFR_Kerning( FT_Face     face,
+                      FT_UInt     left,
+                      FT_UInt     right,
+                      FT_Vector  *avector );
+
+ +

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.

+
+

Index of the right glyph.

+
+ +

output

+ + +
avector +

A kerning vector.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

This function always return distances in original PFR metrics units. This is unlike FT_Get_Kerning with the FT_KERNING_UNSCALED mode, which always returns distances converted to outline units.

+

You can use the value of the ‘x_scale’ and ‘y_scale’ parameters returned by FT_Get_PFR_Metrics to scale these to device sub-pixels.

+ +
+
+ +
+

FT_Get_PFR_Advance

+

Defined in FT_PFR_H (freetype/ftpfr.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_PFR_Advance( FT_Face   face,
+                      FT_UInt   gindex,
+                      FT_Pos   *aadvance );
+
+ +

Return a given glyph advance, expressed in original metrics units, from a PFR font.

+ +

input

+ + + +
face +

A handle to the input face.

+
gindex +

The glyph index.

+
+ +

output

+ + +
aadvance +

The glyph advance in metrics units.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

You can use the ‘x_scale’ or ‘y_scale’ results of FT_Get_PFR_Metrics to convert the advance to device sub-pixels (i.e., 1/64th of pixels).

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-quick_advance.html b/modules/freetype2/docs/reference/ft2-quick_advance.html new file mode 100644 index 000000000..3222485af --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-quick_advance.html @@ -0,0 +1,224 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Quick retrieval of advance values

+

Synopsis

+ + + +
FT_Get_Advance 
FT_Get_AdvancesFT_ADVANCE_FLAG_FAST_ONLY
+ + +

This section contains functions to quickly extract advance values without handling glyph outlines, if possible.

+ +
+

FT_Get_Advance

+

Defined in FT_ADVANCES_H (freetype/ftadvanc.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Advance( FT_Face    face,
+                  FT_UInt    gindex,
+                  FT_Int32   load_flags,
+                  FT_Fixed  *padvance );
+
+ +

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_Get_Advances

+

Defined in FT_ADVANCES_H (freetype/ftadvanc.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Advances( FT_Face    face,
+                   FT_UInt    start,
+                   FT_UInt    count,
+                   FT_Int32   load_flags,
+                   FT_Fixed  *padvances );
+
+ +

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_ADVANCE_FLAG_FAST_ONLY

+

Defined in FT_ADVANCES_H (freetype/ftadvanc.h).

+
+#define FT_ADVANCE_FLAG_FAST_ONLY  0x20000000L
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-raster.html b/modules/freetype2/docs/reference/ft2-raster.html new file mode 100644 index 000000000..c6932187b --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-raster.html @@ -0,0 +1,531 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Scanline Converter

+

Synopsis

+ + + + + + + +
FT_Raster FT_Raster_Funcs
FT_SpanFT_Raster_NewFunc 
FT_SpanFuncFT_Raster_DoneFuncFT_Raster_BitTest_Func
 FT_Raster_ResetFuncFT_Raster_BitSet_Func
FT_Raster_ParamsFT_Raster_SetModeFunc
FT_RASTER_FLAG_XXXFT_Raster_RenderFunc
+ + +

This section contains technical definitions.

+ +
+

FT_Raster

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef struct FT_RasterRec_*  FT_Raster;
+
+ +

An opaque handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap.

+ +
+
+ +
+

FT_Span

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef struct  FT_Span_
+  {
+    short           x;
+    unsigned short  len;
+    unsigned char   coverage;
+
+  } FT_Span;
+
+ +

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.

+ +
+
+ +
+

FT_SpanFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef void
+  (*FT_SpanFunc)( int             y,
+                  int             count,
+                  const FT_Span*  spans,
+                  void*           user );
+
+#define FT_Raster_Span_Func  FT_SpanFunc
+
+ +

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.

+ +
+
+ +
+

FT_Raster_Params

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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;
+
+ +

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.

+ +
+
+ +
+

FT_RASTER_FLAG_XXX

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+#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
+
+ +

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.

+
+ +
+
+ +
+

FT_Raster_NewFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef int
+  (*FT_Raster_NewFunc)( void*       memory,
+                        FT_Raster*  raster );
+
+#define FT_Raster_New_Func  FT_Raster_NewFunc
+
+ +

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.

+ +
+
+ +
+

FT_Raster_DoneFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef void
+  (*FT_Raster_DoneFunc)( FT_Raster  raster );
+
+#define FT_Raster_Done_Func  FT_Raster_DoneFunc
+
+ +

A function used to destroy a given raster object.

+ +

input

+ + +
raster +

A handle to the raster object.

+
+ +
+
+ +
+

FT_Raster_ResetFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef void
+  (*FT_Raster_ResetFunc)( FT_Raster       raster,
+                          unsigned char*  pool_base,
+                          unsigned long   pool_size );
+
+#define FT_Raster_Reset_Func  FT_Raster_ResetFunc
+
+ +

FreeType used to provide an area of memory called the ‘render pool’ available to all registered rasters. This was not thread safe however and now FreeType never allocates this pool. NULL is always passed in as pool_base.

+

This function is called each time the render pool changes, or just after a new raster object is created.

+ +

input

+ + + + +
raster +

A handle to the new raster object.

+
pool_base +

The address in memory of the render pool.

+
pool_size +

The size in bytes of the render pool.

+
+ +

note

+

Rasters should ignore the render pool and rely on dynamic or stack allocation if they want to (a handle to the memory allocator is passed to the raster constructor).

+ +
+
+ +
+

FT_Raster_SetModeFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef int
+  (*FT_Raster_SetModeFunc)( FT_Raster      raster,
+                            unsigned long  mode,
+                            void*          args );
+
+#define FT_Raster_Set_Mode_Func  FT_Raster_SetModeFunc
+
+ +

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.

+
+ +
+
+ +
+

FT_Raster_RenderFunc

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef int
+  (*FT_Raster_RenderFunc)( FT_Raster                raster,
+                           const FT_Raster_Params*  params );
+
+#define FT_Raster_Render_Func  FT_Raster_RenderFunc
+
+ +

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).

+ +
+
+ +
+

FT_Raster_Funcs

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ +
+

FT_Raster_BitTest_Func

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef int
+  (*FT_Raster_BitTest_Func)( int    y,
+                             int    x,
+                             void*  user );
+
+ +

Deprecated, unimplemented.

+ +
+
+ +
+

FT_Raster_BitSet_Func

+

Defined in FT_IMAGE_H (freetype/ftimage.h).

+
+  typedef void
+  (*FT_Raster_BitSet_Func)( int    y,
+                            int    x,
+                            void*  user );
+
+ +

Deprecated, unimplemented.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-sfnt_names.html b/modules/freetype2/docs/reference/ft2-sfnt_names.html new file mode 100644 index 000000000..b7be194e9 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-sfnt_names.html @@ -0,0 +1,256 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

SFNT Names

+

Synopsis

+ + + + + + +
FT_SfntName
FT_Get_Sfnt_Name_Count
FT_Get_Sfnt_Name
FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY
FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY
+ + +

The TrueType and OpenType specifications allow the inclusion of a special ‘names table’ in font files. This table contains textual (and internationalized) information regarding the font, like family name, copyright, version, etc.

+

The definitions below are used to access them if available.

+

Note that this has nothing to do with glyph names!

+ +
+

FT_SfntName

+

Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).

+
+  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;
+
+ +

A structure used to model an SFNT ‘name’ table entry.

+ +

fields

+ + + + + + + +
platform_id +

The platform ID for ‘string’.

+
encoding_id +

The encoding ID for ‘string’.

+
language_id +

The language ID for ‘string’.

+
name_id +

An identifier for ‘string’.

+
string +

The ‘name’ string. Note that its format differs depending on the (platform,encoding) pair. It can be a Pascal String, a UTF-16 one, etc.

+

Generally speaking, the string is not zero-terminated. Please refer to the TrueType specification for details.

+
string_len +

The length of ‘string’ in bytes.

+
+ +

note

+

Possible values for ‘platform_id’, ‘encoding_id’, ‘language_id’, and ‘name_id’ are given in the file ‘ttnameid.h’. For details please refer to the TrueType or OpenType specification.

+

See also TT_PLATFORM_XXX, TT_APPLE_ID_XXX, TT_MAC_ID_XXX, TT_ISO_ID_XXX, and TT_MS_ID_XXX.

+ +
+
+ +
+

FT_Get_Sfnt_Name_Count

+

Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).

+
+  FT_EXPORT( FT_UInt )
+  FT_Get_Sfnt_Name_Count( FT_Face  face );
+
+ +

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_Get_Sfnt_Name

+

Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_Sfnt_Name( FT_Face       face,
+                    FT_UInt       idx,
+                    FT_SfntName  *aname );
+
+ +

Retrieve a string of the SFNT ‘name’ table for a given index.

+ +

input

+ + + +
face +

A handle to the source face.

+
idx +

The index of the ‘name’ string.

+
+ +

output

+ + +
aname +

The indexed FT_SfntName structure.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

The ‘string’ array returned in the ‘aname’ structure is not null-terminated. The application should deallocate it if it is no longer in use.

+

Use FT_Get_Sfnt_Name_Count to get the total number of available ‘name’ table entries, then do a loop until you get the right platform, encoding, and name ID.

+ +
+
+ +
+

FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY

+

Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).

+
+#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY  FT_MAKE_TAG( 'i', 'g', 'p', 'f' )
+
+ +

A constant used as the tag of FT_Parameter structures to make FT_Open_Face() ignore preferred family subfamily names in ‘name’ table since OpenType version 1.4. For backwards compatibility with legacy systems that have a 4-face-per-family restriction.

+ +
+
+ +
+

FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY

+

Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).

+
+#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY  FT_MAKE_TAG( 'i', 'g', 'p', 's' )
+
+ +

A constant used as the tag of FT_Parameter structures to make FT_Open_Face() ignore preferred subfamily names in ‘name’ table since OpenType version 1.4. For backwards compatibility with legacy systems that have a 4-face-per-family restriction.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-sizes_management.html b/modules/freetype2/docs/reference/ft2-sizes_management.html new file mode 100644 index 000000000..10bdec545 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-sizes_management.html @@ -0,0 +1,202 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Size Management

+

Synopsis

+ + +
FT_New_SizeFT_Done_SizeFT_Activate_Size
+ + +

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.

+ +
+

FT_New_Size

+

Defined in FT_SIZES_H (freetype/ftsizes.h).

+
+  FT_EXPORT( FT_Error )
+  FT_New_Size( FT_Face   face,
+               FT_Size*  size );
+
+ +

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_Done_Size

+

Defined in FT_SIZES_H (freetype/ftsizes.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Done_Size( FT_Size  size );
+
+ +

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_Activate_Size

+

Defined in FT_SIZES_H (freetype/ftsizes.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Activate_Size( FT_Size  size );
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-system_interface.html b/modules/freetype2/docs/reference/ft2-system_interface.html new file mode 100644 index 000000000..8b457a803 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-system_interface.html @@ -0,0 +1,405 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

System Interface

+

Synopsis

+ + + + + +
FT_MemoryFT_MemoryRecFT_Stream_CloseFunc
FT_Alloc_FuncFT_StreamFT_StreamRec
FT_Free_FuncFT_StreamDesc
FT_Realloc_FuncFT_Stream_IoFunc
+ + +

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.

+ +
+

FT_Memory

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef struct FT_MemoryRec_*  FT_Memory;
+
+ +

A handle to a given memory manager object, defined with an FT_MemoryRec structure.

+ +
+
+ +
+

FT_Alloc_Func

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef void*
+  (*FT_Alloc_Func)( FT_Memory  memory,
+                    long       size );
+
+ +

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.

+ +
+
+ +
+

FT_Free_Func

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef void
+  (*FT_Free_Func)( FT_Memory  memory,
+                   void*      block );
+
+ +

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.

+
+ +
+
+ +
+

FT_Realloc_Func

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef void*
+  (*FT_Realloc_Func)( FT_Memory  memory,
+                      long       cur_size,
+                      long       new_size,
+                      void*      block );
+
+ +

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.

+ +
+
+ +
+

FT_MemoryRec

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  struct  FT_MemoryRec_
+  {
+    void*            user;
+    FT_Alloc_Func    alloc;
+    FT_Free_Func     free;
+    FT_Realloc_Func  realloc;
+  };
+
+ +

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.

+
+ +
+
+ +
+

FT_Stream

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef struct FT_StreamRec_*  FT_Stream;
+
+ +

A handle to an input stream.

+ +

also

+

See FT_StreamRec for the publicly accessible fields of a given stream object.

+ +
+
+ +
+

FT_StreamDesc

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef union  FT_StreamDesc_
+  {
+    long   value;
+    void*  pointer;
+
+  } FT_StreamDesc;
+
+ +

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.

+ +
+
+ +
+

FT_Stream_IoFunc

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef unsigned long
+  (*FT_Stream_IoFunc)( FT_Stream       stream,
+                       unsigned long   offset,
+                       unsigned char*  buffer,
+                       unsigned long   count );
+
+ +

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.

+ +
+
+ +
+

FT_Stream_CloseFunc

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  typedef void
+  (*FT_Stream_CloseFunc)( FT_Stream  stream );
+
+ +

A function used to close a given input stream.

+ +

input

+ + +
stream +

A handle to the target stream.

+
+ +
+
+ +
+

FT_StreamRec

+

Defined in FT_SYSTEM_H (freetype/ftsystem.h).

+
+  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;
+
+ +

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.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-toc.html b/modules/freetype2/docs/reference/ft2-toc.html new file mode 100644 index 000000000..ff3efe95e --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-toc.html @@ -0,0 +1,281 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Table of Contents

+
+

General Remarks

+ + + +
+

How client applications should include FreeType header files.

+
+

How client applications should allocate FreeType data structures.

+
+
+
+

Core API

+ + + + + + + + + +
+

Functions and macros related to FreeType versions.

+
+

The basic data types defined by the library.

+
+

The FreeType 2 base font interface.

+
+

The FreeType 2 interface to Unicode Ideographic Variation Sequences (IVS), using the SFNT cmap format 14.

+
+

Generic interface to manage individual glyph data.

+
+

Only available on the Macintosh.

+
+

Managing multiple sizes per face.

+
+

Macro definitions used to #include specific header files.

+
+
+
+

Format-Specific API

+ + + + + + + + + + + +
+

How to manage Multiple Masters fonts.

+
+

TrueType specific table types and functions.

+
+

Type 1 (PostScript) specific font tables.

+
+

Access the names embedded in TrueType and OpenType files.

+
+

BDF and PCF specific API.

+
+

CID-keyed font specific API.

+
+

PFR/TrueDoc specific API.

+
+

Windows FNT specific API.

+
+

Getting the font format.

+
+

Retrieving TrueType ‘gasp’ table entries.

+
+
+
+

Controlling FreeType Modules

+ + + + +
+

Controlling the auto-hinting module.

+
+

Controlling the CFF driver module.

+
+

Controlling the TrueType driver module.

+
+
+
+

Cache Sub-System

+ + +
+

How to cache face, size, and glyph data with FreeType 2.

+
+
+
+

Support API

+ + + + + + + + + + + + + + +
+

Crunching fixed numbers and vectors.

+
+

Simple management of lists.

+
+

Functions to create, transform, and render vectorial glyph images.

+
+

Retrieve horizontal and vertical advance values without processing glyph outlines, if possible.

+
+

Handling FT_Bitmap objects.

+
+

How vectorial outlines are converted into bitmaps and pixmaps.

+
+

Generating bordered and stroked glyphs.

+
+

How FreeType manages memory and i/o.

+
+

How to add, upgrade, remove, and control modules from FreeType.

+
+

Using gzip-compressed font files.

+
+

Using LZW-compressed font files.

+
+

Using bzip2-compressed font files.

+
+

Reduce color fringes of subpixel-rendered bitmaps.

+
+
+
+

Error Codes

+ + + +
+

How to handle errors and error strings.

+
+

All possible error codes returned by FreeType functions.

+
+
+
+

Miscellaneous

+ + + + + +
+

An API to validate OpenType tables.

+
+

Custom Glyph Loading.

+
+

TrueType bytecode support.

+
+

An API to validate TrueTypeGX/AAT tables.

+
+
+ +
+ + +
generated on Fri Dec 30 21:17:18 2016
+ diff --git a/modules/freetype2/docs/reference/ft2-truetype_engine.html b/modules/freetype2/docs/reference/ft2-truetype_engine.html new file mode 100644 index 000000000..30dd082e1 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-truetype_engine.html @@ -0,0 +1,175 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

The TrueType Engine

+

Synopsis

+ + +
FT_TrueTypeEngineTypeFT_Get_TrueType_Engine_Type
+ + +

This section contains a function used to query the level of TrueType bytecode support compiled in this version of the library.

+ +
+

FT_TrueTypeEngineType

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  typedef enum  FT_TrueTypeEngineType_
+  {
+    FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
+    FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
+    FT_TRUETYPE_ENGINE_TYPE_PATENTED
+
+  } FT_TrueTypeEngineType;
+
+ +

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

+ +
+
+ +
+

FT_Get_TrueType_Engine_Type

+

Defined in FT_MODULE_H (freetype/ftmodapi.h).

+
+  FT_EXPORT( FT_TrueTypeEngineType )
+  FT_Get_TrueType_Engine_Type( FT_Library  library );
+
+ +

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

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-truetype_tables.html b/modules/freetype2/docs/reference/ft2-truetype_tables.html new file mode 100644 index 000000000..f61e1c903 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-truetype_tables.html @@ -0,0 +1,1174 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

TrueType Tables

+

Synopsis

+ + + + + + + + + + + + + +
TT_Header 
TT_HoriHeaderFT_Get_CMap_Language_ID
TT_VertHeaderFT_Get_CMap_Format
TT_OS2 
TT_PostscriptFT_PARAM_TAG_UNPATENTED_HINTING
TT_PCLT 
TT_MaxProfileTT_PLATFORM_XXX
 TT_APPLE_ID_XXX
FT_Sfnt_TagTT_MAC_ID_XXX
FT_Get_Sfnt_TableTT_ISO_ID_XXX
FT_Load_Sfnt_TableTT_MS_ID_XXX
FT_Sfnt_Table_InfoTT_ADOBE_ID_XXX
+ + +

This section contains the definition of TrueType-specific tables as well as some routines used to access and process them.

+ +
+

TT_Header

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  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;
+
+ +

A structure used to model a TrueType font header table. All fields follow the TrueType specification.

+ +
+
+ +
+

TT_HoriHeader

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  typedef struct  TT_HoriHeader_
+  {
+    FT_Fixed   Version;
+    FT_Short   Ascender;
+    FT_Short   Descender;
+    FT_Short   Line_Gap;
+
+    FT_UShort  advance_Width_Max;      /* advance width maximum */
+
+    FT_Short   min_Left_Side_Bearing;  /* minimum left-sb       */
+    FT_Short   min_Right_Side_Bearing; /* minimum right-sb      */
+    FT_Short   xMax_Extent;            /* xmax extents          */
+    FT_Short   caret_Slope_Rise;
+    FT_Short   caret_Slope_Run;
+    FT_Short   caret_Offset;
+
+    FT_Short   Reserved[4];
+
+    FT_Short   metric_Data_Format;
+    FT_UShort  number_Of_HMetrics;
+
+    /* The following fields are not defined by the TrueType specification */
+    /* but they are used to connect the metrics header to the relevant    */
+    /* `HMTX' table.                                                      */
+
+    void*      long_metrics;
+    void*      short_metrics;
+
+  } TT_HoriHeader;
+
+ +

A structure used to model a TrueType horizontal header, the ‘hhea’ table, as well as the corresponding horizontal metrics table, i.e., the ‘hmtx’ table.

+ +

fields

+ + + + + + + + + + + + + + + + +
Version +

The table version.

+
Ascender +

The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font.

+

This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).

+

You should use the ‘sTypoAscender’ field of the OS/2 table instead if you want the correct one.

+
Descender +

The font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative.

+

This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).

+

You should use the ‘sTypoDescender’ field of the OS/2 table instead if you want the correct one.

+
Line_Gap +

The font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font.

+
advance_Width_Max +

This field is the maximum of all advance widths found in the font. It can be used to compute the maximum width of an arbitrary string of text.

+
min_Left_Side_Bearing +

The minimum left side bearing of all glyphs within the font.

+
min_Right_Side_Bearing +

The minimum right side bearing of all glyphs within the font.

+
xMax_Extent +

The maximum horizontal extent (i.e., the ‘width’ of a glyph's bounding box) for all glyphs in the font.

+
caret_Slope_Rise +

The rise coefficient of the cursor's slope of the cursor (slope=rise/run).

+
caret_Slope_Run +

The run coefficient of the cursor's slope.

+
Reserved +

8 reserved bytes.

+
metric_Data_Format +

Always 0.

+
number_Of_HMetrics +

Number of HMetrics entries in the ‘hmtx’ table -- this value can be smaller than the total number of glyphs in the font.

+
long_metrics +

A pointer into the ‘hmtx’ table.

+
short_metrics +

A pointer into the ‘hmtx’ table.

+
+ +

note

+

IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should be identical except for the names of their fields, which are different.

+

This ensures that a single function in the ‘ttload’ module is able to read both the horizontal and vertical headers.

+ +
+
+ +
+

TT_VertHeader

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  typedef struct  TT_VertHeader_
+  {
+    FT_Fixed   Version;
+    FT_Short   Ascender;
+    FT_Short   Descender;
+    FT_Short   Line_Gap;
+
+    FT_UShort  advance_Height_Max;      /* advance height maximum */
+
+    FT_Short   min_Top_Side_Bearing;    /* minimum left-sb or top-sb       */
+    FT_Short   min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb   */
+    FT_Short   yMax_Extent;             /* xmax or ymax extents            */
+    FT_Short   caret_Slope_Rise;
+    FT_Short   caret_Slope_Run;
+    FT_Short   caret_Offset;
+
+    FT_Short   Reserved[4];
+
+    FT_Short   metric_Data_Format;
+    FT_UShort  number_Of_VMetrics;
+
+    /* The following fields are not defined by the TrueType specification */
+    /* but they're used to connect the metrics header to the relevant     */
+    /* `HMTX' or `VMTX' table.                                            */
+
+    void*      long_metrics;
+    void*      short_metrics;
+
+  } TT_VertHeader;
+
+ +

A structure used to model a TrueType vertical header, the ‘vhea’ table, as well as the corresponding vertical metrics table, i.e., the ‘vmtx’ table.

+ +

fields

+ + + + + + + + + + + + + + + + + +
Version +

The table version.

+
Ascender +

The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font.

+

This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).

+

You should use the ‘sTypoAscender’ field of the OS/2 table instead if you want the correct one.

+
Descender +

The font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative.

+

This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).

+

You should use the ‘sTypoDescender’ field of the OS/2 table instead if you want the correct one.

+
Line_Gap +

The font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font.

+
advance_Height_Max +

This field is the maximum of all advance heights found in the font. It can be used to compute the maximum height of an arbitrary string of text.

+
min_Top_Side_Bearing +

The minimum top side bearing of all glyphs within the font.

+
min_Bottom_Side_Bearing +

The minimum bottom side bearing of all glyphs within the font.

+
yMax_Extent +

The maximum vertical extent (i.e., the ‘height’ of a glyph's bounding box) for all glyphs in the font.

+
caret_Slope_Rise +

The rise coefficient of the cursor's slope of the cursor (slope=rise/run).

+
caret_Slope_Run +

The run coefficient of the cursor's slope.

+
caret_Offset +

The cursor's offset for slanted fonts. This value is ‘reserved’ in vmtx version 1.0.

+
Reserved +

8 reserved bytes.

+
metric_Data_Format +

Always 0.

+
number_Of_HMetrics +

Number of VMetrics entries in the ‘vmtx’ table -- this value can be smaller than the total number of glyphs in the font.

+
long_metrics +

A pointer into the ‘vmtx’ table.

+
short_metrics +

A pointer into the ‘vmtx’ table.

+
+ +

note

+

IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should be identical except for the names of their fields, which are different.

+

This ensures that a single function in the ‘ttload’ module is able to read both the horizontal and vertical headers.

+ +
+
+ +
+

TT_OS2

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  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;
+
+ +

A structure used to model a TrueType OS/2 table. All fields comply to the OpenType specification.

+

Note that we now support old Mac fonts that do not include an OS/2 table. In this case, the ‘version’ field is always set to 0xFFFF.

+ +
+
+ +
+

TT_Postscript

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  typedef struct  TT_Postscript_
+  {
+    FT_Fixed  FormatType;
+    FT_Fixed  italicAngle;
+    FT_Short  underlinePosition;
+    FT_Short  underlineThickness;
+    FT_ULong  isFixedPitch;
+    FT_ULong  minMemType42;
+    FT_ULong  maxMemType42;
+    FT_ULong  minMemType1;
+    FT_ULong  maxMemType1;
+
+    /* Glyph names follow in the file, but we don't   */
+    /* load them by default.  See the ttpost.c file.  */
+
+  } TT_Postscript;
+
+ +

A structure used to model a TrueType PostScript table. All fields comply to the TrueType specification. This structure does not reference the PostScript glyph names, which can be nevertheless accessed with the ‘ttpost’ module.

+ +
+
+ +
+

TT_PCLT

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  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;
+
+ +

A structure used to model a TrueType PCLT table. All fields comply to the TrueType specification.

+ +
+
+ +
+

TT_MaxProfile

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  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;
+
+ +

The maximum profile is a table containing many max values, which can be used to pre-allocate arrays. This ensures that no memory allocation occurs during a glyph load.

+ +

fields

+ + + + + + + + + + + + + + + + +
version +

The version number.

+
numGlyphs +

The number of glyphs in this TrueType font.

+
maxPoints +

The maximum number of points in a non-composite TrueType glyph. See also the structure element ‘maxCompositePoints’.

+
maxContours +

The maximum number of contours in a non-composite TrueType glyph. See also the structure element ‘maxCompositeContours’.

+
maxCompositePoints +

The maximum number of points in a composite TrueType glyph. See also the structure element ‘maxPoints’.

+
maxCompositeContours +

The maximum number of contours in a composite TrueType glyph. See also the structure element ‘maxContours’.

+
maxZones +

The maximum number of zones used for glyph hinting.

+
maxTwilightPoints +

The maximum number of points in the twilight zone used for glyph hinting.

+
maxStorage +

The maximum number of elements in the storage area used for glyph hinting.

+
maxFunctionDefs +

The maximum number of function definitions in the TrueType bytecode for this font.

+
maxInstructionDefs +

The maximum number of instruction definitions in the TrueType bytecode for this font.

+
maxStackElements +

The maximum number of stack elements used during bytecode interpretation.

+
maxSizeOfInstructions +

The maximum number of TrueType opcodes used for glyph hinting.

+
maxComponentElements +

The maximum number of simple (i.e., non- composite) glyphs in a composite glyph.

+
maxComponentDepth +

The maximum nesting depth of composite glyphs.

+
+ +

note

+

This structure is only used during font loading.

+ +
+
+ +
+

FT_Sfnt_Tag

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  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
+
+ +

An enumeration used to specify the index of an SFNT table. Used in the FT_Get_Sfnt_Table API function.

+ +

values

+ + + + + + + + +
FT_SFNT_HEAD +

To access the font's TT_Header structure.

+
FT_SFNT_MAXP +

To access the font's TT_MaxProfile structure.

+
FT_SFNT_OS2 +

To access the font's TT_OS2 structure.

+
FT_SFNT_HHEA +

To access the font's TT_HoriHeader structure.

+
FT_SFNT_VHEA +

To access the font's TT_VertHeader structure.

+
FT_SFNT_POST +

To access the font's TT_Postscript structure.

+
FT_SFNT_PCLT +

To access the font's TT_PCLT structure.

+
+ +
+
+ +
+

FT_Get_Sfnt_Table

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  FT_EXPORT( void* )
+  FT_Get_Sfnt_Table( FT_Face      face,
+                     FT_Sfnt_Tag  tag );
+
+ +

Return a pointer to a given SFNT table within a face.

+ +

input

+ + + +
face +

A handle to the source.

+
tag +

The index of the SFNT table.

+
+ +

return

+

A type-less pointer to the table. This will be 0 in case of error, or if the corresponding table was not found OR loaded from the file.

+

Use a typecast according to ‘tag’ to access the structure elements.

+ +

note

+

The table is owned by the face object and disappears with it.

+

This function is only useful to access SFNT tables that are loaded by the sfnt, truetype, and opentype drivers. See FT_Sfnt_Tag for a list.

+

Here an example how to access the ‘vhea’ table:

+
+  TT_VertHeader*  vert_header;
+
+
+  vert_header =
+    (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA );
+
+ +
+
+ +
+

FT_Load_Sfnt_Table

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Load_Sfnt_Table( FT_Face    face,
+                      FT_ULong   tag,
+                      FT_Long    offset,
+                      FT_Byte*   buffer,
+                      FT_ULong*  length );
+
+ +

Load any font table into client memory.

+ +

input

+ + + + +
face +

A handle to the source face.

+
tag +

The four-byte tag of the table to load. Use the value 0 if you want to access the whole font file. Otherwise, you can use one of the definitions found in the FT_TRUETYPE_TAGS_H file, or forge a new one with FT_MAKE_TAG.

+
offset +

The starting offset in the table (or file if tag == 0).

+
+ +

output

+ + +
buffer +

The target buffer address. The client must ensure that the memory array is big enough to hold the data.

+
+ +

inout

+ + +
length +

If the ‘length’ parameter is NULL, then try to load the whole table. Return an error code if it fails.

+

Else, if ‘*length’ is 0, exit immediately while returning the table's (or file) full size in it.

+

Else the number of bytes to read from the table or file, from the starting offset.

+
+ +

return

+

FreeType error code. 0 means success.

+ +

note

+

If you need to determine the table's length you should first call this function with ‘*length’ set to 0, as in the following example:

+
+  FT_ULong  length = 0;
+
+
+  error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
+  if ( error ) { ... table does not exist ... }
+
+  buffer = malloc( length );
+  if ( buffer == NULL ) { ... not enough memory ... }
+
+  error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
+  if ( error ) { ... could not load table ... }
+
+

Note that structures like TT_Header or TT_OS2 can't be used with this function; they are limited to FT_Get_Sfnt_Table. Reason is that those structures depend on the processor architecture, with varying size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).

+ +
+
+ +
+

FT_Sfnt_Table_Info

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Sfnt_Table_Info( FT_Face    face,
+                      FT_UInt    table_index,
+                      FT_ULong  *tag,
+                      FT_ULong  *length );
+
+ +

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_Get_CMap_Language_ID

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  FT_EXPORT( FT_ULong )
+  FT_Get_CMap_Language_ID( FT_CharMap  charmap );
+
+ +

Return TrueType/sfnt specific cmap language ID. Definitions of language ID values are in ‘ttnameid.h’.

+ +

input

+ + +
charmap +

The target charmap.

+
+ +

return

+

The language ID of ‘charmap’. If ‘charmap’ doesn't belong to a TrueType/sfnt face, just return 0 as the default value.

+

For a format 14 cmap (to access Unicode IVS), the return value is 0xFFFFFFFF.

+ +
+
+ +
+

FT_Get_CMap_Format

+

Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).

+
+  FT_EXPORT( FT_Long )
+  FT_Get_CMap_Format( FT_CharMap  charmap );
+
+ +

Return TrueType/sfnt specific cmap format.

+ +

input

+ + +
charmap +

The target charmap.

+
+ +

return

+

The format of ‘charmap’. If ‘charmap’ doesn't belong to a TrueType/sfnt face, return -1.

+ +
+
+ +
+

FT_PARAM_TAG_UNPATENTED_HINTING

+

Defined in FT_UNPATENTED_HINTING_H (freetype/ttunpat.h).

+
+#define FT_PARAM_TAG_UNPATENTED_HINTING  FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
+
+ +

Deprecated.

+

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.

+ +
+
+ +
+

TT_PLATFORM_XXX

+

Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).

+
+#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 */
+
+ +

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.

+
+ +
+
+ +
+

TT_APPLE_ID_XXX

+

Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).

+
+#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 */
+
+ +

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_MAC_ID_XXX

+

Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).

+
+#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
+
+ +

A list of valid values for the ‘encoding_id’ for TT_PLATFORM_MACINTOSH charmaps and name entries.

+ +

values

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TT_MAC_ID_ROMAN +

+
TT_MAC_ID_JAPANESE +

+
TT_MAC_ID_TRADITIONAL_CHINESE +

+
TT_MAC_ID_KOREAN +

+
TT_MAC_ID_ARABIC +

+
TT_MAC_ID_HEBREW +

+
TT_MAC_ID_GREEK +

+
TT_MAC_ID_RUSSIAN +

+
TT_MAC_ID_RSYMBOL +

+
TT_MAC_ID_DEVANAGARI +

+
TT_MAC_ID_GURMUKHI +

+
TT_MAC_ID_GUJARATI +

+
TT_MAC_ID_ORIYA +

+
TT_MAC_ID_BENGALI +

+
TT_MAC_ID_TAMIL +

+
TT_MAC_ID_TELUGU +

+
TT_MAC_ID_KANNADA +

+
TT_MAC_ID_MALAYALAM +

+
TT_MAC_ID_SINHALESE +

+
TT_MAC_ID_BURMESE +

+
TT_MAC_ID_KHMER +

+
TT_MAC_ID_THAI +

+
TT_MAC_ID_LAOTIAN +

+
TT_MAC_ID_GEORGIAN +

+
TT_MAC_ID_ARMENIAN +

+
TT_MAC_ID_MALDIVIAN +

+
TT_MAC_ID_SIMPLIFIED_CHINESE +

+
TT_MAC_ID_TIBETAN +

+
TT_MAC_ID_MONGOLIAN +

+
TT_MAC_ID_GEEZ +

+
TT_MAC_ID_SLAVIC +

+
TT_MAC_ID_VIETNAMESE +

+
TT_MAC_ID_SINDHI +

+
TT_MAC_ID_UNINTERP +

+
+ +
+
+ +
+

TT_ISO_ID_XXX

+

Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).

+
+#define TT_ISO_ID_7BIT_ASCII  0
+#define TT_ISO_ID_10646       1
+#define TT_ISO_ID_8859_1      2
+
+ +

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.

+
+ +
+
+ +
+

TT_MS_ID_XXX

+

Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).

+
+#define TT_MS_ID_SYMBOL_CS    0
+#define TT_MS_ID_UNICODE_CS   1
+#define TT_MS_ID_SJIS         2
+#define TT_MS_ID_GB2312       3
+#define TT_MS_ID_BIG_5        4
+#define TT_MS_ID_WANSUNG      5
+#define TT_MS_ID_JOHAB        6
+#define TT_MS_ID_UCS_4       10
+
+ +

A list of valid values for the ‘encoding_id’ for TT_PLATFORM_MICROSOFT charmaps and name entries.

+ +

values

+ + + + + + + + + +
TT_MS_ID_SYMBOL_CS +

Corresponds to Microsoft symbol encoding. See FT_ENCODING_MS_SYMBOL.

+
TT_MS_ID_UNICODE_CS +

Corresponds to a Microsoft WGL4 charmap, matching Unicode. See FT_ENCODING_UNICODE.

+
TT_MS_ID_SJIS +

Corresponds to SJIS Japanese encoding. See FT_ENCODING_SJIS.

+
TT_MS_ID_GB2312 +

Corresponds to Simplified Chinese as used in Mainland China. See FT_ENCODING_GB2312.

+
TT_MS_ID_BIG_5 +

Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. See FT_ENCODING_BIG5.

+
TT_MS_ID_WANSUNG +

Corresponds to Korean Wansung encoding. See FT_ENCODING_WANSUNG.

+
TT_MS_ID_JOHAB +

Corresponds to Johab encoding. See FT_ENCODING_JOHAB.

+
TT_MS_ID_UCS_4 +

Corresponds to UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4 (mid-2001.)

+
+ +
+
+ +
+

TT_ADOBE_ID_XXX

+

Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).

+
+#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
+
+ +

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.

+
+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-tt_driver.html b/modules/freetype2/docs/reference/ft2-tt_driver.html new file mode 100644 index 000000000..aea3aa720 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-tt_driver.html @@ -0,0 +1,258 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

The TrueType driver

+

Synopsis

+ + +
interpreter-versionTT_INTERPRETER_VERSION_XXX
+ + +

While FreeType's TrueType driver doesn't expose API functions by itself, it is possible to control its behaviour with FT_Property_Set and FT_Property_Get. The following lists the available properties together with the necessary macros and structures.

+

The TrueType driver's module name is ‘truetype’.

+

We start with a list of definitions, kindly provided by Greg Hitchcock.

+

Bi-Level Rendering

+

Monochromatic rendering, exclusively used in the early days of TrueType by both Apple and Microsoft. Microsoft's GDI interface supported hinting of the right-side bearing point, such that the advance width could be non-linear. Most often this was done to achieve some level of glyph symmetry. To enable reasonable performance (e.g., not having to run hinting on all glyphs just to get the widths) there was a bit in the head table indicating if the side bearing was hinted, and additional tables, ‘hdmx’ and ‘LTSH’, to cache hinting widths across multiple sizes and device aspect ratios.

+

Font Smoothing

+

Microsoft's GDI implementation of anti-aliasing. Not traditional anti-aliasing as the outlines were hinted before the sampling. The widths matched the bi-level rendering.

+

ClearType Rendering

+

Technique that uses physical subpixels to improve rendering on LCD (and other) displays. Because of the higher resolution, many methods of improving symmetry in glyphs through hinting the right-side bearing were no longer necessary. This lead to what GDI calls ‘natural widths’ ClearType, see http://www.beatstamm.com/typography/RTRCh4.htm#Sec21. Since hinting has extra resolution, most non-linearity went away, but it is still possible for hints to change the advance widths in this mode.

+

ClearType Compatible Widths

+

One of the earliest challenges with ClearType was allowing the implementation in GDI to be selected without requiring all UI and documents to reflow. To address this, a compatible method of rendering ClearType was added where the font hints are executed once to determine the width in bi-level rendering, and then re-run in ClearType, with the difference in widths being absorbed in the font hints for ClearType (mostly in the white space of hints); see http://www.beatstamm.com/typography/RTRCh4.htm#Sec20. Somewhat by definition, compatible width ClearType allows for non-linear widths, but only when the bi-level version has non-linear widths.

+

ClearType Subpixel Positioning

+

One of the nice benefits of ClearType is the ability to more crisply display fractional widths; unfortunately, the GDI model of integer bitmaps did not support this. However, the WPF and Direct Write frameworks do support fractional widths. DWrite calls this ‘natural mode’, not to be confused with GDI's ‘natural widths’. Subpixel positioning, in the current implementation of Direct Write, unfortunately does not support hinted advance widths, see http://www.beatstamm.com/typography/RTRCh4.htm#Sec22. Note that the TrueType interpreter fully allows the advance width to be adjusted in this mode, just the DWrite client will ignore those changes.

+

ClearType Backwards Compatibility

+

This is a set of exceptions made in the TrueType interpreter to minimize hinting techniques that were problematic with the extra resolution of ClearType; see http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx. This technique is not to be confused with ClearType compatible widths. ClearType backwards compatibility has no direct impact on changing advance widths, but there might be an indirect impact on disabling some deltas. This could be worked around in backwards compatibility mode.

+

Native ClearType Mode

+

(Not to be confused with ‘natural widths’.) This mode removes all the exceptions in the TrueType interpreter when running with ClearType. Any issues on widths would still apply, though.

+ +
+

interpreter-version

+

Defined in FT_TRUETYPE_DRIVER_H (freetype/ftttdrv.h).

+
+   *   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
+   *   `http://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').
+   */
+
+
+
+ +
+

TT_INTERPRETER_VERSION_XXX

+

Defined in FT_TRUETYPE_DRIVER_H (freetype/ftttdrv.h).

+
+#define TT_INTERPRETER_VERSION_35  35
+#define TT_INTERPRETER_VERSION_38  38
+#define TT_INTERPRETER_VERSION_40  40
+
+ +

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 FT_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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-type1_tables.html b/modules/freetype2/docs/reference/ft2-type1_tables.html new file mode 100644 index 000000000..b2088f311 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-type1_tables.html @@ -0,0 +1,858 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Type 1 Tables

+

Synopsis

+ + + + + + + + + +
PS_FontInfoRecCID_FaceInfoT1_EncodingType
PS_FontInfo PS_Dict_Keys
PS_PrivateRecFT_Has_PS_Glyph_Names 
PS_PrivateFT_Get_PS_Font_InfoT1_FontInfo
 FT_Get_PS_Font_PrivateT1_Private
CID_FaceDictRecFT_Get_PS_Font_ValueCID_FontDict
CID_FaceDict CID_Info
CID_FaceInfoRecT1_Blend_Flags
+ + +

This section contains the definition of Type 1-specific tables, including structures related to other PostScript font formats.

+ +
+

PS_FontInfoRec

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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;
+
+ +

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.

+ +
+
+ +
+

PS_FontInfo

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef struct PS_FontInfoRec_*  PS_FontInfo;
+
+ +

A handle to a PS_FontInfoRec structure.

+ +
+
+ +
+

PS_PrivateRec

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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;
+
+ +

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.

+ +
+
+ +
+

PS_Private

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef struct PS_PrivateRec_*  PS_Private;
+
+ +

A handle to a PS_PrivateRec structure.

+ +
+
+ +
+

CID_FaceDictRec

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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;
+
+ +

A structure used to represent data in a CID top-level dictionary.

+ +
+
+ +
+

CID_FaceDict

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef struct CID_FaceDictRec_*  CID_FaceDict;
+
+ +

A handle to a CID_FaceDictRec structure.

+ +
+
+ +
+

CID_FaceInfoRec

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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;
+
+ +

A structure used to represent CID Face information.

+ +
+
+ +
+

CID_FaceInfo

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef struct CID_FaceInfoRec_*  CID_FaceInfo;
+
+ +

A handle to a CID_FaceInfoRec structure.

+ +
+
+ +
+

FT_Has_PS_Glyph_Names

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  FT_EXPORT( FT_Int )
+  FT_Has_PS_Glyph_Names( FT_Face  face );
+
+ +

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_Get_PS_Font_Info

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_PS_Font_Info( FT_Face      face,
+                       PS_FontInfo  afont_info );
+
+ +

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_Get_PS_Font_Private

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_PS_Font_Private( FT_Face     face,
+                          PS_Private  afont_private );
+
+ +

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_Get_PS_Font_Value

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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 );
+
+ +

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.

+ +
+
+ +
+

T1_Blend_Flags

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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
+
+ +

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 +

+
+ +
+
+ +
+

T1_EncodingType

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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;
+
+ +

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 +

+
+ +
+
+ +
+

PS_Dict_Keys

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  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;
+
+ +

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 +

+
+ +
+
+ +
+

T1_FontInfo

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef PS_FontInfoRec  T1_FontInfo;
+
+ +

This type is equivalent to PS_FontInfoRec. It is deprecated but kept to maintain source compatibility between various versions of FreeType.

+ +
+
+ +
+

T1_Private

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef PS_PrivateRec  T1_Private;
+
+ +

This type is equivalent to PS_PrivateRec. It is deprecated but kept to maintain source compatibility between various versions of FreeType.

+ +
+
+ +
+

CID_FontDict

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef CID_FaceDictRec  CID_FontDict;
+
+ +

This type is equivalent to CID_FaceDictRec. It is deprecated but kept to maintain source compatibility between various versions of FreeType.

+ +
+
+ +
+

CID_Info

+

Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).

+
+  typedef CID_FaceInfoRec  CID_Info;
+
+ +

This type is equivalent to CID_FaceInfoRec. It is deprecated but kept to maintain source compatibility between various versions of FreeType.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-user_allocation.html b/modules/freetype2/docs/reference/ft2-user_allocation.html new file mode 100644 index 000000000..183b76969 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-user_allocation.html @@ -0,0 +1,110 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

User allocation

+ +

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.

+ + + diff --git a/modules/freetype2/docs/reference/ft2-version.html b/modules/freetype2/docs/reference/ft2-version.html new file mode 100644 index 000000000..28e3c4c07 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-version.html @@ -0,0 +1,251 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

FreeType Version

+

Synopsis

+ + + + + + +
FT_Library_Version 
 FT_Face_CheckTrueTypePatents
FREETYPE_MAJORFT_Face_SetUnpatentedHinting
FREETYPE_MINOR 
FREETYPE_PATCHFREETYPE_XXX
+ + +

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.

+ +
+

FT_Library_Version

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( void )
+  FT_Library_Version( FT_Library   library,
+                      FT_Int      *amajor,
+                      FT_Int      *aminor,
+                      FT_Int      *apatch );
+
+ +

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_Face_CheckTrueTypePatents

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Bool )
+  FT_Face_CheckTrueTypePatents( FT_Face  face );
+
+ +

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_Face_SetUnpatentedHinting

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+  FT_EXPORT( FT_Bool )
+  FT_Face_SetUnpatentedHinting( FT_Face  face,
+                                FT_Bool  value );
+
+ +

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

+ +
+
+ +
+

FREETYPE_XXX

+

Defined in FT_FREETYPE_H (freetype/freetype.h).

+
+#define FREETYPE_MAJOR  2
+#define FREETYPE_MINOR  7
+#define FREETYPE_PATCH  1
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/reference/ft2-winfnt_fonts.html b/modules/freetype2/docs/reference/ft2-winfnt_fonts.html new file mode 100644 index 000000000..db8603071 --- /dev/null +++ b/modules/freetype2/docs/reference/ft2-winfnt_fonts.html @@ -0,0 +1,310 @@ + + + + +FreeType-2.7.1 API Reference + + + + + +

FreeType-2.7.1 API Reference

+ +

Window FNT Files

+

Synopsis

+ + + +
FT_WinFNT_ID_XXXFT_WinFNT_Header
FT_WinFNT_HeaderRecFT_Get_WinFNT_Header
+ + +

This section contains the declaration of Windows FNT specific functions.

+ +
+

FT_WinFNT_ID_XXX

+

Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).

+
+#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
+
+ +

A list of valid values for the ‘charset’ byte in FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX encodings (except for cp1361) can be found at ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.

+ +

values

+ + + + + + + + + + + + + + + + + + + + +
FT_WinFNT_ID_DEFAULT +

This is used for font enumeration and font creation as a ‘don't care’ value. Valid font files don't contain this value. When querying for information about the character set of the font that is currently selected into a specified device context, this return value (of the related Windows API) simply denotes failure.

+
FT_WinFNT_ID_SYMBOL +

There is no known mapping table available.

+
FT_WinFNT_ID_MAC +

Mac Roman encoding.

+
FT_WinFNT_ID_OEM +

From Michael Pöttgen <michael@poettgen.de>:

+

The ‘Windows Font Mapping’ article says that FT_WinFNT_ID_OEM is used for the charset of vector fonts, like ‘modern.fon’, ‘roman.fon’, and ‘script.fon’ on Windows.

+

The ‘CreateFont’ documentation says: The FT_WinFNT_ID_OEM value specifies a character set that is operating-system dependent.

+

The ‘IFIMETRICS’ documentation from the ‘Windows Driver Development Kit’ says: This font supports an OEM-specific character set. The OEM character set is system dependent.

+

In general OEM, as opposed to ANSI (i.e., cp1252), denotes the second default codepage that most international versions of Windows have. It is one of the OEM codepages from

+

https://msdn.microsoft.com/en-us/goglobal/bb964655,

+

and is used for the ‘DOS boxes’, to support legacy applications. A German Windows version for example usually uses ANSI codepage 1252 and OEM codepage 850.

+
FT_WinFNT_ID_CP874 +

A superset of Thai TIS 620 and ISO 8859-11.

+
FT_WinFNT_ID_CP932 +

A superset of Japanese Shift-JIS (with minor deviations).

+
FT_WinFNT_ID_CP936 +

A superset of simplified Chinese GB 2312-1980 (with different ordering and minor deviations).

+
FT_WinFNT_ID_CP949 +

A superset of Korean Hangul KS C 5601-1987 (with different ordering and minor deviations).

+
FT_WinFNT_ID_CP950 +

A superset of traditional Chinese Big 5 ETen (with different ordering and minor deviations).

+
FT_WinFNT_ID_CP1250 +

A superset of East European ISO 8859-2 (with slightly different ordering).

+
FT_WinFNT_ID_CP1251 +

A superset of Russian ISO 8859-5 (with different ordering).

+
FT_WinFNT_ID_CP1252 +

ANSI encoding. A superset of ISO 8859-1.

+
FT_WinFNT_ID_CP1253 +

A superset of Greek ISO 8859-7 (with minor modifications).

+
FT_WinFNT_ID_CP1254 +

A superset of Turkish ISO 8859-9.

+
FT_WinFNT_ID_CP1255 +

A superset of Hebrew ISO 8859-8 (with some modifications).

+
FT_WinFNT_ID_CP1256 +

A superset of Arabic ISO 8859-6 (with different ordering).

+
FT_WinFNT_ID_CP1257 +

A superset of Baltic ISO 8859-13 (with some deviations).

+
FT_WinFNT_ID_CP1258 +

For Vietnamese. This encoding doesn't cover all necessary characters.

+
FT_WinFNT_ID_CP1361 +

Korean (Johab).

+
+ +
+
+ +
+

FT_WinFNT_HeaderRec

+

Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).

+
+  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;
+
+ +

Windows FNT Header info.

+ +
+
+ +
+

FT_WinFNT_Header

+

Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).

+
+  typedef struct FT_WinFNT_HeaderRec_*  FT_WinFNT_Header;
+
+ +

A handle to an FT_WinFNT_HeaderRec structure.

+ +
+
+ +
+

FT_Get_WinFNT_Header

+

Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).

+
+  FT_EXPORT( FT_Error )
+  FT_Get_WinFNT_Header( FT_Face               face,
+                        FT_WinFNT_HeaderRec  *aheader );
+
+ +

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.

+ +
+
+ + + diff --git a/modules/freetype2/docs/release b/modules/freetype2/docs/release new file mode 100644 index 000000000..fc03a50b2 --- /dev/null +++ b/modules/freetype2/docs/release @@ -0,0 +1,202 @@ +How to prepare a new release +---------------------------- + +. include/freetype/freetype.h: Update FREETYPE_MAJOR, FREETYPE_MINOR, + and FREETYPE_PATCH. + +. Update version numbers in all files where necessary (for example, do + a grep for both `2.3.1' and `231' for release 2.3.1). + +. builds/unix/configure.raw: Update `version_info'. + +. docs/CHANGES: Document differences to last release. + +. README: Update. + +. docs/VERSIONS.TXT: Document changed `version_info'. + +. ChangeLog: Announce new release (both in the freetype2 and + freetype2-demos modules). + +. Clone the git archive to another directory with + + git clone -l -s . ../freetype2.test + + or something like this and run + + make distclean; make devel; make + make distclean; make devel; make multi + make distclean; make devel CC=g++; make CC=g++ + make distclean; make devel CC=g++; make multi CC=g++ + + sh autogen.sh + make distclean; ./configure; make + make distclean; ./configure CC=g++; make + + in the cloned repository to test compilation with both gcc and g++. + +. Test C++ compilation for freetype2-demos too (using `git clone' as + above). + +. Run src/tools/chktrcmp.py and check that there are no undefined + trace_XXXX macros. + +. After pushing the new release, tag the git repositories (freetype2, + freetype2-demos) with + + git tag VER- -m "" -u + + and push the tags with + + git push --tags + +. Check with + + git clean -ndx + + that the git directory is really clean (and remove extraneous files + if necessary). + +. Say `make dist' in both the freetype2 and freetype2-demos modules + to generate the .tar.gz, .tar.bz2, and .zip files. + +. Create the doc bundles (freetype-doc-.tar.gz, + freetype-doc-.tar.bz2, ftdoc.zip). This is + everything in + + /freetype2/docs + + except the `reference' subdirectory. Do *not* use option `-l' from + zip! + +. Run the following script (with updated `$VERSION', `$SAVANNAH_USER', + and $SOURCEFORGE_USER variables) to sign and upload the bundles to + both Savannah and SourceForge. The signing code has been taken from + the `gnupload' script (part of the automake bundle). + + #!/bin/sh + + VERSION=2.5.1 + SAVANNAH_USER=wl + SOURCEFORGE_USER=wlemb + + ##################################################################### + + GPG='/usr/bin/gpg --batch --no-tty' + + version=`echo $VERSION | sed "s/\\.//g"` + + FREETYPE_PACKAGES="freetype-$VERSION.tar.gz \ + freetype-$VERSION.tar.bz2 \ + ft$version.zip" + FT2DEMOS_PACKAGES="ft2demos-$VERSION.tar.gz \ + ft2demos-$VERSION.tar.bz2 \ + ftdmo$version.zip" + FTDOC_PACKAGES="freetype-doc-$VERSION.tar.gz \ + freetype-doc-$VERSION.tar.bz2 \ + ftdoc$version.zip" + + PACKAGE_LIST="$FREETYPE_PACKAGES \ + $FT2DEMOS_PACKAGES \ + $FTDOC_PACKAGES" + + set -e + unset passphrase + + PATH=/empty echo -n "Enter GPG passphrase: " + stty -echo + read -r passphrase + stty echo + echo + + for f in $PACKAGE_LIST; do + if test ! -f $f; then + echo "$0: Cannot find \`$f'" 1>&2 + exit 1 + else + : + fi + done + + for f in $PACKAGE_LIST; do + echo "Signing $f..." + rm -f $f.sig + echo $passphrase | $GPG --passphrase-fd 0 -ba -o $f.sig $f + done + + FREETYPE_SIGNATURES= + for i in $FREETYPE_PACKAGES; do + FREETYPE_SIGNATURES="$FREETYPE_SIGNATURES $i.sig" + done + + FT2DEMOS_SIGNATURES= + for i in $FT2DEMOS_PACKAGES; do + FT2DEMOS_SIGNATURES="$FT2DEMOS_SIGNATURES $i.sig" + done + + FTDOC_SIGNATURES= + for i in $FTDOC_PACKAGES; do + FTDOC_SIGNATURES="$FTDOC_SIGNATURES $i.sig" + done + + SIGNATURE_LIST="$FREETYPE_SIGNATURES \ + $FT2DEMOS_SIGNATURES \ + $FTDOC_SIGNATURES" + + scp $PACKAGE_LIST $SIGNATURE_LIST \ + $SAVANNAH_USER@dl.sv.nongnu.org:/releases/freetype/ + + rsync -avP -e ssh $FREETYPE_PACKAGES $FREETYPE_SIGNATURES \ + $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype2/$VERSION/ + rsync -avP -e ssh $FT2DEMOS_PACKAGES $FT2DEMOS_SIGNATURES \ + $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-demos/$VERSION/ + rsync -avP -e ssh $FTDOC_PACKAGES $FTDOC_SIGNATURES \ + $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype-docs/$VERSION/ + + # EOF + +. Prepare a README for SourceForge and upload it with the following + script (with updated `$VERSION' and $SOURCEFORGE_USER variables). + + #!/bin/sh + + VERSION=2.5.1 + SOURCEFORGE_USER=wlemb + + ##################################################################### + + rsync -avP -e ssh README \ + $SOURCEFORGE_USER,freetype@frs.sf.net:/home/frs/project/f/fr/freetype/freetype2/$VERSION/ + + # EOF + +. On SourceForge, tag the just uploaded `ftXXX.zip' and + `freetype-XXX.tar.bz2' files as the default files to download for + `Windows' and `Others', respectively. + +. Copy the reference files (generated by `make dist') to + + /freetype2/docs/reference + +. Update the `freetype-web' repository. `git push' then automatically + triggers an update of the public web pages within ten minutes, due + to a cron script (on wl@freedesktop.org) that rsyncs with + + freedesktop.org://srv/freetype.freedesktop.org/www + +. Announce new release on freetype-announce@nongnu.org and to relevant + newsgroups. + +---------------------------------------------------------------------- + +Copyright 2003-2016 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. + + +--- end of release --- -- cgit v1.2.3