/**************************************************************************** * * otvgpos.c * * OpenType GPOS table validation (body). * * Copyright (C) 2002-2023 by * 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. * */ #include "otvalid.h" #include "otvcommn.h" #include "otvgpos.h" /************************************************************************** * * The macro FT_COMPONENT is used in trace mode. It is an implicit * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log * messages during execution. */ #undef FT_COMPONENT #define FT_COMPONENT … static void otv_Anchor_validate( FT_Bytes table, OTV_Validator valid ); static void otv_MarkArray_validate( FT_Bytes table, OTV_Validator valid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** UTILITY FUNCTIONS *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ #define BaseArrayFunc … #define LigatureAttachFunc … #define Mark2ArrayFunc … /* uses valid->extra1 (counter) */ /* uses valid->extra2 (boolean to handle NULL anchor field) */ static void otv_x_sxy( FT_Bytes table, OTV_Validator otvalid ) { … } #define MarkBasePosFormat1Func … #define MarkLigPosFormat1Func … #define MarkMarkPosFormat1Func … /* sets otvalid->extra1 (class count) */ static void otv_u_O_O_u_O_O( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** VALUE RECORDS *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ static FT_UInt otv_value_length( FT_UInt format ) { … } /* uses otvalid->extra3 (pointer to base table) */ static void otv_ValueRecord_validate( FT_Bytes table, FT_UInt format, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** ANCHORS *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ static void otv_Anchor_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** MARK ARRAYS *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ static void otv_MarkArray_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 1 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* sets otvalid->extra3 (pointer to base table) */ static void otv_SinglePos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 2 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* sets otvalid->extra3 (pointer to base table) */ static void otv_PairSet_validate( FT_Bytes table, FT_UInt format1, FT_UInt format2, OTV_Validator otvalid ) { … } /* sets otvalid->extra3 (pointer to base table) */ static void otv_PairPos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 3 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ static void otv_CursivePos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 4 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* UNDOCUMENTED (in OpenType 1.5): */ /* BaseRecord tables can contain NULL pointers. */ /* sets otvalid->extra2 (1) */ static void otv_MarkBasePos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 5 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* sets otvalid->extra2 (1) */ static void otv_MarkLigPos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 6 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* sets otvalid->extra2 (0) */ static void otv_MarkMarkPos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 7 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* sets otvalid->extra1 (lookup count) */ static void otv_ContextPos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 8 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* sets otvalid->extra1 (lookup count) */ static void otv_ChainContextPos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS LOOKUP TYPE 9 *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* uses otvalid->type_funcs */ static void otv_ExtensionPos_validate( FT_Bytes table, OTV_Validator otvalid ) { … } static const OTV_Validate_Func otv_gpos_validate_funcs[9] = …; /* sets otvalid->type_count */ /* sets otvalid->type_funcs */ FT_LOCAL_DEF( void ) otv_GPOS_subtable_validate( FT_Bytes table, OTV_Validator otvalid ) { … } /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** GPOS TABLE *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ /* sets otvalid->glyph_count */ FT_LOCAL_DEF( void ) otv_GPOS_validate( FT_Bytes table, FT_UInt glyph_count, FT_Validator ftvalid ) { … } /* END */