[GDEF] Support MarkFilteringSets
This commit is contained in:
parent
5130c35e93
commit
1246e41021
|
@ -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,
|
||||||
* 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)
|
||||||
|
{
|
||||||
|
/* If using mark filtering sets, the high short of
|
||||||
|
* lookup_flags hsa the set index.
|
||||||
|
*/
|
||||||
|
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
|
* "ignore marks of attachment type different than
|
||||||
* the attachment type specified."
|
* the attachment type specified."
|
||||||
*/
|
*/
|
||||||
desired_attachment_class = lookup_flags & LookupFlag::MarkAttachmentType;
|
if (lookup_flags & LookupFlag::MarkAttachmentType && *property & LookupFlag::MarkAttachmentType)
|
||||||
if (desired_attachment_class)
|
return (lookup_flags & LookupFlag::MarkAttachmentType) == (*property & LookupFlag::MarkAttachmentType);
|
||||||
{
|
|
||||||
if (basic_glyph_class == HB_OT_LAYOUT_GLYPH_CLASS_MARK &&
|
|
||||||
*property != desired_attachment_class)
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue