| Index: third_party/harfbuzz-ng/src/hb-ot-shape-private.hh
|
| diff --git a/third_party/harfbuzz-ng/src/hb-ot-shape-private.hh b/third_party/harfbuzz-ng/src/hb-ot-shape-private.hh
|
| index deaec97a881248b0738465743efc95d415e52431..c49c2b0e36af69d0ec56a0d8af1f5cf90118f4b6 100644
|
| --- a/third_party/harfbuzz-ng/src/hb-ot-shape-private.hh
|
| +++ b/third_party/harfbuzz-ng/src/hb-ot-shape-private.hh
|
| @@ -1,5 +1,5 @@
|
| /*
|
| - * Copyright (C) 2010 Google, Inc.
|
| + * Copyright © 2010 Google, Inc.
|
| *
|
| * This is part of HarfBuzz, a text shaping library.
|
| *
|
| @@ -27,30 +27,49 @@
|
| #ifndef HB_OT_SHAPE_PRIVATE_HH
|
| #define HB_OT_SHAPE_PRIVATE_HH
|
|
|
| -#include "hb-private.h"
|
| +#include "hb-private.hh"
|
|
|
| #include "hb-ot-shape.h"
|
|
|
| #include "hb-ot-map-private.hh"
|
| +#include "hb-ot-shape-complex-private.hh"
|
|
|
| -HB_BEGIN_DECLS
|
|
|
|
|
| -/* buffer var allocations */
|
| -#define general_category() var1.u8[0] /* unicode general_category (hb_category_t) */
|
| -#define combining_class() var1.u8[1] /* unicode combining_class (uint8_t) */
|
| +enum hb_ot_complex_shaper_t;
|
|
|
| +struct hb_ot_shape_plan_t
|
| +{
|
| + friend struct hb_ot_shape_planner_t;
|
|
|
| -enum hb_ot_complex_shaper_t {
|
| - hb_ot_complex_shaper_none,
|
| - hb_ot_complex_shaper_arabic
|
| -};
|
| + hb_ot_map_t map;
|
| + hb_ot_complex_shaper_t shaper;
|
|
|
| + hb_ot_shape_plan_t (void) : map () {}
|
| + ~hb_ot_shape_plan_t (void) { map.finish (); }
|
|
|
| -struct hb_ot_shape_plan_t
|
| + private:
|
| + NO_COPY (hb_ot_shape_plan_t);
|
| +};
|
| +
|
| +struct hb_ot_shape_planner_t
|
| {
|
| - hb_ot_map_t map;
|
| + hb_ot_map_builder_t map;
|
| hb_ot_complex_shaper_t shaper;
|
| +
|
| + hb_ot_shape_planner_t (void) : map () {}
|
| + ~hb_ot_shape_planner_t (void) { map.finish (); }
|
| +
|
| + inline void compile (hb_face_t *face,
|
| + const hb_segment_properties_t *props,
|
| + struct hb_ot_shape_plan_t &plan)
|
| + {
|
| + plan.shaper = shaper;
|
| + map.compile (face, props, plan.map);
|
| + }
|
| +
|
| + private:
|
| + NO_COPY (hb_ot_shape_planner_t);
|
| };
|
|
|
|
|
| @@ -71,6 +90,40 @@ struct hb_ot_shape_context_t
|
| };
|
|
|
|
|
| -HB_END_DECLS
|
| +static inline hb_bool_t
|
| +is_variation_selector (hb_codepoint_t unicode)
|
| +{
|
| + return unlikely ((unicode >= 0x180B && unicode <= 0x180D) || /* MONGOLIAN FREE VARIATION SELECTOR ONE..THREE */
|
| + (unicode >= 0xFE00 && unicode <= 0xFE0F) || /* VARIATION SELECTOR-1..16 */
|
| + (unicode >= 0xE0100 && unicode <= 0xE01EF)); /* VARIATION SELECTOR-17..256 */
|
| +}
|
| +
|
| +static inline unsigned int
|
| +_hb_unicode_modified_combining_class (hb_unicode_funcs_t *ufuncs,
|
| + hb_codepoint_t unicode)
|
| +{
|
| + int c = hb_unicode_combining_class (ufuncs, unicode);
|
| +
|
| + /* Modify the combining-class to suit Arabic better. See:
|
| + * http://unicode.org/faq/normalization.html#8
|
| + * http://unicode.org/faq/normalization.html#9
|
| + */
|
| + if (unlikely (hb_in_range<int> (c, 27, 33)))
|
| + c = c == 33 ? 27 : c + 1;
|
| +
|
| + return c;
|
| +}
|
| +
|
| +static inline void
|
| +hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
|
| +{
|
| + info->general_category() = hb_unicode_general_category (unicode, info->codepoint);
|
| + info->combining_class() = _hb_unicode_modified_combining_class (unicode, info->codepoint);
|
| +}
|
| +
|
| +HB_INTERNAL void _hb_set_unicode_props (hb_buffer_t *buffer);
|
| +
|
| +HB_INTERNAL void _hb_ot_shape_normalize (hb_ot_shape_context_t *c);
|
| +
|
|
|
| #endif /* HB_OT_SHAPE_PRIVATE_HH */
|
|
|