提交 1246e410 编写于 作者: B Behdad Esfahbod

[GDEF] Support MarkFilteringSets

上级 5130c35e
...@@ -163,7 +163,7 @@ _hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout, ...@@ -163,7 +163,7 @@ _hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout,
unsigned int lookup_flags, unsigned int lookup_flags,
unsigned int *property) unsigned int *property)
{ {
hb_ot_layout_glyph_class_t basic_glyph_class; hb_ot_layout_glyph_class_t glyph_class;
unsigned int desired_attachment_class; unsigned int desired_attachment_class;
if (ginfo->gproperty == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN) if (ginfo->gproperty == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
...@@ -180,29 +180,31 @@ _hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout, ...@@ -180,29 +180,31 @@ _hb_ot_layout_check_glyph_property (hb_ot_layout_t *layout,
* The low byte contains the basic type of the glyph as defined by * The low byte contains the basic type of the glyph as defined by
* the GlyphClassDef table. * the GlyphClassDef table.
*/ */
if (*property & LookupFlag::MarkAttachmentType) glyph_class = (hb_ot_layout_glyph_class_t) *property;
basic_glyph_class = HB_OT_LAYOUT_GLYPH_CLASS_MARK;
else
basic_glyph_class = (hb_ot_layout_glyph_class_t) *property;
/* Not covered, if, for example, basic_glyph_class /* Not covered, if, for example, glyph_class is HB_GDEF_LIGATURE and
* is HB_GDEF_LIGATURE and lookup_flags includes LookupFlags::IgnoreLigatures * lookup_flags includes LookupFlags::IgnoreLigatures
*/ */
if (lookup_flags & basic_glyph_class) if (lookup_flags & glyph_class)
return false; return false;
/* The high byte of lookup_flags has the meaning if (glyph_class & HB_OT_LAYOUT_GLYPH_CLASS_MARK)
* "ignore marks of attachment type different than
* the attachment type specified."
*/
desired_attachment_class = lookup_flags & LookupFlag::MarkAttachmentType;
if (desired_attachment_class)
{ {
if (basic_glyph_class == HB_OT_LAYOUT_GLYPH_CLASS_MARK && /* If using mark filtering sets, the high short of
*property != desired_attachment_class) * lookup_flags hsa the set index.
return false; */
if (lookup_flags & LookupFlag::UseMarkFilteringSet)
return layout->gdef->mark_set_covers (lookup_flags >> 16, ginfo->gindex);
/* The second byte of lookup_flags has the meaning
* "ignore marks of attachment type different than
* the attachment type specified."
*/
if (lookup_flags & LookupFlag::MarkAttachmentType && *property & LookupFlag::MarkAttachmentType)
return (lookup_flags & LookupFlag::MarkAttachmentType) == (*property & LookupFlag::MarkAttachmentType);
} }
return true; return true;
} }
...@@ -210,32 +212,13 @@ HB_INTERNAL void ...@@ -210,32 +212,13 @@ HB_INTERNAL void
_hb_ot_layout_set_glyph_property (hb_ot_layout_t *layout, _hb_ot_layout_set_glyph_property (hb_ot_layout_t *layout,
hb_codepoint_t glyph, hb_codepoint_t glyph,
unsigned int property) unsigned int property)
{ { hb_ot_layout_set_glyph_class (layout, glyph, (hb_ot_layout_glyph_class_t) (property & 0xff)); }
hb_ot_layout_glyph_class_t klass;
if (property & LookupFlag::MarkAttachmentType)
klass = HB_OT_LAYOUT_GLYPH_CLASS_MARK;
else
klass = (hb_ot_layout_glyph_class_t) property;
hb_ot_layout_set_glyph_class (layout, glyph, klass);
}
hb_ot_layout_glyph_class_t hb_ot_layout_glyph_class_t
hb_ot_layout_get_glyph_class (hb_ot_layout_t *layout, hb_ot_layout_get_glyph_class (hb_ot_layout_t *layout,
hb_codepoint_t glyph) hb_codepoint_t glyph)
{ { return (hb_ot_layout_glyph_class_t) (_hb_ot_layout_get_glyph_property (layout, glyph) & 0xff); }
unsigned int property;
hb_ot_layout_class_t klass;
property = _hb_ot_layout_get_glyph_property (layout, glyph);
if (property & LookupFlag::MarkAttachmentType)
return HB_OT_LAYOUT_GLYPH_CLASS_MARK;
return (hb_ot_layout_glyph_class_t) property;
}
void void
hb_ot_layout_set_glyph_class (hb_ot_layout_t *layout, hb_ot_layout_set_glyph_class (hb_ot_layout_t *layout,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册