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

Side by Side Diff: third_party/freetype/src/psaux/afmparse.c

Issue 1413673003: Update bundled freetype to 2.6.1 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: DEPS for corpus Created 5 years, 1 month 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
« no previous file with comments | « third_party/freetype/src/psaux/afmparse.h ('k') | third_party/freetype/src/psaux/psaux.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /***************************************************************************/ 1 /***************************************************************************/
2 /* */ 2 /* */
3 /* afmparse.c */ 3 /* afmparse.c */
4 /* */ 4 /* */
5 /* AFM parser (body). */ 5 /* AFM parser (body). */
6 /* */ 6 /* */
7 /* Copyright 2006-2010, 2012, 2013 by */ 7 /* Copyright 2006-2015 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 /* column separator; there is no `column' in the spec actually */ 68 /* column separator; there is no `column' in the spec actually */
69 #define AFM_IS_SEP( ch ) ( (ch) == ';' ) 69 #define AFM_IS_SEP( ch ) ( (ch) == ';' )
70 70
71 #define AFM_GETC() \ 71 #define AFM_GETC() \
72 ( ( (stream)->cursor < (stream)->limit ) ? *(stream)->cursor++ \ 72 ( ( (stream)->cursor < (stream)->limit ) ? *(stream)->cursor++ \
73 : EOF ) 73 : EOF )
74 74
75 #define AFM_STREAM_KEY_BEGIN( stream ) \ 75 #define AFM_STREAM_KEY_BEGIN( stream ) \
76 (char*)( (stream)->cursor - 1 ) 76 (char*)( (stream)->cursor - 1 )
77 77
78 #define AFM_STREAM_KEY_LEN( stream, key ) \ 78 #define AFM_STREAM_KEY_LEN( stream, key ) \
79 ( (char*)(stream)->cursor - key - 1 ) 79 (FT_Offset)( (char*)(stream)->cursor - key - 1 )
80 80
81 #define AFM_STATUS_EOC( stream ) \ 81 #define AFM_STATUS_EOC( stream ) \
82 ( (stream)->status >= AFM_STREAM_STATUS_EOC ) 82 ( (stream)->status >= AFM_STREAM_STATUS_EOC )
83 83
84 #define AFM_STATUS_EOL( stream ) \ 84 #define AFM_STATUS_EOL( stream ) \
85 ( (stream)->status >= AFM_STREAM_STATUS_EOL ) 85 ( (stream)->status >= AFM_STREAM_STATUS_EOL )
86 86
87 #define AFM_STATUS_EOF( stream ) \ 87 #define AFM_STATUS_EOF( stream ) \
88 ( (stream)->status >= AFM_STREAM_STATUS_EOF ) 88 ( (stream)->status >= AFM_STREAM_STATUS_EOF )
89 89
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 /* 362 /*
363 * `afm_parser_read_vals' and `afm_parser_next_key' provide 363 * `afm_parser_read_vals' and `afm_parser_next_key' provide
364 * high-level operations to an AFM_Stream. The rest of the 364 * high-level operations to an AFM_Stream. The rest of the
365 * parser functions should use them without accessing the 365 * parser functions should use them without accessing the
366 * AFM_Stream directly. 366 * AFM_Stream directly.
367 */ 367 */
368 368
369 FT_LOCAL_DEF( FT_Int ) 369 FT_LOCAL_DEF( FT_Int )
370 afm_parser_read_vals( AFM_Parser parser, 370 afm_parser_read_vals( AFM_Parser parser,
371 AFM_Value vals, 371 AFM_Value vals,
372 FT_UInt n ) 372 FT_Int n )
373 { 373 {
374 AFM_Stream stream = parser->stream; 374 AFM_Stream stream = parser->stream;
375 char* str; 375 char* str;
376 FT_UInt i; 376 FT_Int i;
377 377
378 378
379 if ( n > AFM_MAX_ARGUMENTS ) 379 if ( n > AFM_MAX_ARGUMENTS )
380 return 0; 380 return 0;
381 381
382 for ( i = 0; i < n; i++ ) 382 for ( i = 0; i < n; i++ )
383 { 383 {
384 FT_Offset len; 384 FT_Offset len;
385 AFM_Value val = vals + i; 385 AFM_Value val = vals + i;
386 386
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 return i; 439 return i;
440 } 440 }
441 441
442 442
443 FT_LOCAL_DEF( char* ) 443 FT_LOCAL_DEF( char* )
444 afm_parser_next_key( AFM_Parser parser, 444 afm_parser_next_key( AFM_Parser parser,
445 FT_Bool line, 445 FT_Bool line,
446 FT_Offset* len ) 446 FT_Offset* len )
447 { 447 {
448 AFM_Stream stream = parser->stream; 448 AFM_Stream stream = parser->stream;
449 char* key = 0; /* make stupid compiler happy */ 449 char* key = NULL; /* make stupid compiler happy */
450 450
451 451
452 if ( line ) 452 if ( line )
453 { 453 {
454 while ( 1 ) 454 while ( 1 )
455 { 455 {
456 /* skip current line */ 456 /* skip current line */
457 if ( !AFM_STATUS_EOL( stream ) ) 457 if ( !AFM_STATUS_EOL( stream ) )
458 afm_stream_read_string( stream ); 458 afm_stream_read_string( stream );
459 459
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 FT_LOCAL( void ) 555 FT_LOCAL( void )
556 afm_parser_done( AFM_Parser parser ) 556 afm_parser_done( AFM_Parser parser )
557 { 557 {
558 FT_Memory memory = parser->memory; 558 FT_Memory memory = parser->memory;
559 559
560 560
561 FT_FREE( parser->stream ); 561 FT_FREE( parser->stream );
562 } 562 }
563 563
564 564
565 FT_LOCAL_DEF( FT_Error ) 565 static FT_Error
566 afm_parser_read_int( AFM_Parser parser, 566 afm_parser_read_int( AFM_Parser parser,
567 FT_Int* aint ) 567 FT_Int* aint )
568 { 568 {
569 AFM_ValueRec val; 569 AFM_ValueRec val;
570 570
571 571
572 val.type = AFM_VALUE_TYPE_INTEGER; 572 val.type = AFM_VALUE_TYPE_INTEGER;
573 573
574 if ( afm_parser_read_vals( parser, &val, 1 ) == 1 ) 574 if ( afm_parser_read_vals( parser, &val, 1 ) == 1 )
575 { 575 {
576 *aint = val.u.i; 576 *aint = val.u.i;
577 577
578 return FT_Err_Ok; 578 return FT_Err_Ok;
579 } 579 }
580 else 580 else
581 return FT_THROW( Syntax_Error ); 581 return FT_THROW( Syntax_Error );
582 } 582 }
583 583
584 584
585 static FT_Error 585 static FT_Error
586 afm_parse_track_kern( AFM_Parser parser ) 586 afm_parse_track_kern( AFM_Parser parser )
587 { 587 {
588 AFM_FontInfo fi = parser->FontInfo; 588 AFM_FontInfo fi = parser->FontInfo;
589 AFM_TrackKern tk; 589 AFM_TrackKern tk;
590 char* key; 590 char* key;
591 FT_Offset len; 591 FT_Offset len;
592 int n = -1; 592 int n = -1;
593 FT_Int tmp;
593 594
594 595
595 if ( afm_parser_read_int( parser, &fi->NumTrackKern ) ) 596 if ( afm_parser_read_int( parser, &tmp ) )
596 goto Fail; 597 goto Fail;
597 598
599 if ( tmp < 0 )
600 goto Fail;
601
602 fi->NumTrackKern = (FT_UInt)tmp;
603
598 if ( fi->NumTrackKern ) 604 if ( fi->NumTrackKern )
599 { 605 {
600 FT_Memory memory = parser->memory; 606 FT_Memory memory = parser->memory;
601 FT_Error error; 607 FT_Error error;
602 608
603 609
604 if ( FT_QNEW_ARRAY( fi->TrackKerns, fi->NumTrackKern ) ) 610 if ( FT_QNEW_ARRAY( fi->TrackKerns, fi->NumTrackKern ) )
605 return error; 611 return error;
606 } 612 }
607 613
608 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) 614 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
609 { 615 {
610 AFM_ValueRec shared_vals[5]; 616 AFM_ValueRec shared_vals[5];
611 617
612 618
613 switch ( afm_tokenize( key, len ) ) 619 switch ( afm_tokenize( key, len ) )
614 { 620 {
615 case AFM_TOKEN_TRACKKERN: 621 case AFM_TOKEN_TRACKKERN:
616 n++; 622 n++;
617 623
618 if ( n >= fi->NumTrackKern ) 624 if ( n >= (int)fi->NumTrackKern )
619 goto Fail; 625 goto Fail;
620 626
621 tk = fi->TrackKerns + n; 627 tk = fi->TrackKerns + n;
622 628
623 shared_vals[0].type = AFM_VALUE_TYPE_INTEGER; 629 shared_vals[0].type = AFM_VALUE_TYPE_INTEGER;
624 shared_vals[1].type = AFM_VALUE_TYPE_FIXED; 630 shared_vals[1].type = AFM_VALUE_TYPE_FIXED;
625 shared_vals[2].type = AFM_VALUE_TYPE_FIXED; 631 shared_vals[2].type = AFM_VALUE_TYPE_FIXED;
626 shared_vals[3].type = AFM_VALUE_TYPE_FIXED; 632 shared_vals[3].type = AFM_VALUE_TYPE_FIXED;
627 shared_vals[4].type = AFM_VALUE_TYPE_FIXED; 633 shared_vals[4].type = AFM_VALUE_TYPE_FIXED;
628 if ( afm_parser_read_vals( parser, shared_vals, 5 ) != 5 ) 634 if ( afm_parser_read_vals( parser, shared_vals, 5 ) != 5 )
629 goto Fail; 635 goto Fail;
630 636
631 tk->degree = shared_vals[0].u.i; 637 tk->degree = shared_vals[0].u.i;
632 tk->min_ptsize = shared_vals[1].u.f; 638 tk->min_ptsize = shared_vals[1].u.f;
633 tk->min_kern = shared_vals[2].u.f; 639 tk->min_kern = shared_vals[2].u.f;
634 tk->max_ptsize = shared_vals[3].u.f; 640 tk->max_ptsize = shared_vals[3].u.f;
635 tk->max_kern = shared_vals[4].u.f; 641 tk->max_kern = shared_vals[4].u.f;
636 642
637 break; 643 break;
638 644
639 case AFM_TOKEN_ENDTRACKKERN: 645 case AFM_TOKEN_ENDTRACKKERN:
640 case AFM_TOKEN_ENDKERNDATA: 646 case AFM_TOKEN_ENDKERNDATA:
641 case AFM_TOKEN_ENDFONTMETRICS: 647 case AFM_TOKEN_ENDFONTMETRICS:
642 fi->NumTrackKern = n + 1; 648 fi->NumTrackKern = (FT_UInt)( n + 1 );
643 return FT_Err_Ok; 649 return FT_Err_Ok;
644 650
645 case AFM_TOKEN_UNKNOWN: 651 case AFM_TOKEN_UNKNOWN:
646 break; 652 break;
647 653
648 default: 654 default:
649 goto Fail; 655 goto Fail;
650 } 656 }
651 } 657 }
652 658
(...skipping 28 matching lines...) Expand all
681 687
682 688
683 static FT_Error 689 static FT_Error
684 afm_parse_kern_pairs( AFM_Parser parser ) 690 afm_parse_kern_pairs( AFM_Parser parser )
685 { 691 {
686 AFM_FontInfo fi = parser->FontInfo; 692 AFM_FontInfo fi = parser->FontInfo;
687 AFM_KernPair kp; 693 AFM_KernPair kp;
688 char* key; 694 char* key;
689 FT_Offset len; 695 FT_Offset len;
690 int n = -1; 696 int n = -1;
697 FT_Int tmp;
691 698
692 699
693 if ( afm_parser_read_int( parser, &fi->NumKernPair ) ) 700 if ( afm_parser_read_int( parser, &tmp ) )
694 goto Fail; 701 goto Fail;
695 702
703 if ( tmp < 0 )
704 goto Fail;
705
706 fi->NumKernPair = (FT_UInt)tmp;
707
696 if ( fi->NumKernPair ) 708 if ( fi->NumKernPair )
697 { 709 {
698 FT_Memory memory = parser->memory; 710 FT_Memory memory = parser->memory;
699 FT_Error error; 711 FT_Error error;
700 712
701 713
702 if ( FT_QNEW_ARRAY( fi->KernPairs, fi->NumKernPair ) ) 714 if ( FT_QNEW_ARRAY( fi->KernPairs, fi->NumKernPair ) )
703 return error; 715 return error;
704 } 716 }
705 717
706 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) 718 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
707 { 719 {
708 AFM_Token token = afm_tokenize( key, len ); 720 AFM_Token token = afm_tokenize( key, len );
709 721
710 722
711 switch ( token ) 723 switch ( token )
712 { 724 {
713 case AFM_TOKEN_KP: 725 case AFM_TOKEN_KP:
714 case AFM_TOKEN_KPX: 726 case AFM_TOKEN_KPX:
715 case AFM_TOKEN_KPY: 727 case AFM_TOKEN_KPY:
716 { 728 {
717 FT_Int r; 729 FT_Int r;
718 AFM_ValueRec shared_vals[4]; 730 AFM_ValueRec shared_vals[4];
719 731
720 732
721 n++; 733 n++;
722 734
723 if ( n >= fi->NumKernPair ) 735 if ( n >= (int)fi->NumKernPair )
724 goto Fail; 736 goto Fail;
725 737
726 kp = fi->KernPairs + n; 738 kp = fi->KernPairs + n;
727 739
728 shared_vals[0].type = AFM_VALUE_TYPE_INDEX; 740 shared_vals[0].type = AFM_VALUE_TYPE_INDEX;
729 shared_vals[1].type = AFM_VALUE_TYPE_INDEX; 741 shared_vals[1].type = AFM_VALUE_TYPE_INDEX;
730 shared_vals[2].type = AFM_VALUE_TYPE_INTEGER; 742 shared_vals[2].type = AFM_VALUE_TYPE_INTEGER;
731 shared_vals[3].type = AFM_VALUE_TYPE_INTEGER; 743 shared_vals[3].type = AFM_VALUE_TYPE_INTEGER;
732 r = afm_parser_read_vals( parser, shared_vals, 4 ); 744 r = afm_parser_read_vals( parser, shared_vals, 4 );
733 if ( r < 3 ) 745 if ( r < 3 )
734 goto Fail; 746 goto Fail;
735 747
736 kp->index1 = shared_vals[0].u.i; 748 /* index values can't be negative */
737 kp->index2 = shared_vals[1].u.i; 749 kp->index1 = shared_vals[0].u.u;
750 kp->index2 = shared_vals[1].u.u;
738 if ( token == AFM_TOKEN_KPY ) 751 if ( token == AFM_TOKEN_KPY )
739 { 752 {
740 kp->x = 0; 753 kp->x = 0;
741 kp->y = shared_vals[2].u.i; 754 kp->y = shared_vals[2].u.i;
742 } 755 }
743 else 756 else
744 { 757 {
745 kp->x = shared_vals[2].u.i; 758 kp->x = shared_vals[2].u.i;
746 kp->y = ( token == AFM_TOKEN_KP && r == 4 ) 759 kp->y = ( token == AFM_TOKEN_KP && r == 4 )
747 ? shared_vals[3].u.i : 0; 760 ? shared_vals[3].u.i : 0;
748 } 761 }
749 } 762 }
750 break; 763 break;
751 764
752 case AFM_TOKEN_ENDKERNPAIRS: 765 case AFM_TOKEN_ENDKERNPAIRS:
753 case AFM_TOKEN_ENDKERNDATA: 766 case AFM_TOKEN_ENDKERNDATA:
754 case AFM_TOKEN_ENDFONTMETRICS: 767 case AFM_TOKEN_ENDFONTMETRICS:
755 fi->NumKernPair = n + 1; 768 fi->NumKernPair = (FT_UInt)( n + 1 );
756 ft_qsort( fi->KernPairs, fi->NumKernPair, 769 ft_qsort( fi->KernPairs, fi->NumKernPair,
757 sizeof ( AFM_KernPairRec ), 770 sizeof ( AFM_KernPairRec ),
758 afm_compare_kern_pairs ); 771 afm_compare_kern_pairs );
759 return FT_Err_Ok; 772 return FT_Err_Ok;
760 773
761 case AFM_TOKEN_UNKNOWN: 774 case AFM_TOKEN_UNKNOWN:
762 break; 775 break;
763 776
764 default: 777 default:
765 goto Fail; 778 goto Fail;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 } 821 }
809 } 822 }
810 823
811 Fail: 824 Fail:
812 return FT_THROW( Syntax_Error ); 825 return FT_THROW( Syntax_Error );
813 } 826 }
814 827
815 828
816 static FT_Error 829 static FT_Error
817 afm_parser_skip_section( AFM_Parser parser, 830 afm_parser_skip_section( AFM_Parser parser,
818 FT_UInt n, 831 FT_Int n,
819 AFM_Token end_section ) 832 AFM_Token end_section )
820 { 833 {
821 char* key; 834 char* key;
822 FT_Offset len; 835 FT_Offset len;
823 836
824 837
825 while ( n-- > 0 ) 838 while ( n-- > 0 )
826 { 839 {
827 key = afm_parser_next_key( parser, 1, NULL ); 840 key = afm_parser_next_key( parser, 1, NULL );
828 if ( !key ) 841 if ( !key )
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 FT_FREE( fi->KernPairs ); 968 FT_FREE( fi->KernPairs );
956 fi->NumKernPair = 0; 969 fi->NumKernPair = 0;
957 970
958 fi->IsCIDFont = 0; 971 fi->IsCIDFont = 0;
959 972
960 return error; 973 return error;
961 } 974 }
962 975
963 976
964 /* END */ 977 /* END */
OLDNEW
« no previous file with comments | « third_party/freetype/src/psaux/afmparse.h ('k') | third_party/freetype/src/psaux/psaux.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698