1 /* 2 * 3 * (C) Copyright IBM Corp. 1998-2013 - 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 22 U_NAMESPACE_BEGIN 23 24 // NOTE: ValueRecord has a variable size 25 struct PairValueRecord 26 { 27 TTGlyphID secondGlyph; 28 ValueRecord valueRecord1; 29 // ValueRecord valueRecord2; 30 }; 31 32 struct PairSetTable 33 { 34 le_uint16 pairValueCount; 35 PairValueRecord pairValueRecordArray[ANY_NUMBER]; 36 }; 37 LE_VAR_ARRAY(PairSetTable, pairValueRecordArray) 38 39 struct PairPositioningSubtable : GlyphPositioningSubtable 40 { 41 ValueFormat valueFormat1; 42 ValueFormat valueFormat2; 43 44 le_uint32 process(const LEReferenceTo<PairPositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const; 45 }; 46 47 struct PairPositioningFormat1Subtable : PairPositioningSubtable 48 { 49 le_uint16 pairSetCount; 50 Offset pairSetTableOffsetArray[ANY_NUMBER]; 51 52 le_uint32 process(const LEReferenceTo<PairPositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const; 53 54 private: 55 const PairValueRecord *findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, 56 le_uint16 recordCount, le_uint16 recordSize) const; 57 }; 58 LE_VAR_ARRAY(PairPositioningFormat1Subtable, pairSetTableOffsetArray) 59 60 // NOTE: ValueRecord has a variable size 61 struct Class2Record 62 { 63 ValueRecord valueRecord1; 64 // ValueRecord valurRecord2; 65 }; 66 67 struct Class1Record 68 { 69 Class2Record class2RecordArray[ANY_NUMBER]; 70 }; 71 LE_VAR_ARRAY(Class1Record, class2RecordArray) 72 73 struct PairPositioningFormat2Subtable : PairPositioningSubtable 74 { 75 Offset classDef1Offset; 76 Offset classDef2Offset; 77 le_uint16 class1Count; 78 le_uint16 class2Count; 79 Class1Record class1RecordArray[ANY_NUMBER]; 80 81 le_uint32 process(const LEReferenceTo<PairPositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const; 82 }; 83 LE_VAR_ARRAY(PairPositioningFormat2Subtable, class1RecordArray) 84 85 U_NAMESPACE_END 86 #endif 87 88 89