Home | History | Annotate | Download | only in layout
      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 
     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 
     38 struct PairPositioningSubtable : GlyphPositioningSubtable
     39 {
     40     ValueFormat valueFormat1;
     41     ValueFormat valueFormat2;
     42 
     43     le_uint32  process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
     44 };
     45 
     46 struct PairPositioningFormat1Subtable : PairPositioningSubtable
     47 {
     48     le_uint16   pairSetCount;
     49     Offset      pairSetTableOffsetArray[ANY_NUMBER];
     50 
     51     le_uint32  process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
     52 
     53 private:
     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
     59 struct Class2Record
     60 {
     61     ValueRecord valueRecord1;
     62 //  ValueRecord valurRecord2;
     63 };
     64 
     65 struct Class1Record
     66 {
     67     Class2Record class2RecordArray[ANY_NUMBER];
     68 };
     69 
     70 struct 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 
     81 U_NAMESPACE_END
     82 #endif
     83 
     84 
     85