#ifndef HARFBUZZ_GPOS_PRIVATE_H
#define HARFBUZZ_GPOS_PRIVATE_H
#include "harfbuzz-impl.h"
#include "harfbuzz-stream-private.h"
#include "harfbuzz-gpos.h"
HB_BEGIN_HEADER
struct HB_ValueRecord_
{
HB_Short XPlacement;
HB_Short YPlacement;
HB_Short XAdvance;
HB_Short YAdvance;
HB_Device XPlacementDevice;
HB_Device YPlacementDevice;
HB_Device XAdvanceDevice;
HB_Device YAdvanceDevice;
HB_UShort XIdPlacement;
HB_UShort YIdPlacement;
HB_UShort XIdAdvance;
HB_UShort YIdAdvance;
};
typedef struct HB_ValueRecord_ HB_ValueRecord;
#define HB_GPOS_FORMAT_HAVE_X_PLACEMENT 0x0001
#define HB_GPOS_FORMAT_HAVE_Y_PLACEMENT 0x0002
#define HB_GPOS_FORMAT_HAVE_X_ADVANCE 0x0004
#define HB_GPOS_FORMAT_HAVE_Y_ADVANCE 0x0008
#define HB_GPOS_FORMAT_HAVE_X_PLACEMENT_DEVICE 0x0010
#define HB_GPOS_FORMAT_HAVE_Y_PLACEMENT_DEVICE 0x0020
#define HB_GPOS_FORMAT_HAVE_X_ADVANCE_DEVICE 0x0040
#define HB_GPOS_FORMAT_HAVE_Y_ADVANCE_DEVICE 0x0080
#define HB_GPOS_FORMAT_HAVE_X_ID_PLACEMENT 0x0100
#define HB_GPOS_FORMAT_HAVE_Y_ID_PLACEMENT 0x0200
#define HB_GPOS_FORMAT_HAVE_X_ID_ADVANCE 0x0400
#define HB_GPOS_FORMAT_HAVE_Y_ID_ADVANCE 0x0800
struct HB_AnchorFormat1_
{
HB_Short XCoordinate;
HB_Short YCoordinate;
};
typedef struct HB_AnchorFormat1_ HB_AnchorFormat1;
struct HB_AnchorFormat2_
{
HB_Short XCoordinate;
HB_Short YCoordinate;
HB_UShort AnchorPoint;
};
typedef struct HB_AnchorFormat2_ HB_AnchorFormat2;
struct HB_AnchorFormat3_
{
HB_Short XCoordinate;
HB_Short YCoordinate;
HB_Device XDeviceTable;
HB_Device YDeviceTable;
};
typedef struct HB_AnchorFormat3_ HB_AnchorFormat3;
struct HB_AnchorFormat4_
{
HB_UShort XIdAnchor;
HB_UShort YIdAnchor;
};
typedef struct HB_AnchorFormat4_ HB_AnchorFormat4;
struct HB_Anchor_
{
HB_UShort PosFormat;
union
{
HB_AnchorFormat1 af1;
HB_AnchorFormat2 af2;
HB_AnchorFormat3 af3;
HB_AnchorFormat4 af4;
} af;
};
typedef struct HB_Anchor_ HB_Anchor;
struct HB_MarkRecord_
{
HB_UShort Class;
HB_Anchor MarkAnchor;
};
typedef struct HB_MarkRecord_ HB_MarkRecord;
struct HB_MarkArray_
{
HB_UShort MarkCount;
HB_MarkRecord* MarkRecord;
};
typedef struct HB_MarkArray_ HB_MarkArray;
struct HB_SinglePosFormat1_
{
HB_ValueRecord Value;
};
typedef struct HB_SinglePosFormat1_ HB_SinglePosFormat1;
struct HB_SinglePosFormat2_
{
HB_UShort ValueCount;
HB_ValueRecord* Value;
};
typedef struct HB_SinglePosFormat2_ HB_SinglePosFormat2;
struct HB_SinglePos_
{
HB_UShort PosFormat;
HB_Coverage Coverage;
HB_UShort ValueFormat;
union
{
HB_SinglePosFormat1 spf1;
HB_SinglePosFormat2 spf2;
} spf;
};
typedef struct HB_SinglePos_ HB_SinglePos;
struct HB_PairValueRecord_
{
HB_UShort SecondGlyph;
HB_ValueRecord Value1;
HB_ValueRecord Value2;
};
typedef struct HB_PairValueRecord_ HB_PairValueRecord;
struct HB_PairSet_
{
HB_UShort PairValueCount;
HB_PairValueRecord* PairValueRecord;
};
typedef struct HB_PairSet_ HB_PairSet;
struct HB_PairPosFormat1_
{
HB_UShort PairSetCount;
HB_PairSet* PairSet;
};
typedef struct HB_PairPosFormat1_ HB_PairPosFormat1;
struct HB_Class2Record_
{
HB_ValueRecord Value1;
HB_ValueRecord Value2;
};
typedef struct HB_Class2Record_ HB_Class2Record;
struct HB_Class1Record_
{
HB_Class2Record* Class2Record;
};
typedef struct HB_Class1Record_ HB_Class1Record;
struct HB_PairPosFormat2_
{
HB_ClassDefinition ClassDef1;
HB_ClassDefinition ClassDef2;
HB_UShort Class1Count;
HB_UShort Class2Count;
HB_Class1Record* Class1Record;
};
typedef struct HB_PairPosFormat2_ HB_PairPosFormat2;
struct HB_PairPos_
{
HB_UShort PosFormat;
HB_Coverage Coverage;
HB_UShort ValueFormat1;
HB_UShort ValueFormat2;
union
{
HB_PairPosFormat1 ppf1;
HB_PairPosFormat2 ppf2;
} ppf;
};
typedef struct HB_PairPos_ HB_PairPos;
struct HB_EntryExitRecord_
{
HB_Anchor EntryAnchor;
HB_Anchor ExitAnchor;
};
typedef struct HB_EntryExitRecord_ HB_EntryExitRecord;
struct HB_CursivePos_
{
HB_UShort PosFormat;
HB_Coverage Coverage;
HB_UShort EntryExitCount;
HB_EntryExitRecord* EntryExitRecord;
};
typedef struct HB_CursivePos_ HB_CursivePos;
struct HB_BaseRecord_
{
HB_Anchor* BaseAnchor;
};
typedef struct HB_BaseRecord_ HB_BaseRecord;
struct HB_BaseArray_
{
HB_UShort BaseCount;
HB_BaseRecord* BaseRecord;
};
typedef struct HB_BaseArray_ HB_BaseArray;
struct HB_MarkBasePos_
{
HB_UShort PosFormat;
HB_Coverage MarkCoverage;
HB_Coverage BaseCoverage;
HB_UShort ClassCount;
HB_MarkArray MarkArray;
HB_BaseArray BaseArray;
};
typedef struct HB_MarkBasePos_ HB_MarkBasePos;
struct HB_ComponentRecord_
{
HB_Anchor* LigatureAnchor;
};
typedef struct HB_ComponentRecord_ HB_ComponentRecord;
struct HB_LigatureAttach_
{
HB_UShort ComponentCount;
HB_ComponentRecord* ComponentRecord;
};
typedef struct HB_LigatureAttach_ HB_LigatureAttach;
struct HB_LigatureArray_
{
HB_UShort LigatureCount;
HB_LigatureAttach* LigatureAttach;
};
typedef struct HB_LigatureArray_ HB_LigatureArray;
struct HB_MarkLigPos_
{
HB_UShort PosFormat;
HB_Coverage MarkCoverage;
HB_Coverage LigatureCoverage;
HB_UShort ClassCount;
HB_MarkArray MarkArray;
HB_LigatureArray LigatureArray;
};
typedef struct HB_MarkLigPos_ HB_MarkLigPos;
struct HB_Mark2Record_
{
HB_Anchor* Mark2Anchor;
};
typedef struct HB_Mark2Record_ HB_Mark2Record;
struct HB_Mark2Array_
{
HB_UShort Mark2Count;
HB_Mark2Record* Mark2Record;
};
typedef struct HB_Mark2Array_ HB_Mark2Array;
struct HB_MarkMarkPos_
{
HB_UShort PosFormat;
HB_Coverage Mark1Coverage;
HB_Coverage Mark2Coverage;
HB_UShort ClassCount;
HB_MarkArray Mark1Array;
HB_Mark2Array Mark2Array;
};
typedef struct HB_MarkMarkPos_ HB_MarkMarkPos;
struct HB_PosLookupRecord_
{
HB_UShort SequenceIndex;
HB_UShort LookupListIndex;
};
typedef struct HB_PosLookupRecord_ HB_PosLookupRecord;
struct HB_PosRule_
{
HB_UShort GlyphCount;
HB_UShort PosCount;
HB_UShort* Input;
HB_PosLookupRecord* PosLookupRecord;
};
typedef struct HB_PosRule_ HB_PosRule;
struct HB_PosRuleSet_
{
HB_UShort PosRuleCount;
HB_PosRule* PosRule;
};
typedef struct HB_PosRuleSet_ HB_PosRuleSet;
struct HB_ContextPosFormat1_
{
HB_Coverage Coverage;
HB_UShort PosRuleSetCount;
HB_PosRuleSet* PosRuleSet;
};
typedef struct HB_ContextPosFormat1_ HB_ContextPosFormat1;
struct HB_PosClassRule_
{
HB_UShort GlyphCount;
HB_UShort PosCount;
HB_UShort* Class;
HB_PosLookupRecord* PosLookupRecord;
};
typedef struct HB_PosClassRule_ HB_PosClassRule;
struct HB_PosClassSet_
{
HB_UShort PosClassRuleCount;
HB_PosClassRule* PosClassRule;
};
typedef struct HB_PosClassSet_ HB_PosClassSet;
struct HB_ContextPosFormat2_
{
HB_UShort MaxContextLength;
HB_Coverage Coverage;
HB_ClassDefinition ClassDef;
HB_UShort PosClassSetCount;
HB_PosClassSet* PosClassSet;
};
typedef struct HB_ContextPosFormat2_ HB_ContextPosFormat2;
struct HB_ContextPosFormat3_
{
HB_UShort GlyphCount;
HB_UShort PosCount;
HB_Coverage* Coverage;
HB_PosLookupRecord* PosLookupRecord;
};
typedef struct HB_ContextPosFormat3_ HB_ContextPosFormat3;
struct HB_ContextPos_
{
HB_UShort PosFormat;
union
{
HB_ContextPosFormat1 cpf1;
HB_ContextPosFormat2 cpf2;
HB_ContextPosFormat3 cpf3;
} cpf;
};
typedef struct HB_ContextPos_ HB_ContextPos;
struct HB_ChainPosRule_
{
HB_UShort BacktrackGlyphCount;
HB_UShort* Backtrack;
HB_UShort InputGlyphCount;
HB_UShort* Input;
HB_UShort LookaheadGlyphCount;
HB_UShort* Lookahead;
HB_UShort PosCount;
HB_PosLookupRecord* PosLookupRecord;
};
typedef struct HB_ChainPosRule_ HB_ChainPosRule;
struct HB_ChainPosRuleSet_
{
HB_UShort ChainPosRuleCount;
HB_ChainPosRule* ChainPosRule;
};
typedef struct HB_ChainPosRuleSet_ HB_ChainPosRuleSet;
struct HB_ChainContextPosFormat1_
{
HB_Coverage Coverage;
HB_UShort ChainPosRuleSetCount;
HB_ChainPosRuleSet* ChainPosRuleSet;
};
typedef struct HB_ChainContextPosFormat1_ HB_ChainContextPosFormat1;
struct HB_ChainPosClassRule_
{
HB_UShort BacktrackGlyphCount;
HB_UShort* Backtrack;
HB_UShort InputGlyphCount;
HB_UShort* Input;
HB_UShort LookaheadGlyphCount;
HB_UShort* Lookahead;
HB_UShort PosCount;
HB_PosLookupRecord* PosLookupRecord;
};
typedef struct HB_ChainPosClassRule_ HB_ChainPosClassRule;
struct HB_ChainPosClassSet_
{
HB_UShort ChainPosClassRuleCount;
HB_ChainPosClassRule* ChainPosClassRule;
};
typedef struct HB_ChainPosClassSet_ HB_ChainPosClassSet;
struct HB_ChainContextPosFormat2_
{
HB_Coverage Coverage;
HB_UShort MaxBacktrackLength;
HB_ClassDefinition BacktrackClassDef;
HB_UShort MaxInputLength;
HB_ClassDefinition InputClassDef;
HB_UShort MaxLookaheadLength;
HB_ClassDefinition LookaheadClassDef;
HB_UShort ChainPosClassSetCount;
HB_ChainPosClassSet* ChainPosClassSet;
};
typedef struct HB_ChainContextPosFormat2_ HB_ChainContextPosFormat2;
struct HB_ChainContextPosFormat3_
{
HB_UShort BacktrackGlyphCount;
HB_Coverage* BacktrackCoverage;
HB_UShort InputGlyphCount;
HB_Coverage* InputCoverage;
HB_UShort LookaheadGlyphCount;
HB_Coverage* LookaheadCoverage;
HB_UShort PosCount;
HB_PosLookupRecord* PosLookupRecord;
};
typedef struct HB_ChainContextPosFormat3_ HB_ChainContextPosFormat3;
struct HB_ChainContextPos_
{
HB_UShort PosFormat;
union
{
HB_ChainContextPosFormat1 ccpf1;
HB_ChainContextPosFormat2 ccpf2;
HB_ChainContextPosFormat3 ccpf3;
} ccpf;
};
typedef struct HB_ChainContextPos_ HB_ChainContextPos;
#if 0#endif
union HB_GPOS_SubTable_
{
HB_SinglePos single;
HB_PairPos pair;
HB_CursivePos cursive;
HB_MarkBasePos markbase;
HB_MarkLigPos marklig;
HB_MarkMarkPos markmark;
HB_ContextPos context;
HB_ChainContextPos chain;
};
typedef union HB_GPOS_SubTable_ HB_GPOS_SubTable;
HB_INTERNAL HB_Error
_HB_GPOS_Load_SubTable( HB_GPOS_SubTable* st,
HB_Stream stream,
HB_UShort lookup_type );
HB_INTERNAL void
_HB_GPOS_Free_SubTable( HB_GPOS_SubTable* st,
HB_UShort lookup_type );
HB_END_HEADER
#endif