src/hb-ot-shape.cc | 54 ++++++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 29 deletions(-)
New commits: commit 8af45fda475d075c5a285002463a00a0423d3926 Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri May 28 20:41:20 2010 -0400 Fix global feature handling diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index a3cb89b..87cdf47 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -168,8 +168,12 @@ struct hb_mask_allocator_t { if (infos[i].tag != infos[j].tag) infos[++j] = infos[i]; else { - if (!infos[j].global) + if (infos[i].global) + infos[j] = infos[i]; + else { + infos[j].global = infos[j].global && (infos[j].value == infos[i].value); infos[j].value = MAX (infos[j].value, infos[i].value); + } } count = j + 1; commit e04685ee7be01695ec437fab50f919f1b7423c57 Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri May 28 20:37:06 2010 -0400 Simplify mask allocation diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index 2944d31..a3cb89b 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -136,35 +136,20 @@ struct hb_mask_allocator_t { hb_mask_allocator_t (hb_face_t *face, hb_tag_t table_tag, unsigned int script_index, - unsigned int language_index, - const hb_feature_t *features, - unsigned int num_features) : + unsigned int language_index) : face (face), table_tag (table_tag), script_index (script_index), language_index (language_index), - count (0) - { - if (!num_features) - return; - - /* Add features in reverse order */ - for (unsigned int i = num_features - 1, count = 0; count < num_features; i--, count++) { - const hb_feature_t *feature = &features[i]; - feature_info_t *info = &infos[count]; + count (0) {} - info->tag = feature->tag; - info->value = feature->value; - info->global = (feature->start == 0 && feature->end == (unsigned int) -1); - } - } - - void add_binary_feature (hb_tag_t tag, - bool global) + void add_feature (hb_tag_t tag, + unsigned int value, + bool global) { feature_info_t *info = &infos[count++]; info->tag = tag; - info->value = 1; + info->value = value; info->global = global; } @@ -278,17 +263,17 @@ setup_lookups (hb_face_t *face, add_feature (face, table_tag, feature_index, 1, lookups, num_lookups, room_lookups); - hb_mask_allocator_t allocator (face, table_tag, script_index, language_index, features, num_features); + hb_mask_allocator_t allocator (face, table_tag, script_index, language_index); switch (original_direction) { case HB_DIRECTION_LTR: - allocator.add_binary_feature (HB_TAG ('l','t','r','a'), true); - allocator.add_binary_feature (HB_TAG ('l','t','r','m'), true); + allocator.add_feature (HB_TAG ('l','t','r','a'), 1, true); + allocator.add_feature (HB_TAG ('l','t','r','m'), 1, true); break; case HB_DIRECTION_RTL: - allocator.add_binary_feature (HB_TAG ('r','t','l','a'), true); - //allocator.add_binary_feature (HB_TAG ('r','t','l','m'), false); - allocator.add_binary_feature (HB_TAG ('r','t','l','m'), true); + allocator.add_feature (HB_TAG ('r','t','l','a'), 1, true); + //allocator.add_feature (HB_TAG ('r','t','l','m'), false); + allocator.add_feature (HB_TAG ('r','t','l','m'), 1, true); break; case HB_DIRECTION_TTB: case HB_DIRECTION_BTT: @@ -297,7 +282,14 @@ setup_lookups (hb_face_t *face, } for (i = 0; i < ARRAY_LENGTH (default_features); i++) - allocator.add_binary_feature (default_features[i], true); + allocator.add_feature (default_features[i], 1, true); + + /* XXX complex-shaper features go here */ + + for (unsigned int i = 0; i < num_features; i++) { + const hb_feature_t *feature = &features[i]; + allocator.add_feature (feature->tag, feature->value, (feature->start == 0 && feature->end == (unsigned int) -1)); + } /* Compile features */ _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/harfbuzz