| Index: third_party/harfbuzz-ng/src/hb-ot-shape-normalize.cc
|
| ===================================================================
|
| --- third_party/harfbuzz-ng/src/hb-ot-shape-normalize.cc (리비전 191245)
|
| +++ third_party/harfbuzz-ng/src/hb-ot-shape-normalize.cc (작업 사본)
|
| @@ -192,30 +192,23 @@
|
| }
|
|
|
| /* Returns true if recomposition may be benefitial. */
|
| -static inline bool
|
| +static inline void
|
| decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shortest)
|
| {
|
| hb_buffer_t * const buffer = c->buffer;
|
| hb_codepoint_t glyph;
|
| - unsigned int len = 1;
|
|
|
| /* Kind of a cute waterfall here... */
|
| if (shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
|
| next_char (buffer, glyph);
|
| - else if ((len = decompose (c, shortest, buffer->cur().codepoint)))
|
| + else if (decompose (c, shortest, buffer->cur().codepoint))
|
| skip_char (buffer);
|
| else if (!shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
|
| next_char (buffer, glyph);
|
| - else if ((len = decompose_compatibility (c, buffer->cur().codepoint)))
|
| + else if (decompose_compatibility (c, buffer->cur().codepoint))
|
| skip_char (buffer);
|
| else
|
| next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
|
| -
|
| - /*
|
| - * A recomposition would only be useful if we decomposed into at least three
|
| - * characters...
|
| - */
|
| - return len > 2;
|
| }
|
|
|
| static inline void
|
| @@ -239,7 +232,7 @@
|
| }
|
|
|
| /* Returns true if recomposition may be benefitial. */
|
| -static inline bool
|
| +static inline void
|
| decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
|
| {
|
| hb_buffer_t * const buffer = c->buffer;
|
| @@ -247,23 +240,20 @@
|
| for (unsigned int i = buffer->idx; i < end; i++)
|
| if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepoint))) {
|
| handle_variation_selector_cluster (c, end);
|
| - return false;
|
| + return;
|
| }
|
|
|
| while (buffer->idx < end)
|
| decompose_current_character (c, false);
|
| - /* We can be smarter here and only return true if there are at least two ccc!=0 marks.
|
| - * But does not matter. */
|
| - return true;
|
| }
|
|
|
| -static inline bool
|
| +static inline void
|
| decompose_cluster (const hb_ot_shape_normalize_context_t *c, bool short_circuit, unsigned int end)
|
| {
|
| if (likely (c->buffer->idx + 1 == end))
|
| - return decompose_current_character (c, short_circuit);
|
| + decompose_current_character (c, short_circuit);
|
| else
|
| - return decompose_multi_char_cluster (c, end);
|
| + decompose_multi_char_cluster (c, end);
|
| }
|
|
|
|
|
| @@ -296,7 +286,6 @@
|
|
|
| bool short_circuit = mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED &&
|
| mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
|
| - bool can_use_recompose = false;
|
| unsigned int count;
|
|
|
| /* We do a fairly straightforward yet custom normalization process in three
|
| @@ -317,15 +306,11 @@
|
| if (buffer->cur().cluster != buffer->info[end].cluster)
|
| break;
|
|
|
| - can_use_recompose = decompose_cluster (&c, short_circuit, end) || can_use_recompose;
|
| + decompose_cluster (&c, short_circuit, end);
|
| }
|
| buffer->swap_buffers ();
|
|
|
|
|
| - if (mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL && !can_use_recompose)
|
| - return; /* Done! */
|
| -
|
| -
|
| /* Second round, reorder (inplace) */
|
|
|
| count = buffer->len;
|
| @@ -369,9 +354,11 @@
|
| {
|
| hb_codepoint_t composed, glyph;
|
| if (/* If mode is NOT COMPOSED_FULL (ie. it's COMPOSED_DIACRITICS), we don't try to
|
| - * compose a CCC=0 character with it's preceding starter. */
|
| + * compose a non-mark character with it's preceding starter. This is just an
|
| + * optimization to avoid trying to compose every two neighboring glyphs in most
|
| + * scripts. */
|
| (mode == HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL ||
|
| - _hb_glyph_info_get_modified_combining_class (&buffer->cur()) != 0) &&
|
| + HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur()))) &&
|
| /* If there's anything between the starter and this char, they should have CCC
|
| * smaller than this character's. */
|
| (starter == buffer->out_len - 1 ||
|
|
|