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 instead of by (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).