X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fhb-ot-shape-private.hh;h=17f8273d4963fabf7ca7a7d2d993112ad2c9d485;hb=97158392a5899ddb739afaac925128f33f699bd7;hp=c8a0295099361773c046a3a03c6e373e9e198f59;hpb=a806762a314e83154793d96ee665e6668d6b56de;p=framework%2Fuifw%2Fharfbuzz.git diff --git a/src/hb-ot-shape-private.hh b/src/hb-ot-shape-private.hh index c8a0295..17f8273 100644 --- a/src/hb-ot-shape-private.hh +++ b/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,34 +27,89 @@ #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-buffer-private.hh" +#include "hb-ot-map-private.hh" +#include "hb-ot-shape-complex-private.hh" HB_BEGIN_DECLS -struct hb_mask_allocator_t; + +enum hb_ot_complex_shaper_t; + +struct hb_ot_shape_plan_t +{ + friend struct hb_ot_shape_planner_t; + + 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 (); } + + private: + NO_COPY (hb_ot_shape_plan_t); +}; + +struct hb_ot_shape_planner_t +{ + 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); +}; + struct hb_ot_shape_context_t { - /* Input to hb_ot_shape() */ + /* Input to hb_ot_shape_execute() */ + hb_ot_shape_plan_t *plan; hb_font_t *font; hb_face_t *face; hb_buffer_t *buffer; - hb_feature_t *features; - unsigned int num_features; + const hb_feature_t *user_features; + unsigned int num_user_features; /* Transient stuff */ - hb_direction_t original_direction; + hb_direction_t target_direction; hb_bool_t applied_substitute_complex; hb_bool_t applied_position_complex; - - struct hb_mask_allocator_t *allocator; }; +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 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_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); + HB_END_DECLS #endif /* HB_OT_SHAPE_PRIVATE_HH */