1 /****************************************************************************
2  *
3  * ftoption.h
4  *
5  *   User-selectable configuration macros (specification only).
6  *
7  * Copyright (C) 1996-2022 by
8  * David Turner, Robert Wilhelm, and Werner Lemberg.
9  *
10  * This file is part of the FreeType project, and may only be used,
11  * modified, and distributed under the terms of the FreeType project
12  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
13  * this file you indicate that you have read the license and
14  * understand and accept it fully.
15  *
16  */
17 
18 #ifndef FTOPTION_H_
19 #define FTOPTION_H_
20 
21 #include <ft2build.h>
22 
23 FT_BEGIN_HEADER
24 
25 /**************************************************************************
26  *
27  *                USER-SELECTABLE CONFIGURATION MACROS
28  *
29  * This file contains the default configuration macro definitions for a
30  * standard build of the FreeType library.  There are three ways to use
31  * this file to build project-specific versions of the library:
32  *
33  * - You can modify this file by hand, but this is not recommended in
34  *   cases where you would like to build several versions of the library
35  *   from a single source directory.
36  *
37  * - You can put a copy of this file in your build directory, more
38  *   precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is
39  *   the name of a directory that is included _before_ the FreeType include
40  *   path during compilation.
41  *
42  *   The default FreeType Makefiles use the build directory
43  *   `builds/<system>` by default, but you can easily change that for your
44  *   own projects.
45  *
46  * - Copy the file <ft2build.h> to `$BUILD/ft2build.h` and modify it
47  *   slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate
48  *   this file during the build.  For example,
49  *
50  *   ```
51  *     #define FT_CONFIG_OPTIONS_H  <myftoptions.h>
52  *     #include <freetype/config/ftheader.h>
53  *   ```
54  *
55  *   will use `$BUILD/myftoptions.h` instead of this file for macro
56  *   definitions.
57  *
58  *   Note also that you can similarly pre-define the macro
59  *   `FT_CONFIG_MODULES_H` used to locate the file listing of the modules
60  *   that are statically linked to the library at compile time.  By
61  *   default, this file is `<freetype/config/ftmodule.h>`.
62  *
63  * We highly recommend using the third method whenever possible.
64  *
65  */
66 
67 /*************************************************************************/
68 /*************************************************************************/
69 /****                                                                 ****/
70 /**** G E N E R A L   F R E E T Y P E   2   C O N F I G U R A T I O N ****/
71 /****                                                                 ****/
72 /*************************************************************************/
73 /*************************************************************************/
74 
75 /*#************************************************************************
76  *
77  * If you enable this configuration option, FreeType recognizes an
78  * environment variable called `FREETYPE_PROPERTIES`, which can be used to
79  * control the various font drivers and modules.  The controllable
80  * properties are listed in the section @properties.
81  *
82  * You have to undefine this configuration option on platforms that lack
83  * the concept of environment variables (and thus don't have the `getenv`
84  * function), for example Windows CE.
85  *
86  * `FREETYPE_PROPERTIES` has the following syntax form (broken here into
87  * multiple lines for better readability).
88  *
89  * ```
90  *   <optional whitespace>
91  *   <module-name1> ':'
92  *   <property-name1> '=' <property-value1>
93  *   <whitespace>
94  *   <module-name2> ':'
95  *   <property-name2> '=' <property-value2>
96  *   ...
97  * ```
98  *
99  * Example:
100  *
101  * ```
102  *   FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
103  *                       cff:no-stem-darkening=1
104  * ```
105  *
106  */
107 #define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
108 
109 /**************************************************************************
110  *
111  * Uncomment the line below if you want to activate LCD rendering
112  * technology similar to ClearType in this build of the library.  This
113  * technology triples the resolution in the direction color subpixels.  To
114  * mitigate color fringes inherent to this technology, you also need to
115  * explicitly set up LCD filtering.
116  *
117  * When this macro is not defined, FreeType offers alternative LCD
118  * rendering technology that produces excellent output.
119  */
120 /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
121 
122 /**************************************************************************
123  *
124  * Many compilers provide a non-ANSI 64-bit data type that can be used by
125  * FreeType to speed up some computations.  However, this will create some
126  * problems when compiling the library in strict ANSI mode.
127  *
128  * For this reason, the use of 64-bit integers is normally disabled when
129  * the `__STDC__` macro is defined.  You can however disable this by
130  * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here.
131  *
132  * For most compilers, this will only create compilation warnings when
133  * building the library.
134  *
135  * ObNote: The compiler-specific 64-bit integers are detected in the
136  *         file `ftconfig.h` either statically or through the `configure`
137  *         script on supported platforms.
138  */
139 #undef FT_CONFIG_OPTION_FORCE_INT64
140 
141 /**************************************************************************
142  *
143  * If this macro is defined, do not try to use an assembler version of
144  * performance-critical functions (e.g., @FT_MulFix).  You should only do
145  * that to verify that the assembler function works properly, or to execute
146  * benchmark tests of the various implementations.
147  */
148 /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
149 
150 /**************************************************************************
151  *
152  * If this macro is defined, try to use an inlined assembler version of the
153  * @FT_MulFix function, which is a 'hotspot' when loading and hinting
154  * glyphs, and which should be executed as fast as possible.
155  *
156  * Note that if your compiler or CPU is not supported, this will default to
157  * the standard and portable implementation found in `ftcalc.c`.
158  */
159 #define FT_CONFIG_OPTION_INLINE_MULFIX
160 
161 /**************************************************************************
162  *
163  * LZW-compressed file support.
164  *
165  *   FreeType now handles font files that have been compressed with the
166  *   `compress` program.  This is mostly used to parse many of the PCF
167  *   files that come with various X11 distributions.  The implementation
168  *   uses NetBSD's `zopen` to partially uncompress the file on the fly (see
169  *   `src/lzw/ftgzip.c`).
170  *
171  *   Define this macro if you want to enable this 'feature'.
172  */
173 #define FT_CONFIG_OPTION_USE_LZW
174 
175 /**************************************************************************
176  *
177  * Gzip-compressed file support.
178  *
179  *   FreeType now handles font files that have been compressed with the
180  *   `gzip` program.  This is mostly used to parse many of the PCF files
181  *   that come with XFree86.  The implementation uses 'zlib' to partially
182  *   uncompress the file on the fly (see `src/gzip/ftgzip.c`).
183  *
184  *   Define this macro if you want to enable this 'feature'.  See also the
185  *   macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below.
186  */
187 #define FT_CONFIG_OPTION_USE_ZLIB
188 
189 /**************************************************************************
190  *
191  * ZLib library selection
192  *
193  *   This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined.
194  *   It allows FreeType's 'ftgzip' component to link to the system's
195  *   installation of the ZLib library.  This is useful on systems like
196  *   Unix or VMS where it generally is already available.
197  *
198  *   If you let it undefined, the component will use its own copy of the
199  *   zlib sources instead.  These have been modified to be included
200  *   directly within the component and **not** export external function
201  *   names.  This allows you to link any program with FreeType _and_ ZLib
202  *   without linking conflicts.
203  *
204  *   Do not `#undef` this macro here since the build system might define
205  *   it for certain configurations only.
206  *
207  *   If you use a build system like cmake or the `configure` script,
208  *   options set by those programs have precedence, overwriting the value
209  *   here with the configured one.
210  *
211  *   If you use the GNU make build system directly (that is, without the
212  *   `configure` script) and you define this macro, you also have to pass
213  *   `SYSTEM_ZLIB=yes` as an argument to make.
214  */
215 /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
216 
217 /**************************************************************************
218  *
219  * Bzip2-compressed file support.
220  *
221  *   FreeType now handles font files that have been compressed with the
222  *   `bzip2` program.  This is mostly used to parse many of the PCF files
223  *   that come with XFree86.  The implementation uses `libbz2` to partially
224  *   uncompress the file on the fly (see `src/bzip2/ftbzip2.c`).  Contrary
225  *   to gzip, bzip2 currently is not included and need to use the system
226  *   available bzip2 implementation.
227  *
228  *   Define this macro if you want to enable this 'feature'.
229  *
230  *   If you use a build system like cmake or the `configure` script,
231  *   options set by those programs have precedence, overwriting the value
232  *   here with the configured one.
233  */
234 /* #define FT_CONFIG_OPTION_USE_BZIP2 */
235 
236 /**************************************************************************
237  *
238  * Define to disable the use of file stream functions and types, `FILE`,
239  * `fopen`, etc.  Enables the use of smaller system libraries on embedded
240  * systems that have multiple system libraries, some with or without file
241  * stream support, in the cases where file stream support is not necessary
242  * such as memory loading of font files.
243  */
244 /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
245 
246 /**************************************************************************
247  *
248  * PNG bitmap support.
249  *
250  *   FreeType now handles loading color bitmap glyphs in the PNG format.
251  *   This requires help from the external libpng library.  Uncompressed
252  *   color bitmaps do not need any external libraries and will be supported
253  *   regardless of this configuration.
254  *
255  *   Define this macro if you want to enable this 'feature'.
256  *
257  *   If you use a build system like cmake or the `configure` script,
258  *   options set by those programs have precedence, overwriting the value
259  *   here with the configured one.
260  */
261 #define FT_CONFIG_OPTION_USE_PNG
262 
263 /**************************************************************************
264  *
265  * HarfBuzz support.
266  *
267  *   FreeType uses the HarfBuzz library to improve auto-hinting of OpenType
268  *   fonts.  If available, many glyphs not directly addressable by a font's
269  *   character map will be hinted also.
270  *
271  *   Define this macro if you want to enable this 'feature'.
272  *
273  *   If you use a build system like cmake or the `configure` script,
274  *   options set by those programs have precedence, overwriting the value
275  *   here with the configured one.
276  */
277 /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
278 
279 /**************************************************************************
280  *
281  * Brotli support.
282  *
283  *   FreeType uses the Brotli library to provide support for decompressing
284  *   WOFF2 streams.
285  *
286  *   Define this macro if you want to enable this 'feature'.
287  *
288  *   If you use a build system like cmake or the `configure` script,
289  *   options set by those programs have precedence, overwriting the value
290  *   here with the configured one.
291  */
292 /* #define FT_CONFIG_OPTION_USE_BROTLI */
293 
294 /**************************************************************************
295  *
296  * Glyph Postscript Names handling
297  *
298  *   By default, FreeType 2 is compiled with the 'psnames' module.  This
299  *   module is in charge of converting a glyph name string into a Unicode
300  *   value, or return a Macintosh standard glyph name for the use with the
301  *   TrueType 'post' table.
302  *
303  *   Undefine this macro if you do not want 'psnames' compiled in your
304  *   build of FreeType.  This has the following effects:
305  *
306  *   - The TrueType driver will provide its own set of glyph names, if you
307  *     build it to support postscript names in the TrueType 'post' table,
308  *     but will not synthesize a missing Unicode charmap.
309  *
310  *   - The Type~1 driver will not be able to synthesize a Unicode charmap
311  *     out of the glyphs found in the fonts.
312  *
313  *   You would normally undefine this configuration macro when building a
314  *   version of FreeType that doesn't contain a Type~1 or CFF driver.
315  */
316 #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
317 
318 /**************************************************************************
319  *
320  * Postscript Names to Unicode Values support
321  *
322  *   By default, FreeType~2 is built with the 'psnames' module compiled in.
323  *   Among other things, the module is used to convert a glyph name into a
324  *   Unicode value.  This is especially useful in order to synthesize on
325  *   the fly a Unicode charmap from the CFF/Type~1 driver through a big
326  *   table named the 'Adobe Glyph List' (AGL).
327  *
328  *   Undefine this macro if you do not want the Adobe Glyph List compiled
329  *   in your 'psnames' module.  The Type~1 driver will not be able to
330  *   synthesize a Unicode charmap out of the glyphs found in the fonts.
331  */
332 #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
333 
334 /**************************************************************************
335  *
336  * Support for Mac fonts
337  *
338  *   Define this macro if you want support for outline fonts in Mac format
339  *   (mac dfont, mac resource, macbinary containing a mac resource) on
340  *   non-Mac platforms.
341  *
342  *   Note that the 'FOND' resource isn't checked.
343  */
344 /* #define FT_CONFIG_OPTION_MAC_FONTS */
345 
346 /**************************************************************************
347  *
348  * Guessing methods to access embedded resource forks
349  *
350  *   Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux).
351  *
352  *   Resource forks which include fonts data are stored sometimes in
353  *   locations which users or developers don't expected.  In some cases,
354  *   resource forks start with some offset from the head of a file.  In
355  *   other cases, the actual resource fork is stored in file different from
356  *   what the user specifies.  If this option is activated, FreeType tries
357  *   to guess whether such offsets or different file names must be used.
358  *
359  *   Note that normal, direct access of resource forks is controlled via
360  *   the `FT_CONFIG_OPTION_MAC_FONTS` option.
361  */
362 #ifdef FT_CONFIG_OPTION_MAC_FONTS
363     #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
364 #endif
365 
366 /**************************************************************************
367  *
368  * Allow the use of `FT_Incremental_Interface` to load typefaces that
369  * contain no glyph data, but supply it via a callback function.  This is
370  * required by clients supporting document formats which supply font data
371  * incrementally as the document is parsed, such as the Ghostscript
372  * interpreter for the PostScript language.
373  */
374 #define FT_CONFIG_OPTION_INCREMENTAL
375 
376 /**************************************************************************
377  *
378  * The size in bytes of the render pool used by the scan-line converter to
379  * do all of its work.
380  */
381 #define FT_RENDER_POOL_SIZE  16384L
382 
383 /**************************************************************************
384  *
385  * FT_MAX_MODULES
386  *
387  *   The maximum number of modules that can be registered in a single
388  *   FreeType library object.  32~is the default.
389  */
390 #define FT_MAX_MODULES  32
391 
392 /**************************************************************************
393  *
394  * Debug level
395  *
396  *   FreeType can be compiled in debug or trace mode.  In debug mode,
397  *   errors are reported through the 'ftdebug' component.  In trace mode,
398  *   additional messages are sent to the standard output during execution.
399  *
400  *   Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode.
401  *   Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode.
402  *
403  *   Don't define any of these macros to compile in 'release' mode!
404  *
405  *   Do not `#undef` these macros here since the build system might define
406  *   them for certain configurations only.
407  */
408 /* #define FT_DEBUG_LEVEL_ERROR */
409 /* #define FT_DEBUG_LEVEL_TRACE */
410 
411 /**************************************************************************
412  *
413  * Logging
414  *
415  *   Compiling FreeType in debug or trace mode makes FreeType write error
416  *   and trace log messages to `stderr`.  Enabling this macro
417  *   automatically forces the `FT_DEBUG_LEVEL_ERROR` and
418  *   `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and
419  *   trace log messages to a file instead of `stderr`.  For writing logs
420  *   to a file, FreeType uses an the external `dlg` library (the source
421  *   code is in `src/dlg`).
422  *
423  *   This option needs a C99 compiler.
424  */
425 /* #define FT_DEBUG_LOGGING */
426 
427 /**************************************************************************
428  *
429  * Autofitter debugging
430  *
431  *   If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to
432  *   control the autofitter behaviour for debugging purposes with global
433  *   boolean variables (consequently, you should **never** enable this
434  *   while compiling in 'release' mode):
435  *
436  *   ```
437  *     _af_debug_disable_horz_hints
438  *     _af_debug_disable_vert_hints
439  *     _af_debug_disable_blue_hints
440  *   ```
441  *
442  *   Additionally, the following functions provide dumps of various
443  *   internal autofit structures to stdout (using `printf`):
444  *
445  *   ```
446  *     af_glyph_hints_dump_points
447  *     af_glyph_hints_dump_segments
448  *     af_glyph_hints_dump_edges
449  *     af_glyph_hints_get_num_segments
450  *     af_glyph_hints_get_segment_offset
451  *   ```
452  *
453  *   As an argument, they use another global variable:
454  *
455  *   ```
456  *     _af_debug_hints
457  *   ```
458  *
459  *   Please have a look at the `ftgrid` demo program to see how those
460  *   variables and macros should be used.
461  *
462  *   Do not `#undef` these macros here since the build system might define
463  *   them for certain configurations only.
464  */
465 /* #define FT_DEBUG_AUTOFIT */
466 
467 /**************************************************************************
468  *
469  * Memory Debugging
470  *
471  *   FreeType now comes with an integrated memory debugger that is capable
472  *   of detecting simple errors like memory leaks or double deletes.  To
473  *   compile it within your build of the library, you should define
474  *   `FT_DEBUG_MEMORY` here.
475  *
476  *   Note that the memory debugger is only activated at runtime when when
477  *   the _environment_ variable `FT2_DEBUG_MEMORY` is defined also!
478  *
479  *   Do not `#undef` this macro here since the build system might define it
480  *   for certain configurations only.
481  */
482 /* #define FT_DEBUG_MEMORY */
483 
484 /**************************************************************************
485  *
486  * Module errors
487  *
488  *   If this macro is set (which is _not_ the default), the higher byte of
489  *   an error code gives the module in which the error has occurred, while
490  *   the lower byte is the real error code.
491  *
492  *   Setting this macro makes sense for debugging purposes only, since it
493  *   would break source compatibility of certain programs that use
494  *   FreeType~2.
495  *
496  *   More details can be found in the files `ftmoderr.h` and `fterrors.h`.
497  */
498 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
499 
500 /**************************************************************************
501  *
502  * OpenType SVG Glyph Support
503  *
504  *   Setting this macro enables support for OpenType SVG glyphs.  By
505  *   default, FreeType can only fetch SVG documents.  However, it can also
506  *   render them if external rendering hook functions are plugged in at
507  *   runtime.
508  *
509  *   More details on the hooks can be found in file `otsvg.h`.
510  */
511 #define FT_CONFIG_OPTION_SVG
512 
513 /**************************************************************************
514  *
515  * Error Strings
516  *
517  *   If this macro is set, `FT_Error_String` will return meaningful
518  *   descriptions.  This is not enabled by default to reduce the overall
519  *   size of FreeType.
520  *
521  *   More details can be found in the file `fterrors.h`.
522  */
523 #define FT_CONFIG_OPTION_ERROR_STRINGS
524 
525 /*************************************************************************/
526 /*************************************************************************/
527 /****                                                                 ****/
528 /****        S F N T   D R I V E R    C O N F I G U R A T I O N       ****/
529 /****                                                                 ****/
530 /*************************************************************************/
531 /*************************************************************************/
532 
533 /**************************************************************************
534  *
535  * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support
536  * embedded bitmaps in all formats using the 'sfnt' module (namely
537  * TrueType~& OpenType).
538  */
539 #define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
540 
541 /**************************************************************************
542  *
543  * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored
544  * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt'
545  * module (namely TrueType~& OpenType).
546  */
547 #define TT_CONFIG_OPTION_COLOR_LAYERS
548 
549 /**************************************************************************
550  *
551  * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to
552  * load and enumerate the glyph Postscript names in a TrueType or OpenType
553  * file.
554  *
555  * Note that when you do not compile the 'psnames' module by undefining the
556  * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will
557  * contain additional code used to read the PS Names table from a font.
558  *
559  * (By default, the module uses 'psnames' to extract glyph names.)
560  */
561 #define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
562 
563 /**************************************************************************
564  *
565  * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access
566  * the internal name table in a SFNT-based format like TrueType or
567  * OpenType.  The name table contains various strings used to describe the
568  * font, like family name, copyright, version, etc.  It does not contain
569  * any glyph name though.
570  *
571  * Accessing SFNT names is done through the functions declared in
572  * `ftsnames.h`.
573  */
574 #define TT_CONFIG_OPTION_SFNT_NAMES
575 
576 /**************************************************************************
577  *
578  * TrueType CMap support
579  *
580  *   Here you can fine-tune which TrueType CMap table format shall be
581  *   supported.
582  */
583 #define TT_CONFIG_CMAP_FORMAT_0
584 #define TT_CONFIG_CMAP_FORMAT_2
585 #define TT_CONFIG_CMAP_FORMAT_4
586 #define TT_CONFIG_CMAP_FORMAT_6
587 #define TT_CONFIG_CMAP_FORMAT_8
588 #define TT_CONFIG_CMAP_FORMAT_10
589 #define TT_CONFIG_CMAP_FORMAT_12
590 #define TT_CONFIG_CMAP_FORMAT_13
591 #define TT_CONFIG_CMAP_FORMAT_14
592 
593 /*************************************************************************/
594 /*************************************************************************/
595 /****                                                                 ****/
596 /****    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   ****/
597 /****                                                                 ****/
598 /*************************************************************************/
599 /*************************************************************************/
600 
601 /**************************************************************************
602  *
603  * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a
604  * bytecode interpreter in the TrueType driver.
605  *
606  * By undefining this, you will only compile the code necessary to load
607  * TrueType glyphs without hinting.
608  *
609  * Do not `#undef` this macro here, since the build system might define it
610  * for certain configurations only.
611  */
612 #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
613 
614 /**************************************************************************
615  *
616  * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile
617  * subpixel hinting support into the TrueType driver.  This modifies the
618  * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is
619  * requested.
620  *
621  * In particular, it modifies the bytecode interpreter to interpret (or
622  * not) instructions in a certain way so that all TrueType fonts look like
623  * they do in a Windows ClearType (DirectWrite) environment.  See [1] for a
624  * technical overview on what this means.  See `ttinterp.h` for more
625  * details on the LEAN option.
626  *
627  * There are three possible values.
628  *
629  * Value 1:
630  *   This value is associated with the 'Infinality' moniker, contributed by
631  *   an individual nicknamed Infinality with the goal of making TrueType
632  *   fonts render better than on Windows.  A high amount of configurability
633  *   and flexibility, down to rules for single glyphs in fonts, but also
634  *   very slow.  Its experimental and slow nature and the original
635  *   developer losing interest meant that this option was never enabled in
636  *   default builds.
637  *
638  *   The corresponding interpreter version is v38.
639  *
640  * Value 2:
641  *   The new default mode for the TrueType driver.  The Infinality code
642  *   base was stripped to the bare minimum and all configurability removed
643  *   in the name of speed and simplicity.  The configurability was mainly
644  *   aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'.
645  *   Legacy fonts are fonts that modify vertical stems to achieve clean
646  *   black-and-white bitmaps.  The new mode focuses on applying a minimal
647  *   set of rules to all fonts indiscriminately so that modern and web
648  *   fonts render well while legacy fonts render okay.
649  *
650  *   The corresponding interpreter version is v40.
651  *
652  * Value 3:
653  *   Compile both, making both v38 and v40 available (the latter is the
654  *   default).
655  *
656  * By undefining these, you get rendering behavior like on Windows without
657  * ClearType, i.e., Windows XP without ClearType enabled and Win9x
658  * (interpreter version v35).  Or not, depending on how much hinting blood
659  * and testing tears the font designer put into a given font.  If you
660  * define one or both subpixel hinting options, you can switch between
661  * between v35 and the ones you define (using `FT_Property_Set`).
662  *
663  * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be
664  * defined.
665  *
666  * [1]
667  * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
668  */
669 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  1         */
670 #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  2
671 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  ( 1 | 2 ) */
672 
673 /**************************************************************************
674  *
675  * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the
676  * TrueType glyph loader to use Apple's definition of how to handle
677  * component offsets in composite glyphs.
678  *
679  * Apple and MS disagree on the default behavior of component offsets in
680  * composites.  Apple says that they should be scaled by the scaling
681  * factors in the transformation matrix (roughly, it's more complex) while
682  * MS says they should not.  OpenType defines two bits in the composite
683  * flags array which can be used to disambiguate, but old fonts will not
684  * have them.
685  *
686  *   https://www.microsoft.com/typography/otspec/glyf.htm
687  *   https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html
688  */
689 #undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
690 
691 /**************************************************************************
692  *
693  * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support
694  * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and
695  * 'avar' tables).  Tagged 'Font Variations', this is now part of OpenType
696  * also.  This has many similarities to Type~1 Multiple Masters support.
697  */
698 #define TT_CONFIG_OPTION_GX_VAR_SUPPORT
699 
700 /**************************************************************************
701  *
702  * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an
703  * embedded 'BDF~' table within SFNT-based bitmap formats.
704  */
705 #define TT_CONFIG_OPTION_BDF
706 
707 /**************************************************************************
708  *
709  * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum
710  * number of bytecode instructions executed for a single run of the
711  * bytecode interpreter, needed to prevent infinite loops.  You don't want
712  * to change this except for very special situations (e.g., making a
713  * library fuzzer spend less time to handle broken fonts).
714  *
715  * It is not expected that this value is ever modified by a configuring
716  * script; instead, it gets surrounded with `#ifndef ... #endif` so that
717  * the value can be set as a preprocessor option on the compiler's command
718  * line.
719  */
720 #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
721     #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES  1000000L
722 #endif
723 
724 /*************************************************************************/
725 /*************************************************************************/
726 /****                                                                 ****/
727 /****      T Y P E 1   D R I V E R    C O N F I G U R A T I O N       ****/
728 /****                                                                 ****/
729 /*************************************************************************/
730 /*************************************************************************/
731 
732 /**************************************************************************
733  *
734  * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays
735  * in the Type~1 stream (see `t1load.c`).  A minimum of~4 is required.
736  */
737 #define T1_MAX_DICT_DEPTH  5
738 
739 /**************************************************************************
740  *
741  * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine
742  * calls during glyph loading.
743  */
744 #define T1_MAX_SUBRS_CALLS  16
745 
746 /**************************************************************************
747  *
748  * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity.  A
749  * minimum of~16 is required.
750  *
751  * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character
752  * set) needs 256.
753  */
754 #define T1_MAX_CHARSTRINGS_OPERANDS  256
755 
756 /**************************************************************************
757  *
758  * Define this configuration macro if you want to prevent the compilation
759  * of the 't1afm' module, which is in charge of reading Type~1 AFM files
760  * into an existing face.  Note that if set, the Type~1 driver will be
761  * unable to produce kerning distances.
762  */
763 #undef T1_CONFIG_OPTION_NO_AFM
764 
765 /**************************************************************************
766  *
767  * Define this configuration macro if you want to prevent the compilation
768  * of the Multiple Masters font support in the Type~1 driver.
769  */
770 #undef T1_CONFIG_OPTION_NO_MM_SUPPORT
771 
772 /**************************************************************************
773  *
774  * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1
775  * engine gets compiled into FreeType.  If defined, it is possible to
776  * switch between the two engines using the `hinting-engine` property of
777  * the 'type1' driver module.
778  */
779 /* #define T1_CONFIG_OPTION_OLD_ENGINE */
780 
781 /*************************************************************************/
782 /*************************************************************************/
783 /****                                                                 ****/
784 /****         C F F   D R I V E R    C O N F I G U R A T I O N        ****/
785 /****                                                                 ****/
786 /*************************************************************************/
787 /*************************************************************************/
788 
789 /**************************************************************************
790  *
791  * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is
792  * possible to set up the default values of the four control points that
793  * define the stem darkening behaviour of the (new) CFF engine.  For more
794  * details please read the documentation of the `darkening-parameters`
795  * property (file `ftdriver.h`), which allows the control at run-time.
796  *
797  * Do **not** undefine these macros!
798  */
799 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1   500
800 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1   400
801 
802 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2  1000
803 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2   275
804 
805 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3  1667
806 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3   275
807 
808 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4  2333
809 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4     0
810 
811 /**************************************************************************
812  *
813  * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine
814  * gets compiled into FreeType.  If defined, it is possible to switch
815  * between the two engines using the `hinting-engine` property of the 'cff'
816  * driver module.
817  */
818 /* #define CFF_CONFIG_OPTION_OLD_ENGINE */
819 
820 /*************************************************************************/
821 /*************************************************************************/
822 /****                                                                 ****/
823 /****         P C F   D R I V E R    C O N F I G U R A T I O N        ****/
824 /****                                                                 ****/
825 /*************************************************************************/
826 /*************************************************************************/
827 
828 /**************************************************************************
829  *
830  * There are many PCF fonts just called 'Fixed' which look completely
831  * different, and which have nothing to do with each other.  When selecting
832  * 'Fixed' in KDE or Gnome one gets results that appear rather random, the
833  * style changes often if one changes the size and one cannot select some
834  * fonts at all.  This option makes the 'pcf' module prepend the foundry
835  * name (plus a space) to the family name.
836  *
837  * We also check whether we have 'wide' characters; all put together, we
838  * get family names like 'Sony Fixed' or 'Misc Fixed Wide'.
839  *
840  * If this option is activated, it can be controlled with the
841  * `no-long-family-names` property of the 'pcf' driver module.
842  */
843 /* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
844 
845 /*************************************************************************/
846 /*************************************************************************/
847 /****                                                                 ****/
848 /****    A U T O F I T   M O D U L E    C O N F I G U R A T I O N     ****/
849 /****                                                                 ****/
850 /*************************************************************************/
851 /*************************************************************************/
852 
853 /**************************************************************************
854  *
855  * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script
856  * support.
857  */
858 #define AF_CONFIG_OPTION_CJK
859 
860 /**************************************************************************
861  *
862  * Compile 'autofit' module with fallback Indic script support, covering
863  * some scripts that the 'latin' submodule of the 'autofit' module doesn't
864  * (yet) handle.  Currently, this needs option `AF_CONFIG_OPTION_CJK`.
865  */
866 #ifdef AF_CONFIG_OPTION_CJK
867     #define AF_CONFIG_OPTION_INDIC
868 #endif
869 
870 /**************************************************************************
871  *
872  * Use TrueType-like size metrics for 'light' auto-hinting.
873  *
874  * It is strongly recommended to avoid this option, which exists only to
875  * help some legacy applications retain its appearance and behaviour with
876  * respect to auto-hinted TrueType fonts.
877  *
878  * The very reason this option exists at all are GNU/Linux distributions
879  * like Fedora that did not un-patch the following change (which was
880  * present in FreeType between versions 2.4.6 and 2.7.1, inclusive).
881  *
882  * ```
883  *   2011-07-16  Steven Chu  <steven.f.chu@gmail.com>
884  *
885  *     [truetype] Fix metrics on size request for scalable fonts.
886  * ```
887  *
888  * This problematic commit is now reverted (more or less).
889  */
890 /* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */
891 
892 /* */
893 
894 /*
895  * This macro is obsolete.  Support has been removed in FreeType version
896  * 2.5.
897  */
898 /* #define FT_CONFIG_OPTION_OLD_INTERNALS */
899 
900 /*
901  * The next three macros are defined if native TrueType hinting is
902  * requested by the definitions above.  Don't change this.
903  */
904 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
905     #define  TT_USE_BYTECODE_INTERPRETER
906 
907     #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
908         #if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
909             #define  TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
910         #endif
911 
912         #if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
913             #define  TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
914         #endif
915     #endif
916 #endif
917 
918 /*
919  * The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this
920  * version of FreeType has support for 'COLR' v1 API.  This definition is
921  * useful to FreeType clients that want to build in support for 'COLR' v1
922  * depending on a tip-of-tree checkout before it is officially released in
923  * FreeType, and while the feature cannot yet be tested against using
924  * version macros.  Don't change this macro.  This may be removed once the
925  * feature is in a FreeType release version and version macros can be used
926  * to test for availability.
927  */
928 #ifdef TT_CONFIG_OPTION_COLOR_LAYERS
929     #define  TT_SUPPORT_COLRV1
930 #endif
931 
932 /*
933  * Check CFF darkening parameters.  The checks are the same as in function
934  * `cff_property_set` in file `cffdrivr.c`.
935  */
936 #if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0   || \
937     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0   || \
938     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0   || \
939     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0   || \
940     \
941     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0   || \
942     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0   || \
943     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0   || \
944     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0   || \
945     \
946     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 >        \
947     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2     || \
948     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 >        \
949     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3     || \
950     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 >        \
951     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4     || \
952     \
953     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \
954     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \
955     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \
956     CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500
957     #error "Invalid CFF darkening parameters!"
958 #endif
959 
960 FT_END_HEADER
961 
962 #endif /* FTOPTION_H_ */
963 
964 /* END */
965