Nov 1996: t1lib-0.1-alpha
-------------------------

- first public release of t1lib with all basic functionality



May 1997: t1lib-0.2-beta
-------------------------


- Now uses autoconf to configure the software for the system.


- All functions put into one library.


- ATTENTION: Argument order for the glyph-setting functions changed to be 
             consistent with the info functions. Programs that already use
	     t1lib have to be rewritten  (sorry....)


- Function for computing the width of a string added (T1_GetStringWidth()).


- Function for computing the BoundingBox of a string added
  (T1_GetStringBBox()).


- Function T1_GetMetricsInfo() added. It returns a struct containing width,
  bounding box, number of characters and horizontal position of the characters
  in character space coordinates (afm-units).  


- Function T1_GetBBox() renamed to T1_GetCharBBox() for consistency reasons. 


- All exit() calls removed from library and replaced by appropriate error
  return codes.


- t1lib now optionally supports a logfile for logging of error- and 
  warning-messages at runtime. The "verbosity" of this logfile may be chosen
  by the user.


- Documentation more complete.



July 1997: t1lib-0.3-beta
-------------------------


- Code for placing character bitmaps in T1_SetString() slightly advanced; the 
  restrictions concerning slanted fonts are eliminated.


- T1_GetStringBBox()/T1_GetCharBBox() extended. It is now possible to get the
  bounding box if the font is slanted. This is implemented by examining the 
  characters outline at 1000bp. 
 

- Some Bugs in the code managing linked lists of font sizes have been
  corrected. 


- Bug in T1_CopyFont() has been corrected. This should work now.


- The behavior during configuration file searching has been changed to
  be compatible to well known UNIX-conventions.


- As the main new feature in this release t1lib now has direct support
  for X11 (optionally). There is a set of functions that act similar
  to XDrawText(), i.e. they draw directly into a drawable (pixmap or
  window). 

    - Caching of bitmaps of the X11 rastering functions is also done
      in the X-Server for maximum performance (although it is not as
      fast as I dreamed of, admittedly).
      
    - X11 rastering functions use the current foreground/background
      colors

    - The X11 rastering functions implement automatical antialiasing
      between foreground and background color
 
    - The X11 rastering functions provide an opaque and a transparent
      mode

    - The X11 rastering functions can draw into drawable of any depth 
      (provided the depth is large enough)


- A new target has been added to the makefiles allowing to remove 
  a t1lib-installation automatically from a system.



December 1997: t1lib-0.4-beta
-----------------------------


- Many memory allocation bugs fixed. t1lib is now "libefence-proved".


- Kerning and Metrics-Lookup rewritten. The corresponding functions are now
  based on character indices rather than on character names which makes them
  up to 8 x faster than before, depeding on data and context.


- Raph Levien (raph@acm.org) contributed a fast algorithm for subsampling
  which improves Antialiasing time significantly.


- Fred L. Drake, Jr. (fdrake@acm.org) contributed a Python-interface
  to t1lib.  This allows Python programmers to make use of Adobe Type
  1 fonts. This package, called t1python, is distributed with t1lib in
  an independent subdirectory of the distribution. See README.t1python
  for more information on t1python.


- Bitmaps and antialiased bitmaps may now be padded 8, 16 or 32 bits. This
  allows (with some restrictions) somewhat faster concatenation of
  characterbitmaps to stringbitmaps. The padding-value may be set and queried
  at runtime.


- The optional X11-interface, introduced in t1lib-0.3-beta, has been reduced
  to a simple wrapper. X11-pixmap caching has been completely dropped since it
  has proven to be too inefficient. However, at the level of the function
  calls, nothing has changed. 


- Configuration of t1lib (with or without X11-interface) may be queried by
  applicationprogrammers at compiletime or by applications at runtime. 


- Two functions for informations on fonts have been added:
  
  1) T1_GetFontBBox(): Return a fonts' bounding box.

  2) T1_GetAllCharNames(): Return a list of all character defined in a Type 1
			   font. This might be of interest if somebody wants
			   to set up new encodings.


- Function T1_CloseLib() added. This function allows to completely free the
  data-structures of t1lib. T1_CloseLib() should be called in future when an
  application using t1lib exits. 


- Many other things not worth to be metioned ...



March 1998: t1lib-0.5-beta
--------------------------


- Changed the license to the GNU General Public Library License (LGPL)


- Definition of INFINITY removed from
  lib/type1/[regions.c|regions.h|t1imager.h]. Collided with a
  definition in math.h on OS/2.


- Implemented proper handling of environment variables CFLAGS, LDFLAGS
  and CC during build process.


