[OT] Synthesize glyph classes

This commit is contained in:
Behdad Esfahbod 2012-07-31 22:48:38 -04:00
parent 03b09214c0
commit 5fecd8b035
2 changed files with 18 additions and 4 deletions

2
TODO
View File

@ -25,8 +25,6 @@ General fixes:
- Convert NBSP into space glyph. - Convert NBSP into space glyph.
- Synthetic GDEF.
- Add Pango backend? - Add Pango backend?
- Add ICUlayout backend? - Add ICUlayout backend?

View File

@ -350,14 +350,30 @@ hb_substitute_default (hb_ot_shape_context_t *c)
hb_map_glyphs (c->font, c->buffer); hb_map_glyphs (c->font, c->buffer);
} }
static void
hb_synthesize_glyph_classes (hb_ot_shape_context_t *c)
{
unsigned int count = c->buffer->len;
for (unsigned int i = 0; i < count; i++)
c->buffer->info[i].glyph_props() = FLAG (_hb_glyph_info_get_general_category (&c->buffer->info[i])) &
(FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) |
FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)) ?
HB_OT_LAYOUT_GLYPH_CLASS_MARK :
HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH;
}
static void static void
hb_ot_substitute_complex (hb_ot_shape_context_t *c) hb_ot_substitute_complex (hb_ot_shape_context_t *c)
{ {
hb_ot_layout_substitute_start (c->face, c->buffer); hb_ot_layout_substitute_start (c->face, c->buffer);
if (hb_ot_layout_has_substitution (c->face)) { if (!hb_ot_layout_has_glyph_classes (c->face))
hb_synthesize_glyph_classes (c);
if (hb_ot_layout_has_substitution (c->face))
c->plan->map.substitute (c->face, c->buffer); c->plan->map.substitute (c->face, c->buffer);
}
hb_ot_layout_substitute_finish (c->face, c->buffer); hb_ot_layout_substitute_finish (c->face, c->buffer);