1 /***************************************************************************/ 2 /* */ 3 /* ftotval.c */ 4 /* */ 5 /* FreeType API for validating OpenType tables (body). */ 6 /* */ 7 /* Copyright 2004, 2006, 2008, 2010 by */ 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9 /* */ 10 /* This file is part of the FreeType project, and may only be used, */ 11 /* modified, and distributed under the terms of the FreeType project */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* this file you indicate that you have read the license and */ 14 /* understand and accept it fully. */ 15 /* */ 16 /***************************************************************************/ 17 18 #include <ft2build.h> 19 #include FT_INTERNAL_OBJECTS_H 20 #include FT_SERVICE_OPENTYPE_VALIDATE_H 21 #include FT_OPENTYPE_VALIDATE_H 22 23 24 /* documentation is in ftotval.h */ 25 26 FT_EXPORT_DEF( FT_Error ) FT_OpenType_Validate(FT_Face face,FT_UInt validation_flags,FT_Bytes * BASE_table,FT_Bytes * GDEF_table,FT_Bytes * GPOS_table,FT_Bytes * GSUB_table,FT_Bytes * JSTF_table)27 FT_OpenType_Validate( FT_Face face, 28 FT_UInt validation_flags, 29 FT_Bytes *BASE_table, 30 FT_Bytes *GDEF_table, 31 FT_Bytes *GPOS_table, 32 FT_Bytes *GSUB_table, 33 FT_Bytes *JSTF_table ) 34 { 35 FT_Service_OTvalidate service; 36 FT_Error error; 37 38 39 if ( !face ) 40 { 41 error = FT_Err_Invalid_Face_Handle; 42 goto Exit; 43 } 44 45 if ( !( BASE_table && 46 GDEF_table && 47 GPOS_table && 48 GSUB_table && 49 JSTF_table ) ) 50 { 51 error = FT_Err_Invalid_Argument; 52 goto Exit; 53 } 54 55 FT_FACE_FIND_GLOBAL_SERVICE( face, service, OPENTYPE_VALIDATE ); 56 57 if ( service ) 58 error = service->validate( face, 59 validation_flags, 60 BASE_table, 61 GDEF_table, 62 GPOS_table, 63 GSUB_table, 64 JSTF_table ); 65 else 66 error = FT_Err_Unimplemented_Feature; 67 68 Exit: 69 return error; 70 } 71 72 73 FT_EXPORT_DEF( void ) FT_OpenType_Free(FT_Face face,FT_Bytes table)74 FT_OpenType_Free( FT_Face face, 75 FT_Bytes table ) 76 { 77 FT_Memory memory; 78 79 80 if ( !face ) 81 return; 82 83 memory = FT_FACE_MEMORY( face ); 84 85 FT_FREE( table ); 86 } 87 88 89 /* END */ 90