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

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

Issue 89753003: Update freetype to latest version of ASOP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src/third_party/freetype.git@master
Patch Set: Created 7 years 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 | « src/pfr/pfrload.c ('k') | src/psaux/psconv.h » ('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 by */ 7 /* Copyright 2006-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
18 #include <ft2build.h> 18 #include <ft2build.h>
19 #include FT_FREETYPE_H 19 #include FT_FREETYPE_H
20 #include FT_INTERNAL_DEBUG_H
20 #include FT_INTERNAL_POSTSCRIPT_AUX_H 21 #include FT_INTERNAL_POSTSCRIPT_AUX_H
21 22
22 #include "afmparse.h" 23 #include "afmparse.h"
23 #include "psconv.h" 24 #include "psconv.h"
24 25
25 #include "psauxerr.h" 26 #include "psauxerr.h"
26 27
27 28
28 /***************************************************************************/ 29 /***************************************************************************/
29 /* */ 30 /* */
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 113
113 return ch; 114 return ch;
114 } 115 }
115 116
116 117
117 /* read a key or value in current column */ 118 /* read a key or value in current column */
118 static char* 119 static char*
119 afm_stream_read_one( AFM_Stream stream ) 120 afm_stream_read_one( AFM_Stream stream )
120 { 121 {
121 char* str; 122 char* str;
122 int ch;
123 123
124 124
125 afm_stream_skip_spaces( stream ); 125 afm_stream_skip_spaces( stream );
126 if ( AFM_STATUS_EOC( stream ) ) 126 if ( AFM_STATUS_EOC( stream ) )
127 return NULL; 127 return NULL;
128 128
129 str = AFM_STREAM_KEY_BEGIN( stream ); 129 str = AFM_STREAM_KEY_BEGIN( stream );
130 130
131 while ( 1 ) 131 while ( 1 )
132 { 132 {
133 ch = AFM_GETC(); 133 int ch = AFM_GETC();
134
135
134 if ( AFM_IS_SPACE( ch ) ) 136 if ( AFM_IS_SPACE( ch ) )
135 break; 137 break;
136 else if ( AFM_IS_NEWLINE( ch ) ) 138 else if ( AFM_IS_NEWLINE( ch ) )
137 { 139 {
138 stream->status = AFM_STREAM_STATUS_EOL; 140 stream->status = AFM_STREAM_STATUS_EOL;
139 break; 141 break;
140 } 142 }
141 else if ( AFM_IS_SEP( ch ) ) 143 else if ( AFM_IS_SEP( ch ) )
142 { 144 {
143 stream->status = AFM_STREAM_STATUS_EOC; 145 stream->status = AFM_STREAM_STATUS_EOC;
144 break; 146 break;
145 } 147 }
146 else if ( AFM_IS_EOF( ch ) ) 148 else if ( AFM_IS_EOF( ch ) )
147 { 149 {
148 stream->status = AFM_STREAM_STATUS_EOF; 150 stream->status = AFM_STREAM_STATUS_EOF;
149 break; 151 break;
150 } 152 }
151 } 153 }
152 154
153 return str; 155 return str;
154 } 156 }
155 157
156 158
157 /* read a string (i.e., read to EOL) */ 159 /* read a string (i.e., read to EOL) */
158 static char* 160 static char*
159 afm_stream_read_string( AFM_Stream stream ) 161 afm_stream_read_string( AFM_Stream stream )
160 { 162 {
161 char* str; 163 char* str;
162 int ch;
163 164
164 165
165 afm_stream_skip_spaces( stream ); 166 afm_stream_skip_spaces( stream );
166 if ( AFM_STATUS_EOL( stream ) ) 167 if ( AFM_STATUS_EOL( stream ) )
167 return NULL; 168 return NULL;
168 169
169 str = AFM_STREAM_KEY_BEGIN( stream ); 170 str = AFM_STREAM_KEY_BEGIN( stream );
170 171
171 /* scan to eol */ 172 /* scan to eol */
172 while ( 1 ) 173 while ( 1 )
173 { 174 {
174 ch = AFM_GETC(); 175 int ch = AFM_GETC();
176
177
175 if ( AFM_IS_NEWLINE( ch ) ) 178 if ( AFM_IS_NEWLINE( ch ) )
176 { 179 {
177 stream->status = AFM_STREAM_STATUS_EOL; 180 stream->status = AFM_STREAM_STATUS_EOL;
178 break; 181 break;
179 } 182 }
180 else if ( AFM_IS_EOF( ch ) ) 183 else if ( AFM_IS_EOF( ch ) )
181 { 184 {
182 stream->status = AFM_STREAM_STATUS_EOF; 185 stream->status = AFM_STREAM_STATUS_EOF;
183 break; 186 break;
184 } 187 }
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 stream->limit = limit; 541 stream->limit = limit;
539 542
540 /* don't skip the first line during the first call */ 543 /* don't skip the first line during the first call */
541 stream->status = AFM_STREAM_STATUS_EOL; 544 stream->status = AFM_STREAM_STATUS_EOL;
542 545
543 parser->memory = memory; 546 parser->memory = memory;
544 parser->stream = stream; 547 parser->stream = stream;
545 parser->FontInfo = NULL; 548 parser->FontInfo = NULL;
546 parser->get_index = NULL; 549 parser->get_index = NULL;
547 550
548 return PSaux_Err_Ok; 551 return FT_Err_Ok;
549 } 552 }
550 553
551 554
552 FT_LOCAL( void ) 555 FT_LOCAL( void )
553 afm_parser_done( AFM_Parser parser ) 556 afm_parser_done( AFM_Parser parser )
554 { 557 {
555 FT_Memory memory = parser->memory; 558 FT_Memory memory = parser->memory;
556 559
557 560
558 FT_FREE( parser->stream ); 561 FT_FREE( parser->stream );
559 } 562 }
560 563
561 564
562 FT_LOCAL_DEF( FT_Error ) 565 FT_LOCAL_DEF( FT_Error )
563 afm_parser_read_int( AFM_Parser parser, 566 afm_parser_read_int( AFM_Parser parser,
564 FT_Int* aint ) 567 FT_Int* aint )
565 { 568 {
566 AFM_ValueRec val; 569 AFM_ValueRec val;
567 570
568 571
569 val.type = AFM_VALUE_TYPE_INTEGER; 572 val.type = AFM_VALUE_TYPE_INTEGER;
570 573
571 if ( afm_parser_read_vals( parser, &val, 1 ) == 1 ) 574 if ( afm_parser_read_vals( parser, &val, 1 ) == 1 )
572 { 575 {
573 *aint = val.u.i; 576 *aint = val.u.i;
574 577
575 return PSaux_Err_Ok; 578 return FT_Err_Ok;
576 } 579 }
577 else 580 else
578 return PSaux_Err_Syntax_Error; 581 return FT_THROW( Syntax_Error );
579 } 582 }
580 583
581 584
582 static FT_Error 585 static FT_Error
583 afm_parse_track_kern( AFM_Parser parser ) 586 afm_parse_track_kern( AFM_Parser parser )
584 { 587 {
585 AFM_FontInfo fi = parser->FontInfo; 588 AFM_FontInfo fi = parser->FontInfo;
586 AFM_TrackKern tk; 589 AFM_TrackKern tk;
587 char* key; 590 char* key;
588 FT_Offset len; 591 FT_Offset len;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 tk->min_kern = shared_vals[2].u.f; 633 tk->min_kern = shared_vals[2].u.f;
631 tk->max_ptsize = shared_vals[3].u.f; 634 tk->max_ptsize = shared_vals[3].u.f;
632 tk->max_kern = shared_vals[4].u.f; 635 tk->max_kern = shared_vals[4].u.f;
633 636
634 break; 637 break;
635 638
636 case AFM_TOKEN_ENDTRACKKERN: 639 case AFM_TOKEN_ENDTRACKKERN:
637 case AFM_TOKEN_ENDKERNDATA: 640 case AFM_TOKEN_ENDKERNDATA:
638 case AFM_TOKEN_ENDFONTMETRICS: 641 case AFM_TOKEN_ENDFONTMETRICS:
639 fi->NumTrackKern = n + 1; 642 fi->NumTrackKern = n + 1;
640 return PSaux_Err_Ok; 643 return FT_Err_Ok;
641 644
642 case AFM_TOKEN_UNKNOWN: 645 case AFM_TOKEN_UNKNOWN:
643 break; 646 break;
644 647
645 default: 648 default:
646 goto Fail; 649 goto Fail;
647 } 650 }
648 } 651 }
649 652
650 Fail: 653 Fail:
651 return PSaux_Err_Syntax_Error; 654 return FT_THROW( Syntax_Error );
652 } 655 }
653 656
654 657
655 #undef KERN_INDEX 658 #undef KERN_INDEX
656 #define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)g1 << 16 ) | g2 ) 659 #define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)g1 << 16 ) | g2 )
657 660
658 661
659 /* compare two kerning pairs */ 662 /* compare two kerning pairs */
660 FT_CALLBACK_DEF( int ) 663 FT_CALLBACK_DEF( int )
661 afm_compare_kern_pairs( const void* a, 664 afm_compare_kern_pairs( const void* a,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 } 749 }
747 break; 750 break;
748 751
749 case AFM_TOKEN_ENDKERNPAIRS: 752 case AFM_TOKEN_ENDKERNPAIRS:
750 case AFM_TOKEN_ENDKERNDATA: 753 case AFM_TOKEN_ENDKERNDATA:
751 case AFM_TOKEN_ENDFONTMETRICS: 754 case AFM_TOKEN_ENDFONTMETRICS:
752 fi->NumKernPair = n + 1; 755 fi->NumKernPair = n + 1;
753 ft_qsort( fi->KernPairs, fi->NumKernPair, 756 ft_qsort( fi->KernPairs, fi->NumKernPair,
754 sizeof ( AFM_KernPairRec ), 757 sizeof ( AFM_KernPairRec ),
755 afm_compare_kern_pairs ); 758 afm_compare_kern_pairs );
756 return PSaux_Err_Ok; 759 return FT_Err_Ok;
757 760
758 case AFM_TOKEN_UNKNOWN: 761 case AFM_TOKEN_UNKNOWN:
759 break; 762 break;
760 763
761 default: 764 default:
762 goto Fail; 765 goto Fail;
763 } 766 }
764 } 767 }
765 768
766 Fail: 769 Fail:
767 return PSaux_Err_Syntax_Error; 770 return FT_THROW( Syntax_Error );
768 } 771 }
769 772
770 773
771 static FT_Error 774 static FT_Error
772 afm_parse_kern_data( AFM_Parser parser ) 775 afm_parse_kern_data( AFM_Parser parser )
773 { 776 {
774 FT_Error error; 777 FT_Error error;
775 char* key; 778 char* key;
776 FT_Offset len; 779 FT_Offset len;
777 780
(...skipping 10 matching lines...) Expand all
788 791
789 case AFM_TOKEN_STARTKERNPAIRS: 792 case AFM_TOKEN_STARTKERNPAIRS:
790 case AFM_TOKEN_STARTKERNPAIRS0: 793 case AFM_TOKEN_STARTKERNPAIRS0:
791 error = afm_parse_kern_pairs( parser ); 794 error = afm_parse_kern_pairs( parser );
792 if ( error ) 795 if ( error )
793 return error; 796 return error;
794 break; 797 break;
795 798
796 case AFM_TOKEN_ENDKERNDATA: 799 case AFM_TOKEN_ENDKERNDATA:
797 case AFM_TOKEN_ENDFONTMETRICS: 800 case AFM_TOKEN_ENDFONTMETRICS:
798 return PSaux_Err_Ok; 801 return FT_Err_Ok;
799 802
800 case AFM_TOKEN_UNKNOWN: 803 case AFM_TOKEN_UNKNOWN:
801 break; 804 break;
802 805
803 default: 806 default:
804 goto Fail; 807 goto Fail;
805 } 808 }
806 } 809 }
807 810
808 Fail: 811 Fail:
809 return PSaux_Err_Syntax_Error; 812 return FT_THROW( Syntax_Error );
810 } 813 }
811 814
812 815
813 static FT_Error 816 static FT_Error
814 afm_parser_skip_section( AFM_Parser parser, 817 afm_parser_skip_section( AFM_Parser parser,
815 FT_UInt n, 818 FT_UInt n,
816 AFM_Token end_section ) 819 AFM_Token end_section )
817 { 820 {
818 char* key; 821 char* key;
819 FT_Offset len; 822 FT_Offset len;
820 823
821 824
822 while ( n-- > 0 ) 825 while ( n-- > 0 )
823 { 826 {
824 key = afm_parser_next_key( parser, 1, NULL ); 827 key = afm_parser_next_key( parser, 1, NULL );
825 if ( !key ) 828 if ( !key )
826 goto Fail; 829 goto Fail;
827 } 830 }
828 831
829 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) 832 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
830 { 833 {
831 AFM_Token token = afm_tokenize( key, len ); 834 AFM_Token token = afm_tokenize( key, len );
832 835
833 836
834 if ( token == end_section || token == AFM_TOKEN_ENDFONTMETRICS ) 837 if ( token == end_section || token == AFM_TOKEN_ENDFONTMETRICS )
835 return PSaux_Err_Ok; 838 return FT_Err_Ok;
836 } 839 }
837 840
838 Fail: 841 Fail:
839 return PSaux_Err_Syntax_Error; 842 return FT_THROW( Syntax_Error );
840 } 843 }
841 844
842 845
843 FT_LOCAL_DEF( FT_Error ) 846 FT_LOCAL_DEF( FT_Error )
844 afm_parser_parse( AFM_Parser parser ) 847 afm_parser_parse( AFM_Parser parser )
845 { 848 {
846 FT_Memory memory = parser->memory; 849 FT_Memory memory = parser->memory;
847 AFM_FontInfo fi = parser->FontInfo; 850 AFM_FontInfo fi = parser->FontInfo;
848 FT_Error error = PSaux_Err_Syntax_Error; 851 FT_Error error = FT_ERR( Syntax_Error );
849 char* key; 852 char* key;
850 FT_Offset len; 853 FT_Offset len;
851 FT_Int metrics_sets = 0; 854 FT_Int metrics_sets = 0;
852 855
853 856
854 if ( !fi ) 857 if ( !fi )
855 return PSaux_Err_Invalid_Argument; 858 return FT_THROW( Invalid_Argument );
856 859
857 key = afm_parser_next_key( parser, 1, &len ); 860 key = afm_parser_next_key( parser, 1, &len );
858 if ( !key || len != 16 || 861 if ( !key || len != 16 ||
859 ft_strncmp( key, "StartFontMetrics", 16 ) != 0 ) 862 ft_strncmp( key, "StartFontMetrics", 16 ) != 0 )
860 return PSaux_Err_Unknown_File_Format; 863 return FT_THROW( Unknown_File_Format );
861 864
862 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) 865 while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
863 { 866 {
864 AFM_ValueRec shared_vals[4]; 867 AFM_ValueRec shared_vals[4];
865 868
866 869
867 switch ( afm_tokenize( key, len ) ) 870 switch ( afm_tokenize( key, len ) )
868 { 871 {
869 case AFM_TOKEN_METRICSSETS: 872 case AFM_TOKEN_METRICSSETS:
870 if ( afm_parser_read_int( parser, &metrics_sets ) ) 873 if ( afm_parser_read_int( parser, &metrics_sets ) )
871 goto Fail; 874 goto Fail;
872 875
873 if ( metrics_sets != 0 && metrics_sets != 2 ) 876 if ( metrics_sets != 0 && metrics_sets != 2 )
874 { 877 {
875 error = PSaux_Err_Unimplemented_Feature; 878 error = FT_THROW( Unimplemented_Feature );
876 879
877 goto Fail; 880 goto Fail;
878 } 881 }
879 break; 882 break;
880 883
881 case AFM_TOKEN_ISCIDFONT: 884 case AFM_TOKEN_ISCIDFONT:
882 shared_vals[0].type = AFM_VALUE_TYPE_BOOL; 885 shared_vals[0].type = AFM_VALUE_TYPE_BOOL;
883 if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 ) 886 if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 )
884 goto Fail; 887 goto Fail;
885 888
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 } 934 }
932 break; 935 break;
933 936
934 case AFM_TOKEN_STARTKERNDATA: 937 case AFM_TOKEN_STARTKERNDATA:
935 error = afm_parse_kern_data( parser ); 938 error = afm_parse_kern_data( parser );
936 if ( error ) 939 if ( error )
937 goto Fail; 940 goto Fail;
938 /* fall through since we only support kern data */ 941 /* fall through since we only support kern data */
939 942
940 case AFM_TOKEN_ENDFONTMETRICS: 943 case AFM_TOKEN_ENDFONTMETRICS:
941 return PSaux_Err_Ok; 944 return FT_Err_Ok;
942 945
943 default: 946 default:
944 break; 947 break;
945 } 948 }
946 } 949 }
947 950
948 Fail: 951 Fail:
949 FT_FREE( fi->TrackKerns ); 952 FT_FREE( fi->TrackKerns );
950 fi->NumTrackKern = 0; 953 fi->NumTrackKern = 0;
951 954
952 FT_FREE( fi->KernPairs ); 955 FT_FREE( fi->KernPairs );
953 fi->NumKernPair = 0; 956 fi->NumKernPair = 0;
954 957
955 fi->IsCIDFont = 0; 958 fi->IsCIDFont = 0;
956 959
957 return error; 960 return error;
958 } 961 }
959 962
960 963
961 /* END */ 964 /* END */
OLDNEW
« no previous file with comments | « src/pfr/pfrload.c ('k') | src/psaux/psconv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698