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