summaryrefslogtreecommitdiff
path: root/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh')
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh359
1 files changed, 0 insertions, 359 deletions
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
deleted file mode 100644
index 3563cab8bd8..00000000000
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright © 2017 Google, Inc.
- *
- * This is part of HarfBuzz, a text shaping 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.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef HB_OT_KERN_TABLE_HH
-#define HB_OT_KERN_TABLE_HH
-
-#include "hb-aat-layout-kerx-table.hh"
-
-
-/*
- * kern -- Kerning
- * https://docs.microsoft.com/en-us/typography/opentype/spec/kern
- * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6kern.html
- */
-#define HB_OT_TAG_kern HB_TAG('k','e','r','n')
-
-
-namespace OT {
-
-
-template <typename KernSubTableHeader>
-struct KernSubTableFormat3
-{
- int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
- {
- hb_array_t<const FWORD> kernValue = kernValueZ.as_array (kernValueCount);
- hb_array_t<const HBUINT8> leftClass = StructAfter<const UnsizedArrayOf<HBUINT8>> (kernValue).as_array (glyphCount);
- hb_array_t<const HBUINT8> rightClass = StructAfter<const UnsizedArrayOf<HBUINT8>> (leftClass).as_array (glyphCount);
- hb_array_t<const HBUINT8> kernIndex = StructAfter<const UnsizedArrayOf<HBUINT8>> (rightClass).as_array (leftClassCount * rightClassCount);
-
- unsigned int leftC = leftClass[left];
- unsigned int rightC = rightClass[right];
- if (unlikely (leftC >= leftClassCount || rightC >= rightClassCount))
- return 0;
- unsigned int i = leftC * rightClassCount + rightC;
- return kernValue[kernIndex[i]];
- }
-
- bool apply (AAT::hb_aat_apply_context_t *c) const
- {
- TRACE_APPLY (this);
-
- if (!c->plan->requested_kerning)
- return false;
-
- if (header.coverage & header.Backwards)
- return false;
-
- hb_kern_machine_t<KernSubTableFormat3> machine (*this, header.coverage & header.CrossStream);
- machine.kern (c->font, c->buffer, c->plan->kern_mask);
-
- return_trace (true);
- }
-
- bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) &&
- c->check_range (kernValueZ,
- kernValueCount * sizeof (FWORD) +
- glyphCount * 2 +
- leftClassCount * rightClassCount));
- }
-
- protected:
- KernSubTableHeader
- header;
- HBUINT16 glyphCount; /* The number of glyphs in this font. */
- HBUINT8 kernValueCount; /* The number of kerning values. */
- HBUINT8 leftClassCount; /* The number of left-hand classes. */
- HBUINT8 rightClassCount;/* The number of right-hand classes. */
- HBUINT8 flags; /* Set to zero (reserved for future use). */
- UnsizedArrayOf<FWORD>
- kernValueZ; /* The kerning values.
- * Length kernValueCount. */
-#if 0
- UnsizedArrayOf<HBUINT8>
- leftClass; /* The left-hand classes.
- * Length glyphCount. */
- UnsizedArrayOf<HBUINT8>
- rightClass; /* The right-hand classes.
- * Length glyphCount. */
- UnsizedArrayOf<HBUINT8>kernIndex;
- /* The indices into the kernValue array.
- * Length leftClassCount * rightClassCount */
-#endif
- public:
- DEFINE_SIZE_ARRAY (KernSubTableHeader::static_size + 6, kernValueZ);
-};
-
-template <typename KernSubTableHeader>
-struct KernSubTable
-{
- unsigned int get_size () const { return u.header.length; }
- unsigned int get_type () const { return u.header.format; }
-
- int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
- {
- switch (get_type ()) {
- /* This method hooks up to hb_font_t's get_h_kerning. Only support Format0. */
- case 0: return u.format0.get_kerning (left, right);
- default:return 0;
- }
- }
-
- template <typename context_t, typename ...Ts>
- typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
- {
- unsigned int subtable_type = get_type ();
- TRACE_DISPATCH (this, subtable_type);
- switch (subtable_type) {
- case 0: return_trace (c->dispatch (u.format0));
-#ifndef HB_NO_AAT_SHAPE
- case 1: return_trace (u.header.apple ? c->dispatch (u.format1, hb_forward<Ts> (ds)...) : c->default_return_value ());
-#endif
- case 2: return_trace (c->dispatch (u.format2));
-#ifndef HB_NO_AAT_SHAPE
- case 3: return_trace (u.header.apple ? c->dispatch (u.format3, hb_forward<Ts> (ds)...) : c->default_return_value ());
-#endif
- default: return_trace (c->default_return_value ());
- }
- }
-
- bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- if (unlikely (!u.header.sanitize (c) ||
- u.header.length < u.header.min_size ||
- !c->check_range (this, u.header.length))) return_trace (false);
-
- return_trace (dispatch (c));
- }
-
- public:
- union {
- KernSubTableHeader header;
- AAT::KerxSubTableFormat0<KernSubTableHeader> format0;
- AAT::KerxSubTableFormat1<KernSubTableHeader> format1;
- AAT::KerxSubTableFormat2<KernSubTableHeader> format2;
- KernSubTableFormat3<KernSubTableHeader> format3;
- } u;
- public:
- DEFINE_SIZE_MIN (KernSubTableHeader::static_size);
-};
-
-
-struct KernOTSubTableHeader
-{
- static constexpr bool apple = false;
- typedef AAT::ObsoleteTypes Types;
-
- unsigned tuple_count () const { return 0; }
- bool is_horizontal () const { return (coverage & Horizontal); }
-
- enum Coverage
- {
- Horizontal = 0x01u,
- Minimum = 0x02u,
- CrossStream = 0x04u,
- Override = 0x08u,
-
- /* Not supported: */
- Backwards = 0x00u,
- Variation = 0x00u,
- };
-
- bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- return_trace (c->check_struct (this));
- }
-
- public:
- HBUINT16 versionZ; /* Unused. */
- HBUINT16 length; /* Length of the subtable (including this header). */
- HBUINT8 format; /* Subtable format. */
- HBUINT8 coverage; /* Coverage bits. */
- public:
- DEFINE_SIZE_STATIC (6);
-};
-
-struct KernOT : AAT::KerxTable<KernOT>
-{
- friend struct AAT::KerxTable<KernOT>;
-
- static constexpr hb_tag_t tableTag = HB_OT_TAG_kern;
- static constexpr unsigned minVersion = 0u;
-
- typedef KernOTSubTableHeader SubTableHeader;
- typedef SubTableHeader::Types Types;
- typedef KernSubTable<SubTableHeader> SubTable;
-
- protected:
- HBUINT16 version; /* Version--0x0000u */
- HBUINT16 tableCount; /* Number of subtables in the kerning table. */
- SubTable firstSubTable; /* Subtables. */
- public:
- DEFINE_SIZE_MIN (4);
-};
-
-
-struct KernAATSubTableHeader
-{
- static constexpr bool apple = true;
- typedef AAT::ObsoleteTypes Types;
-
- unsigned tuple_count () const { return 0; }
- bool is_horizontal () const { return !(coverage & Vertical); }
-
- enum Coverage
- {
- Vertical = 0x80u,
- CrossStream = 0x40u,
- Variation = 0x20u,
-
- /* Not supported: */
- Backwards = 0x00u,
- };
-
- bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- return_trace (c->check_struct (this));
- }
-
- public:
- HBUINT32 length; /* Length of the subtable (including this header). */
- HBUINT8 coverage; /* Coverage bits. */
- HBUINT8 format; /* Subtable format. */
- HBUINT16 tupleIndex; /* The tuple index (used for variations fonts).
- * This value specifies which tuple this subtable covers.
- * Note: We don't implement. */
- public:
- DEFINE_SIZE_STATIC (8);
-};
-
-struct KernAAT : AAT::KerxTable<KernAAT>
-{
- friend struct AAT::KerxTable<KernAAT>;
-
- static constexpr hb_tag_t tableTag = HB_OT_TAG_kern;
- static constexpr unsigned minVersion = 0x00010000u;
-
- typedef KernAATSubTableHeader SubTableHeader;
- typedef SubTableHeader::Types Types;
- typedef KernSubTable<SubTableHeader> SubTable;
-
- protected:
- HBUINT32 version; /* Version--0x00010000u */
- HBUINT32 tableCount; /* Number of subtables in the kerning table. */
- SubTable firstSubTable; /* Subtables. */
- public:
- DEFINE_SIZE_MIN (8);
-};
-
-struct kern
-{
- static constexpr hb_tag_t tableTag = HB_OT_TAG_kern;
-
- bool has_data () const { return u.version32; }
- unsigned get_type () const { return u.major; }
-
- bool has_state_machine () const
- {
- switch (get_type ()) {
- case 0: return u.ot.has_state_machine ();
-#ifndef HB_NO_AAT_SHAPE
- case 1: return u.aat.has_state_machine ();
-#endif
- default:return false;
- }
- }
-
- bool has_cross_stream () const
- {
- switch (get_type ()) {
- case 0: return u.ot.has_cross_stream ();
-#ifndef HB_NO_AAT_SHAPE
- case 1: return u.aat.has_cross_stream ();
-#endif
- default:return false;
- }
- }
-
- int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
- {
- switch (get_type ()) {
- case 0: return u.ot.get_h_kerning (left, right);
-#ifndef HB_NO_AAT_SHAPE
- case 1: return u.aat.get_h_kerning (left, right);
-#endif
- default:return 0;
- }
- }
-
- bool apply (AAT::hb_aat_apply_context_t *c) const
- { return dispatch (c); }
-
- template <typename context_t, typename ...Ts>
- typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
- {
- unsigned int subtable_type = get_type ();
- TRACE_DISPATCH (this, subtable_type);
- switch (subtable_type) {
- case 0: return_trace (c->dispatch (u.ot, hb_forward<Ts> (ds)...));
-#ifndef HB_NO_AAT_SHAPE
- case 1: return_trace (c->dispatch (u.aat, hb_forward<Ts> (ds)...));
-#endif
- default: return_trace (c->default_return_value ());
- }
- }
-
- bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- if (!u.version32.sanitize (c)) return_trace (false);
- return_trace (dispatch (c));
- }
-
- protected:
- union {
- HBUINT32 version32;
- HBUINT16 major;
- KernOT ot;
-#ifndef HB_NO_AAT_SHAPE
- KernAAT aat;
-#endif
- } u;
- public:
- DEFINE_SIZE_UNION (4, version32);
-};
-
-} /* namespace OT */
-
-
-#endif /* HB_OT_KERN_TABLE_HH */