diff --git a/src/hb-buffer-private.h b/src/hb-buffer-private.h index 6225f709b..13bbe1299 100644 --- a/src/hb-buffer-private.h +++ b/src/hb-buffer-private.h @@ -48,7 +48,7 @@ HB_INTERNAL HB_Error _hb_buffer_add_output_glyphs (hb_buffer_t *buffer, unsigned int num_in, unsigned int num_out, - unsigned short *glyph_data, + const uint16_t *glyph_data_be, unsigned short component, unsigned short ligID); diff --git a/src/hb-buffer.c b/src/hb-buffer.c index 05d51239d..dad2c7d19 100644 --- a/src/hb-buffer.c +++ b/src/hb-buffer.c @@ -27,6 +27,8 @@ #include "hb-buffer-private.h" +#include + /* Here is how the buffer works internally: * * There are two string pointers: in_string and out_string. They @@ -56,7 +58,7 @@ /* Internal API */ -/*static XXX */ void +static void hb_buffer_ensure (hb_buffer_t *buffer, unsigned int size) { @@ -243,7 +245,7 @@ HB_INTERNAL HB_Error _hb_buffer_add_output_glyphs (hb_buffer_t *buffer, unsigned int num_in, unsigned int num_out, - unsigned short *glyph_data, + const uint16_t *glyph_data_be, unsigned short component, unsigned short ligID) { @@ -252,27 +254,28 @@ _hb_buffer_add_output_glyphs (hb_buffer_t *buffer, unsigned int properties; unsigned int cluster; - hb_buffer_ensure (buffer, buffer->out_pos + num_out); + hb_buffer_ensure( buffer, buffer->out_pos + num_out ); + /* XXX */ - if (!buffer->separate_out) + if ( !buffer->separate_out ) { - error = hb_buffer_duplicate_out_buffer (buffer); - if (error) + error = hb_buffer_duplicate_out_buffer( buffer ); + if ( error ) return error; } properties = buffer->in_string[buffer->in_pos].properties; cluster = buffer->in_string[buffer->in_pos].cluster; - if (component == 0xFFFF) + if ( component == 0xFFFF ) component = buffer->in_string[buffer->in_pos].component; - if (ligID == 0xFFFF) + if ( ligID == 0xFFFF ) ligID = buffer->in_string[buffer->in_pos].ligID; - for (i = 0; i < num_out; i++) + for ( i = 0; i < num_out; i++ ) { HB_GlyphItem item = &buffer->out_string[buffer->out_pos + i]; - item->gindex = glyph_data[i]; + item->gindex = hb_be_uint16_t (glyph_data_be[i]); item->properties = properties; item->cluster = cluster; item->component = component; @@ -288,13 +291,14 @@ _hb_buffer_add_output_glyphs (hb_buffer_t *buffer, return HB_Err_Ok; } + HB_INTERNAL HB_Error _hb_buffer_add_output_glyph (hb_buffer_t *buffer, hb_codepoint_t glyph_index, unsigned short component, unsigned short ligID) { - unsigned short glyph_data = glyph_index; + uint16_t glyph_data = hb_be_uint16_t (glyph_index); return _hb_buffer_add_output_glyphs (buffer, 1, 1, &glyph_data, component, ligID); diff --git a/src/hb-ot-layout-gsub-private.h b/src/hb-ot-layout-gsub-private.h index c025ac56a..6a2d4335e 100644 --- a/src/hb-ot-layout-gsub-private.h +++ b/src/hb-ot-layout-gsub-private.h @@ -29,16 +29,6 @@ #include "hb-ot-layout-gsubgpos-private.h" -/* XXX */ -#include "hb-buffer-private.h" -HB_INTERNAL HB_Error -_hb_buffer_add_output_glyph_ids (hb_buffer_t *buffer, - unsigned int num_in, - unsigned int num_out, - const GlyphID *glyph_data, - unsigned short component, - unsigned short ligID); - struct SingleSubstFormat1 { @@ -146,9 +136,9 @@ struct Sequence if (HB_UNLIKELY (!substitute.len)) return false; - _hb_buffer_add_output_glyph_ids (buffer, 1, - substitute.len, substitute.array, - 0xFFFF, 0xFFFF); + _hb_buffer_add_output_glyphs (buffer, 1, + substitute.len, (const uint16_t *) substitute.array, + 0xFFFF, 0xFFFF); if ( _hb_ot_layout_has_new_glyph_classes (layout) ) { @@ -336,11 +326,11 @@ struct Ligature if (j == buffer->in_pos + i) /* No input glyphs skipped */ /* We don't use a new ligature ID if there are no skipped glyphs and the ligature already has an ID. */ - _hb_buffer_add_output_glyph_ids (buffer, i, - 1, &ligGlyph, - 0xFFFF, - IN_LIGID (buffer->in_pos) ? - 0xFFFF : _hb_buffer_allocate_ligid (buffer)); + _hb_buffer_add_output_glyphs (buffer, i, + 1, (const uint16_t *) &ligGlyph, + 0xFFFF, + IN_LIGID (buffer->in_pos) ? + 0xFFFF : _hb_buffer_allocate_ligid (buffer)); else { unsigned int lig_id = _hb_buffer_allocate_ligid (buffer); diff --git a/src/hb-ot-layout-gsubgpos-private.h b/src/hb-ot-layout-gsubgpos-private.h index 2445f0516..f1c16e7aa 100644 --- a/src/hb-ot-layout-gsubgpos-private.h +++ b/src/hb-ot-layout-gsubgpos-private.h @@ -27,8 +27,8 @@ #ifndef HB_OT_LAYOUT_GSUBGPOS_PRIVATE_H #define HB_OT_LAYOUT_GSUBGPOS_PRIVATE_H +#include "hb-buffer-private.h" #include "hb-ot-layout-gdef-private.h" -#include "hb-buffer-private.h" /* XXX */ #define APPLY_ARG_DEF \ diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 20fc0a122..fbb9eba6d 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -575,74 +575,3 @@ hb_ot_layout_position_lookup (hb_ot_layout_t *layout, { return layout->gpos->position_lookup (layout, buffer, lookup_index, mask); } - - - -/* TODO dupped, until he old code can be removed */ - -static HB_Error -hb_buffer_duplicate_out_buffer( HB_Buffer buffer ) -{ - if (!buffer->alt_string) - buffer->alt_string = (HB_GlyphItemRec_ *) malloc (buffer->allocated * sizeof (buffer->out_string[0])); - - buffer->out_string = buffer->alt_string; - memcpy (buffer->out_string, buffer->in_string, buffer->out_length * sizeof (buffer->out_string[0])); - buffer->separate_out = TRUE; - - return HB_Err_Ok; -} - - - -/* XXX */ -HB_INTERNAL HB_Error -_hb_buffer_add_output_glyph_ids (hb_buffer_t *buffer, - unsigned int num_in, - unsigned int num_out, - const GlyphID *glyph_data, - unsigned short component, - unsigned short ligID) -{ - HB_Error error; - unsigned int i; - unsigned int properties; - unsigned int cluster; - - hb_buffer_ensure( buffer, buffer->out_pos + num_out ); - /* XXX */ - - if ( !buffer->separate_out ) - { - error = hb_buffer_duplicate_out_buffer( buffer ); - if ( error ) - return error; - } - - properties = buffer->in_string[buffer->in_pos].properties; - cluster = buffer->in_string[buffer->in_pos].cluster; - if ( component == 0xFFFF ) - component = buffer->in_string[buffer->in_pos].component; - if ( ligID == 0xFFFF ) - ligID = buffer->in_string[buffer->in_pos].ligID; - - for ( i = 0; i < num_out; i++ ) - { - HB_GlyphItem item = &buffer->out_string[buffer->out_pos + i]; - - item->gindex = glyph_data[i]; - item->properties = properties; - item->cluster = cluster; - item->component = component; - item->ligID = ligID; - item->gproperty = HB_GLYPH_PROPERTY_UNKNOWN; - } - - buffer->in_pos += num_in; - buffer->out_pos += num_out; - - buffer->out_length = buffer->out_pos; - - return HB_Err_Ok; -} -