FreeType

From Wikipedia, the free encyclopedia
  (Redirected from MacType)
Jump to: navigation, search
FreeType
FreeType-logo.png
Developer(s) David Turner, Robert Wilhelm, Werner Lemberg[1][2] and FreeType contributors
Initial release 1996; 21 years ago (1996)[3]
Stable release
2.8 / May 13, 2017; 13 days ago (2017-05-13)[4]
Repository git.savannah.gnu.org/cgit/freetype/
Written in C
Operating system Cross-platform
Type Software development library: Font rasterization
License GNU General Public License / FreeType License
Website www.freetype.org
Lower case e subpixel rendered with FreeType

FreeType is a popular software development library used to render text onto bitmaps, and provides support for other font-related operations. The FreeType font rasterization engine is free and open source software with the source code dual-licensed under a BSD-like license and the GPL. FreeType supports a number of font formats, including TrueType, Type 1, and OpenType[5] and "is designed to be small, efficient, highly customizable, and portable while capable of producing high-quality output (glyph images)."[5]

Features[edit]

Ability to access the embedding and subsetting restriction information of fonts was added in 2.3.8.[6]

Hinting[edit]

Support for applying a special filter to bitmaps generated by 'FT_Render_Glyph' if one of FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V has been selected was added in 2.3.0, while LCD-optimized rendering was disabled in all default builds of the library.[7] LCD filter became normalized and color-balanced in 2.6.2.[8]

TrueType
TrueType bytecode interpreter was turned off in 2.0 Beta 8,[9] and then it was turned off again in 2.0.2.[10] The TrueType bytecode interpreter has been fixed to produce exactly the same output as FreeType 1.x in 2.1.0.[11] The unpatented hinter became default in 2.3.0, which detects the need of the hinter by font name.[7] The ability to detect patented bytecode instructions and toggling of unpatented hinter were added in 2.3.5.[12] TrueType bytecode interpreter is enabled by default in 2.4.0.[13] TrueType subpixel hinting support is implemented in 2.4.11.[14] The subpixel hinting mode in version 40 of the bytecode engine was added in 2.6.4,[15][16] and was disabled in 2.6.5,[17] then enabled by default in 2.7.[18] The 'GETVARIATION' bytecode operator was implemented in 2.7.[18]
PostScript
PostScript hinter was removed in 2.0.5.[19] A new PostScript hinter was introduced in 2.0.6 to support native hints in PostScript Type 1, PostScript CID, and CFF/CEF.[20] Hinting engine was updated in 2.1.3.[21] New CFF parsing and hinting engine by Dave Arnold was introduced in 2.4.12.[22] 2.5.0.1 enables this by default.[23] Old CFF engine was disabled by default.[24] CFF stem darkening can be configured via 'darkening-parameters' property.[25] CFF Stem darkening behaviour became configurable at build time in 2.5.4.[26]
Auto-hinter
New auto-hinting module was added in 2.0 Beta 8.[9] Hinting engine was updated in 2.1.3.[21] In 2.1.8, autohinting is disabled for glyphs that are vertically distorted or mirrored.[27] Auto-hinter was replaced by auto-fitter in FreeType 2.1.10.[28] A new algorithm for CJK fonts was introduced in FreeType 2.2, based on Akito Hirai's patch. It only works for fonts with a Unicode character map.[29] Improved support for serifs, corner cases, and spacing adjustments were introduced in 2.3.2.[30] When computing blue zones, single-point contours are ignored in 2.3.3.[31] In 2.3.5, default hinter for non-Latin scripts was switched to CJK hinting module.[12] In 2.4.5, if automatic hinting is not explicitly disabled, Auto-hinter is used if a TrueType-based font doesn't contain native hints.[32] In 2.5.1, Auto-hinter rendering for TrueType fonts was improved, especially in the range 20–40 ppem.[25] Support of HarfBuzz library 0.9.19 or newer was added in 2.5.3.[33] Auto-hinting was added to Devanagari and Telugu (experimental) scripts in 2.5.4.[26] Auto-hinting was added to Arabic and Thai scripts in 2.6.[34] Auto-hinting was added to Lao script, with Arabic script support being enhanced in 2.6.1.[35] Stem darkening was added in 2.6.2 but disabled by default.[8] Auto-hinting was added to Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, Malayalam, Sinhala, Tamil scripts in 2.6.4.[15]

