Initial gsub stub
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 23 Jan 2008 22:01:55 +0000 (17:01 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 23 Jan 2008 22:01:55 +0000 (17:01 -0500)
src/hb-ot-layout-gdef-private.h
src/hb-ot-layout-gsub-private.h [new file with mode: 0644]
src/hb-ot-layout-open-private.h
src/main.cc

index e05ea38..ce8b32e 100644 (file)
@@ -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);
diff --git a/src/hb-ot-layout-gsub-private.h b/src/hb-ot-layout-gsub-private.h
new file mode 100644 (file)
index 0000000..c8a1900
--- /dev/null
@@ -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 */
index bcd50e7..9cdb6e2 100644 (file)
@@ -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) */
index 1efca5d..a670959 100644 (file)
@@ -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>