docs/harfbuzz-sections.txt  |    2 ++
 src/hb-buffer.h             |    2 ++
 src/hb-dsalgs.hh            |    6 ++++++
 src/hb-ot-var-fvar-table.hh |   37 ++++++++++++++++++++++---------------
 src/hb-ot-var.cc            |   12 ++++++++++++
 src/hb-ot-var.h             |   15 ++++++++++++++-
 6 files changed, 58 insertions(+), 16 deletions(-)

New commits:
commit 56c9238d3da8c034336cf80ba37e03e33c493718
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Nov 19 13:09:53 2018 -0500

    [fvar] Rewrite sanitize

diff --git a/src/hb-ot-var-fvar-table.hh b/src/hb-ot-var-fvar-table.hh
index b4fdd5fa..99d2fd5c 100644
--- a/src/hb-ot-var-fvar-table.hh
+++ b/src/hb-ot-var-fvar-table.hh
@@ -101,12 +101,10 @@ struct fvar
     return_trace (version.sanitize (c) &&
                  likely (version.major == 1) &&
                  c->check_struct (this) &&
+                 axisSize == 20 && /* Assumed in our code. */
                  instanceSize >= axisCount * 4 + 4 &&
-                 axisSize <= 1024 && /* Arbitrary, just to simplify overflow 
checks. */
-                 instanceSize <= 1024 && /* Arbitrary, just to simplify 
overflow checks. */
-                 c->check_range (this, firstAxis) &&
-                 c->check_range (&StructAtOffset<char> (this, firstAxis),
-                                 axisCount * axisSize + instanceCount * 
instanceSize));
+                 get_axes ().sanitize (c) &&
+                 c->check_range (get_first_instance (), instanceCount, 
instanceSize));
   }
 
   inline unsigned int get_axis_count (void) const
commit 4a6a692e3ea4fab632a0162c6d513dc151054d8f
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Nov 19 13:04:43 2018 -0500

    [fvar] Use hb_array_t for axes

diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh
index 7a207f5d..8e59fdee 100644
--- a/src/hb-dsalgs.hh
+++ b/src/hb-dsalgs.hh
@@ -573,6 +573,10 @@ struct hb_array_t
 
   inline unsigned int get_size (void) const { return len * sizeof (Type); }
 
+  template <typename hb_sanitize_context_t>
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  { return c->check_array (arrayZ, len); }
+
   template <typename T> inline operator  T * (void) const { return arrayZ; }
 
   inline Type * operator & (void) const { return arrayZ; }
@@ -598,6 +602,8 @@ struct hb_array_t
   Type *arrayZ;
   unsigned int len;
 };
+template <typename T>
+hb_array_t<T> hb_array (T *array, unsigned int len) { return hb_array_t<T> 
(array, len); }
 
 
 struct HbOpOr
diff --git a/src/hb-ot-var-fvar-table.hh b/src/hb-ot-var-fvar-table.hh
index 66618a5a..b4fdd5fa 100644
--- a/src/hb-ot-var-fvar-table.hh
+++ b/src/hb-ot-var-fvar-table.hh
@@ -114,9 +114,6 @@ struct fvar
 
   inline bool get_axis (unsigned int index, hb_ot_var_axis_t *info) const
   {
-    if (unlikely (index >= axisCount))
-      return false;
-
     if (info)
     {
       const AxisRecord &axis = get_axes ()[index];
@@ -133,9 +130,6 @@ struct fvar
 
   inline hb_ot_var_axis_flags_t get_axis_flags (unsigned int index) const
   {
-    if (unlikely (index >= axisCount))
-      return (hb_ot_var_axis_flags_t) 0;
-
     const AxisRecord &axis = get_axes ()[index];
     return (hb_ot_var_axis_flags_t) (unsigned int) axis.flags;
   }
@@ -195,11 +189,11 @@ struct fvar
   }
 
   protected:
-  inline const AxisRecord * get_axes (void) const
-  { return &(this+firstAxis); }
+  inline hb_array_t<const AxisRecord> get_axes (void) const
+  { return hb_array (&(this+firstAxis), axisCount); }
 
-  inline const InstanceRecord * get_instances (void) const
-  { return &StructAtOffset<InstanceRecord> (get_axes () + axisCount, 0); }
+  inline const InstanceRecord * get_first_instance (void) const
+  { return &StructAfter<InstanceRecord> (get_axes ()); }
 
   protected:
   FixedVersion<>version;       /* Version of the fvar table
commit e0097396010c40cf62641cd12ceb12dd5d79c9c7
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Nov 19 12:53:53 2018 -0500

    [fvar] Minor

diff --git a/src/hb-ot-var-fvar-table.hh b/src/hb-ot-var-fvar-table.hh
index 3c8a3da4..66618a5a 100644
--- a/src/hb-ot-var-fvar-table.hh
+++ b/src/hb-ot-var-fvar-table.hh
@@ -104,8 +104,8 @@ struct fvar
                  instanceSize >= axisCount * 4 + 4 &&
                  axisSize <= 1024 && /* Arbitrary, just to simplify overflow 
checks. */
                  instanceSize <= 1024 && /* Arbitrary, just to simplify 
overflow checks. */
-                 c->check_range (this, things) &&
-                 c->check_range (&StructAtOffset<char> (this, things),
+                 c->check_range (this, firstAxis) &&
+                 c->check_range (&StructAtOffset<char> (this, firstAxis),
                                  axisCount * axisSize + instanceCount * 
instanceSize));
   }
 