File formats[edit]

Adobe's new SING Glyphlet format was introduced in FreeType 2.2.[29]

BDF
Support of BDF format was added in 2.1.1, which includes support of anti-aliased bitmaps.[36] Added support of retrieve BDF properties in 2.1.4-rc1.[37] Added support of SETWIDTH_NAME and ADD_STYLE_NAME properties in 2.1.8.[27] In 2.1.9, the DEFAULT_CHAR property (if available) is used to select a glyph shape for the undefined glyph.[38] In 2.1.10, FT_Set_Pixel_Sizes and FT_Set_Char_Size were changed to select the font's actual font dimensions and 'nominal' size respectively, with the width parameter being ignored; BDF driver no longer converts all returned bitmaps with a depth of 2bpp or 4bpp to a depth of 8bpp.[28] Support for the whole Unicode encoding range was added in 2.4.9.[39]
PCF
Native support of gzip-compressed font files was added in 2.1.3.[21] Added support of retrieve PCF properties in 2.1.4-rc1.[37] In 2.2.8, added support of SETWIDTH_NAME and ADD_STYLE_NAME properties, and bitmap fonts compressed with the LZW algorithm.[27] In 2.1.10, FT_Set_Pixel_Sizes and FT_Set_Char_Size were changed to select the font's actual font dimensions and 'nominal' size respectively, with the width parameter being ignored.[28]
Portable Font Resource (PFR)
Embedded bitmaps are supported and returns correct kerning metrics for all glyphs in 2.1.3.[21] Ability to return the font family and style names when they're available was added in 2.1.4-rc2.[40]
PostScript
CID and CFF/Type2/CEF drivers were added in 2.0 Beta 8.[9] Improved support for synthetic (transformed) fonts was added in 2.0.2.[10] Type 42 font driver was added in 2.1.1.[36] Support of CFF fonts containing a subset of their reference charset was added in 2.1.4-rc1.[37] In 2.1.8, added support of hexadecimal format of data after the `StartData' command in CID-keyed Type 1 fonts, and embedded bitmaps in SFNT-based CFF fonts.[27] Access to CID registry ordering supplement was added in 2.3.6.[41] Access CID-keyed CFF fonts via CID values via 'FT_Get_CID_Is_Internally_CID_keyed' and 'FT_Get_CID_From_Glyph_Index' were added in 2.3.9.[42] Retrieving dictionary keys in Type 1 fonts via new 'FT_Get_PS_Font_Value' API was added in 2.4.8.[43] CFF engine supports all Type 2 operators except 'random' in 2.6.3.[44] Track kerning support for AFM file is added in FreeType 2.2.[29]
TrueType/OpenType
Support of OpenType 1.3 formats 8, 10, 12 was added in 2.0.5.[19] Support of TrueType or OpenType fonts embedded in PDF documents without 'cmap', 'post' and 'name' was added in 2.0.8.[45] Support of fonts with broken name tables with invalid entries and wild offsets was added in 2.0.9.[46] Support certain 'broken' fonts that load under Windows without problems in 2.1.3.[21] Support for TrueType tables without a 'hmtx' table when using incremental interface was added in 2.1.4-rc1, and the depth of composite glyphs is limited.[37] Support for tables 'avar', 'cvar', 'fvar', and 'gvar' was added in 2.1.9.[38] Setting family and style in SFNT fonts is handled by TT_NAME_ID_PREFERRED_FAMILY and TT_NAME_ID_PREFERRED_SUBFAMILY strings in 2.1.10.[28] In 2.1.10, FT_Sfnt_Table_Info API was added to retrieve name and size information of SFNT tables, and API FT_OpenType_Validate was added to validate OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF).[28] Bit 1 in the 'head' table of TrueType fonts is supported in FreeType 2.2.[29] Support of loading TrueType name encoded in UTF-16 was added in 2.3.0, and TrueTypeGX validator (gxvalid) started checking the order of glyph IDs in the kern table.[7] Microsoft Unicode cmaps in TrueType fonts became preferred over Apple cmaps by default in 2.3.6.[41] 'MATH' OpenType table validation and cmap 14 support were added in 2.3.6.[41] Ability to pass the dropout mode to the B&W rasterizer was added in 2.3.7.[47] Experimental Type 1 and CID-keyed Type 1 fonts in an SFNT wrapper was added in 2.3.8 (tables 'TYP1' and 'CID ' are passed to the PS Type 1 and CID-keyed PS font drivers).[6] Support for SFNT cmap 13 table format was added in 2.3.10.[48] Support of TrueType fonts without family name via detection of lengths and checksums of Type42-persistent subtables ('cvt ', 'fpgm', and 'prep') was added in 2.4.4, as well as proper support of UVS (TrueType/OpenType cmap format 14).[49] Support for OpenType collections and CFF fonts within an SFNT wrapper are added in 2.4.11.[14] Support of 'CBDT', 'CBLC' tables (embedded coloured bitmaps) were added in 2.5.0.[24][50] Support of Apple's 'sbix' color bitmap format, and 'OS/2' SFNT table version 5 were added in 2.5.1.[25] In 2.6, advance widths and side bearing values in CFFs (wrapped in an SFNT structure) are now always taken from the 'hmtx' table, and PostScript font name of a CFF font (wrapped in an SFNT structure) is now always taken from the 'name' table.[34] Support of CFF2 font format from OpenType 1.8 was added in 2.7.1.[51]
Windows raster font (.FON)
Windows FNT/FON driver was added in 2.0 Beta 8.[9] Windows FNT specific API was added in 2.1.4-rc1.[37] Support of Windows raster font files in PE executable format was added in 2.3.5.[12]
WOFF
Support of WOFF font format was added in 2.5.1.[25]

Loader[edit]

TrueType name table loader supports 'buggy' Asian fonts was added in 2.1.1, which ignores empty name entries, invalid pointer offsets and a few other incorrect subtleties. In addition, name strings are now loaded on demand, which reduces the memory load of many faces.[36] Support of managing UCS-4 character codes in CMap cache was added in 2.1.4-rc2.[40] In 2.1.8, support of deinstallation of faces, delete all 'idle' nodes that correspond to a given FTC_FaceID.[27] In the Type 1 loader, top-level dictionaries was properly skipped in 2.3.0[7] Ability to use fractional pixel sizes in the cache was added in 2.3.5.[12] Ability to extract advance values of glyphs without loading their outlines was added in 2.3.8.[6] Incremental font loading is enabled by default in 2.3.12.[52]

Platforms[edit]

AIX
Automatic build on AIX systems was added in 2.0.4.[53]
Amiga
Support for Amiga was added in 2.0.5.[19]
BeOS
BeOS-specific files was added in 2.0.3.[54]
Atari
Support for building FreeType on the 16-bit Atari using the PureC compiler was added in 2.1.8.[27]
EPOC
Support for EPOC was re-added in 2.0.2.[10]
Symbian
Support for Symbian was added in 2.3.6.[41]
Windows
Support for PFR driver with Visual C++ was added in 2.1.2.[55]

Licensing[edit]

  • In 2.1.0, FreeType License was updated to include a proposed preferred disclaimer.[11]
  • ftvalid sources, used by ftlayout code, was relicensed to 'Old-Style' MIT licence in 2008-01-03.[56]

History[edit]

FreeType was created in 1996 by David Turner to render TrueType fonts, including an interpreter for handling TrueType bytecode. Originally written in the Pascal programming language it was ported in 1997 by Robert Wilhelm to C. Later, Werner Lemberg joined the team who is until today maintainer of Freetype.[3][57][58]

FreeType 1 had support for only the TrueType font format but it included an extension to support OpenType text layout features.

Major rewrite 2.0[edit]

Version 2.0 of FreeType was announced back in 1998, with development release made available in 1999,[59] and final release available in 2000, providing a complete rewrite to make it modular. FreeType 2 brought support for more font formats and evolved source code which the developers stated was "simpler and more powerful".[60] FreeType 2 is not backward-compatible with FreeType 1 but the developers state that moving from FreeType 1 to FreeType 2 poses little difficulty.[60] As text layout processing was not an objective of FreeType 2, however, the OpenType text layout functionality of FreeType 1 was removed in FreeType 2. A very evolved form of the OpenType text layout functionality of FreeType 1 is used in the Pango text layout library. The HarfBuzz project is further evolving that functionality with a complete rewrite offered as a standalone library with a less restrictive license than Pango's license.[61]

Patent conflicts[edit]

In 1999, the Freetype project was informed by Apple Incorporated that FreeType was infringing patents related to TrueType font hinting. Following that, Freetype deactivated by default or worked around patent relating technologies. Therefore, several open source projects, such as FreeBSD or Linux, had FreeType included with font hinting functionality disabled or degraded to avoid the issue of software patents held by Apple Inc.[62]

Since May 2010, all conflicting software patents related to font hinting expired,[62] allowing FreeType's TrueType font hinter to be used in open source. Many of the operating systems which disabled the renderer now give the user the option to enable it. In Fedora, freetype-freeworld was switched from the proprietary yum repository to the free repository.[63]

CFF engine donation[edit]

In 2013 Adobe donated a CFF rendering engine to the FreeType project which integrated it and made it default with version 2.5.[64][65]

Users[edit]

Android
FreeType is used as font renderer in Android.[66]
Apple
Apple uses FreeType in iOS[66] and macOS[67] next to Apple Advanced Typography.
Java
In 2007, Sun Microsystems switched from using a proprietary font rasterizer to using FreeType in the OpenJDK Java development kit.[68]
PlayStation
Sony ships FreeType with its PlayStation 3,[69] PlayStation 4,[70] and PlayStation Vita[71] consoles.
ReactOS
FreeType is used as ReactOS font renderer.[72]

Other users[edit]

As well as being used by the major free software desktop systems, FreeType has been used as a rasterization engine for modern video games,[73][74] and Opera for the Wii.[75]

On Windows, projects like gdipp[76] and MacType[77] aim to override the system renderer with FreeType.

See also[edit]

  • HarfBuzz, a library for shaping of Unicode text.
  • Pango, a multilingual text rendering engine
  • FontForge, a typeface (font) editor program
  • AltNETType, a FreeType port to C#

References[edit]

  1. ^ "Interview with David Turner of Freetype". OSNews. June 28, 2007. Retrieved March 31, 2011. 
  2. ^ "The FreeType Project LICENSE" (text). FreeType. January 27, 2006. Retrieved March 31, 2011. 
  3. ^ a b "FreeType History". 2013-07-02. Retrieved 2014-08-06. 
  4. ^ "FreeType 2.8". 2017-05-13. Retrieved 2017-05-13. 
  5. ^ a b "FreeType 2 Overview". FreeType 2. SourceForge, Inc. July 4, 2010. Features. Retrieved March 31, 2011. 
  6. ^ a b c "[ft-announce] FreeType 2.3.8 released". 2009-01-14. 
  7. ^ a b c d "[ft-announce] FreeType version 2.3.0 has been released". 2007-01-17. 
  8. ^ a b "[ft-announce] Announcing FreeType 2.6.2". 2013-11-28. 
  9. ^ a b c d "FreeType 2 Release Candidate (Beta 8)". 2000-07-26. 
  10. ^ a b c "Release Name: 2.0.2". 2001-04-17. 
  11. ^ a b "LATEST CHANGES BETWEEN 2.1.0 and 2.0.9". 2002-04-17. 
  12. ^ a b c d "[ft-announce] FreeType 2.3.5 has been released.". 2007-07-03. 
  13. ^ "[ft-announce] FreeType 2.4.0 has been released". 2010-07-12. Retrieved 2014-04-04. 
  14. ^ a b "[ft-announce] FreeType 2.4.10 has been released". 2012-12-20. Retrieved 2014-04-04. 
  15. ^ a b "[ft-announce] Announcing FreeType version 2.6.4". 
  16. ^ "Re: [ft-devel] A small post about the v40 interpreter". 
  17. ^ "[ft-announce] Announcing FreeType version 2.6.5". 
  18. ^ a b "[ft-announce] Announcing FreeType version 2.7". 
  19. ^ a b c "LATEST CHANGES BETWEEN 2.0.5 and 2.0.4". 2001-10-17. 
  20. ^ "LATEST CHANGES BETWEEN 2.0.6 and 2.0.5". 2002-01-06. 
  21. ^ a b c d e "LATEST CHANGES BETWEEN 2.1.3 and 2.1.2". 2002-11-18. 
  22. ^ "[ft-announce] FreeType 2.4.12 has been released". 2013-05-08. Retrieved 2014-04-04. 
  23. ^ "[ft-announce] FreeType version 2.5.0.1 has been released". 2013-06-20. 
  24. ^ a b "[ft-announce] FreeType version 2.5.0 has been released". 2013-06-19. 
  25. ^ a b c d "[ft-announce] FreeType 2.5.1 has been released.". 2013-11-25. 
  26. ^ a b "[ft-announce] Announcing FreeType 2.5.4". 2014-12-07. 
  27. ^ a b c d e f "LATEST CHANGES BETWEEN 2.1.8 and 2.1.7". 
  28. ^ a b c d e "Announcing FreeType 2.1.10". Lists.nongnu.org. 2005-06-15. Retrieved 2014-04-04. 
  29. ^ a b c d "FreeType version 2.2.1 released". Lists.nongnu.org. Retrieved 2014-04-04. 
  30. ^ "[ft-announce] FreeType version 2.3.2 released.". 2007-03-09. 
  31. ^ "[ft-announce] FreeType 2.3.3 has been released". 2007-04-05. 
  32. ^ "[ft-announce] FreeType 2.4.5 has been released". 2011-06-25. 
  33. ^ "[ft-announce] FreeType 2.5.2 has been released.". 2014-03-09. 
  34. ^ a b "[ft-announce] Announcing FreeType version 2.6". 2015-06-09. 
  35. ^ "[ft-announce] Announcing FreeType version 2.6.1". 2015-10-04. 
  36. ^ a b c "LATEST CHANGES BETWEEN 2.1.1 and 2.1.0". 2002-06-11. 
  37. ^ a b c d e "LATEST CHANGES BETWEEN 2.1.4 and 2.1.3". 
  38. ^ a b "LATEST CHANGES BETWEEN 2.1.9 and 2.1.8". 
  39. ^ "[ft-announce] FreeType 2.4.9 has been released". 2012-03-08. 
  40. ^ a b "LATEST CHANGES BETWEEN 2.1.4 and 2.1.3". 
  41. ^ a b c d "[ft-announce] FreeType 2.3.6 has been released". 2008-06-10. 
  42. ^ "[ft-announce] FreeType version 2.3.9 has been released". 2009-03-12. 
  43. ^ "[ft-announce] FreeType 2.4.8 has been released". 2011-11-15. 
  44. ^ "[ft-announce] Announcing FreeType version 2.6.3". Lists.nongnu.org. 2016-02-09. 
  45. ^ "LATEST CHANGES BETWEEN 2.0.8 and 2.0.7". 2002-02-07. 
  46. ^ "Release Name: 2.0.9". 2002-03-07. 
  47. ^ "[ft-announce] FreeType 2.3.7 has been released". 2008-06-29. 
  48. ^ "[ft-announce] FreeType version 2.3.10 has been released". 2009-10-08. 
  49. ^ "[ft-announce] FreeType 2.4.4 has been released". 2010-12-01. 
  50. ^ [ft-announce] FreeType now supports color emojis
  51. ^ "[ft-announce] Announcing FreeType 2.7.1". Lists.nongnu.org. 2016-12-30. 
  52. ^ "[ft-announce] FreeType 2.3.12 has been released". 2010-02-13. 
  53. ^ "LATEST CHANGES BETWEEN 2.0.4 and 2.0.3". 2001-06-26. 
  54. ^ "LATEST CHANGES BETWEEN 2.0.3 and 2.0.2". 2001-05-28. 
  55. ^ "LATEST CHANGES BETWEEN 2.1.1 and 2.1.0". 2002-06-23. 
  56. ^ "[ft-announce] Relicensing ftlayoutd". 2008-01-03. 
  57. ^ ft2faq
  58. ^ "What are the differences between FreeType 1.x and FreeType 2 ?". Experts123.com. Retrieved 2014-04-04. 
  59. ^ Development
  60. ^ a b "FreeType 2 FAQ". FreeType 2. Retrieved July 26, 2011. 
  61. ^ "HarfBuzz". Freedesktop.org. Retrieved 2014-04-04. 
  62. ^ a b "FreeType and Patents". FreeType. SourceForge, Inc. July 4, 2010. Retrieved March 31, 2011. 
  63. ^ "RepoView: RPM Fusion (Fedora - free) development Source RPM Packages". Download1.rpmfusion.org. 2014-03-11. Retrieved 2014-04-04. 
  64. ^ adobe-contributes-cff-rasterizer-to-freetype
  65. ^ youve-got-cff
  66. ^ a b "Got CFF?". Google Open Source Blog. Retrieved 2014-04-04. 
  67. ^ "About the security content of OS X Lion v10.7.3 and Security Update 2012-001". Support.apple.com. 2012-05-31. Retrieved 2014-04-04. 
  68. ^ "Font Scaler". Retrieved 4 April 2014. 
  69. ^ "PlayStation®3 License". Scei.co.jp. Retrieved 2014-04-04. 
  70. ^ "Open Source Software used in PlayStation®4". Scei.co.jp. Retrieved 2014-04-04. 
  71. ^ "Open Source Software used in PlayStation®Vita". Scei.co.jp. Retrieved 2014-04-04. 
  72. ^ Royal, Simon (2014-02-26). "ReactOS: A Windows Compatible Alternative OS". lowendmac.com. Retrieved 2016-01-10. While the main core of ReactOS is built from scratch, it has some dependencies on existing software and protocols. It uses parts of Wine, networking in the form of lwIP, USB from Haiku, as well as FreeType, Mesa3D, and UniATA. 
  73. ^ Games company Relic Entertainment has used FreeType for their games Dawn of War and Company of Heroes, as can be seen in the credits on the loading screens.
  74. ^ FreeType has also been implemented in the American Girl games for the PC such as A Treehouse of My Own and Julie Saves The Eagles.
  75. ^ Opera 9 for the Wii console uses FreeType, as can be seen by looking at the "Third-party information" page which can be found on the Wii via: Internet Channel > Operations Guide > About > Opera 9 for Wii — Third-party information
  76. ^ "gdipp". Retrieved 4 August 2014. 
  77. ^ "MacType". Retrieved 2016-09-12. 

External links[edit]