1 CHANGES BETWEEN 2.9 and 2.9.1 2 3 I. IMPORTANT BUG FIXES 4 5 - Type 1 fonts containing flex features were not rendered 6 correctly (bug introduced in version 2.9). 7 8 - CVE-2018-6942: Older FreeType versions can crash with certain 9 malformed variation fonts. 10 11 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6942 12 13 14 II. MISCELLANEOUS 15 16 - Bug fix: Multiple calls to `FT_Get_MM_Var' returned garbage. 17 18 - The base extensions `ftlcdfil' and `ftfntfmt' are now part of 19 the base module (and thus no longer configurable in file 20 `modules.cfg'). 21 22 - Emboldening of bitmaps didn't work correctly sometimes, showing 23 various artifacts (bug introduced in version 2.8.1). 24 25 - Use of the `freetype-config' script to get compilation and 26 linking options is deprecated since it doesn't support 27 cross-compiling, among other deficiencies. Instead, you should 28 use the `pkg-config' interface. 29 30 The `configure' script no longer installs `freetype-config' by 31 default. For backwards compatibility, a new configure option 32 `--enable-freetype-config' is provided that reverts this 33 decision. 34 35 - The auto-hinter script ranges have been updated for Unicode 11. 36 No support for new scripts have been added, however, with the 37 exception of Georgian Mtavruli. 38 39 - Support for cmake has been improved. 40 41 - The next release will remove support for Position Independent 42 Code as needed by systems that prohibit automatic address 43 fixups, such as BREW. [Compilation with modern compilers that 44 use flags like `-fPIC' or `-fPIE' is not affected.] 45 46 47 ====================================================================== 48 49 CHANGES BETWEEN 2.8.1 and 2.9 50 51 I. IMPORTANT BUG FIXES 52 53 - Advance width values of variation fonts were often wrong. 54 55 - More fixes for variation font support; you should update to this 56 version if you want to support them. 57 58 59 II. IMPORTANT CHANGES 60 61 - As a GSoC project, Ewald Hew extended the new (Adobe) CFF engine 62 to handle Type 1 fonts also, thus greatly improving the 63 rendering of this format. This is the new default. The old 64 engine is still available if the configuration macro 65 `T1_CONFIG_OPTION_OLD_ENGINE' gets defined; using the 66 `hinting-engine' property of the `type1' driver module you can 67 then switch between the two engines. 68 69 - A new function, `FT_Set_Named_Instance', can be used to set or 70 change the current named instance. 71 72 - Starting with this FreeType version, resetting variation 73 coordinates will return to the currently selected named 74 instance. Previously, FreeType returned to the base font (i.e., 75 no instance set). 76 77 78 III. MISCELLANEOUS 79 80 - The `face_flags' field of the `FT_Face' structure has a new bit, 81 `FT_FACE_FLAG_VARIATION', which is set if a variation font has 82 been altered with `FT_Set_MM_Design_Coordinates', 83 `FT_Set_Var_Design_Coordinates', or 84 `FT_Set_Var_Blend_Coordinates'. 85 86 - If the current face is a named instance, the new macro 87 `FT_IS_NAMED_INSTANCE' returns true. 88 89 - `FT_IS_VARIATION' is a new macro that returns true whenever a 90 face object has been altered by `FT_Set_MM_Design_Coordinates', 91 `FT_Set_Var_Design_Coordinates', or 92 `FT_Set_Var_Blend_Coordinates'. 93 94 - Changing the design coordinates of a variation font with 95 `FT_Set_Var_Design_Coordinates' or 96 `FT_Set_Var_Blend_Coordinates' does not influence the named 97 instance index value (only `FT_Set_Named_Instance' does that). 98 99 - Special PostScript names for named instances are only returned 100 if the named instance is set with `FT_Set_Named_Instance' (and 101 the font has corresponding entries in its `fvar' table). If 102 `FT_IS_VARIATION' returns true, the algorithmically derived 103 PostScript name is provided, not looking up special entries for 104 named instances. 105 106 - A new function `FT_Done_MM_Var' is provided to free the memory 107 returned in a call to `FT_Get_MM_Var'. 108 109 - On platforms using the `configure' script, the installed 110 `ftoption.h' file now correctly reflects configuration options 111 like `--with-harfbuzz'. 112 113 - Better support to build FreeType as a DLL on Windows using 114 Visual C. 115 116 - All data specific to driver modules is now collected in a single 117 file, `FT_DRIVER_H'. Consequently, the macros 118 `FT_AUTOHINTER_H', `FT_CFF_DRIVER_H', `FT_TRUETYPE_DRIVER_H', 119 and `FT_PCF_DRIVER_H' still work but are deprecated. 120 121 - Some fuzzer fixes to better reject malformed fonts. 122 123 - The `ftbench' demo program has a new test for opening a new face 124 and loading some glyphs. 125 126 - The `ftbench' demo program has a new option `-j' to specify the 127 last glyph index to be used in the tests. 128 129 - The `ftgrid' demo program has a new option `-n' to suppress 130 display of named instances of variation fonts. 131 132 - The `ttdebug' demo program can now show a stack trace (key `K') 133 and switch between hexadecimal and decimal display of integers 134 (key `I'). 135 136 137 ====================================================================== 138 139 CHANGES BETWEEN 2.8 and 2.8.1 140 141 I. IMPORTANT BUG FIXES 142 143 - B/W hinting of TrueType fonts didn't work properly if 144 interpreter version 38 or 40 was selected. 145 146 - Some severe problems within the handling of TrueType Variation 147 Fonts were found and fixed. 148 149 - Function `FT_Set_Var_Design_Coordinates' didn't correctly handle 150 the case with less input coordinates than axes. 151 152 153 II. IMPORTANT CHANGES 154 155 - By default, FreeType now offers high quality LCD-optimized 156 output without resorting to ClearType techniques of resolution 157 tripling and filtering. In this method, called Harmony, each 158 color channel is generated separately after shifting the glyph 159 outline, capitalizing on the fact that the color grids on LCD 160 panels are shifted by a third of a pixel. This output is 161 indistinguishable from ClearType with a light 3-tap filter. 162 163 164 III. MISCELLANEOUS 165 166 - Using the new function `FT_Get_Var_Axis_Flags', an application 167 can access the `flags' field of a variation axis (introduced in 168 OpenType version 1.8.2) 169 170 - More sanity checks. 171 172 - The internal representation of buffers for LCD rendering has 173 changed (to be more precise, the amount of padding gets computed 174 differently). Applications that use the FreeType API are not 175 affected. 176 177 - To reset all design axis values of a variation font to its 178 default values you can now say 179 180 error = FT_Set_Var_Design_Coordinates( face, 0, NULL ); 181 182 This also works with functions `FT_Set_MM_Design_Coordinates' 183 and `FT_Set_MM_Blend_Coordinates'. 184 185 - FreeType now synthesizes a missing Unicode cmap for (older) 186 TrueType fonts also if glyph names are available. 187 188 - FreeType has improved handling of BDF fonts without the 189 `POINT_SIZE', `RESOLUTION_X', or `RESOLUTION_Y' properties; the 190 library now uses the values of the `SIZE' keyword if they are 191 missing. Previously, `SIZE' was completely ignored, and 192 FreeType used heuristic values instead. 193 194 - Multiple calls to `FT_Bitmap_Convert' do work now as advertised. 195 Previously, they failed with an assertion error if there was an 196 empty bitmap between non-empty ones. 197 198 - The warping option has moved from `light' to `normal' hinting 199 where it replaces the original hinting algorithm. The `light' 200 mode is now always void of any hinting in x-direction. 201 202 - 16bit compiler support is now officially ended. We didn't 203 provide any maintenance since many years, and given that there 204 were no error or problem reports either it seems that it is no 205 longer needed. 206 207 - The `ftgrid' demo program can now toggle the display of grid 208 lines with the `G' key. 209 210 - The `ftgrid' demo program can toggle a different set of colors 211 (suitable to color-blind people) with the `C' key. 212 213 - The `ftgrid' demo program now supports the `-e' command line 214 option to select a cmap. 215 216 - The `ftdump' demo program has a new command line option `-t' to 217 output the SFNT table list. 218 219 220 ====================================================================== 221 222 CHANGES BETWEEN 2.7.1 and 2.8 223 224 I. IMPORTANT CHANGES 225 226 - Support for OpenType Variation Fonts is now complete. The last 227 missing part was handling the `VVAR' and `MVAR' tables, which is 228 available with this release. 229 230 - A new function `FT_Face_Properties' allows the control of some 231 module and library properties per font. Currently, the 232 following properties can be handled: stem darkening, LCD filter 233 weights, and the random seed for the `random' CFF operator. 234 235 - The PCF change to show more `colourful' family names (introduced 236 in version 2.7.1) was too radical; it can now be configured with 237 PCF_CONFIG_OPTION_LONG_FAMILY_NAMES at compile time. If 238 activated, it can be switched off at run time with the new pcf 239 property `no-long-family-names'. If the `FREETYPE_PROPERTIES' 240 environment variable is available, you can say 241 242 FREETYPE_PROPERTIES=pcf:no-long-family-names=1 243 244 - Support for the following scripts has been added to the 245 auto-hinter. 246 247 Adlam, Avestan, Bamum, Buhid, Carian, Chakma, Coptic, Cypriot, 248 Deseret, Glagolitic, Gothic, Kayah, Lisu, N'Ko, Ol Chiki, Old 249 Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai 250 Viet, Tifinagh, Unified Canadian Syllabics, Vai 251 252 253 II. IMPORTANT BUG FIXES 254 255 - `Light' auto-hinting mode no longer uses TrueType metrics for 256 TrueType fonts. This bug was introduced in version 2.4.6, 257 causing horizontal scaling also. Almost all GNU/Linux 258 distributions (with Fedora as a notable exception) disabled the 259 corresponding patch for good reasons; chances are thus high that 260 you won't notice a difference. 261 262 If optical backward compatibility for legacy applications is 263 necessary, you might enable the AF_CONFIG_OPTION_TT_SIZE_METRICS 264 configuration option. However, it is strongly recommended to 265 avoid that, adjusting font sizes instead. 266 267 - Global size metrics values in the `FT_Size_Metrics' structure 268 can be different for TrueType fonts. Reason is that in older 269 FreeType versions the metrics were rounded differently to 270 integer pixels compared to all other font formats, yielding an 271 inconsistent behaviour if you used non-native hinting. Starting 272 with this version, global size metrics for TrueType fonts are 273 handled the same as other font formats: `ascender' gets rounded 274 up, `descender' gets rounded down, `height' gets normally 275 rounded, and `max_advance' gets normally rounded, too. 276 277 If you need more precise values of (global) ascender, descender, 278 height, or `max_advance', please take the corresponding values 279 from the `FT_Face' structure and scale them manually. 280 281 - If a TrueType font gets loaded with FT_LOAD_NO_HINTING, FreeType 282 now scales the font linearly again (bug introduced in version 283 2.4.6). 284 285 - CVE-2017-8105, CVE-2017-8287: Older FreeType versions have 286 out-of-bounds writes caused by heap-based buffer overflows 287 related to Type 1 fonts. 288 289 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8105 290 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8287 291 292 293 III. MISCELLANEOUS 294 295 - A new function `FT_Set_Default_Properties' has been added to 296 parse the `FREETYPE_PROPERTIES' environment variable 297 (previously, it was internal only). `FT_Init_FreeType' always 298 call this function, but `FT_New_Library' does not (similar to 299 `FT_Add_Default_Modules'). 300 301 - To be in sync with OpenType version 1.7 and newer, macros 302 303 FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY, 304 FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY, 305 TT_NAME_ID_PREFERRED_FAMILY 306 TT_NAME_ID_PREFERRED_SUBFAMILY 307 308 are renamed to 309 310 FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY, 311 FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY, 312 TT_NAME_ID_TYPOGRAPHIC_FAMILY 313 TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 314 315 The old macro names are deprecated (but still available). 316 317 - Support for SFNT `name' tables has been improved. 318 319 . Format 1 `name' tables are now supported. Use new function 320 `FT_Get_Sfnt_LangTag' to access associated language tags. 321 322 . Language, encoding, and name IDs have been updated to OpenType 323 version 1.8.1. 324 325 - The new CFF engine now handles the `random' operator. All CFF 326 opcodes are now supported. 327 328 - The CFF module has a new property `random-seed' to control the 329 pseudo-random number generation for the `random' operator. 330 331 - The `freetype-config' script is now a wrapper of `pkg-config' if 332 this program is available in the path. 333 334 - FT_LOAD_TARGET_LCD is now a variant of FT_LOAD_TARGET_LIGHT; 335 this should provide better rendering results. 336 337 - A mode to display light auto-hinting with subpixel positioning 338 has been added to `ftdiff'. 339 340 341 ====================================================================== 342 343 CHANGES BETWEEN 2.7 and 2.7.1 344 345 I. IMPORTANT CHANGES 346 347 - Support for the new CFF2 font format as introduced with OpenType 348 1.8 has been contributed by Dave Arnolds from Adobe. 349 350 - Preliminary support for variation fonts as specified in OpenType 351 1.8 (in addition to the already existing support for Adobe's MM 352 and Apple's GX formats). Dave Arnolds contributed handling of 353 advance width change variation; more will come in the next 354 version. 355 356 357 II. IMPORTANT BUG FIXES 358 359 - Handling of raw CID fonts was partially broken (bug introduced 360 in 2.6.4). 361 362 - CVE-2016-10328: Older FreeType versions had an out-of-bounds 363 write caused by a heap-based buffer overflow related to the CFF 364 fonts. 365 366 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10328 367 368 369 III. MISCELLANEOUS 370 371 - Some limits for TrueType bytecode execution have been tightened 372 to speed up FreeType's handling of malformed fonts, in 373 particular to quickly abort endless loops. 374 375 - The number of twilight points can no longer be set to an 376 arbitrarily large value. 377 378 - The total number of jump opcode instructions (like JMPR) with 379 negative arguments is dynamically restricted; the same holds 380 for the total number of iterations in LOOPCALL opcodes. 381 382 The dynamic limits are based on the number of points in a glyph 383 and the number of CVT entries. Please report if you encounter a 384 font where the selected values are not adequate. 385 386 - PCF family names are made more `colourful'; they now include the 387 foundry and information whether they contain wide characters. 388 For example, you no longer get `Fixed' but rather `Sony Fixed' 389 or `Misc Fixed Wide'. 390 391 - A new function `FT_Get_Var_Blend_Coordinates' (with its alias 392 name `FT_Get_MM_Blend_Coordinates') to retrieve the normalized 393 blend coordinates of the currently selected variation instance 394 has been added to the Multiple Masters interface. 395 396 - A new function `FT_Get_Var_Design_Coordinates' to retrieve the 397 design coordinates of the currently selected variation instance 398 has been added to the Multiple Masters interface. 399 400 - A new load flag `FT_LOAD_BITMAP_METRICS_ONLY' to retrieve bitmap 401 information without loading the (embedded) bitmap itself. 402 403 - Retrieving advance widths from bitmap strikes (using 404 `FT_Get_Advance' and `FT_Get_Advances') have been sped up. 405 406 - The usual round of fuzzer fixes to better reject malformed 407 fonts. 408 409 - The `ftmulti' demo program can now switch engines with key `H'. 410 411 - The `ftstring' demo program can now show some built-in, 412 non-latin sample strings (to be selected with the TAB key). 413 414 - The `ftview' demo program can now switch between a font's 415 charmaps using the TAB key. 416 417 418 ====================================================================== 419 420 CHANGES BETWEEN 2.6.5 and 2.7 421 422 I. IMPORTANT CHANGES 423 424 - As announced earlier, the 2.7.x series now uses the new subpixel 425 hinting mode as the default, emulating a modern version of 426 ClearType. 427 428 This change inevitably leads to different rendering results, and 429 you might change the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' 430 configuration option to adapt it to your taste (or use the new 431 `FREETYPE_PROPERTIES' environment variable). See the 432 corresponding entry below for version 2.6.4, which gives more 433 information. 434 435 - A new option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' has been 436 introduced. If set (which is the default), an environment 437 variable `FREETYPE_PROPERTIES' can be used to control driver 438 properties. Example: 439 440 FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ 441 cff:no-stem-darkening=1 \ 442 autofitter:warping=1 443 444 This allows to select, say, the subpixel hinting mode at runtime 445 for a given application. See file `ftoption.h' for more. 446 447 448 II. IMPORTANT BUG FIXES 449 450 - After loading a named instance of a GX variation font, the 451 `face_index' value in the returned `FT_Face' structure now 452 correctly holds the named instance index in the upper 16bits as 453 documented. 454 455 456 III. MISCELLANEOUS 457 458 - A new macro `FT_IS_NAMED_INSTANCE' to test whether a given face 459 is a named instance. 460 461 - More fixes to GX font handling. 462 463 - Apple's `GETVARIATION' bytecode operator (needed for GX 464 variation font support) has been implemented. 465 466 - Another round of fuzzer fixes, mainly to reject invalid fonts 467 faster. 468 469 - Handling of raw CID fonts was broken (bug introduced in version 470 2.6.4). 471 472 - The smooth rasterizer has been streamlined to make it faster by 473 approx. 20%. 474 475 - The `ftgrid' demo program now understands command line option 476 `-d' to give start-up design coordinates. 477 478 - The `ftdump' demo program has a new command line option `-p' to 479 dump TrueType bytecode instructions. 480 481 482 ====================================================================== 483 484 CHANGES BETWEEN 2.6.4 and 2.6.5 485 486 I. IMPORTANT BUG FIXES 487 488 - Compilation works again on Mac OS X (bug introduced in version 489 2.6.4). 490 491 492 II. IMPORTANT CHANGES 493 494 - The new subpixel hinting mode is now disabled by default; it 495 will be enabled by default in the forthcoming 2.7.x series. 496 Main reason for reverting this feature is the principle of least 497 surprise: a sudden change in appearance of all fonts (even if 498 the rendering improves for almost all recent fonts) should not 499 be expected in a new micro version of a series. 500 501 502 ====================================================================== 503 504 CHANGES BETWEEN 2.6.3 and 2.6.4 505 506 I. IMPORTANT CHANGES 507 508 - A new subpixel hinting mode has been contributed by Nikolaus 509 Waxweiler, which is now the default rendering mode for TrueType 510 fonts. It implements (almost everything of) version 40 of the 511 bytecode engine. 512 513 The existing code base in FreeType (the `Infinality code') was 514 stripped to the bare minimum and all configurability removed in 515 the name of speed and simplicity. The configurability was 516 mainly aimed at legacy fonts like Arial, Times New Roman, or 517 Courier. [Legacy fonts are fonts that modify vertical stems to 518 achieve clean black-and-white bitmaps.] The new mode focuses on 519 applying a minimal set of rules to all fonts indiscriminately so 520 that modern and web fonts render well while legacy fonts render 521 okay. 522 523 Activation of the subpixel hinting support can be controlled 524 with the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration 525 option at compile time: If set to value 1, you get the old 526 Infinality mode (which was never the default due to its 527 slowness). Value 2 activates the new subpixel hinting mode, and 528 value 3 activates both. The default is value 2. 529 530 At run time, you can select the subpixel hinting mode with the 531 `interpreter-version' property (provided you have compiled in 532 the corresponding hinting mode); see `ftttdrv.h' for more. 533 534 - Support for the following scripts has been added to the 535 auto-hinter. 536 537 Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, 538 Malayalam, Sinhala, Tamil 539 540 541 II. MISCELLANEOUS 542 543 - Type 42 fonts as created by LilyPond are now supported. 544 545 - Minor rendering improvements in the auto-hinter. 546 547 - For experimental reasons, the old CFF engine now supports all 548 CFF operators except `random', including the deprecated Multiple 549 Masters instructions. This allows the display of fonts like 550 `ITCGaramondMM-It.otf' (without font variations, though). 551 552 - Another round of fixes to improve handling of invalid fonts. 553 554 - The `ftgrid' demo program now displays the rendered pixels also; 555 this can be switched off with the `b' key. Selection of various 556 LCD filtering modes can be done with the `L' key. 557 558 - The demo programs have been extended to allow selection of all 559 available TrueType bytecode engines. 560 561 - A very early beta version of a new, Qt based demo program called 562 `ftinspect' is part of the source code bundle; it will 563 eventually supersede the other demo programs. Currently, you 564 have to compile it manually with `qmake; make'; note that many 565 features are still missing. 566 567 568 ====================================================================== 569 570 CHANGES BETWEEN 2.6.2 and 2.6.3 571 572 I. IMPORTANT CHANGES 573 574 - Khmer, Myanmar, Bengali, and Kannada script support has been 575 added to the auto-hinter. 576 577 578 II. MISCELLANEOUS 579 580 - Better support of Indic scripts like Devanagari by using a 581 top-to-bottom hinting flow. 582 583 - All FreeType macros starting with two underscores have been 584 renamed to avoid a violation of both the C and C++ standards. 585 Example: Header macros of the form `__FOO_H__' are now called 586 `FOO_H_'. In most cases, this should be completely transparent 587 to the user. The exception to this is `__FTERRORS_H__', which 588 must be sometimes undefined by the user to get FreeType error 589 strings: Both this form and the new `FTERRORS_H_' macro are 590 accepted for backward compatibility. 591 592 - Minor improvements mainly to the Type 1 driver. 593 594 - The new CFF engine now supports all Type 2 operators except 595 `random'. 596 597 - The macro `_STANDALONE_', used for compiling the B/W and smooth 598 rasterizers as stand-alone modules, has been renamed to 599 `STANDALONE_', since macro names starting with an underscore and 600 followed by an uppercase letter are reserved in both C and C++. 601 602 - Function `FT_Library_SetLcdFilterWeights' now also activates 603 custom LCD filter weights (instead of just adjusting them). 604 605 - Support for `unpatented hinting' has been completely removed: 606 Consequently, the two functions `FT_Face_CheckTrueTypePatents' 607 and `FT_Face_SetUnpatentedHinting' now return always false, 608 doing nothing. 609 610 - The `ftgamma' demo program has been modernized; the gamma grid 611 display has been moved from `ftview' to this program. 612 613 - In `ftview', it is now possible to cycle through the available 614 LCD filtering modes. 615 616 617 ====================================================================== 618 619 CHANGES BETWEEN 2.6.1 and 2.6.2 620 621 I. IMPORTANT CHANGES 622 623 - The auto-hinter now supports stem darkening, to be controlled by 624 the new `no-stem-darkening' and `darkening-parameters' 625 properties. This is an experimental feature contributed by 626 Nikolaus Waxweiler, and the interface might change in a future 627 release. 628 629 - By default, stem darkening is now switched off (for both the CFF 630 engine and the auto-hinter). The main reason is that you need 631 linear alpha blending and gamma correction to get correct 632 rendering results, and the latter is not yet available in most 633 freely available rendering stacks like X11. Applying stem 634 darkening without proper gamma correction leads to far too dark 635 rendering results. 636 637 - The meaning of `FT_RENDER_MODE_LIGHT' has been slightly 638 modified. It now essentially means `no hinting along the 639 horizontal axis'; in particular, no change of glyph advance 640 widths. Consequently, the auto-hinter is used for all scalable 641 font formats except for CFF. It is planned that other 642 font-specific rendering engines (TrueType, Type 1) will follow. 643 644 645 II. MISCELLANEOUS 646 647 - The default LCD filter has been changed to be normalized and 648 color-balanced. 649 650 - For better compatibility with FontConfig, function 651 `FT_Library_SetLcdFilter' accepts a new enumeration value 652 `FT_LCD_FILTER_LEGACY1' (which has the same meaning as 653 `FT_LCD_FILTER_LEGACY'). 654 655 - A large number of bugs have been detected by using the libFuzzer 656 framework, which should further improve handling of invalid 657 fonts. Thanks again to Kostya Serebryany and Bungeman! 658 659 - `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES', a new configuration 660 option, controls the maximum number of executed opcodes within a 661 bytecode program. You don't want to change this except for very 662 special situations (e.g., making a library fuzzer spend less 663 time to handle broken fonts). 664 665 - The smooth renderer has been made faster. 666 667 - The `ftstring' demo program now supports subpixel rendering; use 668 key `l' to cycle through the LCD modes. 669 670 - The `ftstring' demo program now supports colour rendering; use 671 the `space' key to cycle through various colour combinations. 672 673 - The graphical demo programs now use a default gamma value of 1.8 674 (instead of 1.2). 675 676 677 ====================================================================== 678 679 CHANGES BETWEEN 2.6 and 2.6.1 680 681 I. IMPORTANT BUG FIXES 682 683 - It turned out that for CFFs only the advance widths should be 684 taken from the `htmx' table, not the side bearings. This bug, 685 introduced in version 2.6.0, makes it necessary to upgrade if 686 you are using CFFs; otherwise, you get cropped glyphs with GUI 687 interfaces like GTK or Qt. 688 689 - Accessing Type 42 fonts returned incorrect results if the glyph 690 order of the embedded TrueType font differs from the glyph order 691 of the Type 42 charstrings table. 692 693 694 II. IMPORTANT CHANGES 695 696 - The header file layout has been changed (again), moving all 697 header files except `ft2build.h' into a subdirectory tree. 698 699 Doing so reduces the possibility of header file name clashes 700 (e.g., FTGL's `FTGlyph.h' with FreeType's `ftglyph.h') on case 701 insensitive file systems like Mac OS X or Windows. 702 703 Applications that use (a) the `freetype-config' script or 704 FreeType's `freetype2.pc' file for pkg-config to get the include 705 directory for the compiler, and (b) the documented way for 706 header inclusion like 707 708 #include <ft2build.h> 709 #include FT_FREETYPE_H 710 ... 711 712 don't need any change to the source code. 713 714 - Simple access to named instances in GX variation fonts is now 715 available (in addition to the previous method via FreeType's MM 716 interface). In the `FT_Face' structure, bits 16-30 of the 717 `face_index' field hold the current named instance index for the 718 given face index, and bits 16-30 of `style_flags' contain the 719 number of instances for the given face index. `FT_Open_Face' 720 and friends also understand the extended bits of the face index 721 parameter. 722 723 You need to enable TT_CONFIG_OPTION_GX_VAR_SUPPORT for this new 724 feature. Otherwise, bits 16-30 of the two fields are zero (or 725 are ignored). 726 727 - Lao script support has been added to the auto-hinter. 728 729 730 III. MISCELLANEOUS 731 732 - The auto-hinter's Arabic script support has been enhanced. 733 734 - Superscript-like and subscript-like glyphs as used by various 735 phonetic alphabets like the IPA are now better supported by the 736 auto-hinter. 737 738 - The TrueType bytecode interpreter now runs slightly faster. 739 740 - Improved support for builds with cmake. 741 742 - The function `FT_CeilFix' now always rounds towards plus 743 infinity. 744 745 - The function `FT_FloorFix' now always rounds towards minus 746 infinity. 747 748 - A new load flag `FT_LOAD_COMPUTE_METRICS' has been added; it 749 makes FreeType ignore pre-computed metrics, as needed by font 750 validating or font editing programs. Right now, only the 751 TrueType module supports it to ignore data from the `hdmx' 752 table. 753 754 - Another round of bug fixes to better handle broken fonts, found 755 by Kostya Serebryany <kcc (a] google.com>. 756 757 758 ====================================================================== 759 760 CHANGES BETWEEN 2.5.5 and 2.6 761 762 I. IMPORTANT CHANGES 763 764 - Behdad Esfahbod contributed code for improved thread-safety, 765 which results in the following model. 766 767 * An `FT_Face' object can only be safely used from one thread at 768 a time. 769 770 * An `FT_Library' object can now be used without modification 771 from multiple threads at the same time. 772 773 * `FT_Face' creation and destruction with the same `FT_Library' 774 object can only be done from one thread at a time. 775 776 One can use a single `FT_Library' object across threads as long 777 as a mutex lock is used around `FT_New_Face' and `FT_Done_Face'. 778 Any calls to `FT_Load_Glyph' and similar API are safe and do not 779 need the lock to be held as long as the same `FT_Face' is not 780 used from multiple threads at the same time. 781 782 - Thai script support has been added to the auto-hinter. 783 784 - Arabic script support has been added to the auto-hinter. 785 786 - Following OpenType version 1.7, advance widths and side bearing 787 values in CFFs (wrapped in an SFNT structure) are now always 788 taken from the `hmtx' table. 789 790 - Following OpenType version 1.7, the PostScript font name of a 791 CFF font (wrapped in an SFNT structure) is now always taken from 792 the `name' table. This is also true for OpenType Collections 793 (i.e., TTCs using CFFs subfonts instead of TTFs), where it may 794 have a significant difference. 795 796 - Fonts natively hinted for ClearType are now supported, properly 797 handling selector index 3 of the INSTCTRL bytecode instruction. 798 799 - Major improvements to the GX TrueType variation font handling. 800 801 802 II. MISCELLANEOUS 803 804 - A new auto-hinter property `warping' can switch on and off the 805 warping code if this experimental feature is compiled in (by 806 defining the AF_CONFIG_OPTION_USE_WARPER configuration option; 807 by default this option is now enabled but warping is switched 808 off). 809 810 The AF_CONFIG_OPTION_USE_WARPER option itself is an old feature, 811 available since 2006. Warping only works in `light' 812 auto-hinting mode. The idea of the code is to slightly scale 813 and shift a glyph along the non-hinted dimension (which is 814 usually the horizontal axis) so that as much of its segments are 815 aligned (more or less) to the grid. To find out a glyph's 816 optimal scaling and shifting value, various parameter 817 combinations are tried and scored. 818 819 See file `ftautoh.h' for more; the demo programs `ftdiff', 820 `ftview', and `ftgrid' can toggle warping with key `w'. 821 822 - Some fields in the `FTC_ImageTypeRec' structure have been 823 changed from signed to unsigned type, which better reflects the 824 actual usage. It is also an additional means to protect against 825 malformed input. 826 827 This change doesn't break the ABI; however, it might cause 828 compiler warnings. 829 830 - Function `FT_Bitmap_New' has been renamed to `FT_Bitmap_Init', 831 since this name better reflects its function. For backward 832 compatibility, the old function name is still available. 833 834 - Function `FT_Get_X11_Font_Format' has been renamed to 835 `FT_Get_Font_Format', since this name better reflects its 836 function. For backward compatibility, the old function name is 837 still available. 838 839 Additionally, the header file macro for this function has been 840 renamed to `FT_FONT_FORMATS_H' (the old name `FT_XFREE86_H' is 841 retained for backward compatibility). 842 843 - Various improvements to the `ftgrid' demo program. 844 845 . It can now display GX and MM fonts while interactively 846 manipulating the axes (with keys F2, F3, and F4). 847 848 . Anti-aliasing rendering modes can now be selected (with keys 849 F5 and F6). 850 851 . The display of point numbers can be toggled with key `D'. 852 853 - Various improvements to the `ftdump' demo program. 854 855 . It now displays information on MM and GX variation axes. 856 857 . New command line option `-u' makes it output data in utf-8 858 encoding. 859 860 - The `ftmulti' demo program can now handle up to six MM or GX 861 axes. 862 863 864 ====================================================================== 865 866 CHANGES BETWEEN 2.5.4 and 2.5.5 867 868 I. IMPORTANT BUG FIXES 869 870 - Handling of uncompressed PCF files works again (bug introduced 871 in version 2.5.4). 872 873 874 ====================================================================== 875 876 CHANGES BETWEEN 2.5.3 and 2.5.4 877 878 I. IMPORTANT BUG FIXES 879 880 - A variant of vulnerability CVE-2014-2240 was identified 881 (cf. https://savannah.nongnu.org/bugs/?43661) and fixed in the 882 new CFF driver. All users should upgrade. 883 884 - The new auto-hinter code using HarfBuzz crashed for some invalid 885 fonts. 886 887 - Many fixes to better protect against malformed input. 888 889 890 II. IMPORTANT CHANGES 891 892 - Full auto-hinter support of the Devanagari script. 893 894 - Experimental auto-hinter support of the Telugu script. 895 896 - CFF stem darkening behaviour can now be controlled at build time 897 using the eight macros 898 899 CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} . 900 901 - Some fields in the `FT_Bitmap' structure have been changed from 902 signed to unsigned type, which better reflects the actual usage. 903 It is also an additional means to protect against malformed 904 input. 905 906 This change doesn't break the ABI; however, it might cause 907 compiler warnings. 908 909 910 III. MISCELLANEOUS 911 912 - Improvements to the auto-hinter's algorithm to recognize stems 913 and local extrema. 914 915 - Function `FT_Get_SubGlyph_Info' always returned an error even in 916 case of success. 917 918 - Version 2.5.1 introduced major bugs in the cjk part of the 919 auto-hinter, which are now fixed. 920 921 - The `FT_Sfnt_Tag' enumeration values have been changed to 922 uppercase, e.g. `FT_SFNT_HEAD'. The lowercase variants are 923 deprecated. This is for orthogonality with all other 924 enumeration (and enumeration-like) values in FreeType. 925 926 - `cmake' now supports builds of FreeType as an OS X framework and 927 for iOS. 928 929 - Improved project files for vc2010, introducing a property file. 930 931 - The documentation generator for the API reference has been 932 updated to produce better HTML code (with proper CSS). At the 933 same time, the documentation got a better structure. 934 935 - The FT_LOAD_BITMAP_CROP flag is obsolete; it is not used by any 936 driver. 937 938 - The TrueType DELTAP[123] bytecode instructions now work in 939 subpixel hinting mode as described in the ClearType whitepaper 940 (i.e., for touched points in the non-subpixel direction). 941 942 - Many small improvements to the internal arithmetic routines. 943 944 945 ====================================================================== 946 947 CHANGES BETWEEN 2.5.2 and 2.5.3 948 949 I. IMPORTANT BUG FIXES 950 951 - A vulnerability (CVE-2014-2240) was identified and fixed in the 952 new CFF driver (cf. https://savannah.nongnu.org/bugs/?41697). 953 All users should upgrade. 954 955 - More bug fixes related to correct positioning of composite 956 glyphs. 957 958 - Many fixes to better protect against malformed input. 959 960 961 II. IMPORTANT CHANGES 962 963 - FreeType can now use the HarfBuzz library to greatly improve the 964 auto-hinting of fonts that use OpenType features: Many glyphs 965 that are part of such features but don't have cmap entries are 966 now handled properly, for example small caps or superscripts. 967 Define the configuration macro FT_CONFIG_OPTION_USE_HARFBUZZ to 968 activate HarfBuzz support. 969 970 You need HarfBuzz version 0.9.19 or newer. 971 972 Note that HarfBuzz depends on FreeType; this currently causes a 973 chicken-and-egg problem that can be solved as follows in case 974 HarfBuzz is not yet installed on your system. 975 976 1. Compile and install FreeType without the configuration 977 macro FT_CONFIG_OPTION_USE_HARFBUZZ. 978 979 2. Compile and install HarfBuzz. 980 981 3. Define macro FT_CONFIG_OPTION_USE_HARFBUZZ, then compile 982 and install FreeType again. 983 984 With FreeType's `configure' script the procedure boils down to 985 configure, build, and install FreeType, then configure, compile, 986 and install HarfBuzz, then configure, compile, and install 987 FreeType again (after executing `make distclean'). 988 989 - All libraries FreeType depends on are now checked using the 990 `pkg-config' configuration files first, followed by alternative 991 methods. 992 993 - The new value `auto' for the various `--with-XXX' library 994 options (for example `--with-harfbuzz=auto') makes the 995 `configure' script automatically link to the libraries it finds. 996 This is now the default. 997 998 - In case FreeType's `configure' script can't find a library, you 999 can pass environment variables to circumvent pkg-config, and 1000 those variables have been harmonized as a consequence of the 1001 changes mentioned above: 1002 1003 LIBZ -> removed; use LIBZ_CFLAGS and LIBZ_LIBS 1004 LIBBZ2 -> removed; use BZIP2_CFLAGS and BZIP2_LIBS 1005 LIBPNG_LDFLAGS -> LIBPNG_LIBS 1006 1007 `./configure --help' shows all available environment variables. 1008 1009 - The `freetype-config' script now understands option `--static' 1010 to emit static linking information. 1011 1012 1013 ====================================================================== 1014 1015 CHANGES BETWEEN 2.5.1 and 2.5.2 1016 1017 I. IMPORTANT BUG FIXES 1018 1019 - Improving the display of some broken TrueType fonts introduced a 1020 bug that made FreeType crash on some popular (but not fully 1021 conformant) fonts like `ahronbd.ttf'. 1022 1023 - Another round of improvements to correct positioning and hinting 1024 of composite glyphs in TrueType fonts. 1025 1026 1027 II. MISCELLANEOUS 1028 1029 - Version 2.5.1 introduced a bug in handling embedded bitmap 1030 strikes of TrueType fonts, causing garbage display under some 1031 circumstances. 1032 1033 - The `ftgrid' demo program couldn't be compiled in 1034 non-development builds. 1035 1036 1037 ====================================================================== 1038 1039 CHANGES BETWEEN 2.5 and 2.5.1 1040 1041 I. IMPORTANT BUG FIXES 1042 1043 - For some WinFNT files, the last glyph wasn't displayed but 1044 incorrectly marked as invalid. 1045 1046 - The vertical size of glyphs was incorrectly set after a call to 1047 `FT_GlyphSlot_Embolden', resulting in clipped glyphs. 1048 1049 - Many fields of the `PCLT' table in SFNT based fonts (if accessed 1050 with `FT_Get_Sfnt_Table') were computed incorrectly. 1051 1052 - In TrueType fonts, hinting of composite glyphs could sometimes 1053 deliver incorrect positions of components or even distorted 1054 shapes. 1055 1056 1057 II. IMPORTANT CHANGES 1058 1059 - WOFF font format support has been added. 1060 1061 - The auto-hinter now supports Hebrew. Greek and Cyrillic support 1062 has been improved. 1063 1064 - Support for the forthcoming `OS/2' SFNT table version 5, as can 1065 be found e.g. in the `Sitka' font family for Windows 8.1. 1066 1067 - The header file layout has been changed. After installation, 1068 all files are now located in `<prefix>/include/freetype2'. 1069 1070 Applications that use (a) `freetype-config' or FreeType's 1071 `pkg-config' file to get the include directory for the compiler, 1072 and (b) the documented way for header inclusion like 1073 1074 #include <ft2build.h> 1075 #include FT_FREETYPE_H 1076 ... 1077 1078 don't need any change to the source code. 1079 1080 1081 III. MISCELLANEOUS 1082 1083 - The stem darkening feature of the new CFF engine can now be 1084 fine-tuned with the new `darkening-parameters' property. 1085 1086 - `ftgrid' has been updated to toggle various engines with the `H' 1087 key, similar to `ftview' and `ftdiff'. 1088 1089 - The functionality of `ttdebug' has been greatly enhanced. 1090 1091 . It now displays twilight, storage, and control value data; key 1092 `T' shows the twilight point table, key `S' the storage data, 1093 and key `C' the control value table. 1094 1095 . Some keys have been reassigned from lowercase to their 1096 uppercase equivalents; for example `q' to quit the program is 1097 now `Q'. 1098 1099 . Key `f' finishes the current function. 1100 1101 . Key `R' restarts the debugger. 1102 1103 . Keys `b' and `p' set a breakpoint. 1104 1105 . Key `B' provides a function call backtrace. 1106 1107 - Better support of ARMv7 and x86_64 processors. 1108 1109 - Apple's `sbix' color bitmap format is now supported. 1110 1111 - Improved auto-hinter rendering for many TrueType fonts, 1112 especially in the range 20-40ppem. 1113 1114 - A new face flag `FT_FACE_FLAG_COLOR' has been added (to be 1115 accessed with the macro `FT_HAS_COLOR'). 1116 1117 - `FT_Gzip_Uncompress' (modeled after zlib's `uncompress' 1118 function) has been added; this is a by-product of the newly 1119 added WOFF support. 1120 1121 - Support for a build with `cmake' has been contributed by John 1122 Cary <cary (a] txcorp.com>. 1123 1124 - Support for x64 builds with Visual C++ has been contributed by 1125 Kenneth Miller <kennethadammiller (a] yahoo.com> 1126 1127 - Manual pages for most demo programs have been added. 1128 1129 - The GETINFO bytecode instruction for TrueType fonts was buggy if 1130 used to retrieve subpixel hinting information. It was necessary 1131 to set selector bit 6 to get results for selector bits 7-10, 1132 which is wrong. 1133 1134 - Improved computation of emulated vertical metrics for TrueType 1135 fonts. 1136 1137 - Fixed horizontal start-up position of vertical phantom points in 1138 TrueType bytecode. 1139 1140 1141 ====================================================================== 1142 1143 CHANGES BETWEEN 2.4.12 and 2.5 1144 1145 I. IMPORTANT BUG FIXES 1146 1147 - The cache manager function `FTC_Manager_Reset' didn't flush the 1148 cache. 1149 1150 1151 II. IMPORTANT CHANGES 1152 1153 - Behdad Esfahbod (on behalf of Google) contributed support for 1154 color embedded bitmaps (eg. color emoji). 1155 1156 A new load flag, FT_LOAD_COLOR, makes FreeType load color 1157 embedded-bitmaps, following this draft specification 1158 1159 https://color-emoji.googlecode.com/git/specification/v1.html 1160 1161 which defines two new SFNT tables, `CBDT' and `CBLC' (named and 1162 modeled after `EBDT' and `EBLC', respectively). The color 1163 bitmaps are stored in the new FT_PIXEL_MODE_BGRA format to 1164 represent BGRA pre-multiplied sRGB images. If PNG support is 1165 available, PNG color images as defined in the same proposed 1166 specification are supported also. 1167 1168 Note that color bitmaps are converted to grayscale if client 1169 didn't ask for color. 1170 1171 - As announced in the previous release, the old FreeType CFF 1172 engine is now disabled by default. It can be conditionally 1173 compiled by defining the configuration macro 1174 CFF_CONFIG_OPTION_OLD_ENGINE. 1175 1176 - As announced in the previous release, all code related to macro 1177 FT_CONFIG_OPTION_OLD_INTERNALS has been removed, thus becoming 1178 obsolete. 1179 1180 1181 III. MISCELLANEOUS 1182 1183 - The property API (`FT_Property_Get' and `FT_Property_Set') is 1184 now declared as stable. 1185 1186 The exception, however, are the experimental auto-hinter 1187 properties `glyph-to-script-map' and `fallback-script' which are 1188 subject to change in a forthcoming release. 1189 1190 - `ftview' has been updated to support color embedded bitmaps; it 1191 can be toggled on and off with key `c'. The small cache toggle 1192 is now key `K'. 1193 1194 - It is now possible to control the version of the TrueType 1195 hinting engine using the new `interpreter-version' property of 1196 the `truetype' module: Versions 35 and 38 (the default) are 1197 supported, which roughly corresponds to disable and enable 1198 subpixel hinting support, respectively. 1199 1200 In both `ftview' and `ftdiff', switching between the two 1201 versions can be done with key `H'. In the `ftbench' demo 1202 program, command line option `-H' has been extended to activate 1203 the non-default interpreter version. 1204 1205 - The `ttdebug' program has been further improved. In particular, 1206 it accepts a new command line option `-H' to select the hinting 1207 engine. 1208 1209 - `ftdump's verbose option has been renamed to `-V'. For all demo 1210 programs, `-v' now shows version information. 1211 1212 - Another round of TrueType subpixel hinting fixes. 1213 1214 - The `apinames' tool can now create an import file for NetWare. 1215 1216 - 64bit compilation of the new CFF engine was buggy. 1217 1218 - Some fixes to improve robustness in memory-tight situations. 1219 1220 1221 ====================================================================== 1222 1223 CHANGES BETWEEN 2.4.11 and 2.4.12 1224 1225 - We have another CFF parsing and hinting engine! Written by Dave 1226 Arnold <darnold (a] adobe.com>, this work has been contributed by 1227 Adobe in collaboration with Google. It is vastly superior to 1228 the old CFF engine, and it will replace it in the next release. 1229 Right now, it is still off by default, and you have to 1230 explicitly select it using the new `hinting-engine' property of 1231 the cff driver: 1232 1233 ... 1234 #include FT_MODULE_H 1235 #include FT_CFF_DRIVER_H 1236 1237 FT_Library library; 1238 int engine = FT_CFF_HINTING_ADOBE; 1239 1240 1241 ... 1242 FT_Property_Set( library, "cff", "hinting-engine", &engine ); 1243 1244 The code has a (mature) beta status; we encourage all users to 1245 test it and report any problems. 1246 1247 In case you want to activate the new CFF engine unconditionally, 1248 apply this patch: 1249 1250 --- snip --- 1251 diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c 1252 index ebcf189..3f2ce6b 100644 1253 --- a/src/cff/cffobjs.c 1254 +++ b/src/cff/cffobjs.c 1255 @@ -1056,7 +1056,7 @@ 1256 1257 1258 /* set default property values */ 1259 - driver->hinting_engine = FT_CFF_HINTING_FREETYPE; 1260 + driver->hinting_engine = FT_CFF_HINTING_ADOBE; 1261 driver->no_stem_darkening = FALSE; 1262 1263 return FT_Err_Ok; 1264 --- snip --- 1265 1266 - The macro FT_CONFIG_OPTION_OLD_INTERNALS is no longer set by 1267 default. In the next release, we will completely remove the 1268 associated code. Please update your programs in case you are 1269 still using this macro. 1270 1271 1272 II. MISCELLANEOUS 1273 1274 - The (top-level) `configure' script now respects the MAKE 1275 environment variable to specify a `make' binary. For backward 1276 compatibility, GNUMAKE still overrides MAKE, though. 1277 1278 - The `ftview' and `ftdiff' demo programs have been redesigned, 1279 showing more options permanently on the screen, among other 1280 minor improvements. 1281 1282 - Using the `H' key, it is now possible to select the CFF engine 1283 in both `ftview' and `ftdiff'. 1284 1285 - The new command line option `-H' for `ftbench' selects the Adobe 1286 CFF engine. 1287 1288 - It is now possible to directly select the LCD rendering mode 1289 with the keys `A'-`F' in `ftview'. The key mapping for cycling 1290 through LCD modes has been changed from `K' and `L' to `k' and 1291 `l', and toggling custom LCD filtering is no longer mapped to 1292 key `F' but to key `L'. 1293 1294 - In `ftdiff', key `x' toggles between layout modes: Either use 1295 the advance width (this is new and now the default) or the 1296 bounding box information to determine line breaks. 1297 1298 - For all demo tools, the new command line option `-v' shows the 1299 version. 1300 1301 - For the demo tools with a GUI, the new command line options `-w' 1302 and `-h' select the width and the height of the output window, 1303 respectively. 1304 1305 - The `ttdebug' program was broken and has been reactivated. Note 1306 that this program is not compiled by default. 1307 1308 1309 ====================================================================== 1310 1311 CHANGES BETWEEN 2.4.10 and 2.4.11 1312 1313 I. IMPORTANT BUG FIXES 1314 1315 - Some vulnerabilities in the BDF implementation have been fixed. 1316 Users of this font format should upgrade. 1317 1318 1319 II. IMPORTANT CHANGES 1320 1321 - Subpixel hinting support has been contributed by Infinality, 1322 based on Greg Hitchcock's whitepaper at 1323 1324 https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx 1325 1326 Originally, it was a separate patch available from 1327 1328 http://www.infinality.net/blog/ 1329 1330 and which has been integrated. 1331 1332 Note that ClearType support is not completely implemented! In 1333 particular, full support for the options `compatible_widths', 1334 `symmetrical_smoothing, and `bgr' (via the GETINFO bytecode 1335 instruction) is missing. 1336 1337 Activation of subpixel hinting support can be controlled with 1338 the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration option; it 1339 is switched off by default. This feature is still experimental; 1340 we welcome test reports! 1341 1342 - Support for OpenType collections (OTC) has been added. 1343 1344 - Pure CFF fonts within an SFNT wrapper are now supported. 1345 1346 1347 III. MISCELLANEOUS 1348 1349 - Minor rendering improvements to the auto-hinter. 1350 1351 - `FT_GlyphSlot_Oblique' now uses a shear angle of 12. 1352 1353 - Experimental support to handle `property modules', for example 1354 to control the behaviour of the auto-hinter. The API consists 1355 of two new functions, `FT_Property_Set' and `FT_Property_Get'. 1356 1357 The code is still subject to change and should not be used for 1358 production. 1359 1360 - The `ftdiff' demo program now supports UTF-8 encoded input files 1361 for option `-f'. 1362 1363 - Using keys `r' and `R', you can now adjust the stroker radius in 1364 the `ftview' demo program. 1365 1366 - Other, minor fixes and improvements. 1367 1368 1369 ====================================================================== 1370 1371 CHANGES BETWEEN 2.4.9 and 2.4.10 1372 1373 I. IMPORTANT BUG FIXES 1374 1375 - Incremental glyph loading as needed by ghostscript was broken. 1376 1377 1378 II. MISCELLANEOUS 1379 1380 - A new function `FT_Outline_EmboldenXY', contributed by Alexei 1381 Podtelezhnikov. 1382 1383 - In the `ftview' demo program, key `e' has been replaced with `x' 1384 and `y' to embolden in the horizontal and vertical direction, 1385 respectively. 1386 1387 - The glyph spacing computation in `FT_GlyphSlot_Embolden' (and 1388 similar code in `ftview') has been improved. 1389 1390 - Minor improvements to the TrueType bytecode interpreter and 1391 glyph loader, the auto-hinter, and the B/W rasterizer. 1392 1393 1394 ====================================================================== 1395 1396 CHANGES BETWEEN 2.4.8 and 2.4.9 1397 1398 I. IMPORTANT BUG FIXES 1399 1400 - Another round of fixes to better handle invalid fonts. Many of 1401 them are vulnerabilities (see CVE-2012-1126 up to CVE-2012-1144 1402 and SA48320) so all users should upgrade. 1403 1404 1405 II. MISCELLANEOUS 1406 1407 - The `ENCODING -1 <n>' format of BDF fonts is now supported. 1408 1409 - For BDF fonts, support for the whole Unicode encoding range has 1410 been added. 1411 1412 - Better TTF support for x_ppem != y_ppem. 1413 1414 - `FT_Get_Advances' sometimes returned bogus values. 1415 1416 - The demo programs no longer recognize and handle default 1417 suffixes; you now have to always specify the complete font name. 1418 1419 - Better rendering and LCD mode cycling added to `ftview'. 1420 1421 1422 ====================================================================== 1423 1424 CHANGES BETWEEN 2.4.7 and 2.4.8 1425 1426 I. IMPORTANT BUG FIXES 1427 1428 - Some vulnerabilities in handling CID-keyed PostScript fonts have 1429 been fixed; see CVE-2011-3439. 1430 1431 1432 II. MISCELLANEOUS 1433 1434 - Chris Liddell contributed a new API, `FT_Get_PS_Font_Value', to 1435 retrieve most of the dictionary keys in Type 1 fonts. 1436 1437 1438 ====================================================================== 1439 1440 CHANGES BETWEEN 2.4.6 and 2.4.7 1441 1442 I. IMPORTANT BUG FIXES 1443 1444 - Some vulnerabilities in handling Type 1 fonts have been fixed; 1445 see CVE-2011-3256. 1446 1447 1448 II. MISCELLANEOUS 1449 1450 - FreeType now properly handles ZapfDingbats glyph names while 1451 constructing a Unicode character map (for fonts which don't have 1452 one). 1453 1454 1455 ====================================================================== 1456 1457 CHANGES BETWEEN 2.4.5 and 2.4.6 1458 1459 I. IMPORTANT BUG FIXES 1460 1461 - For TrueType based fonts, the ascender and descender values were 1462 incorrect sometimes (off by a pixel if the ppem value was not a 1463 multiple of 5). Depending on the use you might now experience 1464 a different layout; the change should result in better, more 1465 consistent line spacing. 1466 1467 - Fix CVE-2011-0226 which causes a vulnerability while handling 1468 Type 1 fonts. 1469 1470 - BDF fonts containing glyphs with negative values for ENCODING 1471 were incorrectly rejected. This bug has been introduced in 1472 FreeType version 2.2.0. 1473 1474 - David Bevan contributed a major revision of the FreeType stroker 1475 code: 1476 1477 . The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected. 1478 1479 . A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has 1480 been introduced to support PostScript and PDF miter joins. 1481 1482 . FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an 1483 alias for FT_STROKER_LINEJOIN_MITER. 1484 1485 . Various stroking glitches has been fixed. 1486 1487 1488 II. MISCELLANEOUS 1489 1490 - SFNT bitmap fonts which contain an outline glyph for `.notdef' 1491 only no longer set the FT_FACE_FLAG_SCALABLE flag. 1492 1493 1494 ====================================================================== 1495 1496 CHANGES BETWEEN 2.4.4 and 2.4.5 1497 1498 I. IMPORTANT BUG FIXES 1499 1500 - A rendering regression for second-order Bzier curves has been 1501 fixed, introduced in 2.4.3. 1502 1503 1504 II. IMPORTANT CHANGES 1505 1506 - If autohinting is not explicitly disabled, FreeType now uses 1507 the autohinter if a TrueType based font doesn't contain native 1508 hints. 1509 1510 - The load flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH has been made 1511 redundant and is simply ignored; this means that FreeType now 1512 ignores the global advance width value in TrueType fonts. 1513 1514 1515 III. MISCELLANEOUS 1516 1517 - `FT_Sfnt_Table_Info' can now return the number of SFNT tables of 1518 a font. 1519 1520 - Support for PCF files compressed with bzip2 has been contributed 1521 by Joel Klinghed. To make this work, the OS must provide a 1522 bzip2 library. 1523 1524 - Bradley Grainger contributed project and solution files in 1525 Visual Studio 2010 format. 1526 1527 - Again some fixes to better handle broken fonts. 1528 1529 - Some improvements to the B/W rasterizer. 1530 1531 - Fixes to the cache module to improve robustness. 1532 1533 - Just Fill Bugs contributed (experimental) code to compute blue 1534 zones for CJK Ideographs, improving the alignment of horizontal 1535 stems at the top or bottom edges. 1536 1537 - The `ftgrid' demo program can now display autohinter segments, 1538 to be toggled on and off with key `s'. 1539 1540 1541 ====================================================================== 1542 1543 CHANGES BETWEEN 2.4.3 and 2.4.4 1544 1545 I. IMPORTANT BUG FIXES 1546 1547 - UVS support (TrueType/OpenType cmap format 14) support is fixed. 1548 This regression has been introduced in version 2.4.0. 1549 1550 1551 II. MISCELLANEOUS 1552 1553 - Detect tricky fonts (e.g. MingLiU) by the lengths and checksums 1554 of Type42-persistent subtables (`cvt ', `fpgm', and `prep') when 1555 a TrueType font without family name is given. The previous fix, 1556 introduced in 2.4.3, was too rigorous, causing many subsetted 1557 fonts (mainly from PDF files) displayed badly because FreeType 1558 forced rendering with the TrueType bytecode engine instead of 1559 the autohinter. 1560 1561 - Better support for 64bit platforms. 1562 1563 - More fixes to improve handling of broken fonts. 1564 1565 1566 ====================================================================== 1567 1568 CHANGES BETWEEN 2.4.2 and 2.4.3 1569 1570 I. IMPORTANT BUG FIXES 1571 1572 - Fix rendering of certain cubic, S-shaped arcs. This regression 1573 has been introduced in version 2.4.0. 1574 1575 1576 II. MISCELLANEOUS 1577 1578 - To fix the above mentioned rendering issue, a new spline 1579 flattening algorithm has been introduced which speeds up both 1580 conic and cubic arcs. 1581 1582 - Handling of broken fonts has been further improved. 1583 1584 1585 ====================================================================== 1586 1587 CHANGES BETWEEN 2.4.1 and 2.4.2 1588 1589 I. IMPORTANT BUG FIXES 1590 1591 - A stack overflow in CFF Type2 CharStrings interpreter is fixed. 1592 1593 - Handling Type 42 font deallocation was broken; additionally, the 1594 library is now more robust against malformed Type 42 fonts. 1595 1596 1597 II. MISCELLANEOUS 1598 1599 - Two new functions, `FT_Reference_Library' (in FT_MODULE_H) and 1600 `FT_Reference_Face' (in FT_FREETYPE_H), have been added to 1601 simplify life-cycle management. A counter gets initialized to 1 1602 at the time an FT_Library (or FT_Face) structure is created. 1603 The two new functions increment the respective counter. 1604 `FT_Done_Library' and `FT_Done_Face' then only destroy a library 1605 or face if the counter is 1, otherwise they simply decrement the 1606 counter. 1607 1608 1609 ====================================================================== 1610 1611 CHANGES BETWEEN 2.4.0 and 2.4.1 1612 1613 I. IMPORTANT CHANGES 1614 1615 - A serious bug in the CFF font module prevented display of many 1616 glyphs in CFF fonts like `MinionPro-Regular.otf'. 1617 1618 1619 ====================================================================== 1620 1621 CHANGES BETWEEN 2.3.12 and 2.4.0 1622 1623 I. IMPORTANT CHANGES 1624 1625 - Since May 2010, all patents regarding the TrueType bytecode 1626 interpreter have expired worldwide. Consequently, we now define 1627 TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine 1628 TT_CONFIG_OPTION_UNPATENTED_HINTING). 1629 1630 - A new function `FT_Library_SetLcdFilterWeights' is available to 1631 adjust the filter weights set by `FT_Library_SetLcdFilter'. 1632 1633 1634 II. MISCELLANEOUS 1635 1636 - Thanks to many reports from Robert wicki, FreeType's stability 1637 in handling broken or damaged fonts is much improved. 1638 1639 - Support for LCD filter control has been added to the demo 1640 programs `ftdiff' and `ftview'. 1641 1642 1643 ====================================================================== 1644 1645 CHANGES BETWEEN 2.3.11 and 2.3.12 1646 1647 I. IMPORTANT CHANGES 1648 1649 - For `FT_Open_Face', new parameters are available to ignore 1650 preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and 1651 FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY. 1652 1653 1654 II. MISCELLANEOUS 1655 1656 - Support for incremental font loading (controlled with the 1657 FT_CONFIG_OPTION_INCREMENTAL macro) is now active by default. 1658 1659 - Better support for vertical metrics. 1660 1661 - Various minor bug fixes. 1662 1663 1664 ====================================================================== 1665 1666 CHANGES BETWEEN 2.3.10 and 2.3.11 1667 1668 I. IMPORTANT BUG FIXES 1669 1670 - Version 2.3.10 broke PCF support. 1671 1672 1673 ====================================================================== 1674 1675 CHANGES BETWEEN 2.3.10 and 2.3.9 1676 1677 I. IMPORTANT BUG FIXES 1678 1679 - If all ASCII digits in a font have the same (unscaled) width, 1680 the autohinter respects this and won't change it. 1681 1682 - TrueType fonts are now rasterized correctly if the horizontal 1683 and vertical resolution differ. 1684 1685 - Type 1 fonts are now handled with increased precision internally 1686 to avoid serious rounding issues if non-integral coordinates are 1687 encountered. 1688 1689 - Horizontally condensed CFF fonts (using the font matrix) were 1690 rendered incorrectly. This bug has been introduced after 1691 release 2.3.5. 1692 1693 1694 II. IMPORTANT CHANGES 1695 1696 - Support for the SFNT cmap 13 table format (as defined by the new 1697 OpenType 1.6 specification) has been added. 1698 1699 - B/W rasterization of well-hinted TrueType fonts at small sizes 1700 has been greatly improved. 1701 1702 - Calculation of vertical metrics in OpenType fonts has been 1703 improved. 1704 1705 1706 III. MISCELLANEOUS 1707 1708 - It is now possible to change the emboldening factor in the 1709 `ftview' demo program with keys `e' and `E'. 1710 1711 - It is now possible to change the slant value in the `ftview' 1712 demo program with keys `s' and `S'. 1713 1714 - The 5-levels grayscale mode of the `ftraster' module (which 1715 FreeType doesn't use by default) was broken since version 2.3.0. 1716 1717 - Compilation of the `ftgrays' and `ftraster' modules was broken 1718 in stand-alone mode. 1719 1720 - Various fixes for compilation on 64bit and 16bit architectures. 1721 1722 1723 ====================================================================== 1724 1725 CHANGES BETWEEN 2.3.9 and 2.3.8 1726 1727 I. IMPORTANT BUG FIXES 1728 1729 - Very unfortunately, FreeType 2.3.8 contained a change that broke 1730 its official ABI. The end result is that programs compiled 1731 against previous versions of the library, but dynamically linked 1732 to 2.3.8 can experience memory corruption if they call the 1733 `FT_Get_PS_Font_Info' function. 1734 1735 We recommend all users to upgrade to 2.3.9 as soon as possible, 1736 or to downgrade to a previous release of the library if this is 1737 not an option. 1738 1739 The origin of the bug is that a new field was added to the 1740 publicly defined `PS_FontInfoRec' structure. Unfortunately, 1741 objects of this type can be stack or heap allocated by callers 1742 of `FT_Get_PS_Font_Info', resulting in a memory buffer 1743 overwrite with its implementation in 2.3.8. 1744 1745 If you want to know whether your code is vulnerable to this 1746 issue, simply search for the substrings `PS_FontInfo' and 1747 `PS_Font_Info' in your source code. If none is found, your code 1748 is safe and is not affected. 1749 1750 The FreeType team apologizes for the problem. 1751 1752 - The POSIX support of MacOS resource-fork fonts (Suitcase fonts 1753 and LaserWriter Type1 PostScript fonts) was broken in 2.3.8. If 1754 FreeType2 is built without Carbon framework, these fonts are not 1755 handled correctly. Version 2.3.7 didn't have this bug. 1756 1757 - `FT_Get_Advance' (and `FT_Get_Advances') returned bad values for 1758 almost all font formats except TrueType fonts. 1759 1760 - Fix a bug in the SFNT kerning table loader/parser which could 1761 crash the engine if certain malformed tables were encountered. 1762 1763 - Composite SFNT bitmaps are now handled correctly. 1764 1765 1766 II. IMPORTANT CHANGES 1767 1768 - The new functions `FT_Get_CID_Is_Internally_CID_keyed' and 1769 `FT_Get_CID_From_Glyph_Index' can be used to access CID-keyed 1770 CFF fonts via CID values. This code has been contributed by 1771 Michael Toftdal. 1772 1773 1774 III. MISCELLANEOUS 1775 1776 - `FT_Outline_Get_InsideBorder' returns FT_STROKER_BORDER_RIGHT 1777 for empty outlines. This was incorrectly documented. 1778 1779 - The `ftview' demo program now supports UTF-8 encoded strings. 1780 1781 1782 ====================================================================== 1783 1784 CHANGES BETWEEN 2.3.8 and 2.3.7 1785 1786 I. IMPORTANT BUG FIXES 1787 1788 - CID-keyed fonts in an SFNT wrapper were not handled correctly. 1789 1790 - The smooth renderer produced truncated images (on the right) for 1791 outline parts with negative horizontal values. Most fonts don't 1792 contain outlines left to the y coordinate axis, but the effect 1793 was very noticeable for outlines processed with FT_Glyph_Stroke, 1794 using thick strokes. 1795 1796 - `FT_Get_TrueType_Engine_Type' returned a wrong value if both 1797 configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and 1798 TT_CONFIG_OPTION_UNPATENTED_HINTING were defined. 1799 1800 - The `face_index' field in the `FT_Face' structure wasn't 1801 initialized properly after calling FT_Open_Face and friends with 1802 a positive face index for CFFs, WinFNTs, and, most importantly, 1803 for TrueType Collections (TTCs). 1804 1805 1806 II. IMPORTANT CHANGES 1807 1808 - Rudimentary support for Type 1 fonts and CID-keyed Type 1 fonts 1809 in an SFNT wrapper has been added -- such fonts are used on the 1810 Mac. The core SFNT tables `TYP1' and `CID ' are passed to the 1811 PS Type 1 and CID-keyed PS font drivers; other tables (`ALMX', 1812 `BBOX', etc.) are not supported yet. 1813 1814 - A new interface to extract advance values of glyphs without 1815 loading their outlines has been added. The functions are called 1816 `FT_Get_Advance' and `FT_Get_Advances'; they are defined in file 1817 `ftadvanc.h' (to be accessed as FT_ADVANCES_H). 1818 1819 - A new function `FT_Get_FSType_Flags' (in FT_FREETYPE_H) has been 1820 contributed by David Bevan to access the embedding and 1821 subsetting restriction information of fonts. 1822 1823 1824 III. MISCELLANEOUS 1825 1826 - FT_MulFix is now an inlined function; by default, assembler code 1827 is provided for x86 and ARM. See FT_CONFIG_OPTION_INLINE_MULFIX 1828 and FT_CONFIG_OPTION_NO_ASSEMBLER (in ftoption.h) for more. 1829 1830 - The handling of `tricky' fonts (this is, fonts which don't work 1831 with the autohinter, needing the font format's hinting engine) 1832 has been generalized and changed slightly: 1833 1834 . A new face flag FT_FACE_FLAG_TRICKY indicates that the font 1835 format's hinting engine is necessary for correct rendering. 1836 The macro FT_IS_TRICKY can be used to check this flag. 1837 1838 . FT_LOAD_NO_HINTING is now ignored for tricky fonts. To really 1839 force raw loading of such fonts (without hinting), both 1840 FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT must be used -- 1841 this is something which you probably never want to do. 1842 1843 . Tricky TrueType fonts always use the bytecode interpreter, 1844 either the patented or unpatented version. 1845 1846 - The function `FT_GlyphSlot_Own_Bitmap' has been moved from 1847 FT_SYNTHESIS_H to FT_BITMAP_H; it is now part of the `official' 1848 API. (The functions in FT_SYNTHESIS_H are still subject to 1849 change, however.) 1850 1851 - In the `ftdiff' demo program you can now toggle the use of 1852 FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH with key `a'. 1853 1854 1855 ====================================================================== 1856 1857 CHANGES BETWEEN 2.3.7 and 2.3.6 1858 1859 I. IMPORTANT BUG FIXES 1860 1861 - If the library was compiled on an i386 platform using gcc, and 1862 compiler option -O3 was given, `FT_MulFix' sometimes returned 1863 incorrect results which could have caused problems with 1864 `FT_Request_Metrics' and `FT_Select_Metrics', returning an 1865 incorrect descender size. 1866 1867 - Pure CFFs without subfonts were scaled incorrectly if the font 1868 matrix was non-standard. This bug has been introduced in 1869 version 2.3.6. 1870 1871 - The `style_name' field in the `FT_FaceRec' structure often 1872 contained a wrong value for Type 1 fonts. This misbehaviour 1873 has been introduced in version 2.3.6 while trying to fix 1874 another problem. [Note, however, that this value is 1875 informative only since the used algorithm to extract it is 1876 very simplistic.] 1877 1878 1879 II. IMPORTANT CHANGES 1880 1881 - Two new macros, FT_OUTLINE_SMART_DROPOUTS and 1882 FT_OUTLINE_EXCLUDE_STUBS, have been introduced. Together with 1883 FT_OUTLINE_IGNORE_DROPOUTS (which was ignored previously) it is 1884 now possible to control the dropout mode of the `raster' module 1885 (for B&W rasterization), using the `flags' field in the 1886 `FT_Outline' structure. 1887 1888 - The TrueType bytecode interpreter now passes the dropout mode to 1889 the B&W rasterizer. This greatly increases the output for small 1890 ppem values of many fonts like `pala.ttf'. 1891 1892 1893 ====================================================================== 1894 1895 CHANGES BETWEEN 2.3.6 and 2.3.5 1896 1897 I. IMPORTANT BUG FIXES 1898 1899 - A bunch of potential security problems have been found. All 1900 users should update. 1901 1902 - Microsoft Unicode cmaps in TrueType fonts are now always 1903 preferred over Apple cmaps. This is not a bug per se, but there 1904 exist some buggy fonts created for MS which have broken Apple 1905 cmaps. This affects only the automatic selection of FreeType; 1906 it's always possible to manually select an Apple Unicode cmap if 1907 desired. 1908 1909 - Many bug fixes to the TrueType bytecode interpreter. 1910 1911 - Improved Mac support. 1912 1913 - Subsetted CID-keyed CFFs are now supported correctly. 1914 1915 - CID-keyed CFFs with subfonts which are scaled in a non-standard 1916 way are now handled correctly. 1917 1918 - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if 1919 the font was a Windows (bitmap) FNT/FON. 1920 1921 1922 II. IMPORTANT CHANGES 1923 1924 - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives 1925 access to those fields in a CID-keyed font. The code has been 1926 contributed by Derek Clegg. 1927 1928 - George Williams contributed code to validate the new `MATH' 1929 OpenType table (within the `otvalid' module). The `ftvalid' 1930 demo program has been extended accordingly. 1931 1932 - An API for cmap 14 support (for Unicode Variant Selectors, UVS) 1933 has been contributed by George Williams. 1934 1935 - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together 1936 with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is 1937 CID-keyed. 1938 1939 1940 III. MISCELLANEOUS 1941 1942 - Build support for symbian has been contributed. 1943 1944 - Better WGL4 glyph name support, contributed by Sergey Tolstov. 1945 1946 - Debugging output of the various FT_TRACEX macros is now sent to 1947 stderr. 1948 1949 - The `ftview' demo program now provides artificial slanting too. 1950 1951 - The `ftvalid' demo program has a new option `-f' to select the 1952 font index. 1953 1954 1955 ====================================================================== 1956 1957 CHANGES BETWEEN 2.3.5 and 2.3.4 1958 1959 I. IMPORTANT BUG FIXES 1960 1961 - Some subglyphs in TrueType fonts were handled incorrectly due to 1962 a missing graphics state reinitialization. 1963 1964 - Large .Z files (as distributed with some X11 packages) weren't 1965 handled correctly, making FreeType increase the heap stack in an 1966 endless loop. 1967 1968 - A large number of bugs have been fixed to avoid crashes and 1969 endless loops with invalid fonts. 1970 1971 1972 II. IMPORTANT CHANGES 1973 1974 - The two new cache functions `FTC_ImageCache_LookupScaler' and 1975 `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of 1976 glyphs using an `FTC_Scaler' object; this makes it possible to 1977 use fractional pixel sizes in the cache. The demo programs have 1978 been updated accordingly to use this feature. 1979 1980 - A new API `FT_Get_CMap_Format' has been added to get the cmap 1981 format of a TrueType font. This is useful in handling PDF 1982 files. The code has been contributed by Derek Clegg. 1983 1984 - The auto-hinter now produces better output by default for 1985 non-Latin scripts like Indic. This was done by using the CJK 1986 hinting module as the default instead of the Latin one. Thanks 1987 to Rahul Bhalerao for this suggestion. 1988 1989 - A new API `FT_Face_CheckTrueTypePatents' has been added to find 1990 out whether a given TrueType font uses patented bytecode 1991 instructions. The `ft2demos' bundle contains a new program 1992 called `ftpatchk' which demonstrates its usage. 1993 1994 - A new API `FT_Face_SetUnpatentedHinting' has been added to 1995 enable or disable the unpatented hinter. 1996 1997 - Support for Windows FON files in PE format has been contributed 1998 by Dmitry Timoshkov. 1999 2000 2001 III. MISCELLANEOUS 2002 2003 - Vincent Richomme contributed Visual C++ project files for Pocket 2004 PCs. 2005 2006 2007 ====================================================================== 2008 2009 CHANGES BETWEEN 2.3.4 and 2.3.3 2010 2011 I. IMPORTANT BUG FIXES 2012 2013 - A serious bug in the handling of bitmap fonts (and bitmap 2014 strikes of outline fonts) has been introduced in 2.3.3. 2015 2016 2017 ====================================================================== 2018 2019 CHANGES BETWEEN 2.3.3 and 2.3.2 2020 2021 I. IMPORTANT BUG FIXES 2022 2023 - Remove a serious regression in the TrueType bytecode interpreter 2024 that was introduced in version 2.3.2. Note that this does not 2025 disable the improvements introduced to the interpreter in 2026 version 2.3.2, only some ill cases that occurred with certain 2027 fonts (though a few popular ones). 2028 2029 - The auto-hinter now ignores single-point contours for computing 2030 blue zones. This bug created `wavy' baselines when rendering 2031 text with various fonts that use these contours to model 2032 mark-attach points (these are points that are never rasterized 2033 and are placed outside of the glyph's real outline). 2034 2035 - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to 2036 zero for mono-spaced fonts. Otherwise code that uses them would 2037 essentially ruin the fixed-advance property. 2038 2039 - Fix CVE-2007-1351 which can cause an integer overflow while 2040 parsing BDF fonts, leading to a potentially exploitable heap 2041 overflow condition. 2042 2043 2044 II. MISCELLANEOUS 2045 2046 - Fixed compilation issues on some 64-bit platforms (see ChangeLog 2047 for details). 2048 2049 - A new demo program `ftdiff' has been added to compare TrueType 2050 hinting, FreeType's auto hinting, and rendering without hinting 2051 in three columns. 2052 2053 2054 ====================================================================== 2055 2056 CHANGES BETWEEN 2.3.2 and 2.3.1 2057 2058 I. IMPORTANT BUG FIXES 2059 2060 - FreeType returned incorrect kerning information from TrueType 2061 fonts when the bytecode interpreter was enabled. This happened 2062 due to a typo introduced in version 2.3.0. 2063 2064 - Negative kerning values from PFM files are now reported 2065 correctly (they were read as 16-bit unsigned values from the 2066 file). 2067 2068 - Fixed a small memory leak when `FT_Init_FreeType' failed for 2069 some reason. 2070 2071 - The Postscript hinter placed and sized very thin and ghost stems 2072 incorrectly. 2073 2074 - The TrueType bytecode interpreter has been fixed to get rid of 2075 most of the rare differences seen in comparison to the Windows 2076 font loader. 2077 2078 2079 II. IMPORTANT CHANGES 2080 2081 - The auto-hinter now better deals with serifs and corner cases 2082 (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves 2083 spacing adjustments and doesn't change widths for non-spacing 2084 glyphs. 2085 2086 - Many Mac-specific functions are deprecated (but still 2087 available); modern replacements have been provided for them. 2088 See the documentation in file `ftmac.h'. 2089 2090 2091 ====================================================================== 2092 2093 CHANGES BETWEEN 2.3.1 and 2.3.0 2094 2095 I. IMPORTANT BUG FIXES 2096 2097 - The TrueType interpreter sometimes returned incorrect horizontal 2098 metrics due to a bug in the handling of the SHZ instruction. 2099 2100 - A typo in a security check introduced after version 2.2.1 2101 prevented FreeType to render some glyphs in CFF fonts. 2102 2103 2104 ====================================================================== 2105 2106 CHANGES BETWEEN 2.3.0 and 2.2.1 2107 2108 I. IMPORTANT BUG FIXES 2109 2110 - The PCF font loader is now much more robust while loading 2111 malformed font files. 2112 2113 - Various memory leaks have been found and fixed. 2114 2115 - The TrueType name loader now deals properly with some fonts that 2116 encode their names in UTF-16 (the specification was vague, and 2117 the code incorrectly assumed UCS-4). 2118 2119 - Fixed the TrueType bytecode loader to deal properly with subtle 2120 monochrome/gray issues when scaling the CVT. Some fonts 2121 exhibited bad rendering artifacts otherwise. 2122 2123 - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly 2124 (it mangled the vertical advance height). 2125 2126 - Fixed byte endian issues of `ftmac.c' to support Mac OS X on 2127 i386. 2128 2129 - The PFR font loader no longer erroneously tags font files 2130 without any outlines as FT_FACE_FLAG_SCALABLE. 2131 2132 2133 II. NEW API FUNCTIONS 2134 2135 - `FT_Library_SetLcdFilter' allows you to select a special filter 2136 to be applied to the bitmaps generated by `FT_Render_Glyph' if 2137 one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has 2138 been selected. This filter is used to reduce color fringes; 2139 several settings are available through the FT_LCD_FILTER_XXX 2140 enumeration. 2141 2142 Its declaration and documentation can be found in file 2143 `include/freetype/ftlcdfil.h' (to be accessed with macro 2144 FT_LCD_FILTER_H). 2145 2146 *IMPORTANT*: This function returns an error 2147 (FT_Err_Unimplemented_Feature) in default builds of the library 2148 for patent reasons. See below. 2149 2150 - `FT_Get_Gasp' allows you to query the flags of the TrueType 2151 `gasp' table for a given character pixel size. This is useful 2152 to duplicate the text rendering of MS Windows when the native 2153 bytecode interpreter is enabled (which isn't the default for 2154 other patent reasons). 2155 2156 Its declaration and documentation can be found in file 2157 `include/freetype/ftgasp.h' (to be accessed with macro 2158 FT_GASP_H). 2159 2160 2161 III. IMPORTANT CHANGES 2162 2163 - The auto-hinter has been tuned a lot to improve its results with 2164 serif fonts, resulting in much better font rendering of many web 2165 pages. 2166 2167 - The unpatented hinter is now part of the default build of the 2168 library; we have added code to automatically support `tricky' 2169 fonts that need it. 2170 2171 This means that FreeType should `just work' with certain Asian 2172 fonts, like MingLiU, which cannot properly be loaded without a 2173 bytecode interpreter, but which fortunately do not use any of 2174 the patented bytecode opcodes. We detect these fonts by name, 2175 so please report any font file that doesn't seem to work with 2176 FreeType, and we shall do what we can to support it in a next 2177 release. 2178 2179 Note that the API hasn't changed, so you can still force 2180 unpatented hinting with a special parameter to `FT_Open_Face' as 2181 well. This might be useful in same cases; for example, a PDF 2182 reader might present a user option to activate it to deal with 2183 certain `tricky' embedded fonts which cannot be clearly 2184 identified. 2185 2186 If you are a developer for embedded systems, you might want to 2187 *disable* the feature to save code space by undefining 2188 TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'. 2189 2190 - LCD-optimized rendering is now *disabled* in all default builds 2191 of the library, mainly due to patent issues. For more 2192 information see: 2193 2194 https://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html 2195 2196 A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING 2197 has been introduced in `ftoption.h'; manually define it in this 2198 file if you want to re-enable the feature. 2199 2200 The change only affects the implementation, not the FreeType 2201 API. This means that clients don't need to be modified, because 2202 the library still generates LCD decimated bitmaps, but with the 2203 added constraint that R=G=B on each triplet. 2204 2205 The displayed result should be equal to normal anti-aliased 2206 rendering. 2207 2208 Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not 2209 defined, the new `FT_Library_SetLcdFilter' function returns the 2210 FT_Err_Unimplemented_Feature error code. 2211 2212 - Some computation bugs in the TrueType bytecode interpreter were 2213 found, which allow us to get rid of very subtle and rare 2214 differences we had experienced with the Windows renderer. 2215 2216 - It is now possible to cross-compile the library easily. See the 2217 file `docs/INSTALL.CROSS' for details. 2218 2219 - The file `src/base/ftmac.c' now contains code for Mac OS X only; 2220 its deprecated function `FT_GetFile_From_Mac_Font_Name' always 2221 returns an error even if the QuickDraw framework is available. 2222 The previous version has been moved to `builds/mac/ftmac.c'. 2223 2224 Selecting configure option `--with-quickdraw-carbon' makes the 2225 build process use the original `ftmac.c' file instead of the Mac 2226 OS X-only version. 2227 2228 2229 IV. MISCELLANEOUS 2230 2231 - Various performance and memory footprint optimizations have been 2232 performed on the TrueType and CFF font loaders, sometimes with 2233 very drastic benefits (e.g., the TrueType loader is now about 2234 25% faster; FreeType should use less heap memory under nearly 2235 all conditions). 2236 2237 - The anti-aliased rasterizer has been optimized and is now 15% to 2238 25% percent faster than in previous versions, depending on 2239 content. 2240 2241 - The Type 1 loader has been improved; as an example, it now skips 2242 top-level dictionaries properly. 2243 2244 - Better support for Mac fonts on POSIX systems, plus compilation 2245 fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built. 2246 2247 - Configuration without `--with-old-mac-fonts' does not include 2248 `ftmac.c' (this was the behaviour in FreeType version 2.1.10). 2249 2250 - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs 2251 in the kern table. 2252 2253 2254 ====================================================================== 2255 2256 CHANGES BETWEEN 2.2.1 and 2.2 2257 2258 I. IMPORTANT BUG FIXES 2259 2260 - Various integer overflows have been fixed. 2261 2262 - PFB fonts with MacOS resource fork weren't handled correctly on 2263 non-MacOS platforms. 2264 2265 2266 ====================================================================== 2267 2268 CHANGES BETWEEN 2.2 and 2.1.10 2269 2270 (not released officially) 2271 2272 I. IMPORTANT BUG FIXES 2273 2274 - Vertical metrics for SFNT fonts were incorrect sometimes. 2275 2276 - The FT_HAS_KERNING macro always returned 0. 2277 2278 - CFF OpenType fonts didn't return correct vertical metrics for 2279 glyphs with outlines. 2280 2281 - If FreeType was compiled without hinters, all font formats based 2282 on PS outlines weren't scaled correctly. 2283 2284 2285 II. IMPORTANT CHANGES 2286 2287 - Version 2.2 no longer exposes its internals, this is, the header 2288 files located in the `include/freetype/internal' directory of 2289 the source package are not copied anymore by the `make install' 2290 command. Consequently, a number of rogue clients which directly 2291 access FreeType's internal functions and structures won't 2292 compile without modification. 2293 2294 We provide patches for most of those rogue clients. See the 2295 following page for more information: 2296 2297 https://www.freetype.org/freetype2/patches/rogue-patches.html 2298 2299 Note that, as a convenience to our Unix desktop users, version 2300 2.2 is *binary* compatible with FreeType 2.1.7, which means that 2301 installing this release on an existing distribution shall not 2302 break any working desktop. 2303 2304 - FreeType's build mechanism has been redesigned. With GNU make 2305 it is now sufficient in most cases to edit two files: 2306 `modules.cfg', to select the library components, and the 2307 configuration file `include/freetype/config/ftoption.h' (which 2308 can be copied to the objects directory). Removing unused module 2309 directories to prevent its compilation and editing 2310 `include/freetype/config/ftmodule.h' is no longer necessary. 2311 2312 - The LIGHT hinting algorithm produces more pleasant results. 2313 Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph 2314 always forces auto-hinting, as a special exception. This allows 2315 you to experiment with it even if you have enabled the TrueType 2316 bytecode interpreter in your build. 2317 2318 - The auto hinter now employs a new algorithm for CJK fonts, based 2319 on Akito Hirai's patch. Note that this only works for fonts 2320 with a Unicode charmap at the moment. 2321 2322 - The following callback function types have changed slightly (by 2323 adding the `const' keyword where appropriate): 2324 2325 FT_Outline_MoveToFunc 2326 FT_Outline_LineToFunc 2327 FT_Outline_ConicToFunc 2328 FT_Outline_CubicToFunc 2329 FT_SpanFunc 2330 FT_Raster_RenderFunc 2331 2332 FT_Glyph_TransformFunc 2333 FT_Renderer_RenderFunc 2334 FT_Renderer_TransformFunc 2335 2336 Note that this doesn't affect binary backward compatibility. 2337 2338 - On MacOS, new APIs have been added as replacements for legacy 2339 APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec', 2340 and `FT_GetFile_From_Mac_ATS_Name' for 2341 `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if 2342 FreeType is built without disabling them. 2343 2344 - A new API `FT_Select_Size' has been added to select a bitmap 2345 strike by its index. Code using other functions to select 2346 bitmap strikes should be updated to use this function. 2347 2348 - A new API `FT_Get_SubGlyph_Info' has been added to retrieve 2349 subglyph data. This can be used by rogue clients which used to 2350 access the internal headers to get the corresponding data. 2351 2352 - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for 2353 BDF/PCF fonts, and only for them. This causes inconsistency. 2354 In this release, we undo the change. The intent of the change 2355 in 2.1.10 is to allow size selection through real dimensions, 2356 which can now be done through `FT_Request_Size'. 2357 2358 - Some security issues were discovered and fixed in the CFF and 2359 Type 1 loader, causing crashes of FreeType by malformed font 2360 files. 2361 2362 2363 III. MISCELLANEOUS 2364 2365 - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX 2366 values now better reflects its usage and differences: One set is 2367 used to specify the hinting algorithm, the other to specify the 2368 pixel rendering mode. 2369 2370 - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been 2371 changed to count supported scalable faces (sfnt, LWFN) only, and 2372 to return the number of available faces via face->num_faces. 2373 Unsupported bitmap faces (fbit, NFNT) are ignored. 2374 2375 - builds/unix/configure has been improved for MacOS X. It now 2376 automatically checks available functions in Carbon library, and 2377 prepare to use newest functions by default. Options to specify 2378 the dependencies of each Carbon APIs (FSSpec, FSRef, old/new 2379 QuickDraw, ATS) are available too. By manual disabling of all 2380 QuickDraw functionality, FreeType can be built without 2381 `deprecated function' warnings on MacOS 10.4.x, but 2382 FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy 2383 function, and returns an `unimplemented' error. For details see 2384 builds/mac/README. 2385 2386 - SFNT cmap handling has been improved, mainly to run much faster 2387 with CJK fonts. 2388 2389 - A new function `FT_Get_TrueType_Engine_Type (declared in 2390 `FT_MODULE_H') is provided to determine the status of the 2391 TrueType bytecode interpreter compiled into the library 2392 (patented, unpatented, unimplemented). 2393 2394 - Vertical metrics of glyphs are synthesized if the font does not 2395 provide such information. You can tell whether the metrics are 2396 synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of 2397 the face. 2398 2399 - The demo programs `ftview' and `ftstring' have been rewritten 2400 for better readability. `ftview' has a new switch `-p' to test 2401 FT_New_Memory_Face (instead of FT_New_Face). 2402 2403 - FreeType now honours bit 1 in the `head' table of TrueType fonts 2404 (meaning `left sidebearing point at x=0'). This helps with some 2405 buggy fonts. 2406 2407 - Rudimentary support for Adobe's new `SING Glyphlet' format. See 2408 2409 https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5148.SING_Tutorial.pdf 2410 2411 for more information. 2412 2413 - The `ftdump' program from the `ft2demos' bundle now shows some 2414 information about charmaps. It also supports a new switch `-v' 2415 to increase verbosity. 2416 2417 - Better AFM support. This includes track kerning support. 2418 2419 2420 ====================================================================== 2421 2422 CHANGES BETWEEN 2.1.10 and 2.1.9 2423 2424 I. IMPORTANT BUG FIXES 2425 2426 - The size comparison for BDF and PCF files could fail sometimes. 2427 2428 - Some CFF files were still not loaded correctly. Patch from 2429 Derek Noonburg. 2430 2431 - The stroker still had some serious bugs. 2432 2433 - Boris Letocha fixed a bug in the TrueType interpreter: The 2434 NPUSHW instruction wasn't skipped correctly in IF clauses. Some 2435 fonts like `Helvetica 75 Bold' failed. 2436 2437 - Another serious bug in handling TrueType hints caused many 2438 distortions. It has been introduced in version 2.1.8, and it is 2439 highly recommended to upgrade. 2440 2441 - FreeType didn't properly parse empty Type 1 glyphs. 2442 2443 - An unbound dynamic buffer growth was fixed in the PFR loader. 2444 2445 - Several bugs have been fixed in the cache sub-system. 2446 2447 - FreeType behaved incorrectly when resizing two distinct but very 2448 close character pixel sizes through `FT_Set_Char_Size' (Savannah 2449 bug #12263). 2450 2451 - The auto-hinter didn't work properly for fonts without a Unicode 2452 charmap -- it even refused to load the glyphs. 2453 2454 2455 II. IMPORTANT CHANGES 2456 2457 - Many fixes have been applied to drastically reduce the amount of 2458 heap memory used by FreeType, especially when using 2459 memory-mapped font files (which is the default on Unix systems 2460 which support them). 2461 2462 - The auto-hinter has been replaced with a new module, called the 2463 `auto-fitter'. It consumes less memory than its predecessor, 2464 and it is prepared to support non-latin scripts better in next 2465 releases. 2466 2467 - George Williams contributed code to read kerning data from PFM 2468 files. 2469 2470 - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and 2471 TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for 2472 setting family and style in SFNT fonts (patch from Kornfeld 2473 Eliyahu Peter). 2474 2475 - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has 2476 been added to retrieve name and size information of SFNT tables. 2477 2478 - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has 2479 been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB, 2480 JSTF). After validation it is no longer necessary to check 2481 for errors in those tables while accessing them. 2482 2483 Note that this module might be moved to another library in the 2484 future to avoid a tight dependency between FreeType and the 2485 OpenType specification. 2486 2487 - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert', 2488 `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has 2489 been added. Its use is to convert an FT_Bitmap structure in 2490 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap, 2491 probably using a different pitch, and to further manipulate it. 2492 2493 - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer 2494 control how outlines are emboldened. 2495 2496 - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps 2497 also (code contributed by Chia I Wu). Note that this function 2498 is still experimental and may be replaced with a better API. 2499 2500 - The method how BDF and PCF bitmap fonts are accessed has been 2501 refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size 2502 were synonyms in FreeType's BDF and PCF interface. This has 2503 changed now. FT_Set_Pixel_Sizes should be used to select the 2504 actual font dimensions (the `strike', which is the sum of the 2505 `FONT_ASCENT' and `FONT_DESCENT' properties), while 2506 FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE' 2507 property). In both functions, the width parameter is ignored. 2508 2509 2510 III. MISCELLANEOUS 2511 2512 - The BDF driver no longer converts all returned bitmaps with a 2513 depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has 2514 not mentioned this explicitly, but implementors might have 2515 relied on this after looking into the source files. 2516 2517 - A new option `--ftversion' has been added to freetype-config to 2518 return the FreeType version. 2519 2520 - The memory debugger has been updated to dump allocation 2521 statistics on all allocation sources in the library. This is 2522 useful to spot greedy allocations when loading and processing 2523 fonts. 2524 2525 - We removed a huge array of constant pointers to constant strings 2526 in the `psnames' module. The problem was that compilations in 2527 PIC mode (i.e., when generating a Unix shared object/dll) put 2528 the array into the non-shared writable section of the library 2529 since absolute pointers are not relocatable by nature. 2530 2531 This reduces the memory consumption by approximately 16KByte per 2532 process linked to FreeType. We now also store the array in a 2533 compressed form (as a trie) which saves about 20KByte of code as 2534 well. 2535 2536 - Kirill Smelkov provided patches to make src/raster/ftraster.c 2537 compile stand-alone again. 2538 2539 2540 ====================================================================== 2541 2542 CHANGES BETWEEN 2.1.9 and 2.1.8 2543 2544 I. IMPORTANT BUG FIXES 2545 2546 - The function `FT_Get_CharMap_Index' was only declared, without 2547 any real code. For consistency, it has been renamed to 2548 `FT_Get_Charmap_Index'. (This function is needed to implement 2549 cmap caches.) 2550 2551 - `FT_Outline_Get_BBox' sometimes returned incorrect values for 2552 conic outlines (e.g., for TrueType fonts). 2553 2554 - Handling of `bhed' table has been fixed. 2555 2556 - The TrueType driver with enabled byte code interpreter sometimes 2557 returned artifacts due to incorrect rounding. This bug has been 2558 introduced after version 2.1.4. 2559 2560 - The BDF driver dropped the last glyph in the font. 2561 2562 - The BDF driver now uses the DEFAULT_CHAR property (if available) 2563 to select a glyph shape for the undefined glyph. 2564 2565 - The stroker failed for closed outlines and single points. 2566 2567 2568 II. IMPORTANT CHANGES 2569 2570 - George Williams contributed code to handle Apple's font 2571 distortion technology found in GX fonts (`avar', `cvar', `fvar', 2572 and `gvar' tables; the Multiple Masters API has been slightly 2573 extended to cope with the new functionality). 2574 2575 - The `FT_GlyphSlotRec' structure has been extended: The elements 2576 `lsb_delta' and `rsb_delta' give the difference between hinted 2577 and unhinted left and right side bearings if autohinting is 2578 active. Using those values can improve the inter-letter spacing 2579 considerably. See the documentation of `FT_GlyphSlotRec' and 2580 the `ftstring' demo program how to use it. 2581 2582 - Loading TrueType and Type 1 fonts has been made much faster. 2583 2584 - The stroker is no longer experimental (but the cache subsystem 2585 still is). 2586 2587 2588 III. MISCELLANEOUS 2589 2590 - A new documentation file `formats.txt' describes various font 2591 formats supported (and not supported) by FreeType. 2592 2593 2594 ====================================================================== 2595 2596 CHANGES BETWEEN 2.1.8 and 2.1.7 2597 2598 I. IMPORTANT BUG FIXES 2599 2600 - The native TrueType hinter contained some bugs which prevented 2601 some fonts to be rendered correctly, most notably Legendum.otf. 2602 2603 - The PostScript hinter now produces improved results. 2604 2605 - The linear advance width and height values were incorrectly 2606 rounded, making them virtually unusable if not loaded with 2607 FT_LOAD_LINEAR_DESIGN. 2608 2609 - Indexing CID-keyed CFF fonts is now working: The glyph index is 2610 correctly treated as a CID, similar to FreeType's CID driver 2611 module. Note that CID CMap support is still missing. 2612 2613 - The FT_FACE_FLAG_GLYPH_NAMES flag is now set correctly for all 2614 font formats. 2615 2616 - Some subsetted Type 1 fonts weren't parsed correctly. This bug 2617 has been introduced in 2.1.7. In summary, the Type 1 parser has 2618 become more robust. 2619 2620 - Non-decimal numbers weren't parsed correctly in PS fonts. 2621 2622 - The WinFNT driver now correctly reports FT_ENCODING_NONE for all 2623 but one encoding. Use the new FT_WinFNT_ID_XXX values together 2624 with `FT_Get_WinFNT_Header' to get the WinFNT charset ID. 2625 2626 - The descender metrics (face->size->metrics.descender) for WinFNT 2627 bitmap fonts had the wrong sign. 2628 2629 - The (emulated) `seac' support for CFF fonts was broken. 2630 2631 - The `flex' operator didn't work for CFF fonts. 2632 2633 - PS glyphs which use the `hintmask' operator haven't been 2634 rendered correctly in some cases. 2635 2636 - Metrics for BDF and PCF bitmap font formats have been fixed. 2637 2638 - Autohinting is now disabled for glyphs which are vertically 2639 distorted or mirrored (using a transformation matrix). This 2640 fixes a bug which produced zero-height glyphs. 2641 2642 - The `freetype-config' script now handles --prefix and 2643 --exec-prefix correctly; it also returns the proper --rpath (or 2644 -R) value if FreeType has been built as a shared library. 2645 2646 2647 II. IMPORTANT CHANGES 2648 2649 - Both PCF and BDF drivers now handle the SETWIDTH_NAME and 2650 ADD_STYLE_NAME properties. Values are appended to 2651 face->style_name; example: `Bold SemiCondensed'. 2652 2653 - The PCF driver now handles bitmap fonts compressed with the LZW 2654 algorithm (extension .pcf.Z, compressed with `compress'). 2655 2656 - A new API function `FT_Get_CMap_Language_ID' (declared in 2657 `tttables.h') is available to get the language ID of a 2658 TrueType/SFNT cmap. 2659 2660 - The hexadecimal format of data after the `StartData' command in 2661 CID-keyed Type 1 fonts is now supported. While this can't occur 2662 in file-based fonts, it can happen in document-embedded 2663 resources of PostScript documents. 2664 2665 - Embedded bitmaps in SFNT-based CFF fonts are now supported. 2666 2667 - A simple API is now available to control FreeType's tracing 2668 mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file 2669 `ftdebug.h' for more details. 2670 2671 - YAMATO Masatake contributed improved handling of MacOS resource 2672 forks on non-MacOS platforms (for example, Linux can mount MacOS 2673 file systems). 2674 2675 - Support for MacOS has been improved; there is now a new function 2676 `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that 2677 it accepts an FSSpec instead of a path. 2678 2679 - The cache sub-system has been rewritten. 2680 2681 - There is now support for deinstallation of faces. 2682 2683 - A new API function `FTC_Manager_RemoveFaceID' has been added 2684 to delete all `idle' nodes that correspond to a given 2685 FTC_FaceID. All `locked' nodes (i.e., those with a reference 2686 count > 0), will be modified to prevent them from appearing in 2687 further lookups (they will be cleaned normally when their 2688 reference count reaches 0). 2689 2690 - There is now support for point scaling (i.e., providing 2691 character sizes in points + dpis, instead of pixels). 2692 2693 - Three abstract cache classes are now available: 2694 2695 FTC_GCache: Used to store one glyph item per cache node, 2696 with the ability to group common attributes into 2697 `families'. This replaces the old 2698 FTC_GlyphCache class. 2699 2700 FTC_ICache: Used to store one FT_Glyph per cache node. This 2701 extends FTC_GCache. Family definition, family 2702 comparison, and glyph loading are however left 2703 to sub-classes. 2704 2705 FTC_SCache: Used to store up to 16 small bitmaps per cache 2706 node. This extends FTC_GCache. Family 2707 definition, family comparison and glyph loading 2708 are however left to sub-classes. 2709 2710 - The file `src/cache/ftcbasic.c' implements: 2711 2712 FTC_ImageCache: Extends FTC_ICache; implements family 2713 definitions and glyph loading similar to the 2714 old API. 2715 2716 FTC_SBitCache: Extends FTC_SCache, implements family 2717 definitions and glyph loading similar to the 2718 old API 2719 2720 Client applications should be able to extend FTC_GCache, 2721 FTC_ICache, or FTC_SCache much more easily (i.e., less code to 2722 write, and less callbacks). For example, one could envision 2723 caches that are capable of storing transformed (obliqued), 2724 stroked, emboldened, or colored glyph images. Use 2725 `ftcbasic.c' as an example. 2726 2727 - All public APIs are now in `include/freetype/ftcache.h', (to 2728 be accessed as `FT_CACHE_H'). The contents of 2729 `include/freetype/cache/' is only needed by applications that 2730 wish to implement their own caches. 2731 2732 - There were some major performance improvements through the use 2733 of various programming tricks. Cache hits are up to 70% 2734 faster than in the old code. 2735 2736 - The FTC_CMapCache has been simplified. Charmaps can only be 2737 accessed by index right now. There is also a new API named 2738 `FT_Charmap_GetIndex' for this purpose. 2739 2740 - The demo programs have been updated to the new code. The 2741 previous versions will not work with the current one. 2742 2743 - Using an invalid face index in FT_Open_Face and friends now 2744 causes an error even if the font contains a single face only. 2745 2746 2747 III. MISCELLANEOUS 2748 2749 - Wolfgang Domrse contributed support files for building FreeType 2750 on the Atari using the PureC compiler. Note that the Atari is a 2751 16bit platform. 2752 2753 - Vitaliy Pasternak contributed project files for VS.NET 2003. 2754 2755 2756 ====================================================================== 2757 2758 CHANGES BETWEEN 2.1.7 and 2.1.6 2759 2760 I. IMPORTANT BUG FIXES 2761 2762 - Updated to newest libtool version, fixing build problems on 2763 various platforms. 2764 2765 - On Unix platforms, `make install' didn't copy the correct 2766 `ftconfig.h' file. 2767 2768 Note that version 2.1.7 contains the same library C source code as 2769 version 2.1.6. 2770 2771 2772 ====================================================================== 2773 2774 CHANGES BETWEEN 2.1.6 and 2.1.5 2775 2776 I. IMPORTANT BUG FIXES 2777 2778 - The PFR font driver didn't load kerning tables correctly, and 2779 the functions in FT_PFR_H didn't work at all. 2780 2781 - Type 1 font files in binary format (PFB) with an end-of-file 2782 indicator weren't accepted by the FreeType engine. 2783 2784 - Fonts which contain /PaintType and /StrokeWidth no longer cause 2785 a segfault. This bug has been introduced in version 2.1.5. 2786 2787 - Fonts loaded with FT_LOAD_RENDER no longer cause strange 2788 results. This bug has been introduced in version 2.1.5. 2789 2790 - Some Windows (bitmap) FNT/FON files couldn't be handled 2791 correctly. 2792 2793 2794 II. IMPORTANT CHANGES 2795 2796 - The internal module API has been heavily changed in favor of 2797 massive simplifications within the font engine. This also means 2798 that authors of third-party modules must adapt their code to the 2799 new scheme. 2800 2801 NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A 2802 FINAL ANNOUNCEMENT! 2803 2804 - The PostScript parser has been enhanced to handle comments and 2805 strings correctly. Additionally, more syntax forms are 2806 recognized. 2807 2808 - Added the optional unpatented hinting system for TrueType. It 2809 allows typefaces which need hinting to produce correct glyph 2810 forms (e.g., Chinese typefaces from Dynalab) to work acceptably 2811 without infringing Apple patents. This system is compiled only 2812 if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in 2813 ftoption.h (activated by default). 2814 2815 2816 III. MISCELLANEOUS 2817 2818 - There is now a guard in the public header files to protect 2819 against inclusion of freetype.h from FreeType 1. 2820 2821 - Direct inclusion of freetype.h and other public header files no 2822 longer works. You have to use the documented scheme 2823 2824 #include <ft2build.h> 2825 #include FT_FREETYPE_H 2826 2827 to load freetype.h with a symbolic name. This protects against 2828 renaming of public header files (which shouldn't happen but 2829 actually has, avoiding two public header files with the same 2830 name). 2831 2832 2833 ====================================================================== 2834 2835 CHANGES BETWEEN 2.1.5 and 2.1.4 2836 2837 I. IMPORTANT BUG FIXES 2838 2839 - Parsing the /CIDFontName field now removes the leading slash to 2840 be in sync with other font drivers. 2841 2842 - gzip support was buggy. Some fonts could not be read. 2843 2844 - Fonts which have nested subglyphs more than one level deep no 2845 longer cause a segfault. 2846 2847 - Creation of synthetic cmaps for fonts in CFF format was broken 2848 partially. 2849 2850 - Numeric font dictionary entries for synthetic fonts are no 2851 longer overwritten. 2852 2853 - The font matrix wasn't applied to the advance width for Type1, 2854 CID, and CFF fonts. This caused problems when loading certain 2855 synthetic Type 1 fonts like `Helvetica Narrow'. 2856 2857 - The test for the charset registry in BDF and PCF fonts is now 2858 case-insensitive. 2859 2860 - FT_Vector_Rotate sometimes returned strange values due to 2861 rounding errors. 2862 2863 - The PCF driver now returns the correct number of glyphs 2864 (including an artificial `notdef' glyph at index 0). 2865 2866 - FreeType now supports buggy CMaps which are contained in many 2867 CJK fonts from Dynalab. 2868 2869 - Opening an invalid font on a Mac caused a segfault due to 2870 double-freeing memory. 2871 2872 - BDF fonts with more than 32768 glyphs weren't supported 2873 properly. 2874 2875 2876 II. IMPORTANT CHANGES 2877 2878 - Accessing bitmap font formats has been synchronized. To do that 2879 the FT_Bitmap_Size structure has been extended to contain new 2880 fields `size', `x_ppem', and `y_ppem'. 2881 2882 - The FNT driver now returns multiple faces, not multiple strikes. 2883 2884 - The `psnames' module has been updated to the Adobe Glyph List 2885 version 2.0. 2886 2887 - The `psnames' module now understands `uXXXX[X[X]]' glyph names. 2888 2889 - The algorithm for guessing the font style has been improved. 2890 2891 - For fonts in SFNT format, root->height is no longer increased if 2892 the line gap is zero. There exist fonts (containing e.g. form 2893 drawing characters) which intentionally have a zero line gap 2894 value. 2895 2896 - ft_glyph_bbox_xxx flags are now deprecated in favour of 2897 FT_GLYPH_BBOX_XXX. 2898 2899 - ft_module_xxx flags are now deprecated in favour of 2900 FT_MODULE_XXX. 2901 2902 - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now 2903 deprecated in favour of 2904 FT_ENCODING_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} -- those encodings 2905 are not specific to Microsoft. 2906 2907 2908 III. MISCELLANEOUS 2909 2910 - The autohinter has been further improved; for example, `m' 2911 glyphs now retain its vertical symmetry. 2912 2913 - Partial support of Mac fonts on non-Mac platforms. 2914 2915 - `make refdoc' (after first `make') builds the HTML 2916 documentation. You need Python for this. 2917 2918 - The make build system should now work more reliably on DOS-like 2919 platforms. 2920 2921 - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has 2922 been added. 2923 2924 - Better VMS build support. 2925 2926 - Support for the pkg-config package by providing a `freetype.pc' 2927 file. 2928 2929 - New configure option --with-old-mac-fonts for Darwin. 2930 2931 - Some source files have been renamed (mainly to fit into the 8.3 2932 naming scheme). 2933 2934 2935 ====================================================================== 2936 2937 CHANGES BETWEEN 2.1.4 and 2.1.3 2938 2939 I. IMPORTANT BUG FIXES 2940 2941 - Updated to newest libtool version, fixing build problems on 2942 various platforms. 2943 2944 - A fix in the Gzip stream reader: It couldn't read certain .gz 2945 files properly due to a small typo. In certain cases, FreeType 2946 could also loop endlessly when trying to load tiny gzipped 2947 files. 2948 2949 - The configure script now tries to use the system-wide zlib when 2950 it finds one (instead of the copy found in src/gzip). And 2951 `freetype-config' has been updated to return relevant flags in 2952 this case when invoked with `--libs' (e.g. `-lzlib'). 2953 2954 - Certain fonts couldn't be loaded by 2.1.3 because they lacked a 2955 Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously 2956 rejected them. 2957 2958 - The CFF loader was modified to accept fonts which only contain a 2959 subset of their reference charset. This prevented the correct 2960 use of PDF-embedded fonts. 2961 2962 - The logic to detect Unicode charmaps has been modified. This is 2963 required to support fonts which include both 16-bit and 32-bit 2964 charmaps (like very recent asian ones) using the new 10 and 12 2965 SFNT formats. 2966 2967 - The TrueType loader now limits the depth of composite glyphs. 2968 This is necessary to prevent broken fonts to break the engine by 2969 blowing the stack with recursive glyph definitions. 2970 2971 - The CMap cache is now capable of managing UCS-4 character codes 2972 that are mapped through extended charmaps in recent 2973 TrueType/OpenType fonts. 2974 2975 - The cache sub-system now properly manages out-of-memory 2976 conditions instead of blindly reporting them to the caller. 2977 This means that it will try to empty the cache before restarting 2978 its allocations to see if that can help. 2979 2980 - The PFR driver didn't return the list of available embedded 2981 bitmaps properly. 2982 2983 - There was a nasty memory leak when using embedded bitmaps in 2984 certain font formats. 2985 2986 2987 II. IMPORTANT CHANGES 2988 2989 - David Chester contributed some enhancements to the auto-hinter 2990 that significantly increase the quality of its output. The 2991 Postscript hinter was also improved in several ways. 2992 2993 - The FT_RENDER_MODE_LIGHT render mode was implemented. 2994 2995 - A new API function called `FT_Get_BDF_Property' has been added 2996 to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font 2997 files. THIS IS STILL EXPERIMENTAL, since it hasn't been 2998 properly tested yet. 2999 3000 - A Windows FNT specific API has been added, mostly to access font 3001 headers. This is used by Wine. 3002 3003 - TrueType tables without an `hmtx' table are now tolerated when 3004 an incremental interface is used. This happens for certain 3005 Type42 fonts passed from Ghostscript to FreeType. 3006 3007 - The PFR font driver is now capable of returning the font family 3008 and style names when they are available (instead of the sole 3009 `FontID'). This is performed by parsing an *undocumented* 3010 portion of the font file! 3011 3012 3013 III. MISCELLANEOUS 3014 3015 - The path stroker in FT_STROKER_H has entered beta stage. It now 3016 works very well, but its interface might change a bit in the 3017 future. More on this in later releases. 3018 3019 - The documentation for FT_Size_Metrics didn't appear properly in 3020 the API reference. 3021 3022 - The file docs/VERSION.DLL has been updated to explain versioning 3023 with FreeType (i.e., comparing release/libtool/so numbers, and 3024 how to use them in autoconf scripts). 3025 3026 - The installation documentation has been seriously revamped. 3027 Everything is now in the `docs' directory. 3028 3029 3030 ====================================================================== 3031 3032 CHANGES BETWEEN 2.1.3 and 2.1.2 3033 3034 I. IMPORTANT BUG FIXES 3035 3036 - FT_Vector_Transform had been incorrectly modified in 2.1.2, 3037 resulting in incorrect transformations being applied (for 3038 example, rotations were processed in opposite angles). 3039 3040 - The format 8 and 12 TrueType charmap enumeration routines have 3041 been fixed (FT_Get_Next_Char returned invalid values). 3042 3043 - The PFR font driver returned incorrect advance widths if the 3044 outline and metrics resolution defined in the font file were 3045 different. 3046 3047 - FT_Glyph_To_Bitmap now returns successfully when called with an 3048 FT_BitmapGlyph argument (it previously returned an error). 3049 3050 - A bug in the Type 1 loader that prevented valid font bounding 3051 boxes to be loaded from multiple master fonts. 3052 3053 - The SFNT validation code has been rewritten. FreeType can now 3054 load `broken' fonts that were usable on Windows, but not with 3055 previous versions of the library. 3056 3057 - The computation of bearings in the BDF driver has been fixed. 3058 3059 - The Postscript hinter crashed when trying to hint certain glyphs 3060 (more precisely, when trying to apply hints to an empty glyph 3061 outline). 3062 3063 - The TrueType glyph loader now supports composites in `Apple 3064 format' (they differ slightly from Microsoft/OpenType ones in 3065 the way transformation offsets are computed). 3066 3067 - FreeType was very slow at opening certain asian CID/CFF fonts, 3068 due to fixed increment in dynamic array re-allocations. This 3069 has been changed to exponential behaviour to get acceptable 3070 performance. 3071 3072 3073 3074 II. IMPORTANT CHANGES 3075 3076 - The PCF driver now supports gzip-compressed font files natively. 3077 This means that you will be able to use all these bitmap fonts 3078 that come with XFree86 with FreeType (and libXft/libXft2, by 3079 extension). 3080 3081 - The automatic and postscript hinters have both been updated. 3082 This results in a relatively important increase of rendering 3083 quality since many nasty defaults have been suppressed. Please 3084 visit the web page: 3085 3086 https://www.freetype.org/hinting/smooth-hinting.html 3087 3088 for additional details on this topic. 3089 3090 - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32 3091 (instead of just being an FT_Int). This breaks source and 3092 binary compatibility for 16bit systems only, while retaining 3093 both of them for 32 and 64 bit ones. 3094 3095 Some new flags have been added consequently: 3096 3097 FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter 3098 (but not native format hinters). 3099 3100 FT_LOAD_TARGET_NORMAL :: Hint and render for normal 3101 anti-aliased displays. 3102 3103 FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays. 3104 3105 FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or 3106 BGR subpixel displays (like LCD 3107 screens). THIS IS STILL 3108 EXPERIMENTAL! 3109 3110 FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for 3111 vertical subpixel displays (like 3112 rotated LCD screens). THIS IS STILL 3113 EXPERIMENTAL! 3114 3115 FT_LOAD_MONOCHROME is still supported, but only affects 3116 rendering, not the hinting. 3117 3118 Note that the `ftview' demo program available in the `ft2demos' 3119 package has been updated to support LCD-optimized display on 3120 non-paletted displays (under Win32 and X11). 3121 3122 - The PFR driver now supports embedded bitmaps (all formats 3123 supported), and returns correct kerning metrics for all glyphs. 3124 3125 - The TrueType charmap loader now supports certain `broken' fonts 3126 that load under Windows without problems. 3127 3128 - The cache API has been slightly modified (it's still a beta!): 3129 3130 - The type FTC_ImageDesc has been removed; it is now replaced 3131 by FTC_ImageTypeRec. Note that one of its fields is a 3132 `load_flag' parameter for FT_Load_Glyph. 3133 3134 - The field `num_grays' of FT_SBitRec has been changed to 3135 `max_grays' in order to fit within a single byte. Its 3136 maximum value is thus 255 (instead of 256 as previously). 3137 3138 3139 III. MISCELLANEOUS 3140 3141 - Added support for the DESTDIR variable during `make install'. 3142 This simplifies packaging of FreeType. 3143 3144 - Included modified copies of the ZLib sources in `src/gzip' in 3145 order to support gzip-compressed PCF fonts. We do not use the 3146 system-provided zlib for now, though this is a probable 3147 enhancement for future releases. 3148 3149 - The DocMaker tool used to generate the on-line API reference has 3150 been completely rewritten. It is now located in 3151 `src/tools/docmaker/docmaker.py'. Features: 3152 3153 - better cross-referenced output 3154 - more polished output 3155 - uses Python regular expressions (though it didn't speed the 3156 program) 3157 - much more modular structure, which allows for different 3158 `backends' in order to generate HTML, XML, or whatever 3159 format. 3160 3161 One can regenerate the API reference by calling: 3162 3163 python src/tools/docmaker/docmaker.py \ 3164 --prefix=ft2 \ 3165 --title=FreeType-2.1.3 \ 3166 --output=<outputdirectory> 3167 include/freetype/*.h \ 3168 include/freetype/config/*.h \ 3169 include/freetype/cache/*.h 3170 3171 - A new, experimental, support for incremental font loading (i.e., 3172 loading of fonts where the glyphs are not in the font file 3173 itself, but provided by an external component, like a Postscript 3174 interpreter) has been added by Graham Asher. This is still work 3175 in progress, however. 3176 3177 - A new, EXPERIMENTAL, path stroker has been added. It doesn't 3178 suffer from severe rounding errors and treat bezier arcs 3179 directly. Still work in progress (i.e. not part of the official 3180 API). See the file <freetype/ftstroker.h> for some of the 3181 details. 3182 3183 - The massive re-formatting of sources and internal re-design is 3184 still under-way. Many internal functions, constants, and types 3185 have been renamed. 3186 3187 3188 ====================================================================== 3189 3190 CHANGES BETWEEN 2.1.2 and 2.1.1 3191 3192 I. IMPORTANT BUG FIXES 3193 3194 - Many font drivers didn't select a Unicode charmap by default 3195 when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS 3196 options enabled), causing many applications to not be able to 3197 display text correctly with the 2.1.x releases. 3198 3199 - The PFR driver had a bug in its composite loading code that 3200 produces incorrectly placed accents with many fonts. 3201 3202 - The Type42 driver crashed sometimes due to a nasty bug. 3203 3204 - The Type 1 custom encoding charmap didn't handle the case where 3205 the first glyph index wasn't 0. 3206 3207 - A serious typo in the TrueType composite loader produced 3208 incorrectly placed glyphs in fonts like `Wingdings' and a few 3209 others. 3210 3211 3212 II. MISCELLANEOUS 3213 3214 - The Win32 Visual C++ project file has been updated to include 3215 the PFR driver as well. 3216 3217 - `freetype.m4' is now installed by default by `make install' on 3218 Unix systems. 3219 3220 - The function FT_Get_PS_Font_Info now works with CID and Type42 3221 fonts as well. 3222 3223 3224 ====================================================================== 3225 3226 CHANGES BETWEEN 2.1.1 and 2.1.0 3227 3228 I. IMPORTANT BUG FIXES 3229 3230 - The `version_info' returned by `freetype-config' in 2.1.0 3231 returned an invalid value. It now returns 9:1:3 (2.0.9 returned 3232 9:0:3). 3233 3234 - Version 2.1.0 couldn't be linked against applications on Win32 3235 and Amiga systems due to a new debug function that wasn't 3236 properly propagated to the system-specific directory in 3237 `builds'. 3238 3239 - Various MacOS and Mac OS X specific fixes. 3240 3241 - Fixed a bug in the TrueType charmap validation routines that 3242 made version 2.1.0 too restrictive -- many popular fonts have 3243 been rejected. 3244 3245 - There was still a very small difference between the monochrome 3246 glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the 3247 bytecode interpreter enabled. This was caused by an invalid 3248 flag setting in the TrueType glyph loader, making the rasterizer 3249 change its drop-out control mode. Now the results should 3250 _really_ be completely identical. 3251 3252 - The TrueType name table loader has been improved to support many 3253 popular though buggy Asian fonts. It now ignores empty name 3254 entries, invalid pointer offsets and a few other incorrect 3255 subtleties. Moreover, name strings are now loaded on demand, 3256 which reduces the memory load of many faces (e.g. the ARIAL.TTF 3257 font file contains a 10kByte name table with 70 names). 3258 3259 - Fixed a bug in the Postscript hinter that prevented family blues 3260 substitution to happen correctly. 3261 3262 3263 II. NEW FEATURES 3264 3265 - Three new font drivers in this release: 3266 3267 * A BDF font driver, contributed by Franco Zappa Nardelli, 3268 heavily modified by Werner Lemberg. It also supports 3269 anti-aliased bitmaps (using a slightly extended BDF format). 3270 3271 * A Type42 font driver, contributed by Roberto Alameda. It is 3272 still experimental but seems to work relatively well. 3273 3274 * A PFR font driver, contributed by David Turner himself. It 3275 doesn't support PFR hinting -- note that BitStream has at 3276 least two patents on this format! 3277 3278 3279 III. MISCELLANEOUS 3280 3281 - The cache sub-system has been optimized in important ways. 3282 Cache hits are now significantly faster. For example, using the 3283 CMap cache is about twice faster than calling FT_Get_Char_Index 3284 on most platforms. Similarly, using an SBit cache is about five 3285 times faster than loading the bitmaps from a bitmap file, and 3286 300 to 500 times faster than generating them from a scalable 3287 format. 3288 3289 Note that you should recompile your sources if you designed a 3290 custom cache class for the FT2 Cache subsystem, since the 3291 changes performed are source, but not binary, compatible. 3292 3293 3294 ====================================================================== 3295 3296 CHANGES BETWEEN 2.1.0 and 2.0.9 3297 3298 I. IMPORTANT BUG FIXES 3299 3300 - The TrueType bytecode interpreter has been fixed to produce 3301 _exactly_ the same output as FreeType 1.x. Previous differences 3302 were due to slightly distinct fixed-point computation routines 3303 used to perform dot products and vector length measurements. 3304 3305 It seems that native TrueType hinting is _extremely_ sensitive 3306 to rounding errors. The required vector computation routines 3307 have been optimized and placed within the `ttinterp.c' file. 3308 3309 - Fixed the parsing of accelerator tables in the PCF font driver. 3310 3311 - Fixed the Type1 glyph loader routine used to compute the font's 3312 maximum advance width. 3313 3314 3315 II. NEW FEATURES 3316 3317 - The `configure' script used on Unix systems has been modified to 3318 check that GNU Make is being used to build the library. 3319 Otherwise, it will display a message proposing to use the 3320 GNUMAKE environment variable to name it. 3321 3322 The Unix-specific file README.UNX has been modified accordingly. 3323 3324 3325 III. MISCELLANEOUS 3326 3327 - The FreeType License in `docs/FTL.TXT' has been updated to 3328 include a proposed preferred disclaimer. If you are using 3329 FreeType in your products, you are encouraged (but not mandated) 3330 to use the following text in your documentation: 3331 3332 """ 3333 Portions of this software are copyright 1996-2002 The 3334 FreeType Project (www.freetype.org). All rights reserved. 3335 """ 3336 3337 - The default size of the render pool has been reduced to 16kByte. 3338 This shouldn't result in any noticeable performance penalty, 3339 unless you are using the engine as-is to render very large and 3340 complex glyphs. 3341 3342 - The FreeType 2 redesign has begun. More information can be 3343 found at this URL: 3344 3345 https://www.freetype.org/freetype2/redesign.html 3346 3347 The following internal changes have been performed within the 3348 sources of this release: 3349 3350 - Many internal types have been renamed to increase 3351 consistency. The following should be true, except for 3352 public types: 3353 3354 * All structure types have a name ending in `Rec' (short 3355 for `record'). 3356 3357 * A pointer-to-structure type has the same name as the 3358 structure, _without_ the `Rec' suffix. 3359 3360 Example: 3361 3362 typedef struct FooRec_ 3363 { 3364 ... 3365 3366 } FooRec, *Foo; 3367 3368 - Many internal macros have been renamed to increase 3369 consistency. The following should be true: 3370 3371 * All macros have a name beginning with `FT_'. This 3372 required a few changes like 3373 3374 ALLOC => FT_ALLOC 3375 FREE => FT_FREE 3376 REALLOC => FT_REALLOC 3377 3378 * All macros are completely UPPERCASE. This required a 3379 few changes like: 3380 3381 READ_Short => FT_READ_SHORT 3382 NEXT_Short => FT_NEXT_SHORT 3383 GET_ULongLE => FT_GET_ULONG_LE 3384 MEM_Set => FT_MEM_SET 3385 MEM_Copy => FT_MEM_COPY 3386 etc. 3387 3388 * Whenever possible, all macro names follow the 3389 FT_<OBJECT>_<METHOD> pattern. For example 3390 3391 ACCESS_Frame => FT_FRAME_ENTER 3392 FORGET_Frame => FT_FRAME_EXIT 3393 EXTRACT_Frame => FT_FRAME_EXTRACT 3394 RELEASE_Frame => FT_FRAME_RELEASE 3395 3396 FILE_Pos => FT_STREAM_POS 3397 FILE_Seek => FT_STREAM_SEEK 3398 FILE_Read => FT_STREAM_READ 3399 FILE_ReadAt => FT_STREAM_READ_AT 3400 READ_Fields => FT_STREAM_READ_FIELDS 3401 3402 - Many internal functions have been renamed to follow the 3403 FT_<Object>_<Method> pattern. For example: 3404 3405 FT_Seek_Stream => FT_Stream_Seek 3406 FT_Read_Stream_At => FT_Stream_ReadAt 3407 FT_Done_Stream => FT_Stream_Close 3408 FT_New_Stream => FT_Stream_Open 3409 FT_New_Memory_Stream => FT_Stream_OpenMemory 3410 FT_Extract_Frame => FT_Stream_ExtractFrame 3411 3412 Note that method names do not contain `_'. 3413 3414 - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced 3415 with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a 3416 type as the fourth argument. Instead, the array element 3417 type size is computed automatically from the type of the 3418 target pointer used. 3419 3420 - A new object class, FT_CMap, has been introduced. These 3421 internal objects are used to model character maps. This 3422 eases the support of additional charmap types within the 3423 engine. 3424 3425 - A new configuration file named `ftstdlib.h' has been added 3426 to `include/freetype/config'. It is used to define aliases 3427 for _every_ routine of the ISO C library that the font 3428 engine uses. Each aliases has a `ft_' prefix 3429 (e.g. `ft_strlen' is an alias for `strlen'). 3430 3431 This is used to ease the porting of FreeType 2 to exotic 3432 runtime environments where the ISO C Library isn't available 3433 (e.g. XFree86 extension modules). 3434 3435 More details are available in the `ChangeLog' file. 3436 3437 3438 ====================================================================== 3439 3440 CHANGES BETWEEN 2.0.9 and 2.0.8 3441 3442 I. IMPORTANT BUG FIXES 3443 3444 - Certain fonts like `foxjump.ttf' contain broken name tables with 3445 invalid entries and wild offsets. This caused FreeType to crash 3446 when trying to load them. 3447 3448 The SFNT `name' table loader has been fixed to be able to 3449 support these strange fonts. 3450 3451 Moreover, the code in charge of processing this table has been 3452 changed to always favour Windows-formatted entries over other 3453 ones. Hence, a font that works on Windows but not on the Mac 3454 will load cleanly in FreeType and report accurate values for 3455 Family & PostScript names. 3456 3457 - The CID font driver has been fixed. It unfortunately returned a 3458 Postscript Font name with a leading slash, as in 3459 `/MunhwaGothic-Regular'. 3460 3461 - FreeType 2 should now compile fine on AIX 4.3.3 as a shared 3462 library. 3463 3464 - A bug in the Postscript hinter has been found and fixed, 3465 removing un-even stem widths at small pixel sizes (like 14-17). 3466 3467 This improves the quality of a certain number of Postscript 3468 fonts. 3469 3470 3471 II. NEW FEATURES 3472 3473 - A new function named `FT_Library_Version' has been added to 3474 return the current library's major, minor, and patch version 3475 numbers. This is important since the macros FREETYPE_MAJOR, 3476 FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the 3477 library is dynamically linked by a program. 3478 3479 - Two new APIs have been added: `FT_Get_First_Char' and 3480 `FT_Get_Next_Char'. 3481 3482 Together, these can be used to iterate efficiently over the 3483 currently selected charmap of a given face. Read the API 3484 reference for more details. 3485 3486 3487 III. MISCELLANEOUS 3488 3489 - The FreeType sources are under heavy internal re-factoring. As 3490 a consequence, we have created a branch named `STABLE' on the 3491 CVS to hold all future releases/fixes in the 2.0.x family. 3492 3493 The HEAD branch now contains the re-factored sources and 3494 shouldn't be used for testing or packaging new releases. In 3495 case you would like to access the 2.0.9 sources from our CVS 3496 repository, use the tag `VER-2-0-9'. 3497 3498 3499 ====================================================================== 3500 3501 CHANGES BETWEEN 2.0.8 and 2.0.7 3502 3503 I. IMPORTANT BUG FIXES 3504 3505 - There was a small but nasty bug in `freetype-config.in' which 3506 caused the `freetype-config' script to fail on Unix. 3507 3508 This didn't prevent the installation of the library or even its 3509 execution, but caused problems when trying to compile many Unix 3510 packages that depend on it. 3511 3512 - Some TrueType or OpenType fonts embedded in PDF documents do not 3513 have a 'cmap', 'post' and 'name' as is required by the 3514 specification. FreeType no longer refuses to load such fonts. 3515 3516 - Various fixes to the PCF font driver. 3517 3518 3519 ====================================================================== 3520 3521 CHANGES BETWEEN 2.0.7 and 2.0.6 3522 3523 I. IMPORTANT BUG FIXES 3524 3525 - Fixed two bugs in the Type 1 font driver. The first one 3526 resulted in a memory leak in subtle cases. The other one caused 3527 FreeType to crash when trying to load `.gsf' files (Ghostscript 3528 so-called Postscript fonts). 3529 3530 (This made _many_ KDE applications crash on certain systems. 3531 FreeType _is_ becoming a critical system component on Linux :-) 3532 3533 - Fixed a memory leak in the CFF font driver. 3534 3535 - Fixed a memory leak in the PCF font driver. 3536 3537 - Fixed the Visual C++ project file 3538 `builds/win32/visualc/freetype.dsp' since it didn't include the 3539 Postscript hinter component, causing errors at build time. 3540 3541 - Fixed a small rendering bug in the anti-aliased renderer that 3542 only occurred when trying to draw thin (less than 1 pixel) 3543 strokes. 3544 3545 - Fixed `builds/unix/freetype2.a4' which is used to generate a 3546 valid `freetype2.m4' for use with autoconf. 3547 3548 - Fixed the OpenVMS Makefiles. 3549 3550 3551 II. MISCELLANEOUS 3552 3553 - Added `configure' and `install' scripts to the top-level 3554 directory. A GNU-style installation is thus now easily possible 3555 with 3556 3557 ./configure <options> 3558 make 3559 make install 3560 3561 3562 ====================================================================== 3563 3564 CHANGES BETWEEN 2.0.6 and 2.0.5 3565 3566 I. IMPORTANT BUG FIXES 3567 3568 - It wasn't possible to load embedded bitmaps when the auto-hinter 3569 was used. This is now fixed. 3570 3571 - The TrueType font driver didn't load some composites properly 3572 (the sub-glyphs were slightly shifted, and this was only 3573 noticeable when using monochrome rendering). 3574 3575 - Various fixes to the auto-hinter. They merely improve the 3576 output of sans-serif fonts. Note that there are still problems 3577 with serifed fonts and composites (accented characters). 3578 3579 - All scalable font drivers erroneously returned un-fitted glyph 3580 advances when hinting was requested. This created problems for 3581 a number of layout applications. This is a very old bug that 3582 got undetected mainly because most test/demo program perform 3583 rounding explicitly or implicitly (through the cache). 3584 3585 - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in 3586 certain cases. 3587 3588 - `glnames.py' still contained a bug that made FreeType return 3589 invalid names for certain glyphs. 3590 3591 - The library crashed when loading certain Type 1 fonts like 3592 `sadn.pfb' (`Stalingrad Normal'), which appear to contain 3593 pathetic font info dictionaries. 3594 3595 - The TrueType glyph loader is now much more paranoid and checks 3596 everything when loading a given glyph image. This was necessary 3597 to avoid problems (crashes and/or memory overwrites) with broken 3598 fonts that came from a really buggy automatic font converter. 3599 3600 3601 II. IMPORTANT UPDATES AND NEW FEATURES 3602 3603 - Important updates to the Mac-specific parts of the library. 3604 3605 - The caching sub-system has been completely re-designed, and its 3606 API has evolved (the old one is still supported for backward 3607 compatibility). 3608 3609 The documentation for it is not yet completed, sorry. For now, 3610 you are encouraged to continue using the old API. However, the 3611 ftview demo program in the ft2demos package has already been 3612 updated to use the new caching functions. 3613 3614 - A new charmap cache is provided too. See `FTC_CMapCache'. This 3615 is useful to perform character code -> glyph index translations 3616 quickly, without the need for an opened FT_Face. 3617 3618 - A NEW POSTSCRIPT HINTER module has been added to support native 3619 hints in the following formats: PostScript Type 1, PostScript 3620 CID, and CFF/CEF. 3621 3622 Please test! Note that the auto-hinter produces better results 3623 for a number of badly-hinted fonts (mostly auto-generated ones) 3624 though. 3625 3626 - A memory debugger is now part of the standard FreeType sources. 3627 To enable it, define FT_DEBUG_MEMORY in 3628 <freetype/config/ftoption.h>, and recompile the library. 3629 3630 Additionally, define the _environment_ variable FT_DEBUG_MEMORY 3631 and run any program using FreeType. When the library is exited, 3632 a summary of memory footprints and possible leaks will be 3633 displayed. 3634 3635 This works transparently with _any_ program that uses FreeType. 3636 However, you will need a lot of memory to use this (allocated 3637 blocks are never released to the heap to detect double deletes 3638 easily). 3639 3640 3641 III. MISCELLANEOUS 3642 3643 - We are aware of subtle differences between the output of 3644 FreeType versions 1 and 2 when it comes to monochrome 3645 TrueType-hinted glyphs. These are most probably due to small 3646 differences in the monochrome rasterizers and will be worked out 3647 in an upcoming release. 3648 3649 - We have decided to fork the sources in a `stable' branch, and an 3650 `unstable' one, since FreeType is becoming a critical component 3651 of many Unix systems. 3652 3653 The next bug-fix releases of the library will be named 2.0.7, 3654 2.0.8, etc., while the `2.1' branch will contain a version of 3655 the sources where we will start major reworking of the library's 3656 internals, in order to produce FreeType 2.2.0 (or even 3.0) in a 3657 more distant future. 3658 3659 We also hope that this scheme will allow much more frequent 3660 releases than in the past. 3661 3662 3663 ====================================================================== 3664 3665 CHANGES BETWEEN 2.0.5 and 2.0.4 3666 3667 NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE 3668 WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1) 3669 3670 - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and 3671 `lslash' unavailable from Unicode charmaps of Postscript fonts. 3672 This prevented the correct display of Polish text, for example. 3673 3674 - The kerning table of Type 1 fonts was loaded by FreeType, when its 3675 AFM file was attached to its face, but the 3676 FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly, 3677 preventing FT_Get_Kerning to return meaningful values. 3678 3679 - Improved SFNT (TrueType & OpenType) charmap support. Slightly 3680 better performance, as well as support for the new formats defined 3681 by the OpenType 1.3 specification (8, 10, and 12) 3682 3683 - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid 3684 computations in certain rare cases, producing ugly artefacts. 3685 3686 - The size of the EM square is computed with a more accurate 3687 algorithm for Postscript fonts. The old one caused slight errors 3688 with embedded fonts found in PDF documents. 3689 3690 - Fixed a bug in the cache manager that prevented normal LRU 3691 behaviour within the cache manager, causing unnecessary reloads 3692 (for FT_Face and FT_Size objects only). 3693 3694 - Added a new function named `FT_Get_Name_Index' to retrieve the 3695 glyph index of a given glyph name, when found in a face. 3696 3697 - Added a new function named `FT_Get_Postscript_Name' to retrieve 3698 the `unique' Postscript font name of a given face. 3699 3700 - Added a new public header size named FT_SIZES_H (or 3701 <freetype/ftsizes.h>) providing new FT_Size-management functions: 3702 FT_New_Size, FT_Activate_Size, FT_Done_Size. 3703 3704 - Fixed a reallocation bug that generated a dangling pointer (and 3705 possibly memory leaks) with Postscript fonts (in 3706 src/psaux/psobjs.c). 3707 3708 - Many fixes for 16-bit correctness. 3709 3710 - Removed many pedantic compiler warnings from the sources. 3711 3712 - Added an Amiga build directory in `builds/amiga'. 3713 3714 3715 ====================================================================== 3716 3717 CHANGES BETWEEN 2.0.4 and 2.0.3 3718 3719 - Fixed a rather annoying bug that was introduced in 2.0.3. Namely, 3720 the font transformation set through FT_Set_Transform was applied 3721 twice to auto-hinted glyphs, resulting in incorrectly rotated text 3722 output. 3723 3724 - Fixed _many_ compiler warnings. FT2 should now compile cleanly 3725 with Visual C++'s most pedantic warning level (/W4). It already 3726 compiled fine with GCC and a few other compilers. 3727 3728 - Fixed a bug that prevented the linear advance width of composite 3729 TrueType glyphs to be correctly returned. 3730 3731 - Fixed the Visual C++ project files located in 3732 `builds/win32/visualc' (previous versions used older names of the 3733 library). 3734 3735 - Many 32-bit constants have an `L' appended to their value, in 3736 order to improve the 16-bitness of the code. Someone is actually 3737 trying to use FT2 on an Atari ST machine! 3738 3739 - Updated the `builds/detect.mk' file in order to automatically 3740 build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of 3741 `/sbin/init' and wasn't previously detected as a Unix platform by 3742 the FreeType build system. 3743 3744 - Updated the Unix-specific portions of the build system (new 3745 libtool version, etc.). 3746 3747 - The SFNT kerning loader now ensures that the table is sorted 3748 (since some problem fonts do not meet this requirement). 3749 3750 3751 ======================================================================= 3752 3753 CHANGES BETWEEN 2.0.3 and 2.0.2 3754 3755 I. CHANGES TO THE MODULES / FONT DRIVERS 3756 3757 - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix 3758 several annoying artefacts, mainly: 3759 3760 - Blue zone alignment of horizontal stems wasn't performed 3761 correctly, resulting in artefacts like the `d' being placed 3762 one pixel below the `b' in some fonts like Time New Roman. 3763 3764 - Overshoot thresholding wasn't performed correctly, creating 3765 unpleasant artefacts at large character pixel sizes. 3766 3767 - Composite glyph loading has been simplified. This gets rid 3768 of various artefacts where the components of a composite 3769 glyphs were not correctly spaced. 3770 3771 These are the last changes to the current auto-hinting module. 3772 A new hinting sub-system is currently in the work in order to 3773 support native hints in Type 1 / CFF / OpenType fonts, as well 3774 as globally improve rendering. 3775 3776 - The PCF driver has been fixed. It reported invalid glyph 3777 dimensions for the fonts available on Solaris. 3778 3779 - The Type 1, CID and CFF drivers have been modified to fix the 3780 computation of the EM size. 3781 3782 - The Type 1 driver has been fixed to avoid a dangerous bug that 3783 crashed the library with non-conforming fonts (i.e. ones that do 3784 not place the .notdef glyph at position 0). 3785 3786 - The TrueType driver had a rather subtle bug (dangling pointer 3787 when loading composite glyphs) that could crash the library in 3788 rare occasions! 3789 3790 3791 II. HIGH-LEVEL API CHANGES 3792 3793 - The error code enumeration values have been changed. An error 3794 value is decomposed in a generic error code, and a module 3795 number. see <freetype/fterrors.h> for details. 3796 3797 - A new public header file has been introduced, named 3798 FT_TRIGONOMETRY_H (include/freetype/fttrigon.h), providing 3799 trigonometric functions to compute sines, cosines, arctangents, 3800 etc. with 16.16 fixed precision. The implementation is based on 3801 the CORDIC algorithm and is very fast while being sufficiently 3802 accurate. 3803 3804 3805 III. INTERNALS 3806 3807 - Added BeOS-specific files in the old build sub-system. Note 3808 that no changes were required to compile the library with Jam. 3809 3810 - The configuration is now capable of automatically detecting 3811 64-bit integers on a set of predefined compilers (GCC, Visual 3812 C++, Borland C++) and will use them by default. This provides a 3813 small performance boost. 3814 3815 - A small memory leak that happened when opening 0-sized files 3816 (duh!) have been fixed. 3817 3818 - Fixed bezier stack depth bug in the routines provided by the 3819 FT_BBOX_H header file. Also fixed similar bugs in the 3820 rasterizers. 3821 3822 - The outline bounding box code has been rewritten to use direct 3823 computations, instead of bezier sub-division, to compute the 3824 exact bounding box of glyphs. This is slightly slower but more 3825 accurate. 3826 3827 - The build system has been improved and fixed, mainly to support 3828 `make' on Windows 2000 correctly, avoid problems with `make 3829 distclean' on non Unix systems, etc. 3830 3831 - Hexadecimal constants have been suffixed with `U' to avoid 3832 problems with certain compilers on 64-bit platforms. 3833 3834 - A new directory named `src/tools' has been created. It contains 3835 Python scripts and simple unit test programs used to develop the 3836 library. 3837 3838 - The DocMaker tool has been moved from `docs' to `src/tools' and 3839 has been updated with the following: 3840 3841 - Now accepts the `--title=XXXX' or `-t XXXX' option from the 3842 command line to set the project's name in the generated API 3843 reference. 3844 3845 - Now accepts the `--output=DIR' or `-o DIR' option from the 3846 command line to set the output directory for all generated 3847 HTML files. 3848 3849 - Now accepts the `--prefix=XXXX' or `-p XXX' option from the 3850 command line to set the file prefix to use for all 3851 generated HTML files. 3852 3853 - Now generates the current time/data on each generated page 3854 in order to distinguish between versions. 3855 3856 DocMaker can be used with other projects now, not only FT2 3857 (e.g. MLib, FTLayout, etc.). 3858 3859 3860 ====================================================================== 3861 3862 CHANGES BETWEEN 2.0.2 and 2.0.1 3863 3864 I. CHANGES TO THE MODULES / FONT DRIVERS 3865 3866 - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to 3867 avoid legal problems with the Apple patents. It seems that we 3868 mistakenly turned this option on in previous releases of the 3869 build. 3870 3871 Note that if you want to use the bytecode interpreter in order 3872 to get high-quality TrueType rendering, you will need to toggle 3873 by hand the definition of the 3874 TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file 3875 `include/freetype/config/ftoption.h'. 3876 3877 - The CFF driver has been improved by Tom Kacvinsky and Sander van 3878 der Wal: 3879 3880 * Support for `seac' emulation. 3881 * Support for `dotsection'. 3882 * Support for retrieving glyph names through 3883 `FT_Get_Glyph_Name'. 3884 3885 The first two items are necessary to correctly a large number of 3886 Type 1 fonts converted to the CFF formats by Adobe Acrobat. 3887 3888 - The Type 1 driver was also improved by Tom & others: 3889 3890 * Better EM size computation. 3891 * Better support for synthetic (transformed) fonts. 3892 * The Type 1 driver returns the charstrings corresponding to 3893 each glyph in the `glyph->control_data' field after a call to 3894 `FT_Load_Glyph' (thanks Ha Shao). 3895 3896 - Various other bugfixes, including the following: 3897 3898 * Fixed a nasty memory leak in the Type 1 driver. 3899 * The autohinter and the pcf driver used static writable data 3900 when they shouldn't. 3901 * Many casts were added to make the code more 64-bits safe. It 3902 also now compiles on Windows XP 64-bits without warnings. 3903 * Some incorrect writable statics were removed in the `autohint' 3904 and `pcf' drivers. FreeType 2 now compiles on Epoc again. 3905 3906 3907 II. CHANGES TO THE HIGH-LEVEL API 3908 3909 - The library header files inclusion scheme has been changed. The 3910 old scheme looked like: 3911 3912 #include <freetype/freetype.h> 3913 #include <freetype/ftglyph.h> 3914 #include <freetype/ftcache.h> 3915 #include <freetype/cache/ftimage.h> 3916 3917 Now you should use: 3918 3919 #include <ft2build.h> 3920 #include FT_FREETYPE_H 3921 #include FT_GLYPH_H 3922 #include FT_CACHE_H 3923 #include FT_CACHE_IMAGE_H 3924 3925 NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS 3926 RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE 3927 TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1). 3928 3929 The file <ft2build.h> is used to define the header filename 3930 macros. The complete and commented list of macros is available 3931 in the API reference under the section name `Header File Macros' 3932 in Chapter I. 3933 3934 For more information, see section I of the following document: 3935 3936 https://www.freetype.org/freetype2/docs/tutorial/step1.html 3937 3938 - Many, many comments have been added to the public source file in 3939 order to automatically generate the API Reference through the 3940 `docmaker.py' Python script. 3941 3942 The latter has been updated to support the grouping of sections 3943 in chapters and better index sort. See: 3944 3945 https://www.freetype.org/freetype2/docs/reference/ft2-toc.html 3946 3947 3948 III. CHANGES TO THE BUILD PROCESS 3949 3950 - If you are not building FreeType 2 with its own build system 3951 (but with your own Makefiles or project files), you will need to 3952 be aware that the build process has changed a little bit. 3953 3954 You don't need to put the `src' directory in the include path 3955 when compiling any FT2 component. Instead, simply put the 3956 component's directory in the current include path. 3957 3958 So, if you were doing something like: 3959 3960 cc -c -Iinclude -Isrc src/base/ftbase.c 3961 3962 change the line to: 3963 3964 cc -c -Iinclude -Isrc/base src/base/ftbase.c 3965 3966 If you were doing something like: 3967 3968 cd src/base 3969 cc -c -I../../include -I.. ftbase.c 3970 3971 change it to: 3972 3973 cd src/base 3974 cc -c -I../../include ftbase.c 3975 3976 3977 ====================================================================== 3978 3979 CHANGES BETWEEN 2.0.1 and 2.0 3980 3981 2.0.1 introduces a few changes: 3982 3983 - Fixed many bugs related to the support of CFF / OpenType fonts. 3984 These formats are now much better supported though there is 3985 still work planned to deal with charset tables and PDF-embedded 3986 CFF files that use the old `seac' command. 3987 3988 - The library could not be compiled in debug mode with a very 3989 small number of C compilers whose pre-processors didn't 3990 implement the `##' directive correctly (i.e. per se the ANSI C 3991 specification!) An elegant fix was found. 3992 3993 - Added support for the free Borland command-line C++ Builder 3994 compiler. Use `make setup bcc32'. Also fixed a few source 3995 lines that generated new warnings with BCC32. 3996 3997 - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of 3998 a conic Bezier arc. 3999 4000 - Updated the INSTALL file to add IDE compilation. 4001 4002 - Other minor bug fixes, from invalid Type 1 style flags to 4003 correct support of synthetic (obliqued) fonts in the 4004 auto-hinter, better support for embedded bitmaps in a SFNT font. 4005 4006 - Fixed some problems with `freetype-config'. 4007 4008 Finally, the `standard' scheme for including FreeType headers is now 4009 gradually changing, but this will be explained in a later release 4010 (probably 2.0.2). 4011 4012 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi 4013 for their contributions! 4014 4015 4016 ====================================================================== 4017 4018 CHANGES BETWEEN beta8 and 2.0 4019 4020 - Changed the default installation path for public headers from 4021 `include/freetype' to `include/freetype2'. 4022 4023 Also added a new `freetype-config' that is automatically generated 4024 and installed on Unix and Cygwin systems. The script itself is 4025 used to retrieve the current install path, C compilation flags as 4026 well as linker flags. 4027 4028 - Fixed several small bugs: 4029 4030 * Incorrect max advance width for fixed-pitch Type 1 fonts. 4031 * Incorrect glyph names for certain TrueType fonts. 4032 * The glyph advance was not copied when FT_Glyph_To_Bitmap was 4033 called. 4034 * The linearHoriAdvance and linearVertAdvance fields were not 4035 correctly returned for glyphs processed by the auto-hinter. 4036 * `type1z' renamed back to `type1'; the old `type1' module has 4037 been removed. 4038 4039 - Revamped the build system to make it a lot more generic. This 4040 will allow us to re-use nearly un-modified in lots of other 4041 projects (including FreeType Layout). 4042 4043 - Changed `cid' to use `psaux' too. 4044 4045 - Added the cache sub-system. See <freetype/ftcache.h> as well as 4046 the sources in `src/cache'. Note that it compiles but is still 4047 untested for now. 4048 4049 - Updated `docs/docmaker.py', a draft API reference is available at 4050 http://www.freetype.org/ft2api.html. 4051 4052 - Changed `type1' to use `psaux'. 4053 4054 - Created a new module named `psaux' to hold the Type 1 & Type 2 4055 parsing routines. It should be used by `type1', `cid', and `cff' 4056 in the future. 4057 4058 - Fixed an important bug in `FT_Glyph_Get_CBox'. 4059 4060 - Fixed some compiler warnings that happened since the TrueType 4061 bytecode decoder was deactivated by default. 4062 4063 - Fixed two memory leaks: 4064 4065 * The memory manager (16 bytes) isn't released in 4066 FT_Done_FreeType! 4067 * Using custom input streams, the copy of the original stream was 4068 never released. 4069 4070 - Fixed the auto-hinter by performing automatic computation of the 4071 `filling direction' of each glyph. This is done through a simple 4072 and fast approximation, and seems to work (problems spotted by 4073 Werner though). The Arphic fonts are a lot nicer though there are 4074 still a lot of things to do to handle Asian fonts correctly. 4075 4076 4077 ====================================================================== 4078 4079 BETA-8 (RELEASE CANDIDATE) CHANGES 4080 4081 - Deactivated the TrueType bytecode interpreter by default. 4082 4083 - Deactivated the `src/type1' font driver. Now `src/type1z' is used 4084 by default. 4085 4086 - Updates to the build system. We now compile the library correctly 4087 under Unix system through `configure' which is automatically 4088 called on the first `make' invocation. 4089 4090 - Added the auto-hinting module! Fixing some bugs here and there. 4091 4092 - Found some bugs in the composite loader (seac) of the Type1-based 4093 font drivers. 4094 4095 - Renamed the directory `freetype2/config' to `freetype2/builds' and 4096 updated all relevant files. 4097 4098 - Found a memory leak in the `type1' driver. 4099 4100 - Incorporated Tom's patches to support flex operators correctly in 4101 OpenType/CFF fonts. Now all I need is to support pure CFF and CEF 4102 fonts to be done with this driver :-) 4103 4104 - Added the Windows FNT/FON driver in `src/winfonts'. For now, it 4105 always `simulates' a Unicode charmap, so it shouldn't be 4106 considered completed right now. 4107 4108 It is there to be more a proof of concept than anything else 4109 anyway. The driver is a single C source file, that compiles to 3 4110 Kb of code. 4111 4112 I'm still working on the PCF/BDF drivers, but I'm too lazy to 4113 finish them now. 4114 4115 - CHANGES TO THE HIGH-LEVEL API 4116 4117 * FT_Get_Kerning has a new parameter that allows you to select the 4118 coordinates of the kerning vector (font units, scaled, scaled + 4119 grid-fitted). 4120 * The outline functions are now in <freetype/ftoutln.h> and not 4121 part of <freetype/freetype.h> anymore. 4122 * <freetype/ftmodule.h> now contains declarations for 4123 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules. 4124 * The so-called convenience functions have moved from `ftoutln.c' 4125 to `ftglyph.c', and are thus available with this optional 4126 component of the library. They are declared in 4127 <freetype/ftglyph.h> now. 4128 * Anti-aliased rendering is now the default for FT_Render_Glyph 4129 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal). 4130 To generate a monochrome bitmap, use ft_render_mode_mono, or the 4131 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char. 4132 FT_LOAD_ANTI_ALIAS is still defined, but values to 0. 4133 * <freetype/freetype.h> now include <freetype/config/ftconfig.h>, 4134 solving a few headaches :-) 4135 * The type FT_GlyphSlotRec has now a `library' field. 4136 4137 - CHANGES TO THE `ftglyph.h' API 4138 4139 This API has been severely modified in order to make it simpler, 4140 clearer, and more efficient. It certainly now looks like a real 4141 `glyph factory' object, and allows client applications to manage 4142 (i.e. transform, bbox and render) glyph images without ever 4143 knowing their original format. 4144 4145 - Added support for CID-keyed fonts to the CFF driver. Maybe 4146 support for pure CFF + CEF fonts should come in? 4147 4148 - Cleaned up source code in order to avoid two functions with the 4149 same name. Also changed the names of the files in `type1z' from 4150 `t1XXXX' to `z1XXXX' in order to avoid any conflicts. 4151 4152 `make multi' now works well :-) 4153 4154 Also removed the use of `cidafm' for now, even if the source files 4155 are still there. This functionality will certainly go into a 4156 specific module. 4157 4158 - ADDED SUPPORT FOR THE AUTO-HINTER 4159 4160 It works :-) I have a demo program which simply is a copy of 4161 `ftview' that does a `FT_Add_Module(library, 4162 &autohinter_module_class)' after library initialization, and Type 4163 1 & OpenType/CFF fonts are now hinted. 4164 4165 CID fonts are not hinted, as they include no charmap and the 4166 auto-hinter doesn't include `generic' global metrics computations 4167 yet. 4168 4169 Now, I need to release this thing to the FreeType 2 source. 4170 4171 - CHANGES TO THE RENDERER MODULES 4172 4173 The monochrome and smooth renderers are now in two distinct 4174 directories, namely `src/raster1' and `src/smooth'. Note that the 4175 old `src/renderer' is now gone. 4176 4177 I ditched the 5-gray-levels renderers. Basically, it involved a 4178 simple #define toggle in 'src/raster1/ftraster.c'. 4179 4180 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now 4181 select the best renderer available, depending on render mode. If 4182 the current renderer for a given glyph image format isn't capable 4183 of supporting the render mode, another one will be found in the 4184 library's list. This means that client applications do not need 4185 to switch or set the renderers themselves (as in the latest 4186 change), they'll get what they want automatically. At last. 4187 4188 Changed the demo programs accordingly. 4189 4190 - MAJOR INTERNAL REDESIGN: 4191 4192 A lot of internal modifications have been performed lately on the 4193 source in order to provide the following enhancements: 4194 4195 * More generic module support: 4196 4197 The FT_Module type is now defined to represent a handle to a 4198 given module. The file <freetype/ftmodule.h> contains the 4199 FT_Module_Class definition, as well as the module-loading public 4200 API. 4201 4202 The FT_Driver type is still defined, and still represents a 4203 pointer to a font driver. Note that FT_Add_Driver is replaced 4204 by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc. 4205 4206 * Support for generic glyph image types: 4207 4208 The FT_Renderer type is a pointer to a module used to perform 4209 various operations on glyph image. 4210 4211 Each renderer is capable of handling images in a single format 4212 (e.g. ft_glyph_format_outline). Its functions are used to: 4213 4214 - transform an glyph image 4215 - render a glyph image into a bitmap 4216 - return the control box (dimensions) of a given glyph image 4217 4218 The scan converters `ftraster.c' and `ftgrays.c' have been moved 4219 to the new directory `src/renderer', and are used to provide two 4220 default renderer modules. 4221 4222 One corresponds to the `standard' scan-converter, the other to 4223 the `smooth' one. 4224 4225 he current renderer can be set through the new function 4226 FT_Set_Renderer. 4227 4228 The old raster-related function FT_Set_Raster, FT_Get_Raster and 4229 FT_Set_Raster_Mode have now disappeared, in favor of the new: 4230 4231 FT_Get_Renderer 4232 FT_Set_Renderer 4233 4234 See the file <freetype/ftrender.h> for more details. 4235 4236 These changes were necessary to properly support different 4237 scalable formats in the future, like bi-color glyphs, etc. 4238 4239 * Glyph loader object: 4240 4241 A new internal object, called a 'glyph loader' has been 4242 introduced in the base layer. It is used by all scalable format 4243 font drivers to load glyphs and composites. 4244 4245 This object has been created to reduce the code size of each 4246 driver, as each one of them basically re-implemented its 4247 functionality. 4248 4249 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for 4250 more information. 4251 4252 * FT_GlyphSlot has new fields: 4253 4254 In order to support extended features (see below), the 4255 FT_GlyphSlot structure has a few new fields: 4256 4257 linearHoriAdvance: 4258 4259 This field gives the linearly scaled (i.e. scaled but 4260 unhinted) advance width for the glyph, expressed as a 16.16 4261 fixed pixel value. This is useful to perform WYSIWYG text. 4262 4263 linearVertAdvance: 4264 This field gives the linearly scaled advance height for the 4265 glyph (relevant in vertical glyph layouts only). This is 4266 useful to perform WYSIWYG text. 4267 4268 Note that the two above field replace the removed `metrics2' 4269 field in the glyph slot. 4270 4271 advance: 4272 This field is a vector that gives the transformed advance for 4273 the glyph. By default, it corresponds to the advance width, 4274 unless FT_LOAD_VERTICAL_LAYOUT was specified when calling 4275 FT_Load_Glyph or FT_Load_Char. 4276 4277 bitmap_left: 4278 This field gives the distance in integer pixels from the 4279 current pen position to the left-most pixel of a glyph image 4280 IF IT IS A BITMAP. It is only valid when the `format' field 4281 is set to `ft_glyph_format_bitmap', for example, after calling 4282 the new function FT_Render_Glyph. 4283 4284 bitmap_top: 4285 This field gives the distance in integer pixels from the 4286 current pen position (located on the baseline) to the top-most 4287 pixel of the glyph image IF IT IS A BITMAP. Positive values 4288 correspond to upwards Y. 4289 4290 loader: 4291 This is a new private field for the glyph slot. Client 4292 applications should not touch it. 4293 4294 4295 * Support for transforms and direct rendering in FT_Load_Glyph: 4296 4297 Most of the functionality found in <freetype/ftglyph.h> has been 4298 moved to the core library. Hence, the following: 4299 4300 - A transform can be specified for a face through 4301 FT_Set_Transform. this transform is applied by FT_Load_Glyph 4302 to scalable glyph images (i.e. NOT TO BITMAPS) before the 4303 function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM 4304 was set in the load flags. 4305 4306 - Once a glyph image has been loaded, it can be directly 4307 converted to a bitmap by using the new FT_Render_Glyph 4308 function. Note that this function takes the glyph image from 4309 the glyph slot, and converts it to a bitmap whose properties 4310 are returned in `face.glyph.bitmap', `face.glyph.bitmap_left' 4311 and `face.glyph.bitmap_top'. The original native image might 4312 be lost after the conversion. 4313 4314 - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph 4315 and FT_Load_Char functions will call FT_Render_Glyph 4316 automatically when needed. 4317 4318 - Reformatted all modules source code in order to get rid of the 4319 basic data types redefinitions (i.e. `TT_Int' instead of `FT_Int', 4320 `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific 4321 prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for 4322 relevant structures. 4323 4324 4325 ====================================================================== 4326 4327 OLD CHANGES FOR BETA 7 4328 4329 - bug-fixed the OpenType/CFF parser. It now loads and displays my 4330 two fonts nicely, but I'm pretty certain that more testing is 4331 needed :-) 4332 4333 - fixed the crummy Type 1 hinter, it now handles accented characters 4334 correctly (well, the accent is not always well placed, but that's 4335 another problem..) 4336 4337 - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well 4338 for only 13 Kb of code ;-) Doesn't read AFM files though, nor the 4339 really useful CMAP files.. 4340 4341 - fixed two bugs in the smooth renderer (src/base/ftgrays.c). 4342 Thanks to Boris Letocha for spotting them and providing a fix. 4343 4344 - fixed potential `divide by zero' bugs in ftcalc.c. 4345 4346 - added source code for the OpenType/CFF driver (still incomplete 4347 though..) 4348 4349 - modified the SFNT driver slightly to perform more robust header 4350 checks in TT_Load_SFNT_Header. This prevents certain font files 4351 (e.g. some Type 1 Multiple Masters) from being incorrectly 4352 `recognized' as TrueType font files.. 4353 4354 - moved a lot of stuff from the TrueType driver to the SFNT module, 4355 this allows greater code re-use between font drivers 4356 (e.g. TrueType, OpenType, Compact-TrueType, etc..) 4357 4358 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order 4359 to minimally speed it up.. 4360 4361 - added support for Multiple Master fonts in `type1z'. There is 4362 also a new file named <freetype/ftmm.h> which defines functions to 4363 manage them from client applications. 4364 4365 The new file `src/base/ftmm.c' is also optional to the engine.. 4366 4367 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) + 4368 small bug fixes in FT_Load_Glyph, the `type1' driver, etc.. 4369 4370 - a minor fix to the Type 1 driver to let them apply the font matrix 4371 correctly (used for many oblique fonts..) 4372 4373 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls 4374 to use %p instead of %lx). Thanks to Karl Robillard. 4375 4376 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) + 4377 added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be 4378 cropped when loaded from a file (maybe I should move the bitmap 4379 cropper to the base layer ??). 4380 4381 - changed the default number of gray levels of the smooth renderer 4382 to 256 (instead of the previous 128). Of course, the human eye 4383 can't see any difference ;-) 4384 4385 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number 4386 of subglyphs in a TrueType font now.. 4387 4388 4389 ====================================================================== 4390 4391 OLD CHANGES 16 May 2000 4392 4393 - tagged `BETA-6' in the CVS tree. This one is a serious release 4394 candidate even though it doesn't incorporate the auto-hinter yet.. 4395 4396 - various obsolete files were removed, and copyright header updated 4397 4398 - finally updated the standard raster to fix the monochrome 4399 rendering bug + re-enable support for 5-gray levels anti-aliasing 4400 (suck, suck..) 4401 4402 - created new header files, and modified sources accordingly: 4403 4404 <freetype/fttypes.h> 4405 - simple FreeType types, without the API 4406 <freetype/internal/ftmemory.h> 4407 - definition of memory-management macros 4408 4409 - added the `DSIG' (OpenType Digital Signature) tag to 4410 <freetype/tttags.h> 4411 4412 - light update/cleaning of the build system + changes to the sources 4413 in order to get rid of _all_ compiler warnings with three 4414 compilers, i.e: 4415 4416 gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and 4417 LCC 4418 4419 IMPORTANT NOTE FOR WIN32-LCC USERS: 4420 | 4421 | It seems the C pre-processor that comes with LCC is broken, it 4422 | doesn't recognize the ANSI standard directives # and ## 4423 | correctly when one of the argument is a macro. Also, 4424 | something like: 4425 | 4426 | #define F(x) print##x 4427 | 4428 | F(("hello")) 4429 | 4430 | will get incorrectly translated to: 4431 | 4432 | print "hello") 4433 | 4434 | by its pre-processor. For this reason, you simply cannot build 4435 | FreeType 2 in debug mode with this compiler.. 4436 4437 - yet another massive grunt work. I've changed the definition of 4438 the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These 4439 now take an argument, which is the function's return value type. 4440 4441 This is necessary to compile FreeType as a DLL on Windows and 4442 OS/2. Depending on the compiler used, a compiler-specific keyword 4443 like __export or __system must be placed before (VisualC++) or 4444 after (BorlandC++) the type.. 4445 4446 Of course, this needed a lot of changes throughout the source code 4447 to make it compile again... All cleaned up now, apparently.. 4448 4449 Note also that there is a new EXPORT_VAR macro defined to allow 4450 the _declaration_ of an exportable public (constant) 4451 variable. This is the case of the raster interfaces (see 4452 ftraster.h and ftgrays.h), as well as each module's interface (see 4453 sfdriver.h, psdriver.h, etc..) 4454 4455 - new feature: it is now possible to pass extra parameters to font 4456 drivers when creating a new face object. For now, 4457 this capability is unused. It could however prove to 4458 be useful in a near future.. 4459 4460 the FT_Open_Args structure was changes, as well as the internal 4461 driver interface (the specific `init_face' module function has 4462 now a different signature). 4463 4464 - updated the tutorial (not finished though). 4465 4466 - updated the top-level BUILD document 4467 4468 - fixed a potential memory leak that could occur when loading 4469 embedded bitmaps. 4470 4471 - added the declaration of FT_New_Memory_Face in 4472 <freetype/freetype.h>, as it was missing from the public header 4473 (the implementation was already in `ftobjs.c'). 4474 4475 - the file <freetype/fterrors.h> has been seriously updated in order 4476 to allow the automatic generation of error message tables. See 4477 the comments within it for more information. 4478 4479 - major directory hierarchy re-organisation. This was done for two 4480 things: 4481 4482 * first, to ease the `manual' compilation of the library by 4483 requiring at lot less include paths :-) 4484 4485 * second, to allow external programs to effectively access 4486 internal data fields. For example, this can be extremely 4487 useful if someone wants to write a font producer or a font 4488 manager on top of FreeType. 4489 4490 Basically, you should now use the 'freetype/' prefix for header 4491 inclusion, as in: 4492 4493 #include <freetype/freetype.h> 4494 #include <freetype/ftglyph.h> 4495 4496 Some new include sub-directories are available: 4497 4498 a. the `freetype/config' directory, contains two files used to 4499 configure the build of the library. Client applications 4500 should not need to look at these normally, but they can if 4501 they want. 4502 4503 #include <freetype/config/ftoption.h> 4504 #include <freetype/config/ftconfig.h> 4505 4506 b. the `freetype/internal' directory, contains header files that 4507 describes library internals. These are the header files that 4508 were previously found in the `src/base' and `src/shared' 4509 directories. 4510 4511 4512 As usual, the build system and the demos have been updated to 4513 reflect the change.. 4514 4515 Here's a layout of the new directory hierarchy: 4516 4517 TOP_DIR 4518 include/ 4519 freetype/ 4520 freetype.h 4521 ... 4522 config/ 4523 ftoption.h 4524 ftconfig.h 4525 ftmodule.h 4526 4527 internal/ 4528 ftobjs.h 4529 ftstream.h 4530 ftcalc.h 4531 ... 4532 4533 src/ 4534 base/ 4535 ... 4536 4537 sfnt/ 4538 psnames/ 4539 truetype/ 4540 type1/ 4541 type1z/ 4542 4543 4544 Compiling a module is now much easier, for example, the following 4545 should work when in the TOP_DIR directory on an ANSI build: 4546 4547 gcc -c -I./include -I./src/base src/base/ftbase.c 4548 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c 4549 etc.. 4550 4551 (of course, using -Iconfig/<system> if you provide system-specific 4552 configuration files). 4553 4554 - updated the structure of FT_Outline_Funcs in order to allow direct 4555 coordinate scaling within the outline decomposition routine (this 4556 is important for virtual `on' points with TrueType outlines) + 4557 updates to the rasters to support this.. 4558 4559 - updated the OS/2 table loading code in `src/sfnt/ttload.c' in 4560 order to support version 2 of the table (see OpenType 1.2 spec) 4561 4562 - created `include/tttables.h' and `include/t1tables.h' to allow 4563 client applications to access some of the SFNT and T1 tables of a 4564 face with a procedural interface (see `FT_Get_Sfnt_Table') + 4565 updates to internal source files to reflect the change.. 4566 4567 - some cleanups in the source code to get rid of warnings when 4568 compiling with the `-Wall -W -ansi -pedantic' options in gcc. 4569 4570 - debugged and moved the smooth renderer to `src/base/ftgrays.c' and 4571 its header to `include/ftgrays.h' 4572 4573 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites 4574 with up to 80 sub-glyphs !! Thanks to Werner 4575 4576 4577 ====================================================================== 4578 4579 OLD CHANGES - 14-apr-2000 4580 4581 - fixed a bug in the TrueType glyph loader that prevented the 4582 correct loading of some CJK glyphs in mingli.ttf 4583 4584 - improved the standard Type 1 hinter in `src/type1' 4585 4586 - fixed two bugs in the experimental Type 1 driver in `src/type1z' 4587 to handle the new XFree86 4.0 fonts (and a few other ones..) 4588 4589 - the smooth renderer is now complete and supports sub-banding to 4590 render large glyphs at high speed. However, it is still located 4591 in `demos/src/ftgrays.c' and should move to the library itself in 4592 the next beta. NOTE: The smooth renderer doesn't compile in 4593 stand-alone mode anymore, but this should be fixed RSN.. 4594 4595 - introduced convenience functions to more easily deal with glyph 4596 images, see `include/ftglyph.h' for more details, as well as the 4597 new demo program named `demos/src/ftstring.c' that demonstrates 4598 its use 4599 4600 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1 4601 drivers (this is required by the auto-hinter to improve its 4602 results). 4603 4604 - changed the raster interface, in order to allow client 4605 applications to provide their own span-drawing callbacks. 4606 However, only the smooth renderer supports this. See 4607 `FT_Raster_Params' in the file `include/ftimage.h'. 4608 4609 - fixed a small bug in FT_MulFix that caused incorrect transform 4610 computation! 4611 4612 - Note: The tutorial is out-of-date. 4613 4614 4615 ====================================================================== 4616 4617 OLD CHANGES - 12-mar-2000 4618 4619 - changed the layout of configuration files : now, all ANSI 4620 configuration files are located in 4621 `freetype2/config'. System-specific over-rides can be placed in 4622 `freetype2/config/<system>'. 4623 4624 - moved all configuration macros to `config/ftoption.h' 4625 4626 - improvements in the Type 1 driver with AFM support 4627 4628 - changed the fields in the FT_Outline structure : the old `flags' 4629 array is re-named `tags', while all ancient flags are encoded into 4630 a single unsigned int named `flags'. 4631 4632 - introduced new flags in FT_Outline.flags (see 4633 ft_outline_.... enums in `ftimage.h'). 4634 4635 - changed outline functions to `FT_Outline_<action>' syntax 4636 4637 - added a smooth anti-alias renderer to the demonstration programs 4638 4639 - added Mac graphics driver (thanks Just) 4640 4641 - FT_Open_Face changed in order to received a pointer to a 4642 FT_Open_Args descriptor.. 4643 4644 - various cleanups, a few more API functions implemented (see 4645 FT_Attach_File) 4646 4647 - updated some docs 4648 4649 4650 ====================================================================== 4651 4652 OLD CHANGES - 22-feb-2000 4653 4654 - introduced the `psnames' module. It is used to: 4655 4656 o convert a Postscript glyph name into the equivalent Unicode 4657 character code (used by the Type 1 driver(s) to synthesize on 4658 the fly a Unicode charmap). 4659 4660 o provide an interface to retrieve the Postscript names of the 4661 Macintosh, Adobe Standard & Adobe Expert character codes. 4662 (the Macintosh names are used by the SFNT-module postscript 4663 names support routines, while the other two tables are used by 4664 the Type 1 driver(s)). 4665 4666 - introduced the `type1z' alternate Type 1 driver. This is a (still 4667 experimental) driver for the Type 1 format that will ultimately 4668 replace the one in `src/type1'. It uses pattern matching to load 4669 data from the font, instead of a finite state analyzer. It works 4670 much better than the `old' driver with `broken' fonts. It is also 4671 much smaller (under 15 Kb). 4672 4673 - the Type 1 drivers (both in `src/type1' and `src/type1z') are 4674 nearly complete. They both provide automatic Unicode charmap 4675 synthesis through the `psnames' module. No re-encoding vector is 4676 needed. (note that they still leak memory due to some code 4677 missing, and I'm getting lazy). 4678 4679 Trivial AFM support has been added to read kerning information but 4680 wasn't exactly tested as it should ;-) 4681 4682 - The TrueType glyph loader has been seriously rewritten (see the 4683 file `src/truetype/ttgload.c'. It is now much, much simpler as 4684 well as easier to read, maintain and understand :-) Preliminary 4685 versions introduced a memory leak that has been reported by Jack 4686 Davis, and is now fixed.. 4687 4688 - introduced the new `ft_glyph_format_plotter', used to represent 4689 stroked outlines like Windows `Vector' fonts, and certain Type 1 4690 fonts like `Hershey'. The corresponding raster will be written 4691 soon. 4692 4693 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new 4694 interface that uses a structure to describe the input stream, the 4695 driver (if required), etc.. 4696 4697 4698 TODO 4699 4700 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap 4701 4702 - Add a function like FT_Load_Character(face, char_code, load_flags) 4703 that would really embed a call to FT_Get_Char_Index then 4704 FT_Load_Glyph to ease developer's work. 4705 4706 - Update the tutorial! 4707 4708 - consider adding support for Multiple Master fonts in the Type 1 4709 drivers. 4710 4711 - Test the AFM routines of the Type 1 drivers to check that kerning 4712 information is returned correctly. 4713 4714 - write a decent auto-gridding component !! We need this to release 4715 FreeType 2.0 gold ! 4716 4717 4718 less urgent needs: 4719 4720 - add a CFF/Type2 driver 4721 - add a BDF driver 4722 - add a FNT/PCF/HBF driver 4723 - add a Speedo driver from the X11 sources 4724 4725 4726 ====================================================================== 4727 4728 OLDER CHANGES - 27-jan-2000 4729 4730 - updated the `sfnt' module interface to allow several SFNT-based 4731 drivers to co-exist peacefully 4732 4733 - updated the `T1_Face' type to better separate Postscript font 4734 content from the rest of the FT_Face structure. Might be used 4735 later by the CFF/Type2 driver.. 4736 4737 - added an experimental replacement Type 1 driver featuring advanced 4738 (and speedy) pattern matching to retrieve the data from postscript 4739 fonts. 4740 4741 - very minor changes in the implementation of FT_Set_Char_Size and 4742 FT_Set_Pixel_Sizes (they now implement default to lighten the font 4743 driver's code). 4744 4745 4746 ====================================================================== 4747 4748 OLD MESSAGE 4749 4750 This file summarizes the changes that occurred since the last `beta' 4751 of FreeType 2. Because the list is important, it has been divided into 4752 separate sections: 4753 4754 Table Of Contents: 4755 4756 I High-Level Interface (easier !) 4757 II Directory Structure 4758 III Glyph Image Formats 4759 IV Build System 4760 V Portability 4761 VI Font Drivers 4762 4763 4764 ---------------------------------------------------------------------- 4765 4766 High-Level Interface: 4767 4768 The high-level API has been considerably simplified. Here is how: 4769 4770 - resource objects have disappeared. this means that face objects 4771 can now be created with a single function call (see FT_New_Face 4772 and FT_Open_Face) 4773 4774 - when calling either FT_New_Face & FT_Open_Face, a size object 4775 and a glyph slot object are automatically created for the face, 4776 and can be accessed through `face->glyph' and `face->size' if 4777 one really needs to. In most cases, there's no need to call 4778 FT_New_Size or FT_New_Glyph. 4779 4780 - similarly, FT_Load_Glyph now only takes a `face' argument 4781 (instead of a glyph slot and a size). Also, its `result' 4782 parameter is gone, as the glyph image type is returned in the 4783 field `face->glyph.format' 4784 4785 - the list of available charmaps is directly accessible through 4786 `face->charmaps', counting `face->num_charmaps' elements. Each 4787 charmap has an 'encoding' field which specifies which known 4788 encoding it deals with. Valid values are, for example: 4789 4790 ft_encoding_unicode (for ASCII, Latin-1 and Unicode) 4791 ft_encoding_apple_roman 4792 ft_encoding_sjis 4793 ft_encoding_adobe_standard 4794 ft_encoding_adobe_expert 4795 4796 other values may be added in the future. Each charmap still 4797 holds its `platform_id' and `encoding_id' values in case the 4798 encoding is too exotic for the current library 4799 4800 4801 ---------------------------------------------------------------------- 4802 4803 Directory Structure: 4804 4805 Should seem obvious to most of you: 4806 4807 freetype/ 4808 config/ -- configuration sub-makefiles 4809 ansi/ 4810 unix/ -- platform-specific configuration files 4811 win32/ 4812 os2/ 4813 msdos/ 4814 4815 include/ -- public header files, those to be included 4816 directly by client apps 4817 4818 src/ -- sources of the library 4819 base/ -- the base layer 4820 sfnt/ -- the sfnt `driver' (see the drivers section 4821 below) 4822 truetype/ -- the truetype driver 4823 type1/ -- the type1 driver 4824 shared/ -- some header files shared between drivers 4825 4826 demos/ -- demos/tools 4827 4828 docs/ -- documentation (a bit empty for now) 4829 4830 4831 ---------------------------------------------------------------------- 4832 4833 Glyph Image Formats: 4834 4835 Drivers are now able to register new glyph image formats within the 4836 library. For now, the base layer supports of course bitmaps and 4837 vector outlines, but one could imagine something different like 4838 colored bitmaps, bi-color vectors or whatever else (Metafonts anyone 4839 ??). 4840 4841 See the file `include/ftimage.h'. Note also that the type 4842 FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which 4843 should encompass all known bitmap types. 4844 4845 Each new image format must provide at least one `raster', i.e. a 4846 module capable of transforming the glyph image into a bitmap. It's 4847 also possible to change the default raster used for a given glyph 4848 image format. 4849 4850 The default outline scan-converter now uses 128 levels of grays by 4851 default, which tends to smooth many things. Note that the demo 4852 programs have been updated significantly in order to display these.. 4853 4854 4855 ---------------------------------------------------------------------- 4856 4857 Build system: 4858 4859 You still need GNU Make to build the library. The build system has 4860 been very seriously re-vamped in order to provide things like : 4861 4862 - automatic host platform detection (reverting to 'config/ansi' if 4863 it is not detected, with pseudo-standard compilation flags) 4864 4865 - the ability to compile from the Makefiles with very different and 4866 exotic compilers. Note that linking the library can be difficult 4867 for some platforms. 4868 4869 For example, the file `config/win32/lcclib.bat' is invoked by the 4870 build system to create the `.lib' file with LCC-Win32 because its 4871 librarian has too many flaws to be invoked directly from the 4872 Makefile. 4873 4874 Here's how it works: 4875 4876 - the first time you type `make', the build system runs a series of 4877 sub-makefiles in order to detect your host platform. It then 4878 dumps what it found, and creates a file called `config.mk' in the 4879 current directory. This is a sub-Makefile used to define many 4880 important Make variables used to build the library. 4881 4882 - the second time, the build system detects the `config.mk' then use 4883 it to build the library. All object files go into 'obj' by 4884 default, as well as the library file, but this can easily be 4885 changed. 4886 4887 Note that you can run `make setup' to force another host platform 4888 detection even if a `config.mk' is present in the current 4889 directory. Another solution is simply to delete the file, then 4890 re-run make. 4891 4892 Finally, the default compiler for all platforms is gcc (for now, 4893 this will hopefully changed in the future). You can however specify 4894 a different compiler by specifying it after the 'setup' target as 4895 in: 4896 4897 gnumake setup lcc on Win32 to use the LCC compiler 4898 gnumake setup visualc on Win32 to use Visual C++ 4899 4900 See the file `config/<system>/detect.mk' for a list of supported 4901 compilers for your platforms. 4902 4903 It should be relatively easy to write new detection rules files and 4904 config.mk.. 4905 4906 Finally, to build the demo programs, go to `demos' and launch GNU 4907 Make, it will use the `config.mk' in the top directory to build the 4908 test programs.. 4909 4910 4911 ---------------------------------------------------------------------- 4912 4913 Portability: 4914 4915 In the previous beta, a single FT_System object was used to 4916 encompass all low-level operations like thread synchronisation, 4917 memory management and i/o access. This has been greatly simplified: 4918 4919 - thread synchronisation has been dropped, for the simple reason 4920 that the library is already re-entrant, and that if you really 4921 need two threads accessing the same FT_Library, you should 4922 really synchronize access to it yourself with a simple mutex. 4923 4924 - memory management is performed through a very simple object 4925 called `FT_Memory', which really is a table containing a table 4926 of pointers to functions like malloc, realloc and free as well 4927 as some user data (closure). 4928 4929 - resources have disappeared (they created more problems than they 4930 solved), and i/o management have been simplified greatly as a 4931 result. Streams are defined through FT_Stream objects, which 4932 can be either memory-based or disk-based. 4933 4934 Note that each face has its own stream, which is closed only 4935 when the face object is destroyed. Hence, a function like 4936 TT_Flush_Face in 1.x cannot be directly supported. However, if 4937 you really need something like this, you can easily tailor your 4938 own streams to achieve the same feature at a lower level (and 4939 use FT_Open_Face instead of FT_New_Face to create the face). 4940 4941 See the file `include/ftsystem.h' for more details, as well as the 4942 implementations found in `config/unix' and `config/ansi'. 4943 4944 4945 ---------------------------------------------------------------------- 4946 4947 Font Drivers: 4948 4949 The Font Driver interface has been modified in order to support 4950 extensions & versioning. 4951 4952 4953 The list of the font drivers that are statically linked to the 4954 library at compile time is managed through a new configuration file 4955 called `config/<platform>/ftmodule.h'. 4956 4957 This file is autogenerated when invoking `make modules'. This 4958 target will parse all sub-directories of 'src', looking for a 4959 `module.mk' rules file, used to describe the driver to the build 4960 system. 4961 4962 Hence, one should call `make modules' each time a font driver is 4963 added or removed from the `src' directory. 4964 4965 Finally, this version provides a `pseudo-driver' in `src/sfnt'. 4966 This driver doesn't support font files directly, but provides 4967 services used by all TrueType-like font drivers. Hence, its code is 4968 shared between the TrueType & OpenType font formats, and possibly 4969 more formats to come if we're lucky.. 4970 4971 4972 ---------------------------------------------------------------------- 4973 4974 Extensions support: 4975 4976 The extensions support is inspired by the one found in 1.x. 4977 4978 Now, each font driver has its own `extension registry', which lists 4979 which extensions are available for the font faces managed by the 4980 driver. 4981 4982 Extension ids are now strings, rather than 4-byte tags, as this is 4983 usually more readable. 4984 4985 Each extension has: 4986 - some data, associated to each face object 4987 - an interface (table of function pointers) 4988 4989 An extension that is format-specific should simply register itself 4990 to the correct font driver. Here is some example code: 4991 4992 // Registering an extensions 4993 // 4994 FT_Error FT_Init_XXXX_Extension( FT_Library library ) 4995 { 4996 FT_DriverInterface* tt_driver; 4997 4998 driver = FT_Get_Driver( library, "truetype" ); 4999 if (!driver) return FT_Err_Unimplemented_Feature; 5000 5001 return FT_Register_Extension( driver, &extension_class ); 5002 } 5003 5004 5005 // Implementing the extensions 5006 // 5007 FT_Error FT_Proceed_Extension_XXX( FT_Face face ) 5008 { 5009 FT_XXX_Extension ext; 5010 FT_XXX_Extension_Interface ext_interface; 5011 5012 ext = FT_Get_Extension( face, "extensionid", &ext_interface ); 5013 if (!ext) return error; 5014 5015 return ext_interface->do_it(ext); 5016 } 5017 5018 ------------------------------------------------------------------------ 5019 5020 Copyright 2000-2018 by 5021 David Turner, Robert Wilhelm, and Werner Lemberg. 5022 5023 This file is part of the FreeType project, and may only be used, 5024 modified, and distributed under the terms of the FreeType project 5025 license, LICENSE.TXT. By continuing to use, modify, or distribute this 5026 file you indicate that you have read the license and understand and 5027 accept it fully. 5028 5029 5030 Local Variables: 5031 version-control: never 5032 coding: utf-8 5033 End: 5034 5035 --- end of CHANGES --- 5036