/src/third_party/harfbuzz/src/harfbuzz-gsub-private.h
C Header | 483 lines | 272 code | 115 blank | 96 comment | 0 complexity | 9dacc401aece0b6f90f8f60b480a66a1 MD5 | raw file
Possible License(s): AGPL-3.0, GPL-3.0, LGPL-2.1, CC-BY-SA-3.0, BSD-2-Clause, CC-BY-3.0, AGPL-1.0, Unlicense, 0BSD, MPL-2.0, LGPL-2.0, Apache-2.0, GPL-2.0, LGPL-3.0, BSD-3-Clause, MPL-2.0-no-copyleft-exception, MIT
- /*
- * 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_GSUB_PRIVATE_H
- #define HARFBUZZ_GSUB_PRIVATE_H
- #include "harfbuzz-impl.h"
- #include "harfbuzz-stream-private.h"
- #include "harfbuzz-gsub.h"
- HB_BEGIN_HEADER
- #ifdef HB_USE_PACKED_STRUCTS
- #pragma pack(push, 1)
- #endif
- typedef union HB_GSUB_SubTable_ HB_GSUB_SubTable;
- /* LookupType 1 */
- struct HB_SingleSubstFormat1_
- {
- HB_Short DeltaGlyphID; /* constant added to get
- substitution glyph index */
- };
- typedef struct HB_SingleSubstFormat1_ HB_SingleSubstFormat1;
- struct HB_SingleSubstFormat2_
- {
- HB_UShort* Substitute; /* array of substitute glyph IDs */
- HB_UShort GlyphCount; /* number of glyph IDs in
- Substitute array */
- };
- typedef struct HB_SingleSubstFormat2_ HB_SingleSubstFormat2;
- struct HB_SingleSubst_
- {
- union
- {
- HB_SingleSubstFormat1 ssf1;
- HB_SingleSubstFormat2 ssf2;
- } ssf;
- HB_Coverage Coverage; /* Coverage table */
- HB_Byte SubstFormat; /* 1 or 2 */
- };
- typedef struct HB_SingleSubst_ HB_SingleSubst;
- /* LookupType 2 */
- struct HB_Sequence_
- {
- HB_UShort* Substitute; /* string of glyph IDs to
- substitute */
- HB_UShort GlyphCount; /* number of glyph IDs in the
- Substitute array */
- };
- typedef struct HB_Sequence_ HB_Sequence;
- struct HB_MultipleSubst_
- {
- HB_Sequence* Sequence; /* array of Sequence tables */
- HB_Coverage Coverage; /* Coverage table */
- HB_UShort SubstFormat; /* always 1 */
- HB_UShort SequenceCount; /* number of Sequence tables */
- };
- typedef struct HB_MultipleSubst_ HB_MultipleSubst;
- /* LookupType 3 */
- struct HB_AlternateSet_
- {
- HB_UShort* Alternate; /* array of alternate glyph IDs */
- HB_UShort GlyphCount; /* number of glyph IDs in the
- Alternate array */
- };
- typedef struct HB_AlternateSet_ HB_AlternateSet;
- struct HB_AlternateSubst_
- {
- HB_AlternateSet* AlternateSet; /* array of AlternateSet tables */
- HB_Coverage Coverage; /* Coverage table */
- HB_UShort SubstFormat; /* always 1 */
- HB_UShort AlternateSetCount;
- /* number of AlternateSet tables */
- };
- typedef struct HB_AlternateSubst_ HB_AlternateSubst;
- /* LookupType 4 */
- struct HB_Ligature_
- {
- HB_UShort* Component; /* array of component glyph IDs */
- HB_UShort LigGlyph; /* glyphID of ligature
- to substitute */
- HB_UShort ComponentCount; /* number of components in ligature */
- };
- typedef struct HB_Ligature_ HB_Ligature;
- struct HB_LigatureSet_
- {
- HB_Ligature* Ligature; /* array of Ligature tables */
- HB_UShort LigatureCount; /* number of Ligature tables */
- };
- typedef struct HB_LigatureSet_ HB_LigatureSet;
- struct HB_LigatureSubst_
- {
- HB_LigatureSet* LigatureSet; /* array of LigatureSet tables */
- HB_Coverage Coverage; /* Coverage table */
- HB_UShort SubstFormat; /* always 1 */
- HB_UShort LigatureSetCount; /* number of LigatureSet tables */
- };
- typedef struct HB_LigatureSubst_ HB_LigatureSubst;
- /* needed by both lookup type 5 and 6 */
- struct HB_SubstLookupRecord_
- {
- HB_UShort SequenceIndex; /* index into current
- glyph sequence */
- HB_UShort LookupListIndex; /* Lookup to apply to that pos. */
- };
- typedef struct HB_SubstLookupRecord_ HB_SubstLookupRecord;
- /* LookupType 5 */
- struct HB_SubRule_
- {
- HB_UShort* Input; /* array of input glyph IDs */
- HB_SubstLookupRecord* SubstLookupRecord;
- /* array of SubstLookupRecord
- tables */
- HB_UShort GlyphCount; /* total number of input glyphs */
- HB_UShort SubstCount; /* number of SubstLookupRecord
- tables */
- };
- typedef struct HB_SubRule_ HB_SubRule;
- struct HB_SubRuleSet_
- {
- HB_SubRule* SubRule; /* array of SubRule tables */
- HB_UShort SubRuleCount; /* number of SubRule tables */
- };
- typedef struct HB_SubRuleSet_ HB_SubRuleSet;
- struct HB_ContextSubstFormat1_
- {
- HB_SubRuleSet* SubRuleSet; /* array of SubRuleSet tables */
- HB_Coverage Coverage; /* Coverage table */
- HB_UShort SubRuleSetCount; /* number of SubRuleSet tables */
- };
- typedef struct HB_ContextSubstFormat1_ HB_ContextSubstFormat1;
- struct HB_SubClassRule_
- {
- HB_UShort* Class; /* array of classes */
- HB_SubstLookupRecord* SubstLookupRecord;
- /* array of SubstLookupRecord
- tables */
- HB_UShort GlyphCount; /* total number of context classes */
- HB_UShort SubstCount; /* number of SubstLookupRecord
- tables */
- };
- typedef struct HB_SubClassRule_ HB_SubClassRule;
- struct HB_SubClassSet_
- {
- HB_SubClassRule* SubClassRule; /* array of SubClassRule tables */
- HB_UShort SubClassRuleCount;
- /* number of SubClassRule tables */
- };
- typedef struct HB_SubClassSet_ HB_SubClassSet;
- /* 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_ContextSubstFormat2_
- {
- HB_SubClassSet* SubClassSet; /* array of SubClassSet tables */
- HB_Coverage Coverage; /* Coverage table */
- HB_ClassDefinition ClassDef; /* ClassDef table */
- HB_UShort SubClassSetCount;
- /* number of SubClassSet tables */
- HB_UShort MaxContextLength;
- /* maximal context length */
- };
- typedef struct HB_ContextSubstFormat2_ HB_ContextSubstFormat2;
- struct HB_ContextSubstFormat3_
- {
- HB_Coverage* Coverage; /* array of Coverage tables */
- HB_SubstLookupRecord* SubstLookupRecord;
- /* array of substitution lookups */
- HB_UShort GlyphCount; /* number of input glyphs */
- HB_UShort SubstCount; /* number of SubstLookupRecords */
- };
- typedef struct HB_ContextSubstFormat3_ HB_ContextSubstFormat3;
- struct HB_ContextSubst_
- {
- union
- {
- HB_ContextSubstFormat1 csf1;
- HB_ContextSubstFormat2 csf2;
- HB_ContextSubstFormat3 csf3;
- } csf;
- HB_Byte SubstFormat; /* 1, 2, or 3 */
- };
- typedef struct HB_ContextSubst_ HB_ContextSubst;
- /* LookupType 6 */
- struct HB_ChainSubRule_
- {
- 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_SubstLookupRecord* SubstLookupRecord;
- /* array of SubstLookupRecords */
- 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 SubstCount; /* number of SubstLookupRecords */
- };
- typedef struct HB_ChainSubRule_ HB_ChainSubRule;
- struct HB_ChainSubRuleSet_
- {
- HB_ChainSubRule* ChainSubRule; /* array of ChainSubRule tables */
- HB_UShort ChainSubRuleCount;
- /* number of ChainSubRule tables */
- };
- typedef struct HB_ChainSubRuleSet_ HB_ChainSubRuleSet;
- struct HB_ChainContextSubstFormat1_
- {
- HB_ChainSubRuleSet* ChainSubRuleSet;
- /* array of ChainSubRuleSet tables */
- HB_Coverage Coverage; /* Coverage table */
- HB_UShort ChainSubRuleSetCount;
- /* number of ChainSubRuleSet tables */
- };
- typedef struct HB_ChainContextSubstFormat1_ HB_ChainContextSubstFormat1;
- struct HB_ChainSubClassRule_
- {
- HB_UShort* Backtrack; /* array of backtrack classes */
- HB_UShort* Input; /* array of context classes */
- HB_UShort* Lookahead; /* array of lookahead classes */
- HB_SubstLookupRecord* SubstLookupRecord;
- /* 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 SubstCount; /* number of SubstLookupRecords */
- };
- typedef struct HB_ChainSubClassRule_ HB_ChainSubClassRule;
- struct HB_ChainSubClassSet_
- {
- HB_ChainSubClassRule* ChainSubClassRule;
- /* array of ChainSubClassRule
- tables */
- HB_UShort ChainSubClassRuleCount;
- /* number of ChainSubClassRule
- tables */
- };
- typedef struct HB_ChainSubClassSet_ HB_ChainSubClassSet;
- /* 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_ChainContextSubstFormat2_
- {
- HB_ChainSubClassSet* ChainSubClassSet;
- /* array of ChainSubClassSet
- tables */
- HB_Coverage Coverage; /* Coverage table */
- HB_ClassDefinition BacktrackClassDef;
- /* BacktrackClassDef table */
- HB_ClassDefinition InputClassDef;
- /* InputClassDef table */
- HB_ClassDefinition LookaheadClassDef;
- /* LookaheadClassDef table */
- HB_UShort ChainSubClassSetCount;
- /* number of ChainSubClassSet
- tables */
- HB_UShort MaxBacktrackLength;
- /* maximal backtrack length */
- HB_UShort MaxLookaheadLength;
- /* maximal lookahead length */
- HB_UShort MaxInputLength;
- /* maximal input length */
- };
- typedef struct HB_ChainContextSubstFormat2_ HB_ChainContextSubstFormat2;
- struct HB_ChainContextSubstFormat3_
- {
- HB_Coverage* BacktrackCoverage;
- /* array of backtrack Coverage
- tables */
- HB_Coverage* InputCoverage;
- /* array of input coverage
- tables */
- HB_Coverage* LookaheadCoverage;
- /* array of lookahead coverage
- tables */
- HB_SubstLookupRecord* SubstLookupRecord;
- /* array of substitution lookups */
- HB_UShort BacktrackGlyphCount;
- /* number of backtrack glyphs */
- HB_UShort InputGlyphCount;
- /* number of input glyphs */
- HB_UShort LookaheadGlyphCount;
- /* number of lookahead glyphs */
- HB_UShort SubstCount; /* number of SubstLookupRecords */
- };
- typedef struct HB_ChainContextSubstFormat3_ HB_ChainContextSubstFormat3;
- struct HB_ChainContextSubst_
- {
- union
- {
- HB_ChainContextSubstFormat1 ccsf1;
- HB_ChainContextSubstFormat2 ccsf2;
- HB_ChainContextSubstFormat3 ccsf3;
- } ccsf;
- HB_Byte SubstFormat; /* 1, 2, or 3 */
- };
- typedef struct HB_ChainContextSubst_ HB_ChainContextSubst;
- #if 0
- /* LookupType 7 */
- struct HB_ExtensionSubst_
- {
- HB_GSUB_SubTable *subtable; /* referenced subtable */
- HB_UShort SubstFormat; /* always 1 */
- HB_UShort LookuptType; /* lookup-type of referenced subtable */
- };
- typedef struct HB_ExtensionSubst_ HB_ExtensionSubst;
- #endif
- /* LookupType 8 */
- struct HB_ReverseChainContextSubst_
- {
- HB_Coverage* LookaheadCoverage; /* array of lookahead Coverage
- tables */
- HB_UShort* Substitute; /* array of substitute Glyph ID */
- HB_Coverage* BacktrackCoverage; /* array of backtrack Coverage
- tables */
- HB_Coverage Coverage; /* coverage table for input glyphs */
- HB_UShort SubstFormat; /* always 1 */
- HB_UShort BacktrackGlyphCount; /* number of backtrack glyphs */
- HB_UShort LookaheadGlyphCount; /* number of lookahead glyphs */
- HB_UShort GlyphCount; /* number of Glyph IDs */
- };
- typedef struct HB_ReverseChainContextSubst_ HB_ReverseChainContextSubst;
- union HB_GSUB_SubTable_
- {
- HB_SingleSubst single;
- HB_MultipleSubst multiple;
- HB_AlternateSubst alternate;
- HB_LigatureSubst ligature;
- HB_ContextSubst context;
- HB_ChainContextSubst chain;
- HB_ReverseChainContextSubst reverse;
- };
- HB_INTERNAL HB_Error
- _HB_GSUB_Load_SubTable( HB_GSUB_SubTable* st,
- HB_Stream stream,
- HB_UShort lookup_type );
- HB_INTERNAL void
- _HB_GSUB_Free_SubTable( HB_GSUB_SubTable* st,
- HB_UShort lookup_type );
- #ifdef HB_USE_PACKED_STRUCTS
- #pragma pack(pop)
- #endif
- HB_END_HEADER
- #endif /* HARFBUZZ_GSUB_PRIVATE_H */