Index: third_party/harfbuzz-ng/src/hb-fallback-shape.cc |
diff --git a/third_party/harfbuzz-ng/src/hb-fallback-shape.cc b/third_party/harfbuzz-ng/src/hb-fallback-shape.cc |
index 593988792bf19f0f4843a5341c90b1fe17b8eb6b..d7bde090d616b44a02551557457bd5cd9bb8a9fd 100644 |
--- a/third_party/harfbuzz-ng/src/hb-fallback-shape.cc |
+++ b/third_party/harfbuzz-ng/src/hb-fallback-shape.cc |
@@ -24,34 +24,102 @@ |
* Google Author(s): Behdad Esfahbod |
*/ |
-#include "hb-fallback-shape-private.hh" |
+#define HB_SHAPER fallback |
+#include "hb-shaper-impl-private.hh" |
-#include "hb-buffer-private.hh" |
+ |
+/* |
+ * shaper face data |
+ */ |
+ |
+struct hb_fallback_shaper_face_data_t {}; |
+ |
+hb_fallback_shaper_face_data_t * |
+_hb_fallback_shaper_face_data_create (hb_face_t *face) |
+{ |
+ return (hb_fallback_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED; |
+} |
+ |
+void |
+_hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data) |
+{ |
+} |
+ |
+ |
+/* |
+ * shaper font data |
+ */ |
+ |
+struct hb_fallback_shaper_font_data_t {}; |
+ |
+hb_fallback_shaper_font_data_t * |
+_hb_fallback_shaper_font_data_create (hb_font_t *font) |
+{ |
+ return (hb_fallback_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED; |
+} |
+ |
+void |
+_hb_fallback_shaper_font_data_destroy (hb_fallback_shaper_font_data_t *data) |
+{ |
+} |
+ |
+ |
+/* |
+ * shaper shape_plan data |
+ */ |
+ |
+struct hb_fallback_shaper_shape_plan_data_t {}; |
+ |
+hb_fallback_shaper_shape_plan_data_t * |
+_hb_fallback_shaper_shape_plan_data_create (hb_shape_plan_t *shape_plan HB_UNUSED, |
+ const hb_feature_t *user_features HB_UNUSED, |
+ unsigned int num_user_features HB_UNUSED) |
+{ |
+ return (hb_fallback_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED; |
+} |
+ |
+void |
+_hb_fallback_shaper_shape_plan_data_destroy (hb_fallback_shaper_shape_plan_data_t *data HB_UNUSED) |
+{ |
+} |
+ |
+ |
+/* |
+ * shaper |
+ */ |
hb_bool_t |
-_hb_fallback_shape (hb_font_t *font, |
+_hb_fallback_shape (hb_shape_plan_t *shape_plan, |
+ hb_font_t *font, |
hb_buffer_t *buffer, |
const hb_feature_t *features HB_UNUSED, |
unsigned int num_features HB_UNUSED) |
{ |
+ hb_codepoint_t space; |
+ font->get_glyph (' ', 0, &space); |
+ |
buffer->guess_properties (); |
+ buffer->clear_positions (); |
unsigned int count = buffer->len; |
for (unsigned int i = 0; i < count; i++) |
- hb_font_get_glyph (font, buffer->info[i].codepoint, 0, &buffer->info[i].codepoint); |
- |
- buffer->clear_positions (); |
- |
- for (unsigned int i = 0; i < count; i++) { |
- hb_font_get_glyph_advance_for_direction (font, buffer->info[i].codepoint, |
- buffer->props.direction, |
- &buffer->pos[i].x_advance, |
- &buffer->pos[i].y_advance); |
- hb_font_subtract_glyph_origin_for_direction (font, buffer->info[i].codepoint, |
- buffer->props.direction, |
- &buffer->pos[i].x_offset, |
- &buffer->pos[i].y_offset); |
+ { |
+ if (buffer->unicode->is_zero_width (buffer->info[i].codepoint)) { |
+ buffer->info[i].codepoint = space; |
+ buffer->pos[i].x_advance = 0; |
+ buffer->pos[i].y_advance = 0; |
+ continue; |
+ } |
+ font->get_glyph (buffer->info[i].codepoint, 0, &buffer->info[i].codepoint); |
+ font->get_glyph_advance_for_direction (buffer->info[i].codepoint, |
+ buffer->props.direction, |
+ &buffer->pos[i].x_advance, |
+ &buffer->pos[i].y_advance); |
+ font->subtract_glyph_origin_for_direction (buffer->info[i].codepoint, |
+ buffer->props.direction, |
+ &buffer->pos[i].x_offset, |
+ &buffer->pos[i].y_offset); |
} |
if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction)) |