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 df0c7052e9b0eb0bc6bfb3450a711cf809309d47..c4c368db7c619c3f3e6b6413758405c4d704710f 100644 |
--- a/third_party/harfbuzz-ng/src/hb-ot-shape-private.hh |
+++ b/third_party/harfbuzz-ng/src/hb-ot-shape-private.hh |
@@ -30,36 +30,63 @@ |
#include "hb-private.hh" |
#include "hb-ot-map-private.hh" |
-#include "hb-ot-shape-complex-private.hh" |
+ |
+ |
+ |
+/* buffer var allocations, used during the entire shaping process */ |
+#define unicode_props0() var2.u8[0] |
+#define unicode_props1() var2.u8[1] |
+ |
struct hb_ot_shape_plan_t |
{ |
+ hb_segment_properties_t props; |
+ const struct hb_ot_complex_shaper_t *shaper; |
hb_ot_map_t map; |
- hb_ot_complex_shaper_t shaper; |
+ const void *data; |
- hb_ot_shape_plan_t (void) : map () {} |
- ~hb_ot_shape_plan_t (void) { map.finish (); } |
+ inline void substitute_closure (hb_face_t *face, hb_set_t *glyphs) const { map.substitute_closure (this, face, glyphs); } |
+ inline void substitute (hb_font_t *font, hb_buffer_t *buffer) const { map.substitute (this, font, buffer); } |
+ inline void position (hb_font_t *font, hb_buffer_t *buffer) const { map.position (this, font, buffer); } |
- private: |
- NO_COPY (hb_ot_shape_plan_t); |
+ void finish (void) { map.finish (); } |
}; |
+struct hb_ot_shape_planner_t |
+{ |
+ /* In the order that they are filled in. */ |
+ hb_face_t *face; |
+ hb_segment_properties_t props; |
+ const struct hb_ot_complex_shaper_t *shaper; |
+ hb_ot_map_builder_t map; |
+ |
+ hb_ot_shape_planner_t (const hb_shape_plan_t *master_plan) : |
+ face (master_plan->face), |
+ props (master_plan->props), |
+ shaper (NULL), |
+ map () {} |
+ ~hb_ot_shape_planner_t (void) { map.finish (); } |
+ |
+ inline void compile (hb_ot_shape_plan_t &plan) |
+ { |
+ plan.props = props; |
+ plan.shaper = shaper; |
+ map.compile (face, &props, plan.map); |
+ } |
+ private: |
+ NO_COPY (hb_ot_shape_planner_t); |
+}; |
-HB_INTERNAL hb_bool_t |
-_hb_ot_shape (hb_font_t *font, |
- hb_buffer_t *buffer, |
- const hb_feature_t *features, |
- unsigned int num_features); |
inline void |
_hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode) |
{ |
- info->unicode_props0() = ((unsigned int) hb_unicode_general_category (unicode, info->codepoint)) | |
- (_hb_unicode_is_zero_width (info->codepoint) ? 0x80 : 0); |
- info->unicode_props1() = _hb_unicode_modified_combining_class (unicode, info->codepoint); |
+ info->unicode_props0() = ((unsigned int) unicode->general_category (info->codepoint)) | |
+ (unicode->is_zero_width (info->codepoint) ? 0x80 : 0); |
+ info->unicode_props1() = unicode->modified_combining_class (info->codepoint); |
} |
inline hb_unicode_general_category_t |
@@ -68,6 +95,12 @@ _hb_glyph_info_get_general_category (const hb_glyph_info_t *info) |
return (hb_unicode_general_category_t) (info->unicode_props0() & 0x7F); |
} |
+inline void |
+_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info, unsigned int modified_class) |
+{ |
+ info->unicode_props1() = modified_class; |
+} |
+ |
inline unsigned int |
_hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info) |
{ |