- Added target 'without_doc' for people who have a very rudimentary or
  no LaTeX-System at all


- Fixed some bugs that appeared when font files from database were not
  found


- Clipmask Bug in the X11-rastering functions fixed


- Bugs in VM-reallocation (T1_LoadFont()) repeatedly fixed. It is now
  ANSI-C compliant.


- Alignment of VM changed. This was needed on some systems.


- Set of functions for accessing information from FontInfo dictionary
  is now complete. This introduces  the new functions
  T1_GetFullName(), T1_GetFamilyName(), T1_GetWeight(),
  T1_GetItalicAngle(), T1_GetIsFixedPitch(), T1_GetVersion(),
  T1_GetNotice(). 


- ATTENTION: In the above context, T1_GetPostScriptName() has been
  renamed to T1_GetFontName() for consistency reasons, sorry. 


- ATTENTION: All types "unsigned char (*)" have been changed to 
  char (*) in the API functions. This was necessary while adapting
  t1lib to ANSI-standard to make it portable. Sorry for this
  confusion. 


- New function T1_AddFont(): Fonts can now be added to the font
  database at runtime. This means especially, one can ignore a
  FontDataBase file thus can start t1lib-programs on single fontfiles
  without doing a complete setup before. 


- There is now also the possibility to ignore the currently active
  configuration file, thereby setting all search paths to the current
  working directory and having an empty font data base. This is meant
  for small applications that work on single files. 


- t1lib is now able to work with fonts without corresponding
  afm-files. AFM-information can be produced from pfa- and
  pfb-files. This, of course, refers only to character-metrics
  information. 


- A function T1_WriteAFMFallbackFile() is provided which allows to
  dump metrics information to a valid AFM-file.  


- New subdirectory type1afm created which contains type1afm, a program
  to extract afm files from Type 1 font files. 


- Renamed definitions MAX, MIN, ABS, TRUE and FALSE because they
  collided with system header files on some systems.


- Corrected antialiasing functions. The metrics should now be as
  correct as possible and black pixel at the right edge of the bitmaps
  should not appear any more.


- Handling of unencoded characters in strings (such as adieresis in
  AdobeStandardEncoding) is now consistent in rotated and non-rotated 
  glyphs.   


- A few functions have been added to get information on the file search 
  environment and to manipulate the search paths from within applications.


- Mixed endian setups (i.e., client and X-server on different machines
  with different endianess) should now be handled correctly.


- In summary t1lib should now be much more portable than before. 


- Update to t1python-0.3



March 1998: t1lib-0.6-beta
--------------------------


- Cleaned up the sources in type1-directory


- Functions Xalloc() and Xfree removed. x11dummy.c from list of source files
  removed.


- A few bugs fixed


- Character positioning rewritten. It does now handle strings
  correctly in which the leftmost pixels does not belong to the first
  character and the rightmost pixels do not belong to the last character.


- t1lib now substitutes .notdef for defined character names that have
  no corresponding charstring. This is a workaround for some fonts in
  the ghostscript distribution (e.g., s050000l.pfb)


- Separated the X11-wrapper from the rest of t1-stuff. t1lib now
  consists of two libraries and two include files. 


- Cleaned up configuration and compilation process.



May 1998: t1lib-0.7-beta
------------------------


- Athena libraries are explicitly located for non-standard system


- glyph-structure changed. glyph.metrics.characterWidth is replaced
  glyph.metrics.advanceX and an entry glyph.metrics.advanceY is added.


- Interpretation of the sign of glyph.metrics.descent has changed.


- String-rastering functions now support Underlining, Overlining and
  Overstriking. 


- Functions for overriding default line-parameters implemented.


- Whitespace at beginning and ending of glyphs is now correctly recorded into
  leftSideBearing and RightSideBearing.


- Function T1_ConcatGlyphs() added to API. It concatenates two glyphs of
  identical depth with an optional displacement inserted.


- xglyph output window has changed for X-rastering functions. It is now of
  constant size with the logical origin in the center. Too large glyphs are
  simply clipped.


- t1lib can be compiled and run on VMS thanks to John Hasstedt
  (John.Hasstedt@sunysb.edu). A configure.com script for building on VMS is
  included in the toplevel directory.


- T1_GetMetricsInfo() and T1_GetStringBBox() fixed. Now results are correct
  also if the leftmost pixel in a glyph doesn't belong to the first char and if
  the rightmost pixel does not belong to the last character.


- Leading and trailing white space in glyphs should now be recorded
  consistently and correctly for all rastering functions.


- xglyph can now display a character map of a font.


- Global variable T1_errno introduced. It basically works the same way
  as the errno in libc. This allows applications a unified
  error-handling. 


