#ifndef FTXOPEN_H
#error "Don't include this file! Use ftxopen.h instead."
#endif
#ifndef FTXGSUB_H
#define FTXGSUB_H
#ifdef __cplusplus
extern "C" {
#endif
#define TTO_Err_Invalid_GSUB_SubTable_Format 0x1010
#define TTO_Err_Invalid_GSUB_SubTable 0x1011
#define GSUB_LOOKUP_SINGLE 1
#define GSUB_LOOKUP_MULTIPLE 2
#define GSUB_LOOKUP_ALTERNATE 3
#define GSUB_LOOKUP_LIGATURE 4
#define GSUB_LOOKUP_CONTEXT 5
#define GSUB_LOOKUP_CHAIN 6
#define ALL_GLYPHS 0xFFFF
typedef TT_UShort (*TTO_AltFunction)(TT_ULong pos,
TT_UShort glyphID,
TT_UShort num_alternates,
TT_UShort* alternates,
void* data );
struct TTO_GSUBHeader_
{
TT_Bool loaded;
TT_ULong offset;
TT_Fixed Version;
TTO_ScriptList ScriptList;
TTO_FeatureList FeatureList;
TTO_LookupList LookupList;
TTO_GDEFHeader* gdef;
TTO_AltFunction alt;
void* data;
};
typedef struct TTO_GSUBHeader_ TTO_GSUBHeader;
struct TTO_SingleSubstFormat1_
{
TT_Short DeltaGlyphID;
};
typedef struct TTO_SingleSubstFormat1_ TTO_SingleSubstFormat1;
struct TTO_SingleSubstFormat2_
{
TT_UShort GlyphCount;
TT_UShort* Substitute;
};
typedef struct TTO_SingleSubstFormat2_ TTO_SingleSubstFormat2;
struct TTO_SingleSubst_
{
TT_UShort SubstFormat;
TTO_Coverage Coverage;
union
{
TTO_SingleSubstFormat1 ssf1;
TTO_SingleSubstFormat2 ssf2;
} ssf;
};
typedef struct TTO_SingleSubst_ TTO_SingleSubst;
struct TTO_Sequence_
{
TT_UShort GlyphCount;
TT_UShort* Substitute;
};
typedef struct TTO_Sequence_ TTO_Sequence;
struct TTO_MultipleSubst_
{
TT_UShort SubstFormat;
TTO_Coverage Coverage;
TT_UShort SequenceCount;
TTO_Sequence* Sequence;
};
typedef struct TTO_MultipleSubst_ TTO_MultipleSubst;
struct TTO_AlternateSet_
{
TT_UShort GlyphCount;
TT_UShort* Alternate;
};
typedef struct TTO_AlternateSet_ TTO_AlternateSet;
struct TTO_AlternateSubst_
{
TT_UShort SubstFormat;
TTO_Coverage Coverage;
TT_UShort AlternateSetCount;
TTO_AlternateSet* AlternateSet;
};
typedef struct TTO_AlternateSubst_ TTO_AlternateSubst;
struct TTO_Ligature_
{
TT_UShort LigGlyph;
TT_UShort ComponentCount;
TT_UShort* Component;
};
typedef struct TTO_Ligature_ TTO_Ligature;
struct TTO_LigatureSet_
{
TT_UShort LigatureCount;
TTO_Ligature* Ligature;
};
typedef struct TTO_LigatureSet_ TTO_LigatureSet;
struct TTO_LigatureSubst_
{
TT_UShort SubstFormat;
TTO_Coverage Coverage;
TT_UShort LigatureSetCount;
TTO_LigatureSet* LigatureSet;
};
typedef struct TTO_LigatureSubst_ TTO_LigatureSubst;
struct TTO_SubstLookupRecord_
{
TT_UShort SequenceIndex;
TT_UShort LookupListIndex;
};
typedef struct TTO_SubstLookupRecord_ TTO_SubstLookupRecord;
struct TTO_SubRule_
{
TT_UShort GlyphCount;
TT_UShort SubstCount;
TT_UShort* Input;
TTO_SubstLookupRecord* SubstLookupRecord;
};
typedef struct TTO_SubRule_ TTO_SubRule;
struct TTO_SubRuleSet_
{
TT_UShort SubRuleCount;
TTO_SubRule* SubRule;
};
typedef struct TTO_SubRuleSet_ TTO_SubRuleSet;
struct TTO_ContextSubstFormat1_
{
TTO_Coverage Coverage;
TT_UShort SubRuleSetCount;
TTO_SubRuleSet* SubRuleSet;
};
typedef struct TTO_ContextSubstFormat1_ TTO_ContextSubstFormat1;
struct TTO_SubClassRule_
{
TT_UShort GlyphCount;
TT_UShort SubstCount;
TT_UShort* Class;
TTO_SubstLookupRecord* SubstLookupRecord;
};
typedef struct TTO_SubClassRule_ TTO_SubClassRule;
struct TTO_SubClassSet_
{
TT_UShort SubClassRuleCount;
TTO_SubClassRule* SubClassRule;
};
typedef struct TTO_SubClassSet_ TTO_SubClassSet;
struct TTO_ContextSubstFormat2_
{
TT_UShort MaxContextLength;
TTO_Coverage Coverage;
TTO_ClassDefinition ClassDef;
TT_UShort SubClassSetCount;
TTO_SubClassSet* SubClassSet;
};
typedef struct TTO_ContextSubstFormat2_ TTO_ContextSubstFormat2;
struct TTO_ContextSubstFormat3_
{
TT_UShort GlyphCount;
TT_UShort SubstCount;
TTO_Coverage* Coverage;
TTO_SubstLookupRecord* SubstLookupRecord;
};
typedef struct TTO_ContextSubstFormat3_ TTO_ContextSubstFormat3;
struct TTO_ContextSubst_
{
TT_UShort SubstFormat;
union
{
TTO_ContextSubstFormat1 csf1;
TTO_ContextSubstFormat2 csf2;
TTO_ContextSubstFormat3 csf3;
} csf;
};
typedef struct TTO_ContextSubst_ TTO_ContextSubst;
struct TTO_ChainSubRule_
{
TT_UShort BacktrackGlyphCount;
TT_UShort* Backtrack;
TT_UShort InputGlyphCount;
TT_UShort* Input;
TT_UShort LookaheadGlyphCount;
TT_UShort* Lookahead;
TT_UShort SubstCount;
TTO_SubstLookupRecord* SubstLookupRecord;
};
typedef struct TTO_ChainSubRule_ TTO_ChainSubRule;
struct TTO_ChainSubRuleSet_
{
TT_UShort ChainSubRuleCount;
TTO_ChainSubRule* ChainSubRule;
};
typedef struct TTO_ChainSubRuleSet_ TTO_ChainSubRuleSet;
struct TTO_ChainContextSubstFormat1_
{
TTO_Coverage Coverage;
TT_UShort ChainSubRuleSetCount;
TTO_ChainSubRuleSet* ChainSubRuleSet;
};
typedef struct TTO_ChainContextSubstFormat1_ TTO_ChainContextSubstFormat1;
struct TTO_ChainSubClassRule_
{
TT_UShort BacktrackGlyphCount;
TT_UShort* Backtrack;
TT_UShort InputGlyphCount;
TT_UShort* Input;
TT_UShort LookaheadGlyphCount;
TT_UShort* Lookahead;
TT_UShort SubstCount;
TTO_SubstLookupRecord* SubstLookupRecord;
};
typedef struct TTO_ChainSubClassRule_ TTO_ChainSubClassRule;
struct TTO_ChainSubClassSet_
{
TT_UShort ChainSubClassRuleCount;
TTO_ChainSubClassRule* ChainSubClassRule;
};
typedef struct TTO_ChainSubClassSet_ TTO_ChainSubClassSet;
struct TTO_ChainContextSubstFormat2_
{
TTO_Coverage Coverage;
TT_UShort MaxBacktrackLength;
TTO_ClassDefinition BacktrackClassDef;
TT_UShort MaxInputLength;
TTO_ClassDefinition InputClassDef;
TT_UShort MaxLookaheadLength;
TTO_ClassDefinition LookaheadClassDef;
TT_UShort ChainSubClassSetCount;
TTO_ChainSubClassSet* ChainSubClassSet;
};
typedef struct TTO_ChainContextSubstFormat2_ TTO_ChainContextSubstFormat2;
struct TTO_ChainContextSubstFormat3_
{
TT_UShort BacktrackGlyphCount;
TTO_Coverage* BacktrackCoverage;
TT_UShort InputGlyphCount;
TTO_Coverage* InputCoverage;
TT_UShort LookaheadGlyphCount;
TTO_Coverage* LookaheadCoverage;
TT_UShort SubstCount;
TTO_SubstLookupRecord* SubstLookupRecord;
};
typedef struct TTO_ChainContextSubstFormat3_ TTO_ChainContextSubstFormat3;
struct TTO_ChainContextSubst_
{
TT_UShort SubstFormat;
union
{
TTO_ChainContextSubstFormat1 ccsf1;
TTO_ChainContextSubstFormat2 ccsf2;
TTO_ChainContextSubstFormat3 ccsf3;
} ccsf;
};
typedef struct TTO_ChainContextSubst_ TTO_ChainContextSubst;
union TTO_GSUB_SubTable_
{
TTO_SingleSubst single;
TTO_MultipleSubst multiple;
TTO_AlternateSubst alternate;
TTO_LigatureSubst ligature;
TTO_ContextSubst context;
TTO_ChainContextSubst chain;
};
typedef union TTO_GSUB_SubTable_ TTO_GSUB_SubTable;
struct TTO_GSUB_String_
{
TT_ULong length;
TT_ULong pos;
TT_ULong allocated;
TT_UShort* string;
TT_UShort* properties;
};
typedef struct TTO_GSUB_String_ TTO_GSUB_String;
EXPORT_DEF
TT_Error TT_Init_GSUB_Extension( TT_Engine engine );
EXPORT_DEF
TT_Error TT_Load_GSUB_Table( TT_Face face,
TTO_GSUBHeader* gsub,
TTO_GDEFHeader* gdef );
EXPORT_DEF
TT_Error TT_GSUB_Select_Script( TTO_GSUBHeader* gsub,
TT_ULong script_tag,
TT_UShort* script_index );
EXPORT_DEF
TT_Error TT_GSUB_Select_Language( TTO_GSUBHeader* gsub,
TT_ULong language_tag,
TT_UShort script_index,
TT_UShort* language_index,
TT_UShort* req_feature_index );
EXPORT_DEF
TT_Error TT_GSUB_Select_Feature( TTO_GSUBHeader* gsub,
TT_ULong feature_tag,
TT_UShort script_index,
TT_UShort language_index,
TT_UShort* feature_index );
EXPORT_DEF
TT_Error TT_GSUB_Query_Scripts( TTO_GSUBHeader* gsub,
TT_ULong** script_tag_list );
EXPORT_DEF
TT_Error TT_GSUB_Query_Languages( TTO_GSUBHeader* gsub,
TT_UShort script_index,
TT_ULong** language_tag_list );
EXPORT_DEF
TT_Error TT_GSUB_Query_Features( TTO_GSUBHeader* gsub,
TT_UShort script_index,
TT_UShort language_index,
TT_ULong** feature_tag_list );
EXPORT_DEF
TT_Error TT_GSUB_Add_Feature( TTO_GSUBHeader* gsub,
TT_UShort feature_index,
TT_UShort property );
EXPORT_DEF
TT_Error TT_GSUB_Clear_Features( TTO_GSUBHeader* gsub );
EXPORT_DEF
TT_Error TT_GSUB_Register_Alternate_Function( TTO_GSUBHeader* gsub,
TTO_AltFunction alt,
void* data );
EXPORT_DEF
TT_Error TT_GSUB_Apply_String( TTO_GSUBHeader* gsub,
TTO_GSUB_String* in,
TTO_GSUB_String* out );
EXPORT_DEF
TT_Error TT_GSUB_Add_String( TTO_GSUB_String* in,
TT_UShort num_in,
TTO_GSUB_String* out,
TT_UShort num_out,
TT_UShort* data );
#ifdef __cplusplus
}
#endif
#endif