Switch Pango to new, defunt, GPOS
diff --git a/src/hb-ot-layout-gpos-private.h b/src/hb-ot-layout-gpos-private.h index b0b9513..056131b 100644 --- a/src/hb-ot-layout-gpos-private.h +++ b/src/hb-ot-layout-gpos-private.h
@@ -843,16 +843,24 @@ if (HB_UNLIKELY (!buffer->in_length)) return false; - _hb_buffer_clear_positions (buffer); + layout->gpos_info.last = 0xFFFF; /* no last valid glyph for cursive pos. */ + buffer->in_pos = 0; while (buffer->in_pos < buffer->in_length) { - if ((~IN_PROPERTIES (buffer->in_pos) & mask) && - position_once (layout, buffer)) - ret = true; - else - _hb_buffer_next_glyph (buffer); + bool done; + if (~IN_PROPERTIES (buffer->in_pos) & mask) { + done = position_once (layout, buffer); + ret |= done; + } else { + done = false; + /* Contrary to properties defined in GDEF, user-defined properties + will always stop a possible cursive positioning. */ + layout->gpos_info.last = 0xFFFF; + } + if (!done) + buffer->in_pos++; } return ret;
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 46f4555..4bb2eb5 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc
@@ -531,6 +531,19 @@ return layout->gsub->substitute_lookup (layout, buffer, lookup_index, mask); } +/* + * GPOS + */ + +hb_bool_t +hb_ot_layout_position_lookup (hb_ot_layout_t *layout, + hb_buffer_t *buffer, + unsigned int lookup_index, + hb_ot_layout_feature_mask_t mask) +{ + return layout->gpos->position_lookup (layout, buffer, lookup_index, mask); +} + /* TODO dupped, until he old code can be removed */
diff --git a/src/hb-ot-layout.h b/src/hb-ot-layout.h index f6c0c44..f907b65 100644 --- a/src/hb-ot-layout.h +++ b/src/hb-ot-layout.h
@@ -207,6 +207,11 @@ unsigned int lookup_index, hb_ot_layout_feature_mask_t mask); +hb_bool_t +hb_ot_layout_position_lookup (hb_ot_layout_t *layout, + hb_buffer_t *buffer, + unsigned int lookup_index, + hb_ot_layout_feature_mask_t mask);