blob: ca80f47878a9e750ec98a8c8ee32a7d67ac240d1 [file] [log] [blame]
David Turneraaac8132000-12-01 18:55:22 +00001LATEST CHANGES BETWEEN 2.0.1 and 2.0:
2
3 2.0.1 introduces a few changes:
4
5 - fixed many bugs related to the support of CFF / OpenType fonts.
6 These formats are now much better supported though there is still
7 work planned to deal with Charset tables and PDF-embedded CFF
8 files that use the old "seac" command.
9
10 - the library could not be compiled in debug mode with a very small
11 number of C compilers whose pre-processors didn't implement the
Werner Lemberg2e82c932000-12-01 21:56:47 +000012 "##" directive correctly (i.e. per se the ANSI C specification!)
David Turneraaac8132000-12-01 18:55:22 +000013 An elegant fix was found.
14
15 - added support for the free Borland command-line C++ Builder compiler
16 use "make setup bcc32" to use it. Also fixed a few source lines that
17 generated new warnings with BCC32.
18
19 - fixed a bug in FT_Outline_Get_BBox when computing the extrema of
Werner Lemberg2e82c932000-12-01 21:56:47 +000020 a conic Bezier arc.
David Turneraaac8132000-12-01 18:55:22 +000021
22 - updated the INSTALL file to add IDE compilation.
23
24 - other minor bug fixes, from invalid Type 1 style flags to correct
25 support of synthetic (obliqued) fonts in the auto-hinter, better
26 support for embedded bitmaps in a SFNT font.
27
28 - fixed some problems with "freetype-config"
29
30
31 Finally, the "standard" scheme for including FreeType headers is now
Werner Lemberg2e82c932000-12-01 21:56:47 +000032 gradually changing, but this will be explained in a later release
33 (probably 2.0.2) ...
David Turneraaac8132000-12-01 18:55:22 +000034
Werner Lemberg2e82c932000-12-01 21:56:47 +000035 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi for
36 their contributions!
David Turneraaac8132000-12-01 18:55:22 +000037
38=========================================================================
39CHANGES BETWEEN beta8 and 2.0
David Turnerf9b8dec2000-06-16 19:34:52 +000040
David Turner27c88272000-11-09 19:10:22 +000041 - changed the default installation path for public headers from
42 "include/freetype" to "include/freetype2".
43
44 Also added a new "freetype-config" that is automatically
45 generated and installed on Unix and Cygwin systems. The
46 script itself is used to retrieve the current install path,
47 C compilation flags as well as linker flags..
48
49 - fixed several small bugs:
50
51 - incorrect max advance width for fixed-pitch Type 1 fonts
52
53 - incorrect glyph names for certain TrueType fonts
54
55 - the glyph advance was not copied when FT_Glyph_To_Bitmap was called
56
57 - the linearHoriAdvance and linerVertAdvance fields were not
58 correctly returned for glyphs processed by the auto-hinter
59
Werner Lembergb5084e12000-10-28 17:10:06 +000060 - "type1z" renamed back to "type1"; the old "type1" module has been
61 removed
62
David Turner046f7a02000-09-15 22:42:06 +000063 - revamped the build system to make it a lot more generic. This will
64 allow us to re-use nearly un-modified in lots of other projects
65 (including FreeType Layout)
66
David Turner34f1c2f2000-08-23 22:47:44 +000067 - changed "cid" to use "psaux" too..
68
David Turner3b2c50e2000-08-23 21:11:13 +000069 - added the cache sub-system. See <freetype/ftcache.h> as well as the
70 sources in "src/cache". Note that it compiles but is still untested
71 for now ..
72
David Turnera39acf52000-08-23 02:47:57 +000073 - updated "docs/docmaker.py", a draft API reference is available at
74 http://www.freetype.org/ft2api.html
75
Werner Lembergb5084e12000-10-28 17:10:06 +000076 - changed "type1" to use "psaux"
David Turnera39acf52000-08-23 02:47:57 +000077
78 - created a new module named "psaux" to hold the Type 1 & Type 2 parsing
Werner Lembergb5084e12000-10-28 17:10:06 +000079 routines. It should be used by "type1", "cid" and "cff" in the future
David Turnera39acf52000-08-23 02:47:57 +000080
81 - fixed an important bug in "FT_Glyph_Get_CBox"
82
David Turnerb1693412000-07-27 21:48:48 +000083 - fixed some compiler warnings that happened since the TrueType
84 bytecode decoder was deactivated by default..
85
David Turnerc5cdf8b2000-07-27 21:40:22 +000086 - fixed two memory leaks:
87 - the memory manager (16 bytes) isn't released in FT_Done_FreeType !!
Werner Lemberge4b32a52000-10-31 20:42:18 +000088
David Turnerc5cdf8b2000-07-27 21:40:22 +000089 - using custom input streams, the copy of the original stream
90 was never released
91
92 - fixed the auto-hinter by performing automatic computation of the
93 "filling direction" of each glyph. This is done through a simple and
94 fast approximation, and seems to work (problems spotted by Werner
95 though). The Arphic fonts are a lot nicer though there are still a
96 lot of things to do to handle Asian fonts correctly..
97
98===========================================================================
99BETA-8 (RELEASE CANDIDATE) CHANGES
100
David Turner5f5b4462000-07-26 19:13:51 +0000101 - deactivated the trueType bytecode interpreter by default
Werner Lemberge4b32a52000-10-31 20:42:18 +0000102
David Turner5f5b4462000-07-26 19:13:51 +0000103 - deactivated the "src/type1" font driver. Now "src/type1z" is
104 used by default..
105
David Turner5fe4c002000-07-26 19:04:08 +0000106 - updates to the build system. We now compile the library correctly
107 under Unix system through "configure" which is automatically called
108 on the first "make" invocation.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000109
David Turner5fe4c002000-07-26 19:04:08 +0000110 - added the auto-hinting module !!. Fixing some bugs here and there..
111
David Turner49bd4f02000-07-12 16:57:37 +0000112 - found some bugs in the composite loader (seac) of the Type1-based
113 font drivers..
114
115 - renamed the directory "freetype2/config" to "freetype2/builds" and
David Turner1ca6f2d2000-07-08 00:49:43 +0000116 updated all relevant files..
117
David Turner9b3d1c72000-07-07 19:47:34 +0000118 - found a memory leak in the "type1" driver
Werner Lemberge4b32a52000-10-31 20:42:18 +0000119
David Turner9b3d1c72000-07-07 19:47:34 +0000120 - incorporated Tom's patches to support flex operators correctly
121 in OpenType/CFF fonts.. Now all I need is to support pure CFF
122 and CEF fonts to be done with this driver.. :-)
123
124 - added the Windows FNT/FON driver in "src/winfonts". For now,
125 it always "simulates" a Unicode charmap, so it shouldn't be
126 considered completed right now..
Werner Lemberge4b32a52000-10-31 20:42:18 +0000127
David Turner9b3d1c72000-07-07 19:47:34 +0000128 It's there to be more a proof of concept than anything else
129 anyway. The driver is a single C source file, that compiles
130 to 3 Kb of code..
Werner Lemberge4b32a52000-10-31 20:42:18 +0000131
David Turner9b3d1c72000-07-07 19:47:34 +0000132 I'm still working on the PCF/BDF drivers.. but I'm too lazy
133 to finish them now..
134
135
David Turnerc06aba22000-06-30 23:38:23 +0000136 - CHANGES TO THE HIGH-LEVEL API
Werner Lemberge4b32a52000-10-31 20:42:18 +0000137
David Turnerc06aba22000-06-30 23:38:23 +0000138 o FT_Get_Kerning has a new parameter that allows you to select
139 the coordinates of the kerning vector ( font units, scaled,
140 scaled + grid-fitted ).
Werner Lemberge4b32a52000-10-31 20:42:18 +0000141
David Turnerc06aba22000-06-30 23:38:23 +0000142 o the outline functions are now in <freetype/ftoutln.h> and not
143 part of <freetype/freetype.h> anymore
Werner Lemberge4b32a52000-10-31 20:42:18 +0000144
David Turnerc06aba22000-06-30 23:38:23 +0000145 o <freetype/ftmodule.h> now contains declarations for
146 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules
147
148 o the so-called convenience functions have moved from "ftoutln.c"
149 to "ftglyph.c", and are thus available with this optional component
150 of the library. They are declared in <freetype/ftglyph.h> now..
151
152 o anti-aliased rendering is now the default for FT_Render_Glyph
153 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
154 To generate a monochrome bitmap, use ft_render_mode_mono, or the
155 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000156
David Turnerc06aba22000-06-30 23:38:23 +0000157 FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000158
David Turnerc06aba22000-06-30 23:38:23 +0000159 o <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
160 solving a few headaches :-)
161
162 o the type FT_GlyphSlotRec has now a "library" field.
163
164
165
166 - CHANGES TO THE "ftglyph.h" API
Werner Lemberge4b32a52000-10-31 20:42:18 +0000167
David Turnerc06aba22000-06-30 23:38:23 +0000168 This API has been severely modified in order to make it simpler,
169 clearer, and more efficient. It certainly now looks like a real
170 "glyph factory" object, and allows client applications to manage
171 (i.e. transform, bbox and render) glyph images without ever knowing
172 their original format.
173
David Turner98258612000-06-28 20:43:07 +0000174 - added support for CID-keyed fonts to the CFF driver.
175 maybe support for pure CFF + CEF fonts should come in ??
David Turner9d636b62000-06-27 23:32:27 +0000176
177
178 - cleaned up source code in order to avoid two functions with the
179 same name. Also changed the names of the files in "type1z" from
180 "t1XXXX" to "z1XXXX" in order to avoid any conflicts.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000181
David Turner9d636b62000-06-27 23:32:27 +0000182 "make multi" now works well :-)
Werner Lemberge4b32a52000-10-31 20:42:18 +0000183
David Turner81bb4ad2000-06-28 04:19:49 +0000184 Also removed the use of "cidafm" for now, even if the source files
185 are still there. This functionality will certainly go into a specific
186 module..
David Turnerc06aba22000-06-30 23:38:23 +0000187
188
189
Werner Lemberge4b32a52000-10-31 20:42:18 +0000190 - ADDED SUPPORT FOR THE AUTO-HINTER
191
David Turnerc06aba22000-06-30 23:38:23 +0000192 It works :-) I have a demo program which simply is a copy of "ftview"
193 that does a FT_Add_Module( library, &autohinter_module_class ) after
194 library initialisation, and Type 1 & OpenType/CFF fonts are now hinted.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000195
David Turnerc06aba22000-06-30 23:38:23 +0000196 CID fonts are not hinted, as they include no charmap and the auto-hinter
197 doesn't include "generic" global metrics computations yet..
Werner Lemberge4b32a52000-10-31 20:42:18 +0000198
David Turnerc06aba22000-06-30 23:38:23 +0000199 Now, I need to release this thing to the FreeType 2 source..
200
201
Werner Lemberge4b32a52000-10-31 20:42:18 +0000202
203
David Turner9d636b62000-06-27 23:32:27 +0000204
205 - CHANGES TO THE RENDERER MODULES
Werner Lemberge4b32a52000-10-31 20:42:18 +0000206
David Turner9d636b62000-06-27 23:32:27 +0000207 the monochrome and smooth renderers are now in two distinct directories,
208 namely "src/raster1" and "src/smooth". Note that the old "src/renderer"
209 is now gone..
Werner Lemberge4b32a52000-10-31 20:42:18 +0000210
David Turner9d636b62000-06-27 23:32:27 +0000211 I ditched the 5-gray-levels renderers. Basically, it involved a simple
212 #define toggle in 'src/raster1/ftraster.c'
Werner Lemberge4b32a52000-10-31 20:42:18 +0000213
David Turner9d636b62000-06-27 23:32:27 +0000214 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now select
215 the best renderer available, depending on render mode. If the current
216 renderer for a given glyph image format isn't capable of supporting
217 the render mode, another one will be found in the library's list.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000218
David Turner9d636b62000-06-27 23:32:27 +0000219 This means that client applications do not need to switch or set the
220 renderers themselves (as in the latest change), they'll get what they
221 want automatically... At last..
Werner Lemberge4b32a52000-10-31 20:42:18 +0000222
David Turner9d636b62000-06-27 23:32:27 +0000223 Changed the demo programs accordingly..
Werner Lemberge4b32a52000-10-31 20:42:18 +0000224
225
David Turner9d636b62000-06-27 23:32:27 +0000226
David Turnerf0df85b2000-06-22 00:17:42 +0000227 - MAJOR INTERNAL REDESIGN:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000228
David Turnerf0df85b2000-06-22 00:17:42 +0000229 A lot of internal modifications have been performed lately on the
230 source in order to provide the following enhancements:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000231
David Turnerf0df85b2000-06-22 00:17:42 +0000232 - more generic module support:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000233
David Turnerf0df85b2000-06-22 00:17:42 +0000234 The FT_Module type is now defined to represent a handle to a given
235 module. The file <freetype/ftmodule.h> contains the FT_Module_Class
236 definition, as well as the module-loading public API
237
238 The FT_Driver type is still defined, and still represents a pointer
239 to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
240 FT_Get_Driver by FT_Get_Module, etc..
241
242
243 - support for generic glyph image types:
244
245 The FT_Renderer type is a pointer to a module used to perform various
246 operations on glyph image.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000247
David Turnerf0df85b2000-06-22 00:17:42 +0000248 Each renderer is capable of handling images in a single format
249 (e.g. ft_glyph_format_outline). Its functions are used to:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000250
David Turnerf0df85b2000-06-22 00:17:42 +0000251 - transform an glyph image
252 - render a glyph image into a bitmap
253 - return the control box (dimensions) of a given glyph image
254
255
256 The scan converters "ftraster.c" and "ftgrays.c" have been moved
257 to the new directory "src/renderer", and are used to provide two
258 default renderer modules.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000259
David Turnerf0df85b2000-06-22 00:17:42 +0000260 One corresponds to the "standard" scan-converter, the other to the
261 "smooth" one.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000262
David Turnerf0df85b2000-06-22 00:17:42 +0000263 The current renderer can be set through the new function
264 FT_Set_Renderer.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000265
David Turnerf0df85b2000-06-22 00:17:42 +0000266 The old raster-related function FT_Set_Raster, FT_Get_Raster and
267 FT_Set_Raster_Mode have now disappeared, in favor of the new:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000268
David Turnerf0df85b2000-06-22 00:17:42 +0000269 FT_Get_Renderer
270 FT_Set_Renderer
271
272 see the file <freetype/ftrender.h> for more details..
273
274 These changes were necessary to properly support different scalable
275 formats in the future, like bi-color glyphs, etc..
276
277
278 - glyph loader object:
279
280 A new internal object, called a 'glyph loader' has been introduced
281 in the base layer. It is used by all scalable format font drivers
282 to load glyphs and composites.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000283
David Turnerf0df85b2000-06-22 00:17:42 +0000284 This object has been created to reduce the code size of each driver,
285 as each one of them basically re-implemented its functionality.
286
287 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
288 more information..
289
290
291
292 - FT_GlyphSlot had new fields:
293
294 In order to support extended features (see below), the FT_GlyphSlot
295 structure has a few new fields:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000296
David Turnerf0df85b2000-06-22 00:17:42 +0000297 linearHoriAdvance: this field gives the linearly scaled (i.e.
298 scaled but unhinted) advance width for the glyph,
299 expressed as a 16.16 fixed pixel value. This
300 is useful to perform WYSIWYG text.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000301
David Turnerf0df85b2000-06-22 00:17:42 +0000302 linearVertAdvance: this field gives the linearly scaled advance
303 height for the glyph (relevant in vertical glyph
304 layouts only). This is useful to perform
Werner Lemberge4b32a52000-10-31 20:42:18 +0000305 WYSIWYG text.
David Turnerf0df85b2000-06-22 00:17:42 +0000306
307 Note that the two above field replace the removed "metrics2" field
308 in the glyph slot.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000309
David Turnerf0df85b2000-06-22 00:17:42 +0000310 advance: this field is a vector that gives the transformed
311 advance for the glyph. By default, it corresponds
312 to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
313 was specified when calling FT_Load_Glyph or FT_Load_Char
314
315 bitmap_left: this field gives the distance in integer pixels from
316 the current pen position to the left-most pixel of
317 a glyph image WHEN IT IS A BITMAP. It is only valid
318 when the "format" field is set to
319 "ft_glyph_format_bitmap", for example, after calling
320 the new function FT_Render_Glyph.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000321
David Turnerf0df85b2000-06-22 00:17:42 +0000322 bitmap_top: this field gives the distance in integer pixels from
323 the current pen position (located on the baseline) to
324 the top-most pixel of the glyph image WHEN IT IS A
325 BITMAP. Positive values correspond to upwards Y.
326
327 loader: this is a new private field for the glyph slot. Client
328 applications should not touch it..
329
330
331 - support for transforms and direct rendering in FT_Load_Glyph:
332
333 Most of the functionality found in <freetype/ftglyph.h> has been
334 moved to the core library. Hence, the following:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000335
David Turnerf0df85b2000-06-22 00:17:42 +0000336 - a transform can be specified for a face through FT_Set_Transform.
337 this transform is applied by FT_Load_Glyph to scalable glyph images
338 (i.e. NOT TO BITMAPS) before the function returns, unless the
339 bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
340
341
342 - once a glyph image has been loaded, it can be directly converted to
343 a bitmap by using the new FT_Render_Glyph function. Note that this
344 function takes the glyph image from the glyph slot, and converts
345 it to a bitmap whose properties are returned in "face.glyph.bitmap",
346 "face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
347 native image might be lost after the conversion.
348
349
350 - when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
351 and FT_Load_Char functions will call FT_Render_Glyph automatically
352 when needed.
353
354
355
356
David Turnerf9b8dec2000-06-16 19:34:52 +0000357 - reformated all modules source code in order to get rid of the basic
358 data types redifinitions (i.e. "TT_Int" instead of "FT_Int", "T1_Fixed"
359 instead of "FT_Fixed"). Hence the format-specific prefixes like "TT_",
360 "T1_", "T2_" and "CID_" are only used for relevant structures..
361
362============================================================================
363OLD CHANGES FOR BETA 7
David Turner3475e7f2000-05-17 20:56:01 +0000364
David Turner2b9be992000-06-07 23:41:17 +0000365 - bug-fixed the OpenType/CFF parser. It now loads and displays my two
366 fonts nicely, but I'm pretty certain that more testing is needed :-)
Werner Lemberge4b32a52000-10-31 20:42:18 +0000367
David Turner2b9be992000-06-07 23:41:17 +0000368 - fixed the crummy Type 1 hinter, it now handles accented characters
369 correctly (well, the accent is not always well placed, but that's
370 another problem..)
371
David Turner04aa8002000-06-01 03:27:48 +0000372 - added the CID-keyed Type 1 driver in "src/cid". Works pretty well for
373 only 13 Kb of code ;-) Doesn't read AFM files though, nor the really
374 useful CMAP files..
375
376 - fixed two bugs in the smooth renderer (src/base/ftgrays.c). Thanks to
377 Boris Letocha for spotting them and providing a fix..
378
David Turner4f99c3c2000-05-29 20:55:13 +0000379 - fixed potential "divide by zero" bugs in ftcalc.c.. my god..
380
381 - added source code for the OpenType/CFF driver (still incomplete though..)
382
383 - modified the SFNT driver slightly to perform more robust header
384 checks in TT_Load_SFNT_Header. This prevents certain font files
385 (e.g. some Type 1 Multiple Masters) from being incorrectly "recognized"
386 as TrueType font files..
387
David Turner2e421312000-05-26 22:13:17 +0000388 - moved a lot of stuff from the TrueType driver to the SFNT module,
389 this allows greater code re-use between font drivers (e.g. TrueType,
390 OpenType, Compact-TrueType, etc..)
391
392 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
393 to minimally speed it up..
394
David Turner11187202000-05-26 17:13:23 +0000395 - added support for Multiple Master fonts in "type1z". There is also
396 a new file named <freetype/ftmm.h> which defines functions to
397 manage them from client applications.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000398
David Turner11187202000-05-26 17:13:23 +0000399 The new file "src/base/ftmm.c" is also optional to the engine..
400
401 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
402 small bug fixes in FT_Load_Glyph, the "type1" driver, etc..
403
David Turnerf5dcdd52000-05-23 22:16:27 +0000404 - a minor fix to the Type 1 driver to let them apply the font matrix
405 correctly (used for many oblique fonts..)
406
David Turner51179f02000-05-18 16:18:05 +0000407 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
408 to use %p instead of %lx).. Thanks to Karl Robillard
409
David Turner109fcf62000-05-17 23:35:37 +0000410 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) + added
411 a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be cropped when
412 loaded from a file (maybe I should move the bitmap cropper to the
413 base layer ??).
414
David Turner3475e7f2000-05-17 20:56:01 +0000415 - changed the default number of gray levels of the smooth renderer to
416 256 (instead of the previous 128). Of course, the human eye can't
Werner Lembergb5084e12000-10-28 17:10:06 +0000417 see any difference ;-)
David Turner3475e7f2000-05-17 20:56:01 +0000418
419 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number of
420 subglyphs in a TrueType font now..
421
422=============================================================================
423OLD CHANGES 16 May 2000
David Turnerefce08d2000-05-11 18:23:52 +0000424
David Turner968f0c32000-05-16 23:26:01 +0000425 - tagged "BETA-6" in the CVS tree. This one is a serious release candidate
426 even though it doesn't incorporate the auto-hinter yet..
427
428 - various obsolete files were removed, and copyright header updated
429
430 - finally updated the standard raster to fix the monochrome rendering bug
431 + re-enable support for 5-gray levels anti-aliasing (suck, suck..)
432
433 - created new header files, and modified sources accordingly:
David Turnere49ab252000-05-16 23:44:38 +0000434
David Turner968f0c32000-05-16 23:26:01 +0000435 <freetype/fttypes.h> - simple FreeType types, without the API
436 <freetype/internal/ftmemory.h> - definition of memory-management macros
437
438 - added the "DSIG" (OpenType Digital Signature) tag to <freetype/tttags.h>
439
David Turnerc30aea92000-05-12 15:01:18 +0000440 - light update/cleaning of the build system + changes to the sources in
441 order to get rid of _all_ compiler warnings with three compilers, i.e:
442
443 gcc with "-ansi -pedantic -Wall -W", Visual C++ with "/W3 /WX"
444 and LCC
445
446 IMPORTANT NOTE FOR WIN32-LCC USERS:
447 |
448 | It seems the C pre-processor that comes with LCC is broken, it
449 | doesn't recognize the ANSI standard directives # and ## correctly
450 | when one of the argument is a macro. Also, something like:
David Turnere49ab252000-05-16 23:44:38 +0000451 |
David Turnerc30aea92000-05-12 15:01:18 +0000452 | #define F(x) print##x
David Turnere49ab252000-05-16 23:44:38 +0000453 |
David Turnerc30aea92000-05-12 15:01:18 +0000454 | F(("hello"))
David Turnere49ab252000-05-16 23:44:38 +0000455 |
David Turnerc30aea92000-05-12 15:01:18 +0000456 | will get incorrectly translated to:
David Turnere49ab252000-05-16 23:44:38 +0000457 |
David Turnerc30aea92000-05-12 15:01:18 +0000458 | print "hello")
David Turnere49ab252000-05-16 23:44:38 +0000459 |
David Turnerc30aea92000-05-12 15:01:18 +0000460 | by its pre-processor. For this reason, you simply cannot build
461 | FreeType 2 in debug mode with this compiler..
462
463
David Turnerbfe2f982000-05-12 12:17:15 +0000464 - yet another massive grunt work. I've changed the definition of the
465 EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These now take
466 an argument, which is the function's return value type.
David Turnere49ab252000-05-16 23:44:38 +0000467
David Turnerbfe2f982000-05-12 12:17:15 +0000468 This is necessary to compile FreeType as a DLL on Windows and OS/2.
469 Depending on the compiler used, a compiler-specific keyword like __export
470 or __system must be placed before (VisualC++) or after (BorlandC++)
471 the type..
David Turnere49ab252000-05-16 23:44:38 +0000472
David Turnerbfe2f982000-05-12 12:17:15 +0000473 Of course, this needed a lot of changes throughout the source code
474 to make it compile again... All cleaned up now, apparently..
475
476 Note also that there is a new EXPORT_VAR macro defined to allow the
477 _declaration_ of an exportable public (constant) variable. This is the
478 case of the raster interfaces (see ftraster.h and ftgrays.h), as well
479 as each module's interface (see sfdriver.h, psdriver.h, etc..)
480
481 - new feature: it is now possible to pass extra parameters to font
482 drivers when creating a new face object. For now, this
483 capability is unused. It could however prove to be useful
484 in a near future..
485
486 the FT_Open_Args structure was changes, as well as the internal
487 driver interface (the specific "init_face" module function has now
488 a different signature).
489
490 - updated the tutorial (not finished though).
David Turnerc30aea92000-05-12 15:01:18 +0000491 - updated the top-level BUILD document
David Turnerbfe2f982000-05-12 12:17:15 +0000492
David Turnerc60c61c2000-05-12 15:26:58 +0000493 - fixed a potential memory leak that could occur when loading embedded
494 bitmaps.
495
David Turnerbfe2f982000-05-12 12:17:15 +0000496 - added the declaration of FT_New_Memory_Face in <freetype/freetype.h>, as
497 it was missing from the public header (the implementation was already
498 in "ftobjs.c").
499
500 - the file <freetype/fterrors.h> has been seriously updated in order to
501 allow the automatic generation of error message tables. See the comments
502 within it for more information.
503
David Turnera9c251c2000-05-11 18:36:19 +0000504 - major directory hierarchy re-organisation. This was done for two things:
David Turnere49ab252000-05-16 23:44:38 +0000505
David Turnera9c251c2000-05-11 18:36:19 +0000506 * first, to ease the "manual" compilation of the library by requiring
507 at lot less include paths :-)
David Turnerbfe2f982000-05-12 12:17:15 +0000508
David Turnera9c251c2000-05-11 18:36:19 +0000509 * second, to allow external programs to effectively access internal
510 data fields. For example, this can be extremely useful if someone
511 wants to write a font producer or a font manager on top of FreeType.
512
513 Basically, you should now use the 'freetype/' prefix for header inclusion,
514 as in:
David Turnere49ab252000-05-16 23:44:38 +0000515
David Turnera9c251c2000-05-11 18:36:19 +0000516 #include <freetype/freetype.h>
517 #include <freetype/ftglyph.h>
518
519 Some new include sub-directories are available:
David Turnere49ab252000-05-16 23:44:38 +0000520
David Turnera9c251c2000-05-11 18:36:19 +0000521 a. the "freetype/config" directory, contains two files used to
522 configure the build of the library. Client applications should
523 not need to look at these normally, but they can if they want.
David Turnere49ab252000-05-16 23:44:38 +0000524
David Turnera9c251c2000-05-11 18:36:19 +0000525 #include <freetype/config/ftoption.h>
526 #include <freetype/config/ftconfig.h>
David Turnere49ab252000-05-16 23:44:38 +0000527
David Turnera9c251c2000-05-11 18:36:19 +0000528 b. the "freetype/internal" directory, contains header files that
529 describes library internals. These are the header files that were
530 previously found in the "src/base" and "src/shared" directories.
531
532
533 As usual, the build system and the demos have been updated to reflect
534 the change..
David Turnere49ab252000-05-16 23:44:38 +0000535
David Turnera9c251c2000-05-11 18:36:19 +0000536 Here's a layout of the new directory hierarchy:
David Turnere49ab252000-05-16 23:44:38 +0000537
David Turnera9c251c2000-05-11 18:36:19 +0000538 TOP
539 include/
540 freetype/
541 freetype.h
542 ...
543 config/
544 ftoption.h
545 ftconfig.h
546 ftmodule.h
David Turnere49ab252000-05-16 23:44:38 +0000547
David Turnera9c251c2000-05-11 18:36:19 +0000548 internal/
549 ftobjs.h
550 ftstream.h
551 ftcalc.h
552 ...
David Turnere49ab252000-05-16 23:44:38 +0000553
David Turnera9c251c2000-05-11 18:36:19 +0000554 src/
555 base/
556 ...
David Turnere49ab252000-05-16 23:44:38 +0000557
David Turnera9c251c2000-05-11 18:36:19 +0000558 sfnt/
559 psnames/
560 truetype/
561 type1/
562 type1z/
563
564
565 Compiling a module is now much easier, for example, the following should
David Turner968f0c32000-05-16 23:26:01 +0000566 work when in the TOP directory on an ANSI build:
David Turnere49ab252000-05-16 23:44:38 +0000567
David Turnera9c251c2000-05-11 18:36:19 +0000568 gcc -c -I./include -I./src/base src/base/ftbase.c
569 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
570 etc..
571
572 (of course, using -Iconfig/<system> if you provide system-specific
573 configuration files).
David Turnerefce08d2000-05-11 18:23:52 +0000574
575
576 - updated the structure of FT_Outline_Funcs in order to allow
577 direct coordinate scaling within the outline decomposition routine
578 (this is important for virtual "on" points with TrueType outlines)
579 + updates to the rasters to support this..
580
581 - updated the OS/2 table loading code in "src/sfnt/ttload.c" in order
582 to support version 2 of the table (see OpenType 1.2 spec)
583
584 - created "include/tttables.h" and "include/t1tables.h" to allow
585 client applications to access some of the SFNT and T1 tables of a
586 face with a procedural interface (see FT_Get_Sfnt_Table())
587 + updates to internal source files to reflect the change..
588
589 - some cleanups in the source code to get rid of warnings when compiling
590 with the "-Wall -W -ansi -pedantic" options in gcc.
591
592 - debugged and moved the smooth renderer to "src/base/ftgrays.c" and
593 its header to "include/ftgrays.h"
594
595 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites with
596 up to 80 sub-glyphs !! Thanks to Werner
597
598================================================================================
599OLD CHANGES - 14-apr-2000
David Turner77054f22000-04-14 20:49:52 +0000600
601 - fixed a bug in the TrueType glyph loader that prevented the correct
602 loading of some CJK glyphs in mingli.ttf
David Turnere49ab252000-05-16 23:44:38 +0000603
David Turner77054f22000-04-14 20:49:52 +0000604 - improved the standard Type 1 hinter in "src/type1"
David Turnere49ab252000-05-16 23:44:38 +0000605
David Turner77054f22000-04-14 20:49:52 +0000606 - fixed two bugs in the experimental Type 1 driver in "src/type1z"
607 to handle the new XFree86 4.0 fonts (and a few other ones..)
608
609 - the smooth renderer is now complete and supports sub-banding
610 to render large glyphs at high speed. However, it is still located
611 in "demos/src/ftgrays.c" and should move to the library itself
612 in the next beta.. NOTE: The smooth renderer doesn't compile in
613 stand-alone mode anymore, but this should be fixed RSN..
David Turnere49ab252000-05-16 23:44:38 +0000614
David Turner77054f22000-04-14 20:49:52 +0000615 - introduced convenience functions to more easily deal with glyph
616 images, see "include/ftglyph.h" for more details, as well as the
617 new demo program named "demos/src/ftstring.c" that demonstrates
618 its use
619
620 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
621 drivers (this is required by the auto-hinter to improve its results).
622
623 - changed the raster interface, in order to allow client applications
624 to provide their own span-drawing callbacks. However, only the
625 smooth renderer supports this. See "FT_Raster_Params" in the
626 file "include/ftimage.h"
627
628 - fixed a small bug in FT_MulFix that caused incorrect transform
629 computation !!
630
631 - Note: The tutorial is out-of-date, grumpf.. :-(
632
633================================================================================
634OLD CHANGES - 12-mar-2000
David Turnerc3c7e7f2000-03-13 14:19:31 +0000635
636 - changed the layout of configuration files : now, all ANSI configuration
637 files are located in "freetype2/config". System-specific over-rides
638 can be placed in "freetype2/config/<system>".
David Turnere49ab252000-05-16 23:44:38 +0000639
David Turnerc3c7e7f2000-03-13 14:19:31 +0000640 - moved all configuration macros to "config/ftoption.h"
David Turnere49ab252000-05-16 23:44:38 +0000641
David Turnerc3c7e7f2000-03-13 14:19:31 +0000642 - improvements in the Type 1 driver with AFM support
David Turnere49ab252000-05-16 23:44:38 +0000643
David Turnerc3c7e7f2000-03-13 14:19:31 +0000644 - changed the fields in the FT_Outline structure : the old "flags"
645 array is re-named "tags", while all ancient flags are encoded into
646 a single unsigned int named "flags".
647
648 - introduced new flags in FT_Outline.flags (see ft_outline_.... enums in
649 "ftimage.h").
650
651 - changed outline functions to "FT_Outline_<action>" syntax
652
653 - added a smooth anti-alias renderer to the demonstration programs
654 - added Mac graphics driver (thanks Just)
David Turnere49ab252000-05-16 23:44:38 +0000655
David Turnerc3c7e7f2000-03-13 14:19:31 +0000656 - FT_Open_Face changed in order to received a pointer to a FT_Open_Args
657 descriptor..
David Turnere49ab252000-05-16 23:44:38 +0000658
David Turnerc3c7e7f2000-03-13 14:19:31 +0000659 - various cleanups, a few more API functions implemented (see FT_Attach_File)
660
661 - updated some docs
662
663================================================================================
664OLD CHANGES - 22-feb-2000
David Turner58c10b52000-02-22 14:31:42 +0000665
666 - introduced the "psnames" module. It is used to:
667
668 o convert a Postscript glyph name into the equivalent Unicode
669 character code (used by the Type 1 driver(s) to synthetize
670 on the fly a Unicode charmap).
671
672 o provide an interface to retrieve the Postscript names of
673 the Macintosh, Adobe Standard & Adobe Expert character codes.
674 (the Macintosh names are used by the SFNT-module postscript
675 names support routines, while the other two tables are used
676 by the Type 1 driver(s)).
677
678 - introduced the "type1z" alternate Type 1 driver. This is a (still
679 experimental) driver for the Type 1 format that will ultimately
680 replace the one in "src/type1". It uses pattern matching to load
681 data from the font, instead of a finite state analyzer. It works
682 much better than the "old" driver with "broken" fonts. It is also
683 much smaller (under 15 Kb).
684
685 - the Type 1 drivers (both in "src/type1" and "src/type1z") are
686 nearly complete. They both provide automatic Unicode charmap
687 synthesis through the "psnames" module. No re-encoding vector
688 is needed. (note that they still leak memory due to some code
689 missing, and I'm getting lazy).
690
691 Trivial AFM support has been added to read kerning information
692 but wasn't exactly tested as it should ;-)
693
694 - The TrueType glyph loader has been seriously rewritten (see the
695 file "src/truetype/ttgload.c". It is now much, much simpler as
696 well as easier to read, maintain and understand :-) Preliminary
697 versions introduced a memory leak that has been reported by Jack
698 Davis, and is now fixed..
699
700 - introduced the new "ft_glyph_format_plotter", used to represent
701 stroked outlines like Windows "Vector" fonts, and certain Type 1
702 fonts like "Hershey". The corresponding raster will be written
703 soon.
704
705 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
706 interface that uses a structure to describe the input stream,
707 the driver (if required), etc..
708
709TODO
710 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
711
712 - Add a function like FT_Load_Character( face, char_code, load_flags )
713 that would really embbed a call to FT_Get_Char_Index then FT_Load_Glyph
714 to ease developer's work.
715
716 - Update the tutorial !!
717 - consider adding support for Multiple Master fonts in the Type 1
718 drivers.
719
720 - Test the AFM routines of the Type 1 drivers to check that kerning
721 information is returned correctly.
722
723 - write a decent auto-gridding component !! We need this to release
724 FreeType 2.0 gold !
725
726
727----- less urgent needs : ----------
728 - add a CFF/Type2 driver
729 - add a BDF driver
730 - add a FNT/PCF/HBF driver
731 - add a Speedo driver from the X11 sources
732
733
734==============================================================================
735OLDER CHANGES - 27-jan-2000
David Turner633da992000-01-27 14:07:33 +0000736
737 - updated the "sfnt" module interface to allow several SFNT-based
738 drivers to co-exist peacefully
David Turnere49ab252000-05-16 23:44:38 +0000739
David Turner633da992000-01-27 14:07:33 +0000740 - updated the "T1_Face" type to better separate Postscript font content
741 from the rest of the FT_Face structure. Might be used later by the
742 CFF/Type2 driver..
David Turnere49ab252000-05-16 23:44:38 +0000743
David Turner633da992000-01-27 14:07:33 +0000744 - added an experimental replacement Type 1 driver featuring advanced
745 (and speedy) pattern matching to retrieve the data from postscript
746 fonts.
747
748 - very minor changes in the implementation of FT_Set_Char_Size and
749 FT_Set_Pixel_Sizes (they now implement default to ligthen the
750 font driver's code).
751
752
753=============================================================================
754OLD MESSAGE
755
David Turnerd2b1f351999-12-16 23:11:37 +0000756This file summarizes the changes that occured since the last "beta" of FreeType 2.
757Because the list is important, it has been divided into separate sections:
758
David Turner5951ce91999-12-29 00:53:44 +0000759Table Of Contents:
760
761 I High-Level Interface (easier !)
762 II Directory Structure
763 III Glyph Image Formats
764 IV Build System
765 V Portability
766 VI Font Drivers
David Turnerd2b1f351999-12-16 23:11:37 +0000767
768-----------------------------------------------------------------------------------------
769High-Level Interface :
770
771 The high-level API has been considerably simplified. Here is how :
772
David Turner5951ce91999-12-29 00:53:44 +0000773 - resource objects have disappeared. this means that face objects can
774 now be created with a single function call (see FT_New_Face and
David Turnerd2b1f351999-12-16 23:11:37 +0000775 FT_Open_Face)
David Turnere49ab252000-05-16 23:44:38 +0000776
David Turnerd2b1f351999-12-16 23:11:37 +0000777 - when calling either FT_New_Face & FT_Open_Face, a size object and a
778 glyph slot object are automatically created for the face, and can be
779 accessed through "face->glyph" and "face->size" if one really needs to.
780 In most cases, there's no need to call FT_New_Size or FT_New_Glyph.
David Turnere49ab252000-05-16 23:44:38 +0000781
David Turnerd2b1f351999-12-16 23:11:37 +0000782 - similarly, FT_Load_Glyph now only takes a "face" argument (instead of
783 a glyph slot and a size). Also, it's "result" parameter is gone, as
784 the glyph image type is returned in the field "face->glyph.format"
David Turnere49ab252000-05-16 23:44:38 +0000785
David Turnerd2b1f351999-12-16 23:11:37 +0000786 - the list of available charmaps is directly accessible through
787 "face->charmaps", counting "face->num_charmaps" elements. Each
788 charmap has an 'encoding' field which specifies which known encoding
789 it deals with. Valid values are, for example :
David Turnere49ab252000-05-16 23:44:38 +0000790
David Turnerd2b1f351999-12-16 23:11:37 +0000791 ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
792 ft_encoding_apple_roman
793 ft_encoding_sjis
794 ft_encoding_adobe_standard
David Turner5951ce91999-12-29 00:53:44 +0000795 ft_encoding_adobe_expert
David Turnere49ab252000-05-16 23:44:38 +0000796
David Turnerd2b1f351999-12-16 23:11:37 +0000797 other values may be added in the future. Each charmap still holds its
798 "platform_id" and "encoding_id" values in case the encoding is too
799 exotic for the current library
800
801
802-----------------------------------------------------------------------------------------
803Directory Structure:
804
805 Should seem obvious to most of you:
806
807 freetype/
808 config/ -- configuration sub-makefiles
809 ansi/
David Turner5951ce91999-12-29 00:53:44 +0000810 unix/ -- platform-specific configuration files
David Turnerd2b1f351999-12-16 23:11:37 +0000811 win32/
812 os2/
813 msdos/
814
815 include/ -- public header files, those to be included directly
816 by client apps
817
818 src/ -- sources of the library
819 base/ -- the base layer
820 sfnt/ -- the sfnt "driver" (see the drivers section below)
821 truetype/ -- the truetype driver
822 type1/ -- the type1 driver
823 shared/ -- some header files shared between drivers
824
825 demos/ -- demos/tools
826
827 docs/ -- documentation (a bit empty for now)
828
829-----------------------------------------------------------------------------------------
830Glyph Image Formats :
831
832 Drivers are now able to register new glyph image formats within the library.
833 For now, the base layer supports of course bitmaps and vector outlines, but
834 one could imagine something different like colored bitmaps, bi-color
835 vectors or wathever else (Metafonts anyone ??).
836
837 See the file `include/ftimage.h'. Note also that the type FT_Raster_Map is
838 gone, and is now replaced by FT_Bitmap, which should encompass all known
839 bitmap types.
840
841 Each new image format must provide at least one "raster", i.e. a module
David Turner5951ce91999-12-29 00:53:44 +0000842 capable of transforming the glyph image into a bitmap. It's also possible
David Turnerd2b1f351999-12-16 23:11:37 +0000843 to change the default raster used for a given glyph image format.
844
845 The default outline scan-converter now uses 128 levels of grays by default,
846 which tends to smooth many things. Note that the demo programs have been
David Turner5951ce91999-12-29 00:53:44 +0000847 updated significantly in order to display these..
David Turnerd2b1f351999-12-16 23:11:37 +0000848
849
850-----------------------------------------------------------------------------------------
851Build system :
852
853 You still need GNU Make to build the library. The build system has been
854 very seriously re-vamped in order to provide things like :
855
856 - automatic host platform detection (reverting to 'config/ansi'
857 if it is not detected, with pseudo-standard compilation flags)
858
859 - the ability to compile from the Makefiles with very different and
860 exotic compilers. Note that linking the library can be difficult for
861 some platforms.
862
863 For example, the file `config/win32/lcclib.bat' is invoked by the
864 build system to create the ".lib" file with LCC-Win32 because its
865 librarian has too many flaws to be invoked directly from the Makefile.
866
867 Here's how it works :
868
869 - the first time you type `make', the build system runs a series of
870 sub-makefiles in order to detect your host platform. It then dumps
871 what it found, and creates a file called `config.mk' in the current
872 directory. This is a sub-Makefile used to define many important Make
873 variables used to build the library.
874
875 - the second time, the build system detects the `config.mk' then use it
876 to build the library. All object files go into 'obj' by default, as
877 well as the library file, but this can easily be changed.
878
879 Note that you can run "make setup" to force another host platform detection
880 even if a `config.mk' is present in the current directory. Another solution
881 is simply to delete the file, then re-run make.
882
883 Finally, the default compiler for all platforms is gcc (for now, this will
884 hopefully changed in the future). You can however specify a different
885 compiler by specifying it after the 'setup' target as in :
886
887 gnumake setup lcc on Win32 to use the LCC compiler
888 gnumake setup visualc on Win32 to use Visual C++
889
890 See the file `config/<system>/detect.mk' for a list of supported compilers
891 for your platforms.
892
893 It should be relatively easy to write new detection rules files and
894 config.mk..
895
896 Finally, to build the demo programs, go to `demos' and launch GNU Make,
897 it will use the `config.mk' in the top directory to build the test
898 programs..
899
900-----------------------------------------------------------------------------------------
901Portability :
902
903 In the previous beta, a single FT_System object was used to encompass
904 all low-level operations like thread synchronisation, memory management
905 and i/o access. This has been greatly simplified :
906
907 - thread synchronisation has been dropped, for the simple reason that
908 the library is already re-entrant, and that if you really need two
909 threads accessing the same FT_Library, you should really synchronize
910 access to it yourself with a simple mutex.
911
912 - memory management is performed through a very simple object called
913 "FT_Memory", which really is a table containing a table of pointers
914 to functions like malloc, realloc and free as well as some user data
915 (closure).
916
917 - resources have disappeared (they created more problems than they
918 solved), and i/o management have been simplified greatly as a
919 result. Streams are defined through FT_Stream objects, which can
920 be either memory-based or disk-based.
921
922 Note that each face has its own stream, which is closed only when
923 the face object is destroyed. Hence, a function like TT_Flush_Face
924 in 1.x cannot be directly supported. However, if you really need
925 something like this, you can easily tailor your own streams to achieve
926 the same feature at a lower level (and use FT_Open_Face instead of
927 FT_New_Face to create the face).
928
929 See the file "include/ftsystem.h" for more details, as well as the
930 implementations found in "config/unix" and "config/ansi".
931
932
933-----------------------------------------------------------------------------------------
David Turner5951ce91999-12-29 00:53:44 +0000934Font Drivers :
David Turnere49ab252000-05-16 23:44:38 +0000935
David Turner5951ce91999-12-29 00:53:44 +0000936
937 The Font Driver interface has been modified in order to support
938 extensions & versioning.
939
940
941 The list of the font drivers that are statically linked to the
942 library at compile time is managed through a new configuration file
943 called `config/<platform>/ftmodule.h'.
944
945 This file is autogenerated when invoking `make modules'. This target
946 will parse all sub-directories of 'src', looking for a "module.mk"
947 rules file, used to describe the driver to the build system.
948
949 Hence, one should call `make modules' each time a font driver is added
950 or removed from the `src' directory.
951
952
953 Finally, this version provides a "pseudo-driver" in `src/sfnt'. This
954 driver doesn't support font files directly, but provides services used
955 by all TrueType-like font drivers. Hence, its code is shared between
956 the TrueType & OpenType font formats, and possibly more formats to
957 come if we're lucky..
David Turnerd2b1f351999-12-16 23:11:37 +0000958
959-----------------------------------------------------------------------------------------
960Extensions support :
David Turner5951ce91999-12-29 00:53:44 +0000961
962 The extensions support is inspired by the one found in 1.x.
963
964 Now, each font driver has its own "extension registry", which lists
965 which extensions are available for the font faces managed by the driver.
966
967 Extension ids are now strings, rather than 4-byte tags, as this is
968 usually more readable..
969
970 Each extension has:
971 - some data, associated to each face object
972 - an interface (table of function pointers)
973
974 An extension that is format-specific should simply register itself
975 to the correct font driver. Here is some example code:
976
977 // Registering an extensions
978 //
979 FT_Error FT_Init_XXXX_Extension( FT_Library library )
980 {
981 FT_DriverInterface* tt_driver;
982
983 driver = FT_Get_Driver( library, "truetype" );
984 if (!driver) return FT_Err_Unimplemented_Feature;
985
David Turnere49ab252000-05-16 23:44:38 +0000986 return FT_Register_Extension( driver, &extension_class );
David Turner5951ce91999-12-29 00:53:44 +0000987 }
988
David Turnere49ab252000-05-16 23:44:38 +0000989
David Turner5951ce91999-12-29 00:53:44 +0000990 // Implementing the extensions
991 //
992 FT_Error FT_Proceed_Extension_XXX( FT_Face face )
993 {
994 FT_XXX_Extension ext;
995 FT_XXX_Extension_Interface ext_interface;
996
997 ext = FT_Get_Extension( face, "extensionid", &ext_interface );
998 if (!ext) return error;
999
1000 return ext_interface->do_it(ext);
1001 }
David Turnerd2b1f351999-12-16 23:11:37 +00001002