- Update to t1python-0.7.



November 1998: t1lib-0.8-beta
-----------------------------


- T1_GetAllCharNames() returned invalid list if the Charstrings dictionary was
  larger than the actual number of charstrings defined (which is perfectly
  valid, even if it does not make much sense) --> fixed.


- 4 x Antialiasing implemented. This can improve the quality at small sizes
  once more, at the cost of some computational and memory requirement. It is
  possible to work with 2 x and 4 x concurrently.


- Function T1_GetLibIdent() added to API.


- Function T1_SetRasterFlags() added to API. It allows to selectively enable
  or disable certain rasterizer features like, e.g.,  hinting.


- xglyph extended to support 4 x antialiasing. 


- xglyph now recognizes a few commandline options, primarily intended for
  debugging purposes.


- xglyph is now somewhat more intelligent (and faster) if slanting,
  extending or reencoding is applied to a font.


- New function T1_SetDefaultEncoding(). It allows to set a default 
  encoding vector which then is applied to all subsequently loaded fonts 
  that have StandardEncoding. 


- Bug in Type 1 rasterizer corrected which prevented fonts with non-standard
  lenIV values from being correctly decrypted (Charstring decryption).


- Internal ISOLatin1Encoding removed from rasterizer since there's no reason
  for mainting this encoding scheme internally 


- tlib now has notion of "Encoding Schemes". The format of encoding files is
  extended correspondingly and is backward compatible. 


- Memory leaks eliminated, thanks to David Huggins-Daines. 


- Some slight performance improvements.


- Kerning performance improved. Moreover, kerning pairs need no longer be 
  alphabetically sorted.


- AFM-parser modified to work with DOS-style AFM-files.


- Some bugs in scan-code of Type 1 rasterizer corrected. Scanner is now aware 
  of pfb-blocks and can scan files with multiple binary data segments.


- t1lib now uses GNU-libtool, thanks to Hirotsugo Kakugawa
  (h.kakugawa@computer.org) 


- An encoding file for IsoLatin2 charset is included thanks to Jiri
  Pavlovsky (jirap@bajt.cz).


- The angle-argument of the rastering functions has been replaced by a more
  general transformation specification. This is an incompatible change to 
  previous versions, but I think it should be worth it.


- t1lib can now handle fontfile names with arbitrary extensions and
  even without extension.


- t1lib compiles and runs under Win32 using the cygwin32 toolkit.


- Maximum number of stem-hints enlarged (-> 256) because 128 were not enough
  for complicated fonts.



May 1999: t1lib-0.9
-------------------


