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