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

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

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 public: 338 public:
339 DEFINE_SIZE_UNION (2, format); 339 DEFINE_SIZE_UNION (2, format);
340 }; 340 };
341 341
342 342
343 struct AnchorMatrix 343 struct AnchorMatrix
344 { 344 {
345 inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols, bool *found) const { 345 inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols, bool *found) const {
346 *found = false; 346 *found = false;
347 if (unlikely (row >= rows || col >= cols)) return Null(Anchor); 347 if (unlikely (row >= rows || col >= cols)) return Null(Anchor);
348 *found = !matrix[row * cols + col].is_null (); 348 *found = !matrixZ[row * cols + col].is_null ();
349 return this+matrix[row * cols + col]; 349 return this+matrixZ[row * cols + col];
350 } 350 }
351 351
352 inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) { 352 inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) {
353 TRACE_SANITIZE (this); 353 TRACE_SANITIZE (this);
354 if (!c->check_struct (this)) return TRACE_RETURN (false); 354 if (!c->check_struct (this)) return TRACE_RETURN (false);
355 if (unlikely (rows > 0 && cols >= ((unsigned int) -1) / rows)) return TRACE_ RETURN (false); 355 if (unlikely (rows > 0 && cols >= ((unsigned int) -1) / rows)) return TRACE_ RETURN (false);
356 unsigned int count = rows * cols; 356 unsigned int count = rows * cols;
357 if (!c->check_array (matrix, matrix[0].static_size, count)) return TRACE_RET URN (false); 357 if (!c->check_array (matrixZ, matrixZ[0].static_size, count)) return TRACE_R ETURN (false);
358 for (unsigned int i = 0; i < count; i++) 358 for (unsigned int i = 0; i < count; i++)
359 if (!matrix[i].sanitize (c, this)) return TRACE_RETURN (false); 359 if (!matrixZ[i].sanitize (c, this)) return TRACE_RETURN (false);
360 return TRACE_RETURN (true); 360 return TRACE_RETURN (true);
361 } 361 }
362 362
363 USHORT rows; /* Number of rows */ 363 USHORT rows; /* Number of rows */
364 protected: 364 protected:
365 OffsetTo<Anchor> 365 OffsetTo<Anchor>
366 » » matrix[VAR];» » /* Matrix of offsets to Anchor tables-- 366 » » matrixZ[VAR];» » /* Matrix of offsets to Anchor tables--
367 * from beginning of AnchorMatrix table */ 367 * from beginning of AnchorMatrix table */
368 public: 368 public:
369 DEFINE_SIZE_ARRAY (2, matrix); 369 DEFINE_SIZE_ARRAY (2, matrixZ);
370 }; 370 };
371 371
372 372
373 struct MarkRecord 373 struct MarkRecord
374 { 374 {
375 friend struct MarkArray; 375 friend struct MarkArray;
376 376
377 inline bool sanitize (hb_sanitize_context_t *c, void *base) { 377 inline bool sanitize (hb_sanitize_context_t *c, void *base) {
378 TRACE_SANITIZE (this); 378 TRACE_SANITIZE (this);
379 return TRACE_RETURN (c->check_struct (this) && markAnchor.sanitize (c, base) ); 379 return TRACE_RETURN (c->check_struct (this) && markAnchor.sanitize (c, base) );
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 * values applied to glyphs */ 523 * values applied to glyphs */
524 public: 524 public:
525 DEFINE_SIZE_ARRAY (8, values); 525 DEFINE_SIZE_ARRAY (8, values);
526 }; 526 };
527 527
528 struct SinglePos 528 struct SinglePos
529 { 529 {
530 template <typename context_t> 530 template <typename context_t>
531 inline typename context_t::return_t dispatch (context_t *c) const 531 inline typename context_t::return_t dispatch (context_t *c) const
532 { 532 {
533 TRACE_DISPATCH (this); 533 TRACE_DISPATCH (this, u.format);
534 switch (u.format) { 534 switch (u.format) {
535 case 1: return TRACE_RETURN (c->dispatch (u.format1)); 535 case 1: return TRACE_RETURN (c->dispatch (u.format1));
536 case 2: return TRACE_RETURN (c->dispatch (u.format2)); 536 case 2: return TRACE_RETURN (c->dispatch (u.format2));
537 default:return TRACE_RETURN (c->default_return_value ()); 537 default:return TRACE_RETURN (c->default_return_value ());
538 } 538 }
539 } 539 }
540 540
541 inline bool sanitize (hb_sanitize_context_t *c) { 541 inline bool sanitize (hb_sanitize_context_t *c) {
542 TRACE_SANITIZE (this); 542 TRACE_SANITIZE (this);
543 if (!u.format.sanitize (c)) return TRACE_RETURN (false); 543 if (!u.format.sanitize (c)) return TRACE_RETURN (false);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 friend struct PairPosFormat1; 576 friend struct PairPosFormat1;
577 577
578 inline void collect_glyphs (hb_collect_glyphs_context_t *c, 578 inline void collect_glyphs (hb_collect_glyphs_context_t *c,
579 const ValueFormat *valueFormats) const 579 const ValueFormat *valueFormats) const
580 { 580 {
581 TRACE_COLLECT_GLYPHS (this); 581 TRACE_COLLECT_GLYPHS (this);
582 unsigned int len1 = valueFormats[0].get_len (); 582 unsigned int len1 = valueFormats[0].get_len ();
583 unsigned int len2 = valueFormats[1].get_len (); 583 unsigned int len2 = valueFormats[1].get_len ();
584 unsigned int record_size = USHORT::static_size * (1 + len1 + len2); 584 unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
585 585
586 const PairValueRecord *record = CastP<PairValueRecord> (array); 586 const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
587 unsigned int count = len; 587 unsigned int count = len;
588 for (unsigned int i = 0; i < count; i++) 588 for (unsigned int i = 0; i < count; i++)
589 { 589 {
590 c->input->add (record->secondGlyph); 590 c->input->add (record->secondGlyph);
591 record = &StructAtOffset<PairValueRecord> (record, record_size); 591 record = &StructAtOffset<PairValueRecord> (record, record_size);
592 } 592 }
593 } 593 }
594 594
595 inline bool apply (hb_apply_context_t *c, 595 inline bool apply (hb_apply_context_t *c,
596 const ValueFormat *valueFormats, 596 const ValueFormat *valueFormats,
597 unsigned int pos) const 597 unsigned int pos) const
598 { 598 {
599 TRACE_APPLY (this); 599 TRACE_APPLY (this);
600 hb_buffer_t *buffer = c->buffer; 600 hb_buffer_t *buffer = c->buffer;
601 unsigned int len1 = valueFormats[0].get_len (); 601 unsigned int len1 = valueFormats[0].get_len ();
602 unsigned int len2 = valueFormats[1].get_len (); 602 unsigned int len2 = valueFormats[1].get_len ();
603 unsigned int record_size = USHORT::static_size * (1 + len1 + len2); 603 unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
604 604
605 const PairValueRecord *record = CastP<PairValueRecord> (array); 605 const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
606 unsigned int count = len; 606 unsigned int count = len;
607 for (unsigned int i = 0; i < count; i++) 607 for (unsigned int i = 0; i < count; i++)
608 { 608 {
609 /* TODO bsearch */ 609 /* TODO bsearch */
610 if (buffer->info[pos].codepoint == record->secondGlyph) 610 if (buffer->info[pos].codepoint == record->secondGlyph)
611 { 611 {
612 valueFormats[0].apply_value (c->font, c->direction, this, 612 valueFormats[0].apply_value (c->font, c->direction, this,
613 &record->values[0], buffer->cur_pos()); 613 &record->values[0], buffer->cur_pos());
614 valueFormats[1].apply_value (c->font, c->direction, this, 614 valueFormats[1].apply_value (c->font, c->direction, this,
615 &record->values[len1], buffer->pos[pos]); 615 &record->values[len1], buffer->pos[pos]);
(...skipping 11 matching lines...) Expand all
627 struct sanitize_closure_t { 627 struct sanitize_closure_t {
628 void *base; 628 void *base;
629 ValueFormat *valueFormats; 629 ValueFormat *valueFormats;
630 unsigned int len1; /* valueFormats[0].get_len() */ 630 unsigned int len1; /* valueFormats[0].get_len() */
631 unsigned int stride; /* 1 + len1 + len2 */ 631 unsigned int stride; /* 1 + len1 + len2 */
632 }; 632 };
633 633
634 inline bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *clos ure) { 634 inline bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *clos ure) {
635 TRACE_SANITIZE (this); 635 TRACE_SANITIZE (this);
636 if (!(c->check_struct (this) 636 if (!(c->check_struct (this)
637 && c->check_array (array, USHORT::static_size * closure->stride, len))) r eturn TRACE_RETURN (false); 637 && c->check_array (arrayZ, USHORT::static_size * closure->stride, len))) return TRACE_RETURN (false);
638 638
639 unsigned int count = len; 639 unsigned int count = len;
640 PairValueRecord *record = CastP<PairValueRecord> (array); 640 PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
641 return TRACE_RETURN (closure->valueFormats[0].sanitize_values_stride_unsafe (c, closure->base, &record->values[0], count, closure->stride) 641 return TRACE_RETURN (closure->valueFormats[0].sanitize_values_stride_unsafe (c, closure->base, &record->values[0], count, closure->stride)
642 && closure->valueFormats[1].sanitize_values_stride_unsafe (c, closure->base, &record->values[closure->len1], count, closure->stride)); 642 && closure->valueFormats[1].sanitize_values_stride_unsafe (c, closure->base, &record->values[closure->len1], count, closure->stride));
643 } 643 }
644 644
645 protected: 645 protected:
646 USHORT len; /* Number of PairValueRecords */ 646 USHORT len; /* Number of PairValueRecords */
647 USHORT» array[VAR];» » /* Array of PairValueRecords--ordered 647 USHORT» arrayZ[VAR];» » /* Array of PairValueRecords--ordered
648 * by GlyphID of the second glyph */ 648 * by GlyphID of the second glyph */
649 public: 649 public:
650 DEFINE_SIZE_ARRAY (2, array); 650 DEFINE_SIZE_ARRAY (2, arrayZ);
651 }; 651 };
652 652
653 struct PairPosFormat1 653 struct PairPosFormat1
654 { 654 {
655 inline void collect_glyphs (hb_collect_glyphs_context_t *c) const 655 inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
656 { 656 {
657 TRACE_COLLECT_GLYPHS (this); 657 TRACE_COLLECT_GLYPHS (this);
658 (this+coverage).add_coverage (c->input); 658 (this+coverage).add_coverage (c->input);
659 unsigned int count = pairSet.len; 659 unsigned int count = pairSet.len;
660 for (unsigned int i = 0; i < count; i++) 660 for (unsigned int i = 0; i < count; i++)
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 * Each entry has value1 and value2 */ 815 * Each entry has value1 and value2 */
816 public: 816 public:
817 DEFINE_SIZE_ARRAY (16, values); 817 DEFINE_SIZE_ARRAY (16, values);
818 }; 818 };
819 819
820 struct PairPos 820 struct PairPos
821 { 821 {
822 template <typename context_t> 822 template <typename context_t>
823 inline typename context_t::return_t dispatch (context_t *c) const 823 inline typename context_t::return_t dispatch (context_t *c) const
824 { 824 {
825 TRACE_DISPATCH (this); 825 TRACE_DISPATCH (this, u.format);
826 switch (u.format) { 826 switch (u.format) {
827 case 1: return TRACE_RETURN (c->dispatch (u.format1)); 827 case 1: return TRACE_RETURN (c->dispatch (u.format1));
828 case 2: return TRACE_RETURN (c->dispatch (u.format2)); 828 case 2: return TRACE_RETURN (c->dispatch (u.format2));
829 default:return TRACE_RETURN (c->default_return_value ()); 829 default:return TRACE_RETURN (c->default_return_value ());
830 } 830 }
831 } 831 }
832 832
833 inline bool sanitize (hb_sanitize_context_t *c) { 833 inline bool sanitize (hb_sanitize_context_t *c) {
834 TRACE_SANITIZE (this); 834 TRACE_SANITIZE (this);
835 if (!u.format.sanitize (c)) return TRACE_RETURN (false); 835 if (!u.format.sanitize (c)) return TRACE_RETURN (false);
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 * Coverage Index order */ 982 * Coverage Index order */
983 public: 983 public:
984 DEFINE_SIZE_ARRAY (6, entryExitRecord); 984 DEFINE_SIZE_ARRAY (6, entryExitRecord);
985 }; 985 };
986 986
987 struct CursivePos 987 struct CursivePos
988 { 988 {
989 template <typename context_t> 989 template <typename context_t>
990 inline typename context_t::return_t dispatch (context_t *c) const 990 inline typename context_t::return_t dispatch (context_t *c) const
991 { 991 {
992 TRACE_DISPATCH (this); 992 TRACE_DISPATCH (this, u.format);
993 switch (u.format) { 993 switch (u.format) {
994 case 1: return TRACE_RETURN (c->dispatch (u.format1)); 994 case 1: return TRACE_RETURN (c->dispatch (u.format1));
995 default:return TRACE_RETURN (c->default_return_value ()); 995 default:return TRACE_RETURN (c->default_return_value ());
996 } 996 }
997 } 997 }
998 998
999 inline bool sanitize (hb_sanitize_context_t *c) { 999 inline bool sanitize (hb_sanitize_context_t *c) {
1000 TRACE_SANITIZE (this); 1000 TRACE_SANITIZE (this);
1001 if (!u.format.sanitize (c)) return TRACE_RETURN (false); 1001 if (!u.format.sanitize (c)) return TRACE_RETURN (false);
1002 switch (u.format) { 1002 switch (u.format) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 * beginning of MarkBasePos subtable */ 1081 * beginning of MarkBasePos subtable */
1082 public: 1082 public:
1083 DEFINE_SIZE_STATIC (12); 1083 DEFINE_SIZE_STATIC (12);
1084 }; 1084 };
1085 1085
1086 struct MarkBasePos 1086 struct MarkBasePos
1087 { 1087 {
1088 template <typename context_t> 1088 template <typename context_t>
1089 inline typename context_t::return_t dispatch (context_t *c) const 1089 inline typename context_t::return_t dispatch (context_t *c) const
1090 { 1090 {
1091 TRACE_DISPATCH (this); 1091 TRACE_DISPATCH (this, u.format);
1092 switch (u.format) { 1092 switch (u.format) {
1093 case 1: return TRACE_RETURN (c->dispatch (u.format1)); 1093 case 1: return TRACE_RETURN (c->dispatch (u.format1));
1094 default:return TRACE_RETURN (c->default_return_value ()); 1094 default:return TRACE_RETURN (c->default_return_value ());
1095 } 1095 }
1096 } 1096 }
1097 1097
1098 inline bool sanitize (hb_sanitize_context_t *c) { 1098 inline bool sanitize (hb_sanitize_context_t *c) {
1099 TRACE_SANITIZE (this); 1099 TRACE_SANITIZE (this);
1100 if (!u.format.sanitize (c)) return TRACE_RETURN (false); 1100 if (!u.format.sanitize (c)) return TRACE_RETURN (false);
1101 switch (u.format) { 1101 switch (u.format) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 * beginning of MarkLigPos subtable */ 1202 * beginning of MarkLigPos subtable */
1203 public: 1203 public:
1204 DEFINE_SIZE_STATIC (12); 1204 DEFINE_SIZE_STATIC (12);
1205 }; 1205 };
1206 1206
1207 struct MarkLigPos 1207 struct MarkLigPos
1208 { 1208 {
1209 template <typename context_t> 1209 template <typename context_t>
1210 inline typename context_t::return_t dispatch (context_t *c) const 1210 inline typename context_t::return_t dispatch (context_t *c) const
1211 { 1211 {
1212 TRACE_DISPATCH (this); 1212 TRACE_DISPATCH (this, u.format);
1213 switch (u.format) { 1213 switch (u.format) {
1214 case 1: return TRACE_RETURN (c->dispatch (u.format1)); 1214 case 1: return TRACE_RETURN (c->dispatch (u.format1));
1215 default:return TRACE_RETURN (c->default_return_value ()); 1215 default:return TRACE_RETURN (c->default_return_value ());
1216 } 1216 }
1217 } 1217 }
1218 1218
1219 inline bool sanitize (hb_sanitize_context_t *c) { 1219 inline bool sanitize (hb_sanitize_context_t *c) {
1220 TRACE_SANITIZE (this); 1220 TRACE_SANITIZE (this);
1221 if (!u.format.sanitize (c)) return TRACE_RETURN (false); 1221 if (!u.format.sanitize (c)) return TRACE_RETURN (false);
1222 switch (u.format) { 1222 switch (u.format) {
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 * beginning of MarkMarkPos subtable */ 1321 * beginning of MarkMarkPos subtable */
1322 public: 1322 public:
1323 DEFINE_SIZE_STATIC (12); 1323 DEFINE_SIZE_STATIC (12);
1324 }; 1324 };
1325 1325
1326 struct MarkMarkPos 1326 struct MarkMarkPos
1327 { 1327 {
1328 template <typename context_t> 1328 template <typename context_t>
1329 inline typename context_t::return_t dispatch (context_t *c) const 1329 inline typename context_t::return_t dispatch (context_t *c) const
1330 { 1330 {
1331 TRACE_DISPATCH (this); 1331 TRACE_DISPATCH (this, u.format);
1332 switch (u.format) { 1332 switch (u.format) {
1333 case 1: return TRACE_RETURN (c->dispatch (u.format1)); 1333 case 1: return TRACE_RETURN (c->dispatch (u.format1));
1334 default:return TRACE_RETURN (c->default_return_value ()); 1334 default:return TRACE_RETURN (c->default_return_value ());
1335 } 1335 }
1336 } 1336 }
1337 1337
1338 inline bool sanitize (hb_sanitize_context_t *c) { 1338 inline bool sanitize (hb_sanitize_context_t *c) {
1339 TRACE_SANITIZE (this); 1339 TRACE_SANITIZE (this);
1340 if (!u.format.sanitize (c)) return TRACE_RETURN (false); 1340 if (!u.format.sanitize (c)) return TRACE_RETURN (false);
1341 switch (u.format) { 1341 switch (u.format) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 MarkLig = 5, 1380 MarkLig = 5,
1381 MarkMark = 6, 1381 MarkMark = 6,
1382 Context = 7, 1382 Context = 7,
1383 ChainContext = 8, 1383 ChainContext = 8,
1384 Extension = 9 1384 Extension = 9
1385 }; 1385 };
1386 1386
1387 template <typename context_t> 1387 template <typename context_t>
1388 inline typename context_t::return_t dispatch (context_t *c, unsigned int looku p_type) const 1388 inline typename context_t::return_t dispatch (context_t *c, unsigned int looku p_type) const
1389 { 1389 {
1390 TRACE_DISPATCH (this); 1390 TRACE_DISPATCH (this, lookup_type);
1391 switch (lookup_type) { 1391 switch (lookup_type) {
1392 case Single: return TRACE_RETURN (u.single.dispatch (c)); 1392 case Single: return TRACE_RETURN (u.single.dispatch (c));
1393 case Pair: return TRACE_RETURN (u.pair.dispatch (c)); 1393 case Pair: return TRACE_RETURN (u.pair.dispatch (c));
1394 case Cursive: return TRACE_RETURN (u.cursive.dispatch (c)); 1394 case Cursive: return TRACE_RETURN (u.cursive.dispatch (c));
1395 case MarkBase: return TRACE_RETURN (u.markBase.dispatch (c)); 1395 case MarkBase: return TRACE_RETURN (u.markBase.dispatch (c));
1396 case MarkLig: return TRACE_RETURN (u.markLig.dispatch (c)); 1396 case MarkLig: return TRACE_RETURN (u.markLig.dispatch (c));
1397 case MarkMark: return TRACE_RETURN (u.markMark.dispatch (c)); 1397 case MarkMark: return TRACE_RETURN (u.markMark.dispatch (c));
1398 case Context: return TRACE_RETURN (u.context.dispatch (c)); 1398 case Context: return TRACE_RETURN (u.context.dispatch (c));
1399 case ChainContext: return TRACE_RETURN (u.chainContext.dispatch (c) ); 1399 case ChainContext: return TRACE_RETURN (u.chainContext.dispatch (c) );
1400 case Extension: return TRACE_RETURN (u.extension.dispatch (c)); 1400 case Extension: return TRACE_RETURN (u.extension.dispatch (c));
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 } 1481 }
1482 1482
1483 static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_ind ex); 1483 static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_ind ex);
1484 1484
1485 template <typename context_t> 1485 template <typename context_t>
1486 static inline typename context_t::return_t dispatch_recurse_func (context_t *c , unsigned int lookup_index); 1486 static inline typename context_t::return_t dispatch_recurse_func (context_t *c , unsigned int lookup_index);
1487 1487
1488 template <typename context_t> 1488 template <typename context_t>
1489 inline typename context_t::return_t dispatch (context_t *c) const 1489 inline typename context_t::return_t dispatch (context_t *c) const
1490 { 1490 {
1491 TRACE_DISPATCH (this);
1492 unsigned int lookup_type = get_type (); 1491 unsigned int lookup_type = get_type ();
1492 TRACE_DISPATCH (this, lookup_type);
1493 unsigned int count = get_subtable_count (); 1493 unsigned int count = get_subtable_count ();
1494 for (unsigned int i = 0; i < count; i++) { 1494 for (unsigned int i = 0; i < count; i++) {
1495 typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type ); 1495 typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type );
1496 if (c->stop_sublookup_iteration (r)) 1496 if (c->stop_sublookup_iteration (r))
1497 return TRACE_RETURN (r); 1497 return TRACE_RETURN (r);
1498 } 1498 }
1499 return TRACE_RETURN (c->default_return_value ()); 1499 return TRACE_RETURN (c->default_return_value ());
1500 } 1500 }
1501 1501
1502 inline bool sanitize (hb_sanitize_context_t *c) { 1502 inline bool sanitize (hb_sanitize_context_t *c) {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1628 1628
1629 1629
1630 #undef attach_lookback 1630 #undef attach_lookback
1631 #undef cursive_chain 1631 #undef cursive_chain
1632 1632
1633 1633
1634 } /* namespace OT */ 1634 } /* namespace OT */
1635 1635
1636 1636
1637 #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */ 1637 #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-ot-hmtx-table.hh ('k') | third_party/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698