Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: third_party/harfbuzz-ng/src/hb-ot-shape-normalize.cc

Issue 16053004: Update harfbuzz-ng to 0.9.17 (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright © 2011,2012 Google, Inc. 2 * Copyright © 2011,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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 output_char (c->buffer, b, b_glyph); 163 output_char (c->buffer, b, b_glyph);
164 return 2; 164 return 2;
165 } 165 }
166 return 1; 166 return 1;
167 } 167 }
168 168
169 return 0; 169 return 0;
170 } 170 }
171 171
172 /* Returns 0 if didn't decompose, number of resulting characters otherwise. */ 172 /* Returns 0 if didn't decompose, number of resulting characters otherwise. */
173 static inline bool 173 static inline unsigned int
174 decompose_compatibility (const hb_ot_shape_normalize_context_t *c, hb_codepoint_ t u) 174 decompose_compatibility (const hb_ot_shape_normalize_context_t *c, hb_codepoint_ t u)
175 { 175 {
176 unsigned int len, i; 176 unsigned int len, i;
177 hb_codepoint_t decomposed[HB_UNICODE_MAX_DECOMPOSITION_LEN]; 177 hb_codepoint_t decomposed[HB_UNICODE_MAX_DECOMPOSITION_LEN];
178 hb_codepoint_t glyphs[HB_UNICODE_MAX_DECOMPOSITION_LEN]; 178 hb_codepoint_t glyphs[HB_UNICODE_MAX_DECOMPOSITION_LEN];
179 179
180 len = c->buffer->unicode->decompose_compatibility (u, decomposed); 180 len = c->buffer->unicode->decompose_compatibility (u, decomposed);
181 if (!len) 181 if (!len)
182 return 0; 182 return 0;
183 183
184 for (i = 0; i < len; i++) 184 for (i = 0; i < len; i++)
185 if (!c->font->get_glyph (decomposed[i], 0, &glyphs[i])) 185 if (!c->font->get_glyph (decomposed[i], 0, &glyphs[i]))
186 return 0; 186 return 0;
187 187
188 for (i = 0; i < len; i++) 188 for (i = 0; i < len; i++)
189 output_char (c->buffer, decomposed[i], glyphs[i]); 189 output_char (c->buffer, decomposed[i], glyphs[i]);
190 190
191 return len; 191 return len;
192 } 192 }
193 193
194 /* Returns true if recomposition may be benefitial. */
195 static inline void 194 static inline void
196 decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor test) 195 decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor test)
197 { 196 {
198 hb_buffer_t * const buffer = c->buffer; 197 hb_buffer_t * const buffer = c->buffer;
199 hb_codepoint_t glyph; 198 hb_codepoint_t glyph;
200 199
201 /* Kind of a cute waterfall here... */ 200 /* Kind of a cute waterfall here... */
202 if (shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph)) 201 if (shortest && c->font->get_glyph (buffer->cur().codepoint, 0, &glyph))
203 next_char (buffer, glyph); 202 next_char (buffer, glyph);
204 else if (decompose (c, shortest, buffer->cur().codepoint)) 203 else if (decompose (c, shortest, buffer->cur().codepoint))
(...skipping 19 matching lines...) Expand all
224 set_glyph (buffer->cur(), c->font); 223 set_glyph (buffer->cur(), c->font);
225 buffer->next_glyph (); 224 buffer->next_glyph ();
226 } 225 }
227 } 226 }
228 if (likely (buffer->idx < end)) { 227 if (likely (buffer->idx < end)) {
229 set_glyph (buffer->cur(), c->font); 228 set_glyph (buffer->cur(), c->font);
230 buffer->next_glyph (); 229 buffer->next_glyph ();
231 } 230 }
232 } 231 }
233 232
234 /* Returns true if recomposition may be benefitial. */
235 static inline void 233 static inline void
236 decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end) 234 decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
237 { 235 {
238 hb_buffer_t * const buffer = c->buffer; 236 hb_buffer_t * const buffer = c->buffer;
239 /* TODO Currently if there's a variation-selector we give-up, it's just too ha rd. */ 237 /* TODO Currently if there's a variation-selector we give-up, it's just too ha rd. */
240 for (unsigned int i = buffer->idx; i < end; i++) 238 for (unsigned int i = buffer->idx; i < end; i++)
241 if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepo int))) { 239 if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepo int))) {
242 handle_variation_selector_cluster (c, end); 240 handle_variation_selector_cluster (c, end);
243 return; 241 return;
244 } 242 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 /* As noted in the comment earlier, we don't try to combine 344 /* As noted in the comment earlier, we don't try to combine
347 * ccc=0 chars with their previous Starter. */ 345 * ccc=0 chars with their previous Starter. */
348 346
349 buffer->clear_output (); 347 buffer->clear_output ();
350 count = buffer->len; 348 count = buffer->len;
351 unsigned int starter = 0; 349 unsigned int starter = 0;
352 buffer->next_glyph (); 350 buffer->next_glyph ();
353 while (buffer->idx < count) 351 while (buffer->idx < count)
354 { 352 {
355 hb_codepoint_t composed, glyph; 353 hb_codepoint_t composed, glyph;
356 if (/* If mode is NOT COMPOSED_FULL (ie. it's COMPOSED_DIACRITICS), we don't try to 354 if (/* We don't try to compose a non-mark character with it's preceding star ter.
357 » * compose a non-mark character with it's preceding starter. This is ju st an 355 » * This is both an optimization to avoid trying to compose every two nei ghboring
358 » * optimization to avoid trying to compose every two neighboring glyphs in most 356 » * glyphs in most scripts AND a desired feature for Hangul. Apparently Hangul
359 » * scripts. */ 357 » * fonts are not designed to mix-and-match pre-composed syllables and Ja mo. */
360 » (mode == HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_FULL || 358 » HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur())) &&
361 » HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_categor y (&buffer->cur()))) &&
362 /* If there's anything between the starter and this char, they should ha ve CCC 359 /* If there's anything between the starter and this char, they should ha ve CCC
363 * smaller than this character's. */ 360 * smaller than this character's. */
364 (starter == buffer->out_len - 1 || 361 (starter == buffer->out_len - 1 ||
365 _hb_glyph_info_get_modified_combining_class (&buffer->prev()) < _hb_gly ph_info_get_modified_combining_class (&buffer->cur())) && 362 _hb_glyph_info_get_modified_combining_class (&buffer->prev()) < _hb_gly ph_info_get_modified_combining_class (&buffer->cur())) &&
366 /* And compose. */ 363 /* And compose. */
367 c.compose (&c, 364 c.compose (&c,
368 buffer->out_info[starter].codepoint, 365 buffer->out_info[starter].codepoint,
369 buffer->cur().codepoint, 366 buffer->cur().codepoint,
370 &composed) && 367 &composed) &&
371 /* And the font has glyph for the composite. */ 368 /* And the font has glyph for the composite. */
(...skipping 14 matching lines...) Expand all
386 383
387 /* Blocked, or doesn't compose. */ 384 /* Blocked, or doesn't compose. */
388 buffer->next_glyph (); 385 buffer->next_glyph ();
389 386
390 if (_hb_glyph_info_get_modified_combining_class (&buffer->prev()) == 0) 387 if (_hb_glyph_info_get_modified_combining_class (&buffer->prev()) == 0)
391 starter = buffer->out_len - 1; 388 starter = buffer->out_len - 1;
392 } 389 }
393 buffer->swap_buffers (); 390 buffer->swap_buffers ();
394 391
395 } 392 }
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc ('k') | third_party/harfbuzz-ng/src/hb-ot-shape-normalize-private.hh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698