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
22U_NAMESPACE_BEGIN
23
24// NOTE: ValueRecord has a variable size
25struct PairValueRecord
26{
27    TTGlyphID     secondGlyph;
28    ValueRecord valueRecord1;
29//  ValueRecord valueRecord2;
30};
31
32struct PairSetTable
33{
34    le_uint16       pairValueCount;
35    PairValueRecord pairValueRecordArray[ANY_NUMBER];
36};
37
38struct PairPositioningSubtable : GlyphPositioningSubtable
39{
40    ValueFormat valueFormat1;
41    ValueFormat valueFormat2;
42
43    le_uint32  process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
44};
45
46struct PairPositioningFormat1Subtable : PairPositioningSubtable
47{
48    le_uint16   pairSetCount;
49    Offset      pairSetTableOffsetArray[ANY_NUMBER];
50
51    le_uint32  process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
52
53private:
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
59struct Class2Record
60{
61    ValueRecord valueRecord1;
62//  ValueRecord valurRecord2;
63};
64
65struct Class1Record
66{
67    Class2Record class2RecordArray[ANY_NUMBER];
68};
69
70struct 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
81U_NAMESPACE_END
82#endif
83
84
85