![]() |
|
|||
File indexing completed on 2025-02-22 10:35:44
0001 /**************************************************************************** 0002 * 0003 * ftoption.h 0004 * 0005 * User-selectable configuration macros (specification only). 0006 * 0007 * Copyright (C) 1996-2023 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 assembler version of the 0162 * @FT_MulFix function, which is a 'hotspot' when loading and hinting 0163 * glyphs, and which should be executed as fast as possible. 0164 * 0165 * Note that if your compiler or CPU is not supported, this will default to 0166 * the standard and portable implementation found in `ftcalc.c`. 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 * Brotli support. 0299 * 0300 * FreeType uses the Brotli library to provide support for decompressing 0301 * WOFF2 streams. 0302 * 0303 * Define this macro if you want to enable this 'feature'. 0304 * 0305 * If you use a build system like cmake or the `configure` script, 0306 * options set by those programs have precedence, overwriting the value 0307 * here with the configured one. 0308 */ 0309 /* #undef FT_CONFIG_OPTION_USE_BROTLI */ 0310 0311 0312 /************************************************************************** 0313 * 0314 * Glyph Postscript Names handling 0315 * 0316 * By default, FreeType 2 is compiled with the 'psnames' module. This 0317 * module is in charge of converting a glyph name string into a Unicode 0318 * value, or return a Macintosh standard glyph name for the use with the 0319 * TrueType 'post' table. 0320 * 0321 * Undefine this macro if you do not want 'psnames' compiled in your 0322 * build of FreeType. This has the following effects: 0323 * 0324 * - The TrueType driver will provide its own set of glyph names, if you 0325 * build it to support postscript names in the TrueType 'post' table, 0326 * but will not synthesize a missing Unicode charmap. 0327 * 0328 * - The Type~1 driver will not be able to synthesize a Unicode charmap 0329 * out of the glyphs found in the fonts. 0330 * 0331 * You would normally undefine this configuration macro when building a 0332 * version of FreeType that doesn't contain a Type~1 or CFF driver. 0333 */ 0334 #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES 0335 0336 0337 /************************************************************************** 0338 * 0339 * Postscript Names to Unicode Values support 0340 * 0341 * By default, FreeType~2 is built with the 'psnames' module compiled in. 0342 * Among other things, the module is used to convert a glyph name into a 0343 * Unicode value. This is especially useful in order to synthesize on 0344 * the fly a Unicode charmap from the CFF/Type~1 driver through a big 0345 * table named the 'Adobe Glyph List' (AGL). 0346 * 0347 * Undefine this macro if you do not want the Adobe Glyph List compiled 0348 * in your 'psnames' module. The Type~1 driver will not be able to 0349 * synthesize a Unicode charmap out of the glyphs found in the fonts. 0350 */ 0351 #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST 0352 0353 0354 /************************************************************************** 0355 * 0356 * Support for Mac fonts 0357 * 0358 * Define this macro if you want support for outline fonts in Mac format 0359 * (mac dfont, mac resource, macbinary containing a mac resource) on 0360 * non-Mac platforms. 0361 * 0362 * Note that the 'FOND' resource isn't checked. 0363 */ 0364 #define FT_CONFIG_OPTION_MAC_FONTS 0365 0366 0367 /************************************************************************** 0368 * 0369 * Guessing methods to access embedded resource forks 0370 * 0371 * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux). 0372 * 0373 * Resource forks which include fonts data are stored sometimes in 0374 * locations which users or developers don't expected. In some cases, 0375 * resource forks start with some offset from the head of a file. In 0376 * other cases, the actual resource fork is stored in file different from 0377 * what the user specifies. If this option is activated, FreeType tries 0378 * to guess whether such offsets or different file names must be used. 0379 * 0380 * Note that normal, direct access of resource forks is controlled via 0381 * the `FT_CONFIG_OPTION_MAC_FONTS` option. 0382 */ 0383 #ifdef FT_CONFIG_OPTION_MAC_FONTS 0384 #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK 0385 #endif 0386 0387 0388 /************************************************************************** 0389 * 0390 * Allow the use of `FT_Incremental_Interface` to load typefaces that 0391 * contain no glyph data, but supply it via a callback function. This is 0392 * required by clients supporting document formats which supply font data 0393 * incrementally as the document is parsed, such as the Ghostscript 0394 * interpreter for the PostScript language. 0395 */ 0396 #define FT_CONFIG_OPTION_INCREMENTAL 0397 0398 0399 /************************************************************************** 0400 * 0401 * The size in bytes of the render pool used by the scan-line converter to 0402 * do all of its work. 0403 */ 0404 #define FT_RENDER_POOL_SIZE 16384L 0405 0406 0407 /************************************************************************** 0408 * 0409 * FT_MAX_MODULES 0410 * 0411 * The maximum number of modules that can be registered in a single 0412 * FreeType library object. 32~is the default. 0413 */ 0414 #define FT_MAX_MODULES 32 0415 0416 0417 /************************************************************************** 0418 * 0419 * Debug level 0420 * 0421 * FreeType can be compiled in debug or trace mode. In debug mode, 0422 * errors are reported through the 'ftdebug' component. In trace mode, 0423 * additional messages are sent to the standard output during execution. 0424 * 0425 * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode. 0426 * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode. 0427 * 0428 * Don't define any of these macros to compile in 'release' mode! 0429 * 0430 * Do not `#undef` these macros here since the build system might define 0431 * them for certain configurations only. 0432 */ 0433 /* #define FT_DEBUG_LEVEL_ERROR */ 0434 /* #define FT_DEBUG_LEVEL_TRACE */ 0435 0436 0437 /************************************************************************** 0438 * 0439 * Logging 0440 * 0441 * Compiling FreeType in debug or trace mode makes FreeType write error 0442 * and trace log messages to `stderr`. Enabling this macro 0443 * automatically forces the `FT_DEBUG_LEVEL_ERROR` and 0444 * `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and 0445 * trace log messages to a file instead of `stderr`. For writing logs 0446 * to a file, FreeType uses an the external `dlg` library (the source 0447 * code is in `src/dlg`). 0448 * 0449 * This option needs a C99 compiler. 0450 */ 0451 /* #define FT_DEBUG_LOGGING */ 0452 0453 0454 /************************************************************************** 0455 * 0456 * Autofitter debugging 0457 * 0458 * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to 0459 * control the autofitter behaviour for debugging purposes with global 0460 * boolean variables (consequently, you should **never** enable this 0461 * while compiling in 'release' mode): 0462 * 0463 * ``` 0464 * af_debug_disable_horz_hints_ 0465 * af_debug_disable_vert_hints_ 0466 * af_debug_disable_blue_hints_ 0467 * ``` 0468 * 0469 * Additionally, the following functions provide dumps of various 0470 * internal autofit structures to stdout (using `printf`): 0471 * 0472 * ``` 0473 * af_glyph_hints_dump_points 0474 * af_glyph_hints_dump_segments 0475 * af_glyph_hints_dump_edges 0476 * af_glyph_hints_get_num_segments 0477 * af_glyph_hints_get_segment_offset 0478 * ``` 0479 * 0480 * As an argument, they use another global variable: 0481 * 0482 * ``` 0483 * af_debug_hints_ 0484 * ``` 0485 * 0486 * Please have a look at the `ftgrid` demo program to see how those 0487 * variables and macros should be used. 0488 * 0489 * Do not `#undef` these macros here since the build system might define 0490 * them for certain configurations only. 0491 */ 0492 /* #define FT_DEBUG_AUTOFIT */ 0493 0494 0495 /************************************************************************** 0496 * 0497 * Memory Debugging 0498 * 0499 * FreeType now comes with an integrated memory debugger that is capable 0500 * of detecting simple errors like memory leaks or double deletes. To 0501 * compile it within your build of the library, you should define 0502 * `FT_DEBUG_MEMORY` here. 0503 * 0504 * Note that the memory debugger is only activated at runtime when when 0505 * the _environment_ variable `FT2_DEBUG_MEMORY` is defined also! 0506 * 0507 * Do not `#undef` this macro here since the build system might define it 0508 * for certain configurations only. 0509 */ 0510 /* #define FT_DEBUG_MEMORY */ 0511 0512 0513 /************************************************************************** 0514 * 0515 * Module errors 0516 * 0517 * If this macro is set (which is _not_ the default), the higher byte of 0518 * an error code gives the module in which the error has occurred, while 0519 * the lower byte is the real error code. 0520 * 0521 * Setting this macro makes sense for debugging purposes only, since it 0522 * would break source compatibility of certain programs that use 0523 * FreeType~2. 0524 * 0525 * More details can be found in the files `ftmoderr.h` and `fterrors.h`. 0526 */ 0527 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS 0528 0529 0530 /************************************************************************** 0531 * 0532 * OpenType SVG Glyph Support 0533 * 0534 * Setting this macro enables support for OpenType SVG glyphs. By 0535 * default, FreeType can only fetch SVG documents. However, it can also 0536 * render them if external rendering hook functions are plugged in at 0537 * runtime. 0538 * 0539 * More details on the hooks can be found in file `otsvg.h`. 0540 */ 0541 #define FT_CONFIG_OPTION_SVG 0542 0543 0544 /************************************************************************** 0545 * 0546 * Error Strings 0547 * 0548 * If this macro is set, `FT_Error_String` will return meaningful 0549 * descriptions. This is not enabled by default to reduce the overall 0550 * size of FreeType. 0551 * 0552 * More details can be found in the file `fterrors.h`. 0553 */ 0554 /* #define FT_CONFIG_OPTION_ERROR_STRINGS */ 0555 0556 0557 /*************************************************************************/ 0558 /*************************************************************************/ 0559 /**** ****/ 0560 /**** S F N T D R I V E R C O N F I G U R A T I O N ****/ 0561 /**** ****/ 0562 /*************************************************************************/ 0563 /*************************************************************************/ 0564 0565 0566 /************************************************************************** 0567 * 0568 * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support 0569 * embedded bitmaps in all formats using the 'sfnt' module (namely 0570 * TrueType~& OpenType). 0571 */ 0572 #define TT_CONFIG_OPTION_EMBEDDED_BITMAPS 0573 0574 0575 /************************************************************************** 0576 * 0577 * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored 0578 * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' 0579 * module (namely TrueType~& OpenType). 0580 */ 0581 #define TT_CONFIG_OPTION_COLOR_LAYERS 0582 0583 0584 /************************************************************************** 0585 * 0586 * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to 0587 * load and enumerate Postscript names of glyphs in a TrueType or OpenType 0588 * file. 0589 * 0590 * Note that if you do not compile the 'psnames' module by undefining the 0591 * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` macro, the 'sfnt' module will 0592 * contain additional code to read the PostScript name table from a font. 0593 * 0594 * (By default, the module uses 'psnames' to extract glyph names.) 0595 */ 0596 #define TT_CONFIG_OPTION_POSTSCRIPT_NAMES 0597 0598 0599 /************************************************************************** 0600 * 0601 * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access 0602 * the internal name table in a SFNT-based format like TrueType or 0603 * OpenType. The name table contains various strings used to describe the 0604 * font, like family name, copyright, version, etc. It does not contain 0605 * any glyph name though. 0606 * 0607 * Accessing SFNT names is done through the functions declared in 0608 * `ftsnames.h`. 0609 */ 0610 #define TT_CONFIG_OPTION_SFNT_NAMES 0611 0612 0613 /************************************************************************** 0614 * 0615 * TrueType CMap support 0616 * 0617 * Here you can fine-tune which TrueType CMap table format shall be 0618 * supported. 0619 */ 0620 #define TT_CONFIG_CMAP_FORMAT_0 0621 #define TT_CONFIG_CMAP_FORMAT_2 0622 #define TT_CONFIG_CMAP_FORMAT_4 0623 #define TT_CONFIG_CMAP_FORMAT_6 0624 #define TT_CONFIG_CMAP_FORMAT_8 0625 #define TT_CONFIG_CMAP_FORMAT_10 0626 #define TT_CONFIG_CMAP_FORMAT_12 0627 #define TT_CONFIG_CMAP_FORMAT_13 0628 #define TT_CONFIG_CMAP_FORMAT_14 0629 0630 0631 /*************************************************************************/ 0632 /*************************************************************************/ 0633 /**** ****/ 0634 /**** 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 ****/ 0635 /**** ****/ 0636 /*************************************************************************/ 0637 /*************************************************************************/ 0638 0639 /************************************************************************** 0640 * 0641 * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a 0642 * bytecode interpreter in the TrueType driver. 0643 * 0644 * By undefining this, you will only compile the code necessary to load 0645 * TrueType glyphs without hinting. 0646 * 0647 * Do not `#undef` this macro here, since the build system might define it 0648 * for certain configurations only. 0649 */ 0650 #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER 0651 0652 0653 /************************************************************************** 0654 * 0655 * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile 0656 * subpixel hinting support into the TrueType driver. This modifies the 0657 * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is 0658 * requested. 0659 * 0660 * In particular, it modifies the bytecode interpreter to interpret (or 0661 * not) instructions in a certain way so that all TrueType fonts look like 0662 * they do in a Windows ClearType (DirectWrite) environment. See [1] for a 0663 * technical overview on what this means. See `ttinterp.h` for more 0664 * details on this option. 0665 * 0666 * The new default mode focuses on applying a minimal set of rules to all 0667 * fonts indiscriminately so that modern and web fonts render well while 0668 * legacy fonts render okay. The corresponding interpreter version is v40. 0669 * The so-called Infinality mode (v38) is no longer available in FreeType. 0670 * 0671 * By undefining these, you get rendering behavior like on Windows without 0672 * ClearType, i.e., Windows XP without ClearType enabled and Win9x 0673 * (interpreter version v35). Or not, depending on how much hinting blood 0674 * and testing tears the font designer put into a given font. If you 0675 * define one or both subpixel hinting options, you can switch between 0676 * between v35 and the ones you define (using `FT_Property_Set`). 0677 * 0678 * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be 0679 * defined. 0680 * 0681 * [1] 0682 * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx 0683 */ 0684 #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 0685 0686 0687 /************************************************************************** 0688 * 0689 * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the 0690 * TrueType glyph loader to use Apple's definition of how to handle 0691 * component offsets in composite glyphs. 0692 * 0693 * Apple and MS disagree on the default behavior of component offsets in 0694 * composites. Apple says that they should be scaled by the scaling 0695 * factors in the transformation matrix (roughly, it's more complex) while 0696 * MS says they should not. OpenType defines two bits in the composite 0697 * flags array which can be used to disambiguate, but old fonts will not 0698 * have them. 0699 * 0700 * https://www.microsoft.com/typography/otspec/glyf.htm 0701 * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html 0702 */ 0703 #undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED 0704 0705 0706 /************************************************************************** 0707 * 0708 * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support 0709 * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and 0710 * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType 0711 * also. This has many similarities to Type~1 Multiple Masters support. 0712 */ 0713 #define TT_CONFIG_OPTION_GX_VAR_SUPPORT 0714 0715 0716 /************************************************************************** 0717 * 0718 * Define `TT_CONFIG_OPTION_NO_BORING_EXPANSION` if you want to exclude 0719 * support for 'boring' OpenType specification expansions. 0720 * 0721 * https://github.com/harfbuzz/boring-expansion-spec 0722 * 0723 * Right now, the following features are covered: 0724 * 0725 * - 'avar' version 2.0 0726 * 0727 * Most likely, this is a temporary configuration option to be removed in 0728 * the near future, since it is assumed that eventually those features are 0729 * added to the OpenType standard. 0730 */ 0731 /* #define TT_CONFIG_OPTION_NO_BORING_EXPANSION */ 0732 0733 0734 /************************************************************************** 0735 * 0736 * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an 0737 * embedded 'BDF~' table within SFNT-based bitmap formats. 0738 */ 0739 #define TT_CONFIG_OPTION_BDF 0740 0741 0742 /************************************************************************** 0743 * 0744 * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum 0745 * number of bytecode instructions executed for a single run of the 0746 * bytecode interpreter, needed to prevent infinite loops. You don't want 0747 * to change this except for very special situations (e.g., making a 0748 * library fuzzer spend less time to handle broken fonts). 0749 * 0750 * It is not expected that this value is ever modified by a configuring 0751 * script; instead, it gets surrounded with `#ifndef ... #endif` so that 0752 * the value can be set as a preprocessor option on the compiler's command 0753 * line. 0754 */ 0755 #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 0756 #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L 0757 #endif 0758 0759 0760 /*************************************************************************/ 0761 /*************************************************************************/ 0762 /**** ****/ 0763 /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ 0764 /**** ****/ 0765 /*************************************************************************/ 0766 /*************************************************************************/ 0767 0768 0769 /************************************************************************** 0770 * 0771 * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays 0772 * in the Type~1 stream (see `t1load.c`). A minimum of~4 is required. 0773 */ 0774 #define T1_MAX_DICT_DEPTH 5 0775 0776 0777 /************************************************************************** 0778 * 0779 * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine 0780 * calls during glyph loading. 0781 */ 0782 #define T1_MAX_SUBRS_CALLS 16 0783 0784 0785 /************************************************************************** 0786 * 0787 * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A 0788 * minimum of~16 is required. 0789 * 0790 * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character 0791 * set) needs 256. 0792 */ 0793 #define T1_MAX_CHARSTRINGS_OPERANDS 256 0794 0795 0796 /************************************************************************** 0797 * 0798 * Define this configuration macro if you want to prevent the compilation 0799 * of the 't1afm' module, which is in charge of reading Type~1 AFM files 0800 * into an existing face. Note that if set, the Type~1 driver will be 0801 * unable to produce kerning distances. 0802 */ 0803 #undef T1_CONFIG_OPTION_NO_AFM 0804 0805 0806 /************************************************************************** 0807 * 0808 * Define this configuration macro if you want to prevent the compilation 0809 * of the Multiple Masters font support in the Type~1 driver. 0810 */ 0811 #undef T1_CONFIG_OPTION_NO_MM_SUPPORT 0812 0813 0814 /************************************************************************** 0815 * 0816 * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1 0817 * engine gets compiled into FreeType. If defined, it is possible to 0818 * switch between the two engines using the `hinting-engine` property of 0819 * the 'type1' driver module. 0820 */ 0821 /* #define T1_CONFIG_OPTION_OLD_ENGINE */ 0822 0823 0824 /*************************************************************************/ 0825 /*************************************************************************/ 0826 /**** ****/ 0827 /**** C F F D R I V E R C O N F I G U R A T I O N ****/ 0828 /**** ****/ 0829 /*************************************************************************/ 0830 /*************************************************************************/ 0831 0832 0833 /************************************************************************** 0834 * 0835 * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is 0836 * possible to set up the default values of the four control points that 0837 * define the stem darkening behaviour of the (new) CFF engine. For more 0838 * details please read the documentation of the `darkening-parameters` 0839 * property (file `ftdriver.h`), which allows the control at run-time. 0840 * 0841 * Do **not** undefine these macros! 0842 */ 0843 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 0844 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 0845 0846 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000 0847 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275 0848 0849 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667 0850 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275 0851 0852 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333 0853 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 0854 0855 0856 /************************************************************************** 0857 * 0858 * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine 0859 * gets compiled into FreeType. If defined, it is possible to switch 0860 * between the two engines using the `hinting-engine` property of the 'cff' 0861 * driver module. 0862 */ 0863 /* #define CFF_CONFIG_OPTION_OLD_ENGINE */ 0864 0865 0866 /*************************************************************************/ 0867 /*************************************************************************/ 0868 /**** ****/ 0869 /**** P C F D R I V E R C O N F I G U R A T I O N ****/ 0870 /**** ****/ 0871 /*************************************************************************/ 0872 /*************************************************************************/ 0873 0874 0875 /************************************************************************** 0876 * 0877 * There are many PCF fonts just called 'Fixed' which look completely 0878 * different, and which have nothing to do with each other. When selecting 0879 * 'Fixed' in KDE or Gnome one gets results that appear rather random, the 0880 * style changes often if one changes the size and one cannot select some 0881 * fonts at all. This option makes the 'pcf' module prepend the foundry 0882 * name (plus a space) to the family name. 0883 * 0884 * We also check whether we have 'wide' characters; all put together, we 0885 * get family names like 'Sony Fixed' or 'Misc Fixed Wide'. 0886 * 0887 * If this option is activated, it can be controlled with the 0888 * `no-long-family-names` property of the 'pcf' driver module. 0889 */ 0890 /* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ 0891 0892 0893 /*************************************************************************/ 0894 /*************************************************************************/ 0895 /**** ****/ 0896 /**** 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 ****/ 0897 /**** ****/ 0898 /*************************************************************************/ 0899 /*************************************************************************/ 0900 0901 0902 /************************************************************************** 0903 * 0904 * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script 0905 * support. 0906 */ 0907 #define AF_CONFIG_OPTION_CJK 0908 0909 0910 /************************************************************************** 0911 * 0912 * Compile 'autofit' module with fallback Indic script support, covering 0913 * some scripts that the 'latin' submodule of the 'autofit' module doesn't 0914 * (yet) handle. Currently, this needs option `AF_CONFIG_OPTION_CJK`. 0915 */ 0916 #ifdef AF_CONFIG_OPTION_CJK 0917 #define AF_CONFIG_OPTION_INDIC 0918 #endif 0919 0920 0921 /************************************************************************** 0922 * 0923 * Use TrueType-like size metrics for 'light' auto-hinting. 0924 * 0925 * It is strongly recommended to avoid this option, which exists only to 0926 * help some legacy applications retain its appearance and behaviour with 0927 * respect to auto-hinted TrueType fonts. 0928 * 0929 * The very reason this option exists at all are GNU/Linux distributions 0930 * like Fedora that did not un-patch the following change (which was 0931 * present in FreeType between versions 2.4.6 and 2.7.1, inclusive). 0932 * 0933 * ``` 0934 * 2011-07-16 Steven Chu <steven.f.chu@gmail.com> 0935 * 0936 * [truetype] Fix metrics on size request for scalable fonts. 0937 * ``` 0938 * 0939 * This problematic commit is now reverted (more or less). 0940 */ 0941 /* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */ 0942 0943 /* */ 0944 0945 0946 /* 0947 * This macro is obsolete. Support has been removed in FreeType version 0948 * 2.5. 0949 */ 0950 /* #define FT_CONFIG_OPTION_OLD_INTERNALS */ 0951 0952 0953 /* 0954 * The next two macros are defined if native TrueType hinting is 0955 * requested by the definitions above. Don't change this. 0956 */ 0957 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER 0958 #define TT_USE_BYTECODE_INTERPRETER 0959 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 0960 #define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL 0961 #endif 0962 #endif 0963 0964 0965 /* 0966 * The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this 0967 * version of FreeType has support for 'COLR' v1 API. This definition is 0968 * useful to FreeType clients that want to build in support for 'COLR' v1 0969 * depending on a tip-of-tree checkout before it is officially released in 0970 * FreeType, and while the feature cannot yet be tested against using 0971 * version macros. Don't change this macro. This may be removed once the 0972 * feature is in a FreeType release version and version macros can be used 0973 * to test for availability. 0974 */ 0975 #ifdef TT_CONFIG_OPTION_COLOR_LAYERS 0976 #define TT_SUPPORT_COLRV1 0977 #endif 0978 0979 0980 /* 0981 * Check CFF darkening parameters. The checks are the same as in function 0982 * `cff_property_set` in file `cffdrivr.c`. 0983 */ 0984 #if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ 0985 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ 0986 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \ 0987 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \ 0988 \ 0989 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \ 0990 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \ 0991 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \ 0992 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \ 0993 \ 0994 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \ 0995 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \ 0996 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \ 0997 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \ 0998 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \ 0999 CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \ 1000 \ 1001 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \ 1002 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \ 1003 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \ 1004 CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500 1005 #error "Invalid CFF darkening parameters!" 1006 #endif 1007 1008 1009 FT_END_HEADER 1010 1011 #endif /* FTOPTION_H_ */ 1012 1013 1014 /* END */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |