
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 an  additional flag  TTLOAD_PEDANTIC to
    force pedantic handling of the glyph instructions.


    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 <joukj@hrem.stm.tudelft.nl>.


    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 has  been added.  Antoine  Leca has written  a new,
    light-weight  graphics driver (gw_win32.c)  which fits  better in
    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 has 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  on   16bit  MS-DOS  compilers.
    Consequently, the files hugefile.c  and hugemem.c has 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  TT_Load_PS_Names()  which returned  a local,  thus
    invalid pointer.

**
**  Support  for   embedded  bitmaps  has  been   added  (thanks  to
**  YAMANO'UCHI Hidetoshi  <mer@interlink.or.jp> 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
    use 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
    <prefix>/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.


      Reduced the line length of _XFREE86_GLYPH_RANGES properties to
      256 instead of 512.


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