2000-10-30 21:46:41 +01:00
|
|
|
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"
|
|
|
|
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
2000-10-26 01:42:02 +02:00
|
|
|
<html>
|
2000-10-30 21:46:41 +01:00
|
|
|
<head>
|
|
|
|
<meta http-equiv="Content-Type"
|
|
|
|
content="text/html; charset=iso-8859-1">
|
|
|
|
<meta name="Author"
|
|
|
|
content="David Turner">
|
|
|
|
<title>The Design of FreeType 2 - Introduction</title>
|
2000-10-26 01:42:02 +02:00
|
|
|
</head>
|
|
|
|
|
2000-10-30 21:46:41 +01:00
|
|
|
<body text="#000000"
|
|
|
|
bgcolor="#ffffff">
|
|
|
|
|
|
|
|
<h1 align=center>
|
|
|
|
The Design of FreeType 2
|
|
|
|
</h1>
|
|
|
|
|
|
|
|
<center>
|
2000-11-09 02:14:31 +01:00
|
|
|
<table width="650">
|
2000-10-30 21:46:41 +01:00
|
|
|
<tr><td>
|
|
|
|
|
2000-11-09 02:14:31 +01:00
|
|
|
<center><table width="100%" border=0 cellpadding=5><tr bgcolor="#CCFFCC" valign=center>
|
|
|
|
<td align=center width="30%">
|
|
|
|
|
|
|
|
</td>
|
|
|
|
<td align=center width="30%">
|
|
|
|
<a href="index.html">Contents</a>
|
|
|
|
</td>
|
|
|
|
<td align=center width="30%">
|
|
|
|
<a href="design-2.html">Next</a>
|
|
|
|
</td>
|
|
|
|
</tr></table></center>
|
|
|
|
|
|
|
|
|
2000-10-30 21:46:41 +01:00
|
|
|
<table width="100%">
|
|
|
|
<tr bgcolor="#ccccee"><td>
|
|
|
|
<h1>
|
|
|
|
Introduction
|
|
|
|
</h1>
|
|
|
|
</td></tr>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
<p>This document provides details on the design and implementation of the
|
|
|
|
FreeType 2 library. Its goal is to allow developers to better
|
|
|
|
understand the way how FreeType 2 is organized, in order to let them
|
|
|
|
extend, customize, and debug it.</p>
|
|
|
|
|
|
|
|
<p>Before anything else, it is important to understand the
|
|
|
|
<em>purpose</em> of this library, i.e., why it has been written:</p>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
|
|
<p>It allows client applications to <em>access font files easily</em>,
|
|
|
|
wherever they could be stored, and as independently of the font format
|
|
|
|
as possible.</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p>Easy <em>retrieval of global font data</em> most commonly found in
|
|
|
|
normal font formats (i.e. global metrics, encoding/charmaps,
|
|
|
|
etc.).</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p>It allows easy <em>retrieval of individual glyph data</em>
|
|
|
|
(metrics, images, name, anything else).</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p><em>Access to font format-specific "features"</em> whenever
|
|
|
|
possible (e.g. SFNT tables, Multiple Masters, OpenType Layout tables,
|
|
|
|
etc.).</p>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<p>Its design has also severely been influenced by the following
|
|
|
|
requirements:</p>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
|
|
<p><em>High portability</em>. The library must be able to run on any
|
|
|
|
kind of environment. This requirement introduces a few drastic
|
|
|
|
choices that are part of FreeType 2's low-level system
|
|
|
|
interface.</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p><em>Extendability</em>. New features should be added with the
|
|
|
|
least modifications in the library's code base. This requirement
|
|
|
|
induces an extremely simple design where nearly all operations are
|
|
|
|
provided by modules.</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p><em>Customization</b>. It should be easy to build a version of the
|
2000-10-31 21:42:18 +01:00
|
|
|
library that only contains the features needed by a specific project.
|
2000-10-30 21:46:41 +01:00
|
|
|
This really is important when you need to integrate it in a font
|
|
|
|
server for embedded graphics libraries.</p>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<p><em>Compactness</em> and <em>efficiency</em>. The primary target
|
|
|
|
for this library are embedded systems with low cpu and memory
|
|
|
|
resources.</p>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<p>The rest of this document is divided in several sections. First, a few
|
|
|
|
chapters will present the library's basic design as well as the
|
|
|
|
objects/data managed internally by FreeType 2.</p>
|
|
|
|
|
|
|
|
<p>A later section is then dedicated to library customization, relating
|
|
|
|
such topics as system-specific interfaces, how to write your own module
|
|
|
|
and how to tailor library initialization & compilation to your needs.</p>
|
|
|
|
|
2000-11-09 02:14:31 +01:00
|
|
|
<center><table width="100%" border=0 cellpadding=5><tr bgcolor="#CCFFCC" valign=center>
|
|
|
|
<td align=center width="30%">
|
|
|
|
|
|
|
|
</td>
|
|
|
|
<td align=center width="30%">
|
|
|
|
<a href="index.html">Contents</a>
|
|
|
|
</td>
|
|
|
|
<td align=center width="30%">
|
|
|
|
<a href="design-2.html">Next</a>
|
|
|
|
</td>
|
|
|
|
</tr></table></center>
|
|
|
|
|
2000-10-30 21:46:41 +01:00
|
|
|
</td></tr>
|
|
|
|
</table>
|
|
|
|
</center>
|
2000-10-26 01:42:02 +02:00
|
|
|
</body>
|
|
|
|
</html>
|