| Index: third_party/harfbuzz-ng/src/hb-buffer.cc
|
| diff --git a/third_party/harfbuzz-ng/src/hb-buffer.cc b/third_party/harfbuzz-ng/src/hb-buffer.cc
|
| index d6c6fcb8e6e05b0b1daee43f50f62d4eb035f162..2377ba40dafc19a4354b84dff016f805768d282d 100644
|
| --- a/third_party/harfbuzz-ng/src/hb-buffer.cc
|
| +++ b/third_party/harfbuzz-ng/src/hb-buffer.cc
|
| @@ -178,6 +178,7 @@ hb_buffer_t::reset (void)
|
|
|
| hb_unicode_funcs_destroy (unicode);
|
| unicode = hb_unicode_funcs_get_default ();
|
| + replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
|
|
|
| clear ();
|
| }
|
| @@ -500,6 +501,10 @@ void
|
| hb_buffer_t::merge_clusters (unsigned int start,
|
| unsigned int end)
|
| {
|
| +#ifdef HB_NO_MERGE_CLUSTERS
|
| + return;
|
| +#endif
|
| +
|
| if (unlikely (end - start < 2))
|
| return;
|
|
|
| @@ -528,6 +533,10 @@ void
|
| hb_buffer_t::merge_out_clusters (unsigned int start,
|
| unsigned int end)
|
| {
|
| +#ifdef HB_NO_MERGE_CLUSTERS
|
| + return;
|
| +#endif
|
| +
|
| if (unlikely (end - start < 2))
|
| return;
|
|
|
| @@ -695,6 +704,7 @@ hb_buffer_get_empty (void)
|
| const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil),
|
| HB_SEGMENT_PROPERTIES_DEFAULT,
|
| HB_BUFFER_FLAG_DEFAULT,
|
| + HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT,
|
|
|
| HB_BUFFER_CONTENT_TYPE_INVALID,
|
| true, /* in_error */
|
| @@ -1040,6 +1050,42 @@ hb_buffer_get_flags (hb_buffer_t *buffer)
|
|
|
|
|
| /**
|
| + * hb_buffer_set_replacement_codepoint:
|
| + * @buffer: a buffer.
|
| + * @replacement:
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| +void
|
| +hb_buffer_set_replacement_codepoint (hb_buffer_t *buffer,
|
| + hb_codepoint_t replacement)
|
| +{
|
| + if (unlikely (hb_object_is_inert (buffer)))
|
| + return;
|
| +
|
| + buffer->replacement = replacement;
|
| +}
|
| +
|
| +/**
|
| + * hb_buffer_get_replacement_codepoint:
|
| + * @buffer: a buffer.
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| +hb_codepoint_t
|
| +hb_buffer_get_replacement_codepoint (hb_buffer_t *buffer)
|
| +{
|
| + return buffer->replacement;
|
| +}
|
| +
|
| +
|
| +/**
|
| * hb_buffer_reset:
|
| * @buffer: a buffer.
|
| *
|
| @@ -1282,7 +1328,7 @@ hb_buffer_guess_segment_properties (hb_buffer_t *buffer)
|
| buffer->guess_segment_properties ();
|
| }
|
|
|
| -template <typename T>
|
| +template <bool validate, typename T>
|
| static inline void
|
| hb_buffer_add_utf (hb_buffer_t *buffer,
|
| const T *text,
|
| @@ -1290,6 +1336,9 @@ hb_buffer_add_utf (hb_buffer_t *buffer,
|
| unsigned int item_offset,
|
| int item_length)
|
| {
|
| + typedef hb_utf_t<T, true> utf_t;
|
| + const hb_codepoint_t replacement = buffer->replacement;
|
| +
|
| assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
|
| (!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
|
|
|
| @@ -1297,7 +1346,7 @@ hb_buffer_add_utf (hb_buffer_t *buffer,
|
| return;
|
|
|
| if (text_length == -1)
|
| - text_length = hb_utf_strlen (text);
|
| + text_length = utf_t::strlen (text);
|
|
|
| if (item_length == -1)
|
| item_length = text_length - item_offset;
|
| @@ -1320,7 +1369,7 @@ hb_buffer_add_utf (hb_buffer_t *buffer,
|
| while (start < prev && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
|
| {
|
| hb_codepoint_t u;
|
| - prev = hb_utf_prev (prev, start, &u);
|
| + prev = utf_t::prev (prev, start, &u, replacement);
|
| buffer->context[0][buffer->context_len[0]++] = u;
|
| }
|
| }
|
| @@ -1331,7 +1380,7 @@ hb_buffer_add_utf (hb_buffer_t *buffer,
|
| {
|
| hb_codepoint_t u;
|
| const T *old_next = next;
|
| - next = hb_utf_next (next, end, &u);
|
| + next = utf_t::next (next, end, &u, replacement);
|
| buffer->add (u, old_next - (const T *) text);
|
| }
|
|
|
| @@ -1341,7 +1390,7 @@ hb_buffer_add_utf (hb_buffer_t *buffer,
|
| while (next < end && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
|
| {
|
| hb_codepoint_t u;
|
| - next = hb_utf_next (next, end, &u);
|
| + next = utf_t::next (next, end, &u, replacement);
|
| buffer->context[1][buffer->context_len[1]++] = u;
|
| }
|
|
|
| @@ -1367,7 +1416,7 @@ hb_buffer_add_utf8 (hb_buffer_t *buffer,
|
| unsigned int item_offset,
|
| int item_length)
|
| {
|
| - hb_buffer_add_utf (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
|
| + hb_buffer_add_utf<true> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
|
| }
|
|
|
| /**
|
| @@ -1389,7 +1438,7 @@ hb_buffer_add_utf16 (hb_buffer_t *buffer,
|
| unsigned int item_offset,
|
| int item_length)
|
| {
|
| - hb_buffer_add_utf (buffer, text, text_length, item_offset, item_length);
|
| + hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
|
| }
|
|
|
| /**
|
| @@ -1411,7 +1460,29 @@ hb_buffer_add_utf32 (hb_buffer_t *buffer,
|
| unsigned int item_offset,
|
| int item_length)
|
| {
|
| - hb_buffer_add_utf (buffer, text, text_length, item_offset, item_length);
|
| + hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
|
| +}
|
| +
|
| +/**
|
| + * hb_buffer_add_codepoints:
|
| + * @buffer: a buffer.
|
| + * @text: (array length=text_length):
|
| + * @text_length:
|
| + * @item_offset:
|
| + * @item_length:
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| +void
|
| +hb_buffer_add_codepoints (hb_buffer_t *buffer,
|
| + const hb_codepoint_t *text,
|
| + int text_length,
|
| + unsigned int item_offset,
|
| + int item_length)
|
| +{
|
| + hb_buffer_add_utf<false> (buffer, text, text_length, item_offset, item_length);
|
| }
|
|
|
|
|
|
|