| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright © 2014 Google, Inc. | 2 * Copyright © 2014 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 hb_codepoint_t gid = codepoint < 256 ? glyphIdArray[codepoint] : 0; | 47 hb_codepoint_t gid = codepoint < 256 ? glyphIdArray[codepoint] : 0; |
| 48 if (!gid) | 48 if (!gid) |
| 49 return false; | 49 return false; |
| 50 *glyph = gid; | 50 *glyph = gid; |
| 51 return true; | 51 return true; |
| 52 } | 52 } |
| 53 | 53 |
| 54 inline bool sanitize (hb_sanitize_context_t *c) const | 54 inline bool sanitize (hb_sanitize_context_t *c) const |
| 55 { | 55 { |
| 56 TRACE_SANITIZE (this); | 56 TRACE_SANITIZE (this); |
| 57 return TRACE_RETURN (c->check_struct (this)); | 57 return_trace (c->check_struct (this)); |
| 58 } | 58 } |
| 59 | 59 |
| 60 protected: | 60 protected: |
| 61 USHORT format; /* Format number is set to 0. */ | 61 USHORT format; /* Format number is set to 0. */ |
| 62 USHORT lengthZ; /* Byte length of this subtable. */ | 62 USHORT lengthZ; /* Byte length of this subtable. */ |
| 63 USHORT languageZ; /* Ignore. */ | 63 USHORT languageZ; /* Ignore. */ |
| 64 BYTE glyphIdArray[256];/* An array that maps character | 64 BYTE glyphIdArray[256];/* An array that maps character |
| 65 * code to glyph index values. */ | 65 * code to glyph index values. */ |
| 66 public: | 66 public: |
| 67 DEFINE_SIZE_STATIC (6 + 256); | 67 DEFINE_SIZE_STATIC (6 + 256); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 } | 123 } |
| 124 | 124 |
| 125 *glyph = gid & 0xFFFFu; | 125 *glyph = gid & 0xFFFFu; |
| 126 return true; | 126 return true; |
| 127 } | 127 } |
| 128 | 128 |
| 129 inline bool sanitize (hb_sanitize_context_t *c) const | 129 inline bool sanitize (hb_sanitize_context_t *c) const |
| 130 { | 130 { |
| 131 TRACE_SANITIZE (this); | 131 TRACE_SANITIZE (this); |
| 132 if (unlikely (!c->check_struct (this))) | 132 if (unlikely (!c->check_struct (this))) |
| 133 return TRACE_RETURN (false); | 133 return_trace (false); |
| 134 | 134 |
| 135 if (unlikely (!c->check_range (this, length))) | 135 if (unlikely (!c->check_range (this, length))) |
| 136 { | 136 { |
| 137 /* Some broken fonts have too long of a "length" value. | 137 /* Some broken fonts have too long of a "length" value. |
| 138 * If that is the case, just change the value to truncate | 138 * If that is the case, just change the value to truncate |
| 139 * the subtable at the end of the blob. */ | 139 * the subtable at the end of the blob. */ |
| 140 uint16_t new_length = (uint16_t) MIN ((uintptr_t) 65535, | 140 uint16_t new_length = (uint16_t) MIN ((uintptr_t) 65535, |
| 141 (uintptr_t) (c->end - | 141 (uintptr_t) (c->end - |
| 142 (char *) this)); | 142 (char *) this)); |
| 143 if (!c->try_set (&length, new_length)) | 143 if (!c->try_set (&length, new_length)) |
| 144 » return TRACE_RETURN (false); | 144 » return_trace (false); |
| 145 } | 145 } |
| 146 | 146 |
| 147 return TRACE_RETURN (16 + 4 * (unsigned int) segCountX2 <= length); | 147 return_trace (16 + 4 * (unsigned int) segCountX2 <= length); |
| 148 } | 148 } |
| 149 | 149 |
| 150 protected: | 150 protected: |
| 151 USHORT format; /* Format number is set to 4. */ | 151 USHORT format; /* Format number is set to 4. */ |
| 152 USHORT length; /* This is the length in bytes of the | 152 USHORT length; /* This is the length in bytes of the |
| 153 * subtable. */ | 153 * subtable. */ |
| 154 USHORT languageZ; /* Ignore. */ | 154 USHORT languageZ; /* Ignore. */ |
| 155 USHORT segCountX2; /* 2 x segCount. */ | 155 USHORT segCountX2; /* 2 x segCount. */ |
| 156 USHORT searchRangeZ; /* 2 * (2**floor(log2(segCount))) */ | 156 USHORT searchRangeZ; /* 2 * (2**floor(log2(segCount))) */ |
| 157 USHORT entrySelectorZ; /* log2(searchRange/2) */ | 157 USHORT entrySelectorZ; /* log2(searchRange/2) */ |
| (...skipping 22 matching lines...) Expand all Loading... |
| 180 int cmp (hb_codepoint_t codepoint) const | 180 int cmp (hb_codepoint_t codepoint) const |
| 181 { | 181 { |
| 182 if (codepoint < startCharCode) return -1; | 182 if (codepoint < startCharCode) return -1; |
| 183 if (codepoint > endCharCode) return +1; | 183 if (codepoint > endCharCode) return +1; |
| 184 return 0; | 184 return 0; |
| 185 } | 185 } |
| 186 | 186 |
| 187 inline bool sanitize (hb_sanitize_context_t *c) const | 187 inline bool sanitize (hb_sanitize_context_t *c) const |
| 188 { | 188 { |
| 189 TRACE_SANITIZE (this); | 189 TRACE_SANITIZE (this); |
| 190 return TRACE_RETURN (c->check_struct (this)); | 190 return_trace (c->check_struct (this)); |
| 191 } | 191 } |
| 192 | 192 |
| 193 private: | 193 private: |
| 194 ULONG startCharCode; /* First character code in this group. */ | 194 ULONG startCharCode; /* First character code in this group. */ |
| 195 ULONG endCharCode; /* Last character code in this group. */ | 195 ULONG endCharCode; /* Last character code in this group. */ |
| 196 ULONG glyphID; /* Glyph index; interpretation depends on | 196 ULONG glyphID; /* Glyph index; interpretation depends on |
| 197 * subtable format. */ | 197 * subtable format. */ |
| 198 public: | 198 public: |
| 199 DEFINE_SIZE_STATIC (12); | 199 DEFINE_SIZE_STATIC (12); |
| 200 }; | 200 }; |
| 201 | 201 |
| 202 template <typename UINT> | 202 template <typename UINT> |
| 203 struct CmapSubtableTrimmed | 203 struct CmapSubtableTrimmed |
| 204 { | 204 { |
| 205 inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const | 205 inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const |
| 206 { | 206 { |
| 207 /* Rely on our implicit array bound-checking. */ | 207 /* Rely on our implicit array bound-checking. */ |
| 208 hb_codepoint_t gid = glyphIdArray[codepoint - startCharCode]; | 208 hb_codepoint_t gid = glyphIdArray[codepoint - startCharCode]; |
| 209 if (!gid) | 209 if (!gid) |
| 210 return false; | 210 return false; |
| 211 *glyph = gid; | 211 *glyph = gid; |
| 212 return true; | 212 return true; |
| 213 } | 213 } |
| 214 | 214 |
| 215 inline bool sanitize (hb_sanitize_context_t *c) const | 215 inline bool sanitize (hb_sanitize_context_t *c) const |
| 216 { | 216 { |
| 217 TRACE_SANITIZE (this); | 217 TRACE_SANITIZE (this); |
| 218 return TRACE_RETURN (c->check_struct (this) && glyphIdArray.sanitize (c)); | 218 return_trace (c->check_struct (this) && glyphIdArray.sanitize (c)); |
| 219 } | 219 } |
| 220 | 220 |
| 221 protected: | 221 protected: |
| 222 UINT formatReserved; /* Subtable format and (maybe) padding. */ | 222 UINT formatReserved; /* Subtable format and (maybe) padding. */ |
| 223 UINT lengthZ; /* Byte length of this subtable. */ | 223 UINT lengthZ; /* Byte length of this subtable. */ |
| 224 UINT languageZ; /* Ignore. */ | 224 UINT languageZ; /* Ignore. */ |
| 225 UINT startCharCode; /* First character code covered. */ | 225 UINT startCharCode; /* First character code covered. */ |
| 226 ArrayOf<GlyphID, UINT> | 226 ArrayOf<GlyphID, UINT> |
| 227 glyphIdArray; /* Array of glyph index values for character | 227 glyphIdArray; /* Array of glyph index values for character |
| 228 * codes in the range. */ | 228 * codes in the range. */ |
| (...skipping 12 matching lines...) Expand all Loading... |
| 241 int i = groups.bsearch (codepoint); | 241 int i = groups.bsearch (codepoint); |
| 242 if (i == -1) | 242 if (i == -1) |
| 243 return false; | 243 return false; |
| 244 *glyph = T::group_get_glyph (groups[i], codepoint); | 244 *glyph = T::group_get_glyph (groups[i], codepoint); |
| 245 return true; | 245 return true; |
| 246 } | 246 } |
| 247 | 247 |
| 248 inline bool sanitize (hb_sanitize_context_t *c) const | 248 inline bool sanitize (hb_sanitize_context_t *c) const |
| 249 { | 249 { |
| 250 TRACE_SANITIZE (this); | 250 TRACE_SANITIZE (this); |
| 251 return TRACE_RETURN (c->check_struct (this) && groups.sanitize (c)); | 251 return_trace (c->check_struct (this) && groups.sanitize (c)); |
| 252 } | 252 } |
| 253 | 253 |
| 254 protected: | 254 protected: |
| 255 USHORT format; /* Subtable format; set to 12. */ | 255 USHORT format; /* Subtable format; set to 12. */ |
| 256 USHORT reservedZ; /* Reserved; set to 0. */ | 256 USHORT reservedZ; /* Reserved; set to 0. */ |
| 257 ULONG lengthZ; /* Byte length of this subtable. */ | 257 ULONG lengthZ; /* Byte length of this subtable. */ |
| 258 ULONG languageZ; /* Ignore. */ | 258 ULONG languageZ; /* Ignore. */ |
| 259 SortedArrayOf<CmapSubtableLongGroup, ULONG> | 259 SortedArrayOf<CmapSubtableLongGroup, ULONG> |
| 260 groups; /* Groupings. */ | 260 groups; /* Groupings. */ |
| 261 public: | 261 public: |
| (...skipping 26 matching lines...) Expand all Loading... |
| 288 inline int cmp (const hb_codepoint_t &codepoint) const | 288 inline int cmp (const hb_codepoint_t &codepoint) const |
| 289 { | 289 { |
| 290 if (codepoint < startUnicodeValue) return -1; | 290 if (codepoint < startUnicodeValue) return -1; |
| 291 if (codepoint > startUnicodeValue + additionalCount) return +1; | 291 if (codepoint > startUnicodeValue + additionalCount) return +1; |
| 292 return 0; | 292 return 0; |
| 293 } | 293 } |
| 294 | 294 |
| 295 inline bool sanitize (hb_sanitize_context_t *c) const | 295 inline bool sanitize (hb_sanitize_context_t *c) const |
| 296 { | 296 { |
| 297 TRACE_SANITIZE (this); | 297 TRACE_SANITIZE (this); |
| 298 return TRACE_RETURN (c->check_struct (this)); | 298 return_trace (c->check_struct (this)); |
| 299 } | 299 } |
| 300 | 300 |
| 301 UINT24 startUnicodeValue; /* First value in this range. */ | 301 UINT24 startUnicodeValue; /* First value in this range. */ |
| 302 BYTE additionalCount; /* Number of additional values in this | 302 BYTE additionalCount; /* Number of additional values in this |
| 303 * range. */ | 303 * range. */ |
| 304 public: | 304 public: |
| 305 DEFINE_SIZE_STATIC (4); | 305 DEFINE_SIZE_STATIC (4); |
| 306 }; | 306 }; |
| 307 | 307 |
| 308 typedef SortedArrayOf<UnicodeValueRange, ULONG> DefaultUVS; | 308 typedef SortedArrayOf<UnicodeValueRange, ULONG> DefaultUVS; |
| 309 | 309 |
| 310 struct UVSMapping | 310 struct UVSMapping |
| 311 { | 311 { |
| 312 inline int cmp (const hb_codepoint_t &codepoint) const | 312 inline int cmp (const hb_codepoint_t &codepoint) const |
| 313 { | 313 { |
| 314 return unicodeValue.cmp (codepoint); | 314 return unicodeValue.cmp (codepoint); |
| 315 } | 315 } |
| 316 | 316 |
| 317 inline bool sanitize (hb_sanitize_context_t *c) const | 317 inline bool sanitize (hb_sanitize_context_t *c) const |
| 318 { | 318 { |
| 319 TRACE_SANITIZE (this); | 319 TRACE_SANITIZE (this); |
| 320 return TRACE_RETURN (c->check_struct (this)); | 320 return_trace (c->check_struct (this)); |
| 321 } | 321 } |
| 322 | 322 |
| 323 UINT24 unicodeValue; /* Base Unicode value of the UVS */ | 323 UINT24 unicodeValue; /* Base Unicode value of the UVS */ |
| 324 GlyphID glyphID; /* Glyph ID of the UVS */ | 324 GlyphID glyphID; /* Glyph ID of the UVS */ |
| 325 public: | 325 public: |
| 326 DEFINE_SIZE_STATIC (5); | 326 DEFINE_SIZE_STATIC (5); |
| 327 }; | 327 }; |
| 328 | 328 |
| 329 typedef SortedArrayOf<UVSMapping, ULONG> NonDefaultUVS; | 329 typedef SortedArrayOf<UVSMapping, ULONG> NonDefaultUVS; |
| 330 | 330 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 350 } | 350 } |
| 351 | 351 |
| 352 inline int cmp (const hb_codepoint_t &variation_selector) const | 352 inline int cmp (const hb_codepoint_t &variation_selector) const |
| 353 { | 353 { |
| 354 return varSelector.cmp (variation_selector); | 354 return varSelector.cmp (variation_selector); |
| 355 } | 355 } |
| 356 | 356 |
| 357 inline bool sanitize (hb_sanitize_context_t *c, const void *base) const | 357 inline bool sanitize (hb_sanitize_context_t *c, const void *base) const |
| 358 { | 358 { |
| 359 TRACE_SANITIZE (this); | 359 TRACE_SANITIZE (this); |
| 360 return TRACE_RETURN (c->check_struct (this) && | 360 return_trace (c->check_struct (this) && |
| 361 » » » defaultUVS.sanitize (c, base) && | 361 » » defaultUVS.sanitize (c, base) && |
| 362 » » » nonDefaultUVS.sanitize (c, base)); | 362 » » nonDefaultUVS.sanitize (c, base)); |
| 363 } | 363 } |
| 364 | 364 |
| 365 UINT24 varSelector; /* Variation selector. */ | 365 UINT24 varSelector; /* Variation selector. */ |
| 366 OffsetTo<DefaultUVS, ULONG> | 366 OffsetTo<DefaultUVS, ULONG> |
| 367 defaultUVS; /* Offset to Default UVS Table. May be 0. */ | 367 defaultUVS; /* Offset to Default UVS Table. May be 0. */ |
| 368 OffsetTo<NonDefaultUVS, ULONG> | 368 OffsetTo<NonDefaultUVS, ULONG> |
| 369 nonDefaultUVS; /* Offset to Non-Default UVS Table. May be 0. */ | 369 nonDefaultUVS; /* Offset to Non-Default UVS Table. May be 0. */ |
| 370 public: | 370 public: |
| 371 DEFINE_SIZE_STATIC (11); | 371 DEFINE_SIZE_STATIC (11); |
| 372 }; | 372 }; |
| 373 | 373 |
| 374 struct CmapSubtableFormat14 | 374 struct CmapSubtableFormat14 |
| 375 { | 375 { |
| 376 inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint, | 376 inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint, |
| 377 hb_codepoint_t variation_selector, | 377 hb_codepoint_t variation_selector, |
| 378 hb_codepoint_t *glyph) const | 378 hb_codepoint_t *glyph) const |
| 379 { | 379 { |
| 380 return record[record.bsearch(variation_selector)].get_glyph (codepoint, glyp
h, this); | 380 return record[record.bsearch(variation_selector)].get_glyph (codepoint, glyp
h, this); |
| 381 } | 381 } |
| 382 | 382 |
| 383 inline bool sanitize (hb_sanitize_context_t *c) const | 383 inline bool sanitize (hb_sanitize_context_t *c) const |
| 384 { | 384 { |
| 385 TRACE_SANITIZE (this); | 385 TRACE_SANITIZE (this); |
| 386 return TRACE_RETURN (c->check_struct (this) && | 386 return_trace (c->check_struct (this) && |
| 387 » » » record.sanitize (c, this)); | 387 » » record.sanitize (c, this)); |
| 388 } | 388 } |
| 389 | 389 |
| 390 protected: | 390 protected: |
| 391 USHORT format; /* Format number is set to 0. */ | 391 USHORT format; /* Format number is set to 0. */ |
| 392 ULONG lengthZ; /* Byte length of this subtable. */ | 392 ULONG lengthZ; /* Byte length of this subtable. */ |
| 393 SortedArrayOf<VariationSelectorRecord, ULONG> | 393 SortedArrayOf<VariationSelectorRecord, ULONG> |
| 394 record; /* Variation selector records; sorted | 394 record; /* Variation selector records; sorted |
| 395 * in increasing order of `varSelector'. */ | 395 * in increasing order of `varSelector'. */ |
| 396 public: | 396 public: |
| 397 DEFINE_SIZE_ARRAY (10, record); | 397 DEFINE_SIZE_ARRAY (10, record); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 422 { | 422 { |
| 423 switch (u.format) { | 423 switch (u.format) { |
| 424 case 14: return u.format14.get_glyph_variant(codepoint, variation_selector,
glyph); | 424 case 14: return u.format14.get_glyph_variant(codepoint, variation_selector,
glyph); |
| 425 default: return GLYPH_VARIANT_NOT_FOUND; | 425 default: return GLYPH_VARIANT_NOT_FOUND; |
| 426 } | 426 } |
| 427 } | 427 } |
| 428 | 428 |
| 429 inline bool sanitize (hb_sanitize_context_t *c) const | 429 inline bool sanitize (hb_sanitize_context_t *c) const |
| 430 { | 430 { |
| 431 TRACE_SANITIZE (this); | 431 TRACE_SANITIZE (this); |
| 432 if (!u.format.sanitize (c)) return TRACE_RETURN (false); | 432 if (!u.format.sanitize (c)) return_trace (false); |
| 433 switch (u.format) { | 433 switch (u.format) { |
| 434 case 0: return TRACE_RETURN (u.format0 .sanitize (c)); | 434 case 0: return_trace (u.format0 .sanitize (c)); |
| 435 case 4: return TRACE_RETURN (u.format4 .sanitize (c)); | 435 case 4: return_trace (u.format4 .sanitize (c)); |
| 436 case 6: return TRACE_RETURN (u.format6 .sanitize (c)); | 436 case 6: return_trace (u.format6 .sanitize (c)); |
| 437 case 10: return TRACE_RETURN (u.format10.sanitize (c)); | 437 case 10: return_trace (u.format10.sanitize (c)); |
| 438 case 12: return TRACE_RETURN (u.format12.sanitize (c)); | 438 case 12: return_trace (u.format12.sanitize (c)); |
| 439 case 13: return TRACE_RETURN (u.format13.sanitize (c)); | 439 case 13: return_trace (u.format13.sanitize (c)); |
| 440 case 14: return TRACE_RETURN (u.format14.sanitize (c)); | 440 case 14: return_trace (u.format14.sanitize (c)); |
| 441 default:return TRACE_RETURN (true); | 441 default:return_trace (true); |
| 442 } | 442 } |
| 443 } | 443 } |
| 444 | 444 |
| 445 protected: | 445 protected: |
| 446 union { | 446 union { |
| 447 USHORT format; /* Format identifier */ | 447 USHORT format; /* Format identifier */ |
| 448 CmapSubtableFormat0 format0; | 448 CmapSubtableFormat0 format0; |
| 449 CmapSubtableFormat4 format4; | 449 CmapSubtableFormat4 format4; |
| 450 CmapSubtableFormat6 format6; | 450 CmapSubtableFormat6 format6; |
| 451 CmapSubtableFormat10 format10; | 451 CmapSubtableFormat10 format10; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 466 ret = platformID.cmp (other.platformID); | 466 ret = platformID.cmp (other.platformID); |
| 467 if (ret) return ret; | 467 if (ret) return ret; |
| 468 ret = encodingID.cmp (other.encodingID); | 468 ret = encodingID.cmp (other.encodingID); |
| 469 if (ret) return ret; | 469 if (ret) return ret; |
| 470 return 0; | 470 return 0; |
| 471 } | 471 } |
| 472 | 472 |
| 473 inline bool sanitize (hb_sanitize_context_t *c, const void *base) const | 473 inline bool sanitize (hb_sanitize_context_t *c, const void *base) const |
| 474 { | 474 { |
| 475 TRACE_SANITIZE (this); | 475 TRACE_SANITIZE (this); |
| 476 return TRACE_RETURN (c->check_struct (this) && | 476 return_trace (c->check_struct (this) && |
| 477 » » » subtable.sanitize (c, base)); | 477 » » subtable.sanitize (c, base)); |
| 478 } | 478 } |
| 479 | 479 |
| 480 USHORT platformID; /* Platform ID. */ | 480 USHORT platformID; /* Platform ID. */ |
| 481 USHORT encodingID; /* Platform-specific encoding ID. */ | 481 USHORT encodingID; /* Platform-specific encoding ID. */ |
| 482 OffsetTo<CmapSubtable, ULONG> | 482 OffsetTo<CmapSubtable, ULONG> |
| 483 subtable; /* Byte offset from beginning of table to the su
btable for this encoding. */ | 483 subtable; /* Byte offset from beginning of table to the su
btable for this encoding. */ |
| 484 public: | 484 public: |
| 485 DEFINE_SIZE_STATIC (8); | 485 DEFINE_SIZE_STATIC (8); |
| 486 }; | 486 }; |
| 487 | 487 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 502 int result = encodingRecord./*bsearch*/lsearch (key); | 502 int result = encodingRecord./*bsearch*/lsearch (key); |
| 503 if (result == -1 || !encodingRecord[result].subtable) | 503 if (result == -1 || !encodingRecord[result].subtable) |
| 504 return NULL; | 504 return NULL; |
| 505 | 505 |
| 506 return &(this+encodingRecord[result].subtable); | 506 return &(this+encodingRecord[result].subtable); |
| 507 } | 507 } |
| 508 | 508 |
| 509 inline bool sanitize (hb_sanitize_context_t *c) const | 509 inline bool sanitize (hb_sanitize_context_t *c) const |
| 510 { | 510 { |
| 511 TRACE_SANITIZE (this); | 511 TRACE_SANITIZE (this); |
| 512 return TRACE_RETURN (c->check_struct (this) && | 512 return_trace (c->check_struct (this) && |
| 513 » » » likely (version == 0) && | 513 » » likely (version == 0) && |
| 514 » » » encodingRecord.sanitize (c, this)); | 514 » » encodingRecord.sanitize (c, this)); |
| 515 } | 515 } |
| 516 | 516 |
| 517 USHORT version; /* Table version number (0). */ | 517 USHORT version; /* Table version number (0). */ |
| 518 SortedArrayOf<EncodingRecord> | 518 SortedArrayOf<EncodingRecord> |
| 519 encodingRecord; /* Encoding tables. */ | 519 encodingRecord; /* Encoding tables. */ |
| 520 public: | 520 public: |
| 521 DEFINE_SIZE_ARRAY (4, encodingRecord); | 521 DEFINE_SIZE_ARRAY (4, encodingRecord); |
| 522 }; | 522 }; |
| 523 | 523 |
| 524 | 524 |
| 525 } /* namespace OT */ | 525 } /* namespace OT */ |
| 526 | 526 |
| 527 | 527 |
| 528 #endif /* HB_OT_CMAP_TABLE_HH */ | 528 #endif /* HB_OT_CMAP_TABLE_HH */ |
| OLD | NEW |