73 /**** ****/ |
75 /**** ****/ |
74 /*************************************************************************/ |
76 /*************************************************************************/ |
75 /*************************************************************************/ |
77 /*************************************************************************/ |
76 |
78 |
77 |
79 |
78 /*#***********************************************************************/ |
80 /*#************************************************************************ |
79 /* */ |
81 * |
80 /* If you enable this configuration option, FreeType recognizes an */ |
82 * If you enable this configuration option, FreeType recognizes an |
81 /* environment variable called `FREETYPE_PROPERTIES', which can be used */ |
83 * environment variable called `FREETYPE_PROPERTIES`, which can be used to |
82 /* to control the various font drivers and modules. The controllable */ |
84 * control the various font drivers and modules. The controllable |
83 /* properties are listed in the section @properties. */ |
85 * properties are listed in the section @properties. |
84 /* */ |
86 * |
85 /* You have to undefine this configuration option on platforms that lack */ |
87 * You have to undefine this configuration option on platforms that lack |
86 /* the concept of environment variables (and thus don't have the */ |
88 * the concept of environment variables (and thus don't have the `getenv` |
87 /* `getenv' function), for example Windows CE. */ |
89 * function), for example Windows CE. |
88 /* */ |
90 * |
89 /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */ |
91 * `FREETYPE_PROPERTIES` has the following syntax form (broken here into |
90 /* multiple lines for better readability). */ |
92 * multiple lines for better readability). |
91 /* */ |
93 * |
92 /* { */ |
94 * ``` |
93 /* <optional whitespace> */ |
95 * <optional whitespace> |
94 /* <module-name1> ':' */ |
96 * <module-name1> ':' |
95 /* <property-name1> '=' <property-value1> */ |
97 * <property-name1> '=' <property-value1> |
96 /* <whitespace> */ |
98 * <whitespace> |
97 /* <module-name2> ':' */ |
99 * <module-name2> ':' |
98 /* <property-name2> '=' <property-value2> */ |
100 * <property-name2> '=' <property-value2> |
99 /* ... */ |
101 * ... |
100 /* } */ |
102 * ``` |
101 /* */ |
103 * |
102 /* Example: */ |
104 * Example: |
103 /* */ |
105 * |
104 /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */ |
106 * ``` |
105 /* cff:no-stem-darkening=1 \ */ |
107 * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ |
106 /* autofitter:warping=1 */ |
108 * cff:no-stem-darkening=1 \ |
107 /* */ |
109 * autofitter:warping=1 |
|
110 * ``` |
|
111 * |
|
112 */ |
108 #define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES |
113 #define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES |
109 |
114 |
110 |
115 |
111 /*************************************************************************/ |
116 /************************************************************************** |
112 /* */ |
117 * |
113 /* Uncomment the line below if you want to activate LCD rendering */ |
118 * Uncomment the line below if you want to activate LCD rendering |
114 /* technology similar to ClearType in this build of the library. This */ |
119 * technology similar to ClearType in this build of the library. This |
115 /* technology triples the resolution in the direction color subpixels. */ |
120 * technology triples the resolution in the direction color subpixels. To |
116 /* To mitigate color fringes inherent to this technology, you also need */ |
121 * mitigate color fringes inherent to this technology, you also need to |
117 /* to explicitly set up LCD filtering. */ |
122 * explicitly set up LCD filtering. |
118 /* */ |
123 * |
119 /* Note that this feature is covered by several Microsoft patents */ |
124 * Note that this feature is covered by several Microsoft patents and |
120 /* and should not be activated in any default build of the library. */ |
125 * should not be activated in any default build of the library. When this |
121 /* When this macro is not defined, FreeType offers alternative LCD */ |
126 * macro is not defined, FreeType offers alternative LCD rendering |
122 /* rendering technology that produces excellent output without LCD */ |
127 * technology that produces excellent output without LCD filtering. |
123 /* filtering. */ |
128 */ |
124 /* */ |
|
125 /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ |
129 /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ |
126 |
130 |
127 |
131 |
128 /*************************************************************************/ |
132 /************************************************************************** |
129 /* */ |
133 * |
130 /* Many compilers provide a non-ANSI 64-bit data type that can be used */ |
134 * Many compilers provide a non-ANSI 64-bit data type that can be used by |
131 /* by FreeType to speed up some computations. However, this will create */ |
135 * FreeType to speed up some computations. However, this will create some |
132 /* some problems when compiling the library in strict ANSI mode. */ |
136 * problems when compiling the library in strict ANSI mode. |
133 /* */ |
137 * |
134 /* For this reason, the use of 64-bit integers is normally disabled when */ |
138 * For this reason, the use of 64-bit integers is normally disabled when |
135 /* the __STDC__ macro is defined. You can however disable this by */ |
139 * the `__STDC__` macro is defined. You can however disable this by |
136 /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */ |
140 * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here. |
137 /* */ |
141 * |
138 /* For most compilers, this will only create compilation warnings when */ |
142 * For most compilers, this will only create compilation warnings when |
139 /* building the library. */ |
143 * building the library. |
140 /* */ |
144 * |
141 /* ObNote: The compiler-specific 64-bit integers are detected in the */ |
145 * ObNote: The compiler-specific 64-bit integers are detected in the |
142 /* file `ftconfig.h' either statically or through the */ |
146 * file `ftconfig.h` either statically or through the `configure` |
143 /* `configure' script on supported platforms. */ |
147 * script on supported platforms. |
144 /* */ |
148 */ |
145 #undef FT_CONFIG_OPTION_FORCE_INT64 |
149 #undef FT_CONFIG_OPTION_FORCE_INT64 |
146 |
150 |
147 |
151 |
148 /*************************************************************************/ |
152 /************************************************************************** |
149 /* */ |
153 * |
150 /* If this macro is defined, do not try to use an assembler version of */ |
154 * If this macro is defined, do not try to use an assembler version of |
151 /* performance-critical functions (e.g. FT_MulFix). You should only do */ |
155 * performance-critical functions (e.g., @FT_MulFix). You should only do |
152 /* that to verify that the assembler function works properly, or to */ |
156 * that to verify that the assembler function works properly, or to execute |
153 /* execute benchmark tests of the various implementations. */ |
157 * benchmark tests of the various implementations. |
|
158 */ |
154 /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ |
159 /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ |
155 |
160 |
156 |
161 |
157 /*************************************************************************/ |
162 /************************************************************************** |
158 /* */ |
163 * |
159 /* If this macro is defined, try to use an inlined assembler version of */ |
164 * If this macro is defined, try to use an inlined assembler version of the |
160 /* the `FT_MulFix' function, which is a `hotspot' when loading and */ |
165 * @FT_MulFix function, which is a 'hotspot' when loading and hinting |
161 /* hinting glyphs, and which should be executed as fast as possible. */ |
166 * glyphs, and which should be executed as fast as possible. |
162 /* */ |
167 * |
163 /* Note that if your compiler or CPU is not supported, this will default */ |
168 * Note that if your compiler or CPU is not supported, this will default to |
164 /* to the standard and portable implementation found in `ftcalc.c'. */ |
169 * the standard and portable implementation found in `ftcalc.c`. |
165 /* */ |
170 */ |
166 #define FT_CONFIG_OPTION_INLINE_MULFIX |
171 #define FT_CONFIG_OPTION_INLINE_MULFIX |
167 |
172 |
168 |
173 |
169 /*************************************************************************/ |
174 /************************************************************************** |
170 /* */ |
175 * |
171 /* LZW-compressed file support. */ |
176 * LZW-compressed file support. |
172 /* */ |
177 * |
173 /* FreeType now handles font files that have been compressed with the */ |
178 * FreeType now handles font files that have been compressed with the |
174 /* `compress' program. This is mostly used to parse many of the PCF */ |
179 * `compress` program. This is mostly used to parse many of the PCF |
175 /* files that come with various X11 distributions. The implementation */ |
180 * files that come with various X11 distributions. The implementation |
176 /* uses NetBSD's `zopen' to partially uncompress the file on the fly */ |
181 * uses NetBSD's `zopen` to partially uncompress the file on the fly (see |
177 /* (see src/lzw/ftgzip.c). */ |
182 * `src/lzw/ftgzip.c`). |
178 /* */ |
183 * |
179 /* Define this macro if you want to enable this `feature'. */ |
184 * Define this macro if you want to enable this 'feature'. |
180 /* */ |
185 */ |
181 /* #define FT_CONFIG_OPTION_USE_LZW */ |
186 /* #define FT_CONFIG_OPTION_USE_LZW */ |
182 |
187 |
183 |
188 |
184 /*************************************************************************/ |
189 /************************************************************************** |
185 /* */ |
190 * |
186 /* Gzip-compressed file support. */ |
191 * Gzip-compressed file support. |
187 /* */ |
192 * |
188 /* FreeType now handles font files that have been compressed with the */ |
193 * FreeType now handles font files that have been compressed with the |
189 /* `gzip' program. This is mostly used to parse many of the PCF files */ |
194 * `gzip` program. This is mostly used to parse many of the PCF files |
190 /* that come with XFree86. The implementation uses `zlib' to */ |
195 * that come with XFree86. The implementation uses 'zlib' to partially |
191 /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */ |
196 * uncompress the file on the fly (see `src/gzip/ftgzip.c`). |
192 /* */ |
197 * |
193 /* Define this macro if you want to enable this `feature'. See also */ |
198 * Define this macro if you want to enable this 'feature'. See also the |
194 /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */ |
199 * macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below. |
195 /* */ |
200 */ |
196 /* #define FT_CONFIG_OPTION_USE_ZLIB */ |
201 /* #define FT_CONFIG_OPTION_USE_ZLIB */ |
197 |
202 |
198 |
203 |
199 /*************************************************************************/ |
204 /************************************************************************** |
200 /* */ |
205 * |
201 /* ZLib library selection */ |
206 * ZLib library selection |
202 /* */ |
207 * |
203 /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */ |
208 * This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined. |
204 /* It allows FreeType's `ftgzip' component to link to the system's */ |
209 * It allows FreeType's 'ftgzip' component to link to the system's |
205 /* installation of the ZLib library. This is useful on systems like */ |
210 * installation of the ZLib library. This is useful on systems like |
206 /* Unix or VMS where it generally is already available. */ |
211 * Unix or VMS where it generally is already available. |
207 /* */ |
212 * |
208 /* If you let it undefined, the component will use its own copy */ |
213 * If you let it undefined, the component will use its own copy of the |
209 /* of the zlib sources instead. These have been modified to be */ |
214 * zlib sources instead. These have been modified to be included |
210 /* included directly within the component and *not* export external */ |
215 * directly within the component and **not** export external function |
211 /* function names. This allows you to link any program with FreeType */ |
216 * names. This allows you to link any program with FreeType _and_ ZLib |
212 /* _and_ ZLib without linking conflicts. */ |
217 * without linking conflicts. |
213 /* */ |
218 * |
214 /* Do not #undef this macro here since the build system might define */ |
219 * Do not `#undef` this macro here since the build system might define |
215 /* it for certain configurations only. */ |
220 * it for certain configurations only. |
216 /* */ |
221 * |
217 /* If you use a build system like cmake or the `configure' script, */ |
222 * If you use a build system like cmake or the `configure` script, |
218 /* options set by those programs have precendence, overwriting the */ |
223 * options set by those programs have precedence, overwriting the value |
219 /* value here with the configured one. */ |
224 * here with the configured one. |
220 /* */ |
225 */ |
221 /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ |
226 /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ |
222 |
227 |
223 |
228 |
224 /*************************************************************************/ |
229 /************************************************************************** |
225 /* */ |
230 * |
226 /* Bzip2-compressed file support. */ |
231 * Bzip2-compressed file support. |
227 /* */ |
232 * |
228 /* FreeType now handles font files that have been compressed with the */ |
233 * FreeType now handles font files that have been compressed with the |
229 /* `bzip2' program. This is mostly used to parse many of the PCF */ |
234 * `bzip2` program. This is mostly used to parse many of the PCF files |
230 /* files that come with XFree86. The implementation uses `libbz2' to */ |
235 * that come with XFree86. The implementation uses `libbz2` to partially |
231 /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */ |
236 * uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary |
232 /* Contrary to gzip, bzip2 currently is not included and need to use */ |
237 * to gzip, bzip2 currently is not included and need to use the system |
233 /* the system available bzip2 implementation. */ |
238 * available bzip2 implementation. |
234 /* */ |
239 * |
235 /* Define this macro if you want to enable this `feature'. */ |
240 * Define this macro if you want to enable this 'feature'. |
236 /* */ |
241 * |
237 /* If you use a build system like cmake or the `configure' script, */ |
242 * If you use a build system like cmake or the `configure` script, |
238 /* options set by those programs have precendence, overwriting the */ |
243 * options set by those programs have precedence, overwriting the value |
239 /* value here with the configured one. */ |
244 * here with the configured one. |
240 /* */ |
245 */ |
241 /* #define FT_CONFIG_OPTION_USE_BZIP2 */ |
246 /* #define FT_CONFIG_OPTION_USE_BZIP2 */ |
242 |
247 |
243 |
248 |
244 /*************************************************************************/ |
249 /************************************************************************** |
245 /* */ |
250 * |
246 /* Define to disable the use of file stream functions and types, FILE, */ |
251 * Define to disable the use of file stream functions and types, `FILE`, |
247 /* fopen() etc. Enables the use of smaller system libraries on embedded */ |
252 * `fopen`, etc. Enables the use of smaller system libraries on embedded |
248 /* systems that have multiple system libraries, some with or without */ |
253 * systems that have multiple system libraries, some with or without file |
249 /* file stream support, in the cases where file stream support is not */ |
254 * stream support, in the cases where file stream support is not necessary |
250 /* necessary such as memory loading of font files. */ |
255 * such as memory loading of font files. |
251 /* */ |
256 */ |
252 /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ |
257 /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ |
253 |
258 |
254 |
259 |
255 /*************************************************************************/ |
260 /************************************************************************** |
256 /* */ |
261 * |
257 /* PNG bitmap support. */ |
262 * PNG bitmap support. |
258 /* */ |
263 * |
259 /* FreeType now handles loading color bitmap glyphs in the PNG format. */ |
264 * FreeType now handles loading color bitmap glyphs in the PNG format. |
260 /* This requires help from the external libpng library. Uncompressed */ |
265 * This requires help from the external libpng library. Uncompressed |
261 /* color bitmaps do not need any external libraries and will be */ |
266 * color bitmaps do not need any external libraries and will be supported |
262 /* supported regardless of this configuration. */ |
267 * regardless of this configuration. |
263 /* */ |
268 * |
264 /* Define this macro if you want to enable this `feature'. */ |
269 * Define this macro if you want to enable this 'feature'. |
265 /* */ |
270 * |
266 /* If you use a build system like cmake or the `configure' script, */ |
271 * If you use a build system like cmake or the `configure` script, |
267 /* options set by those programs have precendence, overwriting the */ |
272 * options set by those programs have precedence, overwriting the value |
268 /* value here with the configured one. */ |
273 * here with the configured one. |
269 /* */ |
274 */ |
270 /* #define FT_CONFIG_OPTION_USE_PNG */ |
275 /* #define FT_CONFIG_OPTION_USE_PNG */ |
271 |
276 |
272 |
277 |
273 /*************************************************************************/ |
278 /************************************************************************** |
274 /* */ |
279 * |
275 /* HarfBuzz support. */ |
280 * HarfBuzz support. |
276 /* */ |
281 * |
277 /* FreeType uses the HarfBuzz library to improve auto-hinting of */ |
282 * FreeType uses the HarfBuzz library to improve auto-hinting of OpenType |
278 /* OpenType fonts. If available, many glyphs not directly addressable */ |
283 * fonts. If available, many glyphs not directly addressable by a font's |
279 /* by a font's character map will be hinted also. */ |
284 * character map will be hinted also. |
280 /* */ |
285 * |
281 /* Define this macro if you want to enable this `feature'. */ |
286 * Define this macro if you want to enable this 'feature'. |
282 /* */ |
287 * |
283 /* If you use a build system like cmake or the `configure' script, */ |
288 * If you use a build system like cmake or the `configure` script, |
284 /* options set by those programs have precendence, overwriting the */ |
289 * options set by those programs have precedence, overwriting the value |
285 /* value here with the configured one. */ |
290 * here with the configured one. |
286 /* */ |
291 */ |
287 /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ |
292 /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ |
288 |
293 |
289 |
294 |
290 /*************************************************************************/ |
295 /************************************************************************** |
291 /* */ |
296 * |
292 /* Glyph Postscript Names handling */ |
297 * Glyph Postscript Names handling |
293 /* */ |
298 * |
294 /* By default, FreeType 2 is compiled with the `psnames' module. This */ |
299 * By default, FreeType 2 is compiled with the 'psnames' module. This |
295 /* module is in charge of converting a glyph name string into a */ |
300 * module is in charge of converting a glyph name string into a Unicode |
296 /* Unicode value, or return a Macintosh standard glyph name for the */ |
301 * value, or return a Macintosh standard glyph name for the use with the |
297 /* use with the TrueType `post' table. */ |
302 * TrueType 'post' table. |
298 /* */ |
303 * |
299 /* Undefine this macro if you do not want `psnames' compiled in your */ |
304 * Undefine this macro if you do not want 'psnames' compiled in your |
300 /* build of FreeType. This has the following effects: */ |
305 * build of FreeType. This has the following effects: |
301 /* */ |
306 * |
302 /* - The TrueType driver will provide its own set of glyph names, */ |
307 * - The TrueType driver will provide its own set of glyph names, if you |
303 /* if you build it to support postscript names in the TrueType */ |
308 * build it to support postscript names in the TrueType 'post' table, |
304 /* `post' table, but will not synthesize a missing Unicode charmap. */ |
309 * but will not synthesize a missing Unicode charmap. |
305 /* */ |
310 * |
306 /* - The Type 1 driver will not be able to synthesize a Unicode */ |
311 * - The Type~1 driver will not be able to synthesize a Unicode charmap |
307 /* charmap out of the glyphs found in the fonts. */ |
312 * out of the glyphs found in the fonts. |
308 /* */ |
313 * |
309 /* You would normally undefine this configuration macro when building */ |
314 * You would normally undefine this configuration macro when building a |
310 /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */ |
315 * version of FreeType that doesn't contain a Type~1 or CFF driver. |
311 /* */ |
316 */ |
312 #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES |
317 #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES |
313 |
318 |
314 |
319 |
315 /*************************************************************************/ |
320 /************************************************************************** |
316 /* */ |
321 * |
317 /* Postscript Names to Unicode Values support */ |
322 * Postscript Names to Unicode Values support |
318 /* */ |
323 * |
319 /* By default, FreeType 2 is built with the `PSNames' module compiled */ |
324 * By default, FreeType~2 is built with the 'psnames' module compiled in. |
320 /* in. Among other things, the module is used to convert a glyph name */ |
325 * Among other things, the module is used to convert a glyph name into a |
321 /* into a Unicode value. This is especially useful in order to */ |
326 * Unicode value. This is especially useful in order to synthesize on |
322 /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */ |
327 * the fly a Unicode charmap from the CFF/Type~1 driver through a big |
323 /* through a big table named the `Adobe Glyph List' (AGL). */ |
328 * table named the 'Adobe Glyph List' (AGL). |
324 /* */ |
329 * |
325 /* Undefine this macro if you do not want the Adobe Glyph List */ |
330 * Undefine this macro if you do not want the Adobe Glyph List compiled |
326 /* compiled in your `PSNames' module. The Type 1 driver will not be */ |
331 * in your 'psnames' module. The Type~1 driver will not be able to |
327 /* able to synthesize a Unicode charmap out of the glyphs found in the */ |
332 * synthesize a Unicode charmap out of the glyphs found in the fonts. |
328 /* fonts. */ |
333 */ |
329 /* */ |
|
330 #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST |
334 #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST |
331 |
335 |
332 |
336 |
333 /*************************************************************************/ |
337 /************************************************************************** |
334 /* */ |
338 * |
335 /* Support for Mac fonts */ |
339 * Support for Mac fonts |
336 /* */ |
340 * |
337 /* Define this macro if you want support for outline fonts in Mac */ |
341 * Define this macro if you want support for outline fonts in Mac format |
338 /* format (mac dfont, mac resource, macbinary containing a mac */ |
342 * (mac dfont, mac resource, macbinary containing a mac resource) on |
339 /* resource) on non-Mac platforms. */ |
343 * non-Mac platforms. |
340 /* */ |
344 * |
341 /* Note that the `FOND' resource isn't checked. */ |
345 * Note that the 'FOND' resource isn't checked. |
342 /* */ |
346 */ |
343 #define FT_CONFIG_OPTION_MAC_FONTS |
347 #define FT_CONFIG_OPTION_MAC_FONTS |
344 |
348 |
345 |
349 |
346 /*************************************************************************/ |
350 /************************************************************************** |
347 /* */ |
351 * |
348 /* Guessing methods to access embedded resource forks */ |
352 * Guessing methods to access embedded resource forks |
349 /* */ |
353 * |
350 /* Enable extra Mac fonts support on non-Mac platforms (e.g. */ |
354 * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux). |
351 /* GNU/Linux). */ |
355 * |
352 /* */ |
356 * Resource forks which include fonts data are stored sometimes in |
353 /* Resource forks which include fonts data are stored sometimes in */ |
357 * locations which users or developers don't expected. In some cases, |
354 /* locations which users or developers don't expected. In some cases, */ |
358 * resource forks start with some offset from the head of a file. In |
355 /* resource forks start with some offset from the head of a file. In */ |
359 * other cases, the actual resource fork is stored in file different from |
356 /* other cases, the actual resource fork is stored in file different */ |
360 * what the user specifies. If this option is activated, FreeType tries |
357 /* from what the user specifies. If this option is activated, */ |
361 * to guess whether such offsets or different file names must be used. |
358 /* FreeType tries to guess whether such offsets or different file */ |
362 * |
359 /* names must be used. */ |
363 * Note that normal, direct access of resource forks is controlled via |
360 /* */ |
364 * the `FT_CONFIG_OPTION_MAC_FONTS` option. |
361 /* Note that normal, direct access of resource forks is controlled via */ |
365 */ |
362 /* the FT_CONFIG_OPTION_MAC_FONTS option. */ |
|
363 /* */ |
|
364 #ifdef FT_CONFIG_OPTION_MAC_FONTS |
366 #ifdef FT_CONFIG_OPTION_MAC_FONTS |
365 #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK |
367 #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK |
366 #endif |
368 #endif |
367 |
369 |
368 |
370 |
369 /*************************************************************************/ |
371 /************************************************************************** |
370 /* */ |
372 * |
371 /* Allow the use of FT_Incremental_Interface to load typefaces that */ |
373 * Allow the use of `FT_Incremental_Interface` to load typefaces that |
372 /* contain no glyph data, but supply it via a callback function. */ |
374 * contain no glyph data, but supply it via a callback function. This is |
373 /* This is required by clients supporting document formats which */ |
375 * required by clients supporting document formats which supply font data |
374 /* supply font data incrementally as the document is parsed, such */ |
376 * incrementally as the document is parsed, such as the Ghostscript |
375 /* as the Ghostscript interpreter for the PostScript language. */ |
377 * interpreter for the PostScript language. |
376 /* */ |
378 */ |
377 #define FT_CONFIG_OPTION_INCREMENTAL |
379 #define FT_CONFIG_OPTION_INCREMENTAL |
378 |
380 |
379 |
381 |
380 /*************************************************************************/ |
382 /************************************************************************** |
381 /* */ |
383 * |
382 /* The size in bytes of the render pool used by the scan-line converter */ |
384 * The size in bytes of the render pool used by the scan-line converter to |
383 /* to do all of its work. */ |
385 * do all of its work. |
384 /* */ |
386 */ |
385 #define FT_RENDER_POOL_SIZE 16384L |
387 #define FT_RENDER_POOL_SIZE 16384L |
386 |
388 |
387 |
389 |
388 /*************************************************************************/ |
390 /************************************************************************** |
389 /* */ |
391 * |
390 /* FT_MAX_MODULES */ |
392 * FT_MAX_MODULES |
391 /* */ |
393 * |
392 /* The maximum number of modules that can be registered in a single */ |
394 * The maximum number of modules that can be registered in a single |
393 /* FreeType library object. 32 is the default. */ |
395 * FreeType library object. 32~is the default. |
394 /* */ |
396 */ |
395 #define FT_MAX_MODULES 32 |
397 #define FT_MAX_MODULES 32 |
396 |
398 |
397 |
399 |
398 /*************************************************************************/ |
400 /************************************************************************** |
399 /* */ |
401 * |
400 /* Debug level */ |
402 * Debug level |
401 /* */ |
403 * |
402 /* FreeType can be compiled in debug or trace mode. In debug mode, */ |
404 * FreeType can be compiled in debug or trace mode. In debug mode, |
403 /* errors are reported through the `ftdebug' component. In trace */ |
405 * errors are reported through the 'ftdebug' component. In trace mode, |
404 /* mode, additional messages are sent to the standard output during */ |
406 * additional messages are sent to the standard output during execution. |
405 /* execution. */ |
407 * |
406 /* */ |
408 * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode. |
407 /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ |
409 * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode. |
408 /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ |
410 * |
409 /* */ |
411 * Don't define any of these macros to compile in 'release' mode! |
410 /* Don't define any of these macros to compile in `release' mode! */ |
412 * |
411 /* */ |
413 * Do not `#undef` these macros here since the build system might define |
412 /* Do not #undef these macros here since the build system might define */ |
414 * them for certain configurations only. |
413 /* them for certain configurations only. */ |
415 */ |
414 /* */ |
|
415 /* #define FT_DEBUG_LEVEL_ERROR */ |
416 /* #define FT_DEBUG_LEVEL_ERROR */ |
416 /* #define FT_DEBUG_LEVEL_TRACE */ |
417 /* #define FT_DEBUG_LEVEL_TRACE */ |
417 |
418 |
418 |
419 |
419 /*************************************************************************/ |
420 /************************************************************************** |
420 /* */ |
421 * |
421 /* Autofitter debugging */ |
422 * Autofitter debugging |
422 /* */ |
423 * |
423 /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */ |
424 * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to |
424 /* control the autofitter behaviour for debugging purposes with global */ |
425 * control the autofitter behaviour for debugging purposes with global |
425 /* boolean variables (consequently, you should *never* enable this */ |
426 * boolean variables (consequently, you should **never** enable this |
426 /* while compiling in `release' mode): */ |
427 * while compiling in 'release' mode): |
427 /* */ |
428 * |
428 /* _af_debug_disable_horz_hints */ |
429 * ``` |
429 /* _af_debug_disable_vert_hints */ |
430 * _af_debug_disable_horz_hints |
430 /* _af_debug_disable_blue_hints */ |
431 * _af_debug_disable_vert_hints |
431 /* */ |
432 * _af_debug_disable_blue_hints |
432 /* Additionally, the following functions provide dumps of various */ |
433 * ``` |
433 /* internal autofit structures to stdout (using `printf'): */ |
434 * |
434 /* */ |
435 * Additionally, the following functions provide dumps of various |
435 /* af_glyph_hints_dump_points */ |
436 * internal autofit structures to stdout (using `printf`): |
436 /* af_glyph_hints_dump_segments */ |
437 * |
437 /* af_glyph_hints_dump_edges */ |
438 * ``` |
438 /* af_glyph_hints_get_num_segments */ |
439 * af_glyph_hints_dump_points |
439 /* af_glyph_hints_get_segment_offset */ |
440 * af_glyph_hints_dump_segments |
440 /* */ |
441 * af_glyph_hints_dump_edges |
441 /* As an argument, they use another global variable: */ |
442 * af_glyph_hints_get_num_segments |
442 /* */ |
443 * af_glyph_hints_get_segment_offset |
443 /* _af_debug_hints */ |
444 * ``` |
444 /* */ |
445 * |
445 /* Please have a look at the `ftgrid' demo program to see how those */ |
446 * As an argument, they use another global variable: |
446 /* variables and macros should be used. */ |
447 * |
447 /* */ |
448 * ``` |
448 /* Do not #undef these macros here since the build system might define */ |
449 * _af_debug_hints |
449 /* them for certain configurations only. */ |
450 * ``` |
450 /* */ |
451 * |
|
452 * Please have a look at the `ftgrid` demo program to see how those |
|
453 * variables and macros should be used. |
|
454 * |
|
455 * Do not `#undef` these macros here since the build system might define |
|
456 * them for certain configurations only. |
|
457 */ |
451 /* #define FT_DEBUG_AUTOFIT */ |
458 /* #define FT_DEBUG_AUTOFIT */ |
452 |
459 |
453 |
460 |
454 /*************************************************************************/ |
461 /************************************************************************** |
455 /* */ |
462 * |
456 /* Memory Debugging */ |
463 * Memory Debugging |
457 /* */ |
464 * |
458 /* FreeType now comes with an integrated memory debugger that is */ |
465 * FreeType now comes with an integrated memory debugger that is capable |
459 /* capable of detecting simple errors like memory leaks or double */ |
466 * of detecting simple errors like memory leaks or double deletes. To |
460 /* deletes. To compile it within your build of the library, you */ |
467 * compile it within your build of the library, you should define |
461 /* should define FT_DEBUG_MEMORY here. */ |
468 * `FT_DEBUG_MEMORY` here. |
462 /* */ |
469 * |
463 /* Note that the memory debugger is only activated at runtime when */ |
470 * Note that the memory debugger is only activated at runtime when when |
464 /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */ |
471 * the _environment_ variable `FT2_DEBUG_MEMORY` is defined also! |
465 /* */ |
472 * |
466 /* Do not #undef this macro here since the build system might define */ |
473 * Do not `#undef` this macro here since the build system might define it |
467 /* it for certain configurations only. */ |
474 * for certain configurations only. |
468 /* */ |
475 */ |
469 /* #define FT_DEBUG_MEMORY */ |
476 /* #define FT_DEBUG_MEMORY */ |
470 |
477 |
471 |
478 |
472 /*************************************************************************/ |
479 /************************************************************************** |
473 /* */ |
480 * |
474 /* Module errors */ |
481 * Module errors |
475 /* */ |
482 * |
476 /* If this macro is set (which is _not_ the default), the higher byte */ |
483 * If this macro is set (which is _not_ the default), the higher byte of |
477 /* of an error code gives the module in which the error has occurred, */ |
484 * an error code gives the module in which the error has occurred, while |
478 /* while the lower byte is the real error code. */ |
485 * the lower byte is the real error code. |
479 /* */ |
486 * |
480 /* Setting this macro makes sense for debugging purposes only, since */ |
487 * Setting this macro makes sense for debugging purposes only, since it |
481 /* it would break source compatibility of certain programs that use */ |
488 * would break source compatibility of certain programs that use |
482 /* FreeType 2. */ |
489 * FreeType~2. |
483 /* */ |
490 * |
484 /* More details can be found in the files ftmoderr.h and fterrors.h. */ |
491 * More details can be found in the files `ftmoderr.h` and `fterrors.h`. |
485 /* */ |
492 */ |
486 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS |
493 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS |
487 |
494 |
488 |
495 |
489 /*************************************************************************/ |
496 /************************************************************************** |
490 /* */ |
497 * |
491 /* Position Independent Code */ |
498 * Error Strings |
492 /* */ |
499 * |
493 /* If this macro is set (which is _not_ the default), FreeType2 will */ |
500 * If this macro is set, `FT_Error_String` will return meaningful |
494 /* avoid creating constants that require address fixups. Instead the */ |
501 * descriptions. This is not enabled by default to reduce the overall |
495 /* constants will be moved into a struct and additional intialization */ |
502 * size of FreeType. |
496 /* code will be used. */ |
503 * |
497 /* */ |
504 * More details can be found in the file `fterrors.h`. |
498 /* Setting this macro is needed for systems that prohibit address */ |
505 */ |
499 /* fixups, such as BREW. [Note that standard compilers like gcc or */ |
506 /* #define FT_CONFIG_OPTION_ERROR_STRINGS */ |
500 /* clang handle PIC generation automatically; you don't have to set */ |
|
501 /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */ |
|
502 /* compilers.] */ |
|
503 /* */ |
|
504 /* Note that FT_CONFIG_OPTION_PIC support is not available for all */ |
|
505 /* modules (see `modules.cfg' for a complete list). For building with */ |
|
506 /* FT_CONFIG_OPTION_PIC support, do the following. */ |
|
507 /* */ |
|
508 /* 0. Clone the repository. */ |
|
509 /* 1. Define FT_CONFIG_OPTION_PIC. */ |
|
510 /* 2. Remove all subdirectories in `src' that don't have */ |
|
511 /* FT_CONFIG_OPTION_PIC support. */ |
|
512 /* 3. Comment out the corresponding modules in `modules.cfg'. */ |
|
513 /* 4. Compile. */ |
|
514 /* */ |
|
515 /* #define FT_CONFIG_OPTION_PIC */ |
|
516 |
507 |
517 |
508 |
518 /*************************************************************************/ |
509 /*************************************************************************/ |
519 /*************************************************************************/ |
510 /*************************************************************************/ |
520 /**** ****/ |
511 /**** ****/ |
585 /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ |
586 /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ |
586 /**** ****/ |
587 /**** ****/ |
587 /*************************************************************************/ |
588 /*************************************************************************/ |
588 /*************************************************************************/ |
589 /*************************************************************************/ |
589 |
590 |
590 /*************************************************************************/ |
591 /************************************************************************** |
591 /* */ |
592 * |
592 /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */ |
593 * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a |
593 /* a bytecode interpreter in the TrueType driver. */ |
594 * bytecode interpreter in the TrueType driver. |
594 /* */ |
595 * |
595 /* By undefining this, you will only compile the code necessary to load */ |
596 * By undefining this, you will only compile the code necessary to load |
596 /* TrueType glyphs without hinting. */ |
597 * TrueType glyphs without hinting. |
597 /* */ |
598 * |
598 /* Do not #undef this macro here, since the build system might */ |
599 * Do not `#undef` this macro here, since the build system might define it |
599 /* define it for certain configurations only. */ |
600 * for certain configurations only. |
600 /* */ |
601 */ |
601 #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER |
602 #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER |
602 |
603 |
603 |
604 |
604 /*************************************************************************/ |
605 /************************************************************************** |
605 /* */ |
606 * |
606 /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */ |
607 * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile |
607 /* subpixel hinting support into the TrueType driver. This modifies the */ |
608 * subpixel hinting support into the TrueType driver. This modifies the |
608 /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */ |
609 * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is |
609 /* requested. */ |
610 * requested. |
610 /* */ |
611 * |
611 /* In particular, it modifies the bytecode interpreter to interpret (or */ |
612 * In particular, it modifies the bytecode interpreter to interpret (or |
612 /* not) instructions in a certain way so that all TrueType fonts look */ |
613 * not) instructions in a certain way so that all TrueType fonts look like |
613 /* like they do in a Windows ClearType (DirectWrite) environment. See */ |
614 * they do in a Windows ClearType (DirectWrite) environment. See [1] for a |
614 /* [1] for a technical overview on what this means. See `ttinterp.h' */ |
615 * technical overview on what this means. See `ttinterp.h` for more |
615 /* for more details on the LEAN option. */ |
616 * details on the LEAN option. |
616 /* */ |
617 * |
617 /* There are three possible values. */ |
618 * There are three possible values. |
618 /* */ |
619 * |
619 /* Value 1: */ |
620 * Value 1: |
620 /* This value is associated with the `Infinality' moniker, */ |
621 * This value is associated with the 'Infinality' moniker, contributed by |
621 /* contributed by an individual nicknamed Infinality with the goal of */ |
622 * an individual nicknamed Infinality with the goal of making TrueType |
622 /* making TrueType fonts render better than on Windows. A high */ |
623 * fonts render better than on Windows. A high amount of configurability |
623 /* amount of configurability and flexibility, down to rules for */ |
624 * and flexibility, down to rules for single glyphs in fonts, but also |
624 /* single glyphs in fonts, but also very slow. Its experimental and */ |
625 * very slow. Its experimental and slow nature and the original |
625 /* slow nature and the original developer losing interest meant that */ |
626 * developer losing interest meant that this option was never enabled in |
626 /* this option was never enabled in default builds. */ |
627 * default builds. |
627 /* */ |
628 * |
628 /* The corresponding interpreter version is v38. */ |
629 * The corresponding interpreter version is v38. |
629 /* */ |
630 * |
630 /* Value 2: */ |
631 * Value 2: |
631 /* The new default mode for the TrueType driver. The Infinality code */ |
632 * The new default mode for the TrueType driver. The Infinality code |
632 /* base was stripped to the bare minimum and all configurability */ |
633 * base was stripped to the bare minimum and all configurability removed |
633 /* removed in the name of speed and simplicity. The configurability */ |
634 * in the name of speed and simplicity. The configurability was mainly |
634 /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */ |
635 * aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'. |
635 /* Courier. Legacy fonts are fonts that modify vertical stems to */ |
636 * Legacy fonts are fonts that modify vertical stems to achieve clean |
636 /* achieve clean black-and-white bitmaps. The new mode focuses on */ |
637 * black-and-white bitmaps. The new mode focuses on applying a minimal |
637 /* applying a minimal set of rules to all fonts indiscriminately so */ |
638 * set of rules to all fonts indiscriminately so that modern and web |
638 /* that modern and web fonts render well while legacy fonts render */ |
639 * fonts render well while legacy fonts render okay. |
639 /* okay. */ |
640 * |
640 /* */ |
641 * The corresponding interpreter version is v40. |
641 /* The corresponding interpreter version is v40. */ |
642 * |
642 /* */ |
643 * Value 3: |
643 /* Value 3: */ |
644 * Compile both, making both v38 and v40 available (the latter is the |
644 /* Compile both, making both v38 and v40 available (the latter is the */ |
645 * default). |
645 /* default). */ |
646 * |
646 /* */ |
647 * By undefining these, you get rendering behavior like on Windows without |
647 /* By undefining these, you get rendering behavior like on Windows */ |
648 * ClearType, i.e., Windows XP without ClearType enabled and Win9x |
648 /* without ClearType, i.e., Windows XP without ClearType enabled and */ |
649 * (interpreter version v35). Or not, depending on how much hinting blood |
649 /* Win9x (interpreter version v35). Or not, depending on how much */ |
650 * and testing tears the font designer put into a given font. If you |
650 /* hinting blood and testing tears the font designer put into a given */ |
651 * define one or both subpixel hinting options, you can switch between |
651 /* font. If you define one or both subpixel hinting options, you can */ |
652 * between v35 and the ones you define (using `FT_Property_Set`). |
652 /* switch between between v35 and the ones you define (using */ |
653 * |
653 /* `FT_Property_Set'). */ |
654 * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be |
654 /* */ |
655 * defined. |
655 /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */ |
656 * |
656 /* defined. */ |
657 * [1] |
657 /* */ |
658 * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx |
658 /* [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */ |
659 */ |
659 /* */ |
|
660 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */ |
660 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */ |
661 #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 |
661 #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 |
662 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */ |
662 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */ |
663 |
663 |
664 |
664 |
665 /*************************************************************************/ |
665 /************************************************************************** |
666 /* */ |
666 * |
667 /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */ |
667 * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the |
668 /* TrueType glyph loader to use Apple's definition of how to handle */ |
668 * TrueType glyph loader to use Apple's definition of how to handle |
669 /* component offsets in composite glyphs. */ |
669 * component offsets in composite glyphs. |
670 /* */ |
670 * |
671 /* Apple and MS disagree on the default behavior of component offsets */ |
671 * Apple and MS disagree on the default behavior of component offsets in |
672 /* in composites. Apple says that they should be scaled by the scaling */ |
672 * composites. Apple says that they should be scaled by the scaling |
673 /* factors in the transformation matrix (roughly, it's more complex) */ |
673 * factors in the transformation matrix (roughly, it's more complex) while |
674 /* while MS says they should not. OpenType defines two bits in the */ |
674 * MS says they should not. OpenType defines two bits in the composite |
675 /* composite flags array which can be used to disambiguate, but old */ |
675 * flags array which can be used to disambiguate, but old fonts will not |
676 /* fonts will not have them. */ |
676 * have them. |
677 /* */ |
677 * |
678 /* https://www.microsoft.com/typography/otspec/glyf.htm */ |
678 * https://www.microsoft.com/typography/otspec/glyf.htm |
679 /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */ |
679 * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html |
680 /* */ |
680 */ |
681 #undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED |
681 #undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED |
682 |
682 |
683 |
683 |
684 /*************************************************************************/ |
684 /************************************************************************** |
685 /* */ |
685 * |
686 /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */ |
686 * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support |
687 /* support for Apple's distortable font technology (fvar, gvar, cvar, */ |
687 * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and |
688 /* and avar tables). This has many similarities to Type 1 Multiple */ |
688 * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType |
689 /* Masters support. */ |
689 * also. This has many similarities to Type~1 Multiple Masters support. |
690 /* */ |
690 */ |
691 #define TT_CONFIG_OPTION_GX_VAR_SUPPORT |
691 #define TT_CONFIG_OPTION_GX_VAR_SUPPORT |
692 |
692 |
693 |
693 |
694 /*************************************************************************/ |
694 /************************************************************************** |
695 /* */ |
695 * |
696 /* Define TT_CONFIG_OPTION_BDF if you want to include support for */ |
696 * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an |
697 /* an embedded `BDF ' table within SFNT-based bitmap formats. */ |
697 * embedded 'BDF~' table within SFNT-based bitmap formats. |
698 /* */ |
698 */ |
699 /* #define TT_CONFIG_OPTION_BDF */ |
699 /* #define TT_CONFIG_OPTION_BDF */ |
700 |
700 |
701 |
701 |
702 /*************************************************************************/ |
702 /************************************************************************** |
703 /* */ |
703 * |
704 /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */ |
704 * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum |
705 /* number of bytecode instructions executed for a single run of the */ |
705 * number of bytecode instructions executed for a single run of the |
706 /* bytecode interpreter, needed to prevent infinite loops. You don't */ |
706 * bytecode interpreter, needed to prevent infinite loops. You don't want |
707 /* want to change this except for very special situations (e.g., making */ |
707 * to change this except for very special situations (e.g., making a |
708 /* a library fuzzer spend less time to handle broken fonts). */ |
708 * library fuzzer spend less time to handle broken fonts). |
709 /* */ |
709 * |
710 /* It is not expected that this value is ever modified by a configuring */ |
710 * It is not expected that this value is ever modified by a configuring |
711 /* script; instead, it gets surrounded with #ifndef ... #endif so that */ |
711 * script; instead, it gets surrounded with `#ifndef ... #endif` so that |
712 /* the value can be set as a preprocessor option on the compiler's */ |
712 * the value can be set as a preprocessor option on the compiler's command |
713 /* command line. */ |
713 * line. |
714 /* */ |
714 */ |
715 #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES |
715 #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES |
716 #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L |
716 #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L |
717 #endif |
717 #endif |
718 |
718 |
719 |
719 |