/usr/share/doc/libfreetype6/design/design-2.html is in libfreetype6-dev 2.8.1-2ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type"
content="text/css">
<meta http-equiv="Content-Script-Type"
content="text/javascript">
<meta name="description"
content="FreeType Documentation">
<meta name="Author"
content="David Turner">
<link rel="icon"
href="../image/favicon_-90.ico">
<link rel="shortcut icon"
href="../image/favicon_-90.ico">
<link rel="stylesheet"
type="text/css"
href="../css/freetype2_-90.css">
<script type="text/javascript"
src="../../../js/jquery-1.11.0.min.js">
</script>
<script type="text/javascript"
src="../../../js/jquery.ba-resize.min.js">
</script>
<script type="text/javascript"
src="../../../js/freetype2.js">
</script>
<title>FreeType Design / I</title>
</head>
<body>
<div id="top"
class="bar">
<h1><a href="http://freetype.org/index.html">FreeType</a>
Design / I</h1>
</div>
<div id="wrapper">
<div class="colmask leftmenu">
<div class="colright">
<div class="col1wrap">
<div class="col1">
<!-- ************************************************** -->
<div id="components-and-apis">
<h2>I. Components and APIs</h2>
<p>It is better to describe FreeType 2 as a collection
of <em>components</em>. Each one of them is a more or
less abstract part of the library that is in charge of one
specific task. We will now explain the connections and
relationships between them.</p>
<p>A first brief description of this system of components
could be as follows.</p>
<ul>
<li>
<p>Client applications typically call the
FreeType 2 <b>high-level API</b>, whose functions
are implemented in a single component called
the <em>Base Layer</em>.</p>
</li>
<li>
<p>Depending on the context or the task, the base layer
then calls one or more <em>module</em> components to
perform the work. In most cases, the client
application doesn't need to know which module was
called.</p>
</li>
<li>
<p>The base layer also contains a set of routines that
are used for generic things like memory allocation,
list processing, I/O stream parsing, fixed-point
computation, etc. These functions can also be called
by a module at any time, and they form what is called
the <b>low-level base API</b>.</p>
</li>
</ul>
<p>This is illustrated by the following graphics (note that
component entry points are represented as colored
triangles).</p>
<center>
<img src="basic-design.png"
width="394"
height="313"
alt="Basic FreeType design">
</center>
<p>A few additional things must be added to complete this
picture.</p>
<ul>
<li>
<p>Some parts of the base layer can be replaced for
specific builds of the library, and can thus be
considered as components themselves. This is the case
for the <tt>ftsystem</tt> component, which is in
charge of implementing memory management and input
stream access, as well as <tt>ftinit</tt>, which is in
charge of library initialization (i.e., implementing
the <a href="../reference/ft2-base_interface.html#FT_Init_FreeType"><code>FT_Init_FreeType</code></a>
function).</p>
</li>
<li>
<p>FreeType 2 comes also with a set of <em>optional
components</em>, which can be used either as a
convenience layer for client applications (e.g.,
the <tt>ftglyph</tt> component, used to provide a
simple API to manage glyph images independently of
their internal representation), or to access
format-specific features (e.g., the
<tt>ftmm</tt> component used to access and manage
Multiple Masters and OpenType variations fonts).</p>
</li>
<li>
<p>A module is capable of calling functions provided by
another module. This is very useful to share code and
tables between several font driver modules (for
example, the <tt>truetype</tt> and <tt>cff</tt>
modules both use the routines provided by
the <tt>sfnt</tt> module).</p>
</li>
<li>
<p>Finally, FreeType provides <em>services</em>, which
are a more light-weight way to access certain features
across multiple modules, or to access some
functionality provided by a single module.</p>
<p>Services are internal to FreeType; similar to
modules, it is necessary to ‘load’ a
service, which can fail if the service's module is not
available.</p>
<p>An example for a service provided by a single module
is ‘winfonts’ (see
file <tt>svwinfnt.h</tt>), which allows access to the
header of Windows bitmap fonts. An example for a
service provided by multiple modules is
‘multi-masters’ (see file <tt>svmm.h</tt>)
to manage the abovementioned <tt>ftmm</tt> component
across the <tt>truetype</tt>, <tt>type1</tt>,
and <tt>cff</tt> modules.</p>
</li>
</ul>
<p>The following graphics shows the additional components
(without services).</p>
<center>
<img src="detailed-design.png"
width="390"
height="429"
alt="Detailed FreeType design">
</center>
<p>Please take note of the following important points.</p>
<ul>
<li>
<p>An optional component can use either the high-level
or base API. This is the case of <tt>ftglyph</tt> in
the above picture.</p>
</li>
<li>
<p>Some optional components can use module-specific
interfaces or services ignored by the base layer. In
the above example, <tt>ftmm</tt> directly accesses the
Type 1 and TrueType modules to set and query
data.</p>
</li>
<li>
<p>A replaceable component can provide a function of the
high-level API. For example, <tt>ftinit</tt> provides
<tt>FT_Init_FreeType</tt> to client applications.</p>
</li>
</ul>
</div>
<!-- ************************************************** -->
<div class="updated">
<p>Last update: 13-May-2017</p>
</div>
</div>
</div>
<!-- ************************************************** -->
<div class="col2">
</div>
</div>
</div>
<!-- ************************************************** -->
<div id="TOC">
<ul>
<li class="funding">
<p><a href="https://pledgie.com/campaigns/24434">
<img alt="Click here to lend your support to the FreeType project and make a donation at pledgie.com!"
src="https://pledgie.com/campaigns/24434.png?skin_name=chrome"
border="0"
align="middle">
</a></p>
<p><a href="https://flattr.com/submit/auto?fid=mq2xxp&url=https%3A%2F%2Fwww.freetype.org"
target="_blank">
<img class="with-border"
src="https://button.flattr.com/flattr-badge-large.png"
alt="Flattr this"
title="Flattr this"
border="0"
align="middle">
</a></p>
</li>
<li class="primary">
<a href="http://freetype.org/index.html">Home</a>
</li>
<li class="primary">
<a href="http://freetype.org/index.html#news">News</a>
</li>
<li class="primary">
<a href="../index.html">Overview</a>
</li>
<li class="primary">
<a href="../documentation.html">Documentation</a>
</li>
<li class="primary">
<a href="http://freetype.org/developer.html">Development</a>
</li>
<li class="primary">
<a href="http://freetype.org/contact.html"
class="emphasis">Contact</a>
</li>
<li>
<!-- separate primary from secondary entries -->
</li>
<li class="secondary">
<a href="index.html">FreeType Design</a>
</li>
<li class="tertiary">
<a href="design-1.html">Introduction</a>
</li>
<li class="tertiary">
<a href="design-2.html" class="current">Components and APIs</a>
</li>
<li class="tertiary">
<a href="design-3.html">Public Objects and Classes</a>
</li>
<li class="tertiary">
<a href="design-4.html">Internal Objects and Classes</a>
</li>
<li class="tertiary">
<a href="design-5.html">Module Classes</a>
</li>
<li class="tertiary">
<a href="design-6.html">Interfaces and Services</a>
</li>
</ul>
</div>
</div> <!-- id="wrapper" -->
<div id="TOC-bottom">
</div>
</body>
</html>
|