summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2009-08-04 02:27:37 -0400
committerBehdad Esfahbod <behdad@behdad.org>2009-08-04 02:27:37 -0400
commit477a991e5e89462fc186cc1d797af7d05ee9fd89 (patch)
treea7ce022f73f5757630ef000f324535d3fb1d199b
parent8c48985195d3b1cafb7852f2d70b9d82a01d1d78 (diff)
downloadpango-477a991e5e89462fc186cc1d797af7d05ee9fd89.tar.gz
[HB] Finish GSUB sanitize()
-rw-r--r--pango/opentype/hb-ot-layout-gsub-private.hh21
1 files changed, 20 insertions, 1 deletions
diff --git a/pango/opentype/hb-ot-layout-gsub-private.hh b/pango/opentype/hb-ot-layout-gsub-private.hh
index af58a1fe..3e6c7e5b 100644
--- a/pango/opentype/hb-ot-layout-gsub-private.hh
+++ b/pango/opentype/hb-ot-layout-gsub-private.hh
@@ -721,6 +721,8 @@ struct SubstLookup : Lookup
{
inline const SubstLookupSubTable& get_subtable (unsigned int i) const
{ return (const SubstLookupSubTable&) Lookup::get_subtable (i); }
+ inline SubstLookupSubTable& get_subtable (unsigned int i)
+ { return (SubstLookupSubTable&) Lookup::get_subtable (i); }
/* Like get_type(), but looks through extension lookups.
* Never returns Extension */
@@ -757,7 +759,8 @@ struct SubstLookup : Lookup
if (!_hb_ot_layout_check_glyph_property (context->face, IN_CURINFO (), lookup_flag, &property))
return false;
- for (unsigned int i = 0; i < get_subtable_count (); i++)
+ unsigned int count = get_subtable_count ();
+ for (unsigned int i = 0; i < count; i++)
if (get_subtable (i).apply (APPLY_ARG, lookup_type))
return true;
@@ -810,9 +813,17 @@ struct SubstLookup : Lookup
return ret;
}
+
+ inline bool sanitize (SANITIZE_ARG_DEF) {
+ if (Lookup::sanitize (SANITIZE_ARG)) return false;
+ OffsetArrayOf<SubstLookupSubTable> &list = (OffsetArrayOf<SubstLookupSubTable> &) subTable;
+ return SANITIZE_THIS (list);
+ }
};
ASSERT_SIZE (SubstLookup, 6);
+typedef OffsetListOf<SubstLookup> SubstLookupList;
+ASSERT_SIZE (SubstLookupList, 2);
/*
* GSUB
@@ -827,6 +838,8 @@ struct GSUB : GSUBGPOS
inline const SubstLookup& get_lookup (unsigned int i) const
{ return (const SubstLookup&) GSUBGPOS::get_lookup (i); }
+ inline SubstLookup& get_lookup (unsigned int i)
+ { return (SubstLookup&) GSUBGPOS::get_lookup (i); }
inline bool substitute_lookup (hb_ot_layout_context_t *context,
hb_buffer_t *buffer,
@@ -834,6 +847,12 @@ struct GSUB : GSUBGPOS
hb_ot_layout_feature_mask_t mask) const
{ return get_lookup (lookup_index).apply_string (context, buffer, mask); }
+
+ inline bool sanitize (SANITIZE_ARG_DEF) {
+ if (GSUBGPOS::sanitize (SANITIZE_ARG)) return false;
+ OffsetTo<SubstLookupList> &list = (OffsetTo<SubstLookupList> &) lookupList;
+ return SANITIZE_THIS (list);
+ }
};
ASSERT_SIZE (GSUB, 10);