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

Side by Side Diff: third_party/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh

Issue 2163983005: Roll HarfBuzz to 1.3.0 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
OLDNEW
1 /* 1 /*
2 * Copyright © 2007,2008,2009,2010 Red Hat, Inc. 2 * Copyright © 2007,2008,2009,2010 Red Hat, Inc.
3 * Copyright © 2010,2012,2013 Google, Inc. 3 * Copyright © 2010,2012,2013 Google, Inc.
4 * 4 *
5 * This is part of HarfBuzz, a text shaping library. 5 * This is part of HarfBuzz, a text shaping library.
6 * 6 *
7 * Permission is hereby granted, without written agreement and without 7 * Permission is hereby granted, without written agreement and without
8 * license or royalty fees, to use, copy, modify, and distribute this 8 * license or royalty fees, to use, copy, modify, and distribute this
9 * software and its documentation for any purpose, provided that the 9 * software and its documentation for any purpose, provided that the
10 * above copyright notice and the following two paragraphs appear in 10 * above copyright notice and the following two paragraphs appear in
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 unsigned int count = substitute.len; 258 unsigned int count = substitute.len;
259 for (unsigned int i = 0; i < count; i++) 259 for (unsigned int i = 0; i < count; i++)
260 c->output->add (substitute[i]); 260 c->output->add (substitute[i]);
261 } 261 }
262 262
263 inline bool apply (hb_apply_context_t *c) const 263 inline bool apply (hb_apply_context_t *c) const
264 { 264 {
265 TRACE_APPLY (this); 265 TRACE_APPLY (this);
266 unsigned int count = substitute.len; 266 unsigned int count = substitute.len;
267 267
268 /* TODO:
269 * Testing shows that Uniscribe actually allows zero-len susbstitute,
270 * which essentially deletes a glyph. We don't allow for now. It
271 * can be confusing to the client since the cluster from the deleted
272 * glyph won't be merged with any output cluster... Also, currently
273 * buffer->move_to() makes assumptions about this too. Perhaps fix
274 * in the future after figuring out what to do with the clusters.
275 */
276 if (unlikely (!count)) return_trace (false);
277
278 /* Special-case to make it in-place and not consider this 268 /* Special-case to make it in-place and not consider this
279 * as a "multiplied" substitution. */ 269 * as a "multiplied" substitution. */
280 if (unlikely (count == 1)) 270 if (unlikely (count == 1))
281 { 271 {
282 c->replace_glyph (substitute.array[0]); 272 c->replace_glyph (substitute.array[0]);
283 return_trace (true); 273 return_trace (true);
284 } 274 }
275 /* Spec disallows this, but Uniscribe allows it.
276 * https://github.com/behdad/harfbuzz/issues/253 */
277 else if (unlikely (count == 0))
278 {
279 c->buffer->delete_glyph ();
280 return_trace (true);
281 }
285 282
286 unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ? 283 unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
287 HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0; 284 HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
288 285
289 for (unsigned int i = 0; i < count; i++) { 286 for (unsigned int i = 0; i < count; i++) {
290 _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i); 287 _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
291 c->output_glyph_for_component (substitute.array[i], klass); 288 c->output_glyph_for_component (substitute.array[i], klass);
292 } 289 }
293 c->buffer->skip_glyph (); 290 c->buffer->skip_glyph ();
294 291
(...skipping 1050 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 c->set_lookup_index (saved_lookup_index); 1342 c->set_lookup_index (saved_lookup_index);
1346 c->set_lookup_props (saved_lookup_props); 1343 c->set_lookup_props (saved_lookup_props);
1347 return ret; 1344 return ret;
1348 } 1345 }
1349 1346
1350 1347
1351 } /* namespace OT */ 1348 } /* namespace OT */
1352 1349
1353 1350
1354 #endif /* HB_OT_LAYOUT_GSUB_TABLE_HH */ 1351 #endif /* HB_OT_LAYOUT_GSUB_TABLE_HH */
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-ot-layout.cc ('k') | third_party/harfbuzz-ng/src/hb-ot-layout-gsubgpos-private.hh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698