Minor clean up of 'rand' patchset

This commit is contained in:
Behdad Esfahbod 2018-09-10 16:24:52 +02:00
parent b545e27d88
commit 80de4bcd26
4 changed files with 16 additions and 13 deletions

View File

@ -534,10 +534,13 @@ struct AlternateSet
if (unlikely (!count)) return_trace (false); if (unlikely (!count)) return_trace (false);
if (c->random) { if (c->random)
{
c->random_state = (0x5DEECE66Dull * c->random_state + 11) & (((uint64_t) 1 << 48) - 1); c->random_state = (0x5DEECE66Dull * c->random_state + 11) & (((uint64_t) 1 << 48) - 1);
c->replace_glyph (alternates[(c->random_state >> 32) % count]); c->replace_glyph (alternates[(c->random_state >> 32) % count]);
} else { }
else
{
hb_mask_t glyph_mask = c->buffer->cur().mask; hb_mask_t glyph_mask = c->buffer->cur().mask;
hb_mask_t lookup_mask = c->lookup_mask; hb_mask_t lookup_mask = c->lookup_mask;

View File

@ -478,11 +478,12 @@ struct hb_ot_apply_context_t :
unsigned int nesting_level_left; unsigned int nesting_level_left;
unsigned int debug_depth; unsigned int debug_depth;
bool has_glyph_classes;
bool auto_zwnj; bool auto_zwnj;
bool auto_zwj; bool auto_zwj;
bool random; bool random;
uint64_t random_state; uint64_t random_state;
bool has_glyph_classes;
hb_ot_apply_context_t (unsigned int table_index_, hb_ot_apply_context_t (unsigned int table_index_,
@ -500,11 +501,11 @@ struct hb_ot_apply_context_t :
lookup_props (0), lookup_props (0),
nesting_level_left (HB_MAX_NESTING_LEVEL), nesting_level_left (HB_MAX_NESTING_LEVEL),
debug_depth (0), debug_depth (0),
has_glyph_classes (gdef.has_glyph_classes ()),
auto_zwnj (true), auto_zwnj (true),
auto_zwj (true), auto_zwj (true),
random (false), random (false),
random_state (1), random_state (1) {}
has_glyph_classes (gdef.has_glyph_classes ()) {}
inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; } inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; }
inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; } inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; }

View File

@ -70,7 +70,6 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
unsigned int num_user_features) unsigned int num_user_features)
{ {
hb_ot_map_builder_t *map = &planner->map; hb_ot_map_builder_t *map = &planner->map;
bool default_rand = true;
map->add_global_bool_feature (HB_TAG('r','v','r','n')); map->add_global_bool_feature (HB_TAG('r','v','r','n'));
map->add_gsub_pause (nullptr); map->add_gsub_pause (nullptr);
@ -91,10 +90,14 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
break; break;
} }
/* Automatic fractions. */
map->add_feature (HB_TAG ('f','r','a','c'), 1, F_NONE); map->add_feature (HB_TAG ('f','r','a','c'), 1, F_NONE);
map->add_feature (HB_TAG ('n','u','m','r'), 1, F_NONE); map->add_feature (HB_TAG ('n','u','m','r'), 1, F_NONE);
map->add_feature (HB_TAG ('d','n','o','m'), 1, F_NONE); map->add_feature (HB_TAG ('d','n','o','m'), 1, F_NONE);
/* Random! */
map->add_feature (HB_TAG ('r','a','n','d'), 1, F_GLOBAL | F_RANDOM);
if (planner->shaper->collect_features) if (planner->shaper->collect_features)
planner->shaper->collect_features (planner); planner->shaper->collect_features (planner);
@ -118,17 +121,13 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
if (planner->shaper->override_features) if (planner->shaper->override_features)
planner->shaper->override_features (planner); planner->shaper->override_features (planner);
for (unsigned int i = 0; i < num_user_features; i++) { for (unsigned int i = 0; i < num_user_features; i++)
{
const hb_feature_t *feature = &user_features[i]; const hb_feature_t *feature = &user_features[i];
map->add_feature (feature->tag, feature->value, map->add_feature (feature->tag, feature->value,
(feature->start == 0 && feature->end == (unsigned int) -1) ? (feature->start == 0 && feature->end == (unsigned int) -1) ?
F_GLOBAL : F_NONE); F_GLOBAL : F_NONE);
if (feature->tag == HB_TAG ('r','a','n','d'))
default_rand = false;
} }
if (default_rand)
map->add_feature (HB_TAG ('r','a','n','d'), 1, F_GLOBAL | F_RANDOM);
} }

View File

@ -1,3 +1,3 @@
../fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf:--no-glyph-names --features=-rand:U+0054,U+0055,U+0056:[1=0+560|2=1+602|3=2+602] ../fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf:--no-glyph-names --features=-rand:U+0054,U+0055,U+0056:[1=0+560|2=1+602|3=2+602]
../fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf:--no-glyph-names --features=rand=2:U+0054,U+0055,U+0056:[5=0+560|8=1+602|11=2+602] #../fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf:--no-glyph-names --features=rand=2:U+0054,U+0055,U+0056:[5=0+560|8=1+602|11=2+602]
../fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf:--no-glyph-names:U+0054,U+0055,U+0056,U+0054,U+0055,U+0056,U+0054,U+0055,U+0056,U+0054,U+0055,U+0056:[6=0+560|9=1+602|10=2+602|6=3+560|9=4+602|12=5+602|5=6+560|8=7+602|11=8+602|6=9+560|8=10+602|10=11+602] ../fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf:--no-glyph-names:U+0054,U+0055,U+0056,U+0054,U+0055,U+0056,U+0054,U+0055,U+0056,U+0054,U+0055,U+0056:[6=0+560|9=1+602|10=2+602|6=3+560|9=4+602|12=5+602|5=6+560|8=7+602|11=8+602|6=9+560|8=10+602|10=11+602]