1 /***************************************************************************/ 2 /* */ 3 /* ftgxval.c */ 4 /* */ 5 /* FreeType API for validating TrueTypeGX/AAT tables (body). */ 6 /* */ 7 /* Copyright 2004-2018 by */ 8 /* Masatake YAMATO, Redhat 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 <ft2build.h> 29 #include FT_INTERNAL_DEBUG_H 30 31 #include FT_INTERNAL_OBJECTS_H 32 #include FT_SERVICE_GX_VALIDATE_H 33 34 35 /* documentation is in ftgxval.h */ 36 37 FT_EXPORT_DEF( FT_Error ) 38 FT_TrueTypeGX_Validate( FT_Face face, 39 FT_UInt validation_flags, 40 FT_Bytes tables[FT_VALIDATE_GX_LENGTH], 41 FT_UInt table_length ) 42 { 43 FT_Service_GXvalidate service; 44 FT_Error error; 45 46 47 if ( !face ) 48 { 49 error = FT_THROW( Invalid_Face_Handle ); 50 goto Exit; 51 } 52 53 if ( !tables ) 54 { 55 error = FT_THROW( Invalid_Argument ); 56 goto Exit; 57 } 58 59 FT_FACE_FIND_GLOBAL_SERVICE( face, service, GX_VALIDATE ); 60 61 if ( service ) 62 error = service->validate( face, 63 validation_flags, 64 tables, 65 table_length ); 66 else 67 error = FT_THROW( Unimplemented_Feature ); 68 69 Exit: 70 return error; 71 } 72 73 74 FT_EXPORT_DEF( void ) 75 FT_TrueTypeGX_Free( FT_Face face, 76 FT_Bytes table ) 77 { 78 FT_Memory memory; 79 80 81 if ( !face ) 82 return; 83 84 memory = FT_FACE_MEMORY( face ); 85 86 FT_FREE( table ); 87 } 88 89 90 FT_EXPORT_DEF( FT_Error ) 91 FT_ClassicKern_Validate( FT_Face face, 92 FT_UInt validation_flags, 93 FT_Bytes *ckern_table ) 94 { 95 FT_Service_CKERNvalidate service; 96 FT_Error error; 97 98 99 if ( !face ) 100 { 101 error = FT_THROW( Invalid_Face_Handle ); 102 goto Exit; 103 } 104 105 if ( !ckern_table ) 106 { 107 error = FT_THROW( Invalid_Argument ); 108 goto Exit; 109 } 110 111 FT_FACE_FIND_GLOBAL_SERVICE( face, service, CLASSICKERN_VALIDATE ); 112 113 if ( service ) 114 error = service->validate( face, 115 validation_flags, 116 ckern_table ); 117 else 118 error = FT_THROW( Unimplemented_Feature ); 119 120 Exit: 121 return error; 122 } 123 124 125 FT_EXPORT_DEF( void ) 126 FT_ClassicKern_Free( FT_Face face, 127 FT_Bytes table ) 128 { 129 FT_Memory memory; 130 131 132 if ( !face ) 133 return; 134 135 memory = FT_FACE_MEMORY( face ); 136 137 138 FT_FREE( table ); 139 } 140 141 142 /* END */ 143