OLD | NEW |
1 /***************************************************************************/ | 1 /***************************************************************************/ |
2 /* */ | 2 /* */ |
3 /* cf2ft.c */ | 3 /* cf2ft.c */ |
4 /* */ | 4 /* */ |
5 /* FreeType Glue Component to Adobe's Interpreter (body). */ | 5 /* FreeType Glue Component to Adobe's Interpreter (body). */ |
6 /* */ | 6 /* */ |
7 /* Copyright 2013-2014 Adobe Systems Incorporated. */ | 7 /* Copyright 2013-2014 Adobe Systems Incorporated. */ |
8 /* */ | 8 /* */ |
9 /* This software, and all works of authorship, whether in source or */ | 9 /* This software, and all works of authorship, whether in source or */ |
10 /* object code form as indicated by the copyright notice(s) included */ | 10 /* object code form as indicated by the copyright notice(s) included */ |
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 /* return 0 on success */ | 544 /* return 0 on success */ |
545 FT_LOCAL_DEF( CF2_Int ) | 545 FT_LOCAL_DEF( CF2_Int ) |
546 cf2_initGlobalRegionBuffer( CFF_Decoder* decoder, | 546 cf2_initGlobalRegionBuffer( CFF_Decoder* decoder, |
547 CF2_UInt idx, | 547 CF2_UInt idx, |
548 CF2_Buffer buf ) | 548 CF2_Buffer buf ) |
549 { | 549 { |
550 FT_ASSERT( decoder ); | 550 FT_ASSERT( decoder ); |
551 | 551 |
552 FT_ZERO( buf ); | 552 FT_ZERO( buf ); |
553 | 553 |
554 idx += decoder->globals_bias; | 554 idx += (CF2_UInt)decoder->globals_bias; |
555 if ( idx >= decoder->num_globals ) | 555 if ( idx >= decoder->num_globals ) |
556 return TRUE; /* error */ | 556 return TRUE; /* error */ |
557 | 557 |
558 FT_ASSERT( decoder->globals ); | 558 FT_ASSERT( decoder->globals ); |
559 | 559 |
560 buf->start = | 560 buf->start = |
561 buf->ptr = decoder->globals[idx]; | 561 buf->ptr = decoder->globals[idx]; |
562 buf->end = decoder->globals[idx + 1]; | 562 buf->end = decoder->globals[idx + 1]; |
563 | 563 |
564 return FALSE; /* success */ | 564 return FALSE; /* success */ |
565 } | 565 } |
566 | 566 |
567 | 567 |
568 /* convert AdobeStandardEncoding code to CF2_Buffer; */ | 568 /* convert AdobeStandardEncoding code to CF2_Buffer; */ |
569 /* used for seac component */ | 569 /* used for seac component */ |
570 FT_LOCAL_DEF( FT_Error ) | 570 FT_LOCAL_DEF( FT_Error ) |
571 cf2_getSeacComponent( CFF_Decoder* decoder, | 571 cf2_getSeacComponent( CFF_Decoder* decoder, |
572 CF2_UInt code, | 572 CF2_Int code, |
573 CF2_Buffer buf ) | 573 CF2_Buffer buf ) |
574 { | 574 { |
575 CF2_Int gid; | 575 CF2_Int gid; |
576 FT_Byte* charstring; | 576 FT_Byte* charstring; |
577 FT_ULong len; | 577 FT_ULong len; |
578 FT_Error error; | 578 FT_Error error; |
579 | 579 |
580 | 580 |
581 FT_ASSERT( decoder ); | 581 FT_ASSERT( decoder ); |
582 | 582 |
583 FT_ZERO( buf ); | 583 FT_ZERO( buf ); |
584 | 584 |
585 gid = cff_lookup_glyph_by_stdcharcode( decoder->cff, code ); | 585 #ifdef FT_CONFIG_OPTION_INCREMENTAL |
586 if ( gid < 0 ) | 586 /* Incremental fonts don't necessarily have valid charsets. */ |
587 return FT_THROW( Invalid_Glyph_Format ); | 587 /* They use the character code, not the glyph index, in this case. */ |
| 588 if ( decoder->builder.face->root.internal->incremental_interface ) |
| 589 gid = code; |
| 590 else |
| 591 #endif /* FT_CONFIG_OPTION_INCREMENTAL */ |
| 592 { |
| 593 gid = cff_lookup_glyph_by_stdcharcode( decoder->cff, code ); |
| 594 if ( gid < 0 ) |
| 595 return FT_THROW( Invalid_Glyph_Format ); |
| 596 } |
588 | 597 |
589 error = cff_get_glyph_data( decoder->builder.face, | 598 error = cff_get_glyph_data( decoder->builder.face, |
590 gid, | 599 (CF2_UInt)gid, |
591 &charstring, | 600 &charstring, |
592 &len ); | 601 &len ); |
593 /* TODO: for now, just pass the FreeType error through */ | 602 /* TODO: for now, just pass the FreeType error through */ |
594 if ( error ) | 603 if ( error ) |
595 return error; | 604 return error; |
596 | 605 |
597 /* assume input has been validated */ | 606 /* assume input has been validated */ |
598 FT_ASSERT( charstring + len >= charstring ); | 607 FT_ASSERT( charstring + len >= charstring ); |
599 | 608 |
600 buf->start = charstring; | 609 buf->start = charstring; |
(...skipping 18 matching lines...) Expand all Loading... |
619 | 628 |
620 FT_LOCAL_DEF( CF2_Int ) | 629 FT_LOCAL_DEF( CF2_Int ) |
621 cf2_initLocalRegionBuffer( CFF_Decoder* decoder, | 630 cf2_initLocalRegionBuffer( CFF_Decoder* decoder, |
622 CF2_UInt idx, | 631 CF2_UInt idx, |
623 CF2_Buffer buf ) | 632 CF2_Buffer buf ) |
624 { | 633 { |
625 FT_ASSERT( decoder ); | 634 FT_ASSERT( decoder ); |
626 | 635 |
627 FT_ZERO( buf ); | 636 FT_ZERO( buf ); |
628 | 637 |
629 idx += decoder->locals_bias; | 638 idx += (CF2_UInt)decoder->locals_bias; |
630 if ( idx >= decoder->num_locals ) | 639 if ( idx >= decoder->num_locals ) |
631 return TRUE; /* error */ | 640 return TRUE; /* error */ |
632 | 641 |
633 FT_ASSERT( decoder->locals ); | 642 FT_ASSERT( decoder->locals ); |
634 | 643 |
635 buf->start = | 644 buf->start = |
636 buf->ptr = decoder->locals[idx]; | 645 buf->ptr = decoder->locals[idx]; |
637 buf->end = decoder->locals[idx + 1]; | 646 buf->end = decoder->locals[idx + 1]; |
638 | 647 |
639 return FALSE; /* success */ | 648 return FALSE; /* success */ |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 | 691 |
683 FT_ASSERT( decoder ); | 692 FT_ASSERT( decoder ); |
684 | 693 |
685 cff_builder_close_contour( &decoder->builder ); | 694 cff_builder_close_contour( &decoder->builder ); |
686 | 695 |
687 FT_GlyphLoader_Add( decoder->builder.loader ); | 696 FT_GlyphLoader_Add( decoder->builder.loader ); |
688 } | 697 } |
689 | 698 |
690 | 699 |
691 /* END */ | 700 /* END */ |
OLD | NEW |