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