- Sub-Pixel positioning for Antialiasing functions enthanced (It was in fact
  not correct before.


- Multiple Master fonts are rejected instead of SIGSEGV (nearly as
  professional as supporting them ;)


- An additional set of functions allows access, filling and manipulation of
  outlines.


- Functionality for non-antialiased "bytemaps".


- "Smart Antialiasing", allows to automatically let t1lib decide what AA-level
  to use. The switchlimits are adjustable.


- An AFM-filename may explicitly be specified. This suppresses t1lib´s search
  for these files. This allows interfacing with other path search systems like
  kpathsea. This was suggested by Nicolai Langfeldt (janl@math.uio.no).


- Some problems with aspect ratios different from 1 and transformed glyphs
  fixed.


- Support for Right-To-Left typesetting. This might be experimental because I 
  don't know the rules for this exactly.


- In the context of Right-To-Left typesetting T1_ConcatGlyphs() expects one
  additional argument "mode". 
  ATTENTION: This is an incompatible change with respect to V. 0.8.


- abort()-calls in type1-sources are caught by longjmp(). t1lib does not
  any longer exit a program. Rather, errors may be handled by the user.


- If a rastering operation did not produce any black pixels, the rastering 
  fuctions do not return a NULL-glyph any longer. Rather, a glyph with the
  correct metrics and NULL-bitmap pointer is returned. This seems to come 
  closer to accepted standards.


- The t1python-package is currently not distributed with t1lib because the 
  interface is not up to date.


- A lot of bugs fixed (and a lot of others introduced, of course :)




June 1999: t1lib-0.9.1
---------------------


- Several Bug-fixes, some functions that have been reported to be missing by
  users, but no general new features.


- New functions T1_GetExtend(), T1_GetSlant() and T1_GetTransform() which give
  access to currently active values of fontlevel transformations


- New function T1_GetNoKernPairs() which gives access to the number of defined 
  kerningpairs.


- New functions to query the grayvalue settings (T1_AAGetGrayValues(),
  T1_AAHGetGrayValues() and T1_AANGetGrayValues()) 


- Arbitrary linear transformations on fontlevel including caching using
  T1_TransformFont() (on suggestion and patches by Derek B. Noonburg,
  (derekn@foolabs.com) 


- Introduction of the initialization flag T1_NO_AFM which suppresses use of
  AFM data. This limits the functionality of t1lib considerably but
  applications that do not need those advanced functions can gain some
  performance boost while loading fonts because AFM files are not parsed and
  the mapping tables are not setup (also by Derek B. Noonburg)


- xglyph clips output window for the function fonttable() to the physical
  screen size. This is to prevent from freezing or exceeding resources if the
  fonttable button had accidentally been pressed while a large size was active.


- The utility function T1_DumpPixmap() removed from API. New function
  T1_XImageFromGlyph() added to X11 interface. This function allows, together
  with the Xpm-library function XpmWriteFileFromImage(), to write xpm-files
  from glyphs of arbitrary depths, colors, etc ...


- Functions T1_CopyOutline() and T1_FreeOutline() added to the outline interface.


- Fixed alignment problem on 64bit architecture.



September 1999: t1lib-0.9.2:
----------------------------


- Support for EMX-environments under MSDOS. This concerns the file locating
  routines. 


- t1lib now allows for charstring code 15 and escape code 15 by ignoring
  these. They may appear in some old Adobe fonts.


- Makefiles are more independent of GNU make.


- Finally, undefined/missing characters are handled consistent in all rastering
  functions by substituting .notdef. 


- Several bug-fixes



November 1999: t1lib-1.0:
-------------------------


- Bug-fixes. 


- There happen to exist different assumptions about what exactly ISOLatin1Encoding
  is. Especially the name for char 45 (dec) is not uniquely specified in 
  ISO 8859-1. Thus t1lib provides two encoding files ISOLatin1Encoding one
  which (PSLatin1.enc) is compatible with PostScript Level 2 and above.



March 2000: t1lib-1.0.1:
-------------------------


- A few bug Fixes.


- lenIV=-1 is now handled. According to an undocumented Adobe convention
  lenIV=-1 indicates suppressing of charstring encryption.
 

- Patches to compile t1lib und MS Visual C++ 6.0. In case something goes
  wrong, please contact Nakano Hideo (hideo@mb.infoeddy.ne.jp).



February 2001: t1lib-1.1.0:
---------------------------


- Bug Fixes.


- Functions T1_GetFontFilePath() and T1_GetAfmFilePath() which return the
  complete path of the files used by t1lib.


- Fixed parser code which previously failed on ASCII-encrypted files in 
  which the hex-lines were separated by <LF><CR> instead of by <LF> (Yes, 
  there such DOSian files out there ...).


- Multiple inclusion protection for t1lib.h


- T1_QueryLigs() fixed. It did not work correct if successors and/or 
  ligatures were not in the current encoding.


- New patches for VMS by Martin P. J. Zinser (zinser@decus.de).


- Patch by Sergey Babkin (babkin@bellatlantic.net) to correct the rasterizer 
  to respect StdStemWidths.


- General support for font subsetting.


- Dokumentation also provided as pdf for those people who do not have LaTeX
  installed. This is due to suggestions and patches by Nguyen-Dai Quy
  (NDQ@iris.ltas.ulg.ac.be).



April 2001: t1lib-1.1.1:
------------------------


- Update to libtool-1.3.5.


- T1_GetFontBBox() also accepts specification consisting of floating point
  numbers (as suggested by Derek B. Noonburg (derekn@foolabs.com)).


- Within the near future the t1lib-webpage will be no longer available  
  because I will change my employer.


- Similarly, the sources will be distributed from sunsite only from then on.


- The Author's eMail-address will also become invalid in the near future. The
  new and hopefully permanent eMail.address will be "Rainer.Menzner@web.de".



July 2001: t1lib-1.2:
----------------------


- Fixed bug in subsetting code.


- Fixed bug in AFM-parser code.


- Fixed kerning mapping code. Kerning did not work correctly for characters
  that appeared multiple times in an encoding vector. 


- In the same context a new function, T1_GetEncodingIndices() has been added
  to the API. It returns an array of indices (by contrast,
  T1_GetEncodingIndex() returns only the lowest index found).


- Support for composite characters.


- Additional support for dvips encoding files (thanks to suggestion and
  contribution by Nicolai Langfeldt (janl@linpro.no).


- Documentation is installed in PostScript and PDF format, but no longer in
  DVI format.



October 2001: t1lib-1.3:
------------------------


- *Really* an update to libtool-1.3.5


- Global Font Metrics Information is loaded from AFM files in order to be able
  to read the typographic ascender. Line ruling did not behave as
  documented. However, problems could still exist because the typographic
  ascender specification is optional in AFMs.


- Reorganized search path handling and, in particular, the respective
  documentation is more detailed. 


- The configuration file now allows multiple lines of one type of search path
  specification and it is also possible to quote path specification in order
  to specify paths that contains special characters like spaces, colons, etc. 


- Multiple font databases are supported. 


- T1_PrintLog() extended to accept a variable argument list. 


- The environment variable T1LIB_LOGMODE is evaluated to give the user the
  chance to specify a loglevel and hence to detect t1lib-problems even if the
  application programmer did not enable the log file features.


- Further bug fixes



November 2001: t1lib-1.3.1:
---------------------------


- Color problem in t1x11-module fixed.


- Fixes in AFM parser. Among others, Version had been read as name, instead of
  as string. This led to a failure to scan global font info for some standard AFMs.


- Fixes in of OpenVMS special code


- Further Fixes



January 2003: t1lib-5.0.0:
--------------------------


- Forced PostScript target in the doc directory to file.


- Subsetting code extended in order to ensure that components of
  composite characters are also part of the subset.


- Hinting meachanism reworked in order to get rid of some 
  rasterizing artifacts.


- Experimental support for stroked fonts (PaintType=1)


- Experimental support for stroking standard ATM fonts with PaintType=0.


- For historical reasons, there happened to exist a few documented API 
  functions that did not adhere to the T1_... naming convention. After
  considering the pro's and con's, I have decided to cleanup the interface,
  thus making this version incompatible to the previous version. Especially 
  in the type1 subdirectory there are still a lot of global symbols, but at 
  least these are not part of the documented API. The following functions 
  are affected:

  CheckForInit()           --> T1_CheckForInit()
  CheckForFontID()         --> T1_CheckForFontID()
  T1_Get_no_fonts()        --> T1_GetNoFonts()

  Furthermore, I have removed and made static a few functions which
  accidentally had found their way into t1lib.h, but which had not been part 
  of the documented API.

  I'm sorry if this causes inconveniences ...


- The new version, 5.0.0, follows as consequence from the issues discussed 
  above. It is defined by the libtool quantities CURRENT, REVISION and AGE.


- Functions for drawing rectangles.


- Bug Fixes


- Please also have a look at the topic "Future" in README.t1lib-5.0.0.



February 2004: t1lib-5.0.1:
---------------------------


- Support for Flex was not adapted to the changes from 5.0.0. This led to
  rasterization errors in fonts that use the Flex functionality --> fixed.


- Bug Fixes



April 2004: t1lib-5.0.2:
------------------------


- Changes not updated for this version



Mai 2005: t1lib-5.1.0:
----------------------


- Check against MultipleMasterFonts somewhat more tolerant, so that
  Type 1 Fonts automatically created from Multiple Master Fonts (e.g.
  using Mmpfb) should now be acceptable.


- The configure-machinery had been somewhat out of date and has been 
  updated. The distributed configure script has been generated by
  AutoConf 2.59 and the redistributed libtool parts are taken from  
  GNU libtool 1.5.10.


- Top-Level TeX-file in the doc subdirectory adapted to recent TeX
  systems' requirements.


- Added IsoLatin9.enc to distribution.


- Subsetting extended so that it works for SEAC-constructed composites
  even if no AFM composite character information is available


- Somewhat more intelligent defaults for subsetting when composite
  characters are included in the subset.


- Reallocation had been broken by relocation of internal StandardEncoding
  vector. This problem turned out on systems where realloc() actually
  returned a different pointer. 


- Fix for outline code on 64bit systems. This involves a redefinition
  of the T1_PATHPOINT struct. This should be uncritical because for 32bit
  systems there is no difference, whereas on 64bit systems, this has never 
  worked correctly before.


- DESTDIR support in Makefile.in by Volker Zell


- Support for XLFD font database format (in which the fonts' names appear
  in the first place on a line).


- Further Bug Fixes



December 2006: t1lib-5.1.1:
---------------------------

- DESTDIR support was missing and has been addded in install-target for type1afm.

- A bug fix in Anti-Aliasing subsampling code, which could make t1lib crash
  under certain conditions.

- Small number of further fixes, in particular with respect to the build 
  mechanism.



December 2007: t1lib-5.1.2:
---------------------------

- Small number of fixes reported by users. The fixes pertain to a
  vulnerability issue, memory access issues.

- More decent handling if Encoding and / or FontBBox specification are missing
  (which is invalid with respect to the specification, but recoverablel).
