📄 gxvcommn.h
字号:
/***************************************************************************//* *//* gxvcommn.h *//* *//* TrueTypeGX/AAT common tables validation (specification). *//* *//* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., *//* 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. *//* *//***************************************************************************//***************************************************************************//* *//* gxvalid is derived from both gxlayout module and otvalid module. *//* Development of gxlayout is supported by the Information-technology *//* Promotion Agency(IPA), Japan. *//* *//***************************************************************************/ /* * keywords in variable naming * --------------------------- * table: Of type FT_Bytes, pointing to the start of this table/subtable. * limit: Of type FT_Bytes, pointing to the end of this table/subtable, * including padding for alignment. * offset: Of type FT_UInt, the number of octets from the start to target. * length: Of type FT_UInt, the number of octets from the start to the * end in this table/subtable, including padding for alignment. * * _MIN, _MAX: Should be added to the tail of macros, as INT_MIN, etc. */#ifndef __GXVCOMMN_H__#define __GXVCOMMN_H__#include <ft2build.h>#include "gxvalid.h"#include FT_INTERNAL_DEBUG_H#include FT_SFNT_NAMES_HFT_BEGIN_HEADER /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** VALIDATION *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ typedef struct GXV_ValidatorRec_* GXV_Validator;#define DUMMY_LIMIT 0 typedef void (*GXV_Validate_Func)( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ); /* ====================== LookupTable Validator ======================== */ typedef union GXV_LookupValueDesc_ { FT_UShort u; FT_Short s; } GXV_LookupValueDesc; typedef enum GXV_LookupValue_SignSpec_ { GXV_LOOKUPVALUE_UNSIGNED = 0, GXV_LOOKUPVALUE_SIGNED } GXV_LookupValue_SignSpec; typedef void (*GXV_Lookup_Value_Validate_Func)( FT_UShort glyph, GXV_LookupValueDesc value, GXV_Validator valid ); typedef GXV_LookupValueDesc (*GXV_Lookup_Fmt4_Transit_Func)( FT_UShort relative_gindex, GXV_LookupValueDesc base_value, FT_Bytes lookuptbl_limit, GXV_Validator valid ); /* ====================== StateTable Validator ========================= */ typedef enum GXV_GlyphOffset_Format_ { GXV_GLYPHOFFSET_NONE = -1, GXV_GLYPHOFFSET_UCHAR = 2, GXV_GLYPHOFFSET_CHAR, GXV_GLYPHOFFSET_USHORT = 4, GXV_GLYPHOFFSET_SHORT, GXV_GLYPHOFFSET_ULONG = 8, GXV_GLYPHOFFSET_LONG } GXV_GlyphOffset_Format;#define GXV_GLYPHOFFSET_FMT( table ) \ ( valid->table.entry_glyphoffset_fmt )#define GXV_GLYPHOFFSET_SIZE( table ) \ ( valid->table.entry_glyphoffset_fmt / 2 ) /* ----------------------- 16bit StateTable ---------------------------- */ typedef union GXV_StateTable_GlyphOffsetDesc_ { FT_Byte uc; FT_UShort u; /* same as GXV_LookupValueDesc */ FT_ULong ul; FT_Char c; FT_Short s; /* same as GXV_LookupValueDesc */ FT_Long l; } GXV_StateTable_GlyphOffsetDesc; typedef void (*GXV_StateTable_Subtable_Setup_Func)( FT_UShort table_size, FT_UShort classTable, FT_UShort stateArray, FT_UShort entryTable, FT_UShort* classTable_length_p, FT_UShort* stateArray_length_p, FT_UShort* entryTable_length_p, GXV_Validator valid ); typedef void (*GXV_StateTable_Entry_Validate_Func)( FT_Byte state, FT_UShort flags, GXV_StateTable_GlyphOffsetDesc glyphOffset, FT_Bytes statetable_table, FT_Bytes statetable_limit, GXV_Validator valid ); typedef void (*GXV_StateTable_OptData_Load_Func)( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ); typedef struct GXV_StateTable_ValidatorRec_ { GXV_GlyphOffset_Format entry_glyphoffset_fmt; void* optdata; GXV_StateTable_Subtable_Setup_Func subtable_setup_func; GXV_StateTable_Entry_Validate_Func entry_validate_func; GXV_StateTable_OptData_Load_Func optdata_load_func; } GXV_StateTable_ValidatorRec, *GXV_StateTable_ValidatorRecData; /* ---------------------- 32bit XStateTable ---------------------------- */ typedef GXV_StateTable_GlyphOffsetDesc GXV_XStateTable_GlyphOffsetDesc; typedef void (*GXV_XStateTable_Subtable_Setup_Func)( FT_ULong table_size, FT_ULong classTable, FT_ULong stateArray, FT_ULong entryTable, FT_ULong* classTable_length_p, FT_ULong* stateArray_length_p, FT_ULong* entryTable_length_p, GXV_Validator valid ); typedef void (*GXV_XStateTable_Entry_Validate_Func)( FT_UShort state, FT_UShort flags, GXV_StateTable_GlyphOffsetDesc glyphOffset, FT_Bytes xstatetable_table, FT_Bytes xstatetable_limit, GXV_Validator valid ); typedef GXV_StateTable_OptData_Load_Func GXV_XStateTable_OptData_Load_Func; typedef struct GXV_XStateTable_ValidatorRec_ { int entry_glyphoffset_fmt; void* optdata; GXV_XStateTable_Subtable_Setup_Func subtable_setup_func; GXV_XStateTable_Entry_Validate_Func entry_validate_func; GXV_XStateTable_OptData_Load_Func optdata_load_func; FT_ULong nClasses; FT_UShort maxClassID; } GXV_XStateTable_ValidatorRec, *GXV_XStateTable_ValidatorRecData; /* ===================================================================== */ typedef struct GXV_ValidatorRec_ { FT_Validator root; FT_Face face; void* table_data; FT_ULong subtable_length; GXV_LookupValue_SignSpec lookupval_sign; GXV_Lookup_Value_Validate_Func lookupval_func; GXV_Lookup_Fmt4_Transit_Func lookupfmt4_trans; FT_Bytes lookuptbl_head; GXV_StateTable_ValidatorRec statetable; GXV_XStateTable_ValidatorRec xstatetable;#ifdef FT_DEBUG_LEVEL_TRACE FT_UInt debug_indent; const FT_String* debug_function_name[3];#endif } GXV_ValidatorRec;#define GXV_TABLE_DATA( tag, field ) \ ( ( (GXV_ ## tag ## _Data)valid->table_data )->field )#undef FT_INVALID_#define FT_INVALID_( _prefix, _error ) \ ft_validator_error( valid->root, _prefix ## _error )#define GXV_LIMIT_CHECK( _count ) \ FT_BEGIN_STMNT \ if ( p + _count > ( limit? limit : valid->root->limit ) ) \ FT_INVALID_TOO_SHORT; \ FT_END_STMNT#ifdef FT_DEBUG_LEVEL_TRACE#define GXV_INIT valid->debug_indent = 0#define GXV_NAME_ENTER( name ) \ FT_BEGIN_STMNT \ valid->debug_indent += 2; \ FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \ FT_TRACE4(( "%s table\n", name )); \ FT_END_STMNT#define GXV_EXIT valid->debug_indent -= 2#define GXV_TRACE( s ) \ FT_BEGIN_STMNT \ FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \ FT_TRACE4( s ); \ FT_END_STMNT#else /* !FT_DEBUG_LEVEL_TRACE */#define GXV_INIT do ; while ( 0 )#define GXV_NAME_ENTER( name ) do ; while ( 0 )#define GXV_EXIT do ; while ( 0 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -