src/hb-aat-layout-common-private.hh | 55 +------ src/hb-aat-layout-morx-table.hh | 122 ++++------------ test/shaping/data/text-rendering-tests/Makefile.sources | 1 test/shaping/data/text-rendering-tests/README | 3 4 files changed, 49 insertions(+), 132 deletions(-)
New commits: commit 0d39ac224c680b1f0134b58e78391497fbe47370 Author: Behdad Esfahbod <[email protected]> Date: Thu Jan 11 22:47:08 2018 +0100 [test/text-rendering-tests] Update README diff --git a/test/shaping/data/text-rendering-tests/README b/test/shaping/data/text-rendering-tests/README index 351f8301..c46d3ffd 100644 --- a/test/shaping/data/text-rendering-tests/README +++ b/test/shaping/data/text-rendering-tests/README @@ -2,3 +2,6 @@ Tests in this directory are automatically imported from the text-rendering-tests repository owned by Unicode Consortium: https://github.com/unicode-org/text-rendering-tests + +To import the latest version of that test suite just run +"make update" from a build in a git checkout. commit 17a66f133c7e523403b6c90b011fcf0acb6356c6 Author: Behdad Esfahbod <[email protected]> Date: Thu Jan 11 22:46:19 2018 +0100 [test] Disable MORX-12 Ouch. I need a better workflow for this. diff --git a/test/shaping/data/text-rendering-tests/Makefile.sources b/test/shaping/data/text-rendering-tests/Makefile.sources index a3acf276..3e834243 100644 --- a/test/shaping/data/text-rendering-tests/Makefile.sources +++ b/test/shaping/data/text-rendering-tests/Makefile.sources @@ -28,7 +28,6 @@ TESTS = \ tests/HVAR-2.tests \ tests/KERN-1.tests \ tests/KERN-2.tests \ - tests/MORX-12.tests \ tests/SHBALI-3.tests \ tests/SHKNDA-1.tests \ $(NULL) commit 1f1c85a54aad8a25a67041cbb9c4277d28c1c761 Author: Behdad Esfahbod <[email protected]> Date: Thu Jan 11 22:43:57 2018 +0100 [aat] Remove 'mort' support It's dead, Jim! diff --git a/src/hb-aat-layout-common-private.hh b/src/hb-aat-layout-common-private.hh index fca74ea2..2462701c 100644 --- a/src/hb-aat-layout-common-private.hh +++ b/src/hb-aat-layout-common-private.hh @@ -477,33 +477,8 @@ struct Lookup }; -struct ClassTable -{ - inline unsigned int get_class (hb_codepoint_t glyph_id) const - { - return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ? classArrayZ[glyph_id - firstGlyph] : 1; - } - - inline bool sanitize (hb_sanitize_context_t *c) const - { - TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && classArrayZ.sanitize (c, glyphCount)); - } - - protected: - GlyphID firstGlyph; /* First glyph index included in the trimmed array. */ - HBUINT16 glyphCount; /* Total number of glyphs (equivalent to the last - * glyph minus the value of firstGlyph plus 1). */ - UnsizedArrayOf<HBUINT8> - classArrayZ; /* The class codes (indexed by glyph index minus - * firstGlyph). */ - public: - DEFINE_SIZE_ARRAY (4, classArrayZ); -}; - - /* - * (Extended) State Table + * Extended State Table */ template <typename T> @@ -545,16 +520,14 @@ struct Entry<void> DEFINE_SIZE_STATIC (4); }; -template <typename Types, typename Extra> +template <typename Extra> struct StateTable { - typedef typename Types::HBUINT HBUINT; - typedef typename Types::HBUSHORT HBUSHORT; - typedef typename Types::ClassType ClassType; - inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const - { return (this+classTable).get_class (glyph_id, num_glyphs); } - + { + const HBUINT16 *v = (this+classTable).get_value (glyph_id, num_glyphs); + return v ? *v : 1; + } inline const Entry<Extra> *get_entries () const { @@ -565,7 +538,7 @@ struct StateTable { if (unlikely (klass >= nClasses)) return nullptr; - const HBUSHORT *states = (this+stateArrayTable).arrayZ; + const HBUINT16 *states = (this+stateArrayTable).arrayZ; const Entry<Extra> *entries = (this+entryTable).arrayZ; unsigned int entry = states[state * nClasses + klass]; @@ -579,7 +552,7 @@ struct StateTable TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); - const HBUSHORT *states = (this+stateArrayTable).arrayZ; + const HBUINT16 *states = (this+stateArrayTable).arrayZ; const Entry<Extra> *entries = (this+entryTable).arrayZ; unsigned int num_states = 1; @@ -594,8 +567,8 @@ struct StateTable nClasses * (num_states - state)))) return_trace (false); { /* Sweep new states. */ - const HBUSHORT *stop = &states[num_states * nClasses]; - for (const HBUSHORT *p = &states[state * nClasses]; p < stop; p++) + const HBUINT16 *stop = &states[num_states * nClasses]; + for (const HBUINT16 *p = &states[state * nClasses]; p < stop; p++) num_entries = MAX<unsigned int> (num_entries, *p + 1); state = num_states; } @@ -619,13 +592,13 @@ struct StateTable } protected: - HBUINT nClasses; /* Number of classes, which is the number of indices + HBUINT32 nClasses; /* Number of classes, which is the number of indices * in a single line in the state array. */ - OffsetTo<ClassType, HBUINT> + OffsetTo<Lookup<HBUINT16>, HBUINT32> classTable; /* Offset to the class table. */ - OffsetTo<UnsizedArrayOf<HBUSHORT>, HBUINT> + OffsetTo<UnsizedArrayOf<HBUINT16>, HBUINT32> stateArrayTable;/* Offset to the state array. */ - OffsetTo<UnsizedArrayOf<Entry<Extra> >, HBUINT> + OffsetTo<UnsizedArrayOf<Entry<Extra> >, HBUINT32> entryTable; /* Offset to the entry array. */ public: diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh index cc15fddb..95f4245d 100644 --- a/src/hb-aat-layout-morx-table.hh +++ b/src/hb-aat-layout-morx-table.hh @@ -30,7 +30,6 @@ #include "hb-open-type-private.hh" #include "hb-aat-layout-common-private.hh" -#define HB_AAT_TAG_MORT HB_TAG('m','o','r','t') #define HB_AAT_TAG_MORX HB_TAG('m','o','r','x') @@ -39,7 +38,6 @@ namespace AAT { using namespace OT; -template <typename Types> struct RearrangementSubtable { enum Flags { @@ -171,16 +169,13 @@ struct RearrangementSubtable } protected: - StateTable<Types, void> machine; + StateTable<void> machine; public: DEFINE_SIZE_MIN (2); }; -template <typename Types> struct ContextualSubtable { - typedef typename Types::HBUINT HBUINT; - enum Flags { SetMark = 0x8000, /* If set, make the current glyph the marked glyph. */ DontAdvance = 0x4000, /* If set, don't advance to the next glyph before @@ -206,7 +201,7 @@ struct ContextualSubtable bool ret = false; unsigned int num_glyphs = c->face->get_num_glyphs (); - const UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT> &subs = this+substitutionTables; + const UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT32> &subs = this+substitutionTables; unsigned int state = 0; unsigned int last_zero = 0; @@ -290,14 +285,13 @@ struct ContextualSubtable } protected: - StateTable<Types, EntryData> machine; - OffsetTo<UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT>, HBUINT> - substitutionTables; + StateTable<EntryData> machine; + OffsetTo<UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT32>, HBUINT32> + substitutionTables; public: DEFINE_SIZE_MIN (2); }; -template <typename Types> struct LigatureSubtable { inline bool apply (hb_apply_context_t *c) const @@ -315,7 +309,6 @@ struct LigatureSubtable } }; -template <typename Types> struct NoncontextualSubtable { inline bool apply (hb_apply_context_t *c) const @@ -352,7 +345,6 @@ struct NoncontextualSubtable DEFINE_SIZE_MIN (2); }; -template <typename Types> struct InsertionSubtable { inline bool apply (hb_apply_context_t *c) const @@ -392,13 +384,9 @@ struct Feature }; -template <typename Types> struct ChainSubtable { - template <typename> struct Chain; - friend struct Chain<Types>; - - typedef typename Types::HBUINT HBUINT; + friend struct Chain; inline unsigned int get_size (void) const { return length; } inline unsigned int get_type (void) const { return coverage & 0xFF; } @@ -443,33 +431,30 @@ struct ChainSubtable } protected: - HBUINT length; /* Total subtable length, including this header. */ - HBUINT coverage; /* Coverage flags and subtable type. */ - HBUINT32 subFeatureFlags;/* The 32-bit mask identifying which subtable this is. */ + HBUINT32 length; /* Total subtable length, including this header. */ + HBUINT32 coverage; /* Coverage flags and subtable type. */ + HBUINT32 subFeatureFlags;/* The 32-bit mask identifying which subtable this is. */ union { - RearrangementSubtable<Types> rearrangement; - ContextualSubtable<Types> contextual; - LigatureSubtable<Types> ligature; - NoncontextualSubtable<Types> noncontextual; - InsertionSubtable<Types> insertion; + RearrangementSubtable rearrangement; + ContextualSubtable contextual; + LigatureSubtable ligature; + NoncontextualSubtable noncontextual; + InsertionSubtable insertion; } u; public: - DEFINE_SIZE_MIN (2 * sizeof (HBUINT) + 4); + DEFINE_SIZE_MIN (2 * sizeof (HBUINT32) + 4); }; -template <typename Types> struct Chain { - typedef typename Types::HBUINT HBUINT; - inline void apply (hb_apply_context_t *c) const { - const ChainSubtable<Types> *subtable = &StructAtOffset<ChainSubtable<Types> > (featureZ, featureZ[0].static_size * featureCount); + const ChainSubtable *subtable = &StructAtOffset<ChainSubtable> (featureZ, featureZ[0].static_size * featureCount); unsigned int count = subtableCount; for (unsigned int i = 0; i < count; i++) { subtable->apply (c); - subtable = &StructAfter<ChainSubtable<Types> > (*subtable); + subtable = &StructAfter<ChainSubtable> (*subtable); } } @@ -486,13 +471,13 @@ struct Chain if (!c->check_array (featureZ, featureZ[0].static_size, featureCount)) return_trace (false); - const ChainSubtable<Types> *subtable = &StructAtOffset<ChainSubtable<Types> > (featureZ, featureZ[0].static_size * featureCount); + const ChainSubtable *subtable = &StructAtOffset<ChainSubtable> (featureZ, featureZ[0].static_size * featureCount); unsigned int count = subtableCount; for (unsigned int i = 0; i < count; i++) { if (!subtable->sanitize (c)) return_trace (false); - subtable = &StructAfter<ChainSubtable<Types> > (*subtable); + subtable = &StructAfter<ChainSubtable> (*subtable); } return_trace (true); @@ -501,15 +486,15 @@ struct Chain protected: HBUINT32 defaultFlags; /* The default specification for subtables. */ HBUINT32 length; /* Total byte count, including this header. */ - HBUINT featureCount; /* Number of feature subtable entries. */ - HBUINT subtableCount; /* The number of subtables in the chain. */ + HBUINT32 featureCount; /* Number of feature subtable entries. */ + HBUINT32 subtableCount; /* The number of subtables in the chain. */ - Feature featureZ[VAR]; /* Features. */ - ChainSubtable<Types> subtableX[VAR]; /* Subtables. */ + Feature featureZ[VAR]; /* Features. */ + ChainSubtable subtableX[VAR]; /* Subtables. */ // subtableGlyphCoverageArray if major == 3 public: - DEFINE_SIZE_MIN (8 + 2 * sizeof (HBUINT)); + DEFINE_SIZE_MIN (8 + 2 * sizeof (HBUINT32)); }; @@ -517,22 +502,18 @@ struct Chain * The 'mort'/'morx' Tables */ -template <typename Types> -struct mortmorx +struct morx { - static const hb_tag_t mortTag = HB_AAT_TAG_MORT; - static const hb_tag_t morxTag = HB_AAT_TAG_MORX; - - typedef typename Types::HBUINT HBUINT; + static const hb_tag_t tableTag = HB_AAT_TAG_MORX; inline void apply (hb_apply_context_t *c) const { - const Chain<Types> *chain = chains; + const Chain *chain = chains; unsigned int count = chainCount; for (unsigned int i = 0; i < count; i++) { chain->apply (c); - chain = &StructAfter<Chain<Types> > (*chain); + chain = &StructAfter<Chain> (*chain); } } @@ -540,17 +521,17 @@ struct mortmorx { TRACE_SANITIZE (this); if (!version.sanitize (c) || - (version.major >> (sizeof (HBUINT) == 4 ? 1 : 0)) != 1 || + (version.major >> (sizeof (HBUINT32) == 4 ? 1 : 0)) != 1 || !chainCount.sanitize (c)) return_trace (false); - const Chain<Types> *chain = chains; + const Chain *chain = chains; unsigned int count = chainCount; for (unsigned int i = 0; i < count; i++) { if (!chain->sanitize (c, version.major)) return_trace (false); - chain = &StructAfter<Chain<Types> > (*chain); + chain = &StructAfter<Chain> (*chain); } return_trace (true); @@ -561,51 +542,12 @@ struct mortmorx * 1 for mort, 2 or 3 for morx. */ HBUINT32 chainCount; /* Number of metamorphosis chains contained in this * table. */ - Chain<Types> chains[VAR]; /* Chains. */ + Chain chains[VAR]; /* Chains. */ public: DEFINE_SIZE_MIN (8); }; -struct MortTypes -{ - static const bool extended = false; - typedef HBUINT16 HBUINT; - typedef HBUINT8 HBUSHORT; - struct ClassType : ClassTable - { - inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs HB_UNUSED) const - { - return ClassTable::get_class (glyph_id); - } - }; -}; -struct MorxTypes -{ - static const bool extended = true; - typedef HBUINT32 HBUINT; - typedef HBUINT16 HBUSHORT; - struct ClassType : Lookup<HBUINT16> - { - inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const - { - const HBUINT16 *v = get_value (glyph_id, num_glyphs); - return v ? *v : 1; - } - }; -}; - -struct mort : mortmorx<MortTypes> -{ - static const hb_tag_t tableTag = HB_AAT_TAG_MORT; -}; - -struct morx : mortmorx<MorxTypes> -{ - static const hb_tag_t tableTag = HB_AAT_TAG_MORX; -}; - - } /* namespace AAT */ _______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
