|
|
|||
File indexing completed on 2026-05-31 08:25:33
0001 /**************************************************************************** 0002 * 0003 * ftoption.h 0004 * 0005 * User-selectable configuration macros (specification only). 0006 * 0007 * Copyright (C) 1996-2025 by 0008 * David Turner, Robert Wilhelm, and Werner Lemberg. 0009 * 0010 * This file is part of the FreeType project, and may only be used, 0011 * modified, and distributed under the terms of the FreeType project 0012 * license, LICENSE.TXT. By continuing to use, modify, or distribute 0013 * this file you indicate that you have read the license and 0014 * understand and accept it fully. 0015 * 0016 */ 0017 0018 0019 #ifndef FTOPTION_H_ 0020 #define FTOPTION_H_ 0021 0022 0023 #include <ft2build.h> 0024 0025 0026 FT_BEGIN_HEADER 0027 0028 /************************************************************************** 0029 * 0030 * USER-SELECTABLE CONFIGURATION MACROS 0031 * 0032 * This file contains the default configuration macro definitions for a 0033 * standard build of the FreeType library. There are three ways to use 0034 * this file to build project-specific versions of the library: 0035 * 0036 * - You can modify this file by hand, but this is not recommended in 0037 * cases where you would like to build several versions of the library 0038 * from a single source directory. 0039 * 0040 * - You can put a copy of this file in your build directory, more 0041 * precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is 0042 * the name of a directory that is included _before_ the FreeType include 0043 * path during compilation. 0044 * 0045 * The default FreeType Makefiles use the build directory 0046 * `builds/<system>` by default, but you can easily change that for your 0047 * own projects. 0048 * 0049 * - Copy the file <ft2build.h> to `$BUILD/ft2build.h` and modify it 0050 * slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate 0051 * this file during the build. For example, 0052 * 0053 * ``` 0054 * #define FT_CONFIG_OPTIONS_H <myftoptions.h> 0055 * #include <freetype/config/ftheader.h> 0056 * ``` 0057 * 0058 * will use `$BUILD/myftoptions.h` instead of this file for macro 0059 * definitions. 0060 * 0061 * Note also that you can similarly pre-define the macro 0062 * `FT_CONFIG_MODULES_H` used to locate the file listing of the modules 0063 * that are statically linked to the library at compile time. By 0064 * default, this file is `<freetype/config/ftmodule.h>`. 0065 * 0066 * We highly recommend using the third method whenever possible. 0067 * 0068 */ 0069 0070 0071 /*************************************************************************/ 0072 /*************************************************************************/ 0073 /**** ****/ 0074 /**** 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 ****/ 0075 /**** ****/ 0076 /*************************************************************************/ 0077 /*************************************************************************/ 0078 0079 0080 /*#************************************************************************ 0081 * 0082 * If you enable this configuration option, FreeType recognizes an 0083 * environment variable called `FREETYPE_PROPERTIES`, which can be used to 0084 * control the various font drivers and modules. The controllable 0085 * properties are listed in the section @properties. 0086 * 0087 * You have to undefine this configuration option on platforms that lack 0088 * the concept of environment variables (and thus don't have the `getenv` 0089 * function), for example Windows CE. 0090 * 0091 * `FREETYPE_PROPERTIES` has the following syntax form (broken here into 0092 * multiple lines for better readability). 0093 * 0094 * ``` 0095 * <optional whitespace> 0096 * <module-name1> ':' 0097 * <property-name1> '=' <property-value1> 0098 * <whitespace> 0099 * <module-name2> ':' 0100 * <property-name2> '=' <property-value2> 0101 * ... 0102 * ``` 0103 * 0104 * Example: 0105 * 0106 * ``` 0107 * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ 0108 * cff:no-stem-darkening=1 0109 * ``` 0110 * 0111 */ 0112 #define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES 0113 0114 0115 /************************************************************************** 0116 * 0117 * Uncomment the line below if you want to activate LCD rendering 0118 * technology similar to ClearType in this build of the library. This 0119 * technology triples the resolution in the direction color subpixels. To 0120 * mitigate color fringes inherent to this technology, you also need to 0121 * explicitly set up LCD filtering. 0122 * 0123 * When this macro is not defined, FreeType offers alternative LCD 0124 * rendering technology that produces excellent output. 0125 */ 0126 /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ 0127 0128 0129 /************************************************************************** 0130 * 0131 * Many compilers provide a non-ANSI 64-bit data type that can be used by 0132 * FreeType to speed up some computations. However, this will create some 0133 * problems when compiling the library in strict ANSI mode. 0134 * 0135 * For this reason, the use of 64-bit integers is normally disabled when 0136 * the `__STDC__` macro is defined. You can however disable this by 0137 * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here. 0138 * 0139 * For most compilers, this will only create compilation warnings when 0140 * building the library. 0141 * 0142 * ObNote: The compiler-specific 64-bit integers are detected in the 0143 * file `ftconfig.h` either statically or through the `configure` 0144 * script on supported platforms. 0145 */ 0146 #undef FT_CONFIG_OPTION_FORCE_INT64 0147 0148 0149 /************************************************************************** 0150 * 0151 * If this macro is defined, do not try to use an assembler version of 0152 * performance-critical functions (e.g., @FT_MulFix). You should only do 0153 * that to verify that the assembler function works properly, or to execute 0154 * benchmark tests of the various implementations. 0155 */ 0156 /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ 0157 0158 0159 /************************************************************************** 0160 * 0161 * If this macro is defined, try to use an inlined 64-bit or assembler 0162 * version of the @FT_MulFix function, which is a 'hotspot' when loading 0163 * and hinting glyphs, and which should be executed as fast as possible. 0164 * 0165 * If your compiler is not C99-compliant or CPU assembly is not supported, 0166 * you can disable this option. 0167 */ 0168 #define FT_CONFIG_OPTION_INLINE_MULFIX 0169 0170 0171 /************************************************************************** 0172 * 0173 * LZW-compressed file support. 0174 * 0175 * FreeType now handles font files that have been compressed with the 0176 * `compress` program. This is mostly used to parse many of the PCF 0177 * files that come with various X11 distributions. The implementation 0178 * uses NetBSD's `zopen` to partially uncompress the file on the fly (see 0179 * `src/lzw/ftgzip.c`). 0180 * 0181 * Define this macro if you want to enable this 'feature'. 0182 */ 0183 #define FT_CONFIG_OPTION_USE_LZW 0184 0185 0186 /************************************************************************** 0187 * 0188 * Gzip-compressed file support. 0189 * 0190 * FreeType now handles font files that have been compressed with the 0191 * `gzip` program. This is mostly used to parse many of the PCF files 0192 * that come with XFree86. The implementation uses 'zlib' to partially 0193 * uncompress the file on the fly (see `src/gzip/ftgzip.c`). 0194 * 0195 * Define this macro if you want to enable this 'feature'. See also the 0196 * macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below. 0197 */ 0198 #define FT_CONFIG_OPTION_USE_ZLIB 0199 0200 0201 /************************************************************************** 0202 * 0203 * ZLib library selection 0204 * 0205 * This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined. 0206 * It allows FreeType's 'ftgzip' component to link to the system's 0207 * installation of the ZLib library. This is useful on systems like 0208 * Unix or VMS where it generally is already available. 0209 * 0210 * If you let it undefined, the component will use its own copy of the 0211 * zlib sources instead. These have been modified to be included 0212 * directly within the component and **not** export external function 0213 * names. This allows you to link any program with FreeType _and_ ZLib 0214 * without linking conflicts. 0215 * 0216 * Do not `#undef` this macro here since the build system might define 0217 * it for certain configurations only. 0218 * 0219 * If you use a build system like cmake or the `configure` script, 0220 * options set by those programs have precedence, overwriting the value 0221 * here with the configured one. 0222 * 0223 * If you use the GNU make build system directly (that is, without the 0224 * `configure` script) and you define this macro, you also have to pass 0225 * `SYSTEM_ZLIB=yes` as an argument to make. 0226 */ 0227 /* #undef FT_CONFIG_OPTION_SYSTEM_ZLIB */ 0228 0229 0230 /************************************************************************** 0231 * 0232 * Bzip2-compressed file support. 0233 * 0234 * FreeType now handles font files that have been compressed with the 0235 * `bzip2` program. This is mostly used to parse many of the PCF files 0236 * that come with XFree86. The implementation uses `libbz2` to partially 0237 * uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary 0238 * to gzip, bzip2 currently is not included and need to use the system 0239 * available bzip2 implementation. 0240 * 0241 * Define this macro if you want to enable this 'feature'. 0242 * 0243 * If you use a build system like cmake or the `configure` script, 0244 * options set by those programs have precedence, overwriting the value 0245 * here with the configured one. 0246 */ 0247 #define FT_CONFIG_OPTION_USE_BZIP2 0248 0249 0250 /************************************************************************** 0251 * 0252 * Define to disable the use of file stream functions and types, `FILE`, 0253 * `fopen`, etc. Enables the use of smaller system libraries on embedded 0254 * systems that have multiple system libraries, some with or without file 0255 * stream support, in the cases where file stream support is not necessary 0256 * such as memory loading of font files. 0257 */ 0258 /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ 0259 0260 0261 /************************************************************************** 0262 * 0263 * PNG bitmap support. 0264 * 0265 * FreeType now handles loading color bitmap glyphs in the PNG format. 0266 * This requires help from the external libpng library. Uncompressed 0267 * color bitmaps do not need any external libraries and will be supported 0268 * regardless of this configuration. 0269 * 0270 * Define this macro if you want to enable this 'feature'. 0271 * 0272 * If you use a build system like cmake or the `configure` script, 0273 * options set by those programs have precedence, overwriting the value 0274 * here with the configured one. 0275 */ 0276 #define FT_CONFIG_OPTION_USE_PNG 0277 0278 0279 /************************************************************************** 0280 * 0281 * HarfBuzz support. 0282 * 0283 * FreeType uses the HarfBuzz library to improve auto-hinting of OpenType 0284 * fonts. If available, many glyphs not directly addressable by a font's 0285 * character map will be hinted also. 0286 * 0287 * Define this macro if you want to enable this 'feature'. 0288 * 0289 * If you use a build system like cmake or the `configure` script, 0290 * options set by those programs have precedence, overwriting the value 0291 * here with the configured one. 0292 */ 0293 /* #undef FT_CONFIG_OPTION_USE_HARFBUZZ */ 0294 0295 0296 /************************************************************************** 0297 * 0298 * HarfBuzz dynamic support. 0299 * 0300 * Define this macro if you want the HarfBuzz library to be loaded at 0301 * runtime instead of being linked to FreeType. 0302 * 0303 * This option has no effect if `FT_CONFIG_OPTION_USE_HARFBUZZ` is not 0304 * defined. 0305 * 0306 * When this option is enabled, FreeType will try to load the HarfBuzz 0307 * library at runtime, using `dlopen` or `LoadLibrary`, depending on the 0308 * platform. On Microsoft platforms, the library name looked up is 0309 * `libharfbuzz-0.dll`. On Apple platforms, the library name looked up 0310 * is `libharfbuzz.0.dylib`. On all other platforms, the library name 0311 * looked up is `libharfbuzz.so.0`. This name can be overridden by 0312 * defining the macro `FT_LIBHARFBUZZ` at FreeType compilation time. 0313 * 0314 * If you use a build system like cmake or the `configure` script, 0315 * options set by those programs have precedence, overwriting the value 0316 * here with the configured one. 0317 */ 0318 /* #undef FT_CONFIG_OPTION_USE_HARFBUZZ_DYNAMIC */ 0319 0320 0321 /************************************************************************** 0322 * 0323 * Brotli support. 0324 * 0325 * FreeType uses the Brotli library to provide support for decompressing 0326 * WOFF2 streams. 0327 * 0328 * Define this macro if you want to enable this 'feature'. 0329 * 0330 * If you use a build system like cmake or the `configure` script, 0331 * options set by those programs have precedence, overwriting the value 0332 * here with the configured one. 0333 */ 0334 /* #undef FT_CONFIG_OPTION_USE_BROTLI */ 0335 0336 0337 /************************************************************************** 0338 * 0339 * Glyph Postscript Names handling 0340 * 0341 * By default, FreeType 2 is compiled with the 'psnames' module. This 0342 * module is in charge of converting a glyph name string into a Unicode 0343 * value, or return a Macintosh standard glyph name for the use with the 0344 * TrueType 'post' table. 0345 * 0346 * Undefine this macro if you do not want 'psnames' compiled in your 0347 * build of FreeType. This has the following effects: 0348 * 0349 * - The TrueType driver will provide its own set of glyph names, if you 0350 * build it to support postscript names in the TrueType 'post' table, 0351 * but will not synthesize a missing Unicode charmap. 0352 * 0353 * - The Type~1 driver will not be able to synthesize a Unicode charmap 0354 * out of the glyphs found in the fonts. 0355 * 0356 * You would normally undefine this configuration macro when building a 0357 * version of FreeType that doesn't contain a Type~1 or CFF driver. 0358 */ 0359 #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES 0360 0361 0362 /************************************************************************** 0363 * 0364 * Postscript Names to Unicode Values support 0365 * 0366 * By default, FreeType~2 is built with the 'psnames' module compiled in. 0367 * Among other things, the module is used to convert a glyph name into a 0368 * Unicode value. This is especially useful in order to synthesize on 0369 * the fly a Unicode charmap from the CFF/Type~1 driver through a big 0370 * table named the 'Adobe Glyph List' (AGL). 0371 * 0372 * Undefine this macro if you do not want the Adobe Glyph List compiled 0373 * in your 'psnames' module. The Type~1 driver will not be able to 0374 * synthesize a Unicode charmap out of the glyphs found in the fonts. 0375 */ 0376 #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST 0377 0378 0379 /************************************************************************** 0380 * 0381 * Support for Mac fonts 0382 * 0383 * Define this macro if you want support for outline fonts in Mac format 0384 * (mac dfont, mac resource, macbinary containing a mac resource) on 0385 * non-Mac platforms. 0386 * 0387 * Note that the 'FOND' resource isn't checked. 0388 */ 0389 #define FT_CONFIG_OPTION_MAC_FONTS 0390 0391 0392 /************************************************************************** 0393 * 0394 * Guessing methods to access embedded resource forks 0395 * 0396 * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux). 0397 * 0398 * Resource forks which include fonts data are stored sometimes in 0399 * locations which users or developers don't expected. In some cases, 0400 * resource forks start with some offset from the head of a file. In 0401 * other cases, the actual resource fork is stored in file different from 0402 * what the user specifies. If this option is activated, FreeType tries 0403 * to guess whether such offsets or different file names must be used. 0404 * 0405 * Note that normal, direct access of resource forks is controlled via 0406 * the `FT_CONFIG_OPTION_MAC_FONTS` option. 0407 */ 0408 #ifdef FT_CONFIG_OPTION_MAC_FONTS 0409 #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK 0410 #endif 0411 0412 0413 /************************************************************************** 0414 * 0415 * Allow the use of `FT_Incremental_Interface` to load typefaces that 0416 * contain no glyph data, but supply it via a callback function. This is 0417 * required by clients supporting document formats which supply font data 0418 * incrementally as the document is parsed, such as the Ghostscript 0419 * interpreter for the PostScript language. 0420 */ 0421 #define FT_CONFIG_OPTION_INCREMENTAL 0422 0423 0424 /************************************************************************** 0425 * 0426 * The size in bytes of the render pool used by the scan-line converter to 0427 * do all of its work. 0428 */ 0429 #define FT_RENDER_POOL_SIZE 16384L 0430 0431 0432 /************************************************************************** 0433 * 0434 * FT_MAX_MODULES 0435 * 0436 * The maximum number of modules that can be registered in a single 0437 * FreeType library object. 32~is the default. 0438 */ 0439 #define FT_MAX_MODULES 32 0440 0441 0442 /************************************************************************** 0443 * 0444 * Debug level 0445 * 0446 * FreeType can be compiled in debug or trace mode. In debug mode, 0447 * errors are reported through the 'ftdebug' component. In trace mode, 0448 * additional messages are sent to the standard output during execution. 0449 * 0450 * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode. 0451 * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode. 0452 * 0453 * Don't define any of these macros to compile in 'release' mode! 0454 * 0455 * Do not `#undef` these macros here since the build system might define 0456 * them for certain configurations only. 0457 */ 0458 /* #define FT_DEBUG_LEVEL_ERROR */ 0459 /* #define FT_DEBUG_LEVEL_TRACE */ 0460 0461 0462 /************************************************************************** 0463 * 0464 * Logging 0465 * 0466 * Compiling FreeType in debug or trace mode makes FreeType write error 0467 * and trace log messages to `stderr`. Enabling this macro 0468 * automatically forces the `FT_DEBUG_LEVEL_ERROR` and 0469 * `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and 0470 * trace log messages to a file instead of `stderr`. For writing logs 0471 * to a file, FreeType uses an the external `dlg` library (the source 0472 * code is in `src/dlg`). 0473 * 0474 * This option needs a C99 compiler. 0475 */ 0476 /* #define FT_DEBUG_LOGGING */ 0477 0478 0479 /************************************************************************** 0480 * 0481 * Autofitter debugging 0482 * 0483 * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to 0484 * control the autofitter behaviour for debugging purposes with global 0485 * boolean variables (consequently, you should **never** enable this 0486 * while compiling in 'release' mode): 0487 * 0488 * ``` 0489 * af_debug_disable_horz_hints_ 0490 * af_debug_disable_vert_hints_ 0491 * af_debug_disable_blue_hints_ 0492 * ``` 0493 * 0494 * Additionally, the following functions provide dumps of various 0495 * internal autofit structures to stdout (using `printf`): 0496 * 0497 * ``` 0498 * af_glyph_hints_dump_points 0499 * af_glyph_hints_dump_segments 0500 * af_glyph_hints_dump_edges 0501 * af_glyph_hints_get_num_segments 0502 * af_glyph_hints_get_segment_offset 0503 * ``` 0504 * 0505 * As an argument, they use another global variable: 0506 * 0507 * ``` 0508 * af_debug_hints_ 0509 * ``` 0510 * 0511 * Please have a look at the `ftgrid` demo program to see how those 0512 * variables and macros should be used. 0513 * 0514 * Do not `#undef` these macros here since the build system might define 0515 * them for certain configurations only. 0516 */ 0517 /* #define FT_DEBUG_AUTOFIT */ 0518 0519 0520 /************************************************************************** 0521 * 0522 * Memory Debugging 0523 * 0524 * FreeType now comes with an integrated memory debugger that is capable 0525 * of detecting simple errors like memory leaks or double deletes. To 0526 * compile it within your build of the library, you should define 0527 * `FT_DEBUG_MEMORY` here. 0528 * 0529 * Note that the memory debugger is only activated at runtime when when 0530 * the _environment_ variable `FT2_DEBUG_MEMORY` is defined also! 0531 * 0532 * Do not `#undef` this macro here since the build system might define it 0533 * for certain configurations only. 0534 */ 0535 /* #define FT_DEBUG_MEMORY */ 0536 0537 0538 /************************************************************************** 0539 * 0540 * Module errors 0541 * 0542 * If this macro is set (which is _not_ the default), the higher byte of 0543 * an error code gives the module in which the error has occurred, while 0544 * the lower byte is the real error code. 0545 * 0546 * Setting this macro makes sense for debugging purposes only, since it 0547 * would break source compatibility of certain programs that use 0548 * FreeType~2. 0549 * 0550 * More details can be found in the files `ftmoderr.h` and `fterrors.h`. 0551 */ 0552 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS 0553 0554 0555 /************************************************************************** 0556 * 0557 * OpenType SVG Glyph Support 0558 * 0559 * Setting this macro enables support for OpenType SVG glyphs. By 0560 * default, FreeType can only fetch SVG documents. However, it can also 0561 * render them if external rendering hook functions are plugged in at 0562 * runtime. 0563 * 0564 * More details on the hooks can be found in file `otsvg.h`. 0565 */ 0566 #define FT_CONFIG_OPTION_SVG 0567 0568 0569 /************************************************************************** 0570 * 0571 * Error Strings 0572 * 0573 * If this macro is set, `FT_Error_String` will return meaningful 0574 * descriptions. This is not enabled by default to reduce the overall 0575 * size of FreeType. 0576 * 0577 * More details can be found in the file `fterrors.h`. 0578 */ 0579 /* #define FT_CONFIG_OPTION_ERROR_STRINGS */ 0580 0581 0582 /*************************************************************************/ 0583 /*************************************************************************/ 0584 /**** ****/ 0585 /**** S F N T D R I V E R C O N F I G U R A T I O N ****/ 0586 /**** ****/ 0587 /*************************************************************************/ 0588 /*************************************************************************/ 0589 0590 0591 /************************************************************************** 0592 * 0593 * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support 0594 * embedded bitmaps in all formats using the 'sfnt' module (namely 0595 * TrueType~& OpenType). 0596 */ 0597 #define TT_CONFIG_OPTION_EMBEDDED_BITMAPS 0598 0599 0600 /************************************************************************** 0601 * 0602 * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored 0603 * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' 0604 * module (namely TrueType~& OpenType). 0605 */ 0606 #define TT_CONFIG_OPTION_COLOR_LAYERS 0607 0608 0609 /************************************************************************** 0610 * 0611 * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to 0612 * load and enumerate Postscript names of glyphs in a TrueType or OpenType 0613 * file. 0614 * 0615 * Note that if you do not compile the 'psnames' module by undefining the 0616 * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` macro, the 'sfnt' module will 0617 * contain additional code to read the PostScript name table from a font. 0618 * 0619 * (By default, the module uses 'psnames' to extract glyph names.) 0620 */ 0621 #define TT_CONFIG_OPTION_POSTSCRIPT_NAMES 0622 0623 0624 /************************************************************************** 0625 * 0626 * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access 0627 * the internal name table in a SFNT-based format like TrueType or 0628 * OpenType. The name table contains various strings used to describe the 0629 * font, like family name, copyright, version, etc. It does not contain 0630 * any glyph name though. 0631 * 0632 * Accessing SFNT names is done through the functions declared in 0633 * `ftsnames.h`. 0634 */ 0635 #define TT_CONFIG_OPTION_SFNT_NAMES 0636 0637 0638 /************************************************************************** 0639 * 0640 * TrueType CMap support 0641 * 0642 * Here you can fine-tune which TrueType CMap table format shall be 0643 * supported. 0644 */ 0645 #define TT_CONFIG_CMAP_FORMAT_0 0646 #define TT_CONFIG_CMAP_FORMAT_2 0647 #define TT_CONFIG_CMAP_FORMAT_4 0648 #define TT_CONFIG_CMAP_FORMAT_6 0649 #define TT_CONFIG_CMAP_FORMAT_8 0650 #define TT_CONFIG_CMAP_FORMAT_10 0651 #define TT_CONFIG_CMAP_FORMAT_12 0652 #define TT_CONFIG_CMAP_FORMAT_13 0653 #define TT_CONFIG_CMAP_FORMAT_14 0654 0655 0656 /*************************************************************************/ 0657 /*************************************************************************/ 0658 /**** ****/ 0659 /**** 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 ****/ 0660 /**** ****/ 0661 /*************************************************************************/ 0662 /*************************************************************************/ 0663 0664 /************************************************************************** 0665 * 0666 * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a 0667 * bytecode interpreter in the TrueType driver. 0668 * 0669 * By undefining this, you will only compile the code necessary to load 0670 * TrueType glyphs without hinting. 0671 * 0672 * Do not `#undef` this macro here, since the build system might define it 0673 * for certain configurations only. 0674 */ 0675 #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER 0676 0677 0678 /************************************************************************** 0679 * 0680 * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile 0681 * subpixel hinting support into the TrueType driver. This modifies the 0682 * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is 0683 * requested. 0684 * 0685 * In particular, it modifies the bytecode interpreter to interpret (or 0686 * not) instructions in a certain way so that all TrueType fonts look like 0687 * they do in a Windows ClearType (DirectWrite) environment. See [1] for a 0688 * technical overview on what this means. See `ttinterp.h` for more 0689 * details on this option. 0690 * 0691 * The new default mode focuses on applying a minimal set of rules to all 0692 * fonts indiscriminately so that modern and web fonts render well while 0693 * legacy fonts render okay. The corresponding interpreter version is v40. 0694 * The so-called Infinality mode (v38) is no longer available in FreeType. 0695 * 0696 * By undefining these, you get rendering behavior like on Windows without 0697 * ClearType, i.e., Windows XP without ClearType enabled and Win9x 0698 * (interpreter version v35). Or not, depending on how much hinting blood 0699 * and testing tears the font designer put into a given font. If you 0700 * define one or both subpixel hinting options, you can switch between 0701 * between v35 and the ones you define (using `FT_Property_Set`). 0702 * 0703 * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be 0704 * defined. 0705 * 0706 * [1] 0707 * https://learn.microsoft.com/typography/cleartype/truetypecleartype 0708 */ 0709 #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 0710 0711 0712 /************************************************************************** 0713 * 0714 * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the 0715 * TrueType glyph loader to use Apple's definition of how to handle 0716 * component offsets in composite glyphs. 0717 * 0718 * Apple and MS disagree on the default behavior of component offsets in 0719 * composites. Apple says that they should be scaled by the scaling 0720 * factors in the transformation matrix (roughly, it's more complex) while 0721 * MS says they should not. OpenType defines two bits in the composite 0722 * flags array which can be used to disambiguate, but old fonts will not 0723 * have them. 0724 * 0725 * https://learn.microsoft.com/typography/opentype/spec/glyf 0726 * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html 0727 */ 0728 #undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED 0729 0730 0731 /************************************************************************** 0732 * 0733 * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support 0734 * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and 0735 * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType 0736 * also. This has many similarities to Type~1 Multiple Masters support. 0737 */ 0738 #define TT_CONFIG_OPTION_GX_VAR_SUPPORT 0739 0740 0741 /************************************************************************** 0742 * 0743 * Define `TT_CONFIG_OPTION_NO_BORING_EXPANSION` if you want to exclude 0744 * support for 'boring' OpenType specification expansions. 0745 * 0746 * https://github.com/harfbuzz/boring-expansion-spec 0747 * 0748 * Right now, the following features are covered: 0749 * 0750 * - 'avar' version 2.0 0751 * 0752 * Most likely, this is a temporary configuration option to be removed in 0753 * the near future, since it is assumed that eventually those features are 0754 * added to the OpenType standard. 0755 */ 0756 /* #define TT_CONFIG_OPTION_NO_BORING_EXPANSION */ 0757 0758 0759 /************************************************************************** 0760 * 0761 * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an 0762 * embedded 'BDF~' table within an SFNT-based `.otb` font file. This table 0763 * is an extension used by X11 to preserve BDF properties after conversion 0764 * to SFNT containers. See 0765 * 0766 * https://fontforge.org/docs/techref/non-standard.html#non-standard-bdf 0767 * 0768 * for more details. 0769 */ 0770 #define TT_CONFIG_OPTION_BDF 0771 0772 0773 /************************************************************************** 0774 * 0775 * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum 0776 * number of bytecode instructions executed for a single run of the 0777 * bytecode interpreter, needed to prevent infinite loops. You don't want 0778 * to change this except for very special situations (e.g., making a 0779 * library fuzzer spend less time to handle broken fonts). 0780 * 0781 * It is not expected that this value is ever modified by a configuring 0782 * script; instead, it gets surrounded with `#ifndef ... #endif` so that 0783 * the value can be set as a preprocessor option on the compiler's command 0784 * line. 0785 */ 0786 #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 0787 #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L 0788 #endif 0789 0790 0791 /************************************************************************** 0792 * 0793 * Option `TT_CONFIG_OPTION_GPOS_KERNING` enables a basic GPOS kerning 0794 * implementation (for TrueType and OpenType fonts only). With this 0795 * defined, FreeType is able to get kerning pair data from the GPOS 'kern' 0796 * feature as well as legacy 'kern' tables; without this defined, FreeType 0797 * will only be able to use legacy 'kern' tables. 0798 * 0799 * Note that FreeType does not support more advanced GPOS layout features; 0800 * even the 'kern' feature implemented here doesn't handle more 0801 * sophisticated kerning variants. Use a higher-level library like 0802 * HarfBuzz instead for that. 0803 */ 0804 /* #define TT_CONFIG_OPTION_GPOS_KERNING */ 0805 0806 0807 /*************************************************************************/ 0808 /*************************************************************************/ 0809 /**** ****/ 0810 /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ 0811 /**** ****/ 0812 /*************************************************************************/ 0813 /*************************************************************************/ 0814 0815 0816 /************************************************************************** 0817 * 0818 * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays 0819 * in the Type~1 stream (see `t1load.c`). A minimum of~4 is required. 0820 */ 0821 #define T1_MAX_DICT_DEPTH 5 0822 0823 0824 /************************************************************************** 0825 * 0826 * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine 0827 * calls during glyph loading. 0828 */ 0829 #define T1_MAX_SUBRS_CALLS 16 0830 0831 0832 /************************************************************************** 0833 * 0834 * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A 0835 * minimum of~16 is required. 0836 * 0837 * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character 0838 * set) needs 256. 0839 */ 0840 #define T1_MAX_CHARSTRINGS_OPERANDS 256 0841 0842 0843 /************************************************************************** 0844 * 0845 * Define this configuration macro if you want to prevent the compilation 0846 * of the 't1afm' module, which is in charge of reading Type~1 AFM files 0847 * into an existing face. Note that if set, the Type~1 driver will be 0848 * unable to produce kerning distances. 0849 */ 0850 #undef T1_CONFIG_OPTION_NO_AFM 0851 0852 0853 /************************************************************************** 0854 * 0855 * Define this configuration macro if you want to prevent the compilation 0856 * of the Multiple Masters font support in the Type~1 driver. 0857 */ 0858 #undef T1_CONFIG_OPTION_NO_MM_SUPPORT 0859 0860 0861 /************************************************************************** 0862 * 0863 * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1 0864 * engine gets compiled into FreeType. If defined, it is possible to 0865 * switch between the two engines using the `hinting-engine` property of 0866 * the 'type1' driver module. 0867 */ 0868 /* #define T1_CONFIG_OPTION_OLD_ENGINE */ 0869 0870 0871 /*************************************************************************/ 0872 /*************************************************************************/ 0873 /**** ****/ 0874 /**** C F F D R I V E R C O N F I G U R A T I O N ****/ 0875 /**** ****/ 0876 /*************************************************************************/ 0877 /*************************************************************************/ 0878 0879 0880 /************************************************************************** 0881 * 0882 * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is 0883 * possible to set up the default values of the four control points that 0884 * define the stem darkening behaviour of the (new) CFF engine. For more 0885 * details please read the documentation of the `darkening-parameters` 0886 * property (file `ftdriver.h`), which allows the control at run-time. 0887 * 0888 * Do **not** undefine these macros! 0889 */ 0890 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 0891 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 0892 0893 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000 0894 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275 0895 0896 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667 0897 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275 0898 0899 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333 0900 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 0901 0902 0903 /************************************************************************** 0904 * 0905 * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine 0906 * gets compiled into FreeType. If defined, it is possible to switch 0907 * between the two engines using the `hinting-engine` property of the 'cff' 0908 * driver module. 0909 */ 0910 /* #define CFF_CONFIG_OPTION_OLD_ENGINE */ 0911 0912 0913 /*************************************************************************/ 0914 /*************************************************************************/ 0915 /**** ****/ 0916 /**** P C F D R I V E R C O N F I G U R A T I O N ****/ 0917 /**** ****/ 0918 /*************************************************************************/ 0919 /*************************************************************************/ 0920 0921 0922 /************************************************************************** 0923 * 0924 * There are many PCF fonts just called 'Fixed' which look completely 0925 * different, and which have nothing to do with each other. When selecting 0926 * 'Fixed' in KDE or Gnome one gets results that appear rather random, the 0927 * style changes often if one changes the size and one cannot select some 0928 * fonts at all. This option makes the 'pcf' module prepend the foundry 0929 * name (plus a space) to the family name. 0930 * 0931 * We also check whether we have 'wide' characters; all put together, we 0932 * get family names like 'Sony Fixed' or 'Misc Fixed Wide'. 0933 * 0934 * If this option is activated, it can be controlled with the 0935 * `no-long-family-names` property of the 'pcf' driver module. 0936 */ 0937 /* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ 0938 0939 0940 /*************************************************************************/ 0941 /*************************************************************************/ 0942 /**** ****/ 0943 /**** 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 ****/ 0944 /**** ****/ 0945 /*************************************************************************/ 0946 /*************************************************************************/ 0947 0948 0949 /************************************************************************** 0950 * 0951 * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script 0952 * support. 0953 */ 0954 #define AF_CONFIG_OPTION_CJK 0955 0956 0957 /************************************************************************** 0958 * 0959 * Compile 'autofit' module with fallback Indic script support, covering 0960 * some scripts that the 'latin' submodule of the 'autofit' module doesn't 0961 * (yet) handle. Currently, this needs option `AF_CONFIG_OPTION_CJK`. 0962 */ 0963 #ifdef AF_CONFIG_OPTION_CJK 0964 #define AF_CONFIG_OPTION_INDIC 0965 #endif 0966 0967 0968 /************************************************************************** 0969 * 0970 * Use TrueType-like size metrics for 'light' auto-hinting. 0971 * 0972 * It is strongly recommended to avoid this option, which exists only to 0973 * help some legacy applications retain its appearance and behaviour with 0974 * respect to auto-hinted TrueType fonts. 0975 * 0976 * The very reason this option exists at all are GNU/Linux distributions 0977 * like Fedora that did not un-patch the following change (which was 0978 * present in FreeType between versions 2.4.6 and 2.7.1, inclusive). 0979 * 0980 * ``` 0981 * 2011-07-16 Steven Chu <steven.f.chu@gmail.com> 0982 * 0983 * [truetype] Fix metrics on size request for scalable fonts. 0984 * ``` 0985 * 0986 * This problematic commit is now reverted (more or less). 0987 */ 0988 /* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */ 0989 0990 /* */ 0991 0992 0993 /* 0994 * This macro is obsolete. Support has been removed in FreeType version 0995 * 2.5. 0996 */ 0997 /* #define FT_CONFIG_OPTION_OLD_INTERNALS */ 0998 0999 1000 /* 1001 * The next two macros are defined if native TrueType hinting is 1002 * requested by the definitions above. Don't change this. 1003 */ 1004 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER 1005 #define TT_USE_BYTECODE_INTERPRETER 1006 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 1007 #define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL 1008 #endif 1009 #endif 1010 1011 1012 /* 1013 * The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this 1014 * version of FreeType has support for 'COLR' v1 API. This definition is 1015 * useful to FreeType clients that want to build in support for 'COLR' v1 1016 * depending on a tip-of-tree checkout before it is officially released in 1017 * FreeType, and while the feature cannot yet be tested against using 1018 * version macros. Don't change this macro. This may be removed once the 1019 * feature is in a FreeType release version and version macros can be used 1020 * to test for availability. 1021 */ 1022 #ifdef TT_CONFIG_OPTION_COLOR_LAYERS 1023 #define TT_SUPPORT_COLRV1 1024 #endif 1025 1026 1027 /* 1028 * Check CFF darkening parameters. The checks are the same as in function 1029 * `cff_property_set` in file `cffdrivr.c`. 1030 */ 1031 #if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ 1032 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ 1033 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \ 1034 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \ 1035 \ 1036 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \ 1037 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \ 1038 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \ 1039 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \ 1040 \ 1041 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \ 1042 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \ 1043 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \ 1044 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \ 1045 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \ 1046 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \ 1047 \ 1048 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \ 1049 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \ 1050 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \ 1051 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500 1052 #error "Invalid CFF darkening parameters!" 1053 #endif 1054 1055 1056 FT_END_HEADER 1057 1058 #endif /* FTOPTION_H_ */ 1059 1060 1061 /* END */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|