| /* |
| * Copyright (C) 1998-2004 David Turner and Werner Lemberg |
| * Copyright (C) 2006 Behdad Esfahbod |
| * |
| * This is part of HarfBuzz, an OpenType Layout engine library. |
| * |
| * Permission is hereby granted, without written agreement and without |
| * license or royalty fees, to use, copy, modify, and distribute this |
| * software and its documentation for any purpose, provided that the |
| * above copyright notice and the following two paragraphs appear in |
| * all copies of this software. |
| * |
| * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR |
| * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES |
| * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN |
| * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
| * DAMAGE. |
| * |
| * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
| * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
| * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS |
| * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO |
| * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
| */ |
| |
| #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 |
| |
| #ifdef HB_USE_PACKED_STRUCTS |
| #pragma pack(push, 1) |
| #endif |
| |
| /* shared tables */ |
| |
| #define VR_X_PLACEMENT_DEVICE 0 |
| #define VR_Y_PLACEMENT_DEVICE 1 |
| #define VR_X_ADVANCE_DEVICE 2 |
| #define VR_Y_ADVANCE_DEVICE 3 |
| |
| struct HB_ValueRecord_ |
| { |
| HB_Short XPlacement; /* horizontal adjustment for |
| placement */ |
| HB_Short YPlacement; /* vertical adjustment for |
| placement */ |
| HB_Short XAdvance; /* horizontal adjustment for |
| advance */ |
| HB_Short YAdvance; /* vertical adjustment for |
| advance */ |
| |
| HB_Device** DeviceTables; /* device tables for placement |
| and advance */ |
| |
| #ifdef HB_SUPPORT_MULTIPLE_MASTER |
| HB_UShort XIdPlacement; /* horizontal placement metric ID */ |
| HB_UShort YIdPlacement; /* vertical placement metric ID */ |
| HB_UShort XIdAdvance; /* horizontal advance metric ID */ |
| HB_UShort YIdAdvance; /* vertical advance metric ID */ |
| #endif |
| }; |
| |
| typedef struct HB_ValueRecord_ HB_ValueRecord; |
| |
| |
| /* Mask values to scan the value format of the ValueRecord structure. |
| We always expand compressed ValueRecords of the font. */ |
| |
| #define HB_GPOS_FORMAT_HAVE_DEVICE_TABLES 0x00F0 |
| |
| #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; /* horizontal value */ |
| HB_Short YCoordinate; /* vertical value */ |
| }; |
| |
| typedef struct HB_AnchorFormat1_ HB_AnchorFormat1; |
| |
| |
| struct HB_AnchorFormat2_ |
| { |
| HB_Short XCoordinate; /* horizontal value */ |
| HB_Short YCoordinate; /* vertical value */ |
| HB_UShort AnchorPoint; /* index to glyph contour point */ |
| }; |
| |
| typedef struct HB_AnchorFormat2_ HB_AnchorFormat2; |
| |
| #define AF3_X_DEVICE_TABLE 0 |
| #define AF3_Y_DEVICE_TABLE 1 |
| |
| struct HB_AnchorFormat3_ |
| { |
| HB_Short XCoordinate; /* horizontal value */ |
| HB_Short YCoordinate; /* vertical value */ |
| HB_Device** DeviceTables; /* device tables for coordinates */ |
| }; |
| |
| typedef struct HB_AnchorFormat3_ HB_AnchorFormat3; |
| |
| |
| #ifdef HB_SUPPORT_MULTIPLE_MASTER |
| struct HB_AnchorFormat4_ |
| { |
| HB_UShort XIdAnchor; /* horizontal metric ID */ |
| HB_UShort YIdAnchor; /* vertical metric ID */ |
| }; |
| |
| typedef struct HB_AnchorFormat4_ HB_AnchorFormat4; |
| #endif |
| |
| |
| struct HB_Anchor_ |
| { |
| HB_Byte PosFormat; /* 1, 2, 3, or 4 -- 0 indicates |
| that there is no Anchor table */ |
| |
| union |
| { |
| HB_AnchorFormat1 af1; |
| HB_AnchorFormat2 af2; |
| HB_AnchorFormat3 af3; |
| #ifdef HB_SUPPORT_MULTIPLE_MASTER |
| HB_AnchorFormat4 af4; |
| #endif |
| } af; |
| }; |
| |
| typedef struct HB_Anchor_ HB_Anchor; |
| |
| |
| struct HB_MarkRecord_ |
| { |
| HB_UShort Class; /* mark class */ |
| HB_Anchor MarkAnchor; /* anchor table */ |
| }; |
| |
| typedef struct HB_MarkRecord_ HB_MarkRecord; |
| |
| |
| struct HB_MarkArray_ |
| { |
| HB_UShort MarkCount; /* number of MarkRecord tables */ |
| HB_MarkRecord* MarkRecord; /* array of MarkRecord tables */ |
| }; |
| |
| typedef struct HB_MarkArray_ HB_MarkArray; |
| |
| |
| /* LookupType 1 */ |
| |
| struct HB_SinglePosFormat1_ |
| { |
| HB_ValueRecord Value; /* ValueRecord for all covered |
| glyphs */ |
| }; |
| |
| typedef struct HB_SinglePosFormat1_ HB_SinglePosFormat1; |
| |
| |
| struct HB_SinglePosFormat2_ |
| { |
| HB_UShort ValueCount; /* number of ValueRecord tables */ |
| HB_ValueRecord* Value; /* array of ValueRecord tables */ |
| }; |
| |
| typedef struct HB_SinglePosFormat2_ HB_SinglePosFormat2; |
| |
| |
| struct HB_SinglePos_ |
| { |
| HB_Byte PosFormat; /* 1 or 2 */ |
| HB_Coverage Coverage; /* Coverage table */ |
| |
| HB_UShort ValueFormat; /* format of ValueRecord table */ |
| |
| union |
| { |
| HB_SinglePosFormat1 spf1; |
| HB_SinglePosFormat2 spf2; |
| } spf; |
| }; |
| |
| typedef struct HB_SinglePos_ HB_SinglePos; |
| |
| |
| /* LookupType 2 */ |
| |
| struct HB_PairValueRecord_ |
| { |
| HB_UShort SecondGlyph; /* glyph ID for second glyph */ |
| HB_ValueRecord Value1; /* pos. data for first glyph */ |
| HB_ValueRecord Value2; /* pos. data for second glyph */ |
| }; |
| |
| typedef struct HB_PairValueRecord_ HB_PairValueRecord; |
| |
| |
| struct HB_PairSet_ |
| { |
| HB_UShort PairValueCount; |
| /* number of PairValueRecord tables */ |
| HB_PairValueRecord* PairValueRecord; |
| /* array of PairValueRecord tables */ |
| }; |
| |
| typedef struct HB_PairSet_ HB_PairSet; |
| |
| |
| struct HB_PairPosFormat1_ |
| { |
| HB_UShort PairSetCount; /* number of PairSet tables */ |
| HB_PairSet* PairSet; /* array of PairSet tables */ |
| }; |
| |
| typedef struct HB_PairPosFormat1_ HB_PairPosFormat1; |
| |
| |
| struct HB_Class2Record_ |
| { |
| HB_ValueRecord Value1; /* pos. data for first glyph */ |
| HB_ValueRecord Value2; /* pos. data for second glyph */ |
| }; |
| |
| typedef struct HB_Class2Record_ HB_Class2Record; |
| |
| |
| struct HB_Class1Record_ |
| { |
| HB_Class2Record* Class2Record; /* array of Class2Record tables */ |
| }; |
| |
| typedef struct HB_Class1Record_ HB_Class1Record; |
| |
| |
| struct HB_PairPosFormat2_ |
| { |
| HB_ClassDefinition ClassDef1; /* class def. for first glyph */ |
| HB_ClassDefinition ClassDef2; /* class def. for second glyph */ |
| HB_UShort Class1Count; /* number of classes in ClassDef1 |
| table */ |
| HB_UShort Class2Count; /* number of classes in ClassDef2 |
| table */ |
| HB_Class1Record* Class1Record; /* array of Class1Record tables */ |
| }; |
| |
| typedef struct HB_PairPosFormat2_ HB_PairPosFormat2; |
| |
| |
| struct HB_PairPos_ |
| { |
| HB_Byte PosFormat; /* 1 or 2 */ |
| HB_Coverage Coverage; /* Coverage table */ |
| HB_UShort ValueFormat1; /* format of ValueRecord table |
| for first glyph */ |
| HB_UShort ValueFormat2; /* format of ValueRecord table |
| for second glyph */ |
| |
| union |
| { |
| HB_PairPosFormat1 ppf1; |
| HB_PairPosFormat2 ppf2; |
| } ppf; |
| }; |
| |
| typedef struct HB_PairPos_ HB_PairPos; |
| |
| |
| /* LookupType 3 */ |
| |
| struct HB_EntryExitRecord_ |
| { |
| HB_Anchor EntryAnchor; /* entry Anchor table */ |
| HB_Anchor ExitAnchor; /* exit Anchor table */ |
| }; |
| |
| |
| typedef struct HB_EntryExitRecord_ HB_EntryExitRecord; |
| |
| struct HB_CursivePos_ |
| { |
| HB_UShort PosFormat; /* always 1 */ |
| HB_Coverage Coverage; /* Coverage table */ |
| HB_UShort EntryExitCount; |
| /* number of EntryExitRecord tables */ |
| HB_EntryExitRecord* EntryExitRecord; |
| /* array of EntryExitRecord tables */ |
| }; |
| |
| typedef struct HB_CursivePos_ HB_CursivePos; |
| |
| |
| /* LookupType 4 */ |
| |
| struct HB_BaseRecord_ |
| { |
| HB_Anchor* BaseAnchor; /* array of base glyph anchor |
| tables */ |
| }; |
| |
| typedef struct HB_BaseRecord_ HB_BaseRecord; |
| |
| |
| struct HB_BaseArray_ |
| { |
| HB_UShort BaseCount; /* number of BaseRecord tables */ |
| HB_BaseRecord* BaseRecord; /* array of BaseRecord tables */ |
| }; |
| |
| typedef struct HB_BaseArray_ HB_BaseArray; |
| |
| |
| struct HB_MarkBasePos_ |
| { |
| HB_UShort PosFormat; /* always 1 */ |
| HB_Coverage MarkCoverage; /* mark glyph coverage table */ |
| HB_Coverage BaseCoverage; /* base glyph coverage table */ |
| HB_UShort ClassCount; /* number of mark classes */ |
| HB_MarkArray MarkArray; /* mark array table */ |
| HB_BaseArray BaseArray; /* base array table */ |
| }; |
| |
| typedef struct HB_MarkBasePos_ HB_MarkBasePos; |
| |
| |
| /* LookupType 5 */ |
| |
| struct HB_ComponentRecord_ |
| { |
| HB_Anchor* LigatureAnchor; /* array of ligature glyph anchor |
| tables */ |
| }; |
| |
| typedef struct HB_ComponentRecord_ HB_ComponentRecord; |
| |
| |
| struct HB_LigatureAttach_ |
| { |
| HB_UShort ComponentCount; |
| /* number of ComponentRecord tables */ |
| HB_ComponentRecord* ComponentRecord; |
| /* array of ComponentRecord tables */ |
| }; |
| |
| typedef struct HB_LigatureAttach_ HB_LigatureAttach; |
| |
| |
| struct HB_LigatureArray_ |
| { |
| HB_UShort LigatureCount; /* number of LigatureAttach tables */ |
| HB_LigatureAttach* LigatureAttach; |
| /* array of LigatureAttach tables */ |
| }; |
| |
| typedef struct HB_LigatureArray_ HB_LigatureArray; |
| |
| |
| struct HB_MarkLigPos_ |
| { |
| HB_UShort PosFormat; /* always 1 */ |
| HB_Coverage MarkCoverage; /* mark glyph coverage table */ |
| HB_Coverage LigatureCoverage; |
| /* ligature glyph coverage table */ |
| HB_UShort ClassCount; /* number of mark classes */ |
| HB_MarkArray MarkArray; /* mark array table */ |
| HB_LigatureArray LigatureArray; /* ligature array table */ |
| }; |
| |
| typedef struct HB_MarkLigPos_ HB_MarkLigPos; |
| |
| |
| /* LookupType 6 */ |
| |
| struct HB_Mark2Record_ |
| { |
| HB_Anchor* Mark2Anchor; /* array of mark glyph anchor |
| tables */ |
| }; |
| |
| typedef struct HB_Mark2Record_ HB_Mark2Record; |
| |
| |
| struct HB_Mark2Array_ |
| { |
| HB_UShort Mark2Count; /* number of Mark2Record tables */ |
| HB_Mark2Record* Mark2Record; /* array of Mark2Record tables */ |
| }; |
| |
| typedef struct HB_Mark2Array_ HB_Mark2Array; |
| |
| |
| struct HB_MarkMarkPos_ |
| { |
| HB_UShort PosFormat; /* always 1 */ |
| HB_Coverage Mark1Coverage; /* first mark glyph coverage table */ |
| HB_Coverage Mark2Coverage; /* second mark glyph coverave table */ |
| HB_UShort ClassCount; /* number of combining mark classes */ |
| HB_MarkArray Mark1Array; /* MarkArray table for first mark */ |
| HB_Mark2Array Mark2Array; /* MarkArray table for second mark */ |
| }; |
| |
| typedef struct HB_MarkMarkPos_ HB_MarkMarkPos; |
| |
| |
| /* needed by both lookup type 7 and 8 */ |
| |
| struct HB_PosLookupRecord_ |
| { |
| HB_UShort SequenceIndex; /* index into current |
| glyph sequence */ |
| HB_UShort LookupListIndex; /* Lookup to apply to that pos. */ |
| }; |
| |
| typedef struct HB_PosLookupRecord_ HB_PosLookupRecord; |
| |
| |
| /* LookupType 7 */ |
| |
| struct HB_PosRule_ |
| { |
| HB_UShort GlyphCount; /* total number of input glyphs */ |
| HB_UShort PosCount; /* number of PosLookupRecord tables */ |
| HB_UShort* Input; /* array of input glyph IDs */ |
| HB_PosLookupRecord* PosLookupRecord; |
| /* array of PosLookupRecord tables */ |
| }; |
| |
| typedef struct HB_PosRule_ HB_PosRule; |
| |
| |
| struct HB_PosRuleSet_ |
| { |
| HB_UShort PosRuleCount; /* number of PosRule tables */ |
| HB_PosRule* PosRule; /* array of PosRule tables */ |
| }; |
| |
| typedef struct HB_PosRuleSet_ HB_PosRuleSet; |
| |
| |
| struct HB_ContextPosFormat1_ |
| { |
| HB_Coverage Coverage; /* Coverage table */ |
| HB_UShort PosRuleSetCount; /* number of PosRuleSet tables */ |
| HB_PosRuleSet* PosRuleSet; /* array of PosRuleSet tables */ |
| }; |
| |
| typedef struct HB_ContextPosFormat1_ HB_ContextPosFormat1; |
| |
| |
| struct HB_PosClassRule_ |
| { |
| HB_UShort GlyphCount; /* total number of context classes */ |
| HB_UShort PosCount; /* number of PosLookupRecord tables */ |
| HB_UShort* Class; /* array of classes */ |
| HB_PosLookupRecord* PosLookupRecord; |
| /* array of PosLookupRecord tables */ |
| }; |
| |
| typedef struct HB_PosClassRule_ HB_PosClassRule; |
| |
| |
| struct HB_PosClassSet_ |
| { |
| HB_UShort PosClassRuleCount; |
| /* number of PosClassRule tables */ |
| HB_PosClassRule* PosClassRule; /* array of PosClassRule tables */ |
| }; |
| |
| typedef struct HB_PosClassSet_ HB_PosClassSet; |
| |
| |
| /* The `MaxContextLength' field is not defined in the TTO specification |
| but simplifies the implementation of this format. It holds the |
| maximal context length used in the context rules. */ |
| |
| struct HB_ContextPosFormat2_ |
| { |
| HB_UShort MaxContextLength; |
| /* maximal context length */ |
| HB_Coverage Coverage; /* Coverage table */ |
| HB_ClassDefinition ClassDef; /* ClassDef table */ |
| HB_UShort PosClassSetCount; |
| /* number of PosClassSet tables */ |
| HB_PosClassSet* PosClassSet; /* array of PosClassSet tables */ |
| }; |
| |
| typedef struct HB_ContextPosFormat2_ HB_ContextPosFormat2; |
| |
| |
| struct HB_ContextPosFormat3_ |
| { |
| HB_UShort GlyphCount; /* number of input glyphs */ |
| HB_UShort PosCount; /* number of PosLookupRecord tables */ |
| HB_Coverage* Coverage; /* array of Coverage tables */ |
| HB_PosLookupRecord* PosLookupRecord; |
| /* array of PosLookupRecord tables */ |
| }; |
| |
| typedef struct HB_ContextPosFormat3_ HB_ContextPosFormat3; |
| |
| |
| struct HB_ContextPos_ |
| { |
| HB_Byte PosFormat; /* 1, 2, or 3 */ |
| |
| union |
| { |
| HB_ContextPosFormat1 cpf1; |
| HB_ContextPosFormat2 cpf2; |
| HB_ContextPosFormat3 cpf3; |
| } cpf; |
| }; |
| |
| typedef struct HB_ContextPos_ HB_ContextPos; |
| |
| |
| /* LookupType 8 */ |
| |
| struct HB_ChainPosRule_ |
| { |
| HB_UShort* Backtrack; /* array of backtrack glyph IDs */ |
| HB_UShort* Input; /* array of input glyph IDs */ |
| HB_UShort* Lookahead; /* array of lookahead glyph IDs */ |
| HB_PosLookupRecord* PosLookupRecord; |
| /* array of PosLookupRecords */ |
| HB_UShort BacktrackGlyphCount; |
| /* total number of backtrack glyphs */ |
| HB_UShort InputGlyphCount; |
| /* total number of input glyphs */ |
| HB_UShort LookaheadGlyphCount; |
| /* total number of lookahead glyphs */ |
| HB_UShort PosCount; /* number of PosLookupRecords */ |
| }; |
| |
| typedef struct HB_ChainPosRule_ HB_ChainPosRule; |
| |
| |
| struct HB_ChainPosRuleSet_ |
| { |
| HB_UShort ChainPosRuleCount; |
| /* number of ChainPosRule tables */ |
| HB_ChainPosRule* ChainPosRule; /* array of ChainPosRule tables */ |
| }; |
| |
| typedef struct HB_ChainPosRuleSet_ HB_ChainPosRuleSet; |
| |
| |
| struct HB_ChainContextPosFormat1_ |
| { |
| HB_Coverage Coverage; /* Coverage table */ |
| HB_UShort ChainPosRuleSetCount; |
| /* number of ChainPosRuleSet tables */ |
| HB_ChainPosRuleSet* ChainPosRuleSet; |
| /* array of ChainPosRuleSet tables */ |
| }; |
| |
| typedef struct HB_ChainContextPosFormat1_ HB_ChainContextPosFormat1; |
| |
| |
| struct HB_ChainPosClassRule_ |
| { |
| HB_UShort* Backtrack; /* array of backtrack classes */ |
| HB_UShort* Input; /* array of context classes */ |
| HB_UShort* Lookahead; /* array of lookahead classes */ |
| HB_PosLookupRecord* PosLookupRecord; |
| /* array of substitution lookups */ |
| HB_UShort BacktrackGlyphCount; |
| /* total number of backtrack |
| classes */ |
| HB_UShort InputGlyphCount; |
| /* total number of context classes */ |
| HB_UShort LookaheadGlyphCount; |
| /* total number of lookahead |
| classes */ |
| HB_UShort PosCount; /* number of PosLookupRecords */ |
| }; |
| |
| typedef struct HB_ChainPosClassRule_ HB_ChainPosClassRule; |
| |
| |
| struct HB_ChainPosClassSet_ |
| { |
| HB_UShort ChainPosClassRuleCount; |
| /* number of ChainPosClassRule |
| tables */ |
| HB_ChainPosClassRule* ChainPosClassRule; |
| /* array of ChainPosClassRule |
| tables */ |
| }; |
| |
| typedef struct HB_ChainPosClassSet_ HB_ChainPosClassSet; |
| |
| |
| /* The `MaxXXXLength' fields are not defined in the TTO specification |
| but simplifies the implementation of this format. It holds the |
| maximal context length used in the specific context rules. */ |
| |
| struct HB_ChainContextPosFormat2_ |
| { |
| HB_Coverage Coverage; /* Coverage table */ |
| |
| HB_UShort MaxBacktrackLength; |
| /* maximal backtrack length */ |
| HB_ClassDefinition BacktrackClassDef; |
| /* BacktrackClassDef table */ |
| HB_UShort MaxInputLength; |
| /* maximal input length */ |
| HB_ClassDefinition InputClassDef; |
| /* InputClassDef table */ |
| HB_UShort MaxLookaheadLength; |
| /* maximal lookahead length */ |
| HB_ClassDefinition LookaheadClassDef; |
| /* LookaheadClassDef table */ |
| |
| HB_UShort ChainPosClassSetCount; |
| /* number of ChainPosClassSet |
| tables */ |
| HB_ChainPosClassSet* ChainPosClassSet; |
| /* array of ChainPosClassSet |
| tables */ |
| }; |
| |
| typedef struct HB_ChainContextPosFormat2_ HB_ChainContextPosFormat2; |
| |
| |
| struct HB_ChainContextPosFormat3_ |
| { |
| HB_UShort BacktrackGlyphCount; |
| /* number of backtrack glyphs */ |
| HB_Coverage* BacktrackCoverage; |
| /* array of backtrack Coverage |
| tables */ |
| HB_UShort InputGlyphCount; |
| /* number of input glyphs */ |
| HB_Coverage* InputCoverage; |
| /* array of input coverage |
| tables */ |
| HB_UShort LookaheadGlyphCount; |
| /* number of lookahead glyphs */ |
| HB_Coverage* LookaheadCoverage; |
| /* array of lookahead coverage |
| tables */ |
| HB_UShort PosCount; /* number of PosLookupRecords */ |
| HB_PosLookupRecord* PosLookupRecord; |
| /* array of substitution lookups */ |
| }; |
| |
| typedef struct HB_ChainContextPosFormat3_ HB_ChainContextPosFormat3; |
| |
| |
| struct HB_ChainContextPos_ |
| { |
| HB_Byte PosFormat; /* 1, 2, or 3 */ |
| |
| union |
| { |
| HB_ChainContextPosFormat1 ccpf1; |
| HB_ChainContextPosFormat2 ccpf2; |
| HB_ChainContextPosFormat3 ccpf3; |
| } ccpf; |
| }; |
| |
| typedef struct HB_ChainContextPos_ HB_ChainContextPos; |
| |
| |
| #if 0 |
| /* LookupType 10 */ |
| struct HB_ExtensionPos_ |
| { |
| HB_UShort PosFormat; /* always 1 */ |
| HB_UShort LookuptType; /* lookup-type of referenced subtable */ |
| HB_GPOS_SubTable *subtable; /* referenced subtable */ |
| }; |
| |
| typedef struct HB_ExtensionPos_ HB_ExtensionPos; |
| #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 ); |
| |
| #ifdef HB_USE_PACKED_STRUCTS |
| #pragma pack(pop) |
| #endif |
| |
| HB_END_HEADER |
| |
| #endif /* HARFBUZZ_GPOS_PRIVATE_H */ |