1/* 2 * 3 * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved 4 * 5 */ 6 7#ifndef __PAIRPOSITIONINGSUBTABLES_H 8#define __PAIRPOSITIONINGSUBTABLES_H 9 10/** 11 * \file 12 * \internal 13 */ 14 15#include "LETypes.h" 16#include "LEFontInstance.h" 17#include "OpenTypeTables.h" 18#include "GlyphPositioningTables.h" 19#include "ValueRecords.h" 20#include "GlyphIterator.h" 21 22U_NAMESPACE_BEGIN 23 24// NOTE: ValueRecord has a variable size 25struct PairValueRecord 26{ 27 TTGlyphID secondGlyph; 28 ValueRecord valueRecord1; 29// ValueRecord valueRecord2; 30}; 31 32struct PairSetTable 33{ 34 le_uint16 pairValueCount; 35 PairValueRecord pairValueRecordArray[ANY_NUMBER]; 36}; 37 38struct PairPositioningSubtable : GlyphPositioningSubtable 39{ 40 ValueFormat valueFormat1; 41 ValueFormat valueFormat2; 42 43 le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; 44}; 45 46struct PairPositioningFormat1Subtable : PairPositioningSubtable 47{ 48 le_uint16 pairSetCount; 49 Offset pairSetTableOffsetArray[ANY_NUMBER]; 50 51 le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; 52 53private: 54 const PairValueRecord *findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, 55 le_uint16 recordCount, le_uint16 recordSize) const; 56}; 57 58// NOTE: ValueRecord has a variable size 59struct Class2Record 60{ 61 ValueRecord valueRecord1; 62// ValueRecord valurRecord2; 63}; 64 65struct Class1Record 66{ 67 Class2Record class2RecordArray[ANY_NUMBER]; 68}; 69 70struct PairPositioningFormat2Subtable : PairPositioningSubtable 71{ 72 Offset classDef1Offset; 73 Offset classDef2Offset; 74 le_uint16 class1Count; 75 le_uint16 class2Count; 76 Class1Record class1RecordArray[ANY_NUMBER]; 77 78 le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; 79}; 80 81U_NAMESPACE_END 82#endif 83 84 85