OLD | NEW |
1 /***************************************************************************/ | 1 /***************************************************************************/ |
2 /* */ | 2 /* */ |
3 /* ttcmap.c */ | 3 /* ttcmap.c */ |
4 /* */ | 4 /* */ |
5 /* TrueType character mapping table (cmap) support (body). */ | 5 /* TrueType character mapping table (cmap) support (body). */ |
6 /* */ | 6 /* */ |
7 /* Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by */ | 7 /* Copyright 2002-2010, 2012, 2013 by */ |
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ | 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
9 /* */ | 9 /* */ |
10 /* This file is part of the FreeType project, and may only be used, */ | 10 /* This file is part of the FreeType project, and may only be used, */ |
11 /* modified, and distributed under the terms of the FreeType project */ | 11 /* modified, and distributed under the terms of the FreeType project */ |
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ | 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
13 /* this file you indicate that you have read the license and */ | 13 /* this file you indicate that you have read the license and */ |
14 /* understand and accept it fully. */ | 14 /* understand and accept it fully. */ |
15 /* */ | 15 /* */ |
16 /***************************************************************************/ | 16 /***************************************************************************/ |
17 | 17 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 #define TT_NEXT_UINT24 FT_NEXT_UOFF3 | 49 #define TT_NEXT_UINT24 FT_NEXT_UOFF3 |
50 #define TT_NEXT_LONG FT_NEXT_LONG | 50 #define TT_NEXT_LONG FT_NEXT_LONG |
51 #define TT_NEXT_ULONG FT_NEXT_ULONG | 51 #define TT_NEXT_ULONG FT_NEXT_ULONG |
52 | 52 |
53 | 53 |
54 FT_CALLBACK_DEF( FT_Error ) | 54 FT_CALLBACK_DEF( FT_Error ) |
55 tt_cmap_init( TT_CMap cmap, | 55 tt_cmap_init( TT_CMap cmap, |
56 FT_Byte* table ) | 56 FT_Byte* table ) |
57 { | 57 { |
58 cmap->data = table; | 58 cmap->data = table; |
59 return SFNT_Err_Ok; | 59 return FT_Err_Ok; |
60 } | 60 } |
61 | 61 |
62 | 62 |
63 /*************************************************************************/ | 63 /*************************************************************************/ |
64 /*************************************************************************/ | 64 /*************************************************************************/ |
65 /***** *****/ | 65 /***** *****/ |
66 /***** FORMAT 0 *****/ | 66 /***** FORMAT 0 *****/ |
67 /***** *****/ | 67 /***** *****/ |
68 /*************************************************************************/ | 68 /*************************************************************************/ |
69 /*************************************************************************/ | 69 /*************************************************************************/ |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 103 |
104 p = table + 6; | 104 p = table + 6; |
105 for ( n = 0; n < 256; n++ ) | 105 for ( n = 0; n < 256; n++ ) |
106 { | 106 { |
107 idx = *p++; | 107 idx = *p++; |
108 if ( idx >= TT_VALID_GLYPH_COUNT( valid ) ) | 108 if ( idx >= TT_VALID_GLYPH_COUNT( valid ) ) |
109 FT_INVALID_GLYPH_ID; | 109 FT_INVALID_GLYPH_ID; |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 return SFNT_Err_Ok; | 113 return FT_Err_Ok; |
114 } | 114 } |
115 | 115 |
116 | 116 |
117 FT_CALLBACK_DEF( FT_UInt ) | 117 FT_CALLBACK_DEF( FT_UInt ) |
118 tt_cmap0_char_index( TT_CMap cmap, | 118 tt_cmap0_char_index( TT_CMap cmap, |
119 FT_UInt32 char_code ) | 119 FT_UInt32 char_code ) |
120 { | 120 { |
121 FT_Byte* table = cmap->data; | 121 FT_Byte* table = cmap->data; |
122 | 122 |
123 | 123 |
(...skipping 30 matching lines...) Expand all Loading... |
154 FT_CALLBACK_DEF( FT_Error ) | 154 FT_CALLBACK_DEF( FT_Error ) |
155 tt_cmap0_get_info( TT_CMap cmap, | 155 tt_cmap0_get_info( TT_CMap cmap, |
156 TT_CMapInfo *cmap_info ) | 156 TT_CMapInfo *cmap_info ) |
157 { | 157 { |
158 FT_Byte* p = cmap->data + 4; | 158 FT_Byte* p = cmap->data + 4; |
159 | 159 |
160 | 160 |
161 cmap_info->format = 0; | 161 cmap_info->format = 0; |
162 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); | 162 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); |
163 | 163 |
164 return SFNT_Err_Ok; | 164 return FT_Err_Ok; |
165 } | 165 } |
166 | 166 |
167 | 167 |
168 FT_DEFINE_TT_CMAP(tt_cmap0_class_rec, | 168 FT_DEFINE_TT_CMAP( |
169 sizeof ( TT_CMapRec ), | 169 tt_cmap0_class_rec, |
| 170 sizeof ( TT_CMapRec ), |
170 | 171 |
171 (FT_CMap_InitFunc) tt_cmap_init, | 172 (FT_CMap_InitFunc) tt_cmap_init, |
172 (FT_CMap_DoneFunc) NULL, | 173 (FT_CMap_DoneFunc) NULL, |
173 (FT_CMap_CharIndexFunc)tt_cmap0_char_index, | 174 (FT_CMap_CharIndexFunc)tt_cmap0_char_index, |
174 (FT_CMap_CharNextFunc) tt_cmap0_char_next, | 175 (FT_CMap_CharNextFunc) tt_cmap0_char_next, |
175 | 176 |
176 NULL, NULL, NULL, NULL, NULL | 177 NULL, |
177 , | 178 NULL, |
| 179 NULL, |
| 180 NULL, |
| 181 NULL, |
| 182 |
178 0, | 183 0, |
179 (TT_CMap_ValidateFunc) tt_cmap0_validate, | 184 (TT_CMap_ValidateFunc)tt_cmap0_validate, |
180 (TT_CMap_Info_GetFunc) tt_cmap0_get_info | 185 (TT_CMap_Info_GetFunc)tt_cmap0_get_info ) |
181 ) | |
182 | 186 |
183 #endif /* TT_CONFIG_CMAP_FORMAT_0 */ | 187 #endif /* TT_CONFIG_CMAP_FORMAT_0 */ |
184 | 188 |
185 | 189 |
186 /*************************************************************************/ | 190 /*************************************************************************/ |
187 /*************************************************************************/ | 191 /*************************************************************************/ |
188 /***** *****/ | 192 /***** *****/ |
189 /***** FORMAT 2 *****/ | 193 /***** FORMAT 2 *****/ |
190 /***** *****/ | 194 /***** *****/ |
191 /***** This is used for certain CJK encodings that encode text in a *****/ | 195 /***** This is used for certain CJK encodings that encode text in a *****/ |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 { | 362 { |
359 idx = ( idx + delta ) & 0xFFFFU; | 363 idx = ( idx + delta ) & 0xFFFFU; |
360 if ( idx >= TT_VALID_GLYPH_COUNT( valid ) ) | 364 if ( idx >= TT_VALID_GLYPH_COUNT( valid ) ) |
361 FT_INVALID_GLYPH_ID; | 365 FT_INVALID_GLYPH_ID; |
362 } | 366 } |
363 } | 367 } |
364 } | 368 } |
365 } | 369 } |
366 } | 370 } |
367 | 371 |
368 return SFNT_Err_Ok; | 372 return FT_Err_Ok; |
369 } | 373 } |
370 | 374 |
371 | 375 |
372 /* return sub header corresponding to a given character code */ | 376 /* return sub header corresponding to a given character code */ |
373 /* NULL on invalid charcode */ | 377 /* NULL on invalid charcode */ |
374 static FT_Byte* | 378 static FT_Byte* |
375 tt_cmap2_get_subheader( FT_Byte* table, | 379 tt_cmap2_get_subheader( FT_Byte* table, |
376 FT_UInt32 char_code ) | 380 FT_UInt32 char_code ) |
377 { | 381 { |
378 FT_Byte* result = NULL; | 382 FT_Byte* result = NULL; |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 FT_CALLBACK_DEF( FT_Error ) | 534 FT_CALLBACK_DEF( FT_Error ) |
531 tt_cmap2_get_info( TT_CMap cmap, | 535 tt_cmap2_get_info( TT_CMap cmap, |
532 TT_CMapInfo *cmap_info ) | 536 TT_CMapInfo *cmap_info ) |
533 { | 537 { |
534 FT_Byte* p = cmap->data + 4; | 538 FT_Byte* p = cmap->data + 4; |
535 | 539 |
536 | 540 |
537 cmap_info->format = 2; | 541 cmap_info->format = 2; |
538 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); | 542 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); |
539 | 543 |
540 return SFNT_Err_Ok; | 544 return FT_Err_Ok; |
541 } | 545 } |
542 | 546 |
543 | 547 |
544 FT_DEFINE_TT_CMAP(tt_cmap2_class_rec, | 548 FT_DEFINE_TT_CMAP( |
545 sizeof ( TT_CMapRec ), | 549 tt_cmap2_class_rec, |
| 550 sizeof ( TT_CMapRec ), |
546 | 551 |
547 (FT_CMap_InitFunc) tt_cmap_init, | 552 (FT_CMap_InitFunc) tt_cmap_init, |
548 (FT_CMap_DoneFunc) NULL, | 553 (FT_CMap_DoneFunc) NULL, |
549 (FT_CMap_CharIndexFunc)tt_cmap2_char_index, | 554 (FT_CMap_CharIndexFunc)tt_cmap2_char_index, |
550 (FT_CMap_CharNextFunc) tt_cmap2_char_next, | 555 (FT_CMap_CharNextFunc) tt_cmap2_char_next, |
551 | 556 |
552 NULL, NULL, NULL, NULL, NULL | 557 NULL, |
553 , | 558 NULL, |
| 559 NULL, |
| 560 NULL, |
| 561 NULL, |
| 562 |
554 2, | 563 2, |
555 (TT_CMap_ValidateFunc) tt_cmap2_validate, | 564 (TT_CMap_ValidateFunc)tt_cmap2_validate, |
556 (TT_CMap_Info_GetFunc) tt_cmap2_get_info | 565 (TT_CMap_Info_GetFunc)tt_cmap2_get_info ) |
557 ) | |
558 | 566 |
559 #endif /* TT_CONFIG_CMAP_FORMAT_2 */ | 567 #endif /* TT_CONFIG_CMAP_FORMAT_2 */ |
560 | 568 |
561 | 569 |
562 /*************************************************************************/ | 570 /*************************************************************************/ |
563 /*************************************************************************/ | 571 /*************************************************************************/ |
564 /***** *****/ | 572 /***** *****/ |
565 /***** FORMAT 4 *****/ | 573 /***** FORMAT 4 *****/ |
566 /***** *****/ | 574 /***** *****/ |
567 /*************************************************************************/ | 575 /*************************************************************************/ |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 FT_Byte* p; | 663 FT_Byte* p; |
656 | 664 |
657 | 665 |
658 cmap->cmap.data = table; | 666 cmap->cmap.data = table; |
659 | 667 |
660 p = table + 6; | 668 p = table + 6; |
661 cmap->num_ranges = FT_PEEK_USHORT( p ) >> 1; | 669 cmap->num_ranges = FT_PEEK_USHORT( p ) >> 1; |
662 cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL; | 670 cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL; |
663 cmap->cur_gindex = 0; | 671 cmap->cur_gindex = 0; |
664 | 672 |
665 return SFNT_Err_Ok; | 673 return FT_Err_Ok; |
666 } | 674 } |
667 | 675 |
668 | 676 |
669 static FT_Int | 677 static FT_Int |
670 tt_cmap4_set_range( TT_CMap4 cmap, | 678 tt_cmap4_set_range( TT_CMap4 cmap, |
671 FT_UInt range_index ) | 679 FT_UInt range_index ) |
672 { | 680 { |
673 FT_Byte* table = cmap->cmap.data; | 681 FT_Byte* table = cmap->cmap.data; |
674 FT_Byte* p; | 682 FT_Byte* p; |
675 FT_UInt num_ranges = cmap->num_ranges; | 683 FT_UInt num_ranges = cmap->num_ranges; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
805 | 813 |
806 | 814 |
807 FT_CALLBACK_DEF( FT_Error ) | 815 FT_CALLBACK_DEF( FT_Error ) |
808 tt_cmap4_validate( FT_Byte* table, | 816 tt_cmap4_validate( FT_Byte* table, |
809 FT_Validator valid ) | 817 FT_Validator valid ) |
810 { | 818 { |
811 FT_Byte* p = table + 2; /* skip format */ | 819 FT_Byte* p = table + 2; /* skip format */ |
812 FT_UInt length = TT_NEXT_USHORT( p ); | 820 FT_UInt length = TT_NEXT_USHORT( p ); |
813 FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids; | 821 FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids; |
814 FT_UInt num_segs; | 822 FT_UInt num_segs; |
815 FT_Error error = SFNT_Err_Ok; | 823 FT_Error error = FT_Err_Ok; |
816 | 824 |
817 | 825 |
818 if ( length < 16 ) | 826 if ( length < 16 ) |
819 FT_INVALID_TOO_SHORT; | 827 FT_INVALID_TOO_SHORT; |
820 | 828 |
821 /* in certain fonts, the `length' field is invalid and goes */ | 829 /* in certain fonts, the `length' field is invalid and goes */ |
822 /* out of bound. We try to correct this here... */ | 830 /* out of bound. We try to correct this here... */ |
823 if ( table + length > valid->limit ) | 831 if ( table + length > valid->limit ) |
824 { | 832 { |
825 if ( valid->level >= FT_VALIDATE_TIGHT ) | 833 if ( valid->level >= FT_VALIDATE_TIGHT ) |
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 FT_CALLBACK_DEF( FT_Error ) | 1374 FT_CALLBACK_DEF( FT_Error ) |
1367 tt_cmap4_get_info( TT_CMap cmap, | 1375 tt_cmap4_get_info( TT_CMap cmap, |
1368 TT_CMapInfo *cmap_info ) | 1376 TT_CMapInfo *cmap_info ) |
1369 { | 1377 { |
1370 FT_Byte* p = cmap->data + 4; | 1378 FT_Byte* p = cmap->data + 4; |
1371 | 1379 |
1372 | 1380 |
1373 cmap_info->format = 4; | 1381 cmap_info->format = 4; |
1374 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); | 1382 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); |
1375 | 1383 |
1376 return SFNT_Err_Ok; | 1384 return FT_Err_Ok; |
1377 } | 1385 } |
1378 | 1386 |
1379 | 1387 |
1380 FT_DEFINE_TT_CMAP(tt_cmap4_class_rec, | 1388 FT_DEFINE_TT_CMAP( |
1381 sizeof ( TT_CMap4Rec ), | 1389 tt_cmap4_class_rec, |
1382 (FT_CMap_InitFunc) tt_cmap4_init, | 1390 sizeof ( TT_CMap4Rec ), |
1383 (FT_CMap_DoneFunc) NULL, | 1391 (FT_CMap_InitFunc) tt_cmap4_init, |
1384 (FT_CMap_CharIndexFunc)tt_cmap4_char_index, | 1392 (FT_CMap_DoneFunc) NULL, |
1385 (FT_CMap_CharNextFunc) tt_cmap4_char_next, | 1393 (FT_CMap_CharIndexFunc)tt_cmap4_char_index, |
| 1394 (FT_CMap_CharNextFunc) tt_cmap4_char_next, |
1386 | 1395 |
1387 NULL, NULL, NULL, NULL, NULL | 1396 NULL, |
1388 , | 1397 NULL, |
| 1398 NULL, |
| 1399 NULL, |
| 1400 NULL, |
| 1401 |
1389 4, | 1402 4, |
1390 (TT_CMap_ValidateFunc) tt_cmap4_validate, | 1403 (TT_CMap_ValidateFunc)tt_cmap4_validate, |
1391 (TT_CMap_Info_GetFunc) tt_cmap4_get_info | 1404 (TT_CMap_Info_GetFunc)tt_cmap4_get_info ) |
1392 ) | |
1393 | 1405 |
1394 #endif /* TT_CONFIG_CMAP_FORMAT_4 */ | 1406 #endif /* TT_CONFIG_CMAP_FORMAT_4 */ |
1395 | 1407 |
1396 | 1408 |
1397 /*************************************************************************/ | 1409 /*************************************************************************/ |
1398 /*************************************************************************/ | 1410 /*************************************************************************/ |
1399 /***** *****/ | 1411 /***** *****/ |
1400 /***** FORMAT 6 *****/ | 1412 /***** FORMAT 6 *****/ |
1401 /***** *****/ | 1413 /***** *****/ |
1402 /*************************************************************************/ | 1414 /*************************************************************************/ |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1449 | 1461 |
1450 | 1462 |
1451 for ( ; count > 0; count-- ) | 1463 for ( ; count > 0; count-- ) |
1452 { | 1464 { |
1453 gindex = TT_NEXT_USHORT( p ); | 1465 gindex = TT_NEXT_USHORT( p ); |
1454 if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) ) | 1466 if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) ) |
1455 FT_INVALID_GLYPH_ID; | 1467 FT_INVALID_GLYPH_ID; |
1456 } | 1468 } |
1457 } | 1469 } |
1458 | 1470 |
1459 return SFNT_Err_Ok; | 1471 return FT_Err_Ok; |
1460 } | 1472 } |
1461 | 1473 |
1462 | 1474 |
1463 FT_CALLBACK_DEF( FT_UInt ) | 1475 FT_CALLBACK_DEF( FT_UInt ) |
1464 tt_cmap6_char_index( TT_CMap cmap, | 1476 tt_cmap6_char_index( TT_CMap cmap, |
1465 FT_UInt32 char_code ) | 1477 FT_UInt32 char_code ) |
1466 { | 1478 { |
1467 FT_Byte* table = cmap->data; | 1479 FT_Byte* table = cmap->data; |
1468 FT_UInt result = 0; | 1480 FT_UInt result = 0; |
1469 FT_Byte* p = table + 6; | 1481 FT_Byte* p = table + 6; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1525 FT_CALLBACK_DEF( FT_Error ) | 1537 FT_CALLBACK_DEF( FT_Error ) |
1526 tt_cmap6_get_info( TT_CMap cmap, | 1538 tt_cmap6_get_info( TT_CMap cmap, |
1527 TT_CMapInfo *cmap_info ) | 1539 TT_CMapInfo *cmap_info ) |
1528 { | 1540 { |
1529 FT_Byte* p = cmap->data + 4; | 1541 FT_Byte* p = cmap->data + 4; |
1530 | 1542 |
1531 | 1543 |
1532 cmap_info->format = 6; | 1544 cmap_info->format = 6; |
1533 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); | 1545 cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); |
1534 | 1546 |
1535 return SFNT_Err_Ok; | 1547 return FT_Err_Ok; |
1536 } | 1548 } |
1537 | 1549 |
1538 | 1550 |
1539 FT_DEFINE_TT_CMAP(tt_cmap6_class_rec, | 1551 FT_DEFINE_TT_CMAP( |
1540 sizeof ( TT_CMapRec ), | 1552 tt_cmap6_class_rec, |
| 1553 sizeof ( TT_CMapRec ), |
1541 | 1554 |
1542 (FT_CMap_InitFunc) tt_cmap_init, | 1555 (FT_CMap_InitFunc) tt_cmap_init, |
1543 (FT_CMap_DoneFunc) NULL, | 1556 (FT_CMap_DoneFunc) NULL, |
1544 (FT_CMap_CharIndexFunc)tt_cmap6_char_index, | 1557 (FT_CMap_CharIndexFunc)tt_cmap6_char_index, |
1545 (FT_CMap_CharNextFunc) tt_cmap6_char_next, | 1558 (FT_CMap_CharNextFunc) tt_cmap6_char_next, |
1546 | 1559 |
1547 NULL, NULL, NULL, NULL, NULL | 1560 NULL, |
1548 , | 1561 NULL, |
| 1562 NULL, |
| 1563 NULL, |
| 1564 NULL, |
| 1565 |
1549 6, | 1566 6, |
1550 (TT_CMap_ValidateFunc) tt_cmap6_validate, | 1567 (TT_CMap_ValidateFunc)tt_cmap6_validate, |
1551 (TT_CMap_Info_GetFunc) tt_cmap6_get_info | 1568 (TT_CMap_Info_GetFunc)tt_cmap6_get_info ) |
1552 ) | |
1553 | 1569 |
1554 #endif /* TT_CONFIG_CMAP_FORMAT_6 */ | 1570 #endif /* TT_CONFIG_CMAP_FORMAT_6 */ |
1555 | 1571 |
1556 | 1572 |
1557 /*************************************************************************/ | 1573 /*************************************************************************/ |
1558 /*************************************************************************/ | 1574 /*************************************************************************/ |
1559 /***** *****/ | 1575 /***** *****/ |
1560 /***** FORMAT 8 *****/ | 1576 /***** FORMAT 8 *****/ |
1561 /***** *****/ | 1577 /***** *****/ |
1562 /***** It is hard to completely understand what the OpenType spec *****/ | 1578 /***** It is hard to completely understand what the OpenType spec *****/ |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1693 if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) != 0 ) | 1709 if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) != 0 ) |
1694 FT_INVALID_DATA; | 1710 FT_INVALID_DATA; |
1695 } | 1711 } |
1696 } | 1712 } |
1697 } | 1713 } |
1698 | 1714 |
1699 last = end; | 1715 last = end; |
1700 } | 1716 } |
1701 } | 1717 } |
1702 | 1718 |
1703 return SFNT_Err_Ok; | 1719 return FT_Err_Ok; |
1704 } | 1720 } |
1705 | 1721 |
1706 | 1722 |
1707 FT_CALLBACK_DEF( FT_UInt ) | 1723 FT_CALLBACK_DEF( FT_UInt ) |
1708 tt_cmap8_char_index( TT_CMap cmap, | 1724 tt_cmap8_char_index( TT_CMap cmap, |
1709 FT_UInt32 char_code ) | 1725 FT_UInt32 char_code ) |
1710 { | 1726 { |
1711 FT_Byte* table = cmap->data; | 1727 FT_Byte* table = cmap->data; |
1712 FT_UInt result = 0; | 1728 FT_UInt result = 0; |
1713 FT_Byte* p = table + 8204; | 1729 FT_Byte* p = table + 8204; |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1778 FT_CALLBACK_DEF( FT_Error ) | 1794 FT_CALLBACK_DEF( FT_Error ) |
1779 tt_cmap8_get_info( TT_CMap cmap, | 1795 tt_cmap8_get_info( TT_CMap cmap, |
1780 TT_CMapInfo *cmap_info ) | 1796 TT_CMapInfo *cmap_info ) |
1781 { | 1797 { |
1782 FT_Byte* p = cmap->data + 8; | 1798 FT_Byte* p = cmap->data + 8; |
1783 | 1799 |
1784 | 1800 |
1785 cmap_info->format = 8; | 1801 cmap_info->format = 8; |
1786 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); | 1802 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); |
1787 | 1803 |
1788 return SFNT_Err_Ok; | 1804 return FT_Err_Ok; |
1789 } | 1805 } |
1790 | 1806 |
1791 | 1807 |
1792 FT_DEFINE_TT_CMAP(tt_cmap8_class_rec, | 1808 FT_DEFINE_TT_CMAP( |
1793 sizeof ( TT_CMapRec ), | 1809 tt_cmap8_class_rec, |
| 1810 sizeof ( TT_CMapRec ), |
1794 | 1811 |
1795 (FT_CMap_InitFunc) tt_cmap_init, | 1812 (FT_CMap_InitFunc) tt_cmap_init, |
1796 (FT_CMap_DoneFunc) NULL, | 1813 (FT_CMap_DoneFunc) NULL, |
1797 (FT_CMap_CharIndexFunc)tt_cmap8_char_index, | 1814 (FT_CMap_CharIndexFunc)tt_cmap8_char_index, |
1798 (FT_CMap_CharNextFunc) tt_cmap8_char_next, | 1815 (FT_CMap_CharNextFunc) tt_cmap8_char_next, |
1799 | 1816 |
1800 NULL, NULL, NULL, NULL, NULL | 1817 NULL, |
1801 , | 1818 NULL, |
| 1819 NULL, |
| 1820 NULL, |
| 1821 NULL, |
| 1822 |
1802 8, | 1823 8, |
1803 (TT_CMap_ValidateFunc) tt_cmap8_validate, | 1824 (TT_CMap_ValidateFunc)tt_cmap8_validate, |
1804 (TT_CMap_Info_GetFunc) tt_cmap8_get_info | 1825 (TT_CMap_Info_GetFunc)tt_cmap8_get_info ) |
1805 ) | |
1806 | 1826 |
1807 #endif /* TT_CONFIG_CMAP_FORMAT_8 */ | 1827 #endif /* TT_CONFIG_CMAP_FORMAT_8 */ |
1808 | 1828 |
1809 | 1829 |
1810 /*************************************************************************/ | 1830 /*************************************************************************/ |
1811 /*************************************************************************/ | 1831 /*************************************************************************/ |
1812 /***** *****/ | 1832 /***** *****/ |
1813 /***** FORMAT 10 *****/ | 1833 /***** FORMAT 10 *****/ |
1814 /***** *****/ | 1834 /***** *****/ |
1815 /*************************************************************************/ | 1835 /*************************************************************************/ |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1860 | 1880 |
1861 | 1881 |
1862 for ( ; count > 0; count-- ) | 1882 for ( ; count > 0; count-- ) |
1863 { | 1883 { |
1864 gindex = TT_NEXT_USHORT( p ); | 1884 gindex = TT_NEXT_USHORT( p ); |
1865 if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) ) | 1885 if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) ) |
1866 FT_INVALID_GLYPH_ID; | 1886 FT_INVALID_GLYPH_ID; |
1867 } | 1887 } |
1868 } | 1888 } |
1869 | 1889 |
1870 return SFNT_Err_Ok; | 1890 return FT_Err_Ok; |
1871 } | 1891 } |
1872 | 1892 |
1873 | 1893 |
1874 FT_CALLBACK_DEF( FT_UInt ) | 1894 FT_CALLBACK_DEF( FT_UInt ) |
1875 tt_cmap10_char_index( TT_CMap cmap, | 1895 tt_cmap10_char_index( TT_CMap cmap, |
1876 FT_UInt32 char_code ) | 1896 FT_UInt32 char_code ) |
1877 { | 1897 { |
1878 FT_Byte* table = cmap->data; | 1898 FT_Byte* table = cmap->data; |
1879 FT_UInt result = 0; | 1899 FT_UInt result = 0; |
1880 FT_Byte* p = table + 12; | 1900 FT_Byte* p = table + 12; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1927 FT_CALLBACK_DEF( FT_Error ) | 1947 FT_CALLBACK_DEF( FT_Error ) |
1928 tt_cmap10_get_info( TT_CMap cmap, | 1948 tt_cmap10_get_info( TT_CMap cmap, |
1929 TT_CMapInfo *cmap_info ) | 1949 TT_CMapInfo *cmap_info ) |
1930 { | 1950 { |
1931 FT_Byte* p = cmap->data + 8; | 1951 FT_Byte* p = cmap->data + 8; |
1932 | 1952 |
1933 | 1953 |
1934 cmap_info->format = 10; | 1954 cmap_info->format = 10; |
1935 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); | 1955 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); |
1936 | 1956 |
1937 return SFNT_Err_Ok; | 1957 return FT_Err_Ok; |
1938 } | 1958 } |
1939 | 1959 |
1940 | 1960 |
1941 FT_DEFINE_TT_CMAP(tt_cmap10_class_rec, | 1961 FT_DEFINE_TT_CMAP( |
1942 sizeof ( TT_CMapRec ), | 1962 tt_cmap10_class_rec, |
| 1963 sizeof ( TT_CMapRec ), |
1943 | 1964 |
1944 (FT_CMap_InitFunc) tt_cmap_init, | 1965 (FT_CMap_InitFunc) tt_cmap_init, |
1945 (FT_CMap_DoneFunc) NULL, | 1966 (FT_CMap_DoneFunc) NULL, |
1946 (FT_CMap_CharIndexFunc)tt_cmap10_char_index, | 1967 (FT_CMap_CharIndexFunc)tt_cmap10_char_index, |
1947 (FT_CMap_CharNextFunc) tt_cmap10_char_next, | 1968 (FT_CMap_CharNextFunc) tt_cmap10_char_next, |
1948 | 1969 |
1949 NULL, NULL, NULL, NULL, NULL | 1970 NULL, |
1950 , | 1971 NULL, |
| 1972 NULL, |
| 1973 NULL, |
| 1974 NULL, |
| 1975 |
1951 10, | 1976 10, |
1952 (TT_CMap_ValidateFunc) tt_cmap10_validate, | 1977 (TT_CMap_ValidateFunc)tt_cmap10_validate, |
1953 (TT_CMap_Info_GetFunc) tt_cmap10_get_info | 1978 (TT_CMap_Info_GetFunc)tt_cmap10_get_info ) |
1954 ) | |
1955 | 1979 |
1956 #endif /* TT_CONFIG_CMAP_FORMAT_10 */ | 1980 #endif /* TT_CONFIG_CMAP_FORMAT_10 */ |
1957 | 1981 |
1958 | 1982 |
1959 /*************************************************************************/ | 1983 /*************************************************************************/ |
1960 /*************************************************************************/ | 1984 /*************************************************************************/ |
1961 /***** *****/ | 1985 /***** *****/ |
1962 /***** FORMAT 12 *****/ | 1986 /***** FORMAT 12 *****/ |
1963 /***** *****/ | 1987 /***** *****/ |
1964 /*************************************************************************/ | 1988 /*************************************************************************/ |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2003 tt_cmap12_init( TT_CMap12 cmap, | 2027 tt_cmap12_init( TT_CMap12 cmap, |
2004 FT_Byte* table ) | 2028 FT_Byte* table ) |
2005 { | 2029 { |
2006 cmap->cmap.data = table; | 2030 cmap->cmap.data = table; |
2007 | 2031 |
2008 table += 12; | 2032 table += 12; |
2009 cmap->num_groups = FT_PEEK_ULONG( table ); | 2033 cmap->num_groups = FT_PEEK_ULONG( table ); |
2010 | 2034 |
2011 cmap->valid = 0; | 2035 cmap->valid = 0; |
2012 | 2036 |
2013 return SFNT_Err_Ok; | 2037 return FT_Err_Ok; |
2014 } | 2038 } |
2015 | 2039 |
2016 | 2040 |
2017 FT_CALLBACK_DEF( FT_Error ) | 2041 FT_CALLBACK_DEF( FT_Error ) |
2018 tt_cmap12_validate( FT_Byte* table, | 2042 tt_cmap12_validate( FT_Byte* table, |
2019 FT_Validator valid ) | 2043 FT_Validator valid ) |
2020 { | 2044 { |
2021 FT_Byte* p; | 2045 FT_Byte* p; |
2022 FT_ULong length; | 2046 FT_ULong length; |
2023 FT_ULong num_groups; | 2047 FT_ULong num_groups; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2056 if ( valid->level >= FT_VALIDATE_TIGHT ) | 2080 if ( valid->level >= FT_VALIDATE_TIGHT ) |
2057 { | 2081 { |
2058 if ( start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ) | 2082 if ( start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ) |
2059 FT_INVALID_GLYPH_ID; | 2083 FT_INVALID_GLYPH_ID; |
2060 } | 2084 } |
2061 | 2085 |
2062 last = end; | 2086 last = end; |
2063 } | 2087 } |
2064 } | 2088 } |
2065 | 2089 |
2066 return SFNT_Err_Ok; | 2090 return FT_Err_Ok; |
2067 } | 2091 } |
2068 | 2092 |
2069 | 2093 |
2070 /* search the index of the charcode next to cmap->cur_charcode */ | 2094 /* search the index of the charcode next to cmap->cur_charcode */ |
2071 /* cmap->cur_group should be set up properly by caller */ | 2095 /* cmap->cur_group should be set up properly by caller */ |
2072 /* */ | 2096 /* */ |
2073 static void | 2097 static void |
2074 tt_cmap12_next( TT_CMap12 cmap ) | 2098 tt_cmap12_next( TT_CMap12 cmap ) |
2075 { | 2099 { |
2076 FT_Byte* p; | 2100 FT_Byte* p; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2247 FT_CALLBACK_DEF( FT_Error ) | 2271 FT_CALLBACK_DEF( FT_Error ) |
2248 tt_cmap12_get_info( TT_CMap cmap, | 2272 tt_cmap12_get_info( TT_CMap cmap, |
2249 TT_CMapInfo *cmap_info ) | 2273 TT_CMapInfo *cmap_info ) |
2250 { | 2274 { |
2251 FT_Byte* p = cmap->data + 8; | 2275 FT_Byte* p = cmap->data + 8; |
2252 | 2276 |
2253 | 2277 |
2254 cmap_info->format = 12; | 2278 cmap_info->format = 12; |
2255 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); | 2279 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); |
2256 | 2280 |
2257 return SFNT_Err_Ok; | 2281 return FT_Err_Ok; |
2258 } | 2282 } |
2259 | 2283 |
2260 | 2284 |
2261 FT_DEFINE_TT_CMAP(tt_cmap12_class_rec, | 2285 FT_DEFINE_TT_CMAP( |
2262 sizeof ( TT_CMap12Rec ), | 2286 tt_cmap12_class_rec, |
| 2287 sizeof ( TT_CMap12Rec ), |
2263 | 2288 |
2264 (FT_CMap_InitFunc) tt_cmap12_init, | 2289 (FT_CMap_InitFunc) tt_cmap12_init, |
2265 (FT_CMap_DoneFunc) NULL, | 2290 (FT_CMap_DoneFunc) NULL, |
2266 (FT_CMap_CharIndexFunc)tt_cmap12_char_index, | 2291 (FT_CMap_CharIndexFunc)tt_cmap12_char_index, |
2267 (FT_CMap_CharNextFunc) tt_cmap12_char_next, | 2292 (FT_CMap_CharNextFunc) tt_cmap12_char_next, |
2268 | 2293 |
2269 NULL, NULL, NULL, NULL, NULL | 2294 NULL, |
2270 , | 2295 NULL, |
| 2296 NULL, |
| 2297 NULL, |
| 2298 NULL, |
| 2299 |
2271 12, | 2300 12, |
2272 (TT_CMap_ValidateFunc) tt_cmap12_validate, | 2301 (TT_CMap_ValidateFunc)tt_cmap12_validate, |
2273 (TT_CMap_Info_GetFunc) tt_cmap12_get_info | 2302 (TT_CMap_Info_GetFunc)tt_cmap12_get_info ) |
2274 ) | |
2275 | 2303 |
2276 #endif /* TT_CONFIG_CMAP_FORMAT_12 */ | 2304 #endif /* TT_CONFIG_CMAP_FORMAT_12 */ |
2277 | 2305 |
2278 | 2306 |
2279 /*************************************************************************/ | 2307 /*************************************************************************/ |
2280 /*************************************************************************/ | 2308 /*************************************************************************/ |
2281 /***** *****/ | 2309 /***** *****/ |
2282 /***** FORMAT 13 *****/ | 2310 /***** FORMAT 13 *****/ |
2283 /***** *****/ | 2311 /***** *****/ |
2284 /*************************************************************************/ | 2312 /*************************************************************************/ |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2323 tt_cmap13_init( TT_CMap13 cmap, | 2351 tt_cmap13_init( TT_CMap13 cmap, |
2324 FT_Byte* table ) | 2352 FT_Byte* table ) |
2325 { | 2353 { |
2326 cmap->cmap.data = table; | 2354 cmap->cmap.data = table; |
2327 | 2355 |
2328 table += 12; | 2356 table += 12; |
2329 cmap->num_groups = FT_PEEK_ULONG( table ); | 2357 cmap->num_groups = FT_PEEK_ULONG( table ); |
2330 | 2358 |
2331 cmap->valid = 0; | 2359 cmap->valid = 0; |
2332 | 2360 |
2333 return SFNT_Err_Ok; | 2361 return FT_Err_Ok; |
2334 } | 2362 } |
2335 | 2363 |
2336 | 2364 |
2337 FT_CALLBACK_DEF( FT_Error ) | 2365 FT_CALLBACK_DEF( FT_Error ) |
2338 tt_cmap13_validate( FT_Byte* table, | 2366 tt_cmap13_validate( FT_Byte* table, |
2339 FT_Validator valid ) | 2367 FT_Validator valid ) |
2340 { | 2368 { |
2341 FT_Byte* p; | 2369 FT_Byte* p; |
2342 FT_ULong length; | 2370 FT_ULong length; |
2343 FT_ULong num_groups; | 2371 FT_ULong num_groups; |
2344 | 2372 |
2345 | 2373 |
2346 if ( table + 16 > valid->limit ) | 2374 if ( table + 16 > valid->limit ) |
2347 FT_INVALID_TOO_SHORT; | 2375 FT_INVALID_TOO_SHORT; |
2348 | 2376 |
2349 p = table + 4; | 2377 p = table + 4; |
2350 length = TT_NEXT_ULONG( p ); | 2378 length = TT_NEXT_ULONG( p ); |
2351 | 2379 |
2352 p = table + 12; | 2380 p = table + 12; |
2353 num_groups = TT_NEXT_ULONG( p ); | 2381 num_groups = TT_NEXT_ULONG( p ); |
(...skipping 22 matching lines...) Expand all Loading... |
2376 if ( valid->level >= FT_VALIDATE_TIGHT ) | 2404 if ( valid->level >= FT_VALIDATE_TIGHT ) |
2377 { | 2405 { |
2378 if ( glyph_id >= TT_VALID_GLYPH_COUNT( valid ) ) | 2406 if ( glyph_id >= TT_VALID_GLYPH_COUNT( valid ) ) |
2379 FT_INVALID_GLYPH_ID; | 2407 FT_INVALID_GLYPH_ID; |
2380 } | 2408 } |
2381 | 2409 |
2382 last = end; | 2410 last = end; |
2383 } | 2411 } |
2384 } | 2412 } |
2385 | 2413 |
2386 return SFNT_Err_Ok; | 2414 return FT_Err_Ok; |
2387 } | 2415 } |
2388 | 2416 |
2389 | 2417 |
2390 /* search the index of the charcode next to cmap->cur_charcode */ | 2418 /* search the index of the charcode next to cmap->cur_charcode */ |
2391 /* cmap->cur_group should be set up properly by caller */ | 2419 /* cmap->cur_group should be set up properly by caller */ |
2392 /* */ | 2420 /* */ |
2393 static void | 2421 static void |
2394 tt_cmap13_next( TT_CMap13 cmap ) | 2422 tt_cmap13_next( TT_CMap13 cmap ) |
2395 { | 2423 { |
2396 FT_Byte* p; | 2424 FT_Byte* p; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2483 } | 2511 } |
2484 } | 2512 } |
2485 | 2513 |
2486 if ( next ) | 2514 if ( next ) |
2487 { | 2515 { |
2488 TT_CMap13 cmap13 = (TT_CMap13)cmap; | 2516 TT_CMap13 cmap13 = (TT_CMap13)cmap; |
2489 | 2517 |
2490 | 2518 |
2491 /* if `char_code' is not in any group, then `mid' is */ | 2519 /* if `char_code' is not in any group, then `mid' is */ |
2492 /* the group nearest to `char_code' */ | 2520 /* the group nearest to `char_code' */ |
2493 /* */ | |
2494 | 2521 |
2495 if ( char_code > end ) | 2522 if ( char_code > end ) |
2496 { | 2523 { |
2497 mid++; | 2524 mid++; |
2498 if ( mid == num_groups ) | 2525 if ( mid == num_groups ) |
2499 return 0; | 2526 return 0; |
2500 } | 2527 } |
2501 | 2528 |
2502 cmap13->valid = 1; | 2529 cmap13->valid = 1; |
2503 cmap13->cur_charcode = char_code; | 2530 cmap13->cur_charcode = char_code; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2563 FT_CALLBACK_DEF( FT_Error ) | 2590 FT_CALLBACK_DEF( FT_Error ) |
2564 tt_cmap13_get_info( TT_CMap cmap, | 2591 tt_cmap13_get_info( TT_CMap cmap, |
2565 TT_CMapInfo *cmap_info ) | 2592 TT_CMapInfo *cmap_info ) |
2566 { | 2593 { |
2567 FT_Byte* p = cmap->data + 8; | 2594 FT_Byte* p = cmap->data + 8; |
2568 | 2595 |
2569 | 2596 |
2570 cmap_info->format = 13; | 2597 cmap_info->format = 13; |
2571 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); | 2598 cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); |
2572 | 2599 |
2573 return SFNT_Err_Ok; | 2600 return FT_Err_Ok; |
2574 } | 2601 } |
2575 | 2602 |
2576 | 2603 |
2577 FT_DEFINE_TT_CMAP(tt_cmap13_class_rec, | 2604 FT_DEFINE_TT_CMAP( |
2578 sizeof ( TT_CMap13Rec ), | 2605 tt_cmap13_class_rec, |
| 2606 sizeof ( TT_CMap13Rec ), |
2579 | 2607 |
2580 (FT_CMap_InitFunc) tt_cmap13_init, | 2608 (FT_CMap_InitFunc) tt_cmap13_init, |
2581 (FT_CMap_DoneFunc) NULL, | 2609 (FT_CMap_DoneFunc) NULL, |
2582 (FT_CMap_CharIndexFunc)tt_cmap13_char_index, | 2610 (FT_CMap_CharIndexFunc)tt_cmap13_char_index, |
2583 (FT_CMap_CharNextFunc) tt_cmap13_char_next, | 2611 (FT_CMap_CharNextFunc) tt_cmap13_char_next, |
2584 | 2612 |
2585 NULL, NULL, NULL, NULL, NULL | 2613 NULL, |
2586 , | 2614 NULL, |
| 2615 NULL, |
| 2616 NULL, |
| 2617 NULL, |
| 2618 |
2587 13, | 2619 13, |
2588 (TT_CMap_ValidateFunc) tt_cmap13_validate, | 2620 (TT_CMap_ValidateFunc)tt_cmap13_validate, |
2589 (TT_CMap_Info_GetFunc) tt_cmap13_get_info | 2621 (TT_CMap_Info_GetFunc)tt_cmap13_get_info ) |
2590 ) | |
2591 | 2622 |
2592 #endif /* TT_CONFIG_CMAP_FORMAT_13 */ | 2623 #endif /* TT_CONFIG_CMAP_FORMAT_13 */ |
2593 | 2624 |
2594 | 2625 |
2595 /*************************************************************************/ | 2626 /*************************************************************************/ |
2596 /*************************************************************************/ | 2627 /*************************************************************************/ |
2597 /***** *****/ | 2628 /***** *****/ |
2598 /***** FORMAT 14 *****/ | 2629 /***** FORMAT 14 *****/ |
2599 /***** *****/ | 2630 /***** *****/ |
2600 /*************************************************************************/ | 2631 /*************************************************************************/ |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2681 if ( memory != NULL && cmap->results != NULL ) | 2712 if ( memory != NULL && cmap->results != NULL ) |
2682 FT_FREE( cmap->results ); | 2713 FT_FREE( cmap->results ); |
2683 } | 2714 } |
2684 | 2715 |
2685 | 2716 |
2686 static FT_Error | 2717 static FT_Error |
2687 tt_cmap14_ensure( TT_CMap14 cmap, | 2718 tt_cmap14_ensure( TT_CMap14 cmap, |
2688 FT_UInt32 num_results, | 2719 FT_UInt32 num_results, |
2689 FT_Memory memory ) | 2720 FT_Memory memory ) |
2690 { | 2721 { |
2691 FT_UInt32 old_max = cmap->max_results; | 2722 FT_UInt32 old_max = cmap->max_results; |
2692 FT_Error error = SFNT_Err_Ok; | 2723 FT_Error error = FT_Err_Ok; |
2693 | 2724 |
2694 | 2725 |
2695 if ( num_results > cmap->max_results ) | 2726 if ( num_results > cmap->max_results ) |
2696 { | 2727 { |
2697 cmap->memory = memory; | 2728 cmap->memory = memory; |
2698 | 2729 |
2699 if ( FT_QRENEW_ARRAY( cmap->results, old_max, num_results ) ) | 2730 if ( FT_QRENEW_ARRAY( cmap->results, old_max, num_results ) ) |
2700 return error; | 2731 return error; |
2701 | 2732 |
2702 cmap->max_results = num_results; | 2733 cmap->max_results = num_results; |
2703 } | 2734 } |
2704 | 2735 |
2705 return error; | 2736 return error; |
2706 } | 2737 } |
2707 | 2738 |
2708 | 2739 |
2709 FT_CALLBACK_DEF( FT_Error ) | 2740 FT_CALLBACK_DEF( FT_Error ) |
2710 tt_cmap14_init( TT_CMap14 cmap, | 2741 tt_cmap14_init( TT_CMap14 cmap, |
2711 FT_Byte* table ) | 2742 FT_Byte* table ) |
2712 { | 2743 { |
2713 cmap->cmap.data = table; | 2744 cmap->cmap.data = table; |
2714 | 2745 |
2715 table += 6; | 2746 table += 6; |
2716 cmap->num_selectors = FT_PEEK_ULONG( table ); | 2747 cmap->num_selectors = FT_PEEK_ULONG( table ); |
2717 cmap->max_results = 0; | 2748 cmap->max_results = 0; |
2718 cmap->results = NULL; | 2749 cmap->results = NULL; |
2719 | 2750 |
2720 return SFNT_Err_Ok; | 2751 return FT_Err_Ok; |
2721 } | 2752 } |
2722 | 2753 |
2723 | 2754 |
2724 FT_CALLBACK_DEF( FT_Error ) | 2755 FT_CALLBACK_DEF( FT_Error ) |
2725 tt_cmap14_validate( FT_Byte* table, | 2756 tt_cmap14_validate( FT_Byte* table, |
2726 FT_Validator valid ) | 2757 FT_Validator valid ) |
2727 { | 2758 { |
2728 FT_Byte* p = table + 2; | 2759 FT_Byte* p = table + 2; |
2729 FT_ULong length = TT_NEXT_ULONG( p ); | 2760 FT_ULong length = TT_NEXT_ULONG( p ); |
2730 FT_ULong num_selectors = TT_NEXT_ULONG( p ); | 2761 FT_ULong num_selectors = TT_NEXT_ULONG( p ); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2784 | 2815 |
2785 lastBase = base + cnt + 1U; | 2816 lastBase = base + cnt + 1U; |
2786 } | 2817 } |
2787 } | 2818 } |
2788 | 2819 |
2789 /* and the non-default table (these glyphs are specified here) */ | 2820 /* and the non-default table (these glyphs are specified here) */ |
2790 if ( nondefOff != 0 ) | 2821 if ( nondefOff != 0 ) |
2791 { | 2822 { |
2792 FT_Byte* ndp = table + nondefOff; | 2823 FT_Byte* ndp = table + nondefOff; |
2793 FT_ULong numMappings = TT_NEXT_ULONG( ndp ); | 2824 FT_ULong numMappings = TT_NEXT_ULONG( ndp ); |
2794 FT_ULong i, lastUni = 0; | 2825 FT_ULong i, lastUni = 0; |
2795 | 2826 |
2796 | 2827 |
2797 if ( numMappings * 4 > (FT_ULong)( valid->limit - ndp ) ) | 2828 if ( numMappings * 4 > (FT_ULong)( valid->limit - ndp ) ) |
2798 FT_INVALID_TOO_SHORT; | 2829 FT_INVALID_TOO_SHORT; |
2799 | 2830 |
2800 for ( i = 0; i < numMappings; ++i ) | 2831 for ( i = 0; i < numMappings; ++i ) |
2801 { | 2832 { |
2802 FT_ULong uni = TT_NEXT_UINT24( ndp ); | 2833 FT_ULong uni = TT_NEXT_UINT24( ndp ); |
2803 FT_ULong gid = TT_NEXT_USHORT( ndp ); | 2834 FT_ULong gid = TT_NEXT_USHORT( ndp ); |
2804 | 2835 |
2805 | 2836 |
2806 if ( uni >= 0x110000UL ) /* end of Unicode */ | 2837 if ( uni >= 0x110000UL ) /* end of Unicode */ |
2807 FT_INVALID_DATA; | 2838 FT_INVALID_DATA; |
2808 | 2839 |
2809 if ( uni < lastUni ) | 2840 if ( uni < lastUni ) |
2810 FT_INVALID_DATA; | 2841 FT_INVALID_DATA; |
2811 | 2842 |
2812 lastUni = uni + 1U; | 2843 lastUni = uni + 1U; |
2813 | 2844 |
2814 if ( valid->level >= FT_VALIDATE_TIGHT && | 2845 if ( valid->level >= FT_VALIDATE_TIGHT && |
2815 gid >= TT_VALID_GLYPH_COUNT( valid ) ) | 2846 gid >= TT_VALID_GLYPH_COUNT( valid ) ) |
2816 FT_INVALID_GLYPH_ID; | 2847 FT_INVALID_GLYPH_ID; |
2817 } | 2848 } |
2818 } | 2849 } |
2819 } | 2850 } |
2820 } | 2851 } |
2821 | 2852 |
2822 return SFNT_Err_Ok; | 2853 return FT_Err_Ok; |
2823 } | 2854 } |
2824 | 2855 |
2825 | 2856 |
2826 FT_CALLBACK_DEF( FT_UInt ) | 2857 FT_CALLBACK_DEF( FT_UInt ) |
2827 tt_cmap14_char_index( TT_CMap cmap, | 2858 tt_cmap14_char_index( TT_CMap cmap, |
2828 FT_UInt32 char_code ) | 2859 FT_UInt32 char_code ) |
2829 { | 2860 { |
2830 FT_UNUSED( cmap ); | 2861 FT_UNUSED( cmap ); |
2831 FT_UNUSED( char_code ); | 2862 FT_UNUSED( char_code ); |
2832 | 2863 |
(...skipping 17 matching lines...) Expand all Loading... |
2850 FT_CALLBACK_DEF( FT_Error ) | 2881 FT_CALLBACK_DEF( FT_Error ) |
2851 tt_cmap14_get_info( TT_CMap cmap, | 2882 tt_cmap14_get_info( TT_CMap cmap, |
2852 TT_CMapInfo *cmap_info ) | 2883 TT_CMapInfo *cmap_info ) |
2853 { | 2884 { |
2854 FT_UNUSED( cmap ); | 2885 FT_UNUSED( cmap ); |
2855 | 2886 |
2856 cmap_info->format = 14; | 2887 cmap_info->format = 14; |
2857 /* subtable 14 does not define a language field */ | 2888 /* subtable 14 does not define a language field */ |
2858 cmap_info->language = 0xFFFFFFFFUL; | 2889 cmap_info->language = 0xFFFFFFFFUL; |
2859 | 2890 |
2860 return SFNT_Err_Ok; | 2891 return FT_Err_Ok; |
2861 } | 2892 } |
2862 | 2893 |
2863 | 2894 |
2864 static FT_UInt | 2895 static FT_UInt |
2865 tt_cmap14_char_map_def_binary( FT_Byte *base, | 2896 tt_cmap14_char_map_def_binary( FT_Byte *base, |
2866 FT_UInt32 char_code ) | 2897 FT_UInt32 char_code ) |
2867 { | 2898 { |
2868 FT_UInt32 numRanges = TT_PEEK_ULONG( base ); | 2899 FT_UInt32 numRanges = TT_PEEK_ULONG( base ); |
2869 FT_UInt32 max, min; | 2900 FT_UInt32 max, min; |
2870 | 2901 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2958 } | 2989 } |
2959 | 2990 |
2960 return NULL; | 2991 return NULL; |
2961 } | 2992 } |
2962 | 2993 |
2963 | 2994 |
2964 FT_CALLBACK_DEF( FT_UInt ) | 2995 FT_CALLBACK_DEF( FT_UInt ) |
2965 tt_cmap14_char_var_index( TT_CMap cmap, | 2996 tt_cmap14_char_var_index( TT_CMap cmap, |
2966 TT_CMap ucmap, | 2997 TT_CMap ucmap, |
2967 FT_UInt32 charcode, | 2998 FT_UInt32 charcode, |
2968 FT_UInt32 variantSelector) | 2999 FT_UInt32 variantSelector ) |
2969 { | 3000 { |
2970 FT_Byte* p = tt_cmap14_find_variant( cmap->data + 6, variantSelector ); | 3001 FT_Byte* p = tt_cmap14_find_variant( cmap->data + 6, variantSelector ); |
2971 FT_ULong defOff; | 3002 FT_ULong defOff; |
2972 FT_ULong nondefOff; | 3003 FT_ULong nondefOff; |
2973 | 3004 |
2974 | 3005 |
2975 if ( !p ) | 3006 if ( !p ) |
2976 return 0; | 3007 return 0; |
2977 | 3008 |
2978 defOff = TT_NEXT_ULONG( p ); | 3009 defOff = TT_NEXT_ULONG( p ); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3099 { | 3130 { |
3100 tot += 1 + p[0]; | 3131 tot += 1 + p[0]; |
3101 p += 4; | 3132 p += 4; |
3102 } | 3133 } |
3103 | 3134 |
3104 return tot; | 3135 return tot; |
3105 } | 3136 } |
3106 | 3137 |
3107 | 3138 |
3108 static FT_UInt32* | 3139 static FT_UInt32* |
3109 tt_cmap14_get_def_chars( TT_CMap cmap, | 3140 tt_cmap14_get_def_chars( TT_CMap cmap, |
3110 FT_Byte* p, | 3141 FT_Byte* p, |
3111 FT_Memory memory ) | 3142 FT_Memory memory ) |
3112 { | 3143 { |
3113 TT_CMap14 cmap14 = (TT_CMap14) cmap; | 3144 TT_CMap14 cmap14 = (TT_CMap14) cmap; |
3114 FT_UInt32 numRanges; | 3145 FT_UInt32 numRanges; |
3115 FT_UInt cnt; | 3146 FT_UInt cnt; |
3116 FT_UInt32* q; | 3147 FT_UInt32* q; |
3117 | 3148 |
3118 | 3149 |
3119 cnt = tt_cmap14_def_char_count( p ); | 3150 cnt = tt_cmap14_def_char_count( p ); |
3120 numRanges = (FT_UInt32)TT_NEXT_ULONG( p ); | 3151 numRanges = (FT_UInt32)TT_NEXT_ULONG( p ); |
3121 | 3152 |
3122 if ( tt_cmap14_ensure( cmap14, ( cnt + 1 ), memory ) ) | 3153 if ( tt_cmap14_ensure( cmap14, ( cnt + 1 ), memory ) ) |
3123 return NULL; | 3154 return NULL; |
3124 | 3155 |
3125 for ( q = cmap14->results; numRanges > 0; --numRanges ) | 3156 for ( q = cmap14->results; numRanges > 0; --numRanges ) |
3126 { | 3157 { |
3127 FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p ); | 3158 FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p ); |
3128 | 3159 |
3129 | 3160 |
3130 cnt = FT_NEXT_BYTE( p ) + 1; | 3161 cnt = FT_NEXT_BYTE( p ) + 1; |
3131 do | 3162 do |
3132 { | 3163 { |
3133 q[0] = uni; | 3164 q[0] = uni; |
3134 uni += 1; | 3165 uni += 1; |
3135 q += 1; | 3166 q += 1; |
| 3167 |
3136 } while ( --cnt != 0 ); | 3168 } while ( --cnt != 0 ); |
3137 } | 3169 } |
3138 q[0] = 0; | 3170 q[0] = 0; |
3139 | 3171 |
3140 return cmap14->results; | 3172 return cmap14->results; |
3141 } | 3173 } |
3142 | 3174 |
3143 | 3175 |
3144 static FT_UInt32* | 3176 static FT_UInt32* |
3145 tt_cmap14_get_nondef_chars( TT_CMap cmap, | 3177 tt_cmap14_get_nondef_chars( TT_CMap cmap, |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3299 } | 3331 } |
3300 } | 3332 } |
3301 | 3333 |
3302 ret[i] = 0; | 3334 ret[i] = 0; |
3303 | 3335 |
3304 return ret; | 3336 return ret; |
3305 } | 3337 } |
3306 } | 3338 } |
3307 | 3339 |
3308 | 3340 |
3309 FT_DEFINE_TT_CMAP(tt_cmap14_class_rec, | 3341 FT_DEFINE_TT_CMAP( |
3310 sizeof ( TT_CMap14Rec ), | 3342 tt_cmap14_class_rec, |
| 3343 sizeof ( TT_CMap14Rec ), |
3311 | 3344 |
3312 (FT_CMap_InitFunc) tt_cmap14_init, | 3345 (FT_CMap_InitFunc) tt_cmap14_init, |
3313 (FT_CMap_DoneFunc) tt_cmap14_done, | 3346 (FT_CMap_DoneFunc) tt_cmap14_done, |
3314 (FT_CMap_CharIndexFunc)tt_cmap14_char_index, | 3347 (FT_CMap_CharIndexFunc)tt_cmap14_char_index, |
3315 (FT_CMap_CharNextFunc) tt_cmap14_char_next, | 3348 (FT_CMap_CharNextFunc) tt_cmap14_char_next, |
3316 | 3349 |
3317 /* Format 14 extension functions */ | 3350 /* Format 14 extension functions */ |
3318 (FT_CMap_CharVarIndexFunc) tt_cmap14_char_var_index, | 3351 (FT_CMap_CharVarIndexFunc) tt_cmap14_char_var_index, |
3319 (FT_CMap_CharVarIsDefaultFunc)tt_cmap14_char_var_isdefault, | 3352 (FT_CMap_CharVarIsDefaultFunc)tt_cmap14_char_var_isdefault, |
3320 (FT_CMap_VariantListFunc) tt_cmap14_variants, | 3353 (FT_CMap_VariantListFunc) tt_cmap14_variants, |
3321 (FT_CMap_CharVariantListFunc) tt_cmap14_char_variants, | 3354 (FT_CMap_CharVariantListFunc) tt_cmap14_char_variants, |
3322 (FT_CMap_VariantCharListFunc) tt_cmap14_variant_chars | 3355 (FT_CMap_VariantCharListFunc) tt_cmap14_variant_chars, |
3323 , | 3356 |
3324 14, | 3357 14, |
3325 (TT_CMap_ValidateFunc)tt_cmap14_validate, | 3358 (TT_CMap_ValidateFunc)tt_cmap14_validate, |
3326 (TT_CMap_Info_GetFunc)tt_cmap14_get_info | 3359 (TT_CMap_Info_GetFunc)tt_cmap14_get_info ) |
3327 ) | |
3328 | 3360 |
3329 #endif /* TT_CONFIG_CMAP_FORMAT_14 */ | 3361 #endif /* TT_CONFIG_CMAP_FORMAT_14 */ |
3330 | 3362 |
3331 | 3363 |
3332 #ifndef FT_CONFIG_OPTION_PIC | 3364 #ifndef FT_CONFIG_OPTION_PIC |
3333 | 3365 |
3334 static const TT_CMap_Class tt_cmap_classes[] = | 3366 static const TT_CMap_Class tt_cmap_classes[] = |
3335 { | 3367 { |
3336 #define TTCMAPCITEM(a) &a, | 3368 #define TTCMAPCITEM( a ) &a, |
3337 #include "ttcmapc.h" | 3369 #include "ttcmapc.h" |
3338 NULL, | 3370 NULL, |
3339 }; | 3371 }; |
3340 | 3372 |
3341 #else /*FT_CONFIG_OPTION_PIC*/ | 3373 #else /*FT_CONFIG_OPTION_PIC*/ |
3342 | 3374 |
3343 void FT_Destroy_Class_tt_cmap_classes(FT_Library library, TT_CMap_Class* clazz
) | 3375 void |
| 3376 FT_Destroy_Class_tt_cmap_classes( FT_Library library, |
| 3377 TT_CMap_Class* clazz ) |
3344 { | 3378 { |
3345 FT_Memory memory = library->memory; | 3379 FT_Memory memory = library->memory; |
| 3380 |
| 3381 |
3346 if ( clazz ) | 3382 if ( clazz ) |
3347 FT_FREE( clazz ); | 3383 FT_FREE( clazz ); |
3348 } | 3384 } |
3349 | 3385 |
3350 FT_Error FT_Create_Class_tt_cmap_classes(FT_Library library, TT_CMap_Class** o
utput_class) | 3386 |
| 3387 FT_Error |
| 3388 FT_Create_Class_tt_cmap_classes( FT_Library library, |
| 3389 TT_CMap_Class** output_class ) |
3351 { | 3390 { |
3352 TT_CMap_Class* clazz; | 3391 TT_CMap_Class* clazz = NULL; |
3353 TT_CMap_ClassRec* recs; | 3392 TT_CMap_ClassRec* recs; |
3354 FT_Error error; | 3393 FT_Error error; |
3355 FT_Memory memory = library->memory; | 3394 FT_Memory memory = library->memory; |
3356 int i = 0; | |
3357 | 3395 |
3358 #define TTCMAPCITEM(a) i++; | 3396 int i = 0; |
| 3397 |
| 3398 |
| 3399 #define TTCMAPCITEM( a ) i++; |
3359 #include "ttcmapc.h" | 3400 #include "ttcmapc.h" |
3360 | 3401 |
3361 /* allocate enough space for both the pointers +terminator and the class ins
tances */ | 3402 /* allocate enough space for both the pointers */ |
3362 if ( FT_ALLOC( clazz, sizeof(*clazz)*(i+1)+sizeof(TT_CMap_ClassRec)*i ) ) | 3403 /* plus terminator and the class instances */ |
| 3404 if ( FT_ALLOC( clazz, sizeof ( *clazz ) * ( i + 1 ) + |
| 3405 sizeof ( TT_CMap_ClassRec ) * i ) ) |
3363 return error; | 3406 return error; |
3364 | 3407 |
3365 /* the location of the class instances follows the array of pointers */ | 3408 /* the location of the class instances follows the array of pointers */ |
3366 recs = (TT_CMap_ClassRec*) (((char*)clazz)+(sizeof(*clazz)*(i+1))); | 3409 recs = (TT_CMap_ClassRec*)( (char*)clazz + |
3367 i=0; | 3410 sizeof ( *clazz ) * ( i + 1 ) ); |
| 3411 i = 0; |
3368 | 3412 |
3369 #undef TTCMAPCITEM | 3413 #undef TTCMAPCITEM |
3370 #define TTCMAPCITEM(a) \ | 3414 #define TTCMAPCITEM( a ) \ |
3371 FT_Init_Class_##a(&recs[i]); \ | 3415 FT_Init_Class_ ## a( &recs[i] ); \ |
3372 clazz[i] = &recs[i]; \ | 3416 clazz[i] = &recs[i]; \ |
3373 i++; | 3417 i++; |
3374 #include "ttcmapc.h" | 3418 #include "ttcmapc.h" |
3375 | 3419 |
3376 clazz[i] = NULL; | 3420 clazz[i] = NULL; |
3377 | 3421 |
3378 *output_class = clazz; | 3422 *output_class = clazz; |
3379 return SFNT_Err_Ok; | 3423 return FT_Err_Ok; |
3380 } | 3424 } |
3381 | 3425 |
3382 #endif /*FT_CONFIG_OPTION_PIC*/ | 3426 #endif /*FT_CONFIG_OPTION_PIC*/ |
3383 | 3427 |
3384 | 3428 |
3385 /* parse the `cmap' table and build the corresponding TT_CMap objects */ | 3429 /* parse the `cmap' table and build the corresponding TT_CMap objects */ |
3386 /* in the current face */ | 3430 /* in the current face */ |
3387 /* */ | 3431 /* */ |
3388 FT_LOCAL_DEF( FT_Error ) | 3432 FT_LOCAL_DEF( FT_Error ) |
3389 tt_face_build_cmaps( TT_Face face ) | 3433 tt_face_build_cmaps( TT_Face face ) |
3390 { | 3434 { |
3391 FT_Byte* table = face->cmap_table; | 3435 FT_Byte* table = face->cmap_table; |
3392 FT_Byte* limit = table + face->cmap_size; | 3436 FT_Byte* limit = table + face->cmap_size; |
3393 FT_UInt volatile num_cmaps; | 3437 FT_UInt volatile num_cmaps; |
3394 FT_Byte* volatile p = table; | 3438 FT_Byte* volatile p = table; |
3395 FT_Library library = FT_FACE_LIBRARY( face ); | 3439 FT_Library library = FT_FACE_LIBRARY( face ); |
3396 | 3440 |
3397 FT_UNUSED( library ); | 3441 FT_UNUSED( library ); |
3398 | 3442 |
3399 | 3443 |
3400 if ( !p || p + 4 > limit ) | 3444 if ( !p || p + 4 > limit ) |
3401 return SFNT_Err_Invalid_Table; | 3445 return FT_THROW( Invalid_Table ); |
3402 | 3446 |
3403 /* only recognize format 0 */ | 3447 /* only recognize format 0 */ |
3404 if ( TT_NEXT_USHORT( p ) != 0 ) | 3448 if ( TT_NEXT_USHORT( p ) != 0 ) |
3405 { | 3449 { |
3406 p -= 2; | 3450 p -= 2; |
3407 FT_ERROR(( "tt_face_build_cmaps:" | 3451 FT_ERROR(( "tt_face_build_cmaps:" |
3408 " unsupported `cmap' table format = %d\n", | 3452 " unsupported `cmap' table format = %d\n", |
3409 TT_PEEK_USHORT( p ) )); | 3453 TT_PEEK_USHORT( p ) )); |
3410 return SFNT_Err_Invalid_Table; | 3454 return FT_THROW( Invalid_Table ); |
3411 } | 3455 } |
3412 | 3456 |
3413 num_cmaps = TT_NEXT_USHORT( p ); | 3457 num_cmaps = TT_NEXT_USHORT( p ); |
| 3458 |
3414 #ifdef FT_MAX_CHARMAP_CACHEABLE | 3459 #ifdef FT_MAX_CHARMAP_CACHEABLE |
3415 if ( num_cmaps > FT_MAX_CHARMAP_CACHEABLE ) | 3460 if ( num_cmaps > FT_MAX_CHARMAP_CACHEABLE ) |
3416 FT_ERROR(( "tt_face_build_cmaps: too many cmap subtables(%d) " | 3461 FT_ERROR(( "tt_face_build_cmaps: too many cmap subtables (%d)\n" |
3417 "subtable#%d and later are loaded but cannot be searched\n", | 3462 " subtable #%d and higher are loaded" |
| 3463 " but cannot be searched\n", |
3418 num_cmaps, FT_MAX_CHARMAP_CACHEABLE + 1 )); | 3464 num_cmaps, FT_MAX_CHARMAP_CACHEABLE + 1 )); |
3419 #endif | 3465 #endif |
3420 | 3466 |
3421 for ( ; num_cmaps > 0 && p + 8 <= limit; num_cmaps-- ) | 3467 for ( ; num_cmaps > 0 && p + 8 <= limit; num_cmaps-- ) |
3422 { | 3468 { |
3423 FT_CharMapRec charmap; | 3469 FT_CharMapRec charmap; |
3424 FT_UInt32 offset; | 3470 FT_UInt32 offset; |
3425 | 3471 |
3426 | 3472 |
3427 charmap.platform_id = TT_NEXT_USHORT( p ); | 3473 charmap.platform_id = TT_NEXT_USHORT( p ); |
3428 charmap.encoding_id = TT_NEXT_USHORT( p ); | 3474 charmap.encoding_id = TT_NEXT_USHORT( p ); |
3429 charmap.face = FT_FACE( face ); | 3475 charmap.face = FT_FACE( face ); |
3430 charmap.encoding = FT_ENCODING_NONE; /* will be filled later */ | 3476 charmap.encoding = FT_ENCODING_NONE; /* will be filled later */ |
3431 offset = TT_NEXT_ULONG( p ); | 3477 offset = TT_NEXT_ULONG( p ); |
3432 | 3478 |
3433 if ( offset && offset <= face->cmap_size - 2 ) | 3479 if ( offset && offset <= face->cmap_size - 2 ) |
3434 { | 3480 { |
3435 FT_Byte* volatile cmap = table + offset; | 3481 FT_Byte* volatile cmap = table + offset; |
3436 volatile FT_UInt format = TT_PEEK_USHORT( cmap ); | 3482 volatile FT_UInt format = TT_PEEK_USHORT( cmap ); |
3437 const TT_CMap_Class* volatile pclazz = FT_TT_CMAP_CLASSES_GET; | 3483 const TT_CMap_Class* volatile pclazz = TT_CMAP_CLASSES_GET; |
3438 TT_CMap_Class volatile clazz; | 3484 TT_CMap_Class volatile clazz; |
3439 | 3485 |
3440 | 3486 |
3441 for ( ; *pclazz; pclazz++ ) | 3487 for ( ; *pclazz; pclazz++ ) |
3442 { | 3488 { |
3443 clazz = *pclazz; | 3489 clazz = *pclazz; |
3444 if ( clazz->format == format ) | 3490 if ( clazz->format == format ) |
3445 { | 3491 { |
3446 volatile TT_ValidatorRec valid; | 3492 volatile TT_ValidatorRec valid; |
3447 volatile FT_Error error = SFNT_Err_Ok; | 3493 volatile FT_Error error = FT_Err_Ok; |
3448 | 3494 |
3449 | 3495 |
3450 ft_validator_init( FT_VALIDATOR( &valid ), cmap, limit, | 3496 ft_validator_init( FT_VALIDATOR( &valid ), cmap, limit, |
3451 FT_VALIDATE_DEFAULT ); | 3497 FT_VALIDATE_DEFAULT ); |
3452 | 3498 |
3453 valid.num_glyphs = (FT_UInt)face->max_profile.numGlyphs; | 3499 valid.num_glyphs = (FT_UInt)face->max_profile.numGlyphs; |
3454 | 3500 |
3455 if ( ft_setjmp( | 3501 if ( ft_setjmp( FT_VALIDATOR( &valid )->jump_buffer) == 0 ) |
3456 *((ft_jmp_buf*)&FT_VALIDATOR( &valid )->jump_buffer) ) == 0 ) | |
3457 { | 3502 { |
3458 /* validate this cmap sub-table */ | 3503 /* validate this cmap sub-table */ |
3459 error = clazz->validate( cmap, FT_VALIDATOR( &valid ) ); | 3504 error = clazz->validate( cmap, FT_VALIDATOR( &valid ) ); |
3460 } | 3505 } |
3461 | 3506 |
3462 if ( valid.validator.error == 0 ) | 3507 if ( valid.validator.error == 0 ) |
3463 { | 3508 { |
3464 FT_CMap ttcmap; | 3509 FT_CMap ttcmap; |
3465 | 3510 |
3466 | 3511 |
3467 /* It might make sense to store the single variation selector */ | 3512 /* It might make sense to store the single variation */ |
3468 /* cmap somewhere special. But it would have to be in the */ | 3513 /* selector cmap somewhere special. But it would have to be */ |
3469 /* public FT_FaceRec, and we can't change that. */ | 3514 /* in the public FT_FaceRec, and we can't change that. */ |
3470 | 3515 |
3471 if ( !FT_CMap_New( (FT_CMap_Class)clazz, | 3516 if ( !FT_CMap_New( (FT_CMap_Class)clazz, |
3472 cmap, &charmap, &ttcmap ) ) | 3517 cmap, &charmap, &ttcmap ) ) |
3473 { | 3518 { |
3474 /* it is simpler to directly set `flags' than adding */ | 3519 /* it is simpler to directly set `flags' than adding */ |
3475 /* a parameter to FT_CMap_New */ | 3520 /* a parameter to FT_CMap_New */ |
3476 ((TT_CMap)ttcmap)->flags = (FT_Int)error; | 3521 ((TT_CMap)ttcmap)->flags = (FT_Int)error; |
3477 } | 3522 } |
3478 } | 3523 } |
3479 else | 3524 else |
3480 { | 3525 { |
3481 FT_TRACE0(( "tt_face_build_cmaps:" | 3526 FT_TRACE0(( "tt_face_build_cmaps:" |
3482 " broken cmap sub-table ignored\n" )); | 3527 " broken cmap sub-table ignored\n" )); |
3483 } | 3528 } |
3484 break; | 3529 break; |
3485 } | 3530 } |
3486 } | 3531 } |
3487 | 3532 |
3488 if ( *pclazz == NULL ) | 3533 if ( *pclazz == NULL ) |
3489 { | 3534 { |
3490 FT_TRACE0(( "tt_face_build_cmaps:" | 3535 FT_TRACE0(( "tt_face_build_cmaps:" |
3491 " unsupported cmap sub-table ignored\n" )); | 3536 " unsupported cmap sub-table ignored\n" )); |
3492 } | 3537 } |
3493 } | 3538 } |
3494 } | 3539 } |
3495 | 3540 |
3496 return SFNT_Err_Ok; | 3541 return FT_Err_Ok; |
3497 } | 3542 } |
3498 | 3543 |
3499 | 3544 |
3500 FT_LOCAL( FT_Error ) | 3545 FT_LOCAL( FT_Error ) |
3501 tt_get_cmap_info( FT_CharMap charmap, | 3546 tt_get_cmap_info( FT_CharMap charmap, |
3502 TT_CMapInfo *cmap_info ) | 3547 TT_CMapInfo *cmap_info ) |
3503 { | 3548 { |
3504 FT_CMap cmap = (FT_CMap)charmap; | 3549 FT_CMap cmap = (FT_CMap)charmap; |
3505 TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz; | 3550 TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz; |
3506 | 3551 |
3507 | 3552 |
3508 return clazz->get_cmap_info( charmap, cmap_info ); | 3553 return clazz->get_cmap_info( charmap, cmap_info ); |
3509 } | 3554 } |
3510 | 3555 |
3511 | 3556 |
3512 /* END */ | 3557 /* END */ |
OLD | NEW |