@@ -196,7 +196,7 @@ struct fvar
 
   protected:
   inline const AxisRecord * get_axes (void) const
-  { return &StructAtOffset<AxisRecord> (this, things); }
+  { return &(this+firstAxis); }
 
   inline const InstanceRecord * get_instances (void) const
   { return &StructAtOffset<InstanceRecord> (get_axes () + axisCount, 0); }
@@ -204,7 +204,8 @@ struct fvar
   protected:
   FixedVersion<>version;       /* Version of the fvar table
                                 * initially set to 0x00010000u */
-  Offset16     things;         /* Offset in bytes from the beginning of the 
table
+  OffsetTo<AxisRecord>
+               firstAxis;      /* Offset in bytes from the beginning of the 
table
                                 * to the start of the AxisRecord array. */
   HBUINT16     reserved;       /* This field is permanently reserved. Set to 
2. */
   HBUINT16     axisCount;      /* The number of variation axes in the font (the
commit 1a2eb108b857de9c5e84cc5de0c12c7657e04498
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Nov 19 12:36:56 2018 -0500

    [ot-var] Add hb_ot_var_axis_get_flags()
    
    Part of https://github.com/harfbuzz/harfbuzz/issues/1241
    
    New API:
    +hb_ot_var_axis_flags_t
    +hb_ot_var_axis_get_flags

diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt
index 6a498e94..63594cfc 100644
--- a/docs/harfbuzz-sections.txt
+++ b/docs/harfbuzz-sections.txt
@@ -587,6 +587,8 @@ hb_ot_var_has_data
 hb_ot_var_find_axis
 hb_ot_var_get_axis_count
 hb_ot_var_get_axes
+hb_ot_var_axis_flags_t
+hb_ot_var_axis_get_flags
 hb_ot_var_normalize_variations
 hb_ot_var_normalize_coords
 </SECTION>
diff --git a/src/hb-buffer.h b/src/hb-buffer.h
index 99e01716..f989d25d 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -90,6 +90,8 @@ typedef struct hb_glyph_info_t
  *                                the reshaping to a small piece around the
  *                                breaking point only.
  * @HB_GLYPH_FLAG_DEFINED: All the currently defined flags.
+ *
+ * Since: 1.5.0
  */
 typedef enum { /*< flags >*/
   HB_GLYPH_FLAG_UNSAFE_TO_BREAK                = 0x00000001,
diff --git a/src/hb-ot-var-fvar-table.hh b/src/hb-ot-var-fvar-table.hh
index 659eb1b6..3c8a3da4 100644
--- a/src/hb-ot-var-fvar-table.hh
+++ b/src/hb-ot-var-fvar-table.hh
@@ -131,6 +131,15 @@ struct fvar
     return true;
   }
 
+  inline hb_ot_var_axis_flags_t get_axis_flags (unsigned int index) const
+  {
+    if (unlikely (index >= axisCount))
+      return (hb_ot_var_axis_flags_t) 0;
+
+    const AxisRecord &axis = get_axes ()[index];
+    return (hb_ot_var_axis_flags_t) (unsigned int) axis.flags;
+  }
+
   inline unsigned int get_axis_infos (unsigned int      start_offset,
                                      unsigned int     *axes_count /* IN/OUT */,
                                      hb_ot_var_axis_t *axes_array /* OUT */) 
const
diff --git a/src/hb-ot-var.cc b/src/hb-ot-var.cc
index c97e9c49..14c73cfd 100644
--- a/src/hb-ot-var.cc
+++ b/src/hb-ot-var.cc
@@ -104,6 +104,18 @@ hb_ot_var_find_axis (hb_face_t        *face,
   return face->table.fvar->find_axis (axis_tag, axis_index, axis_info);
 }
 
+/**
+ * hb_ot_var_axis_get_flags:
+ *
+ * Since: REPLACEME
+ **/
+hb_ot_var_axis_flags_t
+hb_ot_var_axis_get_flags (hb_face_t    *face,
+                         unsigned int  axis_index)
+{
+  return face->table.fvar->get_axis_flags (axis_index);
+}
+
 
 /**
  * hb_ot_var_normalize_variations:
diff --git a/src/hb-ot-var.h b/src/hb-ot-var.h
index 0c0f61dd..d535a078 100644
--- a/src/hb-ot-var.h
+++ b/src/hb-ot-var.h
@@ -85,6 +85,19 @@ hb_ot_var_find_axis (hb_face_t        *face,
                     unsigned int     *axis_index,
                     hb_ot_var_axis_t *axis_info);
 
+/**
+ * hb_ot_var_axis_flags_t:
+ * @HB_OT_VAR_AXIS_FLAG_HIDDEN: The axis should not be exposed directly in 
user interfaces.
+ *
+ * Since: REPLACEME
+ */
+typedef enum { /*< flags >*/
+  HB_OT_VAR_AXIS_FLAG_HIDDEN   = 0x0001u,
+} hb_ot_var_axis_flags_t;
+
+HB_EXTERN hb_ot_var_axis_flags_t
+hb_ot_var_axis_get_flags (hb_face_t    *face,
+                         unsigned int  axis_index);
 
 HB_EXTERN void
 hb_ot_var_normalize_variations (hb_face_t            *face,
commit bd6b2ba1d3910cc259db7abeb6c9bd7ed9494857
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Nov 19 11:34:56 2018 -0500

    [ot-var] Add flags
    
    Unfortunate that we don't have room in hb_ot_var_axis_t to expose flags :(.

diff --git a/src/hb-ot-var-fvar-table.hh b/src/hb-ot-var-fvar-table.hh
index 6d229c38..659eb1b6 100644
--- a/src/hb-ot-var-fvar-table.hh
+++ b/src/hb-ot-var-fvar-table.hh
@@ -52,7 +52,7 @@ struct InstanceRecord
   protected:
   NameID       subfamilyNameID;/* The name ID for entries in the 'name' table
                                 * that provide subfamily names for this 
instance. */
-  HBUINT16     reserved;       /* Reserved for future use — set to 0. */
+  HBUINT16     flags;          /* Reserved for future use — set to 0. */
   UnsizedArrayOf<Fixed>
                coordinatesZ;   /* The coordinates array for this instance. */
   //NameID     postScriptNameIDX;/*Optional. The name ID for entries in the 
'name'
@@ -65,6 +65,11 @@ struct InstanceRecord
 
 struct AxisRecord
 {
+  enum
+  {
+    AXIS_FLAG_HIDDEN   = 0x0001,
+  };
+
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -76,7 +81,7 @@ struct AxisRecord
   Fixed                minValue;       /* The minimum coordinate value for the 
axis. */
   Fixed                defaultValue;   /* The default coordinate value for the 
axis. */
   Fixed                maxValue;       /* The maximum coordinate value for the 
axis. */
-  HBUINT16     reserved;       /* Reserved for future use — set to 0. */
+  HBUINT16     flags;          /* Axis flags. */
   NameID       axisNameID;     /* The name ID for entries in the 'name' table 
that
                                 * provide a display name for this axis. */
 
commit c076c7b85ce4d069ae8b2b04143aca4c4f052ae9
Author: Behdad Esfahbod <[email protected]>
Date:   Mon Nov 19 11:30:40 2018 -0500

    [ot-var] Use hb_ot_name_id_t

diff --git a/src/hb-ot-var.h b/src/hb-ot-var.h
index a2c0c5f2..0c0f61dd 100644
--- a/src/hb-ot-var.h
+++ b/src/hb-ot-var.h
@@ -54,7 +54,7 @@ HB_BEGIN_DECLS
  */
 typedef struct hb_ot_var_axis_t {
   hb_tag_t tag;
-  unsigned int name_id;
+  hb_ot_name_id_t name_id;
   float min_value;
   float default_value;
   float max_value;
_______________________________________________
HarfBuzz mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to