Still to do or to check!!!
==========================

API functions
-------------

    TT_Get_Glyph_Big_Metrics() now  returns correct vertical bearing
    values (both linear and pixel values).

    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.

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


Global compilation macros
-------------------------

**
**  Added option  TT_CONFIG_OPTION_NO_INTERPRETER to desactivate the
**  bytecode interpreter completely.  This option is off by default.
**

Miscellaneous
-------------

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

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




Changes between FreeType version 1.3 and version 1.4
====================================================

**
**  The Pascal version of FreeType  was splitted from the C version,
**  both to  allow for easier  maintenance and to  reduce downloaded
**  sizes.
**

Documentation
-------------

    Therefore,  documentation  for  this  Pascal  package  have been
    reviewed and is now more targetted to a typical Pascal user.

API types
---------

    TT_Bool has been introduced to match the C library.

    TT_Big_Glyph_Metrics  has been  extended  to include  the linear
    scaled distances.

API functions
-------------

**
**  New function  TT_FreeType_Version() to  get the major  and minor
**  version dynamically.
**

    TT_Char_Index() now uses a TT_ULong for character codes.


Miscellaneous
-------------

    The  FreeType license  has been  reworded to  improve legibility
    (thanks to Ruthanna Wilson <ruthanna@us.ibm.com>).


Changes between FreeType version 1.3 and version 1.3.1
======================================================

    None (a C bug was fixed).

Changes between FreeType version 1.0 and version 1.3
====================================================

**
**  Note  that releases  1.1  and  1.2  did not  contain the  Pascal
**  version  (which  was not  maintained at  the same  rate as the C
**  version).  A big effort  was done  for version  1.3 to  keep the
**  base of the library in sync for both languages.
**

Documentation
-------------

    Improved installation instructions.


    Complete revision of almost all documentation files.

**
**  Documentation about possible patent restrictions added.
**

API functions
-------------

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


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


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



    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 error code TT_Err_Glyf_Table_Missing (0x89) used to indicate
    a missing `glyf' table.



    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.


Test programs
-------------

Miscellaneous
-------------

    Better debugging support for instructions.

    Various  workarounds have been  implemented to  support slightly
    broken  fonts  (or  rather,  fonts  not  following  exactly  the
    TrueType specifications).


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

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