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