Home | History | Annotate | Download | only in layout
      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