|
|
|||
Warning, file /include/freetype2/freetype/ftglyph.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 * ftglyph.h 0004 * 0005 * FreeType convenience functions to handle glyphs (specification). 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 /************************************************************************** 0020 * 0021 * This file contains the definition of several convenience functions that 0022 * can be used by client applications to easily retrieve glyph bitmaps and 0023 * outlines from a given face. 0024 * 0025 * These functions should be optional if you are writing a font server or 0026 * text layout engine on top of FreeType. However, they are pretty handy 0027 * for many other simple uses of the library. 0028 * 0029 */ 0030 0031 0032 #ifndef FTGLYPH_H_ 0033 #define FTGLYPH_H_ 0034 0035 0036 #include <freetype/freetype.h> 0037 0038 #ifdef FREETYPE_H 0039 #error "freetype.h of FreeType 1 has been loaded!" 0040 #error "Please fix the directory search order for header files" 0041 #error "so that freetype.h of FreeType 2 is found first." 0042 #endif 0043 0044 0045 FT_BEGIN_HEADER 0046 0047 0048 /************************************************************************** 0049 * 0050 * @section: 0051 * glyph_management 0052 * 0053 * @title: 0054 * Glyph Management 0055 * 0056 * @abstract: 0057 * Generic interface to manage individual glyph data. 0058 * 0059 * @description: 0060 * This section contains definitions used to manage glyph data through 0061 * generic @FT_Glyph objects. Each of them can contain a bitmap, 0062 * a vector outline, or even images in other formats. These objects are 0063 * detached from @FT_Face, contrary to @FT_GlyphSlot. 0064 * 0065 */ 0066 0067 0068 /* forward declaration to a private type */ 0069 typedef struct FT_Glyph_Class_ FT_Glyph_Class; 0070 0071 0072 /************************************************************************** 0073 * 0074 * @type: 0075 * FT_Glyph 0076 * 0077 * @description: 0078 * Handle to an object used to model generic glyph images. It is a 0079 * pointer to the @FT_GlyphRec structure and can contain a glyph bitmap 0080 * or pointer. 0081 * 0082 * @note: 0083 * Glyph objects are not owned by the library. You must thus release 0084 * them manually (through @FT_Done_Glyph) _before_ calling 0085 * @FT_Done_FreeType. 0086 */ 0087 typedef struct FT_GlyphRec_* FT_Glyph; 0088 0089 0090 /************************************************************************** 0091 * 0092 * @struct: 0093 * FT_GlyphRec 0094 * 0095 * @description: 0096 * The root glyph structure contains a given glyph image plus its advance 0097 * width in 16.16 fixed-point format. 0098 * 0099 * @fields: 0100 * library :: 0101 * A handle to the FreeType library object. 0102 * 0103 * clazz :: 0104 * A pointer to the glyph's class. Private. 0105 * 0106 * format :: 0107 * The format of the glyph's image. 0108 * 0109 * advance :: 0110 * A 16.16 vector that gives the glyph's advance width. 0111 */ 0112 typedef struct FT_GlyphRec_ 0113 { 0114 FT_Library library; 0115 const FT_Glyph_Class* clazz; 0116 FT_Glyph_Format format; 0117 FT_Vector advance; 0118 0119 } FT_GlyphRec; 0120 0121 0122 /************************************************************************** 0123 * 0124 * @type: 0125 * FT_BitmapGlyph 0126 * 0127 * @description: 0128 * A handle to an object used to model a bitmap glyph image. This is a 0129 * 'sub-class' of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. 0130 */ 0131 typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph; 0132 0133 0134 /************************************************************************** 0135 * 0136 * @struct: 0137 * FT_BitmapGlyphRec 0138 * 0139 * @description: 0140 * A structure used for bitmap glyph images. This really is a 0141 * 'sub-class' of @FT_GlyphRec. 0142 * 0143 * @fields: 0144 * root :: 0145 * The root fields of @FT_Glyph. 0146 * 0147 * left :: 0148 * The left-side bearing, i.e., the horizontal distance from the 0149 * current pen position to the left border of the glyph bitmap. 0150 * 0151 * top :: 0152 * The top-side bearing, i.e., the vertical distance from the current 0153 * pen position to the top border of the glyph bitmap. This distance 0154 * is positive for upwards~y! 0155 * 0156 * bitmap :: 0157 * A descriptor for the bitmap. 0158 * 0159 * @note: 0160 * You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have 0161 * `glyph->format == FT_GLYPH_FORMAT_BITMAP`. This lets you access the 0162 * bitmap's contents easily. 0163 * 0164 * The corresponding pixel buffer is always owned by @FT_BitmapGlyph and 0165 * is thus created and destroyed with it. 0166 */ 0167 typedef struct FT_BitmapGlyphRec_ 0168 { 0169 FT_GlyphRec root; 0170 FT_Int left; 0171 FT_Int top; 0172 FT_Bitmap bitmap; 0173 0174 } FT_BitmapGlyphRec; 0175 0176 0177 /************************************************************************** 0178 * 0179 * @type: 0180 * FT_OutlineGlyph 0181 * 0182 * @description: 0183 * A handle to an object used to model an outline glyph image. This is a 0184 * 'sub-class' of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. 0185 */ 0186 typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph; 0187 0188 0189 /************************************************************************** 0190 * 0191 * @struct: 0192 * FT_OutlineGlyphRec 0193 * 0194 * @description: 0195 * A structure used for outline (vectorial) glyph images. This really is 0196 * a 'sub-class' of @FT_GlyphRec. 0197 * 0198 * @fields: 0199 * root :: 0200 * The root @FT_Glyph fields. 0201 * 0202 * outline :: 0203 * A descriptor for the outline. 0204 * 0205 * @note: 0206 * You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have 0207 * `glyph->format == FT_GLYPH_FORMAT_OUTLINE`. This lets you access the 0208 * outline's content easily. 0209 * 0210 * As the outline is extracted from a glyph slot, its coordinates are 0211 * expressed normally in 26.6 pixels, unless the flag @FT_LOAD_NO_SCALE 0212 * was used in @FT_Load_Glyph or @FT_Load_Char. 0213 * 0214 * The outline's tables are always owned by the object and are destroyed 0215 * with it. 0216 */ 0217 typedef struct FT_OutlineGlyphRec_ 0218 { 0219 FT_GlyphRec root; 0220 FT_Outline outline; 0221 0222 } FT_OutlineGlyphRec; 0223 0224 0225 /************************************************************************** 0226 * 0227 * @type: 0228 * FT_SvgGlyph 0229 * 0230 * @description: 0231 * A handle to an object used to model an SVG glyph. This is a 0232 * 'sub-class' of @FT_Glyph, and a pointer to @FT_SvgGlyphRec. 0233 * 0234 * @since: 0235 * 2.12 0236 */ 0237 typedef struct FT_SvgGlyphRec_* FT_SvgGlyph; 0238 0239 0240 /************************************************************************** 0241 * 0242 * @struct: 0243 * FT_SvgGlyphRec 0244 * 0245 * @description: 0246 * A structure used for OT-SVG glyphs. This is a 'sub-class' of 0247 * @FT_GlyphRec. 0248 * 0249 * @fields: 0250 * root :: 0251 * The root @FT_GlyphRec fields. 0252 * 0253 * svg_document :: 0254 * A pointer to the SVG document. 0255 * 0256 * svg_document_length :: 0257 * The length of `svg_document`. 0258 * 0259 * glyph_index :: 0260 * The index of the glyph to be rendered. 0261 * 0262 * metrics :: 0263 * A metrics object storing the size information. 0264 * 0265 * units_per_EM :: 0266 * The size of the EM square. 0267 * 0268 * start_glyph_id :: 0269 * The first glyph ID in the glyph range covered by this document. 0270 * 0271 * end_glyph_id :: 0272 * The last glyph ID in the glyph range covered by this document. 0273 * 0274 * transform :: 0275 * A 2x2 transformation matrix to apply to the glyph while rendering 0276 * it. 0277 * 0278 * delta :: 0279 * Translation to apply to the glyph while rendering. 0280 * 0281 * @note: 0282 * The Glyph Management API requires @FT_Glyph or its 'sub-class' to have 0283 * all the information needed to completely define the glyph's rendering. 0284 * Outline-based glyphs can directly apply transformations to the outline 0285 * but this is not possible for an SVG document that hasn't been parsed. 0286 * Therefore, the transformation is stored along with the document. In 0287 * the absence of a 'ViewBox' or 'Width'/'Height' attribute, the size of 0288 * the ViewPort should be assumed to be 'units_per_EM'. 0289 */ 0290 typedef struct FT_SvgGlyphRec_ 0291 { 0292 FT_GlyphRec root; 0293 0294 FT_Byte* svg_document; 0295 FT_ULong svg_document_length; 0296 0297 FT_UInt glyph_index; 0298 0299 FT_Size_Metrics metrics; 0300 FT_UShort units_per_EM; 0301 0302 FT_UShort start_glyph_id; 0303 FT_UShort end_glyph_id; 0304 0305 FT_Matrix transform; 0306 FT_Vector delta; 0307 0308 } FT_SvgGlyphRec; 0309 0310 0311 /************************************************************************** 0312 * 0313 * @function: 0314 * FT_New_Glyph 0315 * 0316 * @description: 0317 * A function used to create a new empty glyph image. Note that the 0318 * created @FT_Glyph object must be released with @FT_Done_Glyph. 0319 * 0320 * @input: 0321 * library :: 0322 * A handle to the FreeType library object. 0323 * 0324 * format :: 0325 * The format of the glyph's image. 0326 * 0327 * @output: 0328 * aglyph :: 0329 * A handle to the glyph object. 0330 * 0331 * @return: 0332 * FreeType error code. 0~means success. 0333 * 0334 * @since: 0335 * 2.10 0336 */ 0337 FT_EXPORT( FT_Error ) 0338 FT_New_Glyph( FT_Library library, 0339 FT_Glyph_Format format, 0340 FT_Glyph *aglyph ); 0341 0342 0343 /************************************************************************** 0344 * 0345 * @function: 0346 * FT_Get_Glyph 0347 * 0348 * @description: 0349 * A function used to extract a glyph image from a slot. Note that the 0350 * created @FT_Glyph object must be released with @FT_Done_Glyph. 0351 * 0352 * @input: 0353 * slot :: 0354 * A handle to the source glyph slot. 0355 * 0356 * @output: 0357 * aglyph :: 0358 * A handle to the glyph object. `NULL` in case of error. 0359 * 0360 * @return: 0361 * FreeType error code. 0~means success. 0362 * 0363 * @note: 0364 * Because `*aglyph->advance.x` and `*aglyph->advance.y` are 16.16 0365 * fixed-point numbers, `slot->advance.x` and `slot->advance.y` (which 0366 * are in 26.6 fixed-point format) must be in the range ]-32768;32768[. 0367 */ 0368 FT_EXPORT( FT_Error ) 0369 FT_Get_Glyph( FT_GlyphSlot slot, 0370 FT_Glyph *aglyph ); 0371 0372 0373 /************************************************************************** 0374 * 0375 * @function: 0376 * FT_Glyph_Copy 0377 * 0378 * @description: 0379 * A function used to copy a glyph image. Note that the created 0380 * @FT_Glyph object must be released with @FT_Done_Glyph. 0381 * 0382 * @input: 0383 * source :: 0384 * A handle to the source glyph object. 0385 * 0386 * @output: 0387 * target :: 0388 * A handle to the target glyph object. `NULL` in case of error. 0389 * 0390 * @return: 0391 * FreeType error code. 0~means success. 0392 */ 0393 FT_EXPORT( FT_Error ) 0394 FT_Glyph_Copy( FT_Glyph source, 0395 FT_Glyph *target ); 0396 0397 0398 /************************************************************************** 0399 * 0400 * @function: 0401 * FT_Glyph_Transform 0402 * 0403 * @description: 0404 * Transform a glyph image if its format is scalable. 0405 * 0406 * @inout: 0407 * glyph :: 0408 * A handle to the target glyph object. 0409 * 0410 * @input: 0411 * matrix :: 0412 * A pointer to a 2x2 matrix to apply. 0413 * 0414 * delta :: 0415 * A pointer to a 2d vector to apply. Coordinates are expressed in 0416 * 1/64 of a pixel. 0417 * 0418 * @return: 0419 * FreeType error code (if not 0, the glyph format is not scalable). 0420 * 0421 * @note: 0422 * The 2x2 transformation matrix is also applied to the glyph's advance 0423 * vector. 0424 */ 0425 FT_EXPORT( FT_Error ) 0426 FT_Glyph_Transform( FT_Glyph glyph, 0427 const FT_Matrix* matrix, 0428 const FT_Vector* delta ); 0429 0430 0431 /************************************************************************** 0432 * 0433 * @enum: 0434 * FT_Glyph_BBox_Mode 0435 * 0436 * @description: 0437 * The mode how the values of @FT_Glyph_Get_CBox are returned. 0438 * 0439 * @values: 0440 * FT_GLYPH_BBOX_UNSCALED :: 0441 * Return unscaled font units. 0442 * 0443 * FT_GLYPH_BBOX_SUBPIXELS :: 0444 * Return unfitted 26.6 coordinates. 0445 * 0446 * FT_GLYPH_BBOX_GRIDFIT :: 0447 * Return grid-fitted 26.6 coordinates. 0448 * 0449 * FT_GLYPH_BBOX_TRUNCATE :: 0450 * Return coordinates in integer pixels. 0451 * 0452 * FT_GLYPH_BBOX_PIXELS :: 0453 * Return grid-fitted pixel coordinates. 0454 */ 0455 typedef enum FT_Glyph_BBox_Mode_ 0456 { 0457 FT_GLYPH_BBOX_UNSCALED = 0, 0458 FT_GLYPH_BBOX_SUBPIXELS = 0, 0459 FT_GLYPH_BBOX_GRIDFIT = 1, 0460 FT_GLYPH_BBOX_TRUNCATE = 2, 0461 FT_GLYPH_BBOX_PIXELS = 3 0462 0463 } FT_Glyph_BBox_Mode; 0464 0465 0466 /* these constants are deprecated; use the corresponding */ 0467 /* `FT_Glyph_BBox_Mode` values instead */ 0468 #define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED 0469 #define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS 0470 #define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT 0471 #define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE 0472 #define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS 0473 0474 0475 /************************************************************************** 0476 * 0477 * @function: 0478 * FT_Glyph_Get_CBox 0479 * 0480 * @description: 0481 * Return a glyph's 'control box'. The control box encloses all the 0482 * outline's points, including Bezier control points. Though it 0483 * coincides with the exact bounding box for most glyphs, it can be 0484 * slightly larger in some situations (like when rotating an outline that 0485 * contains Bezier outside arcs). 0486 * 0487 * Computing the control box is very fast, while getting the bounding box 0488 * can take much more time as it needs to walk over all segments and arcs 0489 * in the outline. To get the latter, you can use the 'ftbbox' 0490 * component, which is dedicated to this single task. 0491 * 0492 * @input: 0493 * glyph :: 0494 * A handle to the source glyph object. 0495 * 0496 * mode :: 0497 * The mode that indicates how to interpret the returned bounding box 0498 * values. 0499 * 0500 * @output: 0501 * acbox :: 0502 * The glyph coordinate bounding box. Coordinates are expressed in 0503 * 1/64 of pixels if it is grid-fitted. 0504 * 0505 * @note: 0506 * Coordinates are relative to the glyph origin, using the y~upwards 0507 * convention. 0508 * 0509 * If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode` must 0510 * be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6 0511 * pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS is another name for 0512 * this constant. 0513 * 0514 * If the font is tricky and the glyph has been loaded with 0515 * @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get 0516 * reasonable values for the CBox it is necessary to load the glyph at a 0517 * large ppem value (so that the hinting instructions can properly shift 0518 * and scale the subglyphs), then extracting the CBox, which can be 0519 * eventually converted back to font units. 0520 * 0521 * Note that the maximum coordinates are exclusive, which means that one 0522 * can compute the width and height of the glyph image (be it in integer 0523 * or 26.6 pixels) as: 0524 * 0525 * ``` 0526 * width = bbox.xMax - bbox.xMin; 0527 * height = bbox.yMax - bbox.yMin; 0528 * ``` 0529 * 0530 * Note also that for 26.6 coordinates, if `bbox_mode` is set to 0531 * @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, 0532 * which corresponds to: 0533 * 0534 * ``` 0535 * bbox.xMin = FLOOR(bbox.xMin); 0536 * bbox.yMin = FLOOR(bbox.yMin); 0537 * bbox.xMax = CEILING(bbox.xMax); 0538 * bbox.yMax = CEILING(bbox.yMax); 0539 * ``` 0540 * 0541 * To get the bbox in pixel coordinates, set `bbox_mode` to 0542 * @FT_GLYPH_BBOX_TRUNCATE. 0543 * 0544 * To get the bbox in grid-fitted pixel coordinates, set `bbox_mode` to 0545 * @FT_GLYPH_BBOX_PIXELS. 0546 */ 0547 FT_EXPORT( void ) 0548 FT_Glyph_Get_CBox( FT_Glyph glyph, 0549 FT_UInt bbox_mode, 0550 FT_BBox *acbox ); 0551 0552 0553 /************************************************************************** 0554 * 0555 * @function: 0556 * FT_Glyph_To_Bitmap 0557 * 0558 * @description: 0559 * Convert a given glyph object to a bitmap glyph object. 0560 * 0561 * @inout: 0562 * the_glyph :: 0563 * A pointer to a handle to the target glyph. 0564 * 0565 * @input: 0566 * render_mode :: 0567 * An enumeration that describes how the data is rendered. 0568 * 0569 * origin :: 0570 * A pointer to a vector used to translate the glyph image before 0571 * rendering. Can be~0 (if no translation). The origin is expressed 0572 * in 26.6 pixels. 0573 * 0574 * destroy :: 0575 * A boolean that indicates that the original glyph image should be 0576 * destroyed by this function. It is never destroyed in case of error. 0577 * 0578 * @return: 0579 * FreeType error code. 0~means success. 0580 * 0581 * @note: 0582 * This function does nothing if the glyph format isn't scalable. 0583 * 0584 * The glyph image is translated with the `origin` vector before 0585 * rendering. 0586 * 0587 * The first parameter is a pointer to an @FT_Glyph handle that will be 0588 * _replaced_ by this function (with newly allocated data). Typically, 0589 * you would do something like the following (omitting error handling). 0590 * 0591 * ``` 0592 * FT_Glyph glyph; 0593 * FT_BitmapGlyph glyph_bitmap; 0594 * 0595 * 0596 * // load glyph 0597 * error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); 0598 * 0599 * // extract glyph image 0600 * error = FT_Get_Glyph( face->glyph, &glyph ); 0601 * 0602 * // convert to a bitmap (default render mode + destroying old) 0603 * if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) 0604 * { 0605 * error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, 0606 * 0, 1 ); 0607 * if ( error ) // `glyph' unchanged 0608 * ... 0609 * } 0610 * 0611 * // access bitmap content by typecasting 0612 * glyph_bitmap = (FT_BitmapGlyph)glyph; 0613 * 0614 * // do funny stuff with it, like blitting/drawing 0615 * ... 0616 * 0617 * // discard glyph image (bitmap or not) 0618 * FT_Done_Glyph( glyph ); 0619 * ``` 0620 * 0621 * Here is another example, again without error handling. 0622 * 0623 * ``` 0624 * FT_Glyph glyphs[MAX_GLYPHS] 0625 * 0626 * 0627 * ... 0628 * 0629 * for ( idx = 0; i < MAX_GLYPHS; i++ ) 0630 * error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || 0631 * FT_Get_Glyph ( face->glyph, &glyphs[idx] ); 0632 * 0633 * ... 0634 * 0635 * for ( idx = 0; i < MAX_GLYPHS; i++ ) 0636 * { 0637 * FT_Glyph bitmap = glyphs[idx]; 0638 * 0639 * 0640 * ... 0641 * 0642 * // after this call, `bitmap' no longer points into 0643 * // the `glyphs' array (and the old value isn't destroyed) 0644 * FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); 0645 * 0646 * ... 0647 * 0648 * FT_Done_Glyph( bitmap ); 0649 * } 0650 * 0651 * ... 0652 * 0653 * for ( idx = 0; i < MAX_GLYPHS; i++ ) 0654 * FT_Done_Glyph( glyphs[idx] ); 0655 * ``` 0656 */ 0657 FT_EXPORT( FT_Error ) 0658 FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, 0659 FT_Render_Mode render_mode, 0660 const FT_Vector* origin, 0661 FT_Bool destroy ); 0662 0663 0664 /************************************************************************** 0665 * 0666 * @function: 0667 * FT_Done_Glyph 0668 * 0669 * @description: 0670 * Destroy a given glyph. 0671 * 0672 * @input: 0673 * glyph :: 0674 * A handle to the target glyph object. Can be `NULL`. 0675 */ 0676 FT_EXPORT( void ) 0677 FT_Done_Glyph( FT_Glyph glyph ); 0678 0679 /* */ 0680 0681 0682 /* other helpful functions */ 0683 0684 /************************************************************************** 0685 * 0686 * @section: 0687 * computations 0688 * 0689 */ 0690 0691 0692 /************************************************************************** 0693 * 0694 * @function: 0695 * FT_Matrix_Multiply 0696 * 0697 * @description: 0698 * Perform the matrix operation `b = a*b`. 0699 * 0700 * @input: 0701 * a :: 0702 * A pointer to matrix `a`. 0703 * 0704 * @inout: 0705 * b :: 0706 * A pointer to matrix `b`. 0707 * 0708 * @note: 0709 * The result is undefined if either `a` or `b` is zero. 0710 * 0711 * Since the function uses wrap-around arithmetic, results become 0712 * meaningless if the arguments are very large. 0713 */ 0714 FT_EXPORT( void ) 0715 FT_Matrix_Multiply( const FT_Matrix* a, 0716 FT_Matrix* b ); 0717 0718 0719 /************************************************************************** 0720 * 0721 * @function: 0722 * FT_Matrix_Invert 0723 * 0724 * @description: 0725 * Invert a 2x2 matrix. Return an error if it can't be inverted. 0726 * 0727 * @inout: 0728 * matrix :: 0729 * A pointer to the target matrix. Remains untouched in case of error. 0730 * 0731 * @return: 0732 * FreeType error code. 0~means success. 0733 */ 0734 FT_EXPORT( FT_Error ) 0735 FT_Matrix_Invert( FT_Matrix* matrix ); 0736 0737 /* */ 0738 0739 0740 FT_END_HEADER 0741 0742 #endif /* FTGLYPH_H_ */ 0743 0744 0745 /* END */ 0746 0747 0748 /* Local Variables: */ 0749 /* coding: utf-8 */ 0750 /* End: */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|