From 4a2d844c2f12dc1b858ab4ddd737ded7c0852221 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 3 Nov 2010 15:28:56 -0400 Subject: [PATCH] Minor code shuffling --- src/hb-ot-layout-private.hh | 21 ++-------- src/hb-ot-layout.cc | 79 +++++++++++++++++++++++++------------ 2 files changed, 57 insertions(+), 43 deletions(-) diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh index dddbb604e..4d8a855ca 100644 --- a/src/hb-ot-layout-private.hh +++ b/src/hb-ot-layout-private.hh @@ -99,28 +99,13 @@ HB_INTERNAL hb_bool_t _hb_ot_layout_check_glyph_property (hb_face_t *face, hb_glyph_info_t *ginfo, unsigned int lookup_props, - unsigned int *property); + unsigned int *property_out); -static inline hb_bool_t +HB_INTERNAL hb_bool_t _hb_ot_layout_skip_mark (hb_face_t *face, hb_glyph_info_t *ginfo, unsigned int lookup_props, - unsigned int *property_out) -{ - unsigned int property; - - property = _hb_ot_layout_get_glyph_property (face, ginfo); - if (property_out) - *property_out = property; - - /* If it's a mark, skip it we don't accept it. */ - if (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK) - return !_hb_ot_layout_check_glyph_property (face, ginfo, lookup_props, NULL); - - /* If not a mark, don't skip. */ - return false; -} - + unsigned int *property_out); HB_END_DECLS diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 755b48375..fc4b1d323 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -115,6 +115,37 @@ _hb_ot_layout_get_glyph_property (hb_face_t *face, return info->props_cache(); } +static hb_bool_t +_hb_ot_layout_match_properties (hb_face_t *face, + hb_codepoint_t codepoint, + unsigned int glyph_props, + unsigned int lookup_props) +{ + /* Not covered, if, for example, glyph class is ligature and + * lookup_props includes LookupFlags::IgnoreLigatures + */ + if (glyph_props & lookup_props & LookupFlag::IgnoreFlags) + return false; + + if (glyph_props & HB_OT_LAYOUT_GLYPH_CLASS_MARK) + { + /* If using mark filtering sets, the high short of + * lookup_props has the set index. + */ + if (lookup_props & LookupFlag::UseMarkFilteringSet) + return _get_gdef (face).mark_set_covers (lookup_props >> 16, codepoint); + + /* The second byte of lookup_props has the meaning + * "ignore marks of attachment type different than + * the attachment type specified." + */ + if (lookup_props & LookupFlag::MarkAttachmentType && glyph_props & LookupFlag::MarkAttachmentType) + return (lookup_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType); + } + + return true; +} + hb_bool_t _hb_ot_layout_check_glyph_property (hb_face_t *face, hb_glyph_info_t *ginfo, @@ -124,34 +155,32 @@ _hb_ot_layout_check_glyph_property (hb_face_t *face, unsigned int property; property = _hb_ot_layout_get_glyph_property (face, ginfo); - if (property_out) - *property_out = property; + (void) (property_out && (*property_out = property)); - /* Not covered, if, for example, glyph class is ligature and - * lookup_props includes LookupFlags::IgnoreLigatures - */ - if (property & lookup_props & LookupFlag::IgnoreFlags) - return false; - - if (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK) - { - /* If using mark filtering sets, the high short of - * lookup_props has the set index. - */ - if (lookup_props & LookupFlag::UseMarkFilteringSet) - return _get_gdef (face).mark_set_covers (lookup_props >> 16, ginfo->codepoint); - - /* The second byte of lookup_props has the meaning - * "ignore marks of attachment type different than - * the attachment type specified." - */ - if (lookup_props & LookupFlag::MarkAttachmentType && property & LookupFlag::MarkAttachmentType) - return (lookup_props & LookupFlag::MarkAttachmentType) == (property & LookupFlag::MarkAttachmentType); - } - - return true; + return _hb_ot_layout_match_properties (face, ginfo->codepoint, property, lookup_props); } +hb_bool_t +_hb_ot_layout_skip_mark (hb_face_t *face, + hb_glyph_info_t *ginfo, + unsigned int lookup_props, + unsigned int *property_out) +{ + unsigned int property; + + property = _hb_ot_layout_get_glyph_property (face, ginfo); + (void) (property_out && (*property_out = property)); + + /* If it's a mark, skip it we don't accept it. */ + if (unlikely (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK)) + return !_hb_ot_layout_match_properties (face, ginfo->codepoint, property, lookup_props); + + /* If not a mark, don't skip. */ + return false; +} + + + unsigned int hb_ot_layout_get_attach_points (hb_face_t *face, hb_codepoint_t glyph,