📄 ftobjs.h
字号:
/***************************************************************************//* *//* ftobjs.h *//* *//* The FreeType private base classes (specification). *//* *//* Copyright 1996-2001, 2002 by *//* David Turner, Robert Wilhelm, and Werner Lemberg. *//* *//* This file is part of the FreeType project, and may only be used, *//* modified, and distributed under the terms of the FreeType project *//* license, LICENSE.TXT. By continuing to use, modify, or distribute *//* this file you indicate that you have read the license and *//* understand and accept it fully. *//* *//***************************************************************************/ /*************************************************************************/ /* */ /* This file contains the definition of all internal FreeType classes. */ /* */ /*************************************************************************/#ifndef __FTOBJS_H__#define __FTOBJS_H__#include <ft2build.h>#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_setjmp and ft_longjmp */#include FT_RENDER_H#include FT_SIZES_H#include FT_INTERNAL_MEMORY_H#include FT_INTERNAL_GLYPH_LOADER_H#include FT_INTERNAL_DRIVER_H#include FT_INTERNAL_AUTOHINT_H#include FT_INTERNAL_OBJECT_H#ifdef FT_CONFIG_OPTION_INCREMENTAL#include FT_INCREMENTAL_H#endifFT_BEGIN_HEADER /*************************************************************************/ /* */ /* Some generic definitions. */ /* */#ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endif#ifndef NULL#define NULL (void*)0#endif /*************************************************************************/ /* */ /* The min and max functions missing in C. As usual, be careful not to */ /* write things like MIN( a++, b++ ) to avoid side effects. */ /* */#ifndef MIN#define MIN( a, b ) ( (a) < (b) ? (a) : (b) )#endif#ifndef MAX#define MAX( a, b ) ( (a) > (b) ? (a) : (b) )#endif#ifndef ABS#define ABS( a ) ( (a) < 0 ? -(a) : (a) )#endif /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** ****/ /**** V A L I D A T I O N ****/ /**** ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* handle to a validation object */ typedef struct FT_ValidatorRec_* FT_Validator; /*************************************************************************/ /* */ /* There are three distinct validation levels defined here: */ /* */ /* FT_VALIDATE_DEFAULT :: */ /* A table that passes this validation level can be used reliably by */ /* FreeType. It generally means that all offsets have been checked to */ /* prevent out-of-bound reads, array counts are correct, etc. */ /* */ /* FT_VALIDATE_TIGHT :: */ /* A table that passes this validation level can be used reliably and */ /* doesn't contain invalid data. For example, a charmap table that */ /* returns invalid glyph indices will not pass, even though it can */ /* be used with FreeType in default mode (the library will simply */ /* return an error later when trying to load the glyph). */ /* */ /* It also check that fields that must be a multiple of 2, 4, or 8 */ /* dont' have incorrect values, etc. */ /* */ /* FT_VALIDATE_PARANOID :: */ /* Only for font debugging. Checks that a table follows the */ /* specification by 100%. Very few fonts will be able to pass this */ /* level anyway but it can be useful for certain tools like font */ /* editors/converters. */ /* */ typedef enum FT_ValidationLevel_ { FT_VALIDATE_DEFAULT = 0, FT_VALIDATE_TIGHT, FT_VALIDATE_PARANOID } FT_ValidationLevel; /* validator structure */ typedef struct FT_ValidatorRec_ { const FT_Byte* base; /* address of table in memory */ const FT_Byte* limit; /* `base' + sizeof(table) in memory */ FT_ValidationLevel level; /* validation level */ FT_Error error; /* error returned. 0 means success */ ft_jmp_buf jump_buffer; /* used for exception handling */ } FT_ValidatorRec;#define FT_VALIDATOR( x ) ((FT_Validator)( x )) FT_BASE( void ) ft_validator_init( FT_Validator valid, const FT_Byte* base, const FT_Byte* limit, FT_ValidationLevel level ); FT_BASE( FT_Int ) ft_validator_run( FT_Validator valid ); /* Sets the error field in a validator, then calls `longjmp' to return */ /* to high-level caller. Using `setjmp/longjmp' avoids many stupid */ /* error checks within the validation routines. */ /* */ FT_BASE( void ) ft_validator_error( FT_Validator valid, FT_Error error ); /* Calls ft_validate_error. Assumes that the `valid' local variable */ /* holds a pointer to the current validator object. */ /* */#define FT_INVALID( _error ) ft_validator_error( valid, _error ) /* called when a broken table is detected */#define FT_INVALID_TOO_SHORT FT_INVALID( FT_Err_Invalid_Table ) /* called when an invalid offset is detected */#define FT_INVALID_OFFSET FT_INVALID( FT_Err_Invalid_Offset ) /* called when an invalid format/value is detected */#define FT_INVALID_FORMAT FT_INVALID( FT_Err_Invalid_Table ) /* called when an invalid glyph index is detected */#define FT_INVALID_GLYPH_ID FT_INVALID( FT_Err_Invalid_Glyph_Index ) /* called when an invalid field value is detected */#define FT_INVALID_DATA FT_INVALID( FT_Err_Invalid_Table ) /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** ****/ /**** C H A R M A P S ****/ /**** ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* handle to internal charmap object */ typedef struct FT_CMapRec_* FT_CMap; /* handle to charmap class structure */ typedef const struct FT_CMap_ClassRec_* FT_CMap_Class; /* internal charmap object structure */ typedef struct FT_CMapRec_ { FT_CharMapRec charmap; FT_CMap_Class clazz; } FT_CMapRec; /* typecase any pointer to a charmap handle */#define FT_CMAP( x ) ((FT_CMap)( x )) /* obvious macros */#define FT_CMAP_PLATFORM_ID( x ) FT_CMAP( x )->charmap.platform_id#define FT_CMAP_ENCODING_ID( x ) FT_CMAP( x )->charmap.encoding_id#define FT_CMAP_ENCODING( x ) FT_CMAP( x )->charmap.encoding#define FT_CMAP_FACE( x ) FT_CMAP( x )->charmap.face /* class method definitions */ typedef FT_Error (*FT_CMap_InitFunc)( FT_CMap cmap, FT_Pointer init_data ); typedef void (*FT_CMap_DoneFunc)( FT_CMap cmap ); typedef FT_UInt (*FT_CMap_CharIndexFunc)( FT_CMap cmap, FT_UInt32 char_code ); typedef FT_UInt (*FT_CMap_CharNextFunc)( FT_CMap cmap, FT_UInt32 *achar_code ); typedef struct FT_CMap_ClassRec_ { FT_UInt size; FT_CMap_InitFunc init; FT_CMap_DoneFunc done; FT_CMap_CharIndexFunc char_index; FT_CMap_CharNextFunc char_next; } FT_CMap_ClassRec; /* create a new charmap and add it to charmap->face */ FT_BASE( FT_Error ) FT_CMap_New( FT_CMap_Class clazz, FT_Pointer init_data, FT_CharMap charmap, FT_CMap *acmap ); /* destroy a charmap (don't remove it from face's list though) */ FT_BASE( void ) FT_CMap_Done( FT_CMap cmap ); /*************************************************************************/ /* */ /* <Struct> */ /* FT_Face_InternalRec */ /* */ /* <Description> */ /* This structure contains the internal fields of each FT_Face */ /* object. These fields may change between different releases of */ /* FreeType. */ /* */ /* <Fields> */ /* max_points :: The maximal number of points used to store the */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -