Changes between FreeType version 1.3 and version 1.3.1 ====================================================== Bug fixes. Changes between FreeType version 1.2 and version 1.3 ==================================================== Documentation ------------- Improved installation instructions. Complete revision of almost all documentation files. ** ** Added the file apirefx.txt to document all extensions to the ** FreeType library. Consequently, errstr.txt has been removed. ** Added the file optimize.txt, explaining how to improve FreeType on a given architecture. ** ** Documentation about possible patent restrictions added. ** Added howto/mac.txt (stating basically that the FreeType team can't support the Macintosh platform because of lack of knowledge). Added howto/msdos.txt, documenting compilation for various 16bit and 32bit compilers. API functions ------------- TT_Load_Kerning_Table() now returns TT_Err_Invalid_Argument instead of TT_Err_Bad_Argument (which is used for an internal error only) for an invalid argument. The same holds for TT_Get_Face_Widths() and TT_Get_Glyph_Big_Metrics(). If the glyf table is missing, the new error code TT_Err_Glyf_Table_Missing is returned instead of TT_Err_Table_Missing. This affects TT_Get_Face_Widths(), TT_Load_Glyph(), and TT_Open_Face(). ** ** New function TT_FreeType_Version() to get the major and minor ** version dynamically. ** TT_Load_Glyph() has now two additional flags. TTLOAD_PEDANTIC will force pedantic handling of the glyph instructions, and TTLOAD_IGNORE_GLOBAL_ADVANCE_WIDTH is needed for some fonts which have correct advance width values for the glyphs but an incorrect global advance width value. TT_Get_Glyph_Big_Metrics() now returns correct vertical bearing values (both linear and pixel values). New error code TT_Err_Glyf_Table_Missing (0x89) used to indicate a missing `glyf' table. The following macros have been shortened to stay within the limit of 32 characters (the longer macro names are still available if HAVE_LIMITS_ON_IDENTS is not defined). TT_UCR_ARABIC_PRESENTATION_FORMS_A -> TT_UCR_ARABIC_PRESENTATIONS_A TT_UCR_ARABIC_PRESENTATION_FORMS_B -> TT_UCR_ARABIC_PRESENTATIONS_B TT_UCR_COMBINING_DIACRITICAL_MARKS -> TT_UCR_COMBINING_DIACRITICS TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB -> TT_UCR_COMBINING_DIACRITICS_SYMB freetype.h: TT_Bool is now typedef'ed as `typedef int'. New typedefs: TT_Int and TT_UInt. Declarations of TT_Matrix_Multiply() and TT_Matrix_Invert() have been removed since these functions were never implemented. Architectures ------------- Added `ansi' directory to the supported architectures -- any ANSI C compiler should compile FreeType with these files. Added `debugger' directory to the architectures. Use this to build a special version of FreeType for bytecode debugging (tested with OS/2 and Unix). Added more files to the `mac' architecture directory to make basic support complete. Support for VMS added (to compile the library only). Contributed by Jouk Jansen . Added `win16' architecture directory for older Windows versions. A graphics driver (gw_win16.c) for the example programs is available also. ** ** Antoine Leca contributed support for many MS-DOS and Windows ** compilers (including library fixes to make it 16bit compliant): ** Borland C++ for MS-DOS (tested with v. 3.1, 4.02, 5.0), Microsoft C for MS-DOS, Turbo C (versions 1.5 and 2.0 -- version 1.0 is too old), Borland C++ 4.0 and 5.0 for Windows (both 16bit and 32bit versions), gcc under Win32 (Cygwin32 or MinGW32), Microsoft Visual C++ 2.x, 4.x, 5.0, and 6.0 for Windows Support for the gettext package with DJGPP compiler has been added. Since many older compilers on both MS-DOS and Windows platforms have problems to build dependency files automatically, scripts for gcc under Unix have been added to do this. Similarly, a script to produce a DLL definition file is now included in the distribution. Moved old win32 support to contrib/win32, replacing all CR/LF with LF, and using only lowercase file names for consistency. Additionally, some missing files in the FreeType 1.2 distribution have been added. Antoine Leca has written a new, light-weight graphics driver (gw_win32.c) which fits better into the current scheme. Small additions have been made to the Amiga graphics driver. The use of the ARM macro (intended for this architecture) has been completely removed due to lack of support. Checks for endianness have been removed completely since FreeType isn't dependent on it. Global compilation macros ------------------------- The TT_HUGE_PTR macro has been added to support fonts with more than 16000 characters or so with 16bit MS-DOS compilers. Consequently, the files hugefile.c and hugemem.c have been added which provide special versions for these compilers. HAVE_LIMITS_ON_IDENTS has been introduced to overcome restrictions with old compilers which can't digest identifiers longer than 32 characters. ** ** Added option TT_CONFIG_OPTION_NO_INTERPRETER to desactivate the ** bytecode interpreter completely. This option is off by default. ** Added options TT_CONFIG_OPTION_STATIC_RASTER and TT_CONFIG_OPTION_STATIC_INTERPRETER to build static versions of the respective components. Off by default. (It was formerly called TT_STATIC_RASTER.) Better debugging support (see ttconfig.h for details): DEBUG_LEVEL_TRACE, DEBUG_LEVEL_ERROR, DEBUG_INTERPRETER, DEBUG_MEMORY, DEBUG_FILE. Added TT_MAX_EXTENSIONS to define the maximal number of extensions (currently set to 8 -- this macro was previously in ttextend.c). Extensions ---------- ** ** Full support for TrueType Open resp. OpenType GSUB tables has ** been implemented. It uses a GDEF table if available; otherwise, ** a method to construct an artificial GDEF table has been added ** (note that GDEF parts not related to GSUB are loaded but not ** further handled). An example how to use it can be found in the ** new test program ftstrtto. ** Rudimentary GPOS support -- currently, you can load the GPOS subtables but nothing more. ** ** Documentation for all extensions can be found in the file ** apirefx.txt. ** Fixed a bug in TT_Load_PS_Names() which returned a local, thus invalid pointer. ** ** Support for embedded bitmaps has been added (thanks to ** YAMANO'UCHI Hidetoshi who has contributed ** a lot of the code). It can handle `bloc', `bdat', `EBLC', and ** `EBDT' tables. [TrueType embedded bitmaps are also called ** `sbits' (for `scaler bitmaps').] ** Test programs ------------- ** ** A new test program called ftstrtto has been added to test ** TrueType Open features. Almost all available FreeType ** extensions are used in this program -- it displays a UTF 8 ** encoded string on screen, allowing to toggle kerning, embedded ** bitmaps, GSUB support, and hinting. Additionally, it has a ** special module to handle the Arabic script properly (in ** arabic.c), i.e., it treats initial, medial, final, and isolated ** glyphs correctly. ** The new module `blitter.c' provides the blitting function Blit_Bitmap() for bitmaps of various depth. The debugging program `fdebug' has been rewritten to provide a better user interface. ftdump has been extended to show information about embedded bitmaps and GSUB data. It will now also show the PostScript name of the font. The new test program ftmetric can dump metrics and glyphs -- it uses the gettext package for i18n support. Another new test program is ftsbit to dump embedded bitmaps contained in a font. A small bug has been fixed in ftstring to compute the right bounding box of the string. ftview has been extended to display embedded bitmaps also (switch `-B'). The maximal point size of glyphs in ftview has been increased to 5000pt -- this has shown some clipping bugs in the engine which has been fixed meanwhile. As a demonstration, it also activates tracing of the raster and gload component if DEBUG_LEVEL_TRACE (see above) is defined. Miscellaneous ------------- The library has been updated to use autoconf 2.13 and libtool 1.3.3 throughout. ** ** FreeType will now install its header files in ** /freetype/... since the number of files has grown again. ** Added a lot of EXPORT_FUNC/EXPORT_DEF macros to functions for correct exporting in DLLs. ** ** FreeType can now successfully load Mac fonts which don't have an ** `OS/2' table. ** Fixed a bug in handling composite glyphs where the composite elements use attached points. Better debugging support for instructions. Various workarounds have been implemented to support slightly broken fonts (or rather, fonts not following exactly the TrueType specifications). Contributed programs -------------------- ttf2bdf: ** ** Swapped all the columns in the mapping files. ** Changed the mapping table loader to index on the second column instead of the first. Changed the includes to deal with compilation on Windows. Added some new mapping tables. Fixed an incorrect parameter for Traditional C compilers. Added generation of the _XFREE86_GLYPH_RANGES properties. Change all CRLF's, CR's, or LF's in copyright strings to double spaces. Changed it so gcc 2.8.1 likes the return type of main() again. Changed Makefile.in a bit to make installation more consistent. Changed the lower limit for the vertical and horizontal resolutions to be 10dpi instead of 50dpi. ttf2pfb: Has now rudimentary support for mapping tables (switch `-m') and better PostScript name support for ordinary Type 1 fonts -- nevertheless, it is far from finished, and there are some plans to merge it with ttf2pt1. configure script added. Option `-k' added to keep output file in case of error. `-v' is now really verbose. ttf2pk: ** ** Support for MiKTeX's file searching mechanism added (ttf2pk ** and ttf2tfm are now part of the MiKTeX). ** ** ** Support for rotated glyphs added (only for subfonts; switches ** `-x' and `-y' to activate rotation resp. controlling the y ** offset). If a GSUB table with the `vert' feature is available ** in the font, vertical glyph presentation forms are used. ** Added warning message to the configure script in case the kpathsea library isn't used. Fixed an omission in Bg5.sfd. ** ** Added UBg5plus.sfd for mapping Unicode to Bg5+ encoding. ** Similar SFD files now available: UBg5.sfd, UGB.sfd, UGBK.sfd, ** UJIS.sfd, UKS.sfd. ** Added documentation for dvidrv.btm. Will now compile with kpathsea version 3.3 or newer also. Subfont ligature support added as needed in the HLaTeX package for Korean (switch `-l'). ** ** Since ttf2pk support has been added to teTeX version 1.0 and ** newer, no patch are necessary. ** Fixed a string initialization bug in buildtfm() (file tfmaux.c). Added more documentation about file searching and a full example how to use ttf2tfm. Fixed a small bug in ttf2tfm.c which printed `(null)' instead of nothing for the ttfonts.map entry if the font name prefix string was empty. ttf2tfm will now use the first type 0 kerning table only (instead of the first kerning table only). Both ttf2pk and ttf2tfm will now apply stretching and slanting directly to the outline. This usually yields smaller bounding boxes. ttf2tfm will now output a comment string to the VPL file to illustrate the meaning of the `HEADER' lines. ttfbanner: Added Makefile for emx+gcc compiler. Added autoconf support. Fixed a lot of compilation warnings. Pascal source code ------------------ The Pascal source code has been seriously updated since 1.2. Here are the most important changes. ** ** A. Support for charmaps and the name table ** ** ** The Charmap functions were not correctly implemented before ** 1.3. They are now available in the Pascal API. ** ** ** Similarly, the `name' table was not loaded, and the ** TT_Get_Name function wasn't implemented before 1.3. It is now ** done. ** ** ** The Pascal engine is now feature-complete, except that it ** provides no extensions like the C source code. ** B. Improvements in the glyph loader and the interpreter Several changes were made in order to be able to load more broken fonts, as well as old Apple fonts which happened to use some very rarely-used aspects of the specification. Note that the Pascal bytecode interpreter, contrary to the C version, is not able to silently accept broken glyphs yet, or even use the flag TTLOAD_PEDANTIC. Implementing this in Pascal would require some serious work (unlike to C, where this feature was introduced easily with the use of a few macros to minimize source changes). So TT_Load_Glyph might return an error with the Pascal engine while the C one accept the same request successfully. C. Ports to Delphi and Free Pascal This release has been compiled on the following compilers: - Free Pascal 0.9 (Dos,Linux,Win32,OS/2) - Virtual Pascal 1.1 and 2.0 (Win32 and OS/2) - Turbo Pascal 6.0 and Borland Pascal 7.0 (Dos) - Delphi 1, 2, and 3. It should work with D4 and D5 also. (Windows) Note that most of the test programs will not compile on anything except MS-DOS or OS/2. The debugger also needs the Turbo Vision library. The library, however, should compile fine with all tools cited above. Changes between FreeType 1.1 and 1.2 ==================================== Mostly bug fixes and build fixes. Changes between FreeType 1.0 and 1.1 ==================================== There were various changes since the 1.0 release. Here they are summarized: - Added vertical layout support The engine now loads the vertical header and metrics if available and makes them visible through the new `vertical' field of the face properties (it is set to NULL if no vertical data was found in the font file). The glyph loader now loads all metrics (horizontal and vertical), but still returns the horizontal ones only with the API TT_Get_Glyph_Metrics(). However, TT_Get_Glyph_Bit_Metrics() has been added to extract them from a glyph container. - Serialization of coordinates arrays in TT_Outline() As announced in the previous API reference, the structure of TT_Outline changed slightly, as well as the naming of its fields. The points are now stored in a single array of TT_Vector, instead of two parallel arrays (one for the Xs, the other for the Ys). - New API function TT_Get_Face_Metrics() Useful to access unscaled metrics like left side bearings, advance widths, top side bearings, and advance height, for a given range of glyphs. - New extension: ftxcmap.c Used by some applications to enumerate and parse the charmap tables in an easier way. - New extension: ftxpost.c With this extension you can access the PostScript glyph names given in the `post' table. - New extension: ftxwidth.c This extension is used to parse the `glyf' table to extract the bounding boxes of a given range of glyphs. This is much faster than loading individual glyphs. - The FreeType engine is now THREAD-SAFE and REENTRANT However, the implementation of ttmutex must be refined for your system -- the default one is a dummy and doesn't do anything! Beware! THIS IS STILL IN BETA. The thread-safe and reentrant builds now compile and seem to run well when used with a single thread. Some efforts have been spent to check the coherency of the lock contentions within the engine, but we haven't tested multi-threading heavily. - Large internal re-organization Too technical to explain shortly, but results in a much better memory footprint and smaller code, especially when opening multiple faces. - Fixes/enhancements to the interpreter The infamous Monotype.com bug (a new free font released by Microsoft Typography a few days after the FreeType 1.0 release!) is fixed, of course, as well as few other little and unpleasant artifacts... The interpreter was also seriously re-organized to allow the use of a very large `switch' statement, instead of a jump table, which results in smaller and faster code on some systems (depending of the compiler too). Users of the library can experiment with the TT_CONFIG_OPTION_INTERPRETER_SWITCH configuration macro to test this. - Single object compilation mode The core engine can now be compiled into a single object file. This allows optimizing compilers to do more global optimizations, and get rid of many of the `intermediate' internal symbols used to link internal engine components together. The engine now takes only 48kByte of stripped Intel object code! - DLL compilation mode In order to allow the compilation of the library as a DLL, the keyword EXPORT has been added as a prefix to all high-level API functions found in `freetype.h'. Define it to the value you need before `#include "freetype.h"' when building the DLL (if undefined it will default to nothing within this header file). (Apparently, this is only useful on Win32, maybe on OS/2.) - Renamed configuration macros These were renamed to forms of TT_CONFIG_OPTION_XXXXX_YYYYY. They're located in ttconfig.h and can be defined/undefined manually by developers who want to tune the compilation of the engine: TT_CONFIG_OPTION_EXTEND_ENGINE Allows extensions to be linked with the single object engine. If you don't need any of them, you may save one or more kilobytes by undefining it. TT_CONFIG_OPTION_GRAY_SCALING Allows the compilation of the gray-scaling (font smoothing) code in ttraster. If undefined, some APIs won't be available: TT_Set_Raster_Palette(), TT_Get_Glyph_Pixmap(), TT_Get_Outline_Pixmap() TT_CONFIG_OPTION_INTERPRETER_SWITCH Uses a large `switch' statement in the bytecode interpreter instead of a constant call-table. Depending on your processor and compiler, this can lead to significant reduction of code size and/or increase of performance. TT_CONFIG_OPTION_THREAD_SAFE When defined, a thread-safe version of the engine is built. A thread-safe version is a bit bigger, probably not slower, than a non-threaded build. ATTENTION: You must redefine the file `lib/ttmutex.c' for your own platform to get it to work correctly. Some more options may come in the future... - New API functions TT_MulDiv() and TT_MulFix()" To help you compute `a*b/c' with 64-bit intermediate precision, or `a*b/0x10000' with the same one... These are not necessarily the fastest functions but they are clearly portable and overflow-safe. Your runtime/compiler may provide better replacements, though... Changes between FreeType Beta and 1.0 ===================================== There were a number of changes since the public beta: I. Bug fixes ------------ The following bugs have been fixed in this release: - Incorrect advance width and left side bearings The glyph loader has been re-designed to match the values found in the pre-calc tables... - Problems when opening multiple fonts Fixed. A stupid bug in the i/o component. - Problems with some Georgian fonts Fixed. Discovered some new undocumented opcodes behaviour... - Buglets in the test programs which made them return invalid error codes Fixed. - Memory leaks when trying to open broken some font files Fixed. Waiting for more broken fonts to test... - Non-square resolutions don't work or display correctly They now work very well! - The scan-line converter, while in font-smoothing mode, doesn't perform horizontal drop-out control This wasn't really bug, but the feature has been correctly added. The remaining `features' persist, as they're not essential yet: - The `rotated' and `stretched' flags do not work (glyph loading will then return errors). However, it is still possible to rotate or transform any outline without setting these flags. - We always use drop-out mode number 2, as some of the values returned by some `cvt programs' seem invalid for now... Note also that an `event hook/callback' has been introduced in this release, but is still under alpha (not even beta; it is commented out currently). You should not rely on this... II. Code changes ---------------- 1. API Changes A few API changes were necessary in order to support important features, or future improvements which will come in later releases. - TT_Set_Instance_Resolution() was renamed to TT_Set_Instance_Resolutions(). - TT_Set_Instance_PointSize() has disappeared. Instead, the following APIs have been defined: TT_Set_Instance_CharSize() TT_Set_Instance_CharSizes() TT_Set_Instance_PixelSizes() - The TT_Engine class has been introduced. It models one instance of the library, and is used to allow re-entrance and shared library code. The functions which now depend on a TT_Engine parameter are: TT_Init_FreeType() TT_Done_FreeType() TT_Open_Face() TT_Open_Collection() TT_Set_Raster_Palette() TT_Get_Outline_Bitmap() TT_Get_Outline_Pixmap() Note that there is _no_ sharing of objects between distinct engines. - Each face and instance object have an inside pointer which use is reserved to client application. Several functions are defined to set and read it: TT_Set_Face_Pointer() / TT_Get_Face_Pointer() TT_Set_Instance_Pointer() / TT_Get_Instance_Pointer() - TT_Apply_Outline_Matrix() has been renamed to TT_Transform_Outline(). TT_Apply_Outline_Translation() has been renamed to TT_Translate_Outline() TT_Apply_Vector_Matrix() has been renamed to TT_Transform_Vector() all for the sake of clarity. 2. Structural changes Some structures have evolved. - The instance metrics have now two new fields which are `x_scale' and `y_scale'. Each one is a scaling factor, expressed in the 16.16 fixed float format (TT_Fixed), used to convert one distance expressed in font units into the same distance in fractional (26.6) pixels. - A new structure TT_BBox has been defined to describe an outline's bounding box. - The outlines are now full-class citizen. It is possible to create new outlines, copy, clone, transform, translate and render them through specific methods of the TT_Outline class (previously called TT_Glyph_Outline). Read the API reference for a complete listing. - The glyph metrics have a new structure: they contain a TT_BBox field, a TT_Outline field, as well as three metrics values, which are `bearingX', `bearingY', and `advance'. Read the file `glyphs.txt' for more information about their definitions and uses. 3. Small but IMPORTANT changes - The `max_Faces' field of a face's properties has disappeared. It is replaced by `num_Faces' which gives the total number of fonts embedded in a collection (the previous field gave the total minus one). - TT_Load_Glyph() now returns correctly placed outlines, and computes advance widths which match the pre-calc values in the "hdmx" table in nearly all cases. - TT_Get_Glyph_Metrics() returns grid-fitted metrics for hinted glyphs (i.e., loaded with the TTLOAD_HINT_GLYPH, or TTLOAD_DEFAULT, flags). This includes the bounding box. To get the exact bounding box of a hinted glyph, you should extract its outline, then call TT_Get_Outline_BBox(). - Some improvements in the glyph loader, which improves drastically the placement of glyphs (especially composite ones) which previously caused trouble for some fonts (e.g. goudy.ttf). - Several minor improvements in the interpreter to improve rendering and bounds checking... - Up-to-date Pascal source code, with output equivalent to the C tree... --- END ---