| Index: third_party/harfbuzz-ng/src/hb-ot-shape.cc
|
| ===================================================================
|
| --- third_party/harfbuzz-ng/src/hb-ot-shape.cc (리비전 201894)
|
| +++ third_party/harfbuzz-ng/src/hb-ot-shape.cc (작업 사본)
|
| @@ -401,6 +401,30 @@
|
| /* Position */
|
|
|
| static inline void
|
| +zero_mark_widths_by_unicode (hb_buffer_t *buffer)
|
| +{
|
| + unsigned int count = buffer->len;
|
| + for (unsigned int i = 0; i < count; i++)
|
| + if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
|
| + {
|
| + buffer->pos[i].x_advance = 0;
|
| + buffer->pos[i].y_advance = 0;
|
| + }
|
| +}
|
| +
|
| +static inline void
|
| +zero_mark_widths_by_gdef (hb_buffer_t *buffer)
|
| +{
|
| + unsigned int count = buffer->len;
|
| + for (unsigned int i = 0; i < count; i++)
|
| + if ((buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
|
| + {
|
| + buffer->pos[i].x_advance = 0;
|
| + buffer->pos[i].y_advance = 0;
|
| + }
|
| +}
|
| +
|
| +static inline void
|
| hb_ot_position_default (hb_ot_shape_context_t *c)
|
| {
|
| hb_ot_layout_position_start (c->font, c->buffer);
|
| @@ -419,22 +443,22 @@
|
|
|
| }
|
|
|
| - /* Zero'ing mark widths by GDEF (as used in Myanmar spec) happens
|
| - * *before* GPOS. */
|
| switch (c->plan->shaper->zero_width_marks)
|
| {
|
| - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF:
|
| - for (unsigned int i = 0; i < count; i++)
|
| - if ((c->buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
|
| - {
|
| - c->buffer->pos[i].x_advance = 0;
|
| - c->buffer->pos[i].y_advance = 0;
|
| - }
|
| + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
|
| + zero_mark_widths_by_gdef (c->buffer);
|
| break;
|
|
|
| + /* Not currently used for any shaper:
|
| + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY:
|
| + zero_mark_widths_by_unicode (c->buffer);
|
| + break;
|
| + */
|
| +
|
| default:
|
| case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
|
| - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE:
|
| + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE:
|
| + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
|
| break;
|
| }
|
| }
|
| @@ -468,22 +492,20 @@
|
| ret = true;
|
| }
|
|
|
| - /* Zero'ing mark widths by Unicode happens
|
| - * *after* GPOS. */
|
| switch (c->plan->shaper->zero_width_marks)
|
| {
|
| - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE:
|
| - for (unsigned int i = 0; i < count; i++)
|
| - if (_hb_glyph_info_get_general_category (&c->buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
|
| - {
|
| - c->buffer->pos[i].x_advance = 0;
|
| - c->buffer->pos[i].y_advance = 0;
|
| - }
|
| + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE:
|
| + zero_mark_widths_by_unicode (c->buffer);
|
| break;
|
|
|
| + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
|
| + zero_mark_widths_by_gdef (c->buffer);
|
| + break;
|
| +
|
| default:
|
| case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
|
| - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF:
|
| + //case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY:
|
| + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
|
| break;
|
| }
|
|
|
|
|