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

Side by Side Diff: third_party/harfbuzz-ng/src/hb-ot-layout-common-private.hh

Issue 396393005: Roll HarfBuzz to 0.9.32 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for include order presubmit issue Created 6 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 Red Hat, Inc. 2 * Copyright © 2007,2008,2009 Red Hat, Inc.
3 * Copyright © 2010,2012 Google, Inc. 3 * Copyright © 2010,2012 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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 if (record_count) { 96 if (record_count) {
97 const Record<Type> *arr = this->sub_array (start_offset, record_count); 97 const Record<Type> *arr = this->sub_array (start_offset, record_count);
98 unsigned int count = *record_count; 98 unsigned int count = *record_count;
99 for (unsigned int i = 0; i < count; i++) 99 for (unsigned int i = 0; i < count; i++)
100 record_tags[i] = arr[i].tag; 100 record_tags[i] = arr[i].tag;
101 } 101 }
102 return this->len; 102 return this->len;
103 } 103 }
104 inline bool find_index (hb_tag_t tag, unsigned int *index) const 104 inline bool find_index (hb_tag_t tag, unsigned int *index) const
105 { 105 {
106 int i = this->search (tag); 106 /* If we want to allow non-sorted data, we can lsearch(). */
107 int i = this->/*lsearch*/bsearch (tag);
107 if (i != -1) { 108 if (i != -1) {
108 if (index) *index = i; 109 if (index) *index = i;
109 return true; 110 return true;
110 } else { 111 } else {
111 if (index) *index = Index::NOT_FOUND_INDEX; 112 if (index) *index = Index::NOT_FOUND_INDEX;
112 return false; 113 return false;
113 } 114 }
114 } 115 }
115 }; 116 };
116 117
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 { 183 {
183 inline unsigned int get_feature_count (void) const 184 inline unsigned int get_feature_count (void) const
184 { return featureIndex.len; } 185 { return featureIndex.len; }
185 inline hb_tag_t get_feature_index (unsigned int i) const 186 inline hb_tag_t get_feature_index (unsigned int i) const
186 { return featureIndex[i]; } 187 { return featureIndex[i]; }
187 inline unsigned int get_feature_indexes (unsigned int start_offset, 188 inline unsigned int get_feature_indexes (unsigned int start_offset,
188 unsigned int *feature_count /* IN/OUT */, 189 unsigned int *feature_count /* IN/OUT */,
189 unsigned int *feature_indexes /* OUT */) const 190 unsigned int *feature_indexes /* OUT */) const
190 { return featureIndex.get_indexes (start_offset, feature_count, feature_indexe s); } 191 { return featureIndex.get_indexes (start_offset, feature_count, feature_indexe s); }
191 192
192 inline bool has_required_feature (void) const { return reqFeatureIndex != 0xff ff; } 193 inline bool has_required_feature (void) const { return reqFeatureIndex != 0xFF FFu; }
193 inline unsigned int get_required_feature_index (void) const 194 inline unsigned int get_required_feature_index (void) const
194 { 195 {
195 if (reqFeatureIndex == 0xffff) 196 if (reqFeatureIndex == 0xFFFFu)
196 return Index::NOT_FOUND_INDEX; 197 return Index::NOT_FOUND_INDEX;
197 return reqFeatureIndex;; 198 return reqFeatureIndex;;
198 } 199 }
199 200
200 inline bool sanitize (hb_sanitize_context_t *c, 201 inline bool sanitize (hb_sanitize_context_t *c,
201 const Record<LangSys>::sanitize_closure_t * = NULL) { 202 const Record<LangSys>::sanitize_closure_t * = NULL) {
202 TRACE_SANITIZE (this); 203 TRACE_SANITIZE (this);
203 return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c)); 204 return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c));
204 } 205 }
205 206
206 Offset» lookupOrder;» /* = Null (reserved for an offset to a 207 Offset<>» lookupOrderZ;» /* = Null (reserved for an offset to a
207 * reordering table) */ 208 * reordering table) */
208 USHORT reqFeatureIndex;/* Index of a feature required for this 209 USHORT reqFeatureIndex;/* Index of a feature required for this
209 * language system--if no required features 210 * language system--if no required features
210 » » » » * = 0xFFFF */ 211 » » » » * = 0xFFFFu */
211 IndexArray featureIndex; /* Array of indices into the FeatureList */ 212 IndexArray featureIndex; /* Array of indices into the FeatureList */
212 public: 213 public:
213 DEFINE_SIZE_ARRAY (6, featureIndex); 214 DEFINE_SIZE_ARRAY (6, featureIndex);
214 }; 215 };
215 DEFINE_NULL_DATA (LangSys, "\0\0\xFF\xFF"); 216 DEFINE_NULL_DATA (LangSys, "\0\0\xFF\xFF");
216 217
217 218
218 struct Script 219 struct Script
219 { 220 {
220 inline unsigned int get_lang_sys_count (void) const 221 inline unsigned int get_lang_sys_count (void) const
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 public: 441 public:
441 DEFINE_SIZE_ARRAY (14, characters); 442 DEFINE_SIZE_ARRAY (14, characters);
442 }; 443 };
443 444
444 struct FeatureParams 445 struct FeatureParams
445 { 446 {
446 inline bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) { 447 inline bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) {
447 TRACE_SANITIZE (this); 448 TRACE_SANITIZE (this);
448 if (tag == HB_TAG ('s','i','z','e')) 449 if (tag == HB_TAG ('s','i','z','e'))
449 return TRACE_RETURN (u.size.sanitize (c)); 450 return TRACE_RETURN (u.size.sanitize (c));
450 if ((tag & 0xFFFF0000) == HB_TAG ('s','s','\0','\0')) /* ssXX */ 451 if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
451 return TRACE_RETURN (u.stylisticSet.sanitize (c)); 452 return TRACE_RETURN (u.stylisticSet.sanitize (c));
452 if ((tag & 0xFFFF0000) == HB_TAG ('c','v','\0','\0')) /* cvXX */ 453 if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
453 return TRACE_RETURN (u.characterVariants.sanitize (c)); 454 return TRACE_RETURN (u.characterVariants.sanitize (c));
454 return TRACE_RETURN (true); 455 return TRACE_RETURN (true);
455 } 456 }
456 457
457 inline const FeatureParamsSize& get_size_params (hb_tag_t tag) const 458 inline const FeatureParamsSize& get_size_params (hb_tag_t tag) const
458 { 459 {
459 if (tag == HB_TAG ('s','i','z','e')) 460 if (tag == HB_TAG ('s','i','z','e'))
460 return u.size; 461 return u.size;
461 return Null(FeatureParamsSize); 462 return Null(FeatureParamsSize);
462 } 463 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 * FeatureParams subtable from the beginning of the FeatureList table! 495 * FeatureParams subtable from the beginning of the FeatureList table!
495 * 496 *
496 * If sanitizing "failed" for the FeatureParams subtable, try it with the 497 * If sanitizing "failed" for the FeatureParams subtable, try it with the
497 * alternative location. We would know sanitize "failed" if old value 498 * alternative location. We would know sanitize "failed" if old value
498 * of the offset was non-zero, but it's zeroed now. 499 * of the offset was non-zero, but it's zeroed now.
499 * 500 *
500 * Only do this for the 'size' feature, since at the time of the faulty 501 * Only do this for the 'size' feature, since at the time of the faulty
501 * Adobe tools, only the 'size' feature had FeatureParams defined. 502 * Adobe tools, only the 'size' feature had FeatureParams defined.
502 */ 503 */
503 504
504 Offset orig_offset = featureParams; 505 OffsetTo<FeatureParams> orig_offset = featureParams;
505 if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_ TAG_NONE))) 506 if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_ TAG_NONE)))
506 return TRACE_RETURN (false); 507 return TRACE_RETURN (false);
507 508
508 if (likely (!orig_offset)) 509 if (likely (orig_offset.is_null ()))
509 return TRACE_RETURN (true); 510 return TRACE_RETURN (true);
510 511
511 if (featureParams == 0 && closure && 512 if (featureParams == 0 && closure &&
512 closure->tag == HB_TAG ('s','i','z','e') && 513 closure->tag == HB_TAG ('s','i','z','e') &&
513 closure->list_base && closure->list_base < this) 514 closure->list_base && closure->list_base < this)
514 { 515 {
515 unsigned int new_offset_int = (unsigned int) orig_offset - 516 unsigned int new_offset_int = (unsigned int) orig_offset -
516 » » » » ((char *) this - (char *) closure->list_base ); 517 » » » » (((char *) this) - ((char *) closure->list_b ase));
517 518
518 Offset new_offset; 519 OffsetTo<FeatureParams> new_offset;
519 /* Check that it did not overflow. */ 520 /* Check that it did not overflow. */
520 new_offset.set (new_offset_int); 521 new_offset.set (new_offset_int);
521 if (new_offset == new_offset_int && 522 if (new_offset == new_offset_int &&
522 » featureParams.try_set (c, new_offset) && 523 » c->try_set (&featureParams, new_offset) &&
523 !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE )) 524 !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE ))
524 return TRACE_RETURN (false); 525 return TRACE_RETURN (false);
525 } 526 }
526 527
527 return TRACE_RETURN (true); 528 return TRACE_RETURN (true);
528 } 529 }
529 530
530 OffsetTo<FeatureParams> 531 OffsetTo<FeatureParams>
531 featureParams; /* Offset to Feature Parameters table (if one 532 featureParams; /* Offset to Feature Parameters table (if one
532 * has been defined for the feature), relative 533 * has been defined for the feature), relative
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 } 578 }
578 579
579 inline bool serialize (hb_serialize_context_t *c, 580 inline bool serialize (hb_serialize_context_t *c,
580 unsigned int lookup_type, 581 unsigned int lookup_type,
581 uint32_t lookup_props, 582 uint32_t lookup_props,
582 unsigned int num_subtables) 583 unsigned int num_subtables)
583 { 584 {
584 TRACE_SERIALIZE (this); 585 TRACE_SERIALIZE (this);
585 if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false); 586 if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
586 lookupType.set (lookup_type); 587 lookupType.set (lookup_type);
587 lookupFlag.set (lookup_props & 0xFFFF); 588 lookupFlag.set (lookup_props & 0xFFFFu);
588 if (unlikely (!subTable.serialize (c, num_subtables))) return TRACE_RETURN ( false); 589 if (unlikely (!subTable.serialize (c, num_subtables))) return TRACE_RETURN ( false);
589 if (lookupFlag & LookupFlag::UseMarkFilteringSet) 590 if (lookupFlag & LookupFlag::UseMarkFilteringSet)
590 { 591 {
591 USHORT &markFilteringSet = StructAfter<USHORT> (subTable); 592 USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
592 markFilteringSet.set (lookup_props >> 16); 593 markFilteringSet.set (lookup_props >> 16);
593 } 594 }
594 return TRACE_RETURN (true); 595 return TRACE_RETURN (true);
595 } 596 }
596 597
597 inline bool sanitize (hb_sanitize_context_t *c) { 598 inline bool sanitize (hb_sanitize_context_t *c) {
598 TRACE_SANITIZE (this); 599 TRACE_SANITIZE (this);
599 /* Real sanitize of the subtables is done by GSUB/GPOS/... */ 600 /* Real sanitize of the subtables is done by GSUB/GPOS/... */
600 if (!(c->check_struct (this) && subTable.sanitize (c))) return TRACE_RETURN (false); 601 if (!(c->check_struct (this) && subTable.sanitize (c))) return TRACE_RETURN (false);
601 if (lookupFlag & LookupFlag::UseMarkFilteringSet) 602 if (lookupFlag & LookupFlag::UseMarkFilteringSet)
602 { 603 {
603 USHORT &markFilteringSet = StructAfter<USHORT> (subTable); 604 USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
604 if (!markFilteringSet.sanitize (c)) return TRACE_RETURN (false); 605 if (!markFilteringSet.sanitize (c)) return TRACE_RETURN (false);
605 } 606 }
606 return TRACE_RETURN (true); 607 return TRACE_RETURN (true);
607 } 608 }
608 609
609 USHORT lookupType; /* Different enumerations for GSUB and G POS */ 610 USHORT lookupType; /* Different enumerations for GSUB and G POS */
610 USHORT lookupFlag; /* Lookup qualifiers */ 611 USHORT lookupFlag; /* Lookup qualifiers */
611 ArrayOf<Offset> 612 ArrayOf<Offset<> >
612 subTable; /* Array of SubTables */ 613 subTable; /* Array of SubTables */
613 USHORT markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph s ets 614 USHORT markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph s ets
614 * structure. This field is only present if bit 615 * structure. This field is only present if bit
615 * UseMarkFilteringSet of lookup flags i s set. */ 616 * UseMarkFilteringSet of lookup flags i s set. */
616 public: 617 public:
617 DEFINE_SIZE_ARRAY2 (6, subTable, markFilteringSetX); 618 DEFINE_SIZE_ARRAY2 (6, subTable, markFilteringSetX);
618 }; 619 };
619 620
620 typedef OffsetListOf<Lookup> LookupList; 621 typedef OffsetListOf<Lookup> LookupList;
621 622
622 623
623 /* 624 /*
624 * Coverage Table 625 * Coverage Table
625 */ 626 */
626 627
627 struct CoverageFormat1 628 struct CoverageFormat1
628 { 629 {
629 friend struct Coverage; 630 friend struct Coverage;
630 631
631 private: 632 private:
632 inline unsigned int get_coverage (hb_codepoint_t glyph_id) const 633 inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
633 { 634 {
634 int i = glyphArray.search (glyph_id); 635 int i = glyphArray.bsearch (glyph_id);
635 ASSERT_STATIC (((unsigned int) -1) == NOT_COVERED); 636 ASSERT_STATIC (((unsigned int) -1) == NOT_COVERED);
636 return i; 637 return i;
637 } 638 }
638 639
639 inline bool serialize (hb_serialize_context_t *c, 640 inline bool serialize (hb_serialize_context_t *c,
640 Supplier<GlyphID> &glyphs, 641 Supplier<GlyphID> &glyphs,
641 unsigned int num_glyphs) 642 unsigned int num_glyphs)
642 { 643 {
643 TRACE_SERIALIZE (this); 644 TRACE_SERIALIZE (this);
644 if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false); 645 if (unlikely (!c->extend_min (*this))) return TRACE_RETURN (false);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 DEFINE_SIZE_ARRAY (4, glyphArray); 690 DEFINE_SIZE_ARRAY (4, glyphArray);
690 }; 691 };
691 692
692 struct CoverageFormat2 693 struct CoverageFormat2
693 { 694 {
694 friend struct Coverage; 695 friend struct Coverage;
695 696
696 private: 697 private:
697 inline unsigned int get_coverage (hb_codepoint_t glyph_id) const 698 inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
698 { 699 {
699 int i = rangeRecord.search (glyph_id); 700 int i = rangeRecord.bsearch (glyph_id);
700 if (i != -1) { 701 if (i != -1) {
701 const RangeRecord &range = rangeRecord[i]; 702 const RangeRecord &range = rangeRecord[i];
702 return (unsigned int) range.value + (glyph_id - range.start); 703 return (unsigned int) range.value + (glyph_id - range.start);
703 } 704 }
704 return NOT_COVERED; 705 return NOT_COVERED;
705 } 706 }
706 707
707 inline bool serialize (hb_serialize_context_t *c, 708 inline bool serialize (hb_serialize_context_t *c,
708 Supplier<GlyphID> &glyphs, 709 Supplier<GlyphID> &glyphs,
709 unsigned int num_glyphs) 710 unsigned int num_glyphs)
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 DEFINE_SIZE_ARRAY (6, classValue); 986 DEFINE_SIZE_ARRAY (6, classValue);
986 }; 987 };
987 988
988 struct ClassDefFormat2 989 struct ClassDefFormat2
989 { 990 {
990 friend struct ClassDef; 991 friend struct ClassDef;
991 992
992 private: 993 private:
993 inline unsigned int get_class (hb_codepoint_t glyph_id) const 994 inline unsigned int get_class (hb_codepoint_t glyph_id) const
994 { 995 {
995 int i = rangeRecord.search (glyph_id); 996 int i = rangeRecord.bsearch (glyph_id);
996 if (i != -1) 997 if (i != -1)
997 return rangeRecord[i].value; 998 return rangeRecord[i].value;
998 return 0; 999 return 0;
999 } 1000 }
1000 1001
1001 inline bool sanitize (hb_sanitize_context_t *c) { 1002 inline bool sanitize (hb_sanitize_context_t *c) {
1002 TRACE_SANITIZE (this); 1003 TRACE_SANITIZE (this);
1003 return TRACE_RETURN (rangeRecord.sanitize (c)); 1004 return TRACE_RETURN (rangeRecord.sanitize (c));
1004 } 1005 }
1005 1006
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 if (unlikely (f < 1 || f > 3)) 1124 if (unlikely (f < 1 || f > 3))
1124 return 0; 1125 return 0;
1125 1126
1126 if (ppem_size < startSize || ppem_size > endSize) 1127 if (ppem_size < startSize || ppem_size > endSize)
1127 return 0; 1128 return 0;
1128 1129
1129 unsigned int s = ppem_size - startSize; 1130 unsigned int s = ppem_size - startSize;
1130 1131
1131 unsigned int byte = deltaValue[s >> (4 - f)]; 1132 unsigned int byte = deltaValue[s >> (4 - f)];
1132 unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f))) ; 1133 unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f))) ;
1133 unsigned int mask = (0xFFFF >> (16 - (1 << f))); 1134 unsigned int mask = (0xFFFFu >> (16 - (1 << f)));
1134 1135
1135 int delta = bits & mask; 1136 int delta = bits & mask;
1136 1137
1137 if ((unsigned int) delta >= ((mask + 1) >> 1)) 1138 if ((unsigned int) delta >= ((mask + 1) >> 1))
1138 delta -= mask + 1; 1139 delta -= mask + 1;
1139 1140
1140 return delta; 1141 return delta;
1141 } 1142 }
1142 1143
1143 inline unsigned int get_size (void) const 1144 inline unsigned int get_size (void) const
(...skipping 19 matching lines...) Expand all
1163 USHORT deltaValue[VAR]; /* Array of compressed data */ 1164 USHORT deltaValue[VAR]; /* Array of compressed data */
1164 public: 1165 public:
1165 DEFINE_SIZE_ARRAY (6, deltaValue); 1166 DEFINE_SIZE_ARRAY (6, deltaValue);
1166 }; 1167 };
1167 1168
1168 1169
1169 } /* namespace OT */ 1170 } /* namespace OT */
1170 1171
1171 1172
1172 #endif /* HB_OT_LAYOUT_COMMON_PRIVATE_HH */ 1173 #endif /* HB_OT_LAYOUT_COMMON_PRIVATE_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-gdef-table.hh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698