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: