Initial gsub stub
This commit is contained in:
parent
64aef3a549
commit
a16ecbf056
|
@ -27,6 +27,9 @@
|
|||
#ifndef HB_OT_LAYOUT_GDEF_PRIVATE_H
|
||||
#define HB_OT_LAYOUT_GDEF_PRIVATE_H
|
||||
|
||||
#include "hb-private.h"
|
||||
#include "hb-ot-layout.h"
|
||||
|
||||
#include "hb-ot-layout-open-private.h"
|
||||
|
||||
|
||||
|
@ -205,6 +208,7 @@ struct GDEFHeader {
|
|||
static const hb_tag_t GDEFTag = HB_TAG ('G','D','E','F');
|
||||
|
||||
STATIC_DEFINE_GET_FOR_DATA (GDEFHeader);
|
||||
/* XXX check version here */
|
||||
|
||||
DEFINE_ACCESSOR (ClassDef, get_glyph_class_def, glyphClassDef);
|
||||
DEFINE_ACCESSOR (AttachList, get_attach_list, attachList);
|
||||
|
|
|
@ -0,0 +1,453 @@
|
|||
/*
|
||||
* Copyright (C) 2007,2008 Red Hat, Inc.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Red Hat Author(s): Behdad Esfahbod
|
||||
*/
|
||||
|
||||
#ifndef HB_OT_LAYOUT_GSUB_PRIVATE_H
|
||||
#define HB_OT_LAYOUT_GSUB_PRIVATE_H
|
||||
|
||||
#include "hb-private.h"
|
||||
#include "hb-ot-layout.h"
|
||||
|
||||
#include "hb-ot-layout-open-private.h"
|
||||
#include "hb-ot-layout-gdef-private.h"
|
||||
|
||||
|
||||
struct SingleSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 1 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
SHORT deltaGlyphID; /* Add to original GlyphID to get
|
||||
* substitute GlyphID */
|
||||
};
|
||||
ASSERT_SIZE (SingleSubstFormat1, 6);
|
||||
|
||||
struct SingleSubstFormat2 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 2 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
USHORT glyphCount; /* Number of GlyphIDs in the Substitute
|
||||
* array */
|
||||
GlyphID substitute[]; /* Array of substitute
|
||||
* GlyphIDs--ordered by Coverage Index */
|
||||
};
|
||||
ASSERT_SIZE (SingleSubstFormat2, 6);
|
||||
|
||||
struct MultipleSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 1 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
USHORT sequenceCount; /* Number of Sequence table offsets in
|
||||
* the Sequence array */
|
||||
Offset sequence[]; /* Array of offsets to Sequence
|
||||
* tables--from beginning of
|
||||
* Substitution table--ordered by
|
||||
* Coverage Index */
|
||||
};
|
||||
ASSERT_SIZE (MultipleSubstFormat1, 6);
|
||||
|
||||
struct Sequence {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT glyphCount; /* Number of GlyphIDs in the Substitute
|
||||
* array. This should always be
|
||||
* greater than 0. */
|
||||
GlyphID substitute[]; /* String of GlyphIDs to substitute */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (Sequence, 2);
|
||||
|
||||
struct AlternateSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 1 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
USHORT alternateSetCount; /* Number of AlternateSet tables */
|
||||
Offset alternateSet[]; /* Array of offsets to AlternateSet
|
||||
* tables--from beginning of
|
||||
* Substitution table--ordered by
|
||||
* Coverage Index */
|
||||
};
|
||||
ASSERT_SIZE (AlternateSubstFormat1, 6);
|
||||
|
||||
struct AlternateSet {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT glyphCount; /* Number of GlyphIDs in the Alternate
|
||||
* array */
|
||||
GlyphID alternate[]; /* Array of alternate GlyphIDs--in
|
||||
* arbitrary order */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (AlternateSet, 2);
|
||||
|
||||
struct LigatureSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 1 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
USHORT ligSetCount; /* Number of LigatureSet tables */
|
||||
Offset ligatureSet[]; /* Array of offsets to LigatureSet
|
||||
* tables--from beginning of
|
||||
* Substitution table--ordered by
|
||||
* Coverage Index */
|
||||
};
|
||||
ASSERT_SIZE (LigatureSubstFormat1, 6);
|
||||
|
||||
struct LigatureSet {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT ligatureCount; /* Number of Ligature tables */
|
||||
Offset ligature[]; /* Array of offsets to Ligature
|
||||
* tables--from beginning of
|
||||
* LigatureSet table--ordered by
|
||||
* preference */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (LigatureSet, 2);
|
||||
|
||||
struct Ligature {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
GlyphID ligGlyph; /* GlyphID of ligature to substitute */
|
||||
USHORT compCount; /* Number of components in the ligature */
|
||||
GlyphID component[]; /* Array of component GlyphIDs--start
|
||||
* with the second component--ordered
|
||||
* in writing direction */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (Ligature, 4);
|
||||
|
||||
struct SubstLookupRecord {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT sequenceIndex; /* Index into current glyph
|
||||
* sequence--first glyph = 0 */
|
||||
USHORT lookupListIndex; /* Lookup to apply to that
|
||||
* position--zero--based */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (SubstLookupRecord, 4);
|
||||
|
||||
struct ContextSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 1 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
USHORT subRuleSetCount; /* Number of SubRuleSet tables--must
|
||||
* equal GlyphCount in Coverage table */
|
||||
Offset subRuleSet[]; /* Array of offsets to SubRuleSet
|
||||
* tables--from beginning of
|
||||
* Substitution table--ordered by
|
||||
* Coverage Index */
|
||||
};
|
||||
ASSERT_SIZE (ContextSubstFormat1, 6);
|
||||
|
||||
struct SubRuleSet {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT subRuleCount; /* Number of SubRule tables */
|
||||
Offset subRule[]; /* Array of offsets to SubRule
|
||||
* tables--from beginning of SubRuleSet
|
||||
* table--ordered by preference */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (SubRuleSet, 2);
|
||||
|
||||
struct SubRule {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT glyphCount; /* Total number of glyphs in input
|
||||
* glyph sequence--includes the first
|
||||
* glyph */
|
||||
USHORT substCount; /* Number of SubstLookupRecords */
|
||||
GlyphID input[]; /* Array of input GlyphIDs--start with
|
||||
* second glyph */
|
||||
SubstLookupRecord substLookupRecord[];/* Array of SubstLookupRecords--in
|
||||
* design order */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (SubRule, 4);
|
||||
|
||||
struct ContextSubstFormat2 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 2 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
Offset classDef; /* Offset to glyph ClassDef table--from
|
||||
* beginning of Substitution table */
|
||||
USHORT subClassSetCnt; /* Number of SubClassSet tables */
|
||||
Offset subClassSet[]; /* Array of offsets to SubClassSet
|
||||
* tables--from beginning of
|
||||
* Substitution table--ordered by
|
||||
* class--may be NULL */
|
||||
};
|
||||
ASSERT_SIZE (ContextSubstFormat2, 8);
|
||||
|
||||
struct SubClassSet {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT subClassRuleCnt; /* Number of SubClassRule tables */
|
||||
Offset subClassRule[]; /* Array of offsets to SubClassRule
|
||||
* tables--from beginning of
|
||||
* SubClassSet--ordered by preference */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (SubClassSet, 2);
|
||||
|
||||
struct SubClassRule {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT glyphCount; /* Total number of classes
|
||||
* specified for the context in the
|
||||
* rule--includes the first class */
|
||||
USHORT substCount; /* Number of SubstLookupRecords */
|
||||
USHORT klass[]; /* Array of classes--beginning with the
|
||||
* second class--to be matched to the
|
||||
* input glyph class sequence */
|
||||
SubstLookupRecord substLookupRecord[];/* Array of SubstLookupRecords--in
|
||||
* design order */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (SubClassRule, 4);
|
||||
|
||||
struct ContextSubstFormat3 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 3 */
|
||||
USHORT glyphCount; /* Number of glyphs in the input glyph
|
||||
* sequence */
|
||||
USHORT substCount; /* Number of SubstLookupRecords */
|
||||
Offset coverage[]; /* Array of offsets to Coverage
|
||||
* table--from beginning of
|
||||
* Substitution table--in glyph
|
||||
* sequence order */
|
||||
SubstLookupRecord substLookupRecord[];/* Array of SubstLookupRecords--in
|
||||
* design order */
|
||||
};
|
||||
ASSERT_SIZE (ContextSubstFormat3, 6);
|
||||
|
||||
struct ChainContextSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 1 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
USHORT chainSubRuleSetCount; /* Number of ChainSubRuleSet
|
||||
* tables--must equal GlyphCount in
|
||||
* Coverage table */
|
||||
Offset chainSubRuleSet[]; /* Array of offsets to ChainSubRuleSet
|
||||
* tables--from beginning of
|
||||
* Substitution table--ordered by
|
||||
* Coverage Index */
|
||||
};
|
||||
ASSERT_SIZE (ChainContextSubstFormat1, 6);
|
||||
|
||||
struct ChainSubRuleSet {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT chainSubRuleCount; /* Number of ChainSubRule tables */
|
||||
Offset chainSubRule[]; /* Array of offsets to ChainSubRule
|
||||
* tables--from beginning of
|
||||
* ChainSubRuleSet table--ordered
|
||||
* by preference */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (ChainSubRuleSet, 2);
|
||||
|
||||
struct ChainSubRule {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT backtrackGlyphCount; /* Total number of glyphs in the
|
||||
* backtrack sequence (number of
|
||||
* glyphs to be matched before the
|
||||
* first glyph) */
|
||||
GlyphID backtrack[]; /* Array of backtracking GlyphID's
|
||||
* (to be matched before the input
|
||||
* sequence) */
|
||||
USHORT inputGlyphCount; /* Total number of glyphs in the input
|
||||
* sequence (includes the first glyph) */
|
||||
GlyphID input[]; /* Array of input GlyphIDs (start with
|
||||
* second glyph) */
|
||||
USHORT lookaheadGlyphCount; /* Total number of glyphs in the look
|
||||
* ahead sequence (number of glyphs to
|
||||
* be matched after the input sequence) */
|
||||
GlyphID lookAhead[]; /* Array of lookahead GlyphID's (to be
|
||||
* matched after the input sequence) */
|
||||
USHORT substCount; /* Number of SubstLookupRecords */
|
||||
SubstLookupRecord substLookupRecord[];/* Array of SubstLookupRecords--in
|
||||
* design order) */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (ChainSubRule, 8);
|
||||
|
||||
struct ChainContextSubstFormat2 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 2 */
|
||||
Offset coverage; /* Offset to Coverage table--from
|
||||
* beginning of Substitution table */
|
||||
Offset backtrackClassDef; /* Offset to glyph ClassDef table
|
||||
* containing backtrack sequence
|
||||
* data--from beginning of Substitution
|
||||
* table */
|
||||
Offset inputClassDef; /* Offset to glyph ClassDef
|
||||
* table containing input sequence
|
||||
* data--from beginning of Substitution
|
||||
* table */
|
||||
Offset lookaheadClassDef; /* Offset to glyph ClassDef table
|
||||
* containing lookahead sequence
|
||||
* data--from beginning of Substitution
|
||||
* table */
|
||||
USHORT chainSubClassSetCnt; /* Number of ChainSubClassSet tables */
|
||||
Offset chainSubClassSet[]; /* Array of offsets to ChainSubClassSet
|
||||
* tables--from beginning of
|
||||
* Substitution table--ordered by input
|
||||
* class--may be NULL */
|
||||
};
|
||||
ASSERT_SIZE (ChainContextSubstFormat2, 12);
|
||||
|
||||
struct ChainSubClassSet {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT chainSubClassRuleCnt; /* Number of ChainSubClassRule tables */
|
||||
Offset chainSubClassRule[]; /* Array of offsets
|
||||
* to ChainSubClassRule
|
||||
* tables--from beginning of
|
||||
* ChainSubClassSet--ordered by
|
||||
* preference */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (ChainSubClassSet, 2);
|
||||
|
||||
struct ChainSubClassRule {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT backtrackGlyphCount; /* Total number of glyphs in the
|
||||
* backtrack sequence (number of
|
||||
* glyphs to be matched before the
|
||||
* first glyph) */
|
||||
USHORT backtrack[]; /* Array of backtracking classes(to be
|
||||
* matched before the input sequence) */
|
||||
USHORT inputGlyphCount; /* Total number of classes in the input
|
||||
* sequence (includes the first class) */
|
||||
USHORT input[]; /* Array of input classes(start with
|
||||
* second class; to be matched with
|
||||
* the input glyph sequence) */
|
||||
USHORT lookaheadGlyphCount; /* Total number of classes in the
|
||||
* look ahead sequence (number of
|
||||
* classes to be matched after the
|
||||
* input sequence) */
|
||||
USHORT lookAhead[]; /* Array of lookahead classes(to be
|
||||
* matched after the input sequence) */
|
||||
USHORT substCount; /* Number of SubstLookupRecords */
|
||||
SubstLookupRecord substLookupRecord[];/* Array of SubstLookupRecords--in
|
||||
* design order) */
|
||||
};
|
||||
DEFINE_NULL_ASSERT_SIZE (ChainSubClassRule, 8);
|
||||
|
||||
struct ChainContextSubstFormat3 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 3 */
|
||||
USHORT backtrackGlyphCount; /* Number of glyphs in the backtracking
|
||||
* sequence */
|
||||
Offset backtrackCoverage[]; /* Array of offsets to coverage tables
|
||||
* in backtracking sequence, in glyph
|
||||
* sequence order */
|
||||
USHORT inputGlyphCount; /* Number of glyphs in input sequence */
|
||||
Offset inputCoverage[]; /* Array of offsets to coverage
|
||||
* tables in input sequence, in glyph
|
||||
* sequence order */
|
||||
USHORT lookaheadGlyphCount; /* Number of glyphs in lookahead
|
||||
* sequence */
|
||||
Offset lookaheadCoverage[]; /* Array of offsets to coverage tables
|
||||
* in lookahead sequence, in glyph
|
||||
* sequence order */
|
||||
USHORT substCount; /* Number of SubstLookupRecords */
|
||||
SubstLookupRecord substLookupRecord[];/* Array of SubstLookupRecords--in
|
||||
* design order */
|
||||
};
|
||||
ASSERT_SIZE (ChainContextSubstFormat3, 10);
|
||||
|
||||
struct ExtensionSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier. Set to 1. */
|
||||
USHORT extensionLookupType; /* Lookup type of subtable referenced
|
||||
* by ExtensionOffset (i.e. the
|
||||
* extension subtable). */
|
||||
ULONG extensionOffset; /* Offset to the extension subtable,
|
||||
* of lookup type subtable. */
|
||||
};
|
||||
ASSERT_SIZE (ExtensionSubstFormat1, 8);
|
||||
|
||||
struct ReverseChainSingleSubstFormat1 {
|
||||
/* TODO */
|
||||
|
||||
private:
|
||||
USHORT substFormat; /* Format identifier--format = 1 */
|
||||
Offset coverage; /* Offset to Coverage table -- from
|
||||
* beginning of Substitution table */
|
||||
USHORT backtrackGlyphCount; /* Number of glyphs in the backtracking
|
||||
* sequence */
|
||||
Offset backtrackCoverage[]; /* Array of offsets to coverage tables
|
||||
* in backtracking sequence, in glyph
|
||||
* sequence order */
|
||||
USHORT lookaheadGlyphCount; /* Number of glyphs in lookahead
|
||||
* sequence */
|
||||
Offset lookaheadCoverage[]; /* Array of offsets to coverage tables
|
||||
* in lookahead sequence, in glyph
|
||||
* sequence order */
|
||||
USHORT glyphCount; /* Number of GlyphIDs in the Substitute
|
||||
* array */
|
||||
GlyphID substitute[]; /* Array of substitute
|
||||
* GlyphIDs--ordered by Coverage Index */
|
||||
};
|
||||
ASSERT_SIZE (ReverseChainSingleSubstFormat1, 10);
|
||||
|
||||
#endif /* HB_OT_LAYOUT_GSUB_PRIVATE_H */
|
|
@ -30,6 +30,7 @@
|
|||
#include "hb-private.h"
|
||||
#include "hb-ot-layout.h"
|
||||
|
||||
|
||||
/*
|
||||
* Int types
|
||||
*/
|
||||
|
@ -335,6 +336,7 @@ DEFINE_NULL_ALIAS (OpenTypeFontFace, OffsetTable);
|
|||
struct TTCHeader {
|
||||
/* OpenTypeFontFaces, in no particular order */
|
||||
DEFINE_OFFSET_ARRAY_TYPE (OffsetTable, offsetTable, numFonts);
|
||||
/* XXX check version here */
|
||||
|
||||
private:
|
||||
Tag ttcTag; /* TrueType Collection ID string: 'ttcf' */
|
||||
|
@ -794,6 +796,7 @@ typedef struct GSUBGPOSHeader {
|
|||
static const hb_tag_t GPOSTag = HB_TAG ('G','P','O','S');
|
||||
|
||||
STATIC_DEFINE_GET_FOR_DATA (GSUBGPOSHeader);
|
||||
/* XXX check version here */
|
||||
|
||||
DEFINE_LIST_ACCESSOR(Script, script); /* get_script_list, get_script(i) */
|
||||
DEFINE_LIST_ACCESSOR(Feature, feature);/* get_feature_list, get_feature(i) */
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "hb-ot-layout-open-private.h"
|
||||
#include "hb-ot-layout-gdef-private.h"
|
||||
#include "hb-ot-layout-gsub-private.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
|
Loading…
Reference in New Issue