1 /***************************************************************************/ 2 /* */ 3 /* gxvmorx0.c */ 4 /* */ 5 /* TrueTypeGX/AAT morx table validation */ 6 /* body for type0 (Indic Script Rearrangement) subtable. */ 7 /* */ 8 /* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ 9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 10 /* */ 11 /* This file is part of the FreeType project, and may only be used, */ 12 /* modified, and distributed under the terms of the FreeType project */ 13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 14 /* this file you indicate that you have read the license and */ 15 /* understand and accept it fully. */ 16 /* */ 17 /***************************************************************************/ 18 19 /***************************************************************************/ 20 /* */ 21 /* gxvalid is derived from both gxlayout module and otvalid module. */ 22 /* Development of gxlayout is supported by the Information-technology */ 23 /* Promotion Agency(IPA), Japan. */ 24 /* */ 25 /***************************************************************************/ 26 27 28 #include "gxvmorx.h" 29 30 31 /*************************************************************************/ 32 /* */ 33 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 34 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 35 /* messages during execution. */ 36 /* */ 37 #undef FT_COMPONENT 38 #define FT_COMPONENT trace_gxvmorx 39 40 41 static void gxv_morx_subtable_type0_entry_validate(FT_UShort state,FT_UShort flags,GXV_XStateTable_GlyphOffsetCPtr glyphOffset_p,FT_Bytes table,FT_Bytes limit,GXV_Validator valid)42 gxv_morx_subtable_type0_entry_validate( 43 FT_UShort state, 44 FT_UShort flags, 45 GXV_XStateTable_GlyphOffsetCPtr glyphOffset_p, 46 FT_Bytes table, 47 FT_Bytes limit, 48 GXV_Validator valid ) 49 { 50 #ifdef GXV_LOAD_UNUSED_VARS 51 FT_UShort markFirst; 52 FT_UShort dontAdvance; 53 FT_UShort markLast; 54 #endif 55 FT_UShort reserved; 56 #ifdef GXV_LOAD_UNUSED_VARS 57 FT_UShort verb; 58 #endif 59 60 FT_UNUSED( state ); 61 FT_UNUSED( glyphOffset_p ); 62 FT_UNUSED( table ); 63 FT_UNUSED( limit ); 64 65 66 #ifdef GXV_LOAD_UNUSED_VARS 67 markFirst = (FT_UShort)( ( flags >> 15 ) & 1 ); 68 dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); 69 markLast = (FT_UShort)( ( flags >> 13 ) & 1 ); 70 #endif 71 72 reserved = (FT_UShort)( flags & 0x1FF0 ); 73 #ifdef GXV_LOAD_UNUSED_VARS 74 verb = (FT_UShort)( flags & 0x000F ); 75 #endif 76 77 if ( 0 < reserved ) 78 { 79 GXV_TRACE(( " non-zero bits found in reserved range\n" )); 80 FT_INVALID_DATA; 81 } 82 } 83 84 85 FT_LOCAL_DEF( void ) gxv_morx_subtable_type0_validate(FT_Bytes table,FT_Bytes limit,GXV_Validator valid)86 gxv_morx_subtable_type0_validate( FT_Bytes table, 87 FT_Bytes limit, 88 GXV_Validator valid ) 89 { 90 FT_Bytes p = table; 91 92 93 GXV_NAME_ENTER( 94 "morx chain subtable type0 (Indic-Script Rearrangement)" ); 95 96 GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE ); 97 98 valid->xstatetable.optdata = NULL; 99 valid->xstatetable.optdata_load_func = NULL; 100 valid->xstatetable.subtable_setup_func = NULL; 101 valid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; 102 valid->xstatetable.entry_validate_func = 103 gxv_morx_subtable_type0_entry_validate; 104 105 gxv_XStateTable_validate( p, limit, valid ); 106 107 GXV_EXIT; 108 } 109 110 111 /* END */ 112