|
|
|||
Warning, file /include/freetype2/freetype/ftdriver.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /**************************************************************************** 0002 * 0003 * ftdriver.h 0004 * 0005 * FreeType API for controlling driver modules (specification only). 0006 * 0007 * Copyright (C) 2017-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 FTDRIVER_H_ 0020 #define FTDRIVER_H_ 0021 0022 #include <freetype/freetype.h> 0023 #include <freetype/ftparams.h> 0024 0025 #ifdef FREETYPE_H 0026 #error "freetype.h of FreeType 1 has been loaded!" 0027 #error "Please fix the directory search order for header files" 0028 #error "so that freetype.h of FreeType 2 is found first." 0029 #endif 0030 0031 0032 FT_BEGIN_HEADER 0033 0034 0035 /************************************************************************** 0036 * 0037 * @section: 0038 * auto_hinter 0039 * 0040 * @title: 0041 * The auto-hinter 0042 * 0043 * @abstract: 0044 * Controlling the auto-hinting module. 0045 * 0046 * @description: 0047 * While FreeType's auto-hinter doesn't expose API functions by itself, 0048 * it is possible to control its behaviour with @FT_Property_Set and 0049 * @FT_Property_Get. The following lists the available properties 0050 * together with the necessary macros and structures. 0051 * 0052 * Note that the auto-hinter's module name is 'autofitter' for historical 0053 * reasons. 0054 * 0055 * Available properties are @increase-x-height, @no-stem-darkening 0056 * (experimental), @darkening-parameters (experimental), 0057 * @glyph-to-script-map (experimental), @fallback-script (experimental), 0058 * and @default-script (experimental), as documented in the @properties 0059 * section. 0060 * 0061 */ 0062 0063 0064 /************************************************************************** 0065 * 0066 * @section: 0067 * cff_driver 0068 * 0069 * @title: 0070 * The CFF driver 0071 * 0072 * @abstract: 0073 * Controlling the CFF driver module. 0074 * 0075 * @description: 0076 * While FreeType's CFF driver doesn't expose API functions by itself, it 0077 * is possible to control its behaviour with @FT_Property_Set and 0078 * @FT_Property_Get. 0079 * 0080 * The CFF driver's module name is 'cff'. 0081 * 0082 * Available properties are @hinting-engine, @no-stem-darkening, 0083 * @darkening-parameters, and @random-seed, as documented in the 0084 * @properties section. 0085 * 0086 * 0087 * **Hinting and anti-aliasing principles of the new engine** 0088 * 0089 * The rasterizer is positioning horizontal features (e.g., ascender 0090 * height & x-height, or crossbars) on the pixel grid and minimizing the 0091 * amount of anti-aliasing applied to them, while placing vertical 0092 * features (vertical stems) on the pixel grid without hinting, thus 0093 * representing the stem position and weight accurately. Sometimes the 0094 * vertical stems may be only partially black. In this context, 0095 * 'anti-aliasing' means that stems are not positioned exactly on pixel 0096 * borders, causing a fuzzy appearance. 0097 * 0098 * There are two principles behind this approach. 0099 * 0100 * 1) No hinting in the horizontal direction: Unlike 'superhinted' 0101 * TrueType, which changes glyph widths to accommodate regular 0102 * inter-glyph spacing, Adobe's approach is 'faithful to the design' in 0103 * representing both the glyph width and the inter-glyph spacing designed 0104 * for the font. This makes the screen display as close as it can be to 0105 * the result one would get with infinite resolution, while preserving 0106 * what is considered the key characteristics of each glyph. Note that 0107 * the distances between unhinted and grid-fitted positions at small 0108 * sizes are comparable to kerning values and thus would be noticeable 0109 * (and distracting) while reading if hinting were applied. 0110 * 0111 * One of the reasons to not hint horizontally is anti-aliasing for LCD 0112 * screens: The pixel geometry of modern displays supplies three vertical 0113 * subpixels as the eye moves horizontally across each visible pixel. On 0114 * devices where we can be certain this characteristic is present a 0115 * rasterizer can take advantage of the subpixels to add increments of 0116 * weight. In Western writing systems this turns out to be the more 0117 * critical direction anyway; the weights and spacing of vertical stems 0118 * (see above) are central to Armenian, Cyrillic, Greek, and Latin type 0119 * designs. Even when the rasterizer uses greyscale anti-aliasing instead 0120 * of color (a necessary compromise when one doesn't know the screen 0121 * characteristics), the unhinted vertical features preserve the design's 0122 * weight and spacing much better than aliased type would. 0123 * 0124 * 2) Alignment in the vertical direction: Weights and spacing along the 0125 * y~axis are less critical; what is much more important is the visual 0126 * alignment of related features (like cap-height and x-height). The 0127 * sense of alignment for these is enhanced by the sharpness of grid-fit 0128 * edges, while the cruder vertical resolution (full pixels instead of 0129 * 1/3 pixels) is less of a problem. 0130 * 0131 * On the technical side, horizontal alignment zones for ascender, 0132 * x-height, and other important height values (traditionally called 0133 * 'blue zones') as defined in the font are positioned independently, 0134 * each being rounded to the nearest pixel edge, taking care of overshoot 0135 * suppression at small sizes, stem darkening, and scaling. 0136 * 0137 * Hstems (that is, hint values defined in the font to help align 0138 * horizontal features) that fall within a blue zone are said to be 0139 * 'captured' and are aligned to that zone. Uncaptured stems are moved 0140 * in one of four ways, top edge up or down, bottom edge up or down. 0141 * Unless there are conflicting hstems, the smallest movement is taken to 0142 * minimize distortion. 0143 * 0144 */ 0145 0146 0147 /************************************************************************** 0148 * 0149 * @section: 0150 * pcf_driver 0151 * 0152 * @title: 0153 * The PCF driver 0154 * 0155 * @abstract: 0156 * Controlling the PCF driver module. 0157 * 0158 * @description: 0159 * While FreeType's PCF driver doesn't expose API functions by itself, it 0160 * is possible to control its behaviour with @FT_Property_Set and 0161 * @FT_Property_Get. Right now, there is a single property 0162 * @no-long-family-names available if FreeType is compiled with 0163 * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES. 0164 * 0165 * The PCF driver's module name is 'pcf'. 0166 * 0167 */ 0168 0169 0170 /************************************************************************** 0171 * 0172 * @section: 0173 * t1_cid_driver 0174 * 0175 * @title: 0176 * The Type 1 and CID drivers 0177 * 0178 * @abstract: 0179 * Controlling the Type~1 and CID driver modules. 0180 * 0181 * @description: 0182 * It is possible to control the behaviour of FreeType's Type~1 and 0183 * Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get. 0184 * 0185 * Behind the scenes, both drivers use the Adobe CFF engine for hinting; 0186 * however, the used properties must be specified separately. 0187 * 0188 * The Type~1 driver's module name is 'type1'; the CID driver's module 0189 * name is 't1cid'. 0190 * 0191 * Available properties are @hinting-engine, @no-stem-darkening, 0192 * @darkening-parameters, and @random-seed, as documented in the 0193 * @properties section. 0194 * 0195 * Please see the @cff_driver section for more details on the new hinting 0196 * engine. 0197 * 0198 */ 0199 0200 0201 /************************************************************************** 0202 * 0203 * @section: 0204 * tt_driver 0205 * 0206 * @title: 0207 * The TrueType driver 0208 * 0209 * @abstract: 0210 * Controlling the TrueType driver module. 0211 * 0212 * @description: 0213 * While FreeType's TrueType driver doesn't expose API functions by 0214 * itself, it is possible to control its behaviour with @FT_Property_Set 0215 * and @FT_Property_Get. 0216 * 0217 * The TrueType driver's module name is 'truetype'; a single property 0218 * @interpreter-version is available, as documented in the @properties 0219 * section. 0220 * 0221 * To help understand the differences between interpreter versions, we 0222 * introduce a list of definitions, kindly provided by Greg Hitchcock. 0223 * 0224 * _Bi-Level Rendering_ 0225 * 0226 * Monochromatic rendering, exclusively used in the early days of 0227 * TrueType by both Apple and Microsoft. Microsoft's GDI interface 0228 * supported hinting of the right-side bearing point, such that the 0229 * advance width could be non-linear. Most often this was done to 0230 * achieve some level of glyph symmetry. To enable reasonable 0231 * performance (e.g., not having to run hinting on all glyphs just to get 0232 * the widths) there was a bit in the head table indicating if the side 0233 * bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache 0234 * hinting widths across multiple sizes and device aspect ratios. 0235 * 0236 * _Font Smoothing_ 0237 * 0238 * Microsoft's GDI implementation of anti-aliasing. Not traditional 0239 * anti-aliasing as the outlines were hinted before the sampling. The 0240 * widths matched the bi-level rendering. 0241 * 0242 * _ClearType Rendering_ 0243 * 0244 * Technique that uses physical subpixels to improve rendering on LCD 0245 * (and other) displays. Because of the higher resolution, many methods 0246 * of improving symmetry in glyphs through hinting the right-side bearing 0247 * were no longer necessary. This lead to what GDI calls 'natural 0248 * widths' ClearType, see 0249 * http://rastertragedy.com/RTRCh4.htm#Sec21. Since hinting 0250 * has extra resolution, most non-linearity went away, but it is still 0251 * possible for hints to change the advance widths in this mode. 0252 * 0253 * _ClearType Compatible Widths_ 0254 * 0255 * One of the earliest challenges with ClearType was allowing the 0256 * implementation in GDI to be selected without requiring all UI and 0257 * documents to reflow. To address this, a compatible method of 0258 * rendering ClearType was added where the font hints are executed once 0259 * to determine the width in bi-level rendering, and then re-run in 0260 * ClearType, with the difference in widths being absorbed in the font 0261 * hints for ClearType (mostly in the white space of hints); see 0262 * http://rastertragedy.com/RTRCh4.htm#Sec20. Somewhat by 0263 * definition, compatible width ClearType allows for non-linear widths, 0264 * but only when the bi-level version has non-linear widths. 0265 * 0266 * _ClearType Subpixel Positioning_ 0267 * 0268 * One of the nice benefits of ClearType is the ability to more crisply 0269 * display fractional widths; unfortunately, the GDI model of integer 0270 * bitmaps did not support this. However, the WPF and Direct Write 0271 * frameworks do support fractional widths. DWrite calls this 'natural 0272 * mode', not to be confused with GDI's 'natural widths'. Subpixel 0273 * positioning, in the current implementation of Direct Write, 0274 * unfortunately does not support hinted advance widths, see 0275 * http://rastertragedy.com/RTRCh4.htm#Sec22. Note that the 0276 * TrueType interpreter fully allows the advance width to be adjusted in 0277 * this mode, just the DWrite client will ignore those changes. 0278 * 0279 * _ClearType Backward Compatibility_ 0280 * 0281 * This is a set of exceptions made in the TrueType interpreter to 0282 * minimize hinting techniques that were problematic with the extra 0283 * resolution of ClearType; see 0284 * http://rastertragedy.com/RTRCh4.htm#Sec1 and 0285 * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx. 0286 * This technique is not to be confused with ClearType compatible widths. 0287 * ClearType backward compatibility has no direct impact on changing 0288 * advance widths, but there might be an indirect impact on disabling 0289 * some deltas. This could be worked around in backward compatibility 0290 * mode. 0291 * 0292 * _Native ClearType Mode_ 0293 * 0294 * (Not to be confused with 'natural widths'.) This mode removes all the 0295 * exceptions in the TrueType interpreter when running with ClearType. 0296 * Any issues on widths would still apply, though. 0297 * 0298 */ 0299 0300 0301 /************************************************************************** 0302 * 0303 * @section: 0304 * ot_svg_driver 0305 * 0306 * @title: 0307 * The SVG driver 0308 * 0309 * @abstract: 0310 * Controlling the external rendering of OT-SVG glyphs. 0311 * 0312 * @description: 0313 * By default, FreeType can only load the 'SVG~' table of OpenType fonts 0314 * if configuration macro `FT_CONFIG_OPTION_SVG` is defined. To make it 0315 * render SVG glyphs, an external SVG rendering library is needed. All 0316 * details on the interface between FreeType and the external library 0317 * via function hooks can be found in section @svg_fonts. 0318 * 0319 * The OT-SVG driver's module name is 'ot-svg'; it supports a single 0320 * property called @svg-hooks, documented below in the @properties 0321 * section. 0322 * 0323 */ 0324 0325 0326 /************************************************************************** 0327 * 0328 * @section: 0329 * properties 0330 * 0331 * @title: 0332 * Driver properties 0333 * 0334 * @abstract: 0335 * Controlling driver modules. 0336 * 0337 * @description: 0338 * Driver modules can be controlled by setting and unsetting properties, 0339 * using the functions @FT_Property_Set and @FT_Property_Get. This 0340 * section documents the available properties, together with auxiliary 0341 * macros and structures. 0342 * 0343 */ 0344 0345 0346 /************************************************************************** 0347 * 0348 * @enum: 0349 * FT_HINTING_XXX 0350 * 0351 * @description: 0352 * A list of constants used for the @hinting-engine property to select 0353 * the hinting engine for CFF, Type~1, and CID fonts. 0354 * 0355 * @values: 0356 * FT_HINTING_FREETYPE :: 0357 * Use the old FreeType hinting engine. 0358 * 0359 * FT_HINTING_ADOBE :: 0360 * Use the hinting engine contributed by Adobe. 0361 * 0362 * @since: 0363 * 2.9 0364 * 0365 */ 0366 #define FT_HINTING_FREETYPE 0 0367 #define FT_HINTING_ADOBE 1 0368 0369 /* these constants (introduced in 2.4.12) are deprecated */ 0370 #define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE 0371 #define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE 0372 0373 0374 /************************************************************************** 0375 * 0376 * @property: 0377 * hinting-engine 0378 * 0379 * @description: 0380 * Thanks to Adobe, which contributed a new hinting (and parsing) engine, 0381 * an application can select between 'freetype' and 'adobe' if compiled 0382 * with `CFF_CONFIG_OPTION_OLD_ENGINE`. If this configuration macro 0383 * isn't defined, 'hinting-engine' does nothing. 0384 * 0385 * The same holds for the Type~1 and CID modules if compiled with 0386 * `T1_CONFIG_OPTION_OLD_ENGINE`. 0387 * 0388 * For the 'cff' module, the default engine is 'adobe'. For both the 0389 * 'type1' and 't1cid' modules, the default engine is 'adobe', too. 0390 * 0391 * @note: 0392 * This property can be used with @FT_Property_Get also. 0393 * 0394 * This property can be set via the `FREETYPE_PROPERTIES` environment 0395 * variable (using values 'adobe' or 'freetype'). 0396 * 0397 * @example: 0398 * The following example code demonstrates how to select Adobe's hinting 0399 * engine for the 'cff' module (omitting the error handling). 0400 * 0401 * ``` 0402 * FT_Library library; 0403 * FT_UInt hinting_engine = FT_HINTING_ADOBE; 0404 * 0405 * 0406 * FT_Init_FreeType( &library ); 0407 * 0408 * FT_Property_Set( library, "cff", 0409 * "hinting-engine", &hinting_engine ); 0410 * ``` 0411 * 0412 * @since: 0413 * 2.4.12 (for 'cff' module) 0414 * 0415 * 2.9 (for 'type1' and 't1cid' modules) 0416 * 0417 */ 0418 0419 0420 /************************************************************************** 0421 * 0422 * @property: 0423 * no-stem-darkening 0424 * 0425 * @description: 0426 * All glyphs that pass through the auto-hinter will be emboldened unless 0427 * this property is set to TRUE. The same is true for the CFF, Type~1, 0428 * and CID font modules if the 'Adobe' engine is selected (which is the 0429 * default). 0430 * 0431 * Stem darkening emboldens glyphs at smaller sizes to make them more 0432 * readable on common low-DPI screens when using linear alpha blending 0433 * and gamma correction, see @FT_Render_Glyph. When not using linear 0434 * alpha blending and gamma correction, glyphs will appear heavy and 0435 * fuzzy! 0436 * 0437 * Gamma correction essentially lightens fonts since shades of grey are 0438 * shifted to higher pixel values (=~higher brightness) to match the 0439 * original intention to the reality of our screens. The side-effect is 0440 * that glyphs 'thin out'. Mac OS~X and Adobe's proprietary font 0441 * rendering library implement a counter-measure: stem darkening at 0442 * smaller sizes where shades of gray dominate. By emboldening a glyph 0443 * slightly in relation to its pixel size, individual pixels get higher 0444 * coverage of filled-in outlines and are therefore 'blacker'. This 0445 * counteracts the 'thinning out' of glyphs, making text remain readable 0446 * at smaller sizes. 0447 * 0448 * For the auto-hinter, stem-darkening is experimental currently and thus 0449 * switched off by default (that is, `no-stem-darkening` is set to TRUE 0450 * by default). Total consistency with the CFF driver is not achieved 0451 * right now because the emboldening method differs and glyphs must be 0452 * scaled down on the Y-axis to keep outline points inside their 0453 * precomputed blue zones. The smaller the size (especially 9ppem and 0454 * down), the higher the loss of emboldening versus the CFF driver. 0455 * 0456 * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set. 0457 * 0458 * @note: 0459 * This property can be used with @FT_Property_Get also. 0460 * 0461 * This property can be set via the `FREETYPE_PROPERTIES` environment 0462 * variable (using values 1 and 0 for 'on' and 'off', respectively). It 0463 * can also be set per face using @FT_Face_Properties with 0464 * @FT_PARAM_TAG_STEM_DARKENING. 0465 * 0466 * @example: 0467 * ``` 0468 * FT_Library library; 0469 * FT_Bool no_stem_darkening = TRUE; 0470 * 0471 * 0472 * FT_Init_FreeType( &library ); 0473 * 0474 * FT_Property_Set( library, "cff", 0475 * "no-stem-darkening", &no_stem_darkening ); 0476 * ``` 0477 * 0478 * @since: 0479 * 2.4.12 (for 'cff' module) 0480 * 0481 * 2.6.2 (for 'autofitter' module) 0482 * 0483 * 2.9 (for 'type1' and 't1cid' modules) 0484 * 0485 */ 0486 0487 0488 /************************************************************************** 0489 * 0490 * @property: 0491 * darkening-parameters 0492 * 0493 * @description: 0494 * By default, the Adobe hinting engine, as used by the CFF, Type~1, and 0495 * CID font drivers, darkens stems as follows (if the `no-stem-darkening` 0496 * property isn't set): 0497 * 0498 * ``` 0499 * stem width <= 0.5px: darkening amount = 0.4px 0500 * stem width = 1px: darkening amount = 0.275px 0501 * stem width = 1.667px: darkening amount = 0.275px 0502 * stem width >= 2.333px: darkening amount = 0px 0503 * ``` 0504 * 0505 * and piecewise linear in-between. At configuration time, these four 0506 * control points can be set with the macro 0507 * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID 0508 * drivers share these values. At runtime, the control points can be 0509 * changed using the `darkening-parameters` property (see the example 0510 * below that demonstrates this for the Type~1 driver). 0511 * 0512 * The x~values give the stem width, and the y~values the darkening 0513 * amount. The unit is 1000th of pixels. All coordinate values must be 0514 * positive; the x~values must be monotonically increasing; the y~values 0515 * must be monotonically decreasing and smaller than or equal to 500 0516 * (corresponding to half a pixel); the slope of each linear piece must 0517 * be shallower than -1 (e.g., -.4). 0518 * 0519 * The auto-hinter provides this property, too, as an experimental 0520 * feature. See @no-stem-darkening for more. 0521 * 0522 * @note: 0523 * This property can be used with @FT_Property_Get also. 0524 * 0525 * This property can be set via the `FREETYPE_PROPERTIES` environment 0526 * variable, using eight comma-separated integers without spaces. Here 0527 * the above example, using `\` to break the line for readability. 0528 * 0529 * ``` 0530 * FREETYPE_PROPERTIES=\ 0531 * type1:darkening-parameters=500,300,1000,200,1500,100,2000,0 0532 * ``` 0533 * 0534 * @example: 0535 * ``` 0536 * FT_Library library; 0537 * FT_Int darken_params[8] = { 500, 300, // x1, y1 0538 * 1000, 200, // x2, y2 0539 * 1500, 100, // x3, y3 0540 * 2000, 0 }; // x4, y4 0541 * 0542 * 0543 * FT_Init_FreeType( &library ); 0544 * 0545 * FT_Property_Set( library, "type1", 0546 * "darkening-parameters", darken_params ); 0547 * ``` 0548 * 0549 * @since: 0550 * 2.5.1 (for 'cff' module) 0551 * 0552 * 2.6.2 (for 'autofitter' module) 0553 * 0554 * 2.9 (for 'type1' and 't1cid' modules) 0555 * 0556 */ 0557 0558 0559 /************************************************************************** 0560 * 0561 * @property: 0562 * random-seed 0563 * 0564 * @description: 0565 * By default, the seed value for the CFF 'random' operator and the 0566 * similar '0 28 callothersubr pop' command for the Type~1 and CID 0567 * drivers is set to a random value. However, mainly for debugging 0568 * purposes, it is often necessary to use a known value as a seed so that 0569 * the pseudo-random number sequences generated by 'random' are 0570 * repeatable. 0571 * 0572 * The `random-seed` property does that. Its argument is a signed 32bit 0573 * integer; if the value is zero or negative, the seed given by the 0574 * `intitialRandomSeed` private DICT operator in a CFF file gets used (or 0575 * a default value if there is no such operator). If the value is 0576 * positive, use it instead of `initialRandomSeed`, which is consequently 0577 * ignored. 0578 * 0579 * @note: 0580 * This property can be set via the `FREETYPE_PROPERTIES` environment 0581 * variable. It can also be set per face using @FT_Face_Properties with 0582 * @FT_PARAM_TAG_RANDOM_SEED. 0583 * 0584 * @since: 0585 * 2.8 (for 'cff' module) 0586 * 0587 * 2.9 (for 'type1' and 't1cid' modules) 0588 * 0589 */ 0590 0591 0592 /************************************************************************** 0593 * 0594 * @property: 0595 * no-long-family-names 0596 * 0597 * @description: 0598 * If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling 0599 * FreeType, the PCF driver constructs long family names. 0600 * 0601 * There are many PCF fonts just called 'Fixed' which look completely 0602 * different, and which have nothing to do with each other. When 0603 * selecting 'Fixed' in KDE or Gnome one gets results that appear rather 0604 * random, the style changes often if one changes the size and one cannot 0605 * select some fonts at all. The improve this situation, the PCF module 0606 * prepends the foundry name (plus a space) to the family name. It also 0607 * checks whether there are 'wide' characters; all put together, family 0608 * names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed. 0609 * 0610 * If `no-long-family-names` is set, this feature gets switched off. 0611 * 0612 * @note: 0613 * This property can be used with @FT_Property_Get also. 0614 * 0615 * This property can be set via the `FREETYPE_PROPERTIES` environment 0616 * variable (using values 1 and 0 for 'on' and 'off', respectively). 0617 * 0618 * @example: 0619 * ``` 0620 * FT_Library library; 0621 * FT_Bool no_long_family_names = TRUE; 0622 * 0623 * 0624 * FT_Init_FreeType( &library ); 0625 * 0626 * FT_Property_Set( library, "pcf", 0627 * "no-long-family-names", 0628 * &no_long_family_names ); 0629 * ``` 0630 * 0631 * @since: 0632 * 2.8 0633 */ 0634 0635 0636 /************************************************************************** 0637 * 0638 * @enum: 0639 * TT_INTERPRETER_VERSION_XXX 0640 * 0641 * @description: 0642 * A list of constants used for the @interpreter-version property to 0643 * select the hinting engine for Truetype fonts. 0644 * 0645 * The numeric value in the constant names represents the version number 0646 * as returned by the 'GETINFO' bytecode instruction. 0647 * 0648 * @values: 0649 * TT_INTERPRETER_VERSION_35 :: 0650 * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in 0651 * Windows~98; only grayscale and B/W rasterizing is supported. 0652 * 0653 * TT_INTERPRETER_VERSION_38 :: 0654 * Version~38 is the same Version~40. The original 'Infinality' code is 0655 * no longer available. 0656 * 0657 * TT_INTERPRETER_VERSION_40 :: 0658 * Version~40 corresponds to MS rasterizer v.2.1; it is roughly 0659 * equivalent to the hinting provided by DirectWrite ClearType (as can 0660 * be found, for example, in Microsoft's Edge Browser on Windows~10). 0661 * It is used in FreeType to select the 'minimal' subpixel hinting 0662 * code, a stripped-down and higher performance version of the 0663 * 'Infinality' code. 0664 * 0665 * @note: 0666 * This property controls the behaviour of the bytecode interpreter and 0667 * thus how outlines get hinted. It does **not** control how glyph get 0668 * rasterized! In particular, it does not control subpixel color 0669 * filtering. 0670 * 0671 * If FreeType has not been compiled with the configuration option 0672 * `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes 0673 * an `FT_Err_Unimplemented_Feature` error. 0674 * 0675 * Depending on the graphics framework, Microsoft uses different bytecode 0676 * and rendering engines. As a consequence, the version numbers returned 0677 * by a call to the 'GETINFO' bytecode instruction are more convoluted 0678 * than desired. 0679 * 0680 * Here are two tables that try to shed some light on the possible values 0681 * for the MS rasterizer engine, together with the additional features 0682 * introduced by it. 0683 * 0684 * ``` 0685 * GETINFO framework version feature 0686 * ------------------------------------------------------------------- 0687 * 3 GDI (Win 3.1), v1.0 16-bit, first version 0688 * TrueImage 0689 * 33 GDI (Win NT 3.1), v1.5 32-bit 0690 * HP Laserjet 0691 * 34 GDI (Win 95) v1.6 font smoothing, 0692 * new SCANTYPE opcode 0693 * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET 0694 * bits in composite glyphs 0695 * 36 MGDI (Win CE 2) v1.6+ classic ClearType 0696 * 37 GDI (XP and later), v1.8 ClearType 0697 * GDI+ old (before Vista) 0698 * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType, 0699 * WPF Y-direction ClearType, 0700 * additional error checking 0701 * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags 0702 * in GETINFO opcode, 0703 * bug fixes 0704 * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag 0705 * DWrite (Win 8) in GETINFO opcode, 0706 * Gray ClearType 0707 * ``` 0708 * 0709 * The 'version' field gives a rough orientation only, since some 0710 * applications provided certain features much earlier (as an example, 0711 * Microsoft Reader used subpixel and Y-direction ClearType already in 0712 * Windows 2000). Similarly, updates to a given framework might include 0713 * improved hinting support. 0714 * 0715 * ``` 0716 * version sampling rendering comment 0717 * x y x y 0718 * -------------------------------------------------------------- 0719 * v1.0 normal normal B/W B/W bi-level 0720 * v1.6 high high gray gray grayscale 0721 * v1.8 high normal color-filter B/W (GDI) ClearType 0722 * v1.9 high high color-filter gray Color ClearType 0723 * v2.1 high normal gray B/W Gray ClearType 0724 * v2.1 high high gray gray Gray ClearType 0725 * ``` 0726 * 0727 * Color and Gray ClearType are the two available variants of 0728 * 'Y-direction ClearType', meaning grayscale rasterization along the 0729 * Y-direction; the name used in the TrueType specification for this 0730 * feature is 'symmetric smoothing'. 'Classic ClearType' is the original 0731 * algorithm used before introducing a modified version in Win~XP. 0732 * Another name for v1.6's grayscale rendering is 'font smoothing', and 0733 * 'Color ClearType' is sometimes also called 'DWrite ClearType'. To 0734 * differentiate between today's Color ClearType and the earlier 0735 * ClearType variant with B/W rendering along the vertical axis, the 0736 * latter is sometimes called 'GDI ClearType'. 0737 * 0738 * 'Normal' and 'high' sampling describe the (virtual) resolution to 0739 * access the rasterized outline after the hinting process. 'Normal' 0740 * means 1 sample per grid line (i.e., B/W). In the current Microsoft 0741 * implementation, 'high' means an extra virtual resolution of 16x16 (or 0742 * 16x1) grid lines per pixel for bytecode instructions like 'MIRP'. 0743 * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid 0744 * lines for color filtering if Color ClearType is activated. 0745 * 0746 * Note that 'Gray ClearType' is essentially the same as v1.6's grayscale 0747 * rendering. However, the GETINFO instruction handles it differently: 0748 * v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns 0749 * bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19 0750 * (Gray ClearType). Also, this mode respects bits 2 and~3 for the 0751 * version~1 gasp table exclusively (like Color ClearType), while v1.6 0752 * only respects the values of version~0 (bits 0 and~1). 0753 * 0754 * Keep in mind that the features of the above interpreter versions might 0755 * not map exactly to FreeType features or behavior because it is a 0756 * fundamentally different library with different internals. 0757 * 0758 */ 0759 #define TT_INTERPRETER_VERSION_35 35 0760 #define TT_INTERPRETER_VERSION_38 38 0761 #define TT_INTERPRETER_VERSION_40 40 0762 0763 0764 /************************************************************************** 0765 * 0766 * @property: 0767 * interpreter-version 0768 * 0769 * @description: 0770 * Currently, three versions are available, two representing the bytecode 0771 * interpreter with subpixel hinting support (old 'Infinality' code and 0772 * new stripped-down and higher performance 'minimal' code) and one 0773 * without, respectively. The default is subpixel support if 0774 * `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel 0775 * support otherwise (since it isn't available then). 0776 * 0777 * If subpixel hinting is on, many TrueType bytecode instructions behave 0778 * differently compared to B/W or grayscale rendering (except if 'native 0779 * ClearType' is selected by the font). Microsoft's main idea is to 0780 * render at a much increased horizontal resolution, then sampling down 0781 * the created output to subpixel precision. However, many older fonts 0782 * are not suited to this and must be specially taken care of by applying 0783 * (hardcoded) tweaks in Microsoft's interpreter. 0784 * 0785 * Details on subpixel hinting and some of the necessary tweaks can be 0786 * found in Greg Hitchcock's whitepaper at 0787 * 'https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'. 0788 * Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2, 0789 * or 6x5 supersampling) like discussed in the paper. Depending on the 0790 * chosen interpreter, it simply ignores instructions on vertical stems 0791 * to arrive at very similar results. 0792 * 0793 * @note: 0794 * This property can be used with @FT_Property_Get also. 0795 * 0796 * This property can be set via the `FREETYPE_PROPERTIES` environment 0797 * variable (using values '35', '38', or '40'). 0798 * 0799 * @example: 0800 * The following example code demonstrates how to deactivate subpixel 0801 * hinting (omitting the error handling). 0802 * 0803 * ``` 0804 * FT_Library library; 0805 * FT_Face face; 0806 * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35; 0807 * 0808 * 0809 * FT_Init_FreeType( &library ); 0810 * 0811 * FT_Property_Set( library, "truetype", 0812 * "interpreter-version", 0813 * &interpreter_version ); 0814 * ``` 0815 * 0816 * @since: 0817 * 2.5 0818 */ 0819 0820 /************************************************************************** 0821 * 0822 * @property: 0823 * svg-hooks 0824 * 0825 * @description: 0826 * Set up the interface between FreeType and an extern SVG rendering 0827 * library like 'librsvg'. All details on the function hooks can be 0828 * found in section @svg_fonts. 0829 * 0830 * @example: 0831 * The following example code expects that the four hook functions 0832 * `svg_*` are defined elsewhere. Error handling is omitted, too. 0833 * 0834 * ``` 0835 * FT_Library library; 0836 * SVG_RendererHooks hooks = { 0837 * (SVG_Lib_Init_Func)svg_init, 0838 * (SVG_Lib_Free_Func)svg_free, 0839 * (SVG_Lib_Render_Func)svg_render, 0840 * (SVG_Lib_Preset_Slot_Func)svg_preset_slot }; 0841 * 0842 * 0843 * FT_Init_FreeType( &library ); 0844 * 0845 * FT_Property_Set( library, "ot-svg", 0846 * "svg-hooks", &hooks ); 0847 * ``` 0848 * 0849 * @since: 0850 * 2.12 0851 */ 0852 0853 0854 /************************************************************************** 0855 * 0856 * @property: 0857 * glyph-to-script-map 0858 * 0859 * @description: 0860 * **Experimental only** 0861 * 0862 * The auto-hinter provides various script modules to hint glyphs. 0863 * Examples of supported scripts are Latin or CJK. Before a glyph is 0864 * auto-hinted, the Unicode character map of the font gets examined, and 0865 * the script is then determined based on Unicode character ranges, see 0866 * below. 0867 * 0868 * OpenType fonts, however, often provide much more glyphs than character 0869 * codes (small caps, superscripts, ligatures, swashes, etc.), to be 0870 * controlled by so-called 'features'. Handling OpenType features can be 0871 * quite complicated and thus needs a separate library on top of 0872 * FreeType. 0873 * 0874 * The mapping between glyph indices and scripts (in the auto-hinter 0875 * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array 0876 * with `num_glyphs` elements, as found in the font's @FT_Face structure. 0877 * The `glyph-to-script-map` property returns a pointer to this array, 0878 * which can be modified as needed. Note that the modification should 0879 * happen before the first glyph gets processed by the auto-hinter so 0880 * that the global analysis of the font shapes actually uses the modified 0881 * mapping. 0882 * 0883 * @example: 0884 * The following example code demonstrates how to access it (omitting the 0885 * error handling). 0886 * 0887 * ``` 0888 * FT_Library library; 0889 * FT_Face face; 0890 * FT_Prop_GlyphToScriptMap prop; 0891 * 0892 * 0893 * FT_Init_FreeType( &library ); 0894 * FT_New_Face( library, "foo.ttf", 0, &face ); 0895 * 0896 * prop.face = face; 0897 * 0898 * FT_Property_Get( library, "autofitter", 0899 * "glyph-to-script-map", &prop ); 0900 * 0901 * // adjust `prop.map' as needed right here 0902 * 0903 * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT ); 0904 * ``` 0905 * 0906 * @since: 0907 * 2.4.11 0908 * 0909 */ 0910 0911 0912 /************************************************************************** 0913 * 0914 * @enum: 0915 * FT_AUTOHINTER_SCRIPT_XXX 0916 * 0917 * @description: 0918 * **Experimental only** 0919 * 0920 * A list of constants used for the @glyph-to-script-map property to 0921 * specify the script submodule the auto-hinter should use for hinting a 0922 * particular glyph. 0923 * 0924 * @values: 0925 * FT_AUTOHINTER_SCRIPT_NONE :: 0926 * Don't auto-hint this glyph. 0927 * 0928 * FT_AUTOHINTER_SCRIPT_LATIN :: 0929 * Apply the latin auto-hinter. For the auto-hinter, 'latin' is a very 0930 * broad term, including Cyrillic and Greek also since characters from 0931 * those scripts share the same design constraints. 0932 * 0933 * By default, characters from the following Unicode ranges are 0934 * assigned to this submodule. 0935 * 0936 * ``` 0937 * U+0020 - U+007F // Basic Latin (no control characters) 0938 * U+00A0 - U+00FF // Latin-1 Supplement (no control characters) 0939 * U+0100 - U+017F // Latin Extended-A 0940 * U+0180 - U+024F // Latin Extended-B 0941 * U+0250 - U+02AF // IPA Extensions 0942 * U+02B0 - U+02FF // Spacing Modifier Letters 0943 * U+0300 - U+036F // Combining Diacritical Marks 0944 * U+0370 - U+03FF // Greek and Coptic 0945 * U+0400 - U+04FF // Cyrillic 0946 * U+0500 - U+052F // Cyrillic Supplement 0947 * U+1D00 - U+1D7F // Phonetic Extensions 0948 * U+1D80 - U+1DBF // Phonetic Extensions Supplement 0949 * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement 0950 * U+1E00 - U+1EFF // Latin Extended Additional 0951 * U+1F00 - U+1FFF // Greek Extended 0952 * U+2000 - U+206F // General Punctuation 0953 * U+2070 - U+209F // Superscripts and Subscripts 0954 * U+20A0 - U+20CF // Currency Symbols 0955 * U+2150 - U+218F // Number Forms 0956 * U+2460 - U+24FF // Enclosed Alphanumerics 0957 * U+2C60 - U+2C7F // Latin Extended-C 0958 * U+2DE0 - U+2DFF // Cyrillic Extended-A 0959 * U+2E00 - U+2E7F // Supplemental Punctuation 0960 * U+A640 - U+A69F // Cyrillic Extended-B 0961 * U+A720 - U+A7FF // Latin Extended-D 0962 * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) 0963 * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols 0964 * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement 0965 * ``` 0966 * 0967 * FT_AUTOHINTER_SCRIPT_CJK :: 0968 * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old 0969 * Vietnamese, and some other scripts. 0970 * 0971 * By default, characters from the following Unicode ranges are 0972 * assigned to this submodule. 0973 * 0974 * ``` 0975 * U+1100 - U+11FF // Hangul Jamo 0976 * U+2E80 - U+2EFF // CJK Radicals Supplement 0977 * U+2F00 - U+2FDF // Kangxi Radicals 0978 * U+2FF0 - U+2FFF // Ideographic Description Characters 0979 * U+3000 - U+303F // CJK Symbols and Punctuation 0980 * U+3040 - U+309F // Hiragana 0981 * U+30A0 - U+30FF // Katakana 0982 * U+3100 - U+312F // Bopomofo 0983 * U+3130 - U+318F // Hangul Compatibility Jamo 0984 * U+3190 - U+319F // Kanbun 0985 * U+31A0 - U+31BF // Bopomofo Extended 0986 * U+31C0 - U+31EF // CJK Strokes 0987 * U+31F0 - U+31FF // Katakana Phonetic Extensions 0988 * U+3200 - U+32FF // Enclosed CJK Letters and Months 0989 * U+3300 - U+33FF // CJK Compatibility 0990 * U+3400 - U+4DBF // CJK Unified Ideographs Extension A 0991 * U+4DC0 - U+4DFF // Yijing Hexagram Symbols 0992 * U+4E00 - U+9FFF // CJK Unified Ideographs 0993 * U+A960 - U+A97F // Hangul Jamo Extended-A 0994 * U+AC00 - U+D7AF // Hangul Syllables 0995 * U+D7B0 - U+D7FF // Hangul Jamo Extended-B 0996 * U+F900 - U+FAFF // CJK Compatibility Ideographs 0997 * U+FE10 - U+FE1F // Vertical forms 0998 * U+FE30 - U+FE4F // CJK Compatibility Forms 0999 * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms 1000 * U+1B000 - U+1B0FF // Kana Supplement 1001 * U+1D300 - U+1D35F // Tai Xuan Hing Symbols 1002 * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement 1003 * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B 1004 * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C 1005 * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D 1006 * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement 1007 * ``` 1008 * 1009 * FT_AUTOHINTER_SCRIPT_INDIC :: 1010 * Apply the indic auto-hinter, covering all major scripts from the 1011 * Indian sub-continent and some other related scripts like Thai, Lao, 1012 * or Tibetan. 1013 * 1014 * By default, characters from the following Unicode ranges are 1015 * assigned to this submodule. 1016 * 1017 * ``` 1018 * U+0900 - U+0DFF // Indic Range 1019 * U+0F00 - U+0FFF // Tibetan 1020 * U+1900 - U+194F // Limbu 1021 * U+1B80 - U+1BBF // Sundanese 1022 * U+A800 - U+A82F // Syloti Nagri 1023 * U+ABC0 - U+ABFF // Meetei Mayek 1024 * U+11800 - U+118DF // Sharada 1025 * ``` 1026 * 1027 * Note that currently Indic support is rudimentary only, missing blue 1028 * zone support. 1029 * 1030 * @since: 1031 * 2.4.11 1032 * 1033 */ 1034 #define FT_AUTOHINTER_SCRIPT_NONE 0 1035 #define FT_AUTOHINTER_SCRIPT_LATIN 1 1036 #define FT_AUTOHINTER_SCRIPT_CJK 2 1037 #define FT_AUTOHINTER_SCRIPT_INDIC 3 1038 1039 1040 /************************************************************************** 1041 * 1042 * @struct: 1043 * FT_Prop_GlyphToScriptMap 1044 * 1045 * @description: 1046 * **Experimental only** 1047 * 1048 * The data exchange structure for the @glyph-to-script-map property. 1049 * 1050 * @since: 1051 * 2.4.11 1052 * 1053 */ 1054 typedef struct FT_Prop_GlyphToScriptMap_ 1055 { 1056 FT_Face face; 1057 FT_UShort* map; 1058 1059 } FT_Prop_GlyphToScriptMap; 1060 1061 1062 /************************************************************************** 1063 * 1064 * @property: 1065 * fallback-script 1066 * 1067 * @description: 1068 * **Experimental only** 1069 * 1070 * If no auto-hinter script module can be assigned to a glyph, a fallback 1071 * script gets assigned to it (see also the @glyph-to-script-map 1072 * property). By default, this is @FT_AUTOHINTER_SCRIPT_CJK. Using the 1073 * `fallback-script` property, this fallback value can be changed. 1074 * 1075 * @note: 1076 * This property can be used with @FT_Property_Get also. 1077 * 1078 * It's important to use the right timing for changing this value: The 1079 * creation of the glyph-to-script map that eventually uses the fallback 1080 * script value gets triggered either by setting or reading a 1081 * face-specific property like @glyph-to-script-map, or by auto-hinting 1082 * any glyph from that face. In particular, if you have already created 1083 * an @FT_Face structure but not loaded any glyph (using the 1084 * auto-hinter), a change of the fallback script will affect this face. 1085 * 1086 * @example: 1087 * ``` 1088 * FT_Library library; 1089 * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; 1090 * 1091 * 1092 * FT_Init_FreeType( &library ); 1093 * 1094 * FT_Property_Set( library, "autofitter", 1095 * "fallback-script", &fallback_script ); 1096 * ``` 1097 * 1098 * @since: 1099 * 2.4.11 1100 * 1101 */ 1102 1103 1104 /************************************************************************** 1105 * 1106 * @property: 1107 * default-script 1108 * 1109 * @description: 1110 * **Experimental only** 1111 * 1112 * If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make 1113 * the HarfBuzz library access OpenType features for getting better glyph 1114 * coverages, this property sets the (auto-fitter) script to be used for 1115 * the default (OpenType) script data of a font's GSUB table. Features 1116 * for the default script are intended for all scripts not explicitly 1117 * handled in GSUB; an example is a 'dlig' feature, containing the 1118 * combination of the characters 'T', 'E', and 'L' to form a 'TEL' 1119 * ligature. 1120 * 1121 * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the 1122 * `default-script` property, this default value can be changed. 1123 * 1124 * @note: 1125 * This property can be used with @FT_Property_Get also. 1126 * 1127 * It's important to use the right timing for changing this value: The 1128 * creation of the glyph-to-script map that eventually uses the default 1129 * script value gets triggered either by setting or reading a 1130 * face-specific property like @glyph-to-script-map, or by auto-hinting 1131 * any glyph from that face. In particular, if you have already created 1132 * an @FT_Face structure but not loaded any glyph (using the 1133 * auto-hinter), a change of the default script will affect this face. 1134 * 1135 * @example: 1136 * ``` 1137 * FT_Library library; 1138 * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; 1139 * 1140 * 1141 * FT_Init_FreeType( &library ); 1142 * 1143 * FT_Property_Set( library, "autofitter", 1144 * "default-script", &default_script ); 1145 * ``` 1146 * 1147 * @since: 1148 * 2.5.3 1149 * 1150 */ 1151 1152 1153 /************************************************************************** 1154 * 1155 * @property: 1156 * increase-x-height 1157 * 1158 * @description: 1159 * For ppem values in the range 6~<= ppem <= `increase-x-height`, round 1160 * up the font's x~height much more often than normally. If the value is 1161 * set to~0, which is the default, this feature is switched off. Use 1162 * this property to improve the legibility of small font sizes if 1163 * necessary. 1164 * 1165 * @note: 1166 * This property can be used with @FT_Property_Get also. 1167 * 1168 * Set this value right after calling @FT_Set_Char_Size, but before 1169 * loading any glyph (using the auto-hinter). 1170 * 1171 * @example: 1172 * ``` 1173 * FT_Library library; 1174 * FT_Face face; 1175 * FT_Prop_IncreaseXHeight prop; 1176 * 1177 * 1178 * FT_Init_FreeType( &library ); 1179 * FT_New_Face( library, "foo.ttf", 0, &face ); 1180 * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 ); 1181 * 1182 * prop.face = face; 1183 * prop.limit = 14; 1184 * 1185 * FT_Property_Set( library, "autofitter", 1186 * "increase-x-height", &prop ); 1187 * ``` 1188 * 1189 * @since: 1190 * 2.4.11 1191 * 1192 */ 1193 1194 1195 /************************************************************************** 1196 * 1197 * @struct: 1198 * FT_Prop_IncreaseXHeight 1199 * 1200 * @description: 1201 * The data exchange structure for the @increase-x-height property. 1202 * 1203 */ 1204 typedef struct FT_Prop_IncreaseXHeight_ 1205 { 1206 FT_Face face; 1207 FT_UInt limit; 1208 1209 } FT_Prop_IncreaseXHeight; 1210 1211 1212 /************************************************************************** 1213 * 1214 * @property: 1215 * warping 1216 * 1217 * @description: 1218 * **Obsolete** 1219 * 1220 * This property was always experimental and probably never worked 1221 * correctly. It was entirely removed from the FreeType~2 sources. This 1222 * entry is only here for historical reference. 1223 * 1224 * Warping only worked in 'normal' auto-hinting mode replacing it. The 1225 * idea of the code was to slightly scale and shift a glyph along the 1226 * non-hinted dimension (which is usually the horizontal axis) so that as 1227 * much of its segments were aligned (more or less) to the grid. To find 1228 * out a glyph's optimal scaling and shifting value, various parameter 1229 * combinations were tried and scored. 1230 * 1231 * @since: 1232 * 2.6 1233 * 1234 */ 1235 1236 1237 /* */ 1238 1239 1240 FT_END_HEADER 1241 1242 1243 #endif /* FTDRIVER_H_ */ 1244 1245 1246 /* END */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|