29 30 static const hb_tag_t tibetan_features[] = 31 { 32 HB_TAG('a','b','v','s'), 33 HB_TAG('b','l','w','s'), 34 HB_TAG('a','b','v','m'), 35 HB_TAG('b','l','w','m'), 36 HB_TAG_NONE 37 }; 38 39 static void 40 collect_features_tibetan (hb_ot_shape_planner_t *plan) 41 { 42 for (const hb_tag_t *script_features = tibetan_features; script_features && *script_features; script_features++) 43 plan->map.add_global_bool_feature (*script_features); 44 } 45 46 47 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_tibetan = 48 { 49 "default", 50 collect_features_tibetan, 51 NULL, /* override_features */ 52 NULL, /* data_create */ 53 NULL, /* data_destroy */ 54 NULL, /* preprocess_text */ 55 NULL, /* postprocess_glyphs */ 56 HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT, 57 NULL, /* decompose */ 58 NULL, /* compose */ 59 NULL, /* setup_masks */ 60 NULL, /* disable_otl */ 61 HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, 62 true, /* fallback_position */ 63 }; | 29 30 static const hb_tag_t tibetan_features[] = 31 { 32 HB_TAG('a','b','v','s'), 33 HB_TAG('b','l','w','s'), 34 HB_TAG('a','b','v','m'), 35 HB_TAG('b','l','w','m'), 36 HB_TAG_NONE 37 }; 38 39 static void 40 collect_features_tibetan (hb_ot_shape_planner_t *plan) 41 { 42 for (const hb_tag_t *script_features = tibetan_features; script_features && *script_features; script_features++) 43 plan->map.add_global_bool_feature (*script_features); 44 } 45 46 47 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_tibetan = 48 { 49 collect_features_tibetan, 50 nullptr, /* override_features */ 51 nullptr, /* data_create */ 52 nullptr, /* data_destroy */ 53 nullptr, /* preprocess_text */ 54 nullptr, /* postprocess_glyphs */ 55 HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT, 56 nullptr, /* decompose */ 57 nullptr, /* compose */ 58 nullptr, /* setup_masks */ 59 nullptr, /* disable_otl */ 60 nullptr, /* reorder_marks */ 61 HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, 62 true, /* fallback_position */ 63 }; |