#ifndef FTXOPEN_H
#error "Don't include this file! Use ftxopen.h instead."
#endif
#ifndef FTXGPOS_H
#define FTXGPOS_H
#ifdef __cplusplus
extern "C" {
#endif
#define TTO_Err_Invalid_GPOS_SubTable_Format 0x1020
#define TTO_Err_Invalid_GPOS_SubTable 0x1021
#define GPOS_LOOKUP_SINGLE 1
#define GPOS_LOOKUP_PAIR 2
#define GPOS_LOOKUP_CURSIVE 3
#define GPOS_LOOKUP_MARKBASE 4
#define GPOS_LOOKUP_MARKLIG 5
#define GPOS_LOOKUP_MARKMARK 6
#define GPOS_LOOKUP_CONTEXT 7
#define GPOS_LOOKUP_CHAIN 8
struct TTO_GPOSHeader_
{
TT_Bool loaded;
TT_ULong offset;
TT_Fixed Version;
TTO_ScriptList ScriptList;
TTO_FeatureList FeatureList;
TTO_LookupList LookupList;
TTO_GDEFHeader* gdef;
};
typedef struct TTO_GPOSHeader_ TTO_GPOSHeader;
struct TTO_ValueRecord_
{
TT_Short XPlacement;
TT_Short YPlacement;
TT_Short XAdvance;
TT_Short YAdvance;
TTO_Device XPlacementDevice;
TTO_Device YPlacementDevice;
TTO_Device XAdvanceDevice;
TTO_Device YAdvanceDevice;
TT_UShort XIdPlacement;
TT_UShort YIdPlacement;
TT_UShort XIdAdvance;
TT_UShort YIdAdvance;
};
typedef struct TTO_ValueRecord_ TTO_ValueRecord;
#define HAVE_X_PLACEMENT 0x0001
#define HAVE_Y_PLACEMENT 0x0002
#define HAVE_X_ADVANCE 0x0004
#define HAVE_Y_ADVANCE 0x0008
#define HAVE_X_PLACEMENT_DEVICE 0x0010
#define HAVE_Y_PLACEMENT_DEVICE 0x0020
#define HAVE_X_ADVANCE_DEVICE 0x0040
#define HAVE_Y_ADVANCE_DEVICE 0x0080
#define HAVE_X_ID_PLACEMENT 0x0100
#define HAVE_Y_ID_PLACEMENT 0x0200
#define HAVE_X_ID_ADVANCE 0x0400
#define HAVE_Y_ID_ADVANCE 0x0800
struct TTO_AnchorFormat1_
{
TT_Short XCoordinate;
TT_Short YCoordinate;
};
typedef struct TTO_AnchorFormat1_ TTO_AnchorFormat1;
struct TTO_AnchorFormat2_
{
TT_Short XCoordinate;
TT_Short YCoordinate;
TT_UShort AnchorPoint;
};
typedef struct TTO_AnchorFormat2_ TTO_AnchorFormat2;
struct TTO_AnchorFormat3_
{
TT_Short XCoordinate;
TT_Short YCoordinate;
TTO_Device XDeviceTable;
TTO_Device YDeviceTable;
};
typedef struct TTO_AnchorFormat3_ TTO_AnchorFormat3;
struct TTO_AnchorFormat4_
{
TT_UShort XIdAnchor;
TT_UShort YIdAnchor;
};
typedef struct TTO_AnchorFormat4_ TTO_AnchorFormat4;
struct TTO_Anchor_
{
TT_UShort PosFormat;
union
{
TTO_AnchorFormat1 af1;
TTO_AnchorFormat2 af2;
TTO_AnchorFormat3 af3;
TTO_AnchorFormat4 af4;
} af;
};
typedef struct TTO_Anchor_ TTO_Anchor;
struct TTO_MarkRecord_
{
TT_UShort Class;
TTO_Anchor MarkAnchor;
};
typedef struct TTO_MarkRecord_ TTO_MarkRecord;
struct TTO_MarkArray_
{
TT_UShort MarkCount;
TTO_MarkRecord* MarkRecord;
};
typedef struct TTO_MarkArray_ TTO_MarkArray;
struct TTO_SinglePosFormat1_
{
TTO_ValueRecord Value;
};
typedef struct TTO_SinglePosFormat1_ TTO_SinglePosFormat1;
struct TTO_SinglePosFormat2_
{
TT_UShort ValueCount;
TTO_ValueRecord* Value;
};
typedef struct TTO_SinglePosFormat2_ TTO_SinglePosFormat2;
struct TTO_SinglePos_
{
TT_UShort PosFormat;
TTO_Coverage Coverage;
TT_UShort ValueFormat;
union
{
TTO_SinglePosFormat1 spf1;
TTO_SinglePosFormat2 spf2;
} spf;
};
typedef struct TTO_SinglePos_ TTO_SinglePos;
struct TTO_PairValueRecord_
{
TT_UShort SecondGlyph;
TTO_ValueRecord Value1;
TTO_ValueRecord Value2;
};
typedef struct TTO_PairValueRecord_ TTO_PairValueRecord;
struct TTO_PairSet_
{
TT_UShort PairValueCount;
TTO_PairValueRecord* PairValueRecord;
};
typedef struct TTO_PairSet_ TTO_PairSet;
struct TTO_PairPosFormat1_
{
TT_UShort PairSetCount;
TTO_PairSet* PairSet;
};
typedef struct TTO_PairPosFormat1_ TTO_PairPosFormat1;
struct TTO_Class2Record_
{
TTO_ValueRecord Value1;
TTO_ValueRecord Value2;
};
typedef struct TTO_Class2Record_ TTO_Class2Record;
struct TTO_Class1Record_
{
TTO_Class2Record* Class2Record;
};
typedef struct TTO_Class1Record_ TTO_Class1Record;
struct TTO_PairPosFormat2_
{
TTO_ClassDefinition ClassDef1;
TTO_ClassDefinition ClassDef2;
TT_UShort Class1Count;
TT_UShort Class2Count;
TTO_Class1Record* Class1Record;
};
typedef struct TTO_PairPosFormat2_ TTO_PairPosFormat2;
struct TTO_PairPos_
{
TT_UShort PosFormat;
TTO_Coverage Coverage;
TT_UShort ValueFormat1;
TT_UShort ValueFormat2;
union
{
TTO_PairPosFormat1 ppf1;
TTO_PairPosFormat2 ppf2;
} ppf;
};
typedef struct TTO_PairPos_ TTO_PairPos;
struct TTO_EntryExitRecord_
{
TTO_Anchor EntryAnchor;
TTO_Anchor ExitAnchor;
};
typedef struct TTO_EntryExitRecord_ TTO_EntryExitRecord;
struct TTO_CursivePos_
{
TT_UShort PosFormat;
TTO_Coverage Coverage;
TT_UShort EntryExitCount;
TTO_EntryExitRecord* EntryExitRecord;
};
typedef struct TTO_CursivePos_ TTO_CursivePos;
struct TTO_BaseRecord_
{
TTO_Anchor* BaseAnchor;
};
typedef struct TTO_BaseRecord_ TTO_BaseRecord;
struct TTO_BaseArray_
{
TT_UShort BaseCount;
TTO_BaseRecord* BaseRecord;
};
typedef struct TTO_BaseArray_ TTO_BaseArray;
struct TTO_MarkBasePos_
{
TT_UShort PosFormat;
TTO_Coverage MarkCoverage;
TTO_Coverage BaseCoverage;
TT_UShort ClassCount;
TTO_MarkArray MarkArray;
TTO_BaseArray BaseArray;
};
typedef struct TTO_MarkBasePos_ TTO_MarkBasePos;
struct TTO_ComponentRecord_
{
TTO_Anchor* LigatureAnchor;
};
typedef struct TTO_ComponentRecord_ TTO_ComponentRecord;
struct TTO_LigatureAttach_
{
TT_UShort ComponentCount;
TTO_ComponentRecord* ComponentRecord;
};
typedef struct TTO_LigatureAttach_ TTO_LigatureAttach;
struct TTO_LigatureArray_
{
TT_UShort LigatureCount;
TTO_LigatureAttach* LigatureAttach;
};
typedef struct TTO_LigatureArray_ TTO_LigatureArray;
struct TTO_MarkLigPos_
{
TT_UShort PosFormat;
TTO_Coverage MarkCoverage;
TTO_Coverage LigatureCoverage;
TT_UShort ClassCount;
TTO_MarkArray MarkArray;
TTO_LigatureArray LigatureArray;
};
typedef struct TTO_MarkLigPos_ TTO_MarkLigPos;
struct TTO_Mark2Record_
{
TTO_Anchor* Mark2Anchor;
};
typedef struct TTO_Mark2Record_ TTO_Mark2Record;
struct TTO_Mark2Array_
{
TT_UShort Mark2Count;
TTO_Mark2Record* Mark2Record;
};
typedef struct TTO_Mark2Array_ TTO_Mark2Array;
struct TTO_MarkMarkPos_
{
TT_UShort PosFormat;
TTO_Coverage Mark1Coverage;
TTO_Coverage Mark2Coverage;
TT_UShort ClassCount;
TTO_MarkArray Mark1Array;
TTO_Mark2Array Mark2Array;
};
typedef struct TTO_MarkMarkPos_ TTO_MarkMarkPos;
struct TTO_PosLookupRecord_
{
TT_UShort SequenceIndex;
TT_UShort LookupListIndex;
};
typedef struct TTO_PosLookupRecord_ TTO_PosLookupRecord;
struct TTO_PosRule_
{
TT_UShort GlyphCount;
TT_UShort PosCount;
TT_UShort* Input;
TTO_PosLookupRecord* PosLookupRecord;
};
typedef struct TTO_PosRule_ TTO_PosRule;
struct TTO_PosRuleSet_
{
TT_UShort PosRuleCount;
TTO_PosRule* PosRule;
};
typedef struct TTO_PosRuleSet_ TTO_PosRuleSet;
struct TTO_ContextPosFormat1_
{
TTO_Coverage Coverage;
TT_UShort PosRuleSetCount;
TTO_PosRuleSet* PosRuleSet;
};
typedef struct TTO_ContextPosFormat1_ TTO_ContextPosFormat1;
struct TTO_PosClassRule_
{
TT_UShort GlyphCount;
TT_UShort PosCount;
TT_UShort* Class;
TTO_PosLookupRecord* PosLookupRecord;
};
typedef struct TTO_PosClassRule_ TTO_PosClassRule;
struct TTO_PosClassSet_
{
TT_UShort PosClassRuleCount;
TTO_PosClassRule* PosClassRule;
};
typedef struct TTO_PosClassSet_ TTO_PosClassSet;
struct TTO_ContextPosFormat2_
{
TT_UShort MaxContextLength;
TTO_Coverage Coverage;
TTO_ClassDefinition ClassDef;
TT_UShort PosClassSetCount;
TTO_PosClassSet* PosClassSet;
};
typedef struct TTO_ContextPosFormat2_ TTO_ContextPosFormat2;
struct TTO_ContextPosFormat3_
{
TT_UShort GlyphCount;
TT_UShort PosCount;
TTO_Coverage* Coverage;
TTO_PosLookupRecord* PosLookupRecord;
};
typedef struct TTO_ContextPosFormat3_ TTO_ContextPosFormat3;
struct TTO_ContextPos_
{
TT_UShort PosFormat;
union
{
TTO_ContextPosFormat1 cpf1;
TTO_ContextPosFormat2 cpf2;
TTO_ContextPosFormat3 cpf3;
} cpf;
};
typedef struct TTO_ContextPos_ TTO_ContextPos;
struct TTO_ChainPosRule_
{
TT_UShort BacktrackGlyphCount;
TT_UShort* Backtrack;
TT_UShort InputGlyphCount;
TT_UShort* Input;
TT_UShort LookaheadGlyphCount;
TT_UShort* Lookahead;
TT_UShort PosCount;
TTO_PosLookupRecord* PosLookupRecord;
};
typedef struct TTO_ChainPosRule_ TTO_ChainPosRule;
struct TTO_ChainPosRuleSet_
{
TT_UShort ChainPosRuleCount;
TTO_ChainPosRule* ChainPosRule;
};
typedef struct TTO_ChainPosRuleSet_ TTO_ChainPosRuleSet;
struct TTO_ChainContextPosFormat1_
{
TTO_Coverage Coverage;
TT_UShort ChainPosRuleSetCount;
TTO_ChainPosRuleSet* ChainPosRuleSet;
};
typedef struct TTO_ChainContextPosFormat1_ TTO_ChainContextPosFormat1;
struct TTO_ChainPosClassRule_
{
TT_UShort BacktrackGlyphCount;
TT_UShort* Backtrack;
TT_UShort InputGlyphCount;
TT_UShort* Input;
TT_UShort LookaheadGlyphCount;
TT_UShort* Lookahead;
TT_UShort PosCount;
TTO_PosLookupRecord* PosLookupRecord;
};
typedef struct TTO_ChainPosClassRule_ TTO_ChainPosClassRule;
struct TTO_ChainPosClassSet_
{
TT_UShort ChainPosClassRuleCount;
TTO_ChainPosClassRule* ChainPosClassRule;
};
typedef struct TTO_ChainPosClassSet_ TTO_ChainPosClassSet;
struct TTO_ChainContextPosFormat2_
{
TTO_Coverage Coverage;
TT_UShort MaxBacktrackLength;
TTO_ClassDefinition BacktrackClassDef;
TT_UShort MaxInputLength;
TTO_ClassDefinition InputClassDef;
TT_UShort MaxLookaheadLength;
TTO_ClassDefinition LookaheadClassDef;
TT_UShort ChainPosClassSetCount;
TTO_ChainPosClassSet* ChainPosClassSet;
};
typedef struct TTO_ChainContextPosFormat2_ TTO_ChainContextPosFormat2;
struct TTO_ChainContextPosFormat3_
{
TT_UShort BacktrackGlyphCount;
TTO_Coverage* BacktrackCoverage;
TT_UShort InputGlyphCount;
TTO_Coverage* InputCoverage;
TT_UShort LookaheadGlyphCount;
TTO_Coverage* LookaheadCoverage;
TT_UShort PosCount;
TTO_PosLookupRecord* PosLookupRecord;
};
typedef struct TTO_ChainContextPosFormat3_ TTO_ChainContextPosFormat3;
struct TTO_ChainContextPos_
{
TT_UShort PosFormat;
union
{
TTO_ChainContextPosFormat1 ccpf1;
TTO_ChainContextPosFormat2 ccpf2;
TTO_ChainContextPosFormat3 ccpf3;
} ccpf;
};
typedef struct TTO_ChainContextPos_ TTO_ChainContextPos;
union TTO_GPOS_SubTable_
{
TTO_SinglePos single;
TTO_PairPos pair;
TTO_CursivePos cursive;
TTO_MarkBasePos markbase;
TTO_MarkLigPos marklig;
TTO_MarkMarkPos markmark;
TTO_ContextPos context;
TTO_ChainContextPos chain;
};
typedef union TTO_GPOS_SubTable_ TTO_GPOS_SubTable;
EXPORT_DEF
TT_Error TT_Init_GPOS_Extension( TT_Engine engine );
EXPORT_DEF
TT_Error TT_Load_GPOS_Table( TT_Face face,
TTO_GPOSHeader* gpos,
TTO_GDEFHeader* gdef );
EXPORT_DEF
TT_Error TT_GPOS_Select_Script( TTO_GPOSHeader* gpos,
TT_ULong script_tag,
TT_UShort* script_index );
EXPORT_DEF
TT_Error TT_GPOS_Select_Language( TTO_GPOSHeader* gpos,
TT_ULong language_tag,
TT_UShort script_index,
TT_UShort* language_index,
TT_UShort* req_feature_index );
EXPORT_DEF
TT_Error TT_GPOS_Select_Feature( TTO_GPOSHeader* gpos,
TT_ULong feature_tag,
TT_UShort script_index,
TT_UShort language_index,
TT_UShort* feature_index );
EXPORT_DEF
TT_Error TT_GPOS_Query_Scripts( TTO_GPOSHeader* gpos,
TT_ULong** script_tag_list );
EXPORT_DEF
TT_Error TT_GPOS_Query_Languages( TTO_GPOSHeader* gpos,
TT_UShort script_index,
TT_ULong** language_tag_list );
EXPORT_DEF
TT_Error TT_GPOS_Query_Features( TTO_GPOSHeader* gpos,
TT_UShort script_index,
TT_UShort language_index,
TT_ULong** feature_tag_list );
EXPORT_DEF
TT_Error TT_GPOS_Add_Feature( TTO_GPOSHeader* gpos,
TT_UShort feature_index,
TT_UShort property );
EXPORT_DEF
TT_Error TT_GPOS_Clear_Features( TTO_GPOSHeader* gpos );
#ifdef __cplusplus
}
#endif
#endif