Revert "Synthesize GDEF glyph class for any glyph that does not have one in GDEF"
This reverts commit 69f9fbc420
.
See https://github.com/behdad/harfbuzz/issues/347#issuecomment-268873401
Fixes https://github.com/behdad/harfbuzz/issues/347
This commit is contained in:
parent
4b4a1b9f23
commit
1a0f4aa6df
|
@ -1321,28 +1321,10 @@ GSUB::substitute_start (hb_font_t *font, hb_buffer_t *buffer)
|
|||
|
||||
const GDEF &gdef = *hb_ot_layout_from_face (font->face)->gdef;
|
||||
unsigned int count = buffer->len;
|
||||
hb_glyph_info_t *info = buffer->info;
|
||||
for (unsigned int i = 0; i < count; i++)
|
||||
{
|
||||
unsigned int props = gdef.get_glyph_props (info[i].codepoint);
|
||||
if (!props)
|
||||
{
|
||||
/* Never mark default-ignorables as marks.
|
||||
* They won't get in the way of lookups anyway,
|
||||
* but having them as mark will cause them to be skipped
|
||||
* over if the lookup-flag says so, but at least for the
|
||||
* Mongolian variation selectors, looks like Uniscribe
|
||||
* marks them as non-mark. Some Mongolian fonts without
|
||||
* GDEF rely on this. Another notable character that
|
||||
* this applies to is COMBINING GRAPHEME JOINER. */
|
||||
props = (_hb_glyph_info_get_general_category (&info[i]) !=
|
||||
HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ||
|
||||
_hb_glyph_info_is_default_ignorable (&info[i])) ?
|
||||
HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH :
|
||||
HB_OT_LAYOUT_GLYPH_PROPS_MARK;
|
||||
}
|
||||
_hb_glyph_info_set_glyph_props (&info[i], props);
|
||||
_hb_glyph_info_clear_lig_props (&info[i]);
|
||||
_hb_glyph_info_set_glyph_props (&buffer->info[i], gdef.get_glyph_props (buffer->info[i].codepoint));
|
||||
_hb_glyph_info_clear_lig_props (&buffer->info[i]);
|
||||
buffer->info[i].syllable() = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -529,6 +529,32 @@ hb_ot_map_glyphs_fast (hb_buffer_t *buffer)
|
|||
buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
|
||||
}
|
||||
|
||||
static inline void
|
||||
hb_synthesize_glyph_classes (hb_ot_shape_context_t *c)
|
||||
{
|
||||
unsigned int count = c->buffer->len;
|
||||
hb_glyph_info_t *info = c->buffer->info;
|
||||
for (unsigned int i = 0; i < count; i++)
|
||||
{
|
||||
hb_ot_layout_glyph_props_flags_t klass;
|
||||
|
||||
/* Never mark default-ignorables as marks.
|
||||
* They won't get in the way of lookups anyway,
|
||||
* but having them as mark will cause them to be skipped
|
||||
* over if the lookup-flag says so, but at least for the
|
||||
* Mongolian variation selectors, looks like Uniscribe
|
||||
* marks them as non-mark. Some Mongolian fonts without
|
||||
* GDEF rely on this. Another notable character that
|
||||
* this applies to is COMBINING GRAPHEME JOINER. */
|
||||
klass = (_hb_glyph_info_get_general_category (&info[i]) !=
|
||||
HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ||
|
||||
_hb_glyph_info_is_default_ignorable (&info[i])) ?
|
||||
HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH :
|
||||
HB_OT_LAYOUT_GLYPH_PROPS_MARK;
|
||||
_hb_glyph_info_set_glyph_props (&info[i], klass);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
hb_ot_substitute_default (hb_ot_shape_context_t *c)
|
||||
{
|
||||
|
@ -560,6 +586,9 @@ hb_ot_substitute_complex (hb_ot_shape_context_t *c)
|
|||
|
||||
hb_ot_layout_substitute_start (c->font, buffer);
|
||||
|
||||
if (!hb_ot_layout_has_glyph_classes (c->face))
|
||||
hb_synthesize_glyph_classes (c);
|
||||
|
||||
c->plan->substitute (c->font, buffer);
|
||||
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue