sl@0: /* sl@0: * sl@0: * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved sl@0: * sl@0: */ sl@0: sl@0: #ifndef __PAIRPOSITIONINGSUBTABLES_H sl@0: #define __PAIRPOSITIONINGSUBTABLES_H sl@0: sl@0: /** sl@0: * \file sl@0: * \internal sl@0: */ sl@0: sl@0: #include "LETypes.h" sl@0: #include "LEFontInstance.h" sl@0: #include "OpenTypeTables.h" sl@0: #include "GlyphPositioningTables.h" sl@0: #include "ValueRecords.h" sl@0: #include "GlyphIterator.h" sl@0: sl@0: U_NAMESPACE_BEGIN sl@0: sl@0: // NOTE: ValueRecord has a variable size sl@0: struct PairValueRecord sl@0: { sl@0: TTGlyphID secondGlyph; sl@0: ValueRecord valueRecord1; sl@0: // ValueRecord valueRecord2; sl@0: }; sl@0: sl@0: struct PairSetTable sl@0: { sl@0: le_uint16 pairValueCount; sl@0: PairValueRecord pairValueRecordArray[ANY_NUMBER]; sl@0: }; sl@0: sl@0: struct PairPositioningSubtable : GlyphPositioningSubtable sl@0: { sl@0: ValueFormat valueFormat1; sl@0: ValueFormat valueFormat2; sl@0: sl@0: le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; sl@0: }; sl@0: sl@0: struct PairPositioningFormat1Subtable : PairPositioningSubtable sl@0: { sl@0: le_uint16 pairSetCount; sl@0: Offset pairSetTableOffsetArray[ANY_NUMBER]; sl@0: sl@0: le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; sl@0: sl@0: private: sl@0: const PairValueRecord *findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, sl@0: le_uint16 recordCount, le_uint16 recordSize) const; sl@0: }; sl@0: sl@0: // NOTE: ValueRecord has a variable size sl@0: struct Class2Record sl@0: { sl@0: ValueRecord valueRecord1; sl@0: // ValueRecord valurRecord2; sl@0: }; sl@0: sl@0: struct Class1Record sl@0: { sl@0: Class2Record class2RecordArray[ANY_NUMBER]; sl@0: }; sl@0: sl@0: struct PairPositioningFormat2Subtable : PairPositioningSubtable sl@0: { sl@0: Offset classDef1Offset; sl@0: Offset classDef2Offset; sl@0: le_uint16 class1Count; sl@0: le_uint16 class2Count; sl@0: Class1Record class1RecordArray[ANY_NUMBER]; sl@0: sl@0: le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; sl@0: }; sl@0: sl@0: U_NAMESPACE_END sl@0: #endif sl@0: sl@0: