479 {
480
482
483
485
488
491
492
493 FT_Int known_othersubr_result_cnt = 0;
496
497#define PS_STORAGE_SIZE 3
500
501
503
507
510
511
512 FT_UInt32 instructionLimit = 20000000UL;
513
515
518
520
521
522
523
526
528#ifdef __REACTOS__
530 if (!glyphPath_allocated) return;
531
532#define glyphPath (*glyphPath_allocated)
533#else
535#endif
536
540
541
554
555
557
558
559
560
561
562
565 callbacks,
566 scaleY,
567
568 &hStemHintArray,
569 &vStemHintArray,
570 &hintMask,
571 hintOriginY,
573 translation );
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
595
596
597
598
599
600
601
602
603
607
608 if ( !opStack )
609 {
610 lastError =
FT_THROW( Out_Of_Memory );
612 }
613
614
615
616
617
619
621
622
625
627 charstringIndex = 0;
628
629
630 while ( 1 )
631 {
633 FT_ASSERT( known_othersubr_result_cnt == 0 ||
634 result_cnt == 0 );
635
637 {
638
639
640
641 if ( charstringIndex )
643 else
645 }
646 else
647 {
649
650
651
655 }
656
658 {
659 if ( !initial_map_ready &&
667 op1 >= 32 ) )
668 {
669
670
671
672 FT_TRACE4((
" <outline command skipped>\n" ));
674 continue;
675 }
676
677 if ( result_cnt > 0 &&
681 op1 >= 32 ) )
682 {
683
684 result_cnt = 0;
685 }
686
687 if ( large_int && !( op1 >= 32 || op1 ==
cf2_escDIV ) )
688 {
689 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
690 " no `div' after large integer\n" ));
691
693 }
694 }
695
696
699
700 instructionLimit--;
701 if ( instructionLimit == 0 )
702 {
703 lastError =
FT_THROW( Invalid_Glyph_Format );
705 }
706
707 switch( op1 )
708 {
712
713 FT_TRACE4((
" unknown op (%d)\n", op1 ));
714 break;
715
718
720 break;
721
722 if (
font->blend.usedBV )
723 {
724
725 lastError =
FT_THROW( Invalid_Glyph_Format );
727 }
728
729 {
731
732
735 }
736 break;
737
739 {
741
742
744
746 break;
747
748
749 if ( !
font->blend.font )
750 {
751 lastError =
FT_THROW( Invalid_Glyph_Format );
753 }
754
755
756 if (
font->cffload->blend_check_vector( &
font->blend,
760 {
761 lastError =
font->cffload->blend_build_vector( &
font->blend,
765 if ( lastError )
767 }
768
769
771 if ( numBlends > stackSize )
772 {
773 lastError =
FT_THROW( Invalid_Glyph_Format );
775 }
776
778
780 }
781 continue;
782
786 : " hstem" ));
787
789 {
790
791
793 {
795 " invalid horizontal hint mask\n" ));
796 break;
797 }
798 }
799
800
802 opStack,
803 &hStemHintArray,
805 &haveWidth,
807 : 0 );
808
811
812 break;
813
817 : " vstem" ));
818
820 {
821
822
824 {
826 " invalid vertical hint mask\n" ));
827 break;
828 }
829 }
830
831
833 opStack,
834 &vStemHintArray,
836 &haveWidth,
838 : 0 );
839
842
843 break;
844
847
848 if (
font->isT1 && !
decoder->flex_state && !haveWidth )
849 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
850 " No width. Use hsbw/sbw as first op\n" ));
851
854 nominalWidthX );
855
856
858
861
863
866
867 break;
868
870 {
873
874
876
878 {
883
885 }
886
888 }
889 continue;
890
893 {
896
898
899
900 FT_TRACE4((
"%s\n", isX ?
" hlineto" :
" vlineto" ));
901
903 {
905
906
907 if ( isX )
909 else
911
912 isX = !isX;
913
915 }
916
918 }
919 continue;
920
923 {
926
927
929 : " rrcurveto" ));
930
932 {
934
935
942
944
948 }
949
951 {
956
958 }
959
961 }
962 continue;
963
966 FT_TRACE4((
" unknown op (%d)\n", op1 ));
967 else
968 {
970
971
973
975 }
976 break;
977
980 {
982
983
985 : " callsubr" ));
986
989 {
990
991 lastError =
FT_THROW( Invalid_Glyph_Format );
993 }
994
995
998 &subrStack,
999 (size_t)charstringIndex + 1 );
1000
1001
1003
1005 {
1008
1009
1012 else
1013 subrNum = -1;
1014 }
1015
1016 switch ( op1 )
1017 {
1019 FT_TRACE4((
" (idx %d, entering level %d)\n",
1020 subrNum +
decoder->globals_bias,
1021 charstringIndex + 1 ));
1022
1024 subrNum,
1025 charstring ) )
1026 {
1027 lastError =
FT_THROW( Invalid_Glyph_Format );
1029 }
1030 break;
1031
1032 default:
1033
1034 FT_TRACE4((
" (idx %d, entering level %d)\n",
1035 subrNum +
decoder->locals_bias,
1036 charstringIndex + 1 ));
1037
1039 subrNum,
1040 charstring ) )
1041 {
1042 lastError =
FT_THROW( Invalid_Glyph_Format );
1044 }
1045 }
1046
1047 charstringIndex += 1;
1048 }
1049 continue;
1050
1052 FT_TRACE4((
" return (leaving level %d)\n", charstringIndex ));
1053
1054 if ( charstringIndex < 1 )
1055 {
1056
1057 lastError =
FT_THROW( Invalid_Glyph_Format );
1059 }
1060
1061
1064 &subrStack,
1066 continue;
1067
1069 {
1071
1072
1073
1074
1075 switch ( op2 )
1076 {
1078 {
1079 static const FT_Bool readFromStack[12] =
1080 {
1087 };
1088
1089
1091
1093 &curX,
1094 &curY,
1095 &glyphPath,
1096 readFromStack,
1098 }
1099 continue;
1100
1102 {
1103 static const FT_Bool readFromStack[12] =
1104 {
1111 };
1112
1113
1115
1117 &curX,
1118 &curY,
1119 &glyphPath,
1120 readFromStack,
1122 }
1123 break;
1124
1126 {
1127 static const FT_Bool readFromStack[12] =
1128 {
1135 };
1136
1137
1139
1141 &curX,
1142 &curY,
1143 &glyphPath,
1144 readFromStack,
1146 }
1147 continue;
1148
1150 {
1151 static const FT_Bool readFromStack[12] =
1152 {
1159 };
1160
1161
1163
1165 &curX,
1166 &curY,
1167 &glyphPath,
1168 readFromStack,
1170 }
1171 continue;
1172
1173
1180 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
1181 break;
1182
1183 default:
1184 {
1186 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
1188 {
1189
1190 result_cnt = 0;
1191 }
1192 else
1193 {
1194
1195
1196 switch ( op2 )
1197 {
1198
1200
1202
1203 break;
1204
1207
1208
1209
1210
1211
1212
1213
1214 {
1216 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
1217 else
1218 {
1220
1222
1223
1225 : " hstem3" ));
1226
1228
1232
1234 opStack, 2,
1238 opStack, 4,
1241
1242
1244 opStack,
1245 isV ? &vStemHintArray : &hStemHintArray,
1247 &haveWidth,
1248 isV ?
decoder->builder.left_bearing->x
1249 :
decoder->builder.left_bearing->y );
1250
1253 }
1254 }
1255 break;
1256
1258 {
1261
1262
1264
1267
1269 }
1270 continue;
1271
1273 {
1276
1277
1279
1282
1284 }
1285 continue;
1286
1288 {
1290
1291
1293
1295
1297 }
1298 continue;
1299
1302 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
1303 else
1304 {
1306 CF2_Int bchar_index, achar_index;
1308
1309#ifdef FT_CONFIG_OPTION_INCREMENTAL
1311#endif
1314
1317
1321
1322
1324
1325 if ( doingSeac )
1326 {
1328 lastError =
FT_THROW( Invalid_Glyph_Format );
1330 }
1331
1332 if (
decoder->builder.metrics_only )
1333 {
1334 FT_ERROR((
" unexpected seac\n" ));
1335 lastError =
FT_THROW( Invalid_Glyph_Format );
1337 }
1338
1339
1340
1341
1342#ifdef FT_CONFIG_OPTION_INCREMENTAL
1343 if (
decoder->glyph_names == 0 &&
1344 !
face->root.internal->incremental_interface )
1345#else
1346 if (
decoder->glyph_names == 0 )
1347#endif
1348 {
1350 "cf2_interpT2CharString: (Type 1 seac)"
1351 " glyph names table not available in this font\n" ));
1352 lastError =
FT_THROW( Invalid_Glyph_Format );
1354 }
1355
1356
1357 adx +=
decoder->builder.left_bearing->x;
1358
1359#ifdef FT_CONFIG_OPTION_INCREMENTAL
1360 if (
face->root.internal->incremental_interface )
1361 {
1362
1363 bchar_index = bchar;
1364 achar_index = achar;
1365 }
1366 else
1367#endif
1368 {
1373 }
1374
1375 if ( bchar_index < 0 || achar_index < 0 )
1376 {
1378 "cf2_interpT2CharString: (Type 1 seac)"
1379 " invalid seac character code arguments\n" ));
1380 lastError =
FT_THROW( Invalid_Glyph_Format );
1382 }
1383
1384
1385
1386
1387 if (
decoder->builder.no_recurse )
1388 {
1392
1393
1394
1397 {
1400 }
1401
1402 subg = loader->current.subglyphs;
1403
1404
1405 subg->index = bchar_index;
1408 subg->arg1 = 0;
1409 subg->arg2 = 0;
1410 subg++;
1411
1412
1413 subg->index = achar_index;
1417
1418
1420 glyph->
subglyphs = loader->base.subglyphs;
1421 glyph->
format = FT_GLYPH_FORMAT_COMPOSITE;
1422
1423 loader->current.num_subglyphs = 2;
1424
1426 }
1427
1428
1429
1430
1431
1433
1436 &component );
1438 {
1441 }
1442
1443
1444
1445
1446 left_bearing = *
decoder->builder.left_bearing;
1448
1450 &component,
1451 callbacks,
1452 translation,
1454 0,
1455 0,
1456 &dummyWidth );
1458
1459
1460
1461
1462 if ( !haveWidth )
1463 {
1464 left_bearing = *
decoder->builder.left_bearing;
1466 }
1467
1468 decoder->builder.left_bearing->x = 0;
1469 decoder->builder.left_bearing->y = 0;
1470
1471
1472
1473
1476 &component );
1478 {
1481 }
1483 &component,
1484 callbacks,
1485 translation,
1487 adx - asb,
1488 ady,
1489 &dummyWidth );
1491
1492
1493
1494
1495 *
decoder->builder.left_bearing = left_bearing;
1497
1499 }
1500 break;
1501
1504 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
1505 else
1506 {
1509
1510
1512
1514
1517
1520
1525
1527
1528
1529
1530
1531
1534
1535 if ( initial_map_ready )
1536 {
1539 }
1540 }
1541 break;
1542
1544 {
1546
1547
1549
1551
1554 else
1556 }
1557 continue;
1558
1560 {
1563
1564
1566
1569
1572 summand2 ) );
1573 }
1574 continue;
1575
1577 {
1580
1581
1583
1586
1589 }
1590 continue;
1591
1593 {
1596
1597
1599
1600 if (
font->isT1 && large_int )
1601 {
1604
1606 }
1607 else
1608 {
1611 }
1612
1615
1616 }
1617 continue;
1618
1620 {
1622
1623
1625
1627
1630 else
1632 }
1633 continue;
1634
1636 {
1639
1640
1642
1645
1647 }
1648 continue;
1649
1652 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
1653 else
1654 {
1659
1660
1662
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1680
1682
1683 known_othersubr_result_cnt = 0;
1684 result_cnt = 0;
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704 switch ( subr_no )
1705 {
1706 case 0:
1708 goto Unexpected_OtherSubr;
1709
1710 if ( initial_map_ready &&
1712 decoder->num_flex_vectors != 7 ) )
1713 {
1714 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
1715 " unexpected flex end\n" ));
1716 lastError =
FT_THROW( Invalid_Glyph_Format );
1718 }
1719
1720
1721
1724 known_othersubr_result_cnt = 2;
1725 break;
1726
1727 case 1:
1729 goto Unexpected_OtherSubr;
1730
1731 if ( !initial_map_ready )
1732 break;
1733
1736
1738 decoder->num_flex_vectors = 0;
1739 break;
1740
1741 case 2:
1742 {
1745
1746
1748 goto Unexpected_OtherSubr;
1749
1750 if ( !initial_map_ready )
1751 break;
1752
1754 {
1755 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
1756 " missing flex start\n" ));
1757 lastError =
FT_THROW( Invalid_Glyph_Format );
1759 }
1760
1761
1762
1763
1764
1766 if (
idx > 0 &&
idx < 7 )
1767 {
1768
1769
1770
1771
1772
1774 1 ) )
1775 {
1776 lastError =
FT_THROW( Invalid_Glyph_Format );
1778 }
1779
1780
1782
1783 flexStore[idx2 - 2] = curX;
1784 flexStore[idx2 - 1] = curY;
1785
1786 if (
idx == 3 ||
idx == 6 )
1788 flexStore[0],
1789 flexStore[1],
1790 flexStore[2],
1791 flexStore[3],
1792 flexStore[4],
1793 flexStore[5] );
1794 }
1795 }
1796 break;
1797
1798 case 3:
1800 goto Unexpected_OtherSubr;
1801
1802 if ( initial_map_ready )
1803 {
1804
1805
1808
1812 }
1813
1814 known_othersubr_result_cnt = 1;
1815 break;
1816
1817 case 12:
1818 case 13:
1819
1821 break;
1822
1823 case 14:
1824 case 15:
1825 case 16:
1826 case 17:
1827 case 18:
1828 {
1833
1834
1835 if ( !blend )
1836 {
1838 "cf2_interpT2CharString:"
1839 " unexpected multiple masters operator\n" ));
1840 lastError =
FT_THROW( Invalid_Glyph_Format );
1842 }
1843
1844 num_points = (
FT_UInt)subr_no - 13 +
1845 ( subr_no == 18 );
1848 {
1850 "cf2_interpT2CharString:"
1851 " incorrect number of multiple masters arguments\n" ));
1852 lastError =
FT_THROW( Invalid_Glyph_Format );
1854 }
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872 delta = opIdx + num_points;
1874 for ( nn = 0; nn < num_points; nn++ )
1875 {
1878
1879
1884 delta++ ),
1886
1888 }
1891
1892 known_othersubr_result_cnt = (
FT_Int)num_points;
1893 break;
1894 }
1895
1896 case 19:
1897
1898
1899
1900
1901 {
1904
1905
1907 goto Unexpected_OtherSubr;
1908
1910
1914 goto Unexpected_OtherSubr;
1915
1920 }
1921 break;
1922
1923 case 20:
1924
1925
1926 {
1929
1930
1932 goto Unexpected_OtherSubr;
1933
1936
1939 summand2 ) );
1940 known_othersubr_result_cnt = 1;
1941 }
1942 break;
1943
1944 case 21:
1945
1946
1947 {
1950
1951
1953 goto Unexpected_OtherSubr;
1954
1957
1960 subtrahend ) );
1961 known_othersubr_result_cnt = 1;
1962 }
1963 break;
1964
1965 case 22:
1966
1967
1968 {
1971
1972
1974 goto Unexpected_OtherSubr;
1975
1978
1981 known_othersubr_result_cnt = 1;
1982 }
1983 break;
1984
1985 case 23:
1986
1987
1988 {
1991
1992
1994 goto Unexpected_OtherSubr;
1995
1998
2000 goto Unexpected_OtherSubr;
2001
2005 known_othersubr_result_cnt = 1;
2006 }
2007 break;
2008
2009 case 24:
2010
2011
2012 {
2015
2016
2018 goto Unexpected_OtherSubr;
2019
2021
2024 goto Unexpected_OtherSubr;
2025
2028 }
2029 break;
2030
2031 case 25:
2032
2033
2034
2035 {
2038
2039
2041 goto Unexpected_OtherSubr;
2042
2044
2047 goto Unexpected_OtherSubr;
2048
2051 known_othersubr_result_cnt = 1;
2052 }
2053 break;
2054
2055#if 0
2056 case 26:
2057
2058
2059
2060
2061
2064 break;
2065#endif
2066
2067 case 27:
2068
2069
2070
2071 {
2076
2077
2079 goto Unexpected_OtherSubr;
2080
2085
2088 known_othersubr_result_cnt = 1;
2089 }
2090 break;
2091
2092 case 28:
2093
2094
2095
2096 {
2098
2099
2101 goto Unexpected_OtherSubr;
2102
2103
2104
2106 ( (
decoder->current_subfont->random & 0xFFFF ) + 1 );
2107
2108 decoder->current_subfont->random =
2110
2112 known_othersubr_result_cnt = 1;
2113 }
2114 break;
2115
2116 default:
2117 if (
arg_cnt >= 0 && subr_no >= 0 )
2118 {
2120
2121
2123 "cf2_interpT2CharString (Type 1 mode):"
2124 " unknown othersubr [%d %d], wish me luck\n",
2126
2127
2128
2129
2133
2137
2138 break;
2139 }
2140
2141
2142 Unexpected_OtherSubr:
2143 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
2144 " invalid othersubr [%d %d]\n",
2146 lastError =
FT_THROW( Invalid_Glyph_Format );
2148 }
2149 }
2150 continue;
2151
2154 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
2155 else
2156 {
2158
2159 if ( known_othersubr_result_cnt > 0 )
2160 {
2161 known_othersubr_result_cnt--;
2162
2163 continue;
2164 }
2165
2166 if ( result_cnt == 0 )
2167 {
2168 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
2169 " no more operands for othersubr\n" ));
2170 lastError =
FT_THROW( Invalid_Glyph_Format );
2172 }
2173
2174 result_cnt--;
2176 }
2177 continue;
2178
2181
2183 continue;
2184
2186 {
2189
2190
2192
2195
2198 }
2199 continue;
2200
2202 {
2204
2205
2207
2209
2212 }
2213 continue;
2214
2216 {
2221
2222
2224
2229
2232 }
2233 continue;
2234
2236 {
2238
2239
2241
2242
2243
2245 ( (
decoder->current_subfont->random & 0xFFFF ) + 1 );
2246
2247 decoder->current_subfont->random =
2249
2251 }
2252 continue;
2253
2255 {
2258
2259
2261
2264
2267 }
2268 continue;
2269
2271 {
2273
2274
2276
2279 {
2280
2281
2284
2285
2286
2287 for (;;)
2288 {
2290 if ( new_root ==
root )
2291 break;
2293 }
2295 }
2296 else
2298
2300 }
2301 continue;
2302
2304 {
2306
2307
2309
2311
2314 }
2315 continue;
2316
2318 {
2321
2322
2324
2327
2330 }
2331 continue;
2332
2334 {
2337
2338
2340
2343
2345 {
2346
2347
2349
2350
2354 gr_idx = 0;
2355 else
2357
2360 gr_idx ) );
2361 }
2362 }
2363 continue;
2364
2366 {
2369
2370
2372
2375
2377 }
2378 continue;
2379
2382 FT_TRACE4((
" unknown op (12, %d)\n", op2 ));
2383 else
2384 {
2386
2387 if ( !initial_map_ready )
2388 break;
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403#if 0
2404
2405 if (
decoder->flex_state != 1 )
2406 {
2407 FT_ERROR((
"cf2_interpT2CharString:"
2408 " unexpected `setcurrentpoint'\n" ));
2409 goto Syntax_Error;
2410 }
2411 else
2412 ...
2413#endif
2414
2417
2419 }
2420 break;
2421
2422 }
2423 }
2424 }
2425 }
2426 }
2427
2428 break;
2429
2432 FT_TRACE4((
" unknown op (%d)\n", op1 ));
2433 else
2434 {
2437
2438
2440
2442
2445
2447
2449 lsb_x );
2450
2452
2453
2454
2455
2458
2459 if ( initial_map_ready )
2461 }
2462 break;
2463
2466
2467 if (
font->isT1 && !initial_map_ready )
2468 {
2469 FT_TRACE5((
"cf2_interpT2CharString (Type 1 mode): "
2470 "Build initial hintmap, rewinding...\n" ));
2471
2472
2474
2475 initial_map_ready =
TRUE;
2476
2477
2480
2484
2485
2486
2487
2488
2489 while ( charstringIndex > 0 )
2490 {
2491 FT_TRACE4((
" return (leaving level %d)\n", charstringIndex ));
2492
2493
2496 &subrStack,
2498 }
2499 charstring->ptr = charstring->start;
2500
2501 break;
2502 }
2503
2506 {
2507 if ( !haveWidth )
2509 nominalWidthX );
2510 }
2511
2512
2514
2517
2518
2520
2521
2522
2524 {
2525
2526
2527
2533
2534
2535 if ( doingSeac )
2536 {
2537 lastError =
FT_THROW( Invalid_Glyph_Format );
2539 }
2540
2543
2546
2549 {
2552 }
2554 &component,
2555 callbacks,
2556 translation,
2558 curX,
2559 curY,
2560 &dummyWidth );
2562
2565 {
2568 }
2570 &component,
2571 callbacks,
2572 translation,
2574 0,
2575 0,
2576 &dummyWidth );
2578 }
2580
2583
2584
2586
2587
2590 {
2591 FT_TRACE4((
"cf2_interpT2CharString: invalid hint mask\n" ));
2592 break;
2593 }
2594
2595
2596
2598 opStack,
2599 &vStemHintArray,
2601 &haveWidth,
2602 0 );
2603
2606
2608 {
2609
2611 charstring,
2614 }
2615 else
2616 {
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630#ifdef __REACTOS__
2633 if (!counterHintMap_allocated)
2634 {
2635 lastError = FT_Err_Out_Of_Memory;
2637 }
2638
2639#define counterHintMap (*counterHintMap_allocated)
2640#else
2643#endif
2644
2649 scaleY );
2651
2653 charstring,
2657 &hStemHintArray,
2658 &vStemHintArray,
2659 &counterMask,
2660 0,
2662#ifdef __REACTOS__
2663 free(counterHintMap_allocated);
2664#undef counterHintMap
2665#endif
2666 }
2667 break;
2668
2671
2672 if (
font->isT1 && !
decoder->flex_state && !haveWidth )
2673 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
2674 " No width. Use hsbw/sbw as first op\n" ));
2675
2678 nominalWidthX );
2679
2680
2682
2685
2688
2691
2692 break;
2693
2696
2697 if (
font->isT1 && !
decoder->flex_state && !haveWidth )
2698 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
2699 " No width. Use hsbw/sbw as first op\n" ));
2700
2703 nominalWidthX );
2704
2705
2707
2710
2712
2715
2716 break;
2717
2719 {
2722
2723
2725
2727 {
2732
2735 }
2736
2738 {
2740
2741
2748
2750
2754 }
2755
2757 }
2758 continue;
2759
2761 {
2764
2765
2766
2767
2768
2769 count = count1 & ~2U;
2771
2773
2775 {
2777
2778
2780 {
2782
2784 }
2785 else
2787
2793
2795
2799 }
2800
2802 }
2803 continue;
2804
2806 {
2809
2810
2811
2812
2813
2814 count = count1 & ~2U;
2816
2818
2820 {
2822
2823
2825 {
2827
2829 }
2830 else
2832
2838
2840
2844 }
2845
2847 }
2848 continue;
2849
2852 {
2855
2857
2858
2859
2860
2861
2862
2863 count = count1 & ~2U;
2865
2866 FT_TRACE4((
"%s\n", alternate ?
" hvcurveto" :
" vhcurveto" ));
2867
2869 {
2871
2872
2873 if ( alternate )
2874 {
2880
2882 {
2884
2886 }
2887 else
2889
2891 }
2892 else
2893 {
2899
2901 {
2903
2905 }
2906 else
2908
2910 }
2911
2913
2917 }
2918
2920 }
2921 continue;
2922
2924 {
2926
2929
2930
2932 byte2 );
2933
2935
2937 }
2938 continue;
2939
2940 default:
2941
2942 {
2943 if ( op1 <= 246 )
2944 {
2946
2947
2949
2951
2952
2954 }
2955
2956 else if ( op1 <= 250 )
2957 {
2959
2960
2966
2968
2969
2971 }
2972
2973 else if ( op1 <= 254 )
2974 {
2976
2977
2983
2985
2986
2988 }
2989
2990 else
2991 {
2993
2998
2999
3001 ( byte2 << 16 ) |
3002 ( byte3 << 8 ) |
3003 byte4 );
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3021 {
3022 if (
v > 32000 ||
v < -32000 )
3023 {
3024 if ( large_int )
3025 FT_ERROR((
"cf2_interpT2CharString (Type 1 mode):"
3026 " no `div' after large integer\n" ));
3027 else
3029 }
3030
3032
3034 }
3035 else
3036 {
3038
3040 }
3041 }
3042 }
3043 continue;
3044
3045 }
3046
3048
3049 }
3050
3051
3053 " charstring ends without ENDCHAR\n" ));
3054
3056
3058
3061
3062
3068
3070
3071#ifdef __REACTOS__
3072 free(glyphPath_allocated);
3073#undef glyphPath
3074#endif
3075 return;
3076 }
static struct _test_info results[8]
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
FT_DivFix(FT_Long a, FT_Long b)
#define FT_SUBGLYPH_FLAG_USE_MY_METRICS
struct FT_GlyphSlotRec_ * FT_GlyphSlot
#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES
#define FT_TRACE5(varformat)
cannot open resource broken file module version is too low unimplemented feature broken offset within table missing module invalid glyph index unsupported glyph image format invalid outline too many hints invalid object handle invalid module handle invalid size handle invalid charmap handle invalid stream handle too many extensions unlisted object invalid stream seek invalid stream read invalid frame operation invalid frame read raster corrupted negative height while rastering invalid opcode stack overflow bad argument invalid reference found ENDF opcode in execution stream invalid code range too many function definitions SFNT font table missing name table missing horizontal PostScript(post) table missing" ) FT_ERRORDEF_( Invalid_Horiz_Metrics
FT_GlyphLoader_Prepare(FT_GlyphLoader loader)
FT_GlyphLoader_CheckSubGlyphs(FT_GlyphLoader loader, FT_UInt n_subs)
size_t * ft_hash_num_lookup(FT_Int num, FT_Hash hash)
FT_BEGIN_HEADER typedef signed long FT_Pos
#define T1_MAX_SUBRS_CALLS
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
GLdouble GLdouble GLdouble r
GLuint GLuint GLuint GLuint arg1
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
GLenum GLuint GLint GLenum face
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLenum GLenum GLvoid * values
GLfloat GLfloat GLfloat v2
int jpeg_marker_parser_method routine
static char memory[1024 *256]
static float int float int float int x3
static float int float int float int float y3
cf2_arrstack_getPointer(const CF2_ArrStack arrstack, size_t idx)
cf2_arrstack_setCount(CF2_ArrStack arrstack, size_t numElements)
cf2_arrstack_finalize(CF2_ArrStack arrstack)
cf2_arrstack_init(CF2_ArrStack arrstack, FT_Memory memory, FT_Error *error, size_t sizeItem)
cf2_arrstack_getBuffer(const CF2_ArrStack arrstack)
cf2_arrstack_clear(CF2_ArrStack arrstack)
cf2_arrstack_size(const CF2_ArrStack arrstack)
FT_BEGIN_HEADER struct CF2_ArrStackRec_ CF2_ArrStackRec
cf2_setError(FT_Error *error, FT_Error value)
#define CF2_OPERAND_STACK_SIZE
cf2_freeSeacComponent(PS_Decoder *decoder, CF2_Buffer buf)
cf2_freeT1SeacComponent(PS_Decoder *decoder, CF2_Buffer buf)
cf2_initLocalRegionBuffer(PS_Decoder *decoder, CF2_Int subrNum, CF2_Buffer buf)
cf2_initGlobalRegionBuffer(PS_Decoder *decoder, CF2_Int subrNum, CF2_Buffer buf)
cf2_getT1SeacComponent(PS_Decoder *decoder, FT_UInt glyph_index, CF2_Buffer buf)
cf2_getMaxstack(PS_Decoder *decoder)
cf2_getDefaultWidthX(PS_Decoder *decoder)
cf2_getSeacComponent(PS_Decoder *decoder, CF2_Int code, CF2_Buffer buf)
cf2_glyphpath_moveTo(CF2_GlyphPath glyphpath, CF2_Fixed x, CF2_Fixed y)
cf2_glyphpath_finalize(CF2_GlyphPath glyphpath)
cf2_hintmap_build(CF2_HintMap hintmap, CF2_ArrStack hStemHintArray, CF2_ArrStack vStemHintArray, CF2_HintMask hintMask, CF2_Fixed hintOrigin, FT_Bool initialMap)
cf2_glyphpath_closeOpenPath(CF2_GlyphPath glyphpath)
cf2_glyphpath_lineTo(CF2_GlyphPath glyphpath, CF2_Fixed x, CF2_Fixed y)
cf2_hintmap_init(CF2_HintMap hintmap, CF2_Font font, CF2_HintMap initialMap, CF2_ArrStack hintMoves, CF2_Fixed scale)
cf2_glyphpath_init(CF2_GlyphPath glyphpath, CF2_Font font, CF2_OutlineCallbacks callbacks, CF2_Fixed scaleY, CF2_ArrStack hStemHintArray, CF2_ArrStack vStemHintArray, CF2_HintMask hintMask, CF2_Fixed hintOriginY, const CF2_Blues blues, const FT_Vector *fractionalTranslation)
static void cf2_doFlex(CF2_Stack opStack, CF2_Fixed *curX, CF2_Fixed *curY, CF2_GlyphPath glyphPath, const FT_Bool *readFromStack, FT_Bool doConditionalLastRead)
static void cf2_doStems(const CF2_Font font, CF2_Stack opStack, CF2_ArrStack stemHintArray, CF2_Fixed *width, FT_Bool *haveWidth, CF2_Fixed hintOffset)
static void cf2_doBlend(const CFF_Blend blend, CF2_Stack opStack, CF2_UInt numBlends)
static void cf2_hintmask_read(CF2_HintMask hintmask, CF2_Buffer charstring, size_t bitCount)
cf2_hintmask_isValid(const CF2_HintMask hintmask)
cf2_hintmask_init(CF2_HintMask hintmask, FT_Error *error)
cf2_interpT2CharString(CF2_Font font, CF2_Buffer buf, CF2_OutlineCallbacks callbacks, const FT_Vector *translation, FT_Bool doingSeac, CF2_Fixed curX, CF2_Fixed curY, CF2_Fixed *width)
ps_builder_check_points(PS_Builder *builder, FT_Int count)
cf2_buf_isEnd(CF2_Buffer buf)
FT_BEGIN_HEADER struct CF2_BufferRec_ CF2_BufferRec
FT_BEGIN_HEADER struct CF2_BufferRec_ * CF2_Buffer
cf2_stack_pushInt(CF2_Stack stack, CF2_Int val)
cf2_stack_popFixed(CF2_Stack stack)
cf2_stack_popInt(CF2_Stack stack)
cf2_stack_free(CF2_Stack stack)
cf2_stack_roll(CF2_Stack stack, CF2_Int count, CF2_Int shift)
cf2_stack_init(FT_Memory memory, FT_Error *e, FT_UInt stackSize)
cf2_stack_pushFixed(CF2_Stack stack, CF2_Fixed val)
CF2_ArrStackRec hintMoves
CF2_HintMapRec initialHintMap
FT_Slot_Internal internal
t1_lookup_glyph_by_stdcharcode_ps(PS_Decoder *decoder, FT_Int charcode)
struct T1_FaceRec_ * T1_Face
static unsigned arg_cnt(const DISPPARAMS *dp)
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2