diff --git a/src/hb-buffer-deserialize-text-glyphs.hh b/src/hb-buffer-deserialize-text-glyphs.hh index fe70b4fc1..940d2432d 100644 --- a/src/hb-buffer-deserialize-text-glyphs.hh +++ b/src/hb-buffer-deserialize-text-glyphs.hh @@ -32,7 +32,7 @@ #include "hb.hh" -#line 36 "hb-buffer-deserialize-text-glyphs.hh" +#line 33 "hb-buffer-deserialize-text-glyphs.hh" static const unsigned char _deserialize_text_glyphs_trans_keys[] = { 0u, 0u, 35u, 124u, 48u, 57u, 93u, 124u, 45u, 57u, 48u, 57u, 35u, 124u, 45u, 57u, 48u, 57u, 35u, 124u, 35u, 124u, 35u, 124u, 48u, 57u, 35u, 124u, 45u, 57u, 48u, 57u, @@ -274,7 +274,7 @@ static const int deserialize_text_glyphs_error = 0; static const int deserialize_text_glyphs_en_main = 25; -#line 99 "hb-buffer-deserialize-text-glyphs.rl" +#line 98 "hb-buffer-deserialize-text-glyphs.rl" static hb_bool_t @@ -294,12 +294,12 @@ _hb_buffer_deserialize_text_glyphs (hb_buffer_t *buffer, hb_glyph_info_t info = {0}; hb_glyph_position_t pos = {0}; -#line 298 "hb-buffer-deserialize-text-glyphs.hh" +#line 291 "hb-buffer-deserialize-text-glyphs.hh" { cs = deserialize_text_glyphs_start; } -#line 303 "hb-buffer-deserialize-text-glyphs.hh" +#line 294 "hb-buffer-deserialize-text-glyphs.hh" { int _slen; int _trans; @@ -325,13 +325,13 @@ _resume: switch ( _deserialize_text_glyphs_trans_actions[_trans] ) { case 2: -#line 51 "hb-buffer-deserialize-text-glyphs.rl" +#line 50 "hb-buffer-deserialize-text-glyphs.rl" { tok = p; } break; case 1: -#line 55 "hb-buffer-deserialize-text-glyphs.rl" +#line 54 "hb-buffer-deserialize-text-glyphs.rl" { /* TODO Unescape delimiters. */ if (!hb_font_glyph_from_string (font, @@ -341,27 +341,27 @@ _resume: } break; case 6: -#line 63 "hb-buffer-deserialize-text-glyphs.rl" +#line 62 "hb-buffer-deserialize-text-glyphs.rl" { if (!parse_uint (tok, p, &info.cluster )) return false; } break; case 7: -#line 64 "hb-buffer-deserialize-text-glyphs.rl" +#line 63 "hb-buffer-deserialize-text-glyphs.rl" { if (!parse_int (tok, p, &pos.x_offset )) return false; } break; case 8: -#line 65 "hb-buffer-deserialize-text-glyphs.rl" +#line 64 "hb-buffer-deserialize-text-glyphs.rl" { if (!parse_int (tok, p, &pos.y_offset )) return false; } break; case 4: -#line 66 "hb-buffer-deserialize-text-glyphs.rl" +#line 65 "hb-buffer-deserialize-text-glyphs.rl" { if (!parse_int (tok, p, &pos.x_advance)) return false; } break; case 5: -#line 67 "hb-buffer-deserialize-text-glyphs.rl" +#line 66 "hb-buffer-deserialize-text-glyphs.rl" { if (!parse_int (tok, p, &pos.y_advance)) return false; } break; case 3: -#line 68 "hb-buffer-deserialize-text-glyphs.rl" +#line 67 "hb-buffer-deserialize-text-glyphs.rl" { if (!parse_uint (tok, p, &info.mask )) return false; } break; case 9: @@ -370,7 +370,7 @@ _resume: hb_memset (&info, 0, sizeof (info)); hb_memset (&pos , 0, sizeof (pos )); } -#line 51 "hb-buffer-deserialize-text-glyphs.rl" +#line 50 "hb-buffer-deserialize-text-glyphs.rl" { tok = p; } @@ -381,11 +381,11 @@ _resume: hb_memset (&info, 0, sizeof (info)); hb_memset (&pos , 0, sizeof (pos )); } -#line 51 "hb-buffer-deserialize-text-glyphs.rl" +#line 50 "hb-buffer-deserialize-text-glyphs.rl" { tok = p; } -#line 55 "hb-buffer-deserialize-text-glyphs.rl" +#line 54 "hb-buffer-deserialize-text-glyphs.rl" { /* TODO Unescape delimiters. */ if (!hb_font_glyph_from_string (font, @@ -397,10 +397,9 @@ _resume: case 12: #line 43 "hb-buffer-deserialize-text-glyphs.rl" { - buffer->add_info (info); + buffer->add_info_and_pos (info, pos); if (unlikely (!buffer->successful)) return false; - buffer->pos[buffer->len - 1] = pos; *end_ptr = p; } #line 38 "hb-buffer-deserialize-text-glyphs.rl" @@ -408,13 +407,13 @@ _resume: hb_memset (&info, 0, sizeof (info)); hb_memset (&pos , 0, sizeof (pos )); } -#line 51 "hb-buffer-deserialize-text-glyphs.rl" +#line 50 "hb-buffer-deserialize-text-glyphs.rl" { tok = p; } break; case 14: -#line 55 "hb-buffer-deserialize-text-glyphs.rl" +#line 54 "hb-buffer-deserialize-text-glyphs.rl" { /* TODO Unescape delimiters. */ if (!hb_font_glyph_from_string (font, @@ -427,7 +426,7 @@ _resume: hb_memset (&info, 0, sizeof (info)); hb_memset (&pos , 0, sizeof (pos )); } -#line 51 "hb-buffer-deserialize-text-glyphs.rl" +#line 50 "hb-buffer-deserialize-text-glyphs.rl" { tok = p; } @@ -435,10 +434,9 @@ _resume: case 13: #line 43 "hb-buffer-deserialize-text-glyphs.rl" { - buffer->add_info (info); + buffer->add_info_and_pos (info, pos); if (unlikely (!buffer->successful)) return false; - buffer->pos[buffer->len - 1] = pos; *end_ptr = p; } #line 38 "hb-buffer-deserialize-text-glyphs.rl" @@ -446,11 +444,11 @@ _resume: hb_memset (&info, 0, sizeof (info)); hb_memset (&pos , 0, sizeof (pos )); } -#line 51 "hb-buffer-deserialize-text-glyphs.rl" +#line 50 "hb-buffer-deserialize-text-glyphs.rl" { tok = p; } -#line 55 "hb-buffer-deserialize-text-glyphs.rl" +#line 54 "hb-buffer-deserialize-text-glyphs.rl" { /* TODO Unescape delimiters. */ if (!hb_font_glyph_from_string (font, @@ -459,7 +457,7 @@ _resume: return false; } break; -#line 463 "hb-buffer-deserialize-text-glyphs.hh" +#line 428 "hb-buffer-deserialize-text-glyphs.hh" } _again: @@ -474,21 +472,20 @@ _again: case 11: #line 43 "hb-buffer-deserialize-text-glyphs.rl" { - buffer->add_info (info); + buffer->add_info_and_pos (info, pos); if (unlikely (!buffer->successful)) return false; - buffer->pos[buffer->len - 1] = pos; *end_ptr = p; } break; -#line 485 "hb-buffer-deserialize-text-glyphs.hh" +#line 447 "hb-buffer-deserialize-text-glyphs.hh" } } _out: {} } -#line 120 "hb-buffer-deserialize-text-glyphs.rl" +#line 119 "hb-buffer-deserialize-text-glyphs.rl" *end_ptr = p; diff --git a/src/hb-buffer-deserialize-text-glyphs.rl b/src/hb-buffer-deserialize-text-glyphs.rl index 8efedb8d3..be69ba89c 100644 --- a/src/hb-buffer-deserialize-text-glyphs.rl +++ b/src/hb-buffer-deserialize-text-glyphs.rl @@ -41,10 +41,9 @@ action clear_item { } action add_item { - buffer->add_info (info); + buffer->add_info_and_pos (info, pos); if (unlikely (!buffer->successful)) return false; - buffer->pos[buffer->len - 1] = pos; *end_ptr = p; } diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index 7fb95fe7e..d2be5216a 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -370,6 +370,18 @@ hb_buffer_t::add_info (const hb_glyph_info_t &glyph_info) len++; } +void +hb_buffer_t::add_info_and_pos (const hb_glyph_info_t &glyph_info, + const hb_glyph_position_t &glyph_pos) +{ + if (unlikely (!ensure (len + 1))) return; + + info[len] = glyph_info; + assert (have_positions); + pos[len] = glyph_pos; + + len++; +} void diff --git a/src/hb-buffer.hh b/src/hb-buffer.hh index b353b06c7..8a5205120 100644 --- a/src/hb-buffer.hh +++ b/src/hb-buffer.hh @@ -229,6 +229,8 @@ struct hb_buffer_t HB_INTERNAL void add (hb_codepoint_t codepoint, unsigned int cluster); HB_INTERNAL void add_info (const hb_glyph_info_t &glyph_info); + HB_INTERNAL void add_info_and_pos (const hb_glyph_info_t &glyph_info, + const hb_glyph_position_t &glyph_pos); void reverse_range (unsigned start, unsigned end) {