| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright © 2012 Google, Inc. | 2 * Copyright © 2012 Google, Inc. |
| 3 * | 3 * |
| 4 * This is part of HarfBuzz, a text shaping library. | 4 * This is part of HarfBuzz, a text shaping library. |
| 5 * | 5 * |
| 6 * Permission is hereby granted, without written agreement and without | 6 * Permission is hereby granted, without written agreement and without |
| 7 * license or royalty fees, to use, copy, modify, and distribute this | 7 * license or royalty fees, to use, copy, modify, and distribute this |
| 8 * software and its documentation for any purpose, provided that the | 8 * software and its documentation for any purpose, provided that the |
| 9 * above copyright notice and the following two paragraphs appear in | 9 * above copyright notice and the following two paragraphs appear in |
| 10 * all copies of this software. | 10 * all copies of this software. |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 else | 192 else |
| 193 return arabic_fallback_synthesize_lookup_ligature (plan, font); | 193 return arabic_fallback_synthesize_lookup_ligature (plan, font); |
| 194 } | 194 } |
| 195 | 195 |
| 196 struct arabic_fallback_plan_t | 196 struct arabic_fallback_plan_t |
| 197 { | 197 { |
| 198 ASSERT_POD (); | 198 ASSERT_POD (); |
| 199 | 199 |
| 200 hb_mask_t mask_array[ARABIC_NUM_FALLBACK_FEATURES]; | 200 hb_mask_t mask_array[ARABIC_NUM_FALLBACK_FEATURES]; |
| 201 OT::SubstLookup *lookup_array[ARABIC_NUM_FALLBACK_FEATURES]; | 201 OT::SubstLookup *lookup_array[ARABIC_NUM_FALLBACK_FEATURES]; |
| 202 hb_set_digest_t digest_array[ARABIC_NUM_FALLBACK_FEATURES]; | 202 hb_ot_layout_lookup_accelerator_t accel_array[ARABIC_NUM_FALLBACK_FEATURES]; |
| 203 }; | 203 }; |
| 204 | 204 |
| 205 static const arabic_fallback_plan_t arabic_fallback_plan_nil = {}; | 205 static const arabic_fallback_plan_t arabic_fallback_plan_nil = {}; |
| 206 | 206 |
| 207 static arabic_fallback_plan_t * | 207 static arabic_fallback_plan_t * |
| 208 arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan, | 208 arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan, |
| 209 hb_font_t *font) | 209 hb_font_t *font) |
| 210 { | 210 { |
| 211 arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) calloc (1,
sizeof (arabic_fallback_plan_t)); | 211 arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) calloc (1,
sizeof (arabic_fallback_plan_t)); |
| 212 if (unlikely (!fallback_plan)) | 212 if (unlikely (!fallback_plan)) |
| 213 return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil); | 213 return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil); |
| 214 | 214 |
| 215 for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) | 215 for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) |
| 216 { | 216 { |
| 217 fallback_plan->digest_array[i].init (); | |
| 218 fallback_plan->mask_array[i] = plan->map.get_1_mask (arabic_fallback_feature
s[i]); | 217 fallback_plan->mask_array[i] = plan->map.get_1_mask (arabic_fallback_feature
s[i]); |
| 219 if (fallback_plan->mask_array[i]) { | 218 if (fallback_plan->mask_array[i]) { |
| 220 fallback_plan->lookup_array[i] = arabic_fallback_synthesize_lookup (plan,
font, i); | 219 fallback_plan->lookup_array[i] = arabic_fallback_synthesize_lookup (plan,
font, i); |
| 221 if (fallback_plan->lookup_array[i]) | 220 if (fallback_plan->lookup_array[i]) |
| 222 » fallback_plan->lookup_array[i]->add_coverage (&fallback_plan->digest_arr
ay[i]); | 221 » fallback_plan->accel_array[i].init (*fallback_plan->lookup_array[i]); |
| 223 } | 222 } |
| 224 } | 223 } |
| 225 | 224 |
| 226 return fallback_plan; | 225 return fallback_plan; |
| 227 } | 226 } |
| 228 | 227 |
| 229 static void | 228 static void |
| 230 arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan) | 229 arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan) |
| 231 { | 230 { |
| 232 if (!fallback_plan || fallback_plan == &arabic_fallback_plan_nil) | 231 if (!fallback_plan || fallback_plan == &arabic_fallback_plan_nil) |
| 233 return; | 232 return; |
| 234 | 233 |
| 235 for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) | 234 for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) |
| 236 if (fallback_plan->lookup_array[i]) | 235 if (fallback_plan->lookup_array[i]) |
| 236 { |
| 237 fallback_plan->accel_array[i].fini (fallback_plan->lookup_array[i]); |
| 237 free (fallback_plan->lookup_array[i]); | 238 free (fallback_plan->lookup_array[i]); |
| 239 } |
| 238 | 240 |
| 239 free (fallback_plan); | 241 free (fallback_plan); |
| 240 } | 242 } |
| 241 | 243 |
| 242 static void | 244 static void |
| 243 arabic_fallback_plan_shape (arabic_fallback_plan_t *fallback_plan, | 245 arabic_fallback_plan_shape (arabic_fallback_plan_t *fallback_plan, |
| 244 hb_font_t *font, | 246 hb_font_t *font, |
| 245 hb_buffer_t *buffer) | 247 hb_buffer_t *buffer) |
| 246 { | 248 { |
| 249 OT::hb_apply_context_t c (0, font, buffer); |
| 247 for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) | 250 for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++) |
| 248 if (fallback_plan->lookup_array[i]) { | 251 if (fallback_plan->lookup_array[i]) { |
| 249 OT::hb_apply_context_t c (0, font, buffer, fallback_plan->mask_array[i], t
rue/*auto_zwj*/); | 252 c.set_lookup_mask (fallback_plan->mask_array[i]); |
| 250 fallback_plan->lookup_array[i]->apply_string (&c, &fallback_plan->digest_a
rray[i]); | 253 hb_ot_layout_substitute_lookup (&c, |
| 254 » » » » *fallback_plan->lookup_array[i], |
| 255 » » » » fallback_plan->accel_array[i]); |
| 251 } | 256 } |
| 252 } | 257 } |
| 253 | 258 |
| 254 | 259 |
| 255 #endif /* HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH */ | 260 #endif /* HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH */ |
| OLD | NEW |