source: trunk/third/freetype/docs/CHANGES @ 18171

Revision 18171, 74.2 KB checked in by ghudson, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18170, which included commits to RCS files with non-trunk default branches.
Line 
1LATEST CHANGES BETWEEN 2.1.3 and 2.1.2
2
3  I. IMPORTANT BUG FIXES
4
5    - FT_Vector_Transform had been incorrectly modified in 2.1.2, resulting
6      in incorrect transformations being applied (for example, rotations
7      were processed in opposite angles).
8
9    - The format 8 and 12 TrueType charmap enumeration routines have been
10      fixed (FT_Get_Next_Char returned invalid values).
11
12    - The PFR font driver returned incorrect advance widths if the outline
13      and metrics resolution defined in the font file were different.
14
15    - FT_Glyph_To_Bitmap now returns successfully when called with an
16      FT_BitmapGlyph argument (it previously returned an error).
17
18    - A bug in the Type 1 loader that prevented valid font bounding boxes to
19      be loaded from multiple master fonts.
20
21    - The SFNT validation code has been rewritten.  FreeType can now load
22      "broken" fonts that were usable on Windows, but not with previous
23      versions of the library.
24
25    - The computation of bearings in the BDF driver has been fixed.
26
27    - The Postscript hinter crashed when trying to hint certain glyphs (more
28      precisely, when trying to apply hints to an empty glyph outline).
29
30    - The TrueType glyph loader now supports composites in "Apple format"
31      (they differ slightly from Microsoft/OpenType ones in the way transform
32      offsets are computed).
33
34    - FreeType was very slow at opening certain asian CID/CFF fonts, due
35      to fixed increment in dynamic array re-allocations. This has been
36      changed to exponential behaviour to get acceptable performance
37
38  II. IMPORTANT CHANGES
39
40    - the PCF driver now supports gzip-compressed font files natively. This
41      means that you'll be able to use all these bitmap fonts that come
42      with XFree86 with FreeType (and libXft/libXft2, by extension).
43
44    - The automatic and postscript hinters have both been updated.  This
45      results in a relatively important increase of rendering quality since
46      many nasty defaults have been supressed.  Please visit the web page:
47
48        http://www.freetype.org/hinting/smooth-hinting.html
49
50      for additional details on this topic.
51
52    - The "load_flags" parameter of FT_Load_Glyph is now an FT_Int32
53      (instead of just being an FT_Int).  This breaks source and binary
54      compatibility for 16bit systems only, while retaining both of them for
55      32 and 64 bit ones.
56
57      Some new flags have been added consequently:
58
59        FT_LOAD_NO_AUTOHINT   :: Disable the use of the auto-hinter
60                                 (but not native format hinters).
61
62        FT_LOAD_TARGET_NORMAL :: Hint and render for normal anti-aliased
63                                 displays.
64
65        FT_LOAD_TARGET_MONO   :: Hint and render for 1-bit displays.
66
67        FT_LOAD_TARGET_LCD    :: Hint and render for horizontal RGB or BGR
68                                 sub-pixel displays (like LCD screens).
69                                 THIS IS STILL EXPERIMENTAL!
70
71        FT_LOAD_TARGET_LCD_V  :: Same as FT_LOAD_TARGET_LCD, for vertical
72                                 sub-pixel displays (like rotated LCD
73                                 screens).  THIS IS STILL EXPERIMENTAL!
74
75      FT_LOAD_MONOCHROME is still supported, but only affects rendering, not
76      the hinting.
77
78      Note that the 'ftview' demo program available in the 'ft2demos' package
79      has been updated to support LCD-optimized display on non-paletted
80      displays (under Win32 and X11)
81
82    - The PFR driver now supports embedded bitmaps (all formats supported),
83      and returns correct kerning metrics for all glyphs
84
85    - The TrueType charmap loader now supports certain "broken" fonts that
86      load under Windows without problems.
87
88    - The cache API has been slightly modified (it's still a beta!):
89
90       - The type FTC_ImageDesc has been removed; it is now replaced by
91         FTC_ImageTypeRec.  Note that one of its fields is a `load_flag'
92         parameter for FT_Load_Glyph.
93
94       - The field "num_grays" of FT_SBitRec has been changed to "max_grays"
95         in order to fit within a single byte.  Its maximum value is thus 255
96         (instead of 256 as previously).
97
98
99  III. MISCELLANEOUS
100
101    - Added support for the DESTDIR variable during "make install".  This
102      simplifies packaging of FreeType.
103
104    - included modified copies of the ZLib sources in 'src/gzip' in order
105      to support gzip-compressed PCF fonts. We do not use the system-provided
106      zlib for now, though this is a probable enhancement for future releases
107
108    - The DocMaker tool used to generate the on-line API reference has been
109      completely rewritten.  It is now located in
110      "src/tools/docmaker/docmaker.py".  Features:
111
112        - better cross-referenced output
113        - more polished output
114        - uses Python regular expressions (though it didn't speed the
115          program)
116        - much more modular structure, which allows for different "backends"
117          in order to generate HTML, XML, or whatever format.
118
119      One can regenerate the API reference by calling:
120
121         python src/tools/docmaker/docmaker.py \
122                --prefix=ft2 \
123                --title=FreeType-2.1.3 \
124                --output=<outputdirectory>
125                include/freetype/*.h \
126                include/freetype/config/*.h \
127                include/freetype/cache/*.h
128
129    - A new, experimental, support for incremental font loading (i.e.,
130      loading of fonts where the glyphs are not in the font file itself, but
131      provided by an external component, like a Postscript interpreter) has
132      been added by Graham Asher.  This is still work in progress, however.
133
134    - A new, EXPERIMENTAL, path stroker has been added.  It doesn't suffer
135      from severe rounding errors and treat bezier arcs directly.  Still
136      work in progress (i.e. not part of the official API).  See the file
137      <freetype/ftstroker.h> for some of the details.
138
139    - The massive re-formatting of sources and internal re-design is still
140      under-way.  Many internal functions, constants, and types have been
141      renamed.
142
143
144========================================================================
145
146LATEST CHANGES BETWEEN 2.1.2 and 2.1.1
147
148  I. IMPORTANT BUG FIXES
149
150    - Many font drivers didn't select a Unicode charmap by default when
151      a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS options
152      enabled), causing many applications to not be able to display text
153      correctly with the 2.1.x releases.
154
155    - The PFR driver had a bug in its composite loading code that produces
156      incorrectly placed accents with many fonts.
157
158    - The Type42 driver crashed sometimes due to a nasty bug.
159
160    - The Type 1 custom encoding charmap didn't handle the case where the
161      first glyph index wasn't 0.
162
163    - A serious typo in the TrueType composite loader produced incorrectly
164      placed glyphs in fonts like "Wingdings" and a few others.
165
166
167  II. MISCELLANEOUS
168
169    - The Win32 Visual C++ project file has been updated to include the
170      PFR driver as well.
171
172    - "freetype.m4" is now installed by default by "make install" on Unix
173      systems.
174
175    - The function FT_Get_PS_Font_Info now works with CID and Type42 fonts
176      as well.
177
178
179========================================================================
180
181LATEST CHANGES BETWEEN 2.1.1 and 2.1.0
182
183  I. IMPORTANT BUG FIXES
184
185    - The `version_info' returned by `freetype-config' in 2.1.0 returned an
186      invalid value. It now returns 9:1:3 (2.0.9 returned 9:0:3).
187
188    - Version 2.1.0 couldn't be linked against applications on Win32 and
189      Amiga systems due to a new debug function that wasn't properly
190      propagated to the system-specific directory in `builds'.
191
192    - Various MacOS and Mac OS X specific fixes.
193
194    - Fixed a bug in the TrueType charmap validation routines that made
195      version 2.1.0 too restrictive -- many popular fonts have been
196      rejected.
197
198    - There was still a very small difference between the monochrome glyph
199      bitmaps produced by FreeType 1.x and FreeType 2.x with the bytecode
200      interpreter enabled.  This was caused by an invalid flag setting in
201      the TrueType glyph loader, making the rasterizer change its drop-out
202      control mode.  Now theresults should _really_ be completely identical.
203
204    - The TrueType name table loader has been improved to support many
205      popular though buggy Asian fonts.  It now ignores empty name entries,
206      invalid pointer offsets and a few other incorrect subtleties.
207      Moreover, name strings are now loaded on demand, which reduces the
208      memory load of many faces (e.g. the ARIAL.TTF font file contains a
209      10kByte name table with 70 names).
210
211    - Fixed a bug in the Postscript hinter that prevented family blues
212      substitution to happen correctly.
213
214
215  II. NEW FEATURES
216
217    - Three new font drivers in this release:
218
219      * A BDF font driver, contributed by Franco Zappa Nardelli, heavily
220        modified by Werner Lemberg.  It also supports anti-aliased bitmaps
221        (using a slightly extended BDF format).
222
223      * A Type42 font driver, contributed by Roberto Alameda.  It is
224        still experimental but seems to work relatively well.
225
226      * A PFR font driver, contributed by David Turner himself.  It doesn't
227        support PFR hinting -- note that BitStream has at least two patents
228        on this format!
229
230
231  III. MISCELLANEOUS
232
233    - The cache sub-system has been optimized in important ways.  Cache hits
234      are now significantly faster.  For example, using the CMap cache is
235      about twice faster than calling FT_Get_Char_Index on most platforms.
236      Similarly, using an SBit cache is about five times faster than loading
237      the bitmaps from a bitmap file, and 300 to 500 times faster than
238      generating them from a scalable format.
239
240      Note that you should recompile your sources if you designed a custom
241      cache class for the FT2 Cache subsystem, since the changes performed
242      are source, but not binary, compatible.
243
244
245========================================================================
246
247LATEST CHANGES BETWEEN 2.1.0 and 2.0.9
248
249  I. IMPORTANT BUG FIXES
250
251    - The TrueType bytecode interpreter has been fixed to produce
252      _exactly_ the same output as FreeType 1.x.  Previous differences
253      were due to slightly distinct fixed-point computation routines
254      used to perform dot products and vector length measurements.
255
256      It seems that native TrueType hinting is _extremely_ sensitive
257      to rounding errors.  The required vector computation routines have
258      been optimized and placed within the "ttinterp.c" file.
259
260    - Fixed the parsing of accelerator tables in the PCF font driver.
261
262    - Fixed the Type1 glyph loader routine used to compute the font's
263      maximum advance width.
264
265  II. NEW FEATURES
266
267    - The `configure' script used on Unix systems has been modified to
268      check that GNU Make is being used to build the library.  Otherwise,
269      it will display a message proposing to use the GNUMAKE environment
270      variable to name it.
271
272      The Unix-specific file README.UNX has been modified accordingly.
273
274
275  III. MISCELLANEOUS
276
277    - The FreeType License in `docs/FTL.txt' has been updated to include
278      a proposed preferred disclaimer.  If you are using FreeType in your
279      products, you are encouraged (but not mandated) to use the following
280      text in your documentation:
281
282      """
283        Portions of this software are copyright © 1996-2002 The FreeType
284        Project (www.freetype.org).  All rights reserved.
285      """
286
287    - The default size of the render pool has been reduced to 16kByte.
288      This shouldn't result in any noticeable performance penalty, unless
289      you are using the engine as-is to render very large and complex
290      glyphs.
291
292    - The FreeType 2 redesign has begun.  More information can be found
293      at this URL:
294
295        http://www.freetype.org/freetype2/redesign.html
296
297      The following internal changes have been performed within the sources
298      of this release:
299
300        - Many internal types have been renamed to increase consistency.
301          The following should be true, except for public types:
302
303            * All structure types have a name ending in "Rec" (short for
304              `record').
305
306            * A pointer-to-structure type has the same name as the
307              structure, _without_ the "Rec" suffix.
308
309                Example:
310
311                  typedef struct FooRec_
312                  {
313                    ...
314
315                  } FooRec, *Foo;
316
317        - Many internal macros have been renamed to increase consistency.
318          The following should be true:
319
320            * All macros have a name beginning with "FT_".  This required
321              a few changes like
322
323                ALLOC   => FT_ALLOC
324                FREE    => FT_FREE
325                REALLOC => FT_REALLOC
326
327            * All macros are completely UPPERCASE.  This required a few
328              changes like:
329
330                READ_Short  => FT_READ_SHORT
331                NEXT_Short  => FT_NEXT_SHORT
332                GET_ULongLE => FT_GET_ULONG_LE
333                MEM_Set     => FT_MEM_SET
334                MEM_Copy    => FT_MEM_COPY
335                etc.
336
337            * Whenever possible, all macro names follow the
338              FT_<OBJECT>_<METHOD> pattern.  For example
339
340                ACCESS_Frame   => FT_FRAME_ENTER
341                FORGET_Frame   => FT_FRAME_EXIT
342                EXTRACT_Frame  => FT_FRAME_EXTRACT
343                RELEASE_Frame  => FT_FRAME_RELEASE
344
345                FILE_Pos       => FT_STREAM_POS
346                FILE_Seek      => FT_STREAM_SEEK
347                FILE_Read      => FT_STREAM_READ
348                FILE_ReadAt    => FT_STREAM_READ_AT
349                READ_Fields    => FT_STREAM_READ_FIELDS
350
351        - Many internal functions have been renamed to follow the
352          FT_<Object>_<Method> pattern.  For example:
353
354            FT_Seek_Stream       => FT_Stream_Seek
355            FT_Read_Stream_At    => FT_Stream_ReadAt
356            FT_Done_Stream       => FT_Stream_Close
357            FT_New_Stream        => FT_Stream_Open
358            FT_New_Memory_Stream => FT_Stream_OpenMemory
359            FT_Extract_Frame     => FT_Stream_ExtractFrame
360
361          Note that method names do not contain "_".
362
363        - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
364          with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a type
365          as the fourth argument.  Instead, the array element type size
366          is computed automatically from the type of the target pointer
367          used.
368
369        - A new object class, FT_CMap, has been introduced.  These
370          internal objects are used to model character maps.  This eases
371          the support of additional charmap types within the engine.
372
373        - A new configuration file named "ftstdlib.h" has been added
374          to `include/freetype/config'.  It is used to define aliases
375          for _every_ routine of the ISO C library that the font engine
376          uses.  Each aliases has a "ft_" prefix (e.g. "ft_strlen" is an
377          alias for "strlen").
378
379          This is used to ease the porting of FreeType 2 to exotic runtime
380          environments where the ISO C Library isn't available (e.g.
381          XFree86 extension modules).
382
383      More details are available in the "ChangeLog" file.
384
385
386============================================================================
387
388LATEST CHANGES BETWEEN 2.0.9 and 2.0.8
389
390  I. IMPORTANT BUG FIXES
391
392    - Certain fonts like "foxjump.ttf" contain broken name tables with
393      invalid entries and wild offsets.  This caused FreeType to crash when
394      trying to load them.
395
396      The SFNT `name' table loader has been fixed to be able to support
397      these strange fonts.
398
399      Moreover, the code in charge of processing this table has been changed
400      to always favour Windows-formatted entries over other ones.  Hence, a
401      font that works on Windows but not on the Mac will load cleanly in
402      FreeType and report accurate values for Family & PostScript names.
403
404    - The CID font driver has been fixed.  It unfortunately returned a
405      Postscript Font name with a leading slash, as in
406      "/MunhwaGothic-Regular".
407
408    - FreeType 2 should now compile fine on AIX 4.3.3 as a shared library.
409
410    - A bug in the Postscript hinter has been found and fixed, removing
411      un-even stem widths at small pixel sizes (like 14-17).
412
413      This improves the quality of a certain number of Postscript fonts.
414
415
416  II. NEW FEATURES
417
418    - A new function named `FT_Library_Version' has been added to return
419      the current library's major, minor, and patch version numbers.  This
420      is important since the macros FREETYPE_MAJOR, FREETYPE_MINOR, and
421      FREETYPE_PATCH cannot be used when the library is dynamically linked
422      by a program.
423
424    - Two new APIs have been added: `FT_Get_First_Char' and
425      `FT_Get_Next_Char'.
426
427      Together, these can be used to iterate efficiently over the currently
428      selected charmap of a given face.  Read the API reference for more
429      details.
430
431
432  III. MISCELLANEOUS
433
434    - The FreeType sources are under heavy internal re-factoring.  As a
435      consequence, we have created a branch named "STABLE" on the CVS to
436      hold all future releases/fixes in the 2.0.x family.
437
438      The HEAD branch now contains the re-factored sources and shouldn't be
439      used for testing or packaging new releases.  In case you would like
440      to access the 2.0.9 sources from our CVS repository, use the tag
441      `VER-2-0-9'.
442
443
444============================================================================
445
446LATEST CHANGES BETWEEN 2.0.8 and 2.0.7
447
448  I. IMPORTANT BUG FIXES
449
450    - There was a small but nasty bug in "freetype-config.in" which
451      caused the "freetype-config" script to fail on Unix.
452
453      This didn't prevent the installation of the library or even
454      its execution, but caused problems when trying to compile many
455      Unix packages that depend on it.
456
457    - Some TrueType or OpenType fonts embedded in PDF documents do
458      not have a 'cmap', 'post' and 'name' as is required by the
459      specification.  FreeType no longer refuses to load such fonts.
460
461    - various fixes to the PCF font driver
462
463
464============================================================================
465
466LATEST CHANGES BETWEEN 2.0.7 and 2.0.6
467
468  I. IMPORTANT BUG FIXES
469
470    - Fixed two bugs in the Type 1 font driver.  The first one resulted in a
471      memory leak in subtle cases.  The other one caused FreeType to crash
472      when trying to load ".gsf" files (Ghostscript so-called Postscript
473      fonts).
474
475      (This made _many_ KDE applications crash on certain systems.  FreeType
476       _is_ becoming a critical system component on Linux :-)
477
478    - Fixed a memory leak in the CFF font driver.
479
480    - Fixed a memory leak in the PCF font driver.
481
482    - Fixed the Visual C++ project file "builds/win32/visualc/freetype.dsp"
483      since it didn't include the Postscript hinter component, causing
484      errors at build time.
485
486    - Fixed a small rendering bug in the anti-aliased renderer that only
487      occurred when trying to draw thin (less than 1 pixel) strokes.
488
489    - Fixed "builds/unix/freetype2.a4" which is used to generate a valid
490      "freetype2.m4" for use with autoconf.
491
492    - Fixed the OpenVMS Makefiles.
493
494
495  II. MISCELLANEOUS
496
497    - Added "configure" and "install" scripts to the top-level directory.
498      A GNU-style installation is thus now easily possible with
499
500          ./configure  <options>
501          make
502          make install
503
504
505============================================================================
506
507LATEST CHANGES BETWEEN 2.0.6 and 2.0.5
508
509  I. IMPORTANT BUG FIXES
510
511    - It wasn't possible to load embedded bitmaps when the auto-hinter was
512      used.  This is now fixed.
513
514    - The TrueType font driver didn't load some composites properly (the
515      sub-glyphs were slightly shifted, and this was only noticeable when
516      using monochrome rendering).
517
518    - Various fixes to the auto-hinter.  They merely improve the output of
519      sans-serif fonts.  Note that there are still problems with serifed
520      fonts and composites (accented characters).
521
522    - All scalable font drivers erroneously returned un-fitted glyph
523      advances when hinting was requested.  This created problems for a
524      number of layout applications.  This is a very old bug that got
525      undetected mainly because most test/demo program perform rounding
526      explicitly or implicitly (through the cache).
527
528    - FT_Glyph_To_Bitmap() did erroneously modify the source glyph in
529      certain cases.
530
531    - "glnames.py" still contained a bug that made FreeType return invalid
532      names for certain glyphs.
533
534    - The library crashed when loading certain Type 1 fonts like "sadn.pfb"
535      ("Stalingrad Normal"), which appear to contain pathetic font info
536      dictionaries.
537
538    - The TrueType glyph loader is now much more paranoid and checks everything
539      when loading a given glyph image.  This was necessary to avoid
540      problems (crashes and/or memory overwrites) with broken fonts that
541      came from a really buggy automatic font converter.
542
543
544  II. IMPORTANT UPDATES AND NEW FEATURES
545
546    - Important updates to the Mac-specific parts of the library.
547
548    - The caching sub-system has been completely re-designed, and its API
549      has evolved (the old one is still supported for backwards
550      compatibility).
551
552      The documentation for it is not yet completed, sorry.  For now, you
553      are encouraged to continue using the old API.  However, the ftview
554      demo program in the ft2demos package has already been updated to use
555      the new caching functions.
556
557    - A new charmap cache is provided too.  See FTC_CMapCache().  This is
558      useful to perform character code -> glyph index translations quickly,
559      without the need for an opened FT_Face.
560
561    - A NEW POSTSCRIPT HINTER module has been added to support native hints
562      in the following formats: PostScript Type 1, PostScript CID, and
563      CFF/CEF.
564
565      Please test!  Note that the auto-hinter produces better results for a
566      number of badly-hinted fonts (mostly auto-generated ones) though.
567
568    - A memory debugger is now part of the standard FreeType sources.  To
569      enable it, define FT_DEBUG_MEMORY in <freetype/config/ftoption.h>, and
570      recompile the library.
571
572      Additionally, define the _environment_ variable FT_DEBUG_MEMORY and
573      run any program using FreeType.  When the library is exited, a summary
574      of memory footprints and possible leaks will be displayed.
575
576      This works transparently with _any_ program that uses FreeType.
577      However, you will need a lot of memory to use this (allocated blocks
578      are never released to the heap to detect double deletes easily).
579
580
581  III. MISCELLANEOUS
582
583    - We are aware of subtle differences between the output of FreeType
584      versions 1 and 2 when it comes to monochrome TrueType-hinted glyphs.
585      These are most probably due to small differences in the monochrome
586      rasterizers and will be worked out in an upcoming release.
587
588    - We have decided to fork the sources in a "stable" branch, and an
589      "unstable" one, since FreeType is becoming a critical component of
590      many Unix systems.
591
592      The next bug-fix releases of the library will be named 2.0.7, 2.0.8,
593      etc., while the "2.1" branch will contain a version of the sources
594      where we will start major reworking of the library's internals, in
595      order to produce FreeType 2.2.0 (or even 3.0) in a more distant
596      future.
597
598      We also hope that this scheme will allow much more frequent releases
599      than in the past.
600
601
602============================================================================
603
604LATEST CHANGES BETWEEN 2.0.5 and 2.0.4
605
606  NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER.  THIS MODULE WILL
607  BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
608
609  - Fixed a bug that made certain glyphs, like "Cacute", "cacute" and
610    "lslash" unavailable from Unicode charmaps of Postscript fonts.  This
611    prevented the correct display of Polish text, for example.
612
613  - The kerning table of Type 1 fonts was loaded by FreeType, when its AFM
614    file was attached to its face, but the FT_FACE_FLAG_HAS_KERNING bit
615    flags was not set correctly, preventing FT_Get_Kerning to return
616    meaningful values.
617
618  - Improved SFNT (TrueType & OpenType) charmap support.  Slightly better
619    performance, as well as support for the new formats defined by the
620    OpenType 1.3 specification (8, 10, and 12)
621
622  - Fixed a serious typo in "src/base/ftcalc.c" which caused invalid
623    computations in certain rare cases, producing ugly artefacts.
624
625  - The size of the EM square is computed with a more accurate algorithm
626    for Postscript fonts.  The old one caused slight errors with embedded
627    fonts found in PDF documents.
628
629  - Fixed a bug in the cache manager that prevented normal LRU behaviour
630    within the cache manager, causing unnecessary reloads (for FT_Face and
631    FT_Size objects only).
632
633  - Added a new function named "FT_Get_Name_Index" to retrieve the glyph
634    index of a given glyph name, when found in a face.
635
636  - Added a new function named "FT_Get_Postscript_Name" to retrieve the
637    "unique" Postscript font name of a given face.
638
639  - Added a new public header size named FT_SIZES_H (or
640    <freetype/ftsizes.h>) providing new FT_Size-management functions:
641    FT_New_Size, FT_Activate_Size, FT_Done_Size.
642
643  - Fixed a reallocation bug that generated a dangling pointer (and possibly
644    memory leaks) with Postscript fonts (in src/psaux/psobjs.c).
645
646  - Many fixes for 16-bit correctness.
647
648  - Removed many pedantic compiler warnings from the sources.
649
650  - Added an Amiga build directory in "builds/amiga".
651
652============================================================================
653
654LATEST CHANGES BETWEEN 2.0.4 and 2.0.3
655
656  - Fixed a rather annoying bug that was introduced in 2.0.3.  Namely, the
657    font transformation set through FT_Set_Transform was applied twice to
658    auto-hinted glyphs, resulting in incorrectly rotated text output.
659
660  - Fixed _many_ compiler warnings.  FT2 should now compile cleanly with
661    Visual C++'s most pedantic warning level (/W4).  It already compiled
662    fine with GCC and a few other compilers.
663
664  - Fixed a bug that prevented the linear advance width of composite
665    TrueType glyphs to be correctly returned.
666
667  - Fixed the Visual C++ project files located in "builds/win32/visualc"
668    (previous versions used older names of the library).
669
670  - Many 32-bit constants have an "L" appended to their value, in order
671    to improve the 16-bitness of the code.  Someone is actually trying to
672    use FT2 on an Atari ST machine!
673
674  - Updated the "builds/detect.mk" file in order to automatically build
675    FT2 on AIX systems.  AIX uses "/usr/sbin/init" instead of "/sbin/init"
676    and wasn't previously detected as a Unix platform by the FreeType build
677    system.
678
679  - Updated the Unix-specific portions of the build system (new libtool
680    version, etc.).
681
682  - The SFNT kerning lodaer now ensures that the table is sorted (since some
683    problem fonts do not meet this requirement).
684
685============================================================================
686
687LATEST CHANGES BETWEEN 2.0.3 and 2.0.2
688
689  I. CHANGES TO THE MODULES / FONT DRIVERS
690
691    - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix several
692      annoying artefacts, mainly:
693
694        - Blue zone alignement of horizontal stems wasn't performed
695          correctly, resulting in artefacts like the "d" being placed one
696          pixel below the "b" in some fonts like Time New Roman.
697
698        - Overshoot thresholding wasn't performed correctly, creating
699          unpleasant artefacts at large character pixel sizes.
700
701        - Composite glyph loading has been simplified.  This gets rid
702          of various artefacts where the components of a composite glyphs
703          were not correctly spaced.
704
705      These are the last changes to the current auto-hinting module.  A new
706      hinting sub-system is currently in the work in order to support native
707      hints in Type 1 / CFF / OpenType fonts, as well as globally improve
708      rendering.
709
710    - The PCF driver has been fixed.  It reported invalid glyph dimensions
711      for the fonts available on Solaris.
712
713    - The Type 1, CID and CFF drivers have been modified to fix the
714      computation of the EM size.
715
716    - The Type 1 driver has been fixed to avoid a dangerous bug that
717      crashed the library with non-conforming fonts (i.e. ones that do not
718      place the .notdef glyph at position 0).
719
720    - The TrueType driver had a rather subtle bug (dangling pointer when
721      loading composite glyphs) that could crash the library in rare
722      occasions!
723
724
725  II. HIGH-LEVEL API CHANGES
726
727    - The error code enumeration values have been changed.  An error value
728      is decomposed in a generic error code, and a module number.  see
729      <freetype/fterrors.h> for details.
730
731    - A new public header file has been introduced, named FT_TRIGONOMETRY_H
732      (include/freetype/fttrig.h), providing trigonometric functions to
733      compute sines, cosines, arctangents, etc. with 16.16 fixed precision.
734      The implementation is based on the CORDIC algorithm and is very fast
735      while being sufficiently accurate.
736
737
738  III. INTERNALS
739
740    - Added BeOS-specific files in the old build sub-system.  Note that
741      no changes were required to compile the library with Jam.
742
743    - The configuration is now capable of automatically detecting 64-bit
744      integers on a set of predefined compilers (GCC, Visual C++, Borland
745      C++) and will use them by default.  This provides a small performance
746      boost.
747
748    - A small memory leak that happened when opening 0-sized files (duh!)
749      have been fixed.
750
751    - Fixed bezier stack depth bug in the routines provided by the
752      FT_BBOX_H header file.  Also fixed similar bugs in the rasterizers.
753
754    - The outline bounding box code has been rewritten to use direct
755      computations, instead of bezier sub-division, to compute the exact
756      bounding box of glyphs.  This is slightly slower but more accurate.
757
758    - The build system has been improved and fixed, mainly to support "make"
759      on Windows 2000 correctly, avoid problems with "make distclean" on non
760      Unix systems, etc.
761
762    - Hexadecimal constants have been suffixed with "U" to avoid problems
763      with certain compilers on 64-bit platforms.
764
765    - A new directory named "src/tools" has been created.  It contains
766      Python scripts and simple unit test programs used to develop the
767      library.
768
769    - The DocMaker tool has been moved from "docs" to "src/tools" and
770      has been updated with the following:
771
772         - Now accepts the "--title=XXXX" or "-t XXXX" option from the
773           command line to set the project's name in the generated API
774           reference.
775
776         - Now accepts the "--output=DIR" or "-o DIR" option from the
777           command line to set the output directory for all generated HTML
778           files.
779
780         - Now accepts the "--prefix=XXXX" or "-p XXX" option from the
781           command line to set the file prefix to use for all generated HTML
782           files.
783
784         - Now generates the current time/data on each generated page
785           in order to distinguish between versions.
786
787      DocMaker can be used with other projects now, not only FT2 (e.g. MLib,
788      FTLayout, etc.).
789
790===========================================================================
791
792LATEST CHANGES BETWEEN 2.0.2 and 2.0.1
793
794
795  I. CHANGES TO THE MODULES / FONT DRIVERS
796
797    - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
798      avoid legal problems  with the Apple patents.  It  seems that we
799      mistakenly  turned this option  on in  previous releases  of the
800      build.
801
802      Note that if  you want to use the  bytecode interpreter in order
803      to get high-quality TrueType  rendering, you will need to toggle
804      by        hand        the        definition        of        the
805      TT_CONFIG_OPTION_BYTECODE_INTERPRETER   macro    in   the   file
806      "include/freetype/config/ftoption.h".
807
808    - The CFF driver has been improved by Tom Kacvinsky and Sander van
809      der Wal:
810
811      * Support for "seac" emulation.
812      * Support for "dotsection".
813      * Support for retrieving glyph names through
814        "FT_Get_Glyph_Name".
815
816      The first two items are necessary to correctly a large number of
817      Type 1 fonts converted to the CFF formats by Adobe Acrobat.
818
819    - The Type 1 driver was also improved by Tom & others:
820
821      * Better EM size computation.
822      * Better support for synthetic (transformed) fonts.
823      * The  Type 1  driver returns  the charstrings  corresponding to
824        each glyph in the  "glyph->control_data" field after a call to
825        "FT_Load_Glyph" (thanks Ha Shao).
826
827    - Various other bugfixes, including the following:
828
829      * Fixed a nasty memory leak in the Type 1 driver.
830      * The autohinter  and the pcf  driver used static  writable data
831        when they shouldn't.
832      * Many casts were added to  make the code more 64-bits safe.  It
833        also now compiles on Windows XP 64-bits without warnings.
834      * Some incorrect writable statics were removed in the "autohint"
835        and "pcf" drivers.  FreeType 2 now compiles on Epoc again.
836
837
838  II. CHANGES TO THE HIGH-LEVEL API
839
840    - The library header files inclusion scheme has been changed.  The
841      old scheme looked like:
842
843        #include <freetype/freetype.h>
844        #include <freetype/ftglyph.h>
845        #include <freetype/ftcache.h>
846        #include <freetype/cache/ftimage.h>
847
848      Now you should use:
849
850        #include <ft2build.h>
851        #include FT_FREETYPE_H
852        #include FT_GLYPH_H
853        #include FT_CACHE_H
854        #include FT_CACHE_IMAGE_H
855
856      NOTE THAT  THE OLD  INCLUSION SCHEME WILL  STILL WORK  WITH THIS
857      RELEASE.  HOWEVER, WE  DO NOT GUARANTEE THAT THIS  WILL STILL BE
858      TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
859
860      The  file <ft2build.h>  is used  to define  the  header filename
861      macros.  The complete and  commented list of macros is available
862      in the API reference under the section name "Header File Macros"
863      in Chapter I.
864
865      For more information, see section I of the following document:
866
867        http://www.freetype.org/
868          freetype2/docs/tutorial/step1.html
869
870      or
871
872        http://freetype.sourceforge.net/
873          freetype2/docs/tutorial/step1.html
874
875    - Many, many comments have been added to the public source file in
876      order to  automatically generate  the API Reference  through the
877      "docmaker.py" Python script.
878
879      The latter has been updated  to support the grouping of sections
880      in chapters and better index sort.  See:
881
882        http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
883
884
885  III. CHANGES TO THE BUILD PROCESS
886
887    - If you  are not  building FreeType 2  with its own  build system
888      (but with your own Makefiles or project files), you will need to
889      be  aware that  the  build  process has  changed  a little  bit.
890
891      You don't  need to put the  "src" directory in  the include path
892      when  compiling  any FT2  component.   Instead,  simply put  the
893      component's directory in the current include path.
894
895      So, if you were doing something like:
896
897        cc -c -Iinclude -Isrc src/base/ftbase.c
898
899      change the line to:
900
901        cc -c -Iinclude -Isrc/base src/base/ftbase.c
902
903      If you were doing something like:
904
905        cd src/base
906        cc -c -I../../include -I.. ftbase.c
907
908      change it to:
909
910        cd src/base
911        cc -c -I../../include ftbase.c
912
913
914======================================================================
915
916LATEST CHANGES BETWEEN 2.0.1 and 2.0
917
918  2.0.1 introduces a few changes:
919
920    - Fixed many bugs related to  the support of CFF / OpenType fonts.
921      These  formats are  now much  better supported  though  there is
922      still work planned to  deal with charset tables and PDF-embedded
923      CFF files that use the old "seac" command.
924
925    - The  library could not  be compiled  in debug  mode with  a very
926      small  number   of  C  compilers   whose  pre-processors  didn't
927      implement the "##"  directive correctly (i.e. per se  the ANSI C
928      specification!)  An elegant fix was found.
929
930    - Added  support for  the  free Borland  command-line C++  Builder
931      compiler.   Use "make  setup bcc32".   Also fixed  a  few source
932      lines that generated new warnings with BCC32.
933
934    - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
935      a conic Bezier arc.
936
937    - Updated the INSTALL file to add IDE compilation.
938
939    - Other  minor bug  fixes,  from  invalid Type  1  style flags  to
940      correct   support   of  synthetic   (obliqued)   fonts  in   the
941      auto-hinter, better support for embedded bitmaps in a SFNT font.
942
943    - Fixed some problems with "freetype-config".
944
945  Finally, the "standard" scheme for including FreeType headers is now
946  gradually changing,  but this will  be explained in a  later release
947  (probably 2.0.2).
948
949  And very  special thanks to Tom Kacvinsky  and YAMANO-UCHI Hidetoshi
950  for their contributions!
951
952
953======================================================================
954
955CHANGES BETWEEN beta8 and 2.0
956
957  - Changed  the default  installation  path for  public headers  from
958    "include/freetype" to "include/freetype2".
959
960    Also added a new "freetype-config" that is automatically generated
961    and installed  on Unix and  Cygwin systems.  The script  itself is
962    used to retrieve the current  install path, C compilation flags as
963    well as linker flags.
964
965  - Fixed several small bugs:
966
967    * Incorrect max advance width for fixed-pitch Type 1 fonts.
968    * Incorrect glyph names for certain TrueType fonts.
969    * The  glyph advance  was not  copied when  FT_Glyph_To_Bitmap was
970      called.
971    * The  linearHoriAdvance  and  linerVertAdvance  fields  were  not
972      correctly returned for glyphs processed by the auto-hinter.
973    * "type1z"  renamed back to  "type1"; the  old "type1"  module has
974      been removed.
975
976  - Revamped the  build system  to make it  a lot more  generic.  This
977    will  allow us  to  re-use  nearly un-modified  in  lots of  other
978    projects (including FreeType Layout).
979
980  - Changed "cid" to use "psaux" too.
981
982  - Added the  cache sub-system.  See <freetype/ftcache.h>  as well as
983    the sources  in "src/cache".  Note  that it compiles but  is still
984    untested for now.
985
986  - Updated "docs/docmaker.py", a draft  API reference is available at
987    http://www.freetype.org/ft2api.html.
988
989  - Changed "type1" to use "psaux".
990
991  - Created a  new module named  "psaux" to hold  the Type 1 &  Type 2
992    parsing routines.  It should be  used by "type1", "cid", and "cff"
993    in the future.
994
995  - Fixed an important bug in "FT_Glyph_Get_CBox".
996
997  - Fixed  some compiler  warnings  that happened  since the  TrueType
998    bytecode decoder was deactivated by default.
999
1000  - Fixed two memory leaks:
1001
1002    * The    memory   manager   (16    bytes)   isn't    released   in
1003      FT_Done_FreeType!
1004    * Using custom input streams, the  copy of the original stream was
1005      never released.
1006
1007  - Fixed the  auto-hinter by performing automatic  computation of the
1008    "filling direction" of each glyph.   This is done through a simple
1009    and  fast approximation, and  seems to  work (problems  spotted by
1010    Werner though).  The Arphic fonts are a lot nicer though there are
1011    still a lot of things to do to handle Asian fonts correctly.
1012
1013
1014======================================================================
1015
1016BETA-8 (RELEASE CANDIDATE) CHANGES
1017
1018  - Deactivated the TrueType bytecode interpreter by default.
1019
1020  - Deactivated the "src/type1" font driver.  Now "src/type1z" is used
1021    by default.
1022
1023  - Updates to the build system.  We now compile the library correctly
1024    under  Unix  system  through  "configure" which  is  automatically
1025    called on the first "make" invocation.
1026
1027  - Added the auto-hinting module!  Fixing some bugs here and there.
1028
1029  - Found some bugs in the  composite loader (seac) of the Type1-based
1030    font drivers.
1031
1032  - Renamed the directory "freetype2/config" to "freetype2/builds" and
1033    updated all relevant files.
1034
1035  - Found a memory leak in the "type1" driver.
1036
1037  - Incorporated Tom's patches to  support flex operators correctly in
1038    OpenType/CFF fonts.  Now all I need is to support pure CFF and CEF
1039    fonts to be done with this driver :-)
1040
1041  - Added the  Windows FNT/FON driver in "src/winfonts".   For now, it
1042    always  "simulates"   a  Unicode  charmap,  so   it  shouldn't  be
1043    considered completed right now.
1044
1045    It  is there  to be  more a  proof of  concept than  anything else
1046    anyway.  The driver is a single  C source file, that compiles to 3
1047    Kb of code.
1048
1049    I'm  still working on  the PCF/BDF  drivers, but  I'm too  lazy to
1050    finish them now.
1051
1052  - CHANGES TO THE HIGH-LEVEL API
1053
1054    * FT_Get_Kerning has a new parameter that allows you to select the
1055      coordinates of the kerning  vector (font units, scaled, scaled +
1056      grid-fitted).
1057    * The  outline functions are  now in <freetype/ftoutln.h>  and not
1058      part of <freetype/freetype.h> anymore.
1059    * <freetype/ftmodule.h>    now     contains    declarations    for
1060       FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
1061    * The so-called convenience  functions have moved from "ftoutln.c"
1062      to  "ftglyph.c",  and  are  thus available  with  this  optional
1063      component    of   the   library.     They   are    declared   in
1064      <freetype/ftglyph.h> now.
1065    * Anti-aliased  rendering is now  the default  for FT_Render_Glyph
1066      (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
1067      To generate a monochrome bitmap, use ft_render_mode_mono, or the
1068      FT_LOAD_MONOCHROME     flag    in    FT_Load_Glyph/FT_Load_Char.
1069      FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
1070    * <freetype/freetype.h>  now include <freetype/config/ftconfig.h>,
1071      solving a few headaches :-)
1072    * The type FT_GlyphSlotRec has now a "library" field.
1073
1074  - CHANGES TO THE "ftglyph.h" API
1075
1076    This API has  been severely modified in order  to make it simpler,
1077    clearer, and more  efficient.  It certainly now looks  like a real
1078    "glyph factory"  object, and allows client  applications to manage
1079    (i.e.  transform,  bbox  and  render) glyph  images  without  ever
1080    knowing their original format.
1081
1082  - Added  support  for CID-keyed  fonts  to  the  CFF driver.   Maybe
1083    support for pure CFF + CEF fonts should come in?
1084
1085  - Cleaned up  source code in order  to avoid two  functions with the
1086    same name.  Also  changed the names of the  files in "type1z" from
1087    "t1XXXX" to "z1XXXX" in order to avoid any conflicts.
1088
1089    "make multi" now works well :-)
1090
1091    Also removed the use of "cidafm" for now, even if the source files
1092    are  still there.  This  functionality will  certainly  go into  a
1093    specific module.
1094
1095  - ADDED SUPPORT FOR THE AUTO-HINTER
1096
1097    It  works :-) I  have a  demo program  which simply  is a  copy of
1098    "ftview"       that      does       a      `FT_Add_Module(library,
1099    &autohinter_module_class)' after  library initialization, and Type
1100    1 & OpenType/CFF fonts are now hinted.
1101
1102    CID  fonts are  not hinted,  as they  include no  charmap  and the
1103    auto-hinter doesn't include  "generic" global metrics computations
1104    yet.
1105
1106    Now, I need to release this thing to the FreeType 2 source.
1107
1108  - CHANGES TO THE RENDERER MODULES
1109
1110    The  monochrome  and smooth  renderers  are  now  in two  distinct
1111    directories, namely "src/raster1" and "src/smooth".  Note that the
1112    old "src/renderer" is now gone.
1113
1114    I ditched  the 5-gray-levels renderers.  Basically,  it involved a
1115    simple #define toggle in 'src/raster1/ftraster.c'.
1116
1117    FT_Render_Glyph,  FT_Outline_Render  &  FT_Outline_Get_Bitmap  now
1118    select the best renderer  available, depending on render mode.  If
1119    the current renderer for a  given glyph image format isn't capable
1120    of supporting  the render mode, another  one will be  found in the
1121    library's list.   This means that client applications  do not need
1122    to  switch or  set  the  renderers themselves  (as  in the  latest
1123    change), they'll get what they want automatically.  At last.
1124
1125    Changed the demo programs accordingly.
1126
1127  - MAJOR INTERNAL REDESIGN:
1128
1129    A lot of internal modifications  have been performed lately on the
1130    source in order to provide the following enhancements:
1131
1132    * More generic module support:
1133
1134      The FT_Module  type is  now defined to  represent a handle  to a
1135      given  module.   The  file  <freetype/ftmodule.h>  contains  the
1136      FT_Module_Class definition, as well as the module-loading public
1137      API.
1138
1139      The  FT_Driver type  is still  defined, and  still  represents a
1140      pointer to  a font driver.  Note that  FT_Add_Driver is replaced
1141      by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
1142
1143    * Support for generic glyph image types:
1144
1145      The FT_Renderer  type is a pointer  to a module  used to perform
1146      various operations on glyph image.
1147
1148      Each renderer is  capable of handling images in  a single format
1149      (e.g. ft_glyph_format_outline).  Its functions are used to:
1150
1151      - transform an glyph image
1152      - render a glyph image into a bitmap
1153      - return the control box (dimensions) of a given glyph image
1154
1155      The scan converters "ftraster.c" and "ftgrays.c" have been moved
1156      to the new directory "src/renderer", and are used to provide two
1157      default renderer modules.
1158
1159      One corresponds  to the "standard" scan-converter,  the other to
1160      the "smooth" one.
1161
1162      he  current  renderer  can  be  set  through  the  new  function
1163      FT_Set_Renderer.
1164
1165      The old raster-related function FT_Set_Raster, FT_Get_Raster and
1166      FT_Set_Raster_Mode have now disappeared, in favor of the new:
1167
1168        FT_Get_Renderer
1169        FT_Set_Renderer
1170
1171      See the file <freetype/ftrender.h> for more details.
1172
1173      These  changes  were  necessary  to properly  support  different
1174      scalable formats in the future, like bi-color glyphs, etc.
1175
1176    * Glyph loader object:
1177
1178      A  new  internal  object,  called  a  'glyph  loader'  has  been
1179      introduced in the base layer.  It is used by all scalable format
1180      font drivers to load glyphs and composites.
1181
1182      This object  has been  created to reduce  the code size  of each
1183      driver,  as  each  one  of  them  basically  re-implemented  its
1184      functionality.
1185
1186      See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
1187      more information.
1188
1189    * FT_GlyphSlot has new fields:
1190
1191      In  order   to  support  extended  features   (see  below),  the
1192      FT_GlyphSlot structure has a few new fields:
1193
1194      linearHoriAdvance:
1195
1196        This  field  gives  the   linearly  scaled  (i.e.  scaled  but
1197        unhinted) advance  width for the  glyph, expressed as  a 16.16
1198        fixed pixel value.  This is useful to perform WYSIWYG text.
1199
1200      linearVertAdvance:
1201        This field  gives the linearly  scaled advance height  for the
1202        glyph  (relevant in  vertical  glyph layouts  only).  This  is
1203        useful to perform WYSIWYG text.
1204
1205        Note that  the two above field replace  the removed "metrics2"
1206        field in the glyph slot.
1207
1208      advance:
1209        This field is a vector  that gives the transformed advance for
1210        the glyph.   By default, it corresponds to  the advance width,
1211        unless  FT_LOAD_VERTICAL_LAYOUT  was  specified  when  calling
1212        FT_Load_Glyph or FT_Load_Char.
1213
1214      bitmap_left:
1215        This  field gives  the  distance in  integer  pixels from  the
1216        current pen position  to the left-most pixel of  a glyph image
1217        IF IT IS  A BITMAP.  It is only valid  when the "format" field
1218        is set to "ft_glyph_format_bitmap", for example, after calling
1219        the new function FT_Render_Glyph.
1220
1221      bitmap_top:
1222        This  field gives  the  distance in  integer  pixels from  the
1223        current pen position (located on the baseline) to the top-most
1224        pixel of the  glyph image IF IT IS  A BITMAP.  Positive values
1225        correspond to upwards Y.
1226
1227      loader:
1228        This  is a  new  private  field for  the  glyph slot.   Client
1229        applications should not touch it.
1230
1231
1232    * Support for transforms and direct rendering in FT_Load_Glyph:
1233
1234      Most of the functionality found in <freetype/ftglyph.h> has been
1235      moved to the core library. Hence, the following:
1236
1237      - A   transform   can   be   specified  for   a   face   through
1238        FT_Set_Transform.  this transform  is applied by FT_Load_Glyph
1239        to  scalable glyph  images (i.e.  NOT TO  BITMAPS)  before the
1240        function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
1241        was set in the load flags.
1242
1243      - Once  a  glyph image  has  been  loaded,  it can  be  directly
1244        converted  to  a  bitmap  by  using  the  new  FT_Render_Glyph
1245        function.  Note that this  function takes the glyph image from
1246        the glyph slot,  and converts it to a  bitmap whose properties
1247        are returned  in "face.glyph.bitmap", "face.glyph.bitmap_left"
1248        and "face.glyph.bitmap_top".  The  original native image might
1249        be lost after the conversion.
1250
1251      - When using the new  bit flag FT_LOAD_RENDER, the FT_Load_Glyph
1252        and   FT_Load_Char   functions   will   call   FT_Render_Glyph
1253        automatically when needed.
1254
1255  - Reformatted all  modules source  code in order  to get rid  of the
1256    basic data types redifinitions (i.e. "TT_Int" instead of "FT_Int",
1257    "T1_Fixed"  instead  of  "FT_Fixed").  Hence  the  format-specific
1258    prefixes like  "TT_", "T1_",  "T2_" and "CID_"  are only  used for
1259    relevant structures.
1260
1261
1262======================================================================
1263
1264OLD CHANGES FOR BETA 7
1265
1266  - bug-fixed the  OpenType/CFF parser. It  now loads and  displays my
1267    two  fonts nicely,  but I'm  pretty certain  that more  testing is
1268    needed :-)
1269
1270  - fixed the crummy Type 1 hinter, it now handles accented characters
1271    correctly (well, the accent is  not always well placed, but that's
1272    another problem..)
1273
1274  - added the CID-keyed Type 1  driver in "src/cid". Works pretty well
1275    for only 13 Kb of code  ;-) Doesn't read AFM files though, nor the
1276    really useful CMAP files..
1277
1278  - fixed two bugs in the smooth renderer (src/base/ftgrays.c). Thanks
1279    to Boris Letocha for spotting them and providing a fix..
1280
1281  - fixed potential "divide by zero" bugs in ftcalc.c.. my god..
1282
1283  - added source  code for  the OpenType/CFF driver  (still incomplete
1284    though..)
1285
1286  - modified the  SFNT driver slightly  to perform more  robust header
1287    checks  in TT_Load_SFNT_Header. This  prevents certain  font files
1288    (e.g.  some  Type  1  Multiple  Masters)  from  being  incorrectly
1289    "recognized" as TrueType font files..
1290
1291  - moved a lot of stuff from  the TrueType driver to the SFNT module,
1292    this   allows   greater   code   re-use   between   font   drivers
1293    (e.g. TrueType, OpenType, Compact-TrueType, etc..)
1294
1295  - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
1296    to minimally speed it up..
1297
1298  - added support for Multiple Master fonts in "type1z". There is also
1299    a  new file  named  <freetype/ftmm.h> which  defines functions  to
1300    manage them from client applications.
1301
1302    The new file "src/base/ftmm.c" is also optional to the engine..
1303
1304  - various  formatting changes (e.g.  EXPORT_DEF ->  FT_EXPORT_DEF) +
1305    small bug fixes in FT_Load_Glyph, the "type1" driver, etc..
1306
1307  - a minor fix to the Type 1 driver to let them apply the font matrix
1308    correctly (used for many oblique fonts..)
1309
1310  - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
1311    to use %p instead of %lx).. Thanks to Karl Robillard
1312
1313  - fixed  some bugs  in  the sbit  loader (src/base/sfnt/ttsbit.c)  +
1314    added  a new flag,  FT_LOAD_CROP_BITMAP to  query that  bitmaps be
1315    cropped when  loaded from a file  (maybe I should  move the bitmap
1316    cropper to the base layer ??).
1317
1318  - changed the default  number of gray levels of  the smooth renderer
1319    to 256  (instead of  the previous 128).  Of course, the  human eye
1320    can't see any difference ;-)
1321
1322  - removed TT_MAX_SUBGLYPHS,  there is no static limit  on the number
1323    of subglyphs in a TrueType font now..
1324
1325
1326======================================================================
1327
1328OLD CHANGES 16 May 2000
1329
1330  - tagged "BETA-6"  in the  CVS tree. This  one is a  serious release
1331    candidate even though it doesn't incorporate the auto-hinter yet..
1332
1333  - various obsolete files were removed, and copyright header updated
1334
1335  - finally  updated  the  standard   raster  to  fix  the  monochrome
1336    rendering bug + re-enable  support for 5-gray levels anti-aliasing
1337    (suck, suck..)
1338
1339  - created new header files, and modified sources accordingly:
1340
1341     <freetype/fttypes.h>
1342       - simple FreeType types, without the API
1343     <freetype/internal/ftmemory.h>
1344       - definition of memory-management macros
1345
1346  - added   the   "DSIG"   (OpenType   Digital   Signature)   tag   to
1347    <freetype/tttags.h>
1348
1349  - light update/cleaning of the build system + changes to the sources
1350    in  order  to  get  rid  of _all_  compiler  warnings  with  three
1351    compilers, i.e:
1352
1353    gcc with "-ansi -pedantic -Wall -W", Visual C++ with "/W3 /WX" and
1354    LCC
1355
1356    IMPORTANT NOTE FOR WIN32-LCC USERS:
1357    |
1358    |  It seems the C pre-processor  that comes with LCC is broken, it
1359    |  doesn't  recognize  the  ANSI  standard  directives  #  and  ##
1360    |  correctly when one of the  argument is a macro. Also, something
1361    |  like:
1362    |
1363    |     #define F(x)  print##x
1364    |
1365    |     F(("hello"))
1366    |
1367    |  will get incorrectly translated to:
1368    |
1369    |     print "hello")
1370    |
1371    |  by its pre-processor. For  this reason, you simply cannot build
1372    |  FreeType 2 in debug mode with this compiler..
1373
1374  - yet another massive grunt work. I've changed the definition of the
1375    EXPORT_DEF,  EXPORT_FUNC, BASE_DEF &  BASE_FUNC macros.  These now
1376    take an argument, which is the function's return value type.
1377
1378    This  is necessary to  compile FreeType  as a  DLL on  Windows and
1379    OS/2.  Depending on the compiler used, a compiler-specific keyword
1380    like  __export or __system  must be  placed before  (VisualC++) or
1381    after (BorlandC++) the type..
1382
1383    Of course, this needed a lot of changes throughout the source code
1384    to make it compile again... All cleaned up now, apparently..
1385
1386    Note also  that there is a  new EXPORT_VAR macro  defined to allow
1387    the   _declaration_    of   an   exportable    public   (constant)
1388    variable.  This  is  the   case  of  the  raster  interfaces  (see
1389    ftraster.h and ftgrays.h), as well as each module's interface (see
1390    sfdriver.h, psdriver.h, etc..)
1391
1392  - new feature: it  is now possible to pass  extra parameters to font
1393                 drivers  when creating  a new  face object.  For now,
1394                 this capability is unused.  It could however prove to
1395                 be useful in a near future..
1396
1397      the FT_Open_Args structure was  changes, as well as the internal
1398      driver interface  (the specific "init_face"  module function has
1399      now a different signature).
1400
1401  - updated the tutorial (not finished though).
1402
1403  - updated the top-level BUILD  document
1404
1405  - fixed  a  potential memory  leak  that  could  occur when  loading
1406    embedded bitmaps.
1407
1408  - added     the     declaration     of     FT_New_Memory_Face     in
1409    <freetype/freetype.h>, as  it was  missing from the  public header
1410    (the implementation was already in "ftobjs.c").
1411
1412  - the file <freetype/fterrors.h> has been seriously updated in order
1413    to allow the automatic generation of error message tables. See the
1414    comments within it for more information.
1415
1416  - major directory  hierarchy re-organisation. This was  done for two
1417    things:
1418
1419      * first,  to ease  the "manual"  compilation of  the  library by
1420        requiring at lot less include paths :-)
1421
1422      * second,  to  allow  external  programs to  effectively  access
1423        internal  data  fields. For  example,  this  can be  extremely
1424        useful if  someone wants  to write a  font producer or  a font
1425        manager on top of FreeType.
1426
1427    Basically, you  should now use  the 'freetype/' prefix  for header
1428    inclusion, as in:
1429
1430        #include <freetype/freetype.h>
1431        #include <freetype/ftglyph.h>
1432
1433    Some new include sub-directories are available:
1434
1435     a. the  "freetype/config" directory,  contains two files  used to
1436        configure the build of the library. Client applications should
1437        not need to look at these normally, but they can if they want.
1438
1439        #include <freetype/config/ftoption.h>
1440        #include <freetype/config/ftconfig.h>
1441
1442     b. the "freetype/internal"  directory, contains header files that
1443        describes library  internals. These are the  header files that
1444        were  previously  found  in  the "src/base"  and  "src/shared"
1445        directories.
1446
1447
1448    As  usual, the build  system and  the demos  have been  updated to
1449    reflect the change..
1450
1451    Here's a layout of the new directory hierarchy:
1452
1453    TOP_DIR
1454      include/
1455         freetype/
1456            freetype.h
1457            ...
1458            config/
1459              ftoption.h
1460              ftconfig.h
1461              ftmodule.h
1462
1463            internal/
1464              ftobjs.h
1465              ftstream.h
1466              ftcalc.h
1467              ...
1468
1469      src/
1470         base/
1471            ...
1472
1473         sfnt/
1474         psnames/
1475         truetype/
1476         type1/
1477         type1z/
1478
1479
1480    Compiling a module is now  much easier, for example, the following
1481    should work when in the TOP_DIR directory on an ANSI build:
1482
1483       gcc -c -I./include -I./src/base src/base/ftbase.c
1484       gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
1485       etc..
1486
1487    (of course, using -Iconfig/<system> if you provide system-specific
1488     configuration files).
1489
1490  - updated the structure of FT_Outline_Funcs in order to allow direct
1491    coordinate scaling within  the outline decomposition routine (this
1492    is  important for virtual  "on" points  with TrueType  outlines) +
1493    updates to the rasters to support this..
1494
1495  - updated  the OS/2  table  loading code  in "src/sfnt/ttload.c"  in
1496    order to support version 2 of the table (see OpenType 1.2 spec)
1497
1498  - created  "include/tttables.h"  and  "include/t1tables.h" to  allow
1499    client applications to access some of  the SFNT and T1 tables of a
1500    face  with  a  procedural  interface (see  FT_Get_Sfnt_Table())  +
1501    updates to internal source files to reflect the change..
1502
1503  - some  cleanups in  the source  code to  get rid  of  warnings when
1504    compiling with the "-Wall -W -ansi -pedantic" options in gcc.
1505
1506  - debugged and moved the smooth renderer to "src/base/ftgrays.c" and
1507    its header to "include/ftgrays.h"
1508
1509  - updated TT_MAX_SUBGLYPHS  to 96 as some CJK  fonts have composites
1510    with up to 80 sub-glyphs !! Thanks to Werner
1511
1512
1513======================================================================
1514
1515OLD CHANGES - 14-apr-2000
1516
1517  - fixed  a bug  in  the  TrueType glyph  loader  that prevented  the
1518    correct loading of some CJK glyphs in mingli.ttf
1519
1520  - improved the standard Type 1 hinter in "src/type1"
1521
1522  - fixed two bugs  in the experimental Type 1  driver in "src/type1z"
1523    to handle the new XFree86 4.0 fonts (and a few other ones..)
1524
1525  - the smooth  renderer is now  complete and supports  sub-banding to
1526    render large glyphs at high speed. However, it is still located in
1527    "demos/src/ftgrays.c" and should move to the library itself in the
1528    next  beta..   NOTE:  The  smooth  renderer   doesn't  compile  in
1529    stand-alone mode anymore, but this should be fixed RSN..
1530
1531  - introduced convenience  functions to  more easily deal  with glyph
1532    images, see  "include/ftglyph.h" for more details, as  well as the
1533    new  demo program  named "demos/src/ftstring.c"  that demonstrates
1534    its use
1535
1536  - implemented  FT_LOAD_NO_RECURSE in  both the  TrueType and  Type 1
1537    drivers  (this  is required  by  the  auto-hinter  to improve  its
1538    results).
1539
1540  - changed   the  raster   interface,  in   order  to   allow  client
1541    applications to provide their own span-drawing callbacks. However,
1542    only the smooth renderer  supports this. See "FT_Raster_Params" in
1543    the file "include/ftimage.h"
1544
1545  - fixed  a small bug  in FT_MulFix  that caused  incorrect transform
1546    computation!
1547
1548  - Note: The tutorial is out-of-date, grumpf.. :-(
1549
1550
1551======================================================================
1552
1553OLD CHANGES - 12-mar-2000
1554
1555  - changed  the  layout  of  configuration  files  :  now,  all  ANSI
1556    configuration         files         are         located         in
1557    "freetype2/config".  System-specific over-rides  can be  placed in
1558    "freetype2/config/<system>".
1559
1560  - moved all configuration macros to "config/ftoption.h"
1561
1562  - improvements in the Type 1 driver with AFM support
1563
1564  - changed the fields  in the FT_Outline structure :  the old "flags"
1565    array is re-named "tags", while all ancient flags are encoded into
1566    a single unsigned int named "flags".
1567
1568  - introduced     new      flags     in     FT_Outline.flags     (see
1569    ft_outline_.... enums in "ftimage.h").
1570
1571  - changed outline functions to "FT_Outline_<action>" syntax
1572
1573  - added a smooth anti-alias renderer to the demonstration programs
1574
1575  - added Mac graphics driver (thanks Just)
1576
1577  - FT_Open_Face  changed  in  order   to  received  a  pointer  to  a
1578    FT_Open_Args descriptor..
1579
1580  - various  cleanups,  a  few  more API  functions  implemented  (see
1581    FT_Attach_File)
1582
1583  - updated some docs
1584
1585
1586======================================================================
1587
1588OLD CHANGES - 22-feb-2000
1589
1590  - introduced the "psnames" module. It is used to:
1591
1592      o convert  a Postscript glyph  name into the  equivalent Unicode
1593        character code (used by the  Type 1 driver(s) to synthetize on
1594        the fly a Unicode charmap).
1595
1596      o provide an  interface to retrieve the Postscript  names of the
1597        Macintosh,  Adobe  Standard &  Adobe  Expert character  codes.
1598        (the Macintosh  names are  used by the  SFNT-module postscript
1599        names support routines, while the other two tables are used by
1600        the Type 1 driver(s)).
1601
1602  - introduced the "type1z" alternate Type  1 driver. This is a (still
1603    experimental) driver  for the Type  1 format that  will ultimately
1604    replace the one  in "src/type1". It uses pattern  matching to load
1605    data from the  font, instead of a finite  state analyzer. It works
1606    much better than the "old"  driver with "broken" fonts. It is also
1607    much smaller (under 15 Kb).
1608
1609  - the  Type 1  drivers (both  in "src/type1"  and  "src/type1z") are
1610    nearly  complete.  They  both  provide automatic  Unicode  charmap
1611    synthesis through  the "psnames" module. No  re-encoding vector is
1612    needed.  (note  that they  still  leak  memory  due to  some  code
1613    missing, and I'm getting lazy).
1614
1615    Trivial AFM support has been added to read kerning information but
1616    wasn't exactly tested as it should ;-)
1617
1618  - The TrueType  glyph loader has  been seriously rewritten  (see the
1619    file  "src/truetype/ttgload.c". It  is now  much, much  simpler as
1620    well as  easier to read,  maintain and understand  :-) Preliminary
1621    versions introduced a  memory leak that has been  reported by Jack
1622    Davis, and is now fixed..
1623
1624  - introduced  the new  "ft_glyph_format_plotter", used  to represent
1625    stroked outlines  like Windows "Vector" fonts, and  certain Type 1
1626    fonts  like "Hershey".  The corresponding  raster will  be written
1627    soon.
1628
1629  - FT_New_Memory_Face  is  gone.  Likewise,  FT_Open_Face has  a  new
1630    interface that uses a structure  to describe the input stream, the
1631    driver (if required), etc..
1632
1633
1634TODO
1635
1636  - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
1637
1638  - Add a function like FT_Load_Character( face, char_code, load_flags
1639    )  that  would really  embbed  a  call  to FT_Get_Char_Index  then
1640    FT_Load_Glyph to ease developer's work.
1641
1642  - Update the tutorial!
1643
1644  - consider adding  support for Multiple  Master fonts in the  Type 1
1645    drivers.
1646
1647  - Test the AFM routines of the  Type 1 drivers to check that kerning
1648    information is returned correctly.
1649
1650  - write a decent auto-gridding component  !! We need this to release
1651    FreeType 2.0 gold !
1652
1653
1654less urgent needs:
1655
1656  - add a CFF/Type2 driver
1657  - add a BDF driver
1658  - add a FNT/PCF/HBF driver
1659  - add a Speedo driver from the X11 sources
1660
1661
1662======================================================================
1663
1664OLDER CHANGES - 27-jan-2000
1665
1666  - updated the  "sfnt" module  interface to allow  several SFNT-based
1667    drivers to co-exist peacefully
1668
1669  - updated  the "T1_Face"  type  to better  separate Postscript  font
1670    content  from the  rest of  the FT_Face  structure. Might  be used
1671    later by the CFF/Type2 driver..
1672
1673  - added an experimental replacement Type 1 driver featuring advanced
1674    (and speedy) pattern matching to retrieve the data from postscript
1675    fonts.
1676
1677  - very minor  changes in the implementation  of FT_Set_Char_Size and
1678    FT_Set_Pixel_Sizes (they now implement default to ligthen the font
1679    driver's code).
1680
1681
1682======================================================================
1683
1684OLD MESSAGE
1685
1686This file summarizes the changes that occured since the last "beta" of
1687FreeType 2.  Because  the list is important, it  has been divided into
1688separate sections:
1689
1690Table Of Contents:
1691
1692    I   High-Level Interface (easier !)
1693   II   Directory Structure
1694  III   Glyph Image Formats
1695   IV   Build System
1696    V   Portability
1697   VI   Font Drivers
1698
1699
1700----------------------------------------------------------------------
1701
1702High-Level Interface:
1703
1704  The high-level API has been considerably simplified.  Here is how:
1705
1706    - resource objects have disappeared.  this means that face objects
1707      can now be created with  a single function call (see FT_New_Face
1708      and FT_Open_Face)
1709
1710    - when calling  either FT_New_Face  & FT_Open_Face, a  size object
1711      and a glyph slot object  are automatically created for the face,
1712      and can  be accessed  through "face->glyph" and  "face->size" if
1713      one really  needs to.   In most cases,  there's no need  to call
1714      FT_New_Size or FT_New_Glyph.
1715
1716    - similarly,  FT_Load_Glyph  now  only  takes  a  "face"  argument
1717      (instead  of a  glyph  slot  and a  size).  Also, it's  "result"
1718      parameter is  gone, as the glyph  image type is  returned in the
1719      field "face->glyph.format"
1720
1721    - the list  of available  charmaps is directly  accessible through
1722      "face->charmaps",  counting "face->num_charmaps"  elements. Each
1723      charmap  has an  'encoding'  field which  specifies which  known
1724      encoding it deals with. Valid values are, for example :
1725
1726          ft_encoding_unicode      (for ASCII, Latin-1 and Unicode)
1727          ft_encoding_apple_roman
1728          ft_encoding_sjis
1729          ft_encoding_adobe_standard
1730          ft_encoding_adobe_expert
1731
1732      other  values may  be added  in the  future. Each  charmap still
1733      holds  its "platform_id"  and "encoding_id"  values in  case the
1734      encoding is too exotic for the current library
1735
1736
1737----------------------------------------------------------------------
1738
1739Directory Structure:
1740
1741  Should seem obvious to most of you:
1742
1743     freetype/
1744         config/        -- configuration sub-makefiles
1745            ansi/
1746            unix/       -- platform-specific configuration files
1747            win32/
1748            os2/
1749            msdos/
1750
1751         include/       -- public header  files, those to  be included
1752                           directly by client apps
1753
1754         src/           -- sources of the library
1755           base/        -- the base layer
1756           sfnt/        -- the sfnt "driver"  (see the drivers section
1757                           below)
1758           truetype/    -- the truetype driver
1759           type1/       -- the type1 driver
1760           shared/      -- some header files shared between drivers
1761
1762         demos/         -- demos/tools
1763
1764         docs/          -- documentation (a bit empty for now)
1765
1766
1767----------------------------------------------------------------------
1768
1769Glyph Image Formats:
1770
1771  Drivers are now able to  register new glyph image formats within the
1772  library.  For  now, the  base layer supports  of course  bitmaps and
1773  vector  outlines, but  one  could imagine  something different  like
1774  colored bitmaps, bi-color vectors or wathever else (Metafonts anyone
1775  ??).
1776
1777  See  the   file  `include/ftimage.h'.   Note  also  that   the  type
1778  FT_Raster_Map  is gone,  and  is now  replaced  by FT_Bitmap,  which
1779  should encompass all known bitmap types.
1780
1781  Each new  image format  must provide at  least one "raster",  i.e. a
1782  module capable of  transforming the glyph image into  a bitmap. It's
1783  also possible  to change the default  raster used for  a given glyph
1784  image format.
1785
1786  The default outline  scan-converter now uses 128 levels  of grays by
1787  default,  which tends  to smooth  many  things. Note  that the  demo
1788  programs have been updated significantly in order to display these..
1789
1790
1791----------------------------------------------------------------------
1792
1793Build system:
1794
1795  You still need  GNU Make to build the library.  The build system has
1796  been very seriously re-vamped in order to provide things like :
1797
1798   - automatic host platform  detection (reverting to 'config/ansi' if
1799     it is not detected, with pseudo-standard compilation flags)
1800
1801   - the ability to compile from the Makefiles with very different and
1802     exotic compilers. Note that  linking the library can be difficult
1803     for some platforms.
1804
1805     For example, the file `config/win32/lcclib.bat' is invoked by the
1806     build system to create the ".lib" file with LCC-Win32 because its
1807     librarian  has too  many flaws  to be  invoked directly  from the
1808     Makefile.
1809
1810  Here's how it works:
1811
1812  - the first time you type `make',  the build system runs a series of
1813    sub-makefiles in order to detect your host platform. It then dumps
1814    what  it found,  and  creates  a file  called  `config.mk' in  the
1815    current  directory. This  is a  sub-Makefile used  to  define many
1816    important Make variables used to build the library.
1817
1818  - the second time, the build system detects the `config.mk' then use
1819    it  to  build the  library.  All object  files  go  into 'obj'  by
1820    default,  as well  as the  library file,  but this  can  easily be
1821    changed.
1822
1823  Note that  you can run "make  setup" to force  another host platform
1824  detection  even   if  a  `config.mk'  is  present   in  the  current
1825  directory.  Another solution  is  simply to  delete  the file,  then
1826  re-run make.
1827
1828  Finally, the  default compiler  for all platforms  is gcc  (for now,
1829  this will hopefully changed in  the future). You can however specify
1830  a different  compiler by specifying  it after the 'setup'  target as
1831  in:
1832
1833      gnumake setup lcc         on Win32 to use the LCC compiler
1834      gnumake setup visualc     on Win32 to use Visual C++
1835
1836  See  the file  `config/<system>/detect.mk' for  a list  of supported
1837  compilers for your platforms.
1838
1839  It should be relatively easy  to write new detection rules files and
1840  config.mk..
1841
1842  Finally, to  build the demo programs,  go to `demos'  and launch GNU
1843  Make, it will use the `config.mk'  in the top directory to build the
1844  test programs..
1845
1846
1847----------------------------------------------------------------------
1848
1849Portability:
1850
1851  In  the  previous  beta,  a  single FT_System  object  was  used  to
1852  encompass  all  low-level  operations like  thread  synchronisation,
1853  memory management and i/o access. This has been greatly simplified:
1854
1855    - thread synchronisation  has been dropped, for  the simple reason
1856      that the library  is already re-entrant, and that  if you really
1857      need  two  threads accessing  the  same  FT_Library, you  should
1858      really synchronize access to it yourself with a simple mutex.
1859
1860    - memory  management is  performed  through a  very simple  object
1861      called "FT_Memory",  which really is a table  containing a table
1862      of pointers to  functions like malloc, realloc and  free as well
1863      as some user data (closure).
1864
1865    - resources have disappeared (they created more problems than they
1866      solved), and  i/o management have  been simplified greatly  as a
1867      result. Streams are defined through FT_Stream objects, which can
1868      be either memory-based or disk-based.
1869
1870      Note that  each face  has its own  stream, which is  closed only
1871      when  the  face object  is  destroyed.  Hence,  a function  like
1872      TT_Flush_Face in  1.x cannot be directly  supported. However, if
1873      you really need something like  this, you can easily tailor your
1874      own streams  to achieve the same  feature at a  lower level (and
1875      use FT_Open_Face instead of FT_New_Face to create the face).
1876
1877  See the file  "include/ftsystem.h" for more details, as  well as the
1878  implementations found in "config/unix" and "config/ansi".
1879
1880
1881----------------------------------------------------------------------
1882
1883Font Drivers:
1884
1885  The  Font Driver  interface has  been modified  in order  to support
1886  extensions & versioning.
1887
1888
1889  The  list of  the font  drivers that  are statically  linked  to the
1890  library at compile time is  managed through a new configuration file
1891  called `config/<platform>/ftmodule.h'.
1892
1893  This file is autogenerated when invoking `make modules'. This target
1894  will parse  all sub-directories of 'src', looking  for a "module.mk"
1895  rules file, used to describe the driver to the build system.
1896
1897  Hence, one  should call  `make modules' each  time a font  driver is
1898  added or removed from the `src' directory.
1899
1900  Finally, this version provides a "pseudo-driver" in `src/sfnt'. This
1901  driver doesn't  support font  files directly, but  provides services
1902  used by  all TrueType-like font  drivers. Hence, its code  is shared
1903  between  the TrueType  & OpenType  font formats,  and  possibly more
1904  formats to come if we're lucky..
1905
1906
1907----------------------------------------------------------------------
1908
1909Extensions support:
1910
1911  The extensions support is inspired by the one found in 1.x.
1912
1913  Now, each font driver has  its own "extension registry", which lists
1914  which extensions  are available  for the font  faces managed  by the
1915  driver.
1916
1917  Extension ids are  now strings, rather than 4-byte  tags, as this is
1918  usually more readable..
1919
1920  Each extension has:
1921    - some data, associated to each face object
1922    - an interface (table of function pointers)
1923
1924  An extension  that is format-specific should  simply register itself
1925  to the correct font driver. Here is some example code:
1926
1927   // Registering an extensions
1928   //
1929   FT_Error  FT_Init_XXXX_Extension( FT_Library  library )
1930   {
1931     FT_DriverInterface*  tt_driver;
1932
1933     driver = FT_Get_Driver( library, "truetype" );
1934     if (!driver) return FT_Err_Unimplemented_Feature;
1935
1936     return FT_Register_Extension( driver, &extension_class );
1937   }
1938
1939
1940   // Implementing the extensions
1941   //
1942   FT_Error  FT_Proceed_Extension_XXX( FT_Face  face )
1943   {
1944     FT_XXX_Extension            ext;
1945     FT_XXX_Extension_Interface  ext_interface;
1946
1947     ext = FT_Get_Extension( face, "extensionid", &ext_interface );
1948     if (!ext) return error;
1949
1950     return ext_interface->do_it(ext);
1951   }
1952
1953--- end of CHANGES ---
Note: See TracBrowser for help on using the repository browser.