2000-07-26 21:07:15 +02:00
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>FreeType 2 Introduction</title>
|
|
|
|
<basefont face="Georgia, Arial, Helvetica, Geneva">
|
|
|
|
<style content="text/css">
|
|
|
|
P { text-align=justify }
|
|
|
|
H1 { text-align=center }
|
|
|
|
H2 { text-align=center }
|
|
|
|
LI { text-align=justify }
|
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body text="#000000"
|
|
|
|
bgcolor="#FFFFFF"
|
|
|
|
link="#0000EF"
|
|
|
|
vlink="#51188E"
|
|
|
|
alink="#FF0000">
|
|
|
|
|
|
|
|
|
2000-10-31 21:42:18 +01:00
|
|
|
<font size=1>http://www.freetype.org</font><p>
|
2000-07-26 21:07:15 +02:00
|
|
|
|
|
|
|
<center>
|
|
|
|
<a href="freetype.html">
|
|
|
|
<img src="image/freetype.jpg" width=550 height=105 alt="The FreeType Project" border=0></a>
|
|
|
|
<h1>An Introduction to FreeType 2</h1>
|
|
|
|
</center>
|
|
|
|
|
|
|
|
<center><table width=750 cellspacing=10 cellpadding=30><tr><td>
|
|
|
|
<hr><p>
|
|
|
|
|
|
|
|
DOCUMENT INDEX:<br>
|
|
|
|
<ul>
|
|
|
|
<li><a href="#what">What is FreeType 2 ?</a>
|
|
|
|
<li><a href="#features">Features</a>
|
|
|
|
<li><a href="#requirements">Requirements</a>
|
|
|
|
<li><a href="#patents">Patents issues</a>
|
|
|
|
</ul><p>
|
|
|
|
|
|
|
|
|
|
|
|
<hr><p>
|
|
|
|
|
|
|
|
<table width="100%" cellspacing=5><tr bgcolor="#CCCCEE"><td>
|
|
|
|
<h2 align=center><a name="what">What is FreeType 2 ?</h2>
|
|
|
|
</td></tr><tr><td>
|
|
|
|
|
|
|
|
<p>The FreeType project is a team of volunteers who develop free, portable
|
|
|
|
and high-quality software solutions for digital typography. We specifically
|
|
|
|
target embedded systems and focus on bringing small, efficient and
|
|
|
|
ubiquitous products.</p>
|
|
|
|
|
|
|
|
<p>the FreeType 2 library is our new software font engine. It has been
|
|
|
|
designed to provide the following important features:</p>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li><p>
|
|
|
|
<b>A universal and simple API to manage font files:</b><br>
|
|
|
|
<ul>
|
|
|
|
<p>The FreeType 2 API is simple and easy to use. It supports both
|
|
|
|
bitmapped and scalable fonts and is well-suited to manage font
|
|
|
|
files of all formats. Unlike other font libraries, FreeType 2
|
|
|
|
returns and manages outline font data (images & metrics).</p>
|
|
|
|
</ul>
|
|
|
|
</p></li>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<li><p>
|
|
|
|
<b>Support for several font formats through loadable modules:</b><br>
|
|
|
|
<ul>
|
|
|
|
<p>FreeType 2 uses <em>"font drivers"</em>. Each driver is a loadable
|
|
|
|
module used to support one specific font format. Each driver can also
|
|
|
|
provide specific extensions used to access format-specific features of
|
|
|
|
the font.</p>
|
|
|
|
</ul>
|
|
|
|
</p></li>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<li><p>
|
|
|
|
<b>High-quality anti-aliasing:</b><br>
|
|
|
|
<ul>
|
|
|
|
<p>FreeType 2 produces etremely smooth outlines at small sizes, with its new
|
|
|
|
anti-aliasing renderer, which produces bitmaps with 256-levels of gray.
|
|
|
|
It uses a new algorithm that has been specifically designed to render
|
|
|
|
small complex shapes (like glyphs) at high speed. Indeed, it's even
|
|
|
|
faster than the monochrome renderer for small character sizes (under
|
|
|
|
20 pixels) !!
|
|
|
|
</p>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
<li><b>High portability & performance:</b><br>
|
|
|
|
<ul>
|
|
|
|
<p>The FreeType 2 source code is written in ANSI C and runs on any
|
|
|
|
platform with a compliant compiler. Client applications can
|
|
|
|
provide their own memory manager or input stream to the library
|
|
|
|
(which means that font files can come from any place: disk,
|
|
|
|
memory, compressed file, network, etc..).
|
|
|
|
</p>
|
|
|
|
</ul>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
</ul>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>Note that <em>the beta of FreeType 2 is available <b>now</b></em>. For more
|
|
|
|
info, check our <a href="download.html">Download page</a> or see the source
|
|
|
|
and its diffs through our <a href="cgi-bin/cvsweb.cgi">CVS Web interface</a>.
|
|
|
|
</p>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
</td></tr></table>
|
|
|
|
|
|
|
|
<table width="100%" cellspacing=5><tr bgcolor="#CCCCEE"><td>
|
|
|
|
<h2 align=center><a name="features">Features</h2>
|
|
|
|
</td></tr><tr><td>
|
|
|
|
|
|
|
|
<h3>Supported font formats</h3>
|
|
|
|
|
|
|
|
<p>FreeType 2 readily supports the following font formats:</p>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li>TrueType files (.ttf) and collections (.ttc)</li>
|
|
|
|
<li>Type 1 font files both in ASCII (.pfa) or binary (.pfb) format</li>
|
|
|
|
<li>Type 1 Multiple Master fonts. The FreeType 2 API also provides
|
|
|
|
routines to manage design instances easily</li>
|
|
|
|
<li>Type 1 CID-keyed fonts</li>
|
|
|
|
<li>OpenType/CFF (.otf) fonts</li>
|
|
|
|
<li>CFF/Type 2 fonts</li>
|
|
|
|
<li>Adobe CEF fonts (.cef), used to embed fonts in SVG documents
|
|
|
|
with the Adobe SVG viewer plugin.</li>
|
|
|
|
<li>Windows FNT/FON bitmap fonts</li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<p>Note that Apple's TrueType GX fonts are supported as normal TTFs,
|
|
|
|
(the advanced tables are ignored).</p>
|
|
|
|
|
|
|
|
<p>Besides, it's possible to add support for new font formats by providing
|
|
|
|
a specific <em>font driver</em> module. Modules can be added either at
|
|
|
|
build time (when recompiling the library), or at <em>run-time</em>;
|
|
|
|
this allows, for example, applications to register their own
|
|
|
|
font driver to support program-specific formats.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Patent-free automatic hinter</h3>
|
|
|
|
|
|
|
|
<p>TrueType fonts are normally renderered (hinted) with the help of a
|
|
|
|
specific bytecode where the behaviour of a few opcodes is patented by
|
|
|
|
Apple. We're currently in contact with Apple to discuss the importance
|
|
|
|
of such patents and their use in open source projects like FreeType.
|
|
|
|
</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>In the meantime, we have developped our own alternative technology that
|
|
|
|
is capable of automatically hinting scalable glyph images. It is
|
|
|
|
now part of the FreeType 2 source tree as the "autohint" module,
|
|
|
|
and is used to hint glyphs when the bytecode interpreter is disabled
|
|
|
|
(through a configuration macro when building the engine). Note that
|
|
|
|
the auto-hinter is also used to handle glyphs in other formats like
|
|
|
|
CFF and Type 1.</p>
|
|
|
|
|
|
|
|
<p>The auto-hinter provides pretty good results (in some cases, it even
|
|
|
|
significantly improves the output of poorly hinted fonts) but we'll
|
|
|
|
continue to improve it with each new release of FreeType to achieve
|
|
|
|
the highest possible quality.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Modular design:</h3>
|
|
|
|
|
|
|
|
<p>The design of FreeType 2 is extremely modular as most features are
|
|
|
|
supported through optional modules. This means it's easily possible to
|
|
|
|
only compile the features you need. As each module is between
|
|
|
|
10 and 20 Kb in size, it's possible to build a bare-bones
|
|
|
|
font engine that supports anti-aliasing in about 30 Kb !!</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>Configuration is performed by modifications of only two header
|
|
|
|
files (one to select global features, another one to select modules)
|
|
|
|
and don't need tweaking of source code. Note that it is however
|
|
|
|
possible to provide your own implementation of certain components.</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>For example, when building on Unix, the engine will automatically
|
|
|
|
use memory-mapped files when available on the target platform,
|
|
|
|
thus significantly increasing font file i/o.</p>
|
|
|
|
|
|
|
|
|
|
|
|
<p>Due to its very flexible design, it is possible to add, remove and
|
|
|
|
upgrade modules at run-time.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Advanced glyph management</h3>
|
|
|
|
|
|
|
|
<p>The API comes with a standard extension used to extract individual
|
|
|
|
glyph images from font files. These images can be bitmaps, scalable
|
|
|
|
bezier outlines or even anything else. (e.g. bi-color or metafont
|
|
|
|
glyphs, as long as they're supported by a module).</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>Each scalable glyph image can be transformed, measured and
|
|
|
|
rendered into a monochrome or anti-aliased bitmaps easily
|
|
|
|
through a uniform interface.
|
|
|
|
|
|
|
|
This allows client applications to easily cache glyphs or
|
|
|
|
perform text rendering effects with minimal difficulty
|
|
|
|
(look at the FreeType 2 Tutorial to see how to render
|
|
|
|
rotated text with very few lines of code).
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Advanced font access</h3>
|
|
|
|
|
|
|
|
<p>The FreeType 2 API is useful to retrieve advanced information from
|
|
|
|
various fonts:</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<ul>
|
|
|
|
<li>vertical metrics are available whenever found in the font file</li>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<li>kerning distances are available when found in the font file. It
|
|
|
|
is also possible to "attach" a given additional file to a given
|
|
|
|
font face. This is useful to load kerning distances from an
|
|
|
|
.afm file into a Type 1 face for example.</li>
|
|
|
|
|
|
|
|
<li>provides ASCII glyph names whenever available in the font
|
|
|
|
(TrueType, OpenType, Type1, etc..)</li>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<li>provides access to important tables for SFNT-based font formats
|
|
|
|
(i.e. TrueType, OpenType, CEF, etc..), like the name table,
|
|
|
|
font header, maximum profile, etc...</li>
|
|
|
|
|
|
|
|
<li>automatic synthesis of Unicode-based character maps for
|
|
|
|
those fonts or formats that do not provide one. This is
|
|
|
|
extremely useful with Type 1 fonts which are normally
|
|
|
|
limited to a stupid 256-characters encoding.</li>
|
2000-10-31 21:42:18 +01:00
|
|
|
</ul>
|
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
|
|
|
|
<h3>Simple & clean API</h3>
|
|
|
|
|
|
|
|
<p>The FreeType 2 high-level API is simple and straightforward, as it
|
|
|
|
has been specifically designed to make the most commmon font operations
|
|
|
|
easy</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>As a comparison, the number of function calls needed to perform a
|
|
|
|
the tasks of font face creation/opening and glyph loading/rendering
|
|
|
|
has been reduced by a factor of 4 !!</p>
|
|
|
|
|
|
|
|
<p>The API is also independent of any font-format specific issue, though
|
|
|
|
it provides standard extensions to access format-specific tables and
|
|
|
|
information. More extensions can also be easily added through new
|
|
|
|
modules</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
|
|
|
|
<h3>Robust & Portable code</h3>
|
|
|
|
|
|
|
|
<p>Because it is written in industry-standard ANSI C, FreeType 2 compiles
|
|
|
|
on all platforms with a compliant compiler. Because the default build
|
|
|
|
only relies on the C library, it is free of any system-specific
|
|
|
|
dependencies, even if it is possible to "enhance" certain components
|
|
|
|
by providing a specific implementation.</p>
|
|
|
|
|
|
|
|
<p>The code doesn't use global or static variables. Client applications
|
|
|
|
can provide their own memory manager. Font files can be read from
|
|
|
|
a disk file, memory, or through a client-provided input stream. This
|
|
|
|
allows to support compressed font files, remote fonts, fonts embedded
|
|
|
|
in other streams (e.g. Type42 fonts), etc..</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>An advanced i/o sub-system is used to optimise file access, as well
|
|
|
|
as reduce memory usage of the library when the file is memory-based
|
|
|
|
( ROM, RAM, memory-mapped ).</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Open Source & Vendor Independence</h3>
|
|
|
|
|
|
|
|
<p>Finally, FreeType 2 is released under its own BSD-like open source
|
|
|
|
license, one of the less restricting licenses available, and this
|
|
|
|
means that:</p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<ul>
|
|
|
|
<li><p>
|
|
|
|
It can be included in all kinds of products, be they proprietary
|
|
|
|
or not.
|
|
|
|
</p></li>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<li><p>
|
|
|
|
As any module can be added or replaced anytime, any third party
|
|
|
|
vendor has the ability to provide its own set of modules (under
|
|
|
|
its own license) in order to support proprietary font formats or
|
|
|
|
more advanced features (e.g. a new auto-hinter, or a new
|
|
|
|
anti-aliasing renderer for LCDs or TV screens).
|
|
|
|
</p></li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<p>One could even imagine an application using the FreeType 2 API with
|
|
|
|
a "wrapper" module used to access system-specific fonts (like through
|
|
|
|
the Windows GDI). This would mean native font support with more portable
|
|
|
|
application code (as simply changing the wrapper module would be required
|
|
|
|
to port the application to another system).</p>
|
|
|
|
|
|
|
|
</td></tr></table>
|
|
|
|
|
|
|
|
<table width="100%" cellspacing=5><tr bgcolor="#CCCCEE"><td>
|
|
|
|
<h2 align=center><a name="requirements">Requirements</h2>
|
|
|
|
</td></tr><tr><td>
|
|
|
|
|
|
|
|
<p>FreeType 2 is written in ANSI C and should compile with no problems
|
|
|
|
on a great variety of platforms. We have taken care of removing all
|
|
|
|
compilation warnings from major compliant compilers. Detailed compilation
|
|
|
|
instructions are provided in the software archive.</p>
|
|
|
|
|
|
|
|
<p>This version of the library has been succesfully compiled and run
|
|
|
|
under the following systems: Dos, OS/2, Windows, Macintosh, Unix
|
|
|
|
(including the 64-bits DEC Unix, a.k.a. "True64"). You should not
|
|
|
|
encounter major problems compiling it on any other kind of platform.
|
|
|
|
In all cases, contact us if you do.</p>
|
|
|
|
|
|
|
|
<p>Note that a small set of demonstration programs is also separately
|
|
|
|
available. They include a tiny graphics sub-system that is used to
|
|
|
|
display and show-off the library's capabilities on the following
|
|
|
|
platforms: X11, MacOS, OS/2 & Windows.</p>
|
|
|
|
|
|
|
|
<p>Please visit our <a href="http://www.freetype.org/download.html">
|
|
|
|
Download section</a> to access the software archives.</p>
|
|
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
</td></tr></table>
|
|
|
|
|
|
|
|
<table width="100%" cellspacing=5><tr bgcolor="#CCCCEE"><td>
|
|
|
|
<h2 align=center><a name="patents">Patents issues</h2>
|
|
|
|
</td></tr><tr><td>
|
|
|
|
|
|
|
|
<p>The FreeType 2 source code includes a TrueType bytecode interpreter that
|
|
|
|
is covered by the Apple patents. However, this piece of code is never
|
|
|
|
compiled by default in this release (unlike in previous betas) making
|
|
|
|
a default build of the library <em>entirely patent-free !!</em></p>
|
2000-10-31 21:42:18 +01:00
|
|
|
|
2000-07-26 21:07:15 +02:00
|
|
|
<p>Note that in order to compile the interpreter, one needs to define
|
|
|
|
the configuration macro <tt><b>TT_CONFIG_OPTION_BYTECODE_INTERPRETER</b></tt> configuration
|
|
|
|
macro in the file "<tt>ftoption.h</tt>". More details are available in
|
|
|
|
the software archive. Note that the use of the interpreter is normally
|
|
|
|
protected by US, UK and French patents. In the event you'd absolutely
|
|
|
|
need it, you may have to <a href="mailto:patents@apple.org">contact
|
|
|
|
Apple legal department</a> for licensing conditions, depending on your
|
|
|
|
location and the places you distribute/sell your products.</p>
|
|
|
|
|
|
|
|
<p>Please do not ask us any detailed information regarding licensing, as
|
|
|
|
we're still discussing with Apple this issue, we're unable to inform
|
|
|
|
the public of what's currently going on..</p>
|
|
|
|
|
|
|
|
</td></tr></table>
|
|
|
|
|
|
|
|
<hr>
|
|
|
|
<p>
|
|
|
|
<a href="index.html">Back to FreeType homepage</a><p>
|
|
|
|
|
|
|
|
</td></tr></table>
|
|
|
|
</body>
|
|
|
|
</html>
|