1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651
|
<HTML>
<HEAD>
<!-- Created with AOLpress/2.0 -->
<!-- AP: Created on: 16-Sep-2001 -->
<!-- AP: Last modified: 29-Apr-2010 -->
<TITLE>Older changes to FontForge</TITLE>
<LINK REL="icon" href="fftype16.png">
<LINK REL="stylesheet" TYPE="text/css" HREF="FontForge.css">
</HEAD>
<BODY>
<DIV id="in">
<TABLE ALIGN=RIGHT>
<TR>
<TD><BLOCKQUOTE ID="lit">
<B><SMALL>CHAPLAIN:</SMALL></B><BR>
It was very interesting; I was dreaming I stood<BR>
On Jacob's ladder, waiting for the gates to open.<BR>
And the ladder was made entirely of diminished sevenths.<BR>
I was surprised, but not put out. Nothing<BR>
Is altogether what we suppose it to be.
<P ALIGn=RIGHT>
<I>The Lady's not for Burning</I><BR>
Christopher Fry
</BLOCKQUOTE>
</TD>
</TR>
</TABLE>
<P>
<A HREF="changelog.html">Current changes</A><BR>
<A HREF="pfaeditchangelog.html">Changes to PfaEdit (predecessor to
FontForge)</A><BR>
Changes to the <A HREF="sfdchangelog.html">sfd format</A>.
<UL>
<LI>
24-August-2008
<UL>
<LI>
<TABLE ALIGN="LEFT">
<TR>
<TD><IMG SRC="FF32.png" WIDTH="32" HEIGHT="32"></TD>
<TD><IMG SRC="FFsfd32.png" WIDTH="32" HEIGHT="32"></TD>
</TR>
</TABLE>
<P>
Changes to create a stub Mac application. Add an apple event handler to fontforge
so that it will notice when the finder wants it to open files. Add icons,
etc. so it will look like a mac app.
<LI>
Make it possible to drag and drop lookups
<UL>
<LI>
from one font info window to another<BR>
(copy lookups from one font to another)
<LI>
within a font info window<BR>
(reorder lookups)
</UL>
<LI>
Layers can now be marked as either background or foreground.
<UL>
<LI>
Foreground layers may be generated into fonts
<LI>
Background layers may contain images. Pasting into an empty glyph in a background
layer will not set the width. Splines in background layers do not make a
glyph worth outputting.
</UL>
<LI>
Add a color picker so users can select glyph label colors other than red,
cyan, green, etc.
<LI>
Memory problems with references, introduced recently, have been fixed.
<LI>
I hope I'm now getting keysyms right for non-latin menu short cuts.
<LI>
Typo in background layer patch could cause a crash in fonts with many layers.
<LI>
Werner wants an $iscid variable to determine whether a font is a cid-keyed
font or not.
<LI>
add font.iscid to python too.
<LI>
python font.cid* variables didn't work, fix them.
<LI>
Add $haspython variable to normal scripting so I can detect if python is
available.
<LI>
When pasting a reference into an order2 layer, ff would sometimes miss the
fact that the instructions were out of date.
<LI>
Replace with references had the same problem.
<LI>
In scripting, instructions did not get checked for up-to-dateness
<LI>
In the charview, unlink ref only worked on the foreground layer.
<LI>
Patch by Barry (fixed up by me) to fix up open charviews when a layer is
added.
<LI>
Barry points out that Contour.round and Layer.round are supposed to have
an optional argument, but instead have a required arg.
<LI>
Just as pasting references screws up instructions, so does replace with
reference. Do the same thing that we just did to rplref.
<LI>
When scripting without a UI, the char changed routine did not check to see
if it should clear the instructions on a change. It now does.
<LI>
Setting device table adjustments from the accent pane of the Math dlg didn't
work.
<LI>
File->Revert File (from the UI) didn't work.
<LI>
If a contextual chaining pos/sub in a sfd file referred to a non-existant
lookup we would insert a NULL lookup into a rule. This would cause almost
anything that used that lookup to crash. Now, simply remove the sequence/lookup
info.
<LI>
When importing lookups we might import a lookup twice if it were nested.
<LI>
When generating bitmaps automatically from a script it was possible that
the freetype library got initialized too late and we'd pass a NULL pointer
to FT_Memory_Face -- and things would crash.
<LI>
In a quadratic layer of a glyph, when selecting an on-curve point and trying
to make it interpolated, if that point had no control points then behavior
was odd.
<LI>
didn't create an input context for top level window char and font views.
This meant could only use ASCII in menus if the focus were in the top level
window (in the scroll bars, or the menu bar.
<LI>
Typo in the code to display side bearings in the charview.
<LI>
FontForge assumed that all anchor classes for a given subtable were in sequence,
but Panov has a font where an anchor class for a different subtable appears
in the middle of a list of classes for the desired subtable. Result was garbage
output, and View->Show Att crashed.
<LI>
View->Next/Prev [Def] & Find In Font View don't work in charviews
when there are tabs active.
<LI>
R. Sander points out that if you select an ordered set of lookups in one
font and import them into another they become disordered. Not good.
<LI>
When pasting into a charview we only set the width if there was nothing in
foreground. When pasting into the fontview we always set the width because
we were clearing the foreground before we pasted (unless we did paste into
-- then we didn't set the width).
<P>
With layers that should all change. We should only set the width if there
is nothing in any of the potential foreground layers. Don't count the background
layers or the grid psuedo layer. Don't count open contours (might be a secondary
guide line layer or something). If we're going to clear a layer before pasting
(normal behavior in fontview) then don't count the layer cleared.
<LI>
Add several different behavior patterms for the metrics view. Users complain
that the current multi-functional window is confusing and would prefer a
view which only does kerning, or only sets the advance widths, etc.
<LI>
Due to a typo, merging two splinesets at a curve point generally left the
point marked with default adjustment enabled on its control points.
<LI>
Another layers problem. Only in the foreground layer could anchor points
be moved.
<LI>
Python glyph.unlinkReference command didn't work.
<LI>
My intent was that ligature carets positioned at 0 didn't count (0 isn't
meaningful -- a ligature with a zero-width first component?) but that only
got implemented for 'lcar' table not for 'GDEF'. So fix that.
<P>
Also allow the user to specify exactly how many ligature carets s/he wants
rather than just setting a minimum bound.
<P>
Also 'lcar' (Apple) output was broken.
<P>
Also neither AAT nor OpenType supports negative lig carets, so if the user
drags a lig caret line negative, have it stick at 0.
<LI>
Moving ligature carets always marked for an undo in the foreground layer.
Register the movement in the layer in which it happens.
<LI>
When placing an accent glyph about which we know nothing, assume it should
be centered on top.
<LI>
Change sfd.c so that it will treat the sequence "backslash newline" as no
characters on input (er, except in ASCII85 input). And so that it thinks
it can parse version 4 or the sfd format.
<P>
We don't generate version 4 yet, and we won't for a while. Version 4 will
include the ability to insert backslash newline into long lines. This is
so we can conform to the internet requirements of fewer than 990 bytes on
a line. And the delay is so that people don't scream at me for making an
incompatible change to the format -- if I give the parser time to perculate
through the user community, with luck no one will even notice -- especially
as long lines are rare.
<LI>
Selections/Clipboard didn't work in textfields on 64bit intel. There seems
to be a bug in the 64bit Xlib which doesn't transfer 32 bit quantities properly.
I was passing unicode strings as 32bit UCS4, but UTF8 will work just fine
instead.
<LI>
Add the ability to clear all device tables associated with a kerning by classes
table. (Needed because of a bug which introduced garbage).
<LI>
We didn't think we could read in a kerning subtable (class or pair) with
device tables, so we converted them to pst data. We can read them in in optimized
form and we should do so.
<LI>
Alexej points out that if a glyph has "instructions_out_of_date" set on it,
then setting the instructions via a script should clear the bit -- but didn't.
<LI>
Werner points out that if a type2 charstring contained a sequence
<num> endchar then ff would set the width of the charater even if the
the width had already been set. Width can only be set on first stack clearing
operation, any extra params on subsequent calls get ignored.
<P>
Actually it's worse than that, the spec says that if there are too many things
on the stack then start parsing the stack from the unexpected end.
<P>
Adobe have admitted that the obvious reading of their spec is incorrect (they
can't quite bring themselves to say the spec is wrong). So revert some of
the way we were parsing type2 charstrings.
<LI>
Barry complains that when building ff does not apply the ".cap" suffix when
using inverted breve.
<LI>
Valgrind finds a bug in drawing non-BMP characters in the metrics view.
<LI>
Alexej would like to be able to manipulate non-unicode glyphs with the text
field of the metrics view. The textfield used to map all non-unicode code
points to 0xfffd, but if the font doesn't make use of the supplementary private
use areas (planes 15&16) then create a mapping from the font into these
areas so that we can represent non-unicode glyphs as funky private use glyphs.
<P>
(Only do this if font doesn't use these areas).
<LI>
Alexej points out that in non-foreground quadratic fonts the "Points->Dont
Interpolate" command doesn't do anything.
<P>
Fix a couple of other foreground specific things too.
<LI>
Barry points out that setting a glyph's anchorPoints from python does not
mark a glyph as changed nor force an update.
<LI>
Autoinstructor: large patch from Alexey:
<UL>
<LI>
handlles conflicting H/V stems much better;
<LI>
tries to place HStems between blues better;
<LI>
adds optional apparatus for instructing serifs;
<LI>
relies on generic point-to-stem snapping routines from stemdb.c;
<LI>
needs FPGM changed (older FF's glyph programs should still work, but FPGMs
need updating!).
</UL>
<LI>
If the user has opened a backup sfd file (one that ends in .sfd~) and does
a save on it, then pop up a save as dlg instead of blindly saving it. Saving
it back to the backup is probably wrong, yet saving it onto the non-backup
version without prompting the user is questionable.
<LI>
glyph.appendAccents didn't mark the glyph as changed nor did it force an
update.
<LI>
Barry wants a way to control the use_my_metrics bit of a reference from
python.<BR>
Give him a hack<BR>
glyph.useRefsMetrics(name[,set])
<LI>
Add a glyph.appendAccent() command.
<LI>
Ralf from end-if.de points out that when trying to change the kerning between
two glyphs which have a kern class setting of 0, then ff keeps asking the
same question several times before a non-zero value is entered. (once when
the field is clicked in, once when a minus sign is typed, and once more when
a number is entered).
<LI>
The python stuff won't compile under cygwin because it used pointers to stuff
in shared libraries as initializers of static variables. It seems windows
can't handle that. This patch should provide a work around.
<LI>
Add a font.importLookups (from another font) function to python scripting.
<LI>
When joining two splinesets (during glyph editing) we didn't pay attention
to any user settings for the control points, and we'd just always refigure
default control points. Now use user specified directions when possible.
<LI>
Add a problem (Find Problems) which will look through all glyphs for those
with both contours and references, and which will create a new glyph to contain
the contours and make a reference to it in the original.
<P>
Do something similar for bad transformation matrices (those with members
2 or more (or less than -2)).
<LI>
Importing a kerning class from one font to another (and perhaps merging fonts)
could cause memory problems if the number of second classes were bigger than
the number of first classes.
<LI>
Retain sizes of bitmap and metrics views. People seem to like this even if
I don't.
<LI>
Still problems with the guide lines layer
<OL>
<LI>
Displaying a point read bad memory (probably harmless, might cause visual
artifacts).
<LI>
Edit->Undo in guide layer trampled memory.
</OL>
<LI>
Find Problems would occasionally pop up a blank problem dlg.
<LI>
Only show points of inflection in the active layer.
<LI>
If a glyph window were displaying something other than the foreground layer
then changes in that window would not be reflected in dependant glyph windows
(a change to tilde didn't show in atilde) nor in the fontview.
<LI>
In a cubic glyph with references, turning on point numbering did not renumber
the references. They seem to be numbered for TrueType. Not sure where that
comes from.
<LI>
Alexey points out that after deleting the active layer, ff does not update
the internal bitmap font it used to display glyphs in the font view.
<LI>
Make "-lang ff" work for "-lang=ff", it's more consistent with the rest of
the arguments.
<LI>
Add a -unique argument which means that FF checks to see if another fontforge
is running on the current screen. If no other fontforge exists things proceed
normally, but if there is another, then we send it our arguments and ask
it to open them, and then we exit.
<LI>
Make the OFLib dialog have an option to download a preview when you click
on a line (rather than requiring you press the [Preview] button for each).
<LI>
The BitmapsAvail and BitmapsRegen scripting functions were broken by the
layers patch (they generated bitmaps of whatever was in the background layer).
<LI>
Put in some checks to warn the user when a 'kern' table subtable uses more
than 10920 pairs.
<LI>
Give the user one of those "This operation cannot be undone" warnings when
deleting a layer in Font Info. (Similar warning about instructions if user
changes last quadratic layer(s) to cubic without deleting any).
<LI>
When deleting the last quadratic layer, delete the tt instructions also.
<LI>
When deleting a layer from a font, ff very carefully went through all open
glyph views to make sure none was looking at the layer being deleted (and
fixing them up if they were) -- but it totally ignored the font views. Their
layers needed to be updated too. And the metrics views.
<LI>
The Import menu item in Font Info->Lookups popup menu was always enabled.
It should not have been.
<LI>
Add menu items in Font Info->Lookups (popup menu) to do a global add/remove
language from a specified script in all selected lookups.
<LI>
Get Info (maybe a few other things) didn't work on a selected reference which
wasn't in the foreground layer.
<LI>
Copy/Paste of references only worked well in foreground layer.
<LI>
Only in the foreground layer was it possible to select a reference by clicking
on it.
<LI>
Snapping to blues was broken due to a typo in the code.
<LI>
Still were a number of places where behavior depended on the spline order
in the foreground layer:
<UL>
<LI>
Could only debug a glyph if the foreground layer were quadratic
<LI>
Show gridfit used some point numbers from the foreground layer and some from
the layer being shown.
<LI>
Gridfit didn't change when changing layers.
</UL>
<LI>
Peter Lunicks points out that a tooltip in the prefs dlg actually was for
a different preference item.
</UL>
<LI>
20-July-2008
<UL>
<LI>
Updated Russian UI
<LI>
Updated Simplified Chinese UI
<LI>
Small Caps dialog greatly rewritten and merged into the sub/superscript dialog
and a new change glyph dialog.
<LI>
Alexey Kryukov makes Small Caps and friends deal with diagonal stems.
<LI>
Update the upload mechanism to OFLib to send a preview image, license text
(if specified in our database) and fontlog (again, if in our database). Currently
OFLib throws away both the license info and the fontlog, but I hope they
will fix that in time.
<LI>
Add a dialog to browse fonts on the OFLib.
<LI>
Fix some bugs in feature file generation of contextual chaining lookups which
refer to marks. Note these are not supported in the spec. This is a FontForge
only extension.
<LI>
If a script contain no default language features (but did contain some languages)
then ff produced a garbage script table for GPOS/GSUB.
<LI>
A number of Dialogs still did not autosize themselves for different languages
Create Hints, Kern (Anchor) Pair, Review Hints.
<LI>
Still places where ff uses the foreground layer rather than the current layer
to determine if a glyph is quadratic.
<LI>
On systems using different font metrics, the debug pane looks bad with the
buttons partly covered by the instruction pane. If the font is large, and
the cvt dlg empty, then I'm told ff complains.
<LI>
Barry points out that Add Encoding Slots scrolls to the wrong place.
<LI>
Adding glyphs in compacted encodings caused problems.
<LI>
When the user resizes the outline glyph window, retain that size and use
it for the default size of subsequent invocations of the window.
<LI>
It used to be that whenever ff opened an sfd file then all subsequent new
fonts (or fonts opened from real font files) would be displayed in windows
the same size as the one requested in the sfd file. Only set the window size
preference when the user explicitly changes it, not upon openning something
with a different setting.
<LI>
In a CID-keyed font, when opening an empty CID slot, ff could trample memory.
<LI>
BlueFuzz support for autohinter and metafont.
<LI>
Add some checks to make sure that we can survive bad font data without crashing.
<LI>
When trying to change kerning between the last two glyphs in the metrics
view using the text field (rather than dragging the line) then the textfield
would change, but the kerning would not.
<LI>
In the metrics view, give the user several options about the grid (which
shows the advance widths of the glyphs)
<UL>
<LI>
hidden
<LI>
fully displayed
<LI>
small lines at the top and bottom of the pane
<LI>
fully displayed except when the user is adjusting kerning or the advance
width, etc. When adjusting grid vanishes until user releases the mouse button.
</UL>
<P>
(setting is sticky).
<LI>
Allow the user to customize the colors in the metrics view.
<LI>
In the metrics view (or in the print display dlg) when glyphs are overlapping
(e asier to see when glyphs are large) then the places where one glyph ends
and another begins often have a faint halo of lighter pixels. Try to improve
things and make these joins be more uniform in color.
<LI>
Add minimal support for alpha channels (treat them as a bitmask for transparent).
<LI>
I find it really hard to believe that this is an error, but I have a second
hand report that MicroSoft claims that it is. To me making it erroneous is
pointless and annoying, but I don't write the spec. <BR>
Add to Find Problems and Validate a check to see that if a base glyph (or
mark) contains an anchor point in one anchor class in a lookup subtable,
then it must have anchor points for ALL anchor classes in that subtable.
<LI>
Fontimage would crash if asked to process a font with glyphs not in BMP.
Make fontimage better about fonts which contain no standard scripts (Apostolos's
Phaistos font).
<LI>
A few tweaks to make stemdb.c usable for resizing glyphs and stem control.
<LI>
When importing lookups into a font, append the fontname to the lookup name
only if there is already a lookup in the new font with the original name.
<LI>
Empty glyphs containing a "." in the name could cause ff to crash when doing
or checking to see if it could do a build accented.
<LI>
Gasp editing was broken (still) from the change to the cleartype stuff.
<LI>
Andrey P. would like to see a reference's bounding box in the Element->Get
Info dlg for the reference.
<LI>
Revert glyph had some stray memory references.
<LI>
Add two proposed language tags for IPA use (one for IPA and one for Americanist).
<LI>
In an empty python layer layer.boundingBox should return a tuple of 4 zeros,
instead it returned a tuple of 2 zeros and 2 random garbage values.
<LI>
Validate dlg's scrollbar was broken, and you couldn't drag the thumb up to
the top (you could get it to the top by other ways).
<LI>
Add a revalidate all menu item to the window to force a reevaluation of the
entire font.
<LI>
Add ability to import graphics from a page of a pdf file.
<LI>
Python interface does not categorize points.
<LI>
The (python) psMat.skew command skewed vertically, rather than horizontally
and by the wrong amoung.
<LI>
When doing a font sample from a script which did not set the page width/height
explicitly, then ff would use a size of 0 for each. All text drawn was out
of the imaging area, lines were too short (as well as invisible), too many
pages (all blank).
<LI>
Barry points out that "print" is a python keyword. So font.print() doesn't
work. Call it printSample() instead.
<LI>
Freetype now (or in the next release, 2.3.7) supports dropout modes, which
means fontforge must do a bit of work when generating rasters for the debugger.
<LI>
Move some logic out of fontimage.pe and into fontforge to make a default
string for a font image more widely available.
<LI>
When saving an image fromt the print dlg, the top line was off the top of
the image.
<LI>
Interpolated points need not be on integral boundaries, but ff was checking
for them. Different problems in validator and find problems, but both wrong.
<LI>
In the point near hint check (find problems), ff was leaving the hint selected.
<LI>
Fix some rounding errors in spline/line intersection.
<LI>
in Font Info, after user pressed [OK] FF set the state of the subscript
superscript default checkbox to the panose default checkbox by mistake. This
means if the user defined panose and not sub/super garbage would appear in
the OS/2 sub/super fields.
<LI>
fontimage didn't get the script right, so features weren't applied properly.
<LI>
More work on conflicting stems.
<LI>
Pressing [Done] in the print dialog would right to a random address on the
stack. Depending on what was going on when this was done it could cause a
crash.
<LI>
Fix an uninitialized variable introduced by the last change to order2 conversion.
<LI>
Add the ability to open an archive and peek inside it for fonts. Useful if
we want to open stuff from the open font library which is often packaged
in zip files.
<LI>
Add a new validation check to see if a glyph has non-integral coordinates.
Only an error in TrueType (and can't happen when fontlinting a truetype file,
but could happen on an sfd file). Add some logic to ask user if they intend
to generate truetype in cases where we aren't sure.
<LI>
Add a preference which allows people to change the pixmap dir -- and do what
we can to reload images from the new dir. Some old windows may not be updated,
but new ones should reflect the new stuff.
<LI>
When ff changed the name of a glyph, it fixed up all the tabs in charviews
to the new name -- but in neglected to refresh them. So they still showed
on the screen with the old name (until something forced a refresh).
<LI>
The Anchor Class dialog (which lists all anchor classes of a subtable) only
let you create an Anchor Control dialog for the first anchor class.
<LI>
Guard (harder) against generating pathological results when converting cubic
to quadratic splines.
<LI>
If we had a spline which almost doubled back on itself, sufficiently so that
the spline intersector found lots of really close points, which it called
intersections, but not sufficiently so that our colinear detector caught
it, then we'd generate a ton of intersections, overflow certain arrays, and
trash the stack. => ff would crash. I didn't think this could happen,
until someone provided a test case, so put in guards against this.
<LI>
provide python access to
<BLOCKQUOTE>
glyph.altuni
</BLOCKQUOTE>
<P>
either None, or a tuple of tuples, one sub-tuple for each alternate. each
sub-tuple is (alternate-unicode, variation selector (or -1), reserved for
future=0 now).
<LI>
Trying to build dieresis with "PreferSpacingAccents" set meant that we tried
to build it out of itself, and crashed.
<LI>
Also fix so that 0x22EF (ellipsis variant) is built out of centered dot in
a spacing mode, while Ldot uses it in a non-spacing mode.
<LI>
Merge fonts broken again. This time references didn't work.
<LI>
Provide a mechanism for loading image files to make menu item icons (instead
of expecting the images to live in memory inside of fontforge). Then provide
a bunch of these icons so the menus will look more interesting.
<P>
Provide some icons
<P>
Also update the install procedure to put them in the right place.
<P>
Preference item containing a directory from which to read icon files
<LI>
FF crashed when opening CID keyed fonts with compact_on_open set.
<LI>
If fontforge got an end of file in the middle of reading a (corrupt) cff
font, then ff would sit there reading endlessly and ignoring the error.
<LI>
Off by one error in drawing the large "pixel" rectangles that show grid fit
generated.
<LI>
Werner points out that my instruction glosses are out of date:
<OL>
<LI>
Was following Apple's docs for SCANTYPE, not MS. MS has a number of new values.
<LI>
Was using an old convention for accessing PPEM which broke after freetype
2.3.5
<LI>
Added the FreeType return for GETINFO.
</OL>
<LI>
Featurefile patch from Barry.
<LI>
I used to think that the max glyph instruction length field of 'maxp' refered
to fpgm and prep. I thought this because there was a footnote (which I now
see was for a different field) saying the field also applied to fpgm
and prep.
</UL>
<LI>
07-June-2008
<UL>
<LI>
New Russian translation of the UI
<LI>
Sometimes FF didn't set the message locale directory properly.
<LI>
Since FF will crash if you load a feature file when the Font Info window
is open for that font, close the Font Info window when loading a feature
file.
<LI>
New <A href="Styles.html#Italic">dialog</A> to help users convert an upright
font into an italic one.
<LI>
New <A href="Styles.html#Smallcaps">dialog</A> to help users create small
caps glyphs.
<LI>
New <A href="Styles.html#SubSuper">dialog</A> to help users create
subscript/superscript glyphs.
<LI>
And matching python commands: font.italicize(), font.addSmallCaps(),
layer.stemControl()
<LI>
Make it clear that the transform dlg from the fontview will move the width
of a glyph by default, and provide a checkbox so the user can turn this off.
<LI>
Fix various bugs in argument handling of fontforge.askChoices
<LI>
Change font.removeGlyph to accept a single string argument to remove the
glyph with that name.
<LI>
FF didn't like decimal points in the metrics view l/r bearing fields -- even
though it would put them there itself.
<LI>
Metrics windows weren't being remetricked after a feature file was loaded
(nor an afm file for that matter). Nor were they remetricked after lookups
changed in fontinfo.
<LI>
Add to python
<UL>
<LI>
font.revert()
<LI>
font.revertFromBackup()
<LI>
font.buildOrReplaceAALTFeatures()
</UL>
<LI>
Changing a glyph's width from a python script didn't update the metrics window.
<LI>
Adding two languages in the same script to a lookup in a feature file didn't
work.
<LI>
It wasn't possible to rename an anchor class (at least not by the obvious
method through the dlg). Attempting to delete an anchor class popped up an
error message which didn't provide all its own arguments and so could crash
on some systems.
<LI>
Better error recovery in feature file parsing.
<LI>
Werner points out that since I allow the user to see points in references
transformed to their ultimate position, I should also transform the raster.
<LI>
Patch by Barry to fix kerning classes (ie. figuring out WHAT glyphs go into
a class).
<LI>
When parsing a feature file which used a default languagesystem setup, ff
only used the most recent script.
<LI>
If a lookup contained no data (no subtables, or empty subtables) then when
generating a feature file ff would output stuff to declare a lookup, but
when there was no content that frame could not be parsed as it would be
impossible to figure out the lookup type. Try to avoid that.
<LI>
FF did not put contextual lookups on all the lists they needed to be on when
loading them from a feature file.
<LI>
Sometimes the Open Font dlg opened with the files shifted left so the first
characters of the name were outside the window.
<LI>
Patch from Barry Schwartz. "include" syntax in feature files didn't work.
<LI>
Sort button in the lookups pane of font info didn't refresh the window after
it finished (so things looked unsorted even after pressing it).
<LI>
When doing a Build Accented on dotted glyphname (agrave.sc, etc.) the accent
was positioned using anchors in the undotted base glyph (a rather than a.sc).
<LI>
Fix various problems with tt debugging.
<LI>
The XUID and UniqueID fields of a PostScript font are deprecated, yet FF
has continued to output them by default. Make it so FF no longer does so.
<LI>
When outputing an sfd file, ff would sometimes output a truetype spline as
a line if it had a colinear control-point. I thought I'd taken care of that,
but here's another case which needed fixing.
<LI>
Typo when loading the underline position field from a 'post' table. I was
subtracting half the underline width. I should have been adding it instead.
(Why did adobe use a different definition of the same concept in two places?
GRRR).
<LI>
It wasn't possible to make the foreground layer invisible.
<LI>
When the file chooser bookmark list got too long ff would crash.
<LI>
I wasn't doing the obvious checks to the sfnt header in font lint. So now:
<OL>
<LI>
Check that there are no duplicate table entries
<LI>
Check that there are no overlapping tables
<LI>
Check that no tables extend beyond the end of file
<LI>
Check that the file's checksum is correct
<LI>
Check that each table's checksum is correct
<LI>
Check that the number of tables is reasonable and that the binary search
header is consistent with the number of tables.
<LI>
Check that required tables are present
<LI>
Check that certain fixed length tables have the correct length.
</OL>
<LI>
Werner would like to be able to debug (truetype instructions) when using
non-square pixels (x_ppem != y_ppem).
<LI>
Barry wants to be able to close a tab. Add a menu item.
<LI>
When a glyph's name changed, I did not update the names in any tabs in the
charviews -- so those tabs would stop working after the change.
<LI>
Scrollbar in points debug window wasn't set right.
<LI>
A. Panov provides a patch. Prefs was losing bookmarks.
<LI>
the new release of volt reveals some new opentype tags.
<LI>
If we have a glyph named "agrave.sc" or "eacute.sc" then FF will now let
you build this as an accented character. It will remove the suffix from then
name, and look up the components of the bare glyph. Then for the first component
it will search for a glyph named "a.sc" and insert it. For the accents it
will use "grave.sc" if present, and "grave" if it is not.
<LI>
FF wasn't handling a FontMatrix in the top dict of a cid font.
<LI>
Trying to filter for fig files in the Import dlg caused a crash.
<LI>
Check for bad OS/2 versions (that is, versions windows will reject) when
loading a font.<BR>
Connect validation's "Points too far" with Find Problem's version.<BR>
Make fontlint aware of the new validation states.<BR>
When generating a font we complained about bad os/2 version only if they
asked for a validation. Move it somewhere more prominant.
<LI>
Add two new problems to find
<OL>
<LI>
Points too far apart
<LI>
Bitmap advance width different from scaled outline advance widths
</OL>
<P>
(also boxify the Find Problems dlg).
<LI>
Add a new validation state: Test that points aren't too far appart (must
be within 32767 of each other or we can't output them).
<LI>
Try a little harder to get some of the obscure code pages right in the OS/2
table.
<LI>
Was getting the first glyph index of OS/2 wrong for OTF fonts.
<LI>
If an sfnt contains embedded bitmaps, and if those bitmaps contain a glyph
whose advance width is different from that expected by scaling the horizontal
advance of the vector data, then windows will only get the correct metrics
if the "Instructions modify width" bit is set in the 'head'.flags field.
<LI>
If the "changedsincelasthinted" bit got set on a glyph by the unlink/remove
overlap flag on a glyph during font saving, then the glyph did not get restored
to its original state.
<LI>
Doing an Undo in the Guidelines layer didn't work, usually crashed.
<LI>
Validate didn't work on CID keyed fonts.
</UL>
<LI>
29-Apr-2008
<UL>
<LI>
Validate didn't work in CID keyed fonts.
<LI>
Pierre Hanser wants an X Resource (fontforge.CharView.Rulers.FontSize) to
specify the font size of text displayed in the info line and the rulers.
I have applied his patch, but have made no effort to insure that text will
fit in the space allowed for it.
<LI>
Hmm. Freetype seems to dislike rasterizing some complex outlines at large
pixelsizes in black and white, but seems fine with doing them in greyscale.
<LI>
When opening a ttc file (and posting a dlg which lists all the fonts in the
file) try to find a fontname in the current locale. We used to look first
for English and then anything. Now try: First current locale, then english,
then anything.
<LI>
Make the Open Font dlg (and similar file chooser dlgs) be customizable, and
store that info in prefs. Specifically control whether directories are displayed
in alphabetical order among other files, before normal files, or in a separate
pane.
<P>
Also add a bookmark (and back/forward) mechanism.
<LI>
Add support for opening a font from http & ftp URLs. Can browse ftp URLs,
and save fonts back to ftp.<BR>
<CODE>$ fontforge
http://openfontlibrary.org/people/Nasenbaer/Nasenbaer_-_Widelands.ttf</CODE>
<LI>
The validation patch broke the save mac family dialog, and then the upload
to open font library broke it further.
<LI>
When doing expand stroke, it is possible to have two points so close together
that there is no data on the curve in between the two. If this happens
ApproximateFromPointsSlopes can't do a good job. So be careful of this case.
<LI>
Layers change introduced a potential crash in the Embolden command.
<LI>
fontimage didn't draw the first line.<BR>
Add a cgi front end to <A HREF="fontimage.html">fontimage</A> so now it is
possible to get a font sample of any font on my website.
<LI>
In the Display dlg, if you changed the font, or the point size without selecting
something, then that change would vanish instantly. Fix that.
<P>
Also, was a crash bug when mixing a font with a baseline table and a font
without one (in the disply dlg).
<LI>
Add a command to insert text into a glyph. (<CODE>Element->Insert Text
Outlines)</CODE> It adds the text outlines directly (instead of a draw command
using another font) because most fonts can't include text drawing in their
glyphs. Also include a Bind to Path variant.
<LI>
GLyph lists in kerning classes (in show att) were displayed as ligatures.
<LI>
Upgrade to unicode 5.1
<LI>
If an sfd file were saved with spiros active, and then loaded into a version
of fontforge without libspiro, then bad things would happen. Whenever we
check that spiros are active also check that they can be active, and add
some warnings for the user to let him/her know that spiros aren't available.
<LI>
Add a tile pattern command (if --enable-tile-path) this allows the user to
replicate any given pattern in another glyph.
<P>
This could be used to produce a grid of guidelines, or, in conjunction with
<CODE>Element->Overlap->Intersec</CODE>t it could provide a poor man's
"Pattern Fill" (Since Pattern fills are only available in type3 fonts this
sort of makes them work for any font type).
</UL>
<LI>
30-Mar-2008
<UL>
<LI>
Add support for the OpenType 'BASE' table, and to a lesser extent for Apple's
'bsln' table.
<P>
Add python scripting (font.horizontalBaseline, font.verticalBaseline) too.
<P>
Add support under Show ATT.
<P>
Remove the old vertical origin field.
<LI>
Add the ability to create a dummy 'DSIG' table (one containing no signatures)
so that Windows will show an opentype icon for a font with extension 'ttf'
<LI>
Add support for gradient and pattern fills to type3 fonts (only if
<CODE>./configure --enable-type3</CODE> is specified, of course.
<P>
Also add support for cliping paths
<P>
Make fonts containing images work in pdf output.
<LI>
Bump the sfd version number. This should have happened in the last release,
but I didn't realize it was needed then, thus there will be sfd files with
an incorrect version number (2) when it should be 3. However that should
not cause the current parser problems.
<LI>
New Greek translation from Apostolos
<LI>
Updated Polish translation from Michal
<LI>
Apostolos points out that compiling on systems without freetype (Solaris
boxes) was broken after last months layers patch.
<LI>
Werner suggested various improvements to Show ATT:
<UL>
<LI>
Lookups should be sorted
<LI>
Glyph images should be drawn in more cases (before, just for substitutions)
</UL>
<LI>
Patch from Alexey, for better handling conflicts between diagonal and H/V
stems.
<LI>
Do a more consistent job of handlong curved stem segments. Also collect point
data for off-curve points too (may be useful in future for TTF hinting).
<LI>
Last month I put in a patch to make sure the lsb as stored in the 'hmtx'
table was really the glyph's lsb if bit 1 of the head.flags field were set.
Unfortunately I read in the lsb as an unsigned number which shifted negative
lsbs off to around 65535. FF sometimes refused to rasterize them. Of course
when the font was generated they got truncated back to negatives in the output.
<LI>
Add a preference item so that fonts will be automagically compacted when
they are opened.
<LI>
Add a new preference item (SeekCharacter) to allow users to control which
character will be displayed when opening a new font. Normally FontForge displays
'A', but that's a bit latin-alphabet-centric.
<LI>
If palettes were not docked, then a complicated series of events could lead
to a crash after closing a TilePath (Math kerning, Gradient Fill, etc.) dialog.
<LI>
Was not outputting the %%LanguageLevel DSC comment.
<LI>
Generating a CID-keyed otf font was broken by the layers patch. (Only the
background layer was output).
<LI>
Encoding->Add Encoding Slots didn't work for CID-keyed fonts.
<LI>
Autoinstructor does more consistent vertical stem placement for mono and
grayscale. Advance width scales much better. One downside: letters tend to
'glue' at small ppems.
<LI>
When FF read in a pairwise positioning lookup with no change to the pos of
the first glyph, and an x change to the second glyph it treated that as a
r2l kern pair even if the lookup was l2r. This lead to problems.
<LI>
In the Print/Display window all vertical GPOS positioning was diametrically
opposed to the direction it should have gone (there was a sign error).
<LI>
Print managed to break itself somehow. Print of a font display to ps file
(or was it pdf) didn't work. Type3 pdf fonts were broken, last glyph omitted.
<LI>
In the fontview the horizontal advance and baseline metrics lines were drawn
as if bitmap magnification were 1 (so if bitmap mag>1 they were in the
wrong place).
<LI>
In the char view, when the active tool is the scale tool, show the scale
factors on the info line.
<LI>
The default set for control points of a corner point before/after an hv curve
point was to have no control point. Make it be the same as a normal curve.
<LI>
layers patch broke type3 editing in that: in a type3 font glyphs don't have
the same number of layers so it is possible to move from one glyph to another
in the char view and have the current layer become invalid.
</UL>
<LI>
9-Mar-2008
<UL>
<LI>
Undefined value in the martlett patch.
<LI>
A variable was placed on the stack in font info which needed a longer lifetime.
This would probably mean that after several remetrickings of that window
the jump to OS/2 Unicode ranges in the Unicode ranges pane would appear in
a strange color and oddly shaped. I never saw it happen, but it should have.
The variable is now static.
<LI>
When ff read in a contextual subs by glyphs it would reorder each glyph list
(backtrack, lookahead and normal) so that the glyphs were in GID order. So
"a b c" would probably come out fine in the lookahead list, but would be
reversed in the backtrack, while "c b a" would be reversed in the lookahead).
Ug.
<LI>
The code which decided on whether to apply a chaining lookup approached backtrack
data in the wrong order (so only lookups with either 0 or 1 backtrack entries
worked. Which was all I used to test).
<LI>
New fonts were created with relative filenames, this screwed up some font
searches. Make 'em absolute.
<LI>
Deleting something in the guidelines layer probably caused a crash.
</UL>
<LI>
2-Mar-2008
<UL>
<LI>
<B><BIG>Layers</BIG></B>
<P>
The big change in this release is that every font database can now contain
multiple layers. Before this all layers in a font used the same type of splines
and there were only 2 or 3 of them.
<UL>
<LI>
Guideline semi-layer -- where all the glyphs of the font shared the same
set of outlines, to which points would snap if desired.
<LI>
A background layer -- which could contain outlines and also images which
could be autotraced into the foreground layer.
<LI>
A foreground layer -- which was what the font really looked like, and what
went into generated fonts
</UL>
<P>
Now there may be any number of layers, and each layer can contain different
types of splines -- so one database can contain both quadratic and cubic
data and can store data for both PostScript and TrueType fonts.
<P>
In a normal font all glyphs have the same number of layers (this is not true
in a type3 font, which each glyph may have it's own set of layers). You may
set the number, names and types of layers width the <CODE>Element->Font
Info->Layers</CODE> pane.
<P>
In the font view you can select which layer is active (and displayed) with
the <CODE>View->Layers</CODE> menu item. You can copy selected glyphs
of one layer to another (automagically adjusting the spline type if needed)
with <CODE>Edit->Copy Layer To Layer</CODE>. You can compare to layers
for differences with <CODE>Element->Compare Layers...</CODE>.
<P>
In the character view the Layers palette has changed. The things which controlled
the visibility of hints have moved to the <CODE>View->Show</CODE> menu
(as have some other entries that used to be in the top level
<CODE>View</CODE> menu). The layers palette solely displays the glyph's layers
and controls which layer is active.
<P>
The <CODE>File->Generate Fonts...</CODE> dialog allows you to specify
which layer is to go into the font. Note that many things remain common:
the hints and truetype instructions apply to all layers. GPOS, GSUB, kern,
and morx information is common all layers. The outlines may differ in detail,
but outlines from which a font will be generated should have the same shape.
<P>
Add new python stuff to handle layers:
<DL>
<DT>
fontforge.activeLayer()
<DD>
Returns the currently active layer
<DT>
font.layer_cnt
<DD>
Returns the number of layers in the font
<DT>
font.layers
<DD>
A dictionary like object which can be indexed either by an integer between
0 (inclusive) and layer_cnt (exclusive) or by the name of a layer. After
indexing it returns a LayerInfo object. LayerInfo objects have no independant
existance, and contain a layer's name and a boolean indicating whether the
layer is_quadratic.
<BLOCKQUOTE>
<PRE>font.layers[1].name = "Foreground"
font.layers[0].is_quadratic = TRUE
</PRE>
</BLOCKQUOTE>
<DL>
<DT>
You may delete a layer
<DD>
<CODE>del font.layers["Extra layer"]</CODE>
<DT>
You may add a new layer
<DD>
<CODE>font.layers.add("name",is_quadratic)</CODE>
</DL>
<P>
(this object has an iterator which returns the names of all layers)
<DT>
glyph.layer_cnt
<DD>
Returns the number of layers in the glyph (this is the same as the number
in the font, except for type3 fonts).
<DT>
glyph.layers
<DD>
Returns a dictionary like object which may be indexed by layer name or an
integer [0,layer_cnt) as above. The result is a standard layer object. (this
object has an iterator which returns the names of all layers)
<DT>
glyph.reflayers
<DD>
Returns a dictionary like object which may be indexed by layer name or an
integer [0,layer_cnt) as above. The result is a standard list of references.
(this object has an iterator which returns the names of all layers)
<DT>
layer.export
<DD>
It is now possible to export the contours of a layer (before only glyphs
could be exported)
<DT>
glyph.export
<DD>
Slight change to the semantics. When outputting an outline file, there is
now an optional second argument which specifies the layer to output. (again
integer or layer name).
<DT>
font.generate
<DD>
Has a new keyword argument "layer" to specify which layer should be output.
</DL>
<LI>
M.P. Suzuki requests a way to load the entire 'glyf' table of a ttc. Actually
he would like to load all 'glyf' tables of a ttc, but that would cause all
kinds of problems (multiple fpgm, prep, maxp, cvt tables, trying to fix up
GIDs in GPOS/GSUB/kern/* tables, dealing with fonts with so many glyphs they
could not be generated, ...)
<P>
So the command line now takes an --allglyphs argument, and the scripting
open commands now take a value of 4 for the openflags argument to mean this.
<LI>
Add a command Points->Make Arc, which is similar to Points->Make Line
except that it connects the two points with an elliptical arc rather than
a straight line. The ellipse is choosen to run through the two points (obviously)
and to be tangent to the slope of those points. This isn't enough information
to determine an ellipse uniquely (three points and two tangents being required)
so in general there will be an infinite number of solutions (and it is possible
to provide contradictory input so that no ellipse can be found). FontForge
may not choose the ellipse you had your heart set on. FF will first attempt
to find an ellipse so that one of the points lies on an axis of the ellipse
(this will find a circle if there is a circle which satisfies the constraints
above). If that fails it will look more generally for ellipses.
<P>
(If you hold down the <Alt> key when you select the menu item, FF will
leave the ellipse it calculated in the background layer. That was a debugging
technique but I thought it was kind of interesting and left it in.)
<LI>
Further improvements in calculating active zones for curved segments for
autohinging: if the spline is closer to the opposed stem edge at the given
point, don't extend the active zone any longer.
<P>
If a line's unit vector is close enough to the font's italic slant, then
prefer the unit vector based on the italic slant instead.
<P>
Added an experimental mode which allows to build glyph data based on a
preexisting hint layout and extend it with additional stems.
<LI>
The rotate tool in char view didn't show the angle of rotation.
<LI>
Fixed various uninitialized values
<LI>
Make sure the first character in marlett is 0xf020.
<LI>
Reinstate the behavior of the symbol encoding that the wine developers depend
on.
<LI>
Add a scripting flag so that script writers can control whether a font has
a symbol encoding without having to use a funky extension. (Wine people don't
like having to say ".sym.ttf").
<LI>
When building a ligature, ff would mark the first letter with use_my_metrics.
That should only happen when building accented glyphs.
<LI>
Put in a way for the user to leap easily from Font Info->Unicode Ranges
to Font Info->OS/2->Charsets->Unicode Ranges.
<LI>
python scripting font.sfnt_names would sometimes crash.
<LI>
When a matrixedit is initialized its last visible column (especially if followed
by hidden columns) may not be at the edge of the matrixedit. This lead to
drawing spurious lines which annoyed Alexej.
<LI>
When running simplify on a quadratic contour and the contour doubles back
on itself, FF would do an optimization which only worked for cubics.
<LI>
Werner tells me that if bit 1 of the 'head'.flags field is clear then I should
adjust so that the left side bearing is what is specified in the 'hmtx' table.
<LI>
Pdf filter decode didn't work if given an array of filters (not even in the
array contain only a single filter).
<LI>
FontForge doesn't support pdf encryption which seems to require a license
from RSA. Before we'd just announce failure for no reason, now announce that
the file is encrypted and we can't read it.
<LI>
Improper test for point matching in references (in tt).
<LI>
In an un instructed font, the [Default] button in FontInfo->Grid Fitting
produces the wrong result (and has since I added support for the new gasp
features of ClearType.
<LI>
Doing hint modifications caused errant pointers to be used. Often crashing.
<LI>
Math strings weren't getting initialized in math kern.
<LI>
One of the math constants had the wrong friendly name.
<LI>
Michal points out that tooltips in the math window don't get translated.
<LI>
TopLeft/TopRight etc. in math kerning weren't translated.
<LI>
The transform menu item seems to have lost its shortcut. Put it back.
<LI>
When selecting a control point in the outline view, we would always select
the next point if both next and prev were in the same place (ie, on the base
point itself). But when the point is at the end of an open contour, the one
which should be selected is the one which controls a spline (which need not
be the next one).
<LI>
Oh dear. My original method for storing background layers didn't allow for
references (because I didn't put them in the background). But I need them
now.
<LI>
Label some of the horizontal metrics lines
<LI>
Trying to move the top accent line resulted in a crash.
<LI>
Drat. FF really wants to set the latin1 codepage bit, even if the user explicitly
provides the codepage settings. The wine people don't like that.
<LI>
If we have two fonts open, a type3 (multilayered) one and a normal outline,
and we have outline glyph windows open from each font, and we move the focus
between the glyph windows, then the layers palette will get left behind when
focus moves to the other font. (and other more complex senarios when switching
between multilayered and outline).
<LI>
When loading a feature file, ff would complain if a mark appeared in two
anchor classes -- even if those classes were in separate lookups. This meant
it got unhappy about a mark which was in both a mark 2 mark lookup and in
a mark to base lookup.
<LI>
I had intended not to give warning messages about names like "nine.oldstyle"
(defined in Adobe's obsolete PUA mapping) when loading a tt font, if such
a glyph had a different unicode mapping (or none) than the one Adobe used
ages ago. But I screwed up and was generating messages anyway.
<LI>
When converting cubics to quadratics, if we had a curved spline where one
of the endpoints of the spline had no control point, then we'd get a slope
at that point of 0/0. This meant that we tried to put a quadratic control
point on top of that endpoint which looked confusing and seemed unnecessary.
<LI>
Typo in glyph compare. Caused another crash when comparing lookups.
<LI>
Didn't handle NULL tokens properly when reading in a feature file.
<LI>
Make it easier to select control points when the alt key is down.
<LI>
Add a mechanism for getting default values for private dict entries in python
scripts.
<P>
(Also provide default values now when [Add]ing private entries in Font Info.
<LI>
Making class0 editable broke the ability to create a context chaining class
lookup.
<LI>
The encapsulation for creating libfontforge broke importing a lookup from
one font to another.
<LI>
Feature file generation omitted a semicolon after (some) contextual lookup
rules.
<LI>
Nasty bug with references in ApplySubstitutions scripting command.
<LI>
Mark classes didn't work.
<LI>
Michal N. points out that "Really Use Typo Metrics" should be moved above
the typo metrics (or below) but should not be in the middle of them.
<P>
He also tells me that the internationalized weight classes don't get parsed
properly.
<LI>
Someone handed me a font with a SJIS encoding cmap. The cmap mapped a glyph
to SJIS 128, which isn't a valid SJIS code point. FF got an insane result
when trying to convert to unicode and crashed. Add a check against bad code
points.
<LI>
Add two proposed features from the pre-draft of OT 1.6
<UL>
<LI>
Drop Caps
<LI>
Character Variants 00-99
</UL>
<LI>
Werner wants to be able to select text in the warnings window to paste elsewhere.
And he points out some scrolling flaws as well.
<LI>
Could not attach lookups to mac feature settings.
<LI>
Clean up some display problems in the type3 layers palette and layer info
dlg.
</UL>
<LI>
3-Feb-2008
<UL>
<LI>
New Vietnamese translation from Clytie
<LI>
New Russian translation from Alexandre Prokoudne.
<LI>
New Polish translation from Michal N. .
<LI>
FF could crash if a cmap subtable contained invalid encoding points.
<LI>
Add various new features/scripts/language tags from OpenType draft 1.5.
<LI>
Add two proposed features from the pre-draft of OT 1.6
<UL>
<LI>
Drop Caps
<LI>
Character Variants 00-99
</UL>
<LI>
The warnings window didn't resize properly. It didn't let you copy text (ie.
a warning) to the clipboard. It should have scrolled with keypad keys (arrows,
page up/down, etc). There should be a way to clear the windows so you know
that all the warnings are from a given operation. Added a popup menu.
<LI>
Fixed a problem in the auto hinter.
<LI>
Could not attach lookups to mac feature settings.
<LI>
Clean up some display problems in the type3 layers palette and layer info
dlg.
<LI>
Autoinstructor: turned on strong point interpolation:
<UL>
<LI>
Various important outline points are correctly placed between hints' edges.
<LI>
Potential benefits for DStem positioning.
<LI>
Drawbacks: 2x slower, code generated is now much bigger.
</UL>
<LI>
The merge (and simplify) command could produce odd results if the points
surrounding the merge had no control points.
<LI>
Extend find/replace to handle changing angles.
<LI>
The Display/Print dlg would crash when the user pressed the reset button
if there were at least two pointsizes of the font on display. Perhaps in
other cases too.
<LI>
Make shift click in the lookup dialog (but not the subtable part) select
all lookups between current click and a previously selected point.
<LI>
glyph.addPosSub doesn't work for ligatures or multiple substitutions. It
treats both as alternate substitutions.
<LI>
Michal Now. points out that there are some strings not marked for translation
in cvruler.c.
<LI>
FontForge never checked that fonts had fewer than 65536 glyphs. I just blythely
assumed I wouldn't have to worry. Well someone handed me a font with 65731
glyphs, and FF treated it as having 195 glyphs. Things got nasty after the
196th.
<LI>
Fix a crash in autohint.c and an infinite loop in stemdb.c.
<LI>
Font Compare would crash if one font had a lookup subtable which was not
in the other.
<LI>
Improve the algorithm used to detect reference points for stem edges. Enable
snapping "corner extrema" to predefined hints.
<LI>
Remove the obsolete Private Dict to CVT table command.
<LI>
Michal Now. wants short cuts to change grid fit attributes, so a new sub
menu with things like increase point size, change AA, etc. (with shortcuts,
of course).
<LI>
Patch by Michal Nowakowski. In Show Grid fit not setting the mono bit correctly
in freetype.
<LI>
Bug in pfm file output.
<LI>
If we failed to open a plugin library during init, it would call LogError
before the display was initialized, leading to a crash.
<LI>
Autoinstructor: If a horizontal stem interpolated between blue zones was
very close to one of them, it often jumped beyond that zone in small ppems.
This was especcially annoying for serif fonts.
<LI>
Improvements (I hope) to the ruler tool
<OL>
<LI>
Make it snap to splines (in addition to points)
<LI>
Have it draw a line from the start point to the mouse
<LI>
If they start on a spline, then include info on the offset in coordinates
parallel to the spline and normal to it.
<LI>
Provide a "spline length" if the start and end points are on the same spline
(instead of just if they were the end-points of the spline).
</OL>
<LI>
In python scripting contour.reverseDirection only worked on closed contours.
<LI>
If you click wildly in the cvt editor it would eventually go into infinite
recursion.
<LI>
If there were no free anchor class then attempting to add an anchor point
would pop up the Mark Classes pane of Font Info (rather than Lookups). This
is sufficiently close to Anchor Class as to be very confusing.
<LI>
Make label gadgets (and buttons which are also labels) handle multiline text.
<LI>
If the user closes the font info dlg when there are mark class dialogs floating
around then close them too (there was code which was supposed to do this,
but it didn't work).
<LI>
Try to make it clear in the Mark Classes pane of the Font Info that mark
classes are not anchor classes. Someone got confused...
<LI>
Fix some bugs in parsing mark anchors in feature files.
<LI>
When adding an hvcurve point into an existing spline it behaved like a curved
point and laid parallel to the spline rather than being either horiz or vert.
<LI>
FontForge uses floats (which have ~24 bits of precision internally) to represent
coordinates. Type2 fonts use a 16.16 fixed notation, which means that we
only represent coordinates <256 accurately. This will cause slight errors
during output and input of a font. Unfortunately, due to the rel-rel nature
of postscript these slight errors accumulate.
<P>
So instead, when loading and saving a Type2 font use double precision
temporaries. This should mean there will be no errors to accumulate. There
will be slight errors when converted to SplinePoints, but these errors will
not accumulate.
<LI>
Check several adjacent splines when detecting active zones for curved segments
and thus make the algorithm less dependent from the number of additional
points on a contour and their exact positions.
<LI>
Fix a number of problems that -pedantic complains about.
<LI>
Some mnemonics in the Element menu are used for two items. Clean it up a
bit.
<LI>
Add a "Find Problems" for non integral coordinates.
<P>
Change the "Ref with bad ttf transformation" so that it checks for integral
coordinates too.
<LI>
the glyph.validate function in python was marked as taking NOARGS in the
method table, but, in fact, does take arguments.
<LI>
Oops. Validate used to complain if the StemSnap[HV] array were missing. But
that's perfectly ok.
<LI>
Be more lenient when closing a path (when reading in a type1/2 font)... we
can get rounding errors.
<LI>
Add a little LogError to let the user know if there are sfnt tables we ignore.
<LI>
Deep in the heart of Find Problems check for bad contour direction, was a
bug where it looked at the wrong spline.
<LI>
Just as it is possible to have things in 'morx' that are not in 'GSUB', it
is possible that a 'GPOS' table contains no kerning information but a 'kern'
table does. We used not to read 'kern' if we had 'GPOS', be a little subtler
and check for the presence of a 'kern' feature inside 'GPOS' before deciding
whether to read the 'kern' table.
<LI>
The anchor control dialog didn't work for mark to mark anchors when looking
at a base mark.
<LI>
When a font contained glyphs with multiple encodings, then ff would produce
bdf files with a char count which matched the # glyphs, not the number of
encoding slots used.
<LI>
In a compacted cid font, the status line (containing unicode, unicode block/name,
etc) was junk.
<LI>
Barry wants to be able to mark that it's ok for a spline to have intermediate
extrema.
<LI>
The []TeX Table checkbox was always disabled in the save font dlg.
<LI>
The DejaVu people want to be able to associate a comment with a cvt entry.
<LI>
Find Problems->ATT->Missing glyph name complains about the special
string <Delete> which I used in Apple lookups to represent the "Delete
Glyph" action that apple supports and OT does not. Don't complain about this
any more.
<P>
Add a problem which will look at the glyphs a lookup is active for, and then
checks the script of each glyph against the scripts attached to the features
which invoke this lookup. If the script doesn't match anything, then complain.
<LI>
If a font contained an empty anchor class (having either no base glyphs or
no mark glyphs) then when dumping out the font subsequent anchor classes
got the wrong data associated with them.
<LI>
Barry wants non-integral hints.
<LI>
Barry points out that Scale To Em doesn't scale the guidelines.
<P>
Barry also complains that spiro points are rounded. This is more debatable.
The bezier conversion will put bezier points where there were spiros, so
if we don't round the spiros we get non-integral points. But if we do round
the spiros we mess up the splines. Hmm.
<LI>
When complaining about a bad class in a mark (GPOS) sub-table, specify the
name of the offending mark if we can.
</UL>
<LI>
10-Jan-2008
<UL>
<LI>
Fixed a crash bug in Auto Hint
<LI>
Replaced the Short Cut to AutoInstr
<LI>
In Font Info->Lookups, added to the lookup tooltip to show what contextual
lookups used the current one.
</UL>
<LI>
9-Jan-2008
<UL>
<LI>
Fix some problems with AAT. Mutually exclusive features in the chain didn't
get the right OffFlags set. (and didn't work).
<LI>
Add DHint support for native & python scripts. Prevent users from specifying
incorrect unit vectors for diagonal hints added via scripts. Also use stemdb.c
to calculate active zones for normal (horizontal and vertical) hints added
via scripts.
<LI>
Remove my original (and not very good) auto instructor. Clean up the docs
to remove references to how bad it was.
<LI>
Add the ability to store a fontlog in the sfd file. Available to python
scripting. A way to save it to FontLog.txt when generating a font. A way
to modify it before generating. Normal access through Font Info.
<LI>
Change the PfEd table so that the font comment is in utf8, and the glyph
comment subtable too.
<P>
Add subtables to hold:
<UL>
<LI>
Names of lookups and lookup subtables and anchor classes
<LI>
Guide lines
<LI>
Background and spiro layers
<LI>
Font Log
</UL>
<LI>
It used to be that when a font had both 'mor[tx]' and 'GSUB' we would only
read 'GSUB'. But Michel Boyer wanted to read both. So... read 'morx' after
'GSUB' and if we find a feature/setting that looks as though it corresponds
to an existing OpenType lookup (which we can convert to a Mac format) then
skip that feature/setting, presuming it to contain redundant data.
<P>
This is a finer grain approach, but similar to, the previous one. There we
skipped the whole table, presuming it redundant. But in CharisSIL the morx
table has a lot of functionality orthogonal to GSUB. So we must parse both.
<LI>
The 'feat' table was being output in the wrong order. Features were linked
together in several ways and 'feat' followed the wrong field.
<LI>
Two related bugs that Charis SIL invokes:
<OL>
<LI>
This font has a contextual substitution which uses class 0 and replaces it
via a nested lookup. But my feature file output could not handle class 0
(since it isn't really specified) and would crash.
<LI>
However, in this case class 0 was specified by the coverage table (we fixed
that earlier but just for kerning classes). So now fix for contextuals.
</OL>
<LI>
Auto recovery was broken. Ever since I put in the code to ask the user what
to do with a recovery file (It always recovered into a new file).
<LI>
When FF opens a char window on my screen it has a bad habit of opening it
at 40% magnification. Which means mouse clicks give things either at em or
at half me positions. That's bad. Don't want the default behavior to create
lots of .5 coordinate values.
<P>
Make the window open at 33% instead.
<LI>
FontForge warns the user when a glyph's name does not match its unicode encoding.
But in the past it would do this for glyphs with multiple encodings even
if the name matched one of the encodings. Fix that.
<LI>
When FF uses doubles internally, it still outputs float precision into the
sfd file. Fix that.
<LI>
Still said "Tangent" rather than "Constraint" in points menu when in Spiro
mode.
<LI>
Ben Laenen of Deja Vu says it would be nice if sfd files stored truetype
instructions as recognizable text rather that squirrily ASCII85 encoded binary
data. Sounds reasonable. Might as well store 'cvt ' and 'maxp' as numbers
then.
<LI>
Remove some deprecated DStem code. Also move CVNumForePointsSelected() to
charview.c and make it static (not used anywhere else except that file).
<LI>
Sometimes the pointers to libspiro didn't get initialized.
<LI>
If a font had no private dica and one tried to put something in it from python,
ff would crash.
<LI>
Alexej points out that my use of iconv was broken on many systems where UCS-4
is big endian on a little-endian machine.
<LI>
Use freetype to rasterize the fill blit in the char view.
<LI>
- In search_edge, an array subscript was sometimes -1?
<P>
- Previously I forgot to mention Alexey's changes in DStems hinting code.
<LI>
Simple optimization for blue zone hinting - cupped serifs should benefit
most.
<LI>
Update copyright notices. (add 2008)
<LI>
Oops, typo in python menu code.
<LI>
There is now an incomplete fontforge which uses the gtk toolkit.
<BLOCKQUOTE>
<PRE>$ ./configure
$ make
$ make install
$ make fontforgegtk
$ make install_gtk
</PRE>
</BLOCKQUOTE>
<P>
About all it can do is open a font and display it. If a menu command does
not require a dialog then it might work. There are probably scores of bugs
even in the little bit that supposedly does work.
<P>
I think the open dialog is extremely ugly. That's not my fault, that's gtk's
widget. The open dialog is far less functional than the one in the gdraw
fontforge -- I can't figure out how to enhance it.
<LI>
Switching to a new internal representation of diagonal stem hints.
<LI>
Add a mechanism to check that the executable has been configured to match
the library. And include a library date stamp as well as an executable stamp.
<LI>
In the metrics view, if I switch from outline view to bitmap view (by selecting
a strike by pixel size from the view menu) then ff would crash.
<LI>
Cleanup the library executable interface a bit more.
<LI>
Minor tweaks to fontview.
<LI>
- Alexey suggested improvement for HStemGeninst().
<LI>
- Added optional experimental code for interpolating strong points.
<LI>
Barry Schwartz wants to be able to set the "don't autohint flag" from python.
I'm calling it "manualHints" though.
<LI>
Barry Schwartz points out that the simplify flag "setstarttoextremum" is
incorrectly documented. Fix that.
<LI>
- In HStemGeninst(), new positioning method gives bizarre results for overlapping
stems. Added fallback to old method.
<LI>
Make it obvious that the Print/Display dlg HAS a menu.
<LI>
Crossland wants a way to insert random text into the Print/Display dialog.
So add the ability to generate a bunch of random words that look vaguely
reasonable. (Invoked by the popup menu in the dlg).
<LI>
Exporting spiros to a plate file produced garbage if any spiros were selected.
<LI>
The Print dlg tended to crash if you did much editing in it.
<LI>
When switching to spiro mode on an empty glyph (or perhaps the first glyph
in a new font), FF would complain: Internal Error: Character out of bounds
in bitmap font 0>=0
<LI>
Oof. The math stuff doesn't work if device tables are disabled. fix it.
<LI>
Fix some problems with configuration modes I don't use. Correct some pointer
arguments which differ in signedness.
<LI>
If lines are attached to both sides of a diagonal stem, then prefer the longer
line's unit vector for this stem.
<LI>
- Fixed snap_to_blues(): it used to mess global accuracy setting up.
<LI>
- Fixed finish_stem(): it did not mark edges of previous hints as done.
<LI>
- CHanged HStemGeninst(): it now tries to interpolate HStems within blues
when possible.
<LI>
Dave Crossland points out that ff didn't compile if --without-native-script
were set.
<LI>
Trying to change control points with the point info dlg on hv-curve points
didn't work.
<LI>
Add the ability to insert a list of words into the metrics view.
</UL>
<LI>
10-Dec-2007
<UL>
<LI>
Redo the internals of fontforge to separate the core font engine from its
dependance on gdraw, and stuff all of that into libfontforge. So libfontforge
no longer needs gdraw, and can be used to build another user interface with
a different widget set.
<P>
In theory.
<LI>
Add the ability to insert a list of words into the metrics view.
<LI>
If a font has a variant selector 'cmap' subtable, and has some unnamed glyphs
then base names on the information found in the vs subtable as: (u0020.vsFE00)
<LI>
If a font has a 'MATH' table and some unnamed glyphs then try to guess names
for glyphs refered to in horizontal/vertical glyph construction tables.
<LI>
When outputing horizontal glyph variants in the 'MATH' table I used their
vertical size rather than their horizontal size.
<LI>
Further refinements to the concept of lines: all points assigned to the same
line now should have filled space at the same side. So what we used to call
lines would be better called edges now. Also the handling of bounding box
hints has been improved: all relevant points are now assigned to a BBox stem
hint (not just one point from each side).
<LI>
Add a user interface to control file recovery (used to be only a command
line argument).
<LI>
Patch by Barry who points out an extraneous line in the font iter by search.
<LI>
Barry points out that there is a disconnect between the docs and the program
about the "spiros" member of a Contour python object. So correct the docs
to read "spiros", and change the program so it will accept "spiro" as well
as "spiros".
<LI>
Add the ability to name contours, primarily for guidelines.
<P>
Add python support for the contour_name.
<LI>
Add support for reading Apple's old sfnt wrapped CID format (basically the
same as the sfnt wrapped 'typ1' format.
<LI>
FF crashed on Nastaliq Navees from SIL.
<OL>
<LI>
It has no unicode cmap (which ff handled incorrectly)
<LI>
It has cross-kerning (which ff doesn't handle, but still died while explaining
that it didn't handle it)
</OL>
<LI>
Use routines from stemdb.c to generate active zones (or stem instances) for
manually added hints. The old algorithm is still used when reading Type 1/OTF
font files.
<LI>
FontView -> Hints->Clear hints did not set the hints changed bit.
<LI>
Erik van Blockland points out that python glyph.addPosSub doesn't check for
duplicate entries and will blindly add something when it should be replacing
it.
<LI>
Also added a short cut so that it is posible to specify simple kerning by
typing one number rather than requiring an additional 7 zeroes.
<LI>
Prevent some redundant stem chunks from being generated.
<LI>
Both Adobe Acrobat and Apple's Preview exhibit what I consider to be a bug.
According to the PDF reference manual, if an Encoding dictionary is not specified
for a font object then the built in encoding will be used. But both these
programs reencode to AdobeStandard and do not use the font's built in encoding.
GhostScript agrees with my interpretation and does not reencode.
<P>
However, they ain't gwana change, so I must. Always dump out an Encoding
dictionary even when it shouldn't be needed.
<LI>
<UL>
<LI>
Lines are more actively used: stems now have 'leftline' and 'rightline'
properties, and for diagonal stems the stem unit vector is always set equal
to the unit vector of the line corresponding to the left edge of the given
stem;
<LI>
I no longer attempt to calculate "active" zones for bounding box hints (they
usually don't correspond to any actual glyph features and thus look ugly).
So now only edges of such hints (without any active zones) are displayed
in the charview;
<LI>
diagonal stem detection improved (some checks were too strict and actually
oriented to HV stems);
<LI>
the 'blue' property is now used not only for ghost hints, but also for regular
horizontal stems. This may be useful if I ever implement an autoinstructor
based directly on the stem detector;
<LI>
glyph data initialization has been separated from stem detection and put
into a separate routine (a first step for unification of algorithms used
to calculate stem active zones).
</UL>
<LI>
When doing a print sample to pdf, the second page came out in times bold
rather than the user's font.
<LI>
I think setting a compact encoding could overflow an allocated string array.
<LI>
I was setting the Regular bit of OS2.fsSelection if the weight class was
400. I probably should have used 500 instead. Or maybe both. Let's try both
for now.
<LI>
If a ufo font did not have a lib.plist file (and python was enabled) then
ff would crash on loading it.
<LI>
When importing an eps file, ff did not turn off the "Bitmap-only" flag. This
means that new fonts composed entirely of eps files would be treated as bitmap
fonts (sometimes).
<LI>
Moving quadratic control points with the pointer is broken (again).
<LI>
Metricsview would crash if you deleted a character and then clicked in one
of it's textfields.
<LI>
Fix typo in stemdb.c
<LI>
Add a Select->Open Contours command.
<LI>
Add some serbian text (to the built in print samples).
<LI>
Update the location on the charview info line when dragging out a guideline.
<LI>
If a glyph had a unicode encoding for one code point, and a name which mapped
to another, then double clicking on the other code point would cause fontforge
to provide a reference to the base glyphs from the new encoding slot. But
only in the current encoding map. In other words I forgot to set the AltUni
field.
<LI>
Some people have though winDescent should be a negative value for things
below the baseline. So make the sign of the various descent fields explicit
in the corresponding popup messages.
<UL>
<LI>
Typo Descent: Negative
<LI>
Win Descent: Positive
<LI>
Hhea Descent: Negative
</UL>
<LI>
If a user edited a glyph in spiro mode, and then did something in the fontview
ehich caused the spiros to be removed (Lots of things: Overlap, Expand Stroke,
Embolden, ...), and then did a Round to Int (and perhaps other things) from
the font view, then FontForge would crash.
<P>
It expected to find spiros in a glyph marked as being edited in spiro mode,
and was surprised when none were available.
<LI>
Dave Crossland doesn't like having "..." at the end of window titles.
<LI>
Back out the Add Extrema in spiro mode patch. Turn off display of extrema
in spiro mode (and of Points of Inflection too).
<LI>
Add an autowidth command to the python interface.
<LI>
contour.lineTo and friends didn't work (didn't increment the contour's point
count).
<LI>
With SnapToInt preference on, and at high magnifications, a mouse click would
often be snapped so that it was well outside the fudge region. This meant
that clicking on something might not select it.
</UL>
<LI>
10-Nov-2007
<UL>
<LI>
Another bug when loading feature files
</UL>
<LI>
9-Nov-2007
<UL>
<LI>
Introduced Raph Levien's Spiro curves. Please
<A href="http://libspiro.sf.net">download <B>libspiro</B></A> before using
fontforge.
<LI>
Deal with things that got deprecated as the mac moved from 10.4 to 10.5
<UL>
<LI>
NSAddImage and family have been replaced by dlopen
<LI>
the old mechanism for referencing a resource fork from POSIX "foo/rsrc" has
changed to "foo/..namedfork/rsrc".
</UL>
<P>
The new stuff all worked as far back as 10.3 -- but FontForge source is no
longer compatible with 10.2.
<LI>
In a truetype font, if a substitution lead to an unencoded glyph and the
cursor hung over the substitution long enough to invoke the popup, then we'd
generate a tiny font containing just the unencoded glyph, we'd complain that
there were no encoded glyphs, we'd dismiss the popup, we'd generate the glyph
image, then we'd try to free it with no free function because the popup was
dismissed.
<LI>
Merge Feature File didn't actually merge things in, it forgot about existing
things -- which caused problems for kerning classes which get stored in two
lists.
<LI>
Allow people to order entries in the PostScript Private dictionary (in Font
Info)
<LI>
Give the user control over how much arrow keys accelerate when holding down
the Alt (Meta) key.
<LI>
People want a Snap To Int preference item.
<LI>
Simplify sometimes ignored points.
<LI>
People expect to be able to drag guidelines from the rulers (because everyone
else does that) and don't want to bother to learn FF's mechanism. So make
that possible.
<LI>
Dave C wants to be able to use Cntl-Tab to switch tabs in the charview.
<LI>
If freetype gets a single point open contour in postscript mode, it simply
skips the contour (does not call FT_MoveTo on it). This screwed up my attempt
to match the results of freetype with the actual splines and caused a crash.
<LI>
Glyphs with no contours didn't set widthset when read from ufo and so were
viewed as empty.
<LI>
FF was expecting descent to be a positive value in a ufo (it is in
ArialBlack.ufo), but it seems to be negative in most UFOs.
<LI>
Erik wants the creation order of contours preserved when reading a glif file.
<LI>
Oops. glyph/glyphPen types got the wrong names in the fontforge python module.
(interchanged)
<LI>
remove the Elide command. (There's no reason to use it, Merge is always better,
it just confused people.
<LI>
Refrain from simplifying an order2 point where the second derivative changes
sign.
<LI>
If a font has no "fullname" field (and fonts aren't required to have one)
ff would crash when generating the font.
<LI>
Ability to Import/Export Raph Levien's plate file format.
<LI>
If I moved a corner point adjacent to a tangent, the slope on the other side
of the tangent did not change.
<LI>
Exporting a glyph to BMP or PNG was broken, probably since the addition of
python import export filters.
<LI>
Add a Strftime scripting command to the legacy language.
<LI>
Werner points out that I misspelled "persistent" as "persistant" in many
places, including python member names. Correct that. (but leave the old,
misspelled membernames around but undocumented in case anyone has been mislead
by my previous documentation.
<LI>
Add new python stuff to provide access to spiros.<BR>
The fontforge module has a new method -- hasSpiro() which returns whether
we've got access to libspiro or not.<BR>
The module also has a bunch of numeric constants defined spiroG4, spiroG2,
etc. for use in the<BR>
The Contour type has a new member -- spiros which is a tuple of spiro control
points (which are themselves tuples: x,y,type,flags, where type is one of
the numeric constants above.
<LI>
People would complain that the python interface would give them "Invalid
second order spline" but no one bothered to give me a test case. I hope I've
tracked it down now.
<LI>
Add a "problem" to check for glyphs whose bounding boxes are: too tall, too
short, too wide, too much to the left.
<LI>
Used to be I had many problems checked by default. Best to turn them all
off.
<LI>
Oops. FF was using Py_BuildValue("s") on something that was already a python
string.
<LI>
Adam Twardoch suggests that codepoints in the PUA have their script determined
by their name (rather than just returning DFLT). Since Adobe used to put
things like "a.sc" in this area, that seems a good idea.
<LI>
FF marked almost all fonts with the Oblique bit in the OS/2 table.
<LI>
- Patch from Alexej for his diagonal hinting routines, fixes an ugly problem
reported by Max Rabin.
<LI>
Various fixes in stem detection. In particular added a concept of "base start"
and "base end" for curved segments of stem edges, allowing to determine more
precisely if an active zone (which merges left and right segments together)
should actually be considered "curved" at its
<LI>
Make implied points to be ignored when determining a diagonal stem validity.
<LI>
Swith the timestamps to GMT. Prior to this all timestamps have been PS/DT,
but now that other people are making source changes GMT seems more sensible.
<LI>
Max Rabkin supplies a patch to let python import plate files.
<LI>
A couple of new name table string ids: WWS Family & WWS Subfamily.<BR>
Provide reasonable defaults for the wws* ttf names.
<LI>
Correct the list of dutch font styles.
<LI>
Most of the items in the popup menu of the lookup pane didn't work.
<LI>
FF wasn't loading python init files from ~/.FontForge/python
<LI>
When I fixed mark to ligature positioning I broke the other three types of
anchor positioning (to base, to mark & cursive).
<LI>
If you pressed the [*] Default check box in the Font
Info->OS/2->Panose area, the values didn't go back to the defaults.
<LI>
When copying glyphs from one font to another ff would sometimes use a temporary
value of -2 for the orig_pos. This meant that reference fixups didn't work
when looking at those glyphs.
<LI>
Drat. Typo when copying a contextual lookup from one font to another caused
a crash.
<LI>
Add a new point tool which creates curved points which are always either
horizontally or vertically oriented. (I call 'em hvcurves)
<LI>
Use ~/.FontForge instead of ~/.PfaEdit
<LI>
I'm told there was a typo in my Bulgarian text for the Print/Display dlg,
and that this should fix it.
<LI>
Get some proper Belorussian text.
<LI>
Several bugs in my mark attachment routines. There was an assumption that
only one mark could be attached to a base glyph per sub-table. This is wrong
for mark to base, in that there can be several anchor classes per subtable.
It is even worse for mark to ligature where there can be many marks per anchor
class (one per ligature position).
<LI>
Having done this make sure we don't use the same anchor point more than once.
<LI>
What glyph class should be used by default if a glyph is both a ligature
and a mark? Probably mark. There are greek accent ligatures, and its probably
more important to treat them as marks than as ligatures (I don't know any
fonts which actually "skip ligatures" but there are lots which "skip marks").
<LI>
Select->Next/Prev Point always selected the first point. Select First
point did the wrong thing.
<LI>
Pressing the [Refresh] button could crash ff if a "FontData" depended on
another (same font).
<LI>
Someone (John ?Morrison?) requested a way to access fonts by numeric index
rather than font name when opening font collections like ttc files or dfonts.
<LI>
* I no longer have separate l/lpotential and r/rpotential pairs Â
of point data objects. Instead I use just 'l' and 'r' accompanied by
 boolean flags indicating their state as "potential". This greatly
 simplifies some tests and makes the code more readable. * When
I am adding a chunk based on a single point to an existing stem, Â
I always mark the second point as "potential". Later this state can
 be changed if check based on the second point produces the
same chunk, Â or at least doesn't produce another (conflicting)
stem. Again, this  simplifies some tests which accompany adding
new chunks and makes the  result of the stem detection less
dependent from the order in which  the points are processed.
* I allow assigning a point to a stem even when its distance from the
 stem edge is larger than standard dist_error_hv or dist_error_diag,
 if only the difference between maximum possible deviations
to the  both sides of the edge doesn't exceed the double
dist_error_* value. Â This prevents us from adding several
almost-coincident hints, actually  controlling the same stem.
* I have added a function which performs some stem normalization, Â
sorting chunks by point coordinates. For HV stems it also can Â
slightly modify the positioning of the stem edges preferring the Â
coordinate which is closer to most points assigned to each edge. * There
is now a special function used to compare conflicting stems Â
and decide if one of these two should be preferred, or they both are
 worth to be output. * The detection of serifs and similar elements,
which, not being  exactly horizontal/vertical, still have to
be marked with a HV Â stem, has been improved (two points, forming
a serif termination, Â now should not necessarily follow each
other).
<LI>
Drat. If we had libjpeg and not libpng we'd get a complaint about an undefined
symbol.
<LI>
Add "Mismatch Unicode & Name" to the Find Problems dlg.
<LI>
There are ttf files in existance where glyph names do not match unicode code
points. Tons of fonts use ".notdef" for glyphs other than "GID=0". Other
fonts use ASCII glyph names (space, exclam, numbersign,...) for glyphs in
other scripts (Kedage-n.ttf does this).
<LI>
In the past, ff has felt that the presence of a zero-width ".null" and
"nonmarkingreturn" glyph meant that a font was not mono-space. In the future
ignore these glyphs when determining whether a font has fixed width.
<LI>
in some rare cases we got an uninitialized value in spline->line display
conversion.
<LI>
Up the size of the File->Recent menu to 10, and include non-sfd files
in the list.
<LI>
The routine to create an apple state machine from a set of OpenType
('init','medi','fina','isol') forms would often crash.
<LI>
When scaling BlueValues, or other arrays, a trailing space after the last
number and before the ']' was considered an error. If found then ff would
not scale that entry.
</UL>
<LI>
2-Oct-2007
<UL>
<LI>
Add <CODE>Edit->Select->Autohintable</CODE>
<LI>
Typo in parsing cmap format=6 subtables could cause a crash (or eccentric
behavior)
<LI>
Can build fontforge so that it is a python extension (as well as embedding
python in ff).
<BLOCKQUOTE>
<PRE>$ ./configure --enable-pyextension
</PRE>
</BLOCKQUOTE>
<LI>
If a tt spline had a control point on top of an on-curve point we would lose
track of it when generating the font.
<LI>
Add support for the Uncode variation subtable of the 'cmap' encoding table
(format=14).
<LI>
add xdg-open to the list of "known" browsers.
<LI>
Patch from Torsten Bronger. Got the args wrong in (python) font.glyphs.
<LI>
Fabrice Popineau & Taco Hoekwater point out that in the featurefile output
routines I was using a single backslash inside a printf string. The intent
was to output a single backslash. But I actually need to quote the backslash
with another to do that.
<LI>
If a text string were extremely long it could overflow the 16 bits allowed
for a width in a metrixedit column. Truncate to 32767 in that case. Still
can't scroll over the whole thing, but editing it will pop up a better view
which will allow it all to be displayed.
<LI>
If there are no slots in the current encoding, then clicking on the encoding
menu caused a crash.
<LI>
Give the user control over the code pages/unicode ranges fields of the OS/2
table. Add python scripting commands to access them too.
<LI>
When the user renames a glyph then things dependant on it should change
too.<BR>
So if any substitution (or pairwise positioning) refers to the old name,
change it to refer to the new.<BR>
If any contextual change refers to the old name change to the new.<BR>
If any class of glyphs (kerning class, apple state machine, contextual by
classes) refers to the old name change to the new.
<P>
More debateable: if we change "f" to "u0066" then change "f.sc" to "u0066.sc"
and "f_f_l" to "u0066_u0066_l" (and recurse on those name changes).
<LI>
Guess at the meaning for GDEF glyph class component glyph:
<UL>
<LI>
Something not encoded
<LI>
Something which is refered to by at least one other glyph (as a reference)
<LI>
Something which is not generated by GSUB
</UL>
<LI>
Further improvements to the auto instructor.
<LI>
Make the [Guess] button in FontInfo->Private active when BlueScale is
selected. (and make it work too).
<LI>
Oops. A font member in python was mis-named. Documented to be "loadState"
was "loadStyle". Corrected to match the documentation.
<LI>
Some of the 'maxp' checks in the validator were off by 1, so fontlint would
report errors on the glyph with the maximum value.
<LI>
Validator was checking non-composite glyphs against composite boundries.
<LI>
Barry Schwartz points out that I should validate the PostScript Private
dictionary (Check that entries have the right types, check that BlueValues:
has an even number of elements, is in order, that pairs are separated by
bluefuzz*2+1, not too big for bluescale etc.).
<LI>
FF would crash when building accented glyphs from unicode data that included
a space as the base glyph.
<LI>
Torsten Bronger points out that "import" is a python keyword and can't (easily)
be used as a member/method name. So change the glyph.import function to
importOutlines.
<LI>
Patch by Mathias Kilian OpenBSD needs an include file linux doesn't (or rather
that linux imports in another include file) declaration statement mixup.
<LI>
Patch by Michal Nowakowski to disambiguate some strings and to make sure
some others get translated.
</UL>
<LI>
17-Sept-2007
<UL>
<LI>
Patch from Daniel Johnson. FF didn't compile --with-regular-link
<LI>
And FF didn't compile if it had libpng but not libjpeg
<LI>
Added some warning messages when doing AutoInstr so that if a font does not
contain a private dictionary, or if none of the selected glyphs contain hints,
then let the user know s/he isn't going to get very useful instructions.
</UL>
<LI>
15-Sept-2007
<UL>
<LI>
Added the ability to upload a font to the
<A HREF="http://www.openfontlibrary.org/">open font library</A>. (You need
to have created an account with them first).
<LI>
Further improvements to the auto instructor.
<LI>
When all glyphs are selected and the user auto-instructs, then FontForge
will clear any legacy tables ('fpgm', 'prep' and 'cvt '). The old values
will be of no use, and they just get in the way.
<LI>
Add a Edit->Select->Select by Script command<BR>
Make the Select by Name take a wildcard (so you could select "*.sc").
<LI>
ApplySubstitutions still had problems. Caused crashes in a font with
instructions.
<LI>
If one used the metrics view to create a kerning lookup then: there would
be no 'kern' feature in the feature list yet, and the display would randomly
lose track of kern pairs and then create new ones. Very confusing.
<LI>
Hmm. In some cases Merge Fonts didn't copy over lookup info.<BR>
Add the ability to merge cross-font kerning pairs (in case the two fonts
being merged have the same glyphs for those which are in both fonts).
<LI>
Provide a mass glyph rename menu item.
<LI>
The [Merge] button in Font Info->Lookups was disabled when two subtables
in the first lookup were selected.
<LI>
If a glyph ended in a suffix (one.superior, etc.), then changes to that glyph
were not reflected in the fontview.
<LI>
Add the ability to Populate a lookup from the selection (in the lookup sub-table
dialogs)<BR>
Do a better job of providing default values for single substitutions &
positions.
<LI>
In the Print/Display dlg, deleting something so that the next line was blank
caused ff to crash.
<LI>
The Encoding->Make From Font menu item should be disabled if the encoding
is not custom.
<LI>
Fixed a system specific crash in the BDF Info window.
<LI>
Major rewrite of tilepath. Now has initial, medial, final & isolated
tiles which it will use depending on the circumstances. No longer uses the
clipboard, but you can draw the tiles in the dlg.
<LI>
In Italic/Oblique fonts (those where the font has an italic angle specified)
make the center in width command correct for the italic angle.
<LI>
Round to Int didn't round anchor points.
<LI>
The Control Point Info window could wander off the bottom of the screen.
I was very carefully calculating its position -- and then not using the result.
<LI>
Inkscape stuffs bitmap images into svg files using the data URI<BR>
data:<mimetype>,<data><BR>
(see IETF standard RFC 2397)
<P>
So, I'll support this now as my only way of handling type3 style svg fonts
with embedded bitmaps.
<P>
The standard points out that URIs are limited to 1024 bytes, but I don't
pay any attention to that restriction, and will stuff arbetrary sized images
into these things.
<LI>
The code that set up python import/export filters did not put an end of list
entry after the last one. Sometimes it would be NULL (correct) and things
would work and sometimes it would be garbage and things would crash.
<LI>
Drat. In the outline glyph view, the Import command didn't set the filter
properly when you changed the import type.
<LI>
Extend fontforge to keep track of errors encountered when loading 'sfnt'
files, and then have fontlint complain about them.
<P>
Also extend fontlint to do validity checking in glyphs against the 'maxp'
table. (This won't matter when editing fonts, as ff will fixup the maxp values
when it generates the font, but there might be some existing fonts with buggy
'maxp' values).
<LI>
Oops. When changing the weight of a glyph and retaining the counter sizes,
fontforge would push two entries onto the undo stack rather than one. (So
the user would have to do Edit->Undo twice to get back to where s/he started
from).
<LI>
Added several new python methods to font.
<UL>
<LI>
find(contour) will search the font for all glyphs containing contour and
return an interator on that set.
<LI>
replaceAll(srch,rpl) Will search for the "srch" contour/layer in the font
and replace it (each time it occurs) with the "rpl" contour/layer.
<LI>
glyphs(type) returns an iterator over all glyphs in the font. If present
type may be "GID" (default if omitted) or "encoding" and it indicates the
order in which the glyphs will be returned.
</UL>
<P>
Added some new members to glyph:
<UL>
<LI>
encoding -- returns the glyph's encoding in the font
<LI>
script -- returns the OpenType tag (a 4 letter string) of the script of this
glyph.
</UL>
</UL>
<LI>
31-August-2007
<UL>
<LI>
New traditional Chinese translation of the UI by Wei-Lun Chao.
<LI>
Updated Vietnamese translation by Clytie Siddall.
<LI>
Removed the old MetaFont command (which didn't work) and replaced it with
a styles menu (incorporating the old Effects menu, and a command to change
weight, to condense/extend, and to oblique. Added python scripting commands
{font,glyph}.{changeWeight,condenseExtend}
<LI>
Lots of new work on the truetype autoinstructor by Alexej and Michal.
<LI>
Add a validation dialog which can be run just before generating a font.
<LI>
Try a different algorithm for approximating splines by line segments (for
drawing them in the outline glyph view and elsewhere). This one should show
symmetry better.
<LI>
Provide the ability to ask freetype to rasterize glyphs without hints in
the Print/Display dlg (even if the glyphs have hints, rasterize them without).
<LI>
Oh dear, rasterizing stroked fonts only worked if multilayer was defined.
<LI>
Try to improve display of stroked fonts.
<LI>
When stroking splines don't let miter joins grow excessively.
<LI>
FF would remove instructions from glyphs that had at least two contours the
first of which started with a control point.
<LI>
Add a short cut for Hide Grid in the metrics view.
<LI>
Python 2.5 initializes itself differently from Python 2.[34]. 2.[34] delay
the init until an import happens, while 2.5 does it at start up. I just assumed
that when I called Py_Initialize that it did so. This led to a crash on 2.[34]
when I tried to use my types before the user had tried to import fontforge.
<LI>
Further improvements to tile path.
<LI>
When moving a control point in a ttf font where one side of the cp was a
real point, I would allow an implicit point on the far side of the real point
to become real.
<LI>
When dragging truetype points around, adjacent implicit points would remain
where they were (and not be implicit any longer).
<LI>
FF would randomly crash after removing a lot of glyphs.
<LI>
The knife tool would not cut a contour if it landed on a point.
<LI>
Trying to add a stylename to the size pane of fontinfo generally caused a
crash.
<LI>
All blank lines in the display dlg had the same line spacing as that of the
first character displayed in the dlg.
<LI>
I don't think feature files where handling classes defined with '-' properly.
<LI>
Read the "lib" structures from UFO/GLIF files into our python persistent
data. (And write our persistent data out if it's a dict).
<LI>
Add the ability to call hooks (python functions) when various fontforge events
take place.
<LI>
Make fontforge's basic types (Point, Contour, and Layer) be picklable so
they can now be saved in an sfd file.
<LI>
Oops. With the inclusion of the library check argument, ff would not compile
if NODYNAMIC were set.
<LI>
FontForge now stores the "userdata" python members into the sfd file as pickled
objects. (FontForge's own types are not currently pickleable).
<LI>
Add the ability to mark a glyph so that just before being saved its references
will be unlinked and we will run remove overlap on it. This means the user
can work with the references (and get the automatic updating they confer)
and still not have a self-intersecting glyph in the output (think Aring,
Ccedilla, Eogonek).
<LI>
Create a fontlint script file.
<LI>
When dumping both apple and opentype bitmap tables if there were a BDF table,
then we'd get garbage for 'bloc'/'bhed'.
<LI>
Add some user interface commands to python, and more importantly, add the
ability to create menu items which will invoke python scripts, and the ability
to add import/export conversion filters (again, python scripts).
<LI>
Counter hints for LCG glyphs came out wrong if autohint had not been applied
first.
<LI>
Counter masks were not read out of sfd files properly.
<LI>
Selecting a counter mask in Glyph Info caused FF to crash.
<LI>
The Execute Script dlg would sometimes complain about invalid scrollbar size
when it got closed.
<LI>
AddAnchorPoint (scripting command) should be prepared to cast real args to
integers.
<LI>
Just as I needed a special "in use" pass of GSUB when reading from a TTC,
so I also need an "in use" pass of the MATH table.
<LI>
All this time and I've mapped "nonmarkingreturn" (GID=2) to Unicode+000C
instead of Unicode+000D. I'm a twit.
</UL>
<LI>
08-August-2007
<UL>
<LI>
Support for MicroSoft's new 'MATH' opentype table.
<A href="math.html">Element->Math Info</A>.
<LI>
Michal Nowakowski and Alexej Kryukov have improved truetype hinting.
<LI>
kerning display is off in a pairwise lookup window if a y position adjustment
were requested.
<LI>
When reverting a compacted font ff thought the font was compacted even when
it was not.
<LI>
Make some effort to retain context in the fontview when changing encodings.
<LI>
ff scripting command CopyReference() was broken.
<LI>
Werner wants little popup windows in show att. Give him some for substitutions.
<LI>
If you examined a kerning pair subtable (either with glyph info or from double
clicking on the subtable in the lookup pane) and then pressed [OK], and then
generated an afm (tfm, old-style kern table, etc.) you would lose all the
kern pairs you examined.
<LI>
Patch by Barry SCHWARTZ to feature file output on 64bit machines.
<LI>
In freetype 2.3.5 the binary layout of the execution context changed.<BR>
This means that if ff is compiled against a 2.3.4 library it can't debug
truetype if linked with a 2.3.5 library (and vice versa).<BR>
So put in checks to see that the library version matches what we expect.
<P>
Also the contents of one of the structures has changed a bit, and a value
that used to live in one field has moved to another (the ppem value moved
from (exc)->size->metrics.x_ppem to
(exc)->size->root.metrics.x_ppem.
<P>
Well, David warned me that this might happen.
<P>
Warn the user (rather than just silently failing) when we have a freetype
version mismatch.
<LI>
Patch from Barry SCHWARTZ. python fontforge.font.addPosSub was expecting
its args inside a redundant tuple.
<LI>
New Vietnamese translation from Clytie.<BR>
Also some spelling corrections in the original messages.
<LI>
Patch by Barry SCHWARTZ to lookup/subtable comparison.
<LI>
If a metricsview was open, then creating a new glyph slot would potentially
screw up memory and sometimes crashed.
<LI>
Edit->Merge (and simplify) still have bugs.
<LI>
Fix two memory leaks in the metrics view (one was huge).
<LI>
If freetype failed to rasterize a glyph, then we would fall back on returning
a bitmap image from our own rasterizer -- even if we asked freetype for a
greymap. this caused problems when routines expected byte data rather than
bit data.
<LI>
If we were given a cff (otf) font, with a bluevalues array which ended in
0 (as [-20 0]) then we would omit the final zero ([-20]).
<LI>
Outputting extension subtables appears to have been broken.
<LI>
The code which was supposed to detect two glyphs with the same set of kerning
pairs and use the same data for them didn't work (forcing us to get an extension
table which also didn't work).
<LI>
Add some more checks against non-BMP characters when drawing text.
<LI>
For first characters in the kern pair dlg, when editing class 0, the [Edit]
button was enabled but did nothing. Should work now.
<LI>
ff could crash if it tried to create a popup image of the <New> line
in the substitution pane of Glyph Info.
<LI>
Horizontal Scrolling in the matrix edit widget sometimes forgot to move the
column labels.
<LI>
Add glyph name completion to lookup subtable dlg and glyph info panes.
<LI>
addKerningClass didn't parse its arguments correctly.
<LI>
Drat. When printing full page glyphs to a pdf file, the glyph was shifted
up by almost the full page and we got a second (and incorrect) title.
<LI>
MS proposes two new feature tags with it's new 'MATH' table.
</UL>
<LI>
23-July-2007
<UL>
<LI>
I have merged (and substantially rewritten) the Print and Display Dialogs.
There is now only one menu item (Print) which (vaguely) the old Display dlg
except that it can now be printed. The text area widget now supports OpenType
features just as the metrics view does. It also supports ligature carets.
<P>
The dialog is no longer modal, however it does not get updated with each
change to the font (that would make moving a point around in the outline
view far too sluggish), instead there is a [Refresh] button the user can
press to force an update.
<LI>
It occurred to me that fontforge's current mechanism for setting ligature
carets requires that there be a ligature substitution is the exact number
of components used to make the glyph. But in indic fonts ligatures are often
made up out of other ligatures (I think) which means that there won't be
enough caret positions.
<P>
So I've added a Ligature Caret count to the Element->Glyph Info dialog
to give the user control over it when necessary.
<LI>
Add minimal support for applying apple state machine lookups in metrics view.
Support is minimal because:
<UL>
<LI>
Apple seems to figure line breaks before doing substitution process but I
do it afterward so I don't know where the line breaks are and I can't enter
either the line start or line end state.
<LI>
When I delete a glyph I delete it. Apple inserts a deleted glyph mark and
then removes that later. State machines can respond to deleted glyphs, but
I can't.
<LI>
I don't try to figure out which feature,settings should be on by default.
So the user must pick them out manually.
</UL>
<LI>
Add popup graphics to the Glyph Info and Lookup subtable dialogs to show
substitutions (that is if there is an entry like 'smcp' a => a.sc then
create a popup window showing the "a" glyph and the "a.sc" so the user can
see what happens.
<LI>
Another futile attempt at an embolden command. Element->Embolden
<LI>
Add shortcuts to the anchor control dlg (Page Up/Page Down) to move to the
next/previous glyph.
<LI>
Michal Nowakowski has improved the truetype autoinstructor. He warns that
it probably still has bugs (as what does not?) so I am leaving the old code
available for now. He says it works best in "a clean (uninstructed) font
with well defined blue zones and stems".
<LI>
If we have a glyph with multiple encodings, and the secondary encodings occur
after the primary ones, then the backmap will probably contain a secondary
encoding, which means that when we go to load the font in we will probably
notice the secondary encoding twice and forget the primary.
<LI>
I used not to distinguish between ligature anchors and normal mark to base
anchors. Unfortunately when I moved to lookups (from features) I had to introduce
that distinction. But I didn't work through all the implications and have
fixed a number of bugs related to that.
<LI>
Barry SCHWARTZ complains that font info says "fontnames must" but that the
cited adobe tech note only says "should". So change "must" to "should".
<LI>
When processing class-based contextual lookups fontforge could not handle
class 0 (the class containing "all glyphs not in another class") add code
to do that.
<LI>
If the user did not select a Gasp Version (note: active selection was needed,
just seeing that it was correct and leaving it didn't work) then [OK] would
leave the font with an invalid version and on some systems caused a crash.
<LI>
View->Insert Glyph After didn't work well on a ligature glyph. It would
insert the glyph after the first component of the ligature, not after the
last -- which would make more sense.
<LI>
Misnamed some private dict entries when loading from otf.
<LI>
Make entry of ghost hints better.
<LI>
Add the ability to determine whether a point is selected or not from python.
<LI>
Add a mechanism so the user can ask fontforge to check for the existance
of optional libraries.
<LI>
Add range checks to some library routines which blindly referenced some BMP
arrays with codepoints outside bmp. Broken by UCS2->UCS4 change.
<LI>
Werner wants GotoChar to be able to switch sub-fonts in a cid keyed font.
This may introduce bugs...
<LI>
Revert glyph still wasn't working.
<LI>
Someone complained that using a negative stroke took a very long time but
produced correct results. Um. Ok. It's easy always to use the absolute value.
<LI>
Oops. The mac uses UCS2 for filenames, so when I moved to UCS4 I should have
changed the mac resource file interface.
<LI>
When creating a mac resource file we only set the type/creator fields and
failed to initialize the finderFlags.
<LI>
Fixed crash bug in generating a cursive connection anchor sub-table.
<LI>
In TrueType composite glyphs with the USE_MY_METRICS bit set the lock icon
wasn't scrolled properly.
<LI>
The change from UCS2 to UCS4 broke text copy/paste.<BR>
We failed to add a terminating NUL of the right size in all cases<BR>
We continued to use charset=UCS-2 when it should have been UCS-4
<LI>
FF crashed when trying to View->Show ATT on a font that appears to me
to contain an invalid 'kern' sub-table. I have removed the proximate cause
of the crash. I have provided a warning that the kern table appears invalid.
And I have cleaned up my internals after detecting the bad sub-table (I had
a lookup with a feature but no script and this caused problems).
<LI>
Multiple substitutions in the metrics view did not properly update the count
of glyphs to be displayed.
<LI>
If nothing changed in the metrics input field and the output contained a
ligature (or a mult subs I suspect). FF would complain.
<LI>
in python, font.generate() didn't work. The PyArg_ParseTupleAndKeywords behaves
in a way I did not expect.
<LI>
[Bottom] and [Down] still didn't work for lookup subtables.
<LI>
Try to force the text field in the metricsview to a fixed size. In some fonts
it seems to be initialized to a huge value.
<LI>
Add ability to display italic side bearings in the char view.
<LI>
The lines drawn for italic fonts to show the italic origin and width were
at slightly the wrong angle (I used a sine when I should have used a tangent).
<LI>
If a font did not have any horizontal metrics then ff would not set the em-size.
<LI>
Show Att trampled on memory when displaying apple contextual substitution
state machines.
<LI>
Wasn't parsing apple's 'lcar' table properly.
<LI>
if a font contained a 'post' table but didn't name all names (or something
like that), then the attempt to name the glyph based on the encoding was
broken after the encoding change.
<LI>
FF did not recognize that a bdf file was greymaped. Broken by the bdf properties
work a year ago or so.
<LI>
The import lookups button in fontinfo forgot about the subtables (sort of).
<LI>
The metricsview used the wrong count field to determine whether things changed.
It used the glyph count, not the char count (which meant that when we had
a ligature and the number of chars was greater than the number of glyphs,
things got confused.)
<LI>
In the metrics view, anchored attachments only worked if the base glyph were
itself unmoved (that is the mark was placed relative to the unmoved location,
not the actual location).
<LI>
The search dialog should provide user with control over the error bound.<BR>
The rotate checkbox didn't work if the flip checkbox wasn't checked.
<LI>
If a replace contour added a control point to a point that did not have one
(went from a line to a curve) then that control point would get lost.<BR>
If a search matched across the start point of a contour then search/replace
could go into an infinite loop if the search and replace paths were the same.
<LI>
Find/Replace (replace) didn't work on quadratic splines.
<LI>
Add two python methods:
<UL>
<LI>
Layer.interpolateNewLayer(other-layer,amount)
<LI>
Font.createInterpolatedGlyph(glyph1,glyph2,amount)
</UL>
<P>
The first creates a new layer by interpolating between the current layer
and the layer in the first argument.<BR>
The second creates a new glyph in the font by interpolating between the first
two arguments. The glyph's unicodecode point and name will be copied from
the first argument (the font must not already contain this glyph).<BR>
If amount is 0 the result will look like the first glyph, if 1 then like
the second.
<LI>
When recovering from a crash, FF would sometimes complain about a mismatched
version number. Don't.
<LI>
Problems parsing 'mort' tables could cause a crash.
<LI>
When building a contextual lookup, don't list that lookup as something that
it could invoke (ie. list all lookups in this table (GPOS/GSUB) except for
ourselves). Don't want to encourage users to create infinite lookup loops.
<LI>
Point matching didn't work when there were references to references and multiple
references within a glyph.
<LI>
FF was having problems with extension lookups with multiple sub tables.
<LI>
We were trying to print a trailing NUL in some strings from the fontview.
<LI>
Kerning by classes got broken in metricsview by the addition of support for
device tables.
<LI>
A GPOS contextual lookup only listed GSUB lookups in the lookup/sequence
dlg<BR>
Pressing [OK] in the lookup/sequence dlg caused a crash if no lookup selected.
<LI>
Openfontdlg was looking at the filter listbutton rather than the rename namelist
listbutton.
<LI>
mf2pt1 now uses "glyph_dimensions" rather than "bbox"
<LI>
The metrics view should now handle device tables.
<LI>
Goto could crash when used on small encodings.
<LI>
-lang wasn't permitted before -c.
<LI>
Use numeric text fields for anchor positioning.
<LI>
Graham Asher points out that the meanings of underline position in the 'post'
table and the FontInfo dictionary are different. One refers to the top of
the underline rectangle and one to the center of it.
<LI>
Align point would crash if the selected point were the end point of a contour
(or if the two points around it were in the same place).
<LI>
The baseline was not properly located when displaying it in the fontview.
<LI>
The scripting command BitmapsAvail would generally cause FF to crash if done
when there was a UI..
<LI>
We seem to be misimplementing my obsolete (sfd file) convention for having
duplicate encodings point to the same glyph. Result was that occasionally
a glyph would be removed and a pointer to something it refered to would be
put in its place.
<LI>
Change the name of activeFontInUI to activeFont<BR>
Add an activeGlyph method.<BR>
Add the ability to call a python script from a outline view.
<LI>
Hmmm. If a textfield is shifted right, and then resized so there's now room
for all the text, the unshift it.
<LI>
Werner suggests that it would be useful to be able to specify wildcards in
the goto dlg.
<LI>
Michael Zedler tells me that glyphs output by mf2pt1 contain a line:
<PRE> % MF2PT1: bbox 0 90 834 422
</PRE>
<P>
where the third (so called) bounding box entry is actually the glyph's advance
width. I was reluctant to use this at first, because that clearly isn't something
that belongs in a bounding box...
<LI>
Werner tells me that lilypond uses a slightly different syntax for the MF2PT1
bbox comment, so make our parsing slightly more generous.
<LI>
When creating a new lookup subtable for an anchored lookup, it did not get
marked as having anchor classes and feature file output failed because of
that.
<LI>
When outputing single lookups, the feature, script and language tags all
had ^A where they should have had the second letter of the tag.
<LI>
Remove the code to produce the old, broken, 'size' feature.
</UL>
<LI>
07-June-2007
<UL>
<LI>
Add support for Adobe's feature file syntax.<BR>
Use Merge Kern (now Merge Feature) to read one<BR>
Use Element->Font Info->Lookups->popup menu->Save to generate
one
<P>
Sigh. Adobe documents a feature file syntax they don't fully support, and
even their documented syntax is inadequate to represent all the complexities
of OpenType.
<P>
FontForge supports anchors and device tables and will parse lookups which
contain these. This is a syntax which Adobe documents but does not implement.
Adobe also warns that this syntax may change when they get around to implementing
it.
<P>
FontForge makes one extension to the syntax which allows me to specify complex
contextual features.
<P>
Neither I nor Adobe support reverse contextual substitutions, nor GDEF mark
classes.
<LI>
Add a popup menu to the lookups pane of font info.
<LI>
Change the name of <CODE>File->Merge Kern Info </CODE>to
<CODE>File->Merge Feature Info</CODE>
<LI>
Remove the code to produce the old, broken, 'size' feature.
<LI>
An earlier patch, designed to make the tabset work in the charview even if
the user changed the name, didn't work.
<LI>
Bug in the selection iterator.<BR>
Also Max Rabkin points out the docs say the iterator returns selected glyphs
rather than encoding slots. Fix the docs, then add a member (.byGlyphs) which
will make the iterator return glyphs.
<LI>
Accept contour += (1,2) rather than forcing people to say contour +=
fontforge.point(1,2)
<LI>
Was using an error return from two setter functions (contour.set_closed,
set_is_quadratic) when I should have returned success.
<LI>
Crash when mistyping a glyph name in Glyph Info possub panes. Probably in
the equivalent lookup dlgs too.
<LI>
If a glyph contained two copies of another glyph, and one of those copies
was off by enough that ff didn't recognize it, the depending on how the contours
were ordered, ff might fail to recognize the first glyph too, even though
it did match.
<LI>
Add iterators to contours and layers. Python users seem to expect them even
when they aren't documented to exist.
<LI>
layer += contour didn't work in python. I was examining a bit through the
wrong data type.
<LI>
Provide a mechanism for copying lookup information from one glyph to another.
(<CODE>Edit->Copy Lookup Data</CODE>)
<LI>
Loading kerning info from a mac 'FOND' resource was broken by the lookup
change.
<LI>
Python scripting command font.createChar didn't. Partial patch from Max Rabkin.
<LI>
Adding a kerning pair from the metrics view would often add two or three
pairs with the same character combination and different values.
<LI>
Another remove overlap bug. Introduced recently.
<LI>
Reinstate Apply Substitutions scripting command.
<LI>
Add some dutch styles.
<LI>
Make yet another attempt to correct for rounding errors when loading a postscript
font.
<LI>
Add a way to get a font's filename to python.
<LI>
Werner points out that in scripting I use "break" in an example. It isn't
documented to work and I don't implement it but I do show it. Oops. Ok, make
it work.
<LI>
Display substitutions was broken.
<LI>
When generating default names for subtables, it is confusing to name them
the same as the lookup.
<LI>
Change to using USC4 from UCS2 internally.
<LI>
Provide default names for lookups once the user sets the feature.
<LI>
Disambiguate some strings for the polish translation
<LI>
Revert glyph should not work for old sfd files.
</UL>
<LI>
11-May-2007
<UL>
<LI>
Loading some afm files would go into an infinite loop. (Introduced 9-May)
<LI>
[Import] button on Font Info->Lookups crashed.
<LI>
Fix a number of problems related to anchor classes.
<LI>
After the user does an [Add Lookup] we should select the new lookup, to make
it easier for him/her to do an [Add Subtable].
</UL>
<LI>
9-May-2007
<UL>
<LI>
When ff parsed an afm file it only read the first ligature on a line.
<LI>
The [Call...] button in the scripting dialog is meaningless for python scripts
(or I don't know how to give it meaning) so disable it.
<LI>
Vertical scrolling in the metrics view tried to scroll the list of features
too.
<LI>
Tab, and arrow keys didn't work in the matrixedit widget after I added hidden
columns. Make Return do the expected thing (move to start of next line and
create it if possible).
<LI>
Patch by Pierre to fix uninitialized value when compacting encodings.
<LI>
Typo in realloc of lookups meant that nothing happened (when it should have
increased array size by 1).
<LI>
Add the OFL icon to the fontinfo dlg.
<LI>
Plugins were broken with regular link configure option.
<LI>
Inkscape can start X on the mac before it tries to connect. Hmm. I can do
that too. Inkscape manages to start X without an xterm. I don't know how
to do that.
<LI>
When reading PS and CharStrings, the closepath operator didn't allow for
rounding errors.
<LI>
Metrics View would crash if more than 20 glyphs entered.
<LI>
Alexej Kryukov points out that it would be nice if moving an anchor point
did not set "changed since last hinted.
<LI>
Alexej Kryukov points out that the "changed since last hinted" flag gets
set inappropriately.
<LI>
Alexej Kryukov points out that the Anchor control menu item looked as though
it had changed, but actually had not.
</UL>
<LI>
1-May-2007
<UL>
<LI>
I've redone the way FontForge handles lookups so that it is more in keeping
with OpenType.
<BLOCKQUOTE>
The major change is that fontforge now presents lookups to the user rather
than features. I think this makes simple things more difficult (which is
why I avoided this when I started), but it makes complex things possible.
<P>
Sadly the world is not simple.
<P>
So when a piece of typographic information is created (a ligature, a kern
pair, a glyph substitution, etc.) it must be tagged with a lookup (actually
a lookup sub-table) rather than a feature tag.
<P>
The lookup itself will be tagged with a feature tag (possibly several tags)
and with scripts and languages in which that lookup should be active.<BR>
<STRONG>NOTE:</STRONG> This reverses the way GPOS/GSUB think about things,
but it contains the same information.
<P>
The <A href="fontinfo.html#Lookups">Font Info</A> dialog now contains a Lookup
pane which allows you to create and edit lookups and their subtables. You
can also reorder them. The order shown in the dialog is the order in which
they will be applied.
<P>
A mac feature/setting subtable also gets converted into this format.
<P>
The Font Info dialog no longer has Anchor Classes, Contextual, or State Machine
panes.
<P>
Instead you can edit a lookup subtable's data (for any subtable type). There
are new dialogs which list all the information for each lookup type (ie.
a dialog which lists all kern pairs in a subtable), and these provide access
to the old anchor class, contextual or state machine dialogs.
<P>
The Glyph Info command has also changed. It looks simpler and more comprehensible
(I think), but the act of creating a new substitution has become more complex
because (potentially) one must create a new lookup and lookup subtable before
doing the simple task of adding a new replacement glyph.
<P>
The kerning class, contextual and state machine dialogs have all changed
in that they no longer request a feature tag, they now need a lookup subtable.
<P>
The metrics view also needs a subtable.<BR>
The metrics view has changed considerably.<BR>
It displays all the features in the font, and allows you to select which
ones you want active in the view. It lets you set the script & language.
It will apply lookups that it couldn't handle previously like ligatures and
contextuals.
<P>
It does not do Indic glyph reordering. I'm not sure how to and last I checked
MS had not updated their docs to reflect their new procedures.
<P>
Many other dialogs now take a lookup subtable where appropriate.
<P>
Show ATT has changed, but it is still not editable. I hope that the Lookups
pane will do that instead.
<P>
There used to be a scripting command which indicated what ligature features
got stored in afm files. Now each ligature lookup has a flag set on it which
conveys this information.
<P>
The Element->Typographic Features menu has been removed. It's functionality
has moved into Font Info->Lookups (I hope I've got everything).
<P>
Some scripting commands have been removed, others have been changed and others
have been added. I apologize for this, as it will break existing scripts,
but some basic concepts no longer exist and others, very different, have
replaced them. (and anyway people may switch to <A href="python.html">python
scripting</A> now).
<DL>
<DT>
Removed:
<DD>
<PRE> DefaultATT
ControlAfmLigatureOutput
ApplySubstitutions
CopyGlyphFeatures
AddATT Replaced with AddPosSub
RemoveATT
GlyphInfo(Position/Pair/Substitution/AltSubs/MultSubs/Ligature)
SelectByATT Replaced with SelectByPosSub
</PRE>
<DT>
Changed
<DD>
<PRE> Set(V)Kern takes an optional third argument, a lookup subtable
name (if not specified it choses one)
AddAnchorClass(name,type,lookup-subtable-name)
GetPosSub(subtable-name)
AutoKern(spacing,threshold,subtable-name[,kernfile])
</PRE>
<DT>
Added
<PRE> AddLookup(name,type,flags,feature-script-lang-array[,after-lookup-name])
n*[feature-tag,script-lang-array]
n*[script-tag,lang-array]
n*[lang]
GetLookupInfo(lookup-name) =>
[type,flags,feature-script-lang-array]
AddLookupSubtable(lookup-name,subtable-name[,after-subtable-name])
GetLookupOfSubtable(subtable-name)
GetSubtableOfAnchorClass(anchor-class-name)
AddPosSub(subtable-name,variant(s))
(subtable-name,dx,dy,dadv_x,dadv_y)
(subtable-name,other-glyph-name,dx,dy...)
RemoveLookupSubtable(subtable-name)
RemoveLookup(lookup-name)
MergeLookupSubtables(subtable-name1,subtable-name2)
MergeLookups(lookup-name1,lookup-name2)
SelectByPosSub(subtable-name,search_type)
GetLookups("GPOS"/"GSUB")
GetLookupSubtables(lookup-name)
LookupStoreLigatureInAfm(lookup-name,store-it)
LookupSetFeatureList(lookup-name,feature-script-lang-array)
</PRE>
</DL>
<P>
The <A href="sfdformat.html">sfd format</A> has changed. New files are tagged
as version 2. Old files will still work, but ff will no longer produce file
in the old format.
</BLOCKQUOTE>
<LI>
New translations to match the new UI: Polish, Greek, German, French, simplified
Chinese.
<LI>
FontForge now supports <A href="python.html">python scripting</A> if it has
been configured to do so.
<LI>
Tell users they should add their email address to the License after pressing
the [Add SIL Open Font License] button.
<LI>
The metrics view had numerous problems. Most significant if a glyph changed
elsewhere the metrics view would not be updated.
<LI>
If the width of a glyph changed in the metrics view then that was not
synchronized to dependent glyphs.
<LI>
Enforce the "Use My Metrics" bit of a reference.<BR>
In TrueType, if this bit is set on a reference then then width of the containing
glyph will be the same as that of the reference.<BR>
So don't let the user change the width of such glyphs. (and add a lock icon
to the width line in the character view to show that it is fixed).
<LI>
Fix a number of Remove Overlap bugs.
<LI>
FF would destroy memory in the metrics view if the user attempted to display
a character which was not in the font.
<LI>
Was setting the last char index (of OS/2) incorrectly if the font contained
non-BMP characters. Might also have set the first char index wrong two.
<LI>
Bugs in 'PfEd' table, glyph comment subtable.
<LI>
Couple of places where I actually say "FontForge 1.0". Let's bump that to
2.0 now that I've done that for the sfd format.
<LI>
Overlap problems with incorrect path orientations.
<LI>
Arrow keys didn't work in the charview if the tabset were active.
<LI>
I used to use "><" on the font's window title to represent a compacted
font. No one understood it. Use "Compacted" instead.
<LI>
Philipp Poll wants to see the side bearings (I think) in the charview.
<LI>
Nicolas Spalinger of SIL suggests a help button next to [Add OFL] to open
a browser on the official OFL site.
<LI>
Patch from Nicolas Spalinger of SIL regarding the verbiage surrounding the
OFL in the fontinfo. Also his suggestion to make the tooltip live longer.
<LI>
Replace with Reference didn't check reference offsets correctly.
<LI>
Find problems didn't find references which intersected.
<LI>
Add some standard classes to the context chaining dlg.
<LI>
Make sure we only generate a postscript name in the name table once.
<LI>
The change length button of the cvt dlg didn't work.
<LI>
Input/Output of Apple's 'lcar' table was inconsistent. I don't know if it
is "right" now, but at least ff can read back what it wrote.
<LI>
Werner points out that the debug windows show up at odd places if the window
gets resized.
</UL>
<LI>
12-Mar-2007
<UL>
<LI>
Add a button to insert the <A HREF="http://scripts.sil.org/ofl/">SIL Open
Font License</A> into the 'name' table.
<LI>
FF failed to store TeX heights and depths properly in a tfm file. FF failed
to read or write TeX extension lists properly.
<LI>
Patch from Reuben Thomas to turn off the splash screen from the preference
dlg.
<LI>
I had the dotlessj code point wrong. Again.
<LI>
FF did not center the charview window well on an empty glyph.
<LI>
The scripting command to add instructions to a glyph could immediately lose
them if the glyph's points weren't numbered properly
<LI>
We used to allow the syntax "<number><numbers>* command" in ttf
instructions (which automagically inserted an implied push). Someone noticed
that
<BLOCKQUOTE>
<PRE>PUSHB_1
1
2
</PRE>
</BLOCKQUOTE>
<P>
would lose the second number and not complain. In fixing that, I broke the
first. Now both should work (I hope).
<LI>
Code which I hope will handle German keyboards and make them do what the
menu says they (ignoring the shift key) should for certain hot keys (brackets,
curly brackets, brokets all get different modifier sequences on a german
keyboard than an english).
<LI>
If a glyph had no hints then ff could add a hintmask operator (which didn't
try to control any hints). Now I can't find anything in the docs which SAYS
it's illegal to have a hintmask in a glyph with no fonts, it does seem bad
practice, and a program called tx.exe complained about it.
<LI>
Patch by Michal Nowakowski to allow a nicer notation for delta instructions
in the instruction editing window: Example:<BR>
<TT>PUSHB_3 6@12 8 1 DELTAP2 </TT><BR>
This moves point 8 by six delta-steps (that's clear) at 37 ppem (that's not
clear at first glance - assuming delta_base is 9, DELTAP2 works from 25 ppem
to 25+15 ppem, in this example it's 25+12 ppem). So it's just a way of
constructing an argument byte for DELTAP/C.
<LI>
Allow FontForge's menu shortcuts (hot keys, whatever) to be user definable.
We use a gettext based mechanism, type $ make FontForge-MenuShortCuts.pot
to get a pot file for the process. It needs to be converted to an mo file
and installed in $(prefix)/share/locale/$(LANG)/LC_MESSAGES, just like any
other getext file.
<LI>
The Export scripting command did not work as documented. It is documented
to export all <EM>selected</EM> glyphs. Instead it exported <EM>all</EM>
glyphs.
<LI>
Redo the anchor control dlg.
<LI>
Be a little more lenient about bitmap bounding boxes for empty glyphs when
loading bdf fonts
<LI>
Make the ClearHints scripting command take arguments: "Horizontal" or "Vertical"
to allow users to choose to clear either horizontal or vertical hints (the
old form with no args still works and clears both, of course).
<LI>
Typo gives us an unititialized variable when saving ufo.
<LI>
Various problems to various anchor dialogs.
<LI>
If an anchor point contained an x devtab but not a y devtab then it produced
a pointer to garbage for the y devtab instead of NUL.
<P>
Pairwise positioning lookups could also get their device table offsets screwed
up.
<LI>
Werner points out that if you have a series of the same glyph in a row in
the encoding (generally .notdef) and you are in a char view, then pressing
Next Glyph does nothing. You are stuck at the same code point. (same thing
happens for Prev Glyph).
<LI>
a chinese input method steals keystrokes I use for hot keys (I think). So
if users don't want glyph navigation by typing characters in the charview
(controled by a preference item) then don't turn on the input method when
the window is created.
<LI>
Add hot key for Select->Points on selected contours.
<LI>
Assign "dotlessj" to map to 0x237, the unicode code point, rather than to
0xf6be, the old Adobe private use area. !!!! THIS DOES NOT CONFORM TO THE
AGL !!!!!
<LI>
Oops. The gloss for the shift point/contour/zone was slightly off and gave
the wrong information.
<LI>
Add vietnamese font styles (bold, italic, regular, etc.)<BR>
From Clytie Siddall.
<LI>
Fixes for rounding errors in finding spline intersections.
<LI>
Werner points out that removing a bitmap glyph from the bitmapview does not
force a redisplay in the fontview.
<LI>
Gleep. Werner points out that when generating bitmap strikes, ff would always
generate a temporary postscript font to rasterize, so any truetype instructions
would be ignored. And the generated strikes would be ugly.
<LI>
Add a command to show anchor point attachments within the outline character
view<BR>
(View->Combinations->Anchor Glyph at Point)
<LI>
Force point numbers to be correct when changing glyphs in the charview.
<LI>
Add support for Apple/Adobe's obsolete 'typ1' sfnt. A way of stuffing a type1
font into an sfnt wrapper.
<LI>
Even though the viewbox/output width height ratios are different, people
want the image scaled the same in svg input.
<LI>
People would like to have only one charview and double clicking in the fontview
just changes the contents of an existing window.<BR>
Preference Item: OpenCharsInNewWindow
<LI>
Add a tabs line to the outline char window. If users are going to have only
one charview open then they probably want some history too.
<LI>
Werner points out that what I call "Type42 CID" should actually be called
either "Type11" or "CID Type 2".
</UL>
<LI>
20-Dec-2006
<UL>
<LI>
Patch by Johan Winge fixing a bug in dragging out a magnification rectangle
<LI>
Patch from SUSE fixing a variable which can be uninitialized.
</UL>
<LI>
19-Dec-2006
<UL>
<LI>
I have received many complaints about the grey background, so I have tried
various other backgrounds -- and gotten complaints on all of them. Currently
try using a white background by default and add a
<A HREF="faq.html#background">discussion in the FAQ</A> about changing it.
<LI>
Add support for Unified Font Objects (a directory holding many Glyph Interchange
Format files). People at the Open Font Library seem to think this is useful.
Also support for importing/exporting glyphs in glif.
<LI>
People asked me to implement the UFO/GLIF format in part because each glyph
is stored in a separate file giving finer granularity to version control.
I worry about using UFO/GLIF because it is not documented to store all the
information needed to regenerate a font (being mainly concerned with glyph
outlines). So I've implemented a directory based version of the sfd format
which I hope will provide the one glyph per file format people say they want.
<LI>
MS has extended the 'gasp' table to give users control over clear type. Version
number has changed too. FF now supports the new bits.
<LI>
MS has also added a cleartype bit to the head table.
<LI>
Hmm. I wasn't setting the apple specific bits of the head table properly.
<LI>
Allow the user to create an empty bitmap strike.
<LI>
Add the ability to remove bitmap glyphs from a strike.
<LI>
Fix a couple of memory leaks.
<LI>
The docs don't mention this, but... mangal.ttf has a NULL offset for the
lookahead class definition, so if that happens -- no classes.
<LI>
Werner doesn't like that I always add dummy bitmaps for .notdef, .null &
nonmarkingreturn. It seemed logical to me that if I were prepared to add
those glyphs to the outline font I should be prepared to add them to the
bitmap strike. But Werner (I think) sees bitmap strikes as containing exceptional
glyphs which need special handling, whereas I just saw them as complete fonts.
So in this context I guess there is no need to add these glyphs. As a compromise
I have decided that I will add the glyphs to the bitmap strike if I added
the glyphs to the outline font.
<LI>
Add scripting functions:
<UL>
<LI>
SelectMoreIf
<LI>
SelectMoreSingletonsIf
<LI>
SelectSingletonsIf
</UL>
<LI>
The changed flag wasn't being set in Remove ATT.
<LI>
GetPosSub scripting command trashed memory.
<LI>
Make default char of OS/2 be space for otf and .notdef for ttf. This is a
guess at what should be done.
<LI>
FF was still setting firstcharindex in OS/2 incorrectly. The problem is that
glyph 1 (or 2?) has encoding 0 in the mac cmap table while it is not referenced
at all in the windows cmap.
<LI>
Wasn't setting os2_typelinegap field when reading an sfnt.
<LI>
In a font without any LCG characters, fontforge set the OS/2 capheight and
xheight fields to -1e10. It should have been 0. Patch by Roozbeh Pournader.
<LI>
Patch by Roozbeh Pournader. Regular bit in fsSel in OS/2 was being set when
it should not have been.
<LI>
Werner suggests that when looking at a bitmap strike, nextdef and prevdef
look at the next glyph defined in the strike rather than the font as a whole.
Useful for sparse bitmaps
<LI>
Werner wants to be able to set bitmap magnification in the font view.
<LI>
The "Recalculate Bitmaps" button in the bitmap view should adjust its positioning
as the window is resized (and be sensitive to other languages which might
have different button widths).
<LI>
there was an uninitialized variable used in parsing contextual by coverage
table.
<LI>
Werner points out that when double clicking on a bitmap glyph in the font
view, the glyph is created / rasterized without using freetype.
<LI>
Sigh. Ok. make the size of the label font in the fontview configurable.
<PRE>fontforge.FontView.FontSize: 24
</PRE>
<LI>
Werner finds "Original" confusing for an encoding and suggests "Glyph Order"
instead.
<LI>
MS has revealed the meaning of a few new GETINFO bits. Put them in the Gloss
window.
<LI>
Set/Select aren't very informative in class definition windows, change to
"Set from font"/"Select in Font"
<LI>
Improve the way glyphs are centered in the outline char view. At least I
hope it's an improvement.
<LI>
Oh. It is perfectly legal to have a context chain rule with no substitutions.
This can be used to avoid matches in complex cases so:
<PRE>[a-z] a b => does nothing
a b [a-z] => does nothing
a b => substitutes
</PRE>
<P>
will only substitute of "ab" is a word all to itself.
<LI>
If the metrics view were displaying text containing non UNICODE characters
then some edits in the text field which displays glyphs would leave us with
the replacement character showing instead.
<LI>
Werner wants to know whether storage locations are uninitialized or not,
and to get warnings when reading an uninit value.
<LI>
Werner wants to see IF statements indented in truetype instruction display.
<LI>
FF wasn't telling freetype to set the mono bit when loading a glyph, which
meant that GETINFO would return the wrong value for mono rasterization.
<LI>
If there are too many numbers after an NPUSH[BW] instruction, FF silently
ignores them.
<LI>
Anti-Aliased rasters still weren't aligned properly with the outlines in
the debug window.
<LI>
When debugging I provided popup information for anti-aliased rasters. But
I didn't for mono rasters.
<LI>
ff would crash when asked to debug fpgm/prep (because my rasterization routine
didn't work if there were no contours).
<LI>
Werner wants to turn off auto goto in the charview when debugging is going
on.
<LI>
The gloss information for delta point (and cvt) was wrong if the magnitude
selector was 7. I claimed it moved (changed) by 0, when it should have been
by -1.
<LI>
Werner wants to be able to set memory watch points on storage and cvt locations.
Set these through the cvt/storage windows by clicking on the appropriate
locations. Modify the points window so the user can set watch points by clicking
on it too.
<LI>
The Points window would sometimes scroll in unexpected ways.
<LI>
Werner wants to see the raw value of a "WS" instruction in the gloss.
<LI>
merge fonts would get the script lang index of merged kern pairs wrong.
<LI>
Correct some of icc's warnings
<LI>
Apostolos points out that NAME_MAX isn't defined on solaris, but _POSIX_NAME_MAX
is. But _POSIX_NAME_MAX doesn't seem to be defined on linux.
<LI>
Display fonts would crash if you tried to change the font. But introduced
in last release.
<LI>
Patch from Mike FABIAN. Rasterizing by freetype only initialized a variable
if CONFIG_TYPE3 (multilayer) was set.
<LI>
StrSplit & StrJoin scripting functions.
<LI>
Patch by Rüdiger Oertel. Strncat could overflow a buffer.
<LI>
Make simplify do point catagorization, and not just of points changed.
<LI>
Curved stems are also limited by geometry. Can't just assume control points
work.
<LI>
Why are pdf files listed as a source of bitmap fonts?
<LI>
When examining a bitmap font, metrics view would crash when asked to look
at a non-existant glyph.
<LI>
The list of verbs for indic glyph rearrangement didn't display.
<LI>
Converting from the mac korean encoding didn't work.
<LI>
Images imported into a bdf character did not set the character used bit.
<LI>
Add a CopyAnchors command.
<LI>
Patch from Raph Levien. FF mishandled seac if the accent were not translated.
</UL>
<LI>
26-Oct-2006
<UL>
<LI>
If a large group of glyphs were autohinted at once, and one of those glyphs
contained a reference to a glyph that appeared after it in the font, then
that glyph would still end up with the dirty hint mark set.
<LI>
It was impossible to set preferences on the Accents pane. They would either
always be 0 (or false), or make spurious complaints.
<LI>
Add a Ucs4 scripting command (reverses Utf8).
<LI>
when creating an array with [...] notation (in scripting) I forgot to dereference
lvalues.
<LI>
Add scripting commands
<UL>
<LI>
Revert
<LI>
RevertToBackup
</UL>
<P>
Make the "+" operator concatenate arrays
<PRE>
[1,2] + [3,4] == [1,2,3,4]
[1,2] + 3 == [1,2,3]
</PRE>
<LI>
Add a scripting command, FontImage, which generates a font thumbnail.
<LI>
Make it possible to save the Font Display dlg as an image.
<LI>
Clean up the Display dialog a bit. The concept of "unhinted" truetype is
obsolete. Remove it.
<LI>
At Andrey V. Panov's request I have added a scripting command "CopyUnlinked"
which behaves like Copy except that any references will be unlinked (turned
into splines) as they are placed in the clipboard.
<LI>
I believe OpenType would prefer if formed arabic glyphs didn't use their
unicode encodings, but used simple substitutions instead. Accept both for
svg output (previously we only accepted unicode encodings).
<LI>
Patch from debian (bug392688) from Wojciech Mu*a and K*stutis Bili*nas
</UL>
<LI>
19-Oct-2006
<UL>
<LI>
Patch from Mike FABIAN, array overflow in creating PS Private dialog
<LI>
The instructions out of date flag was only getting reset if the user made
a change in the edit instrs dialog. If s/he just pressed [OK] it would remain
on.
<LI>
Make libintl be another library we'll try to dlopen. This is complicated
because on linux libintl is part of libc so there we must link directly.
Further complicated because fink install script has a bug and doesn't put
/sw/lib in DYLD_LIBRARY_PATH so we have to look there ourselves.
<LI>
Locale strings aren't required to contain an encoding (which the locale docs
incorrectly call a charset). Michal Nowakowski points me to nl_langinfo which
will give me the encoding even if not specified in the locale.
<LI>
Add pdf files to the standard format list for openfontdlg
</UL>
<LI>
14-Oct-2006
<UL>
<LI>
New translations: Greek, Simplified Chinese, German, Polish.
<LI>
Using the help command would generally crash fontforge on cygwin.
<LI>
Adobe uses the American spelling of diaeresis (that is dieresis), but some
fonts contain glyph names with the European spelling. So add that as an
alternate.
<LI>
If a bdf font contained an unencoded .notdef glyph, then we crashed.
<LI>
Adding Greek translations for font styles. (Thanks to Apostolos)
<LI>
If we aren't dealing with a TeX math font, then the "Sub/super"script positioning
fields of Glyph Info->TeX aren't meaningful. So grey them out.
<LI>
Remove internal/external did the wrong thing in expand stroke if we also
removed overlap and had counter-clockwise splines.
<LI>
Alexej Kryukov points out that reverting a glyph with anchors lost the anchors.
<LI>
Add simplified Chinese style names to our built-in lists.
<LI>
Problem reading autotraced input.
<LI>
The encoding change of last summer broke tfm output with glyph lists or extension
characters.
<LI>
If add extrema added a point too close to a start/end point expand stroke
could generate NaNs.
<LI>
FF could crash when adding extrema to an open contour.
<LI>
Add Polish styles to the translation list.
<LI>
Add a scripting function to set the gasp table.
<LI>
Add support for the 'gasp' table.
<LI>
Alexej Kryukov wants format 6 cmap tables.
<LI>
After editing instructions the debugger would incorrectly complain that
instructions were out of date.
<LI>
Michal Nowakowski complains that "Instructions are out of date" warning appears
too many times when doing a global transformation. Make it only pop up as
a dlg once and thereafter occur as a LogError.
<LI>
If a font contained only space glyphs it could still be marked onlybitmaps
and not allow outline generation.
<LI>
Show ATT did not translate scripts & languages.
<LI>
Parsing an empty list of ttf instructions crashed Michael Zedler's machine.
<LI>
Make type1 generation use (essentially) the same subroutine mechanism as
type2.
<LI>
Local subroutines were being freed twice in cff cid-keyed font generation.
<LI>
Removing an alternate unicode encoding (Detach Glyphs) was broken in some
cases.
<LI>
FF failed to perform some simplifications on the last spline of a closed
contour.
<LI>
Various fixes for Michal N.
<LI>
Add scripting interfaces to many of the ctype functions.
<LI>
Add a scripting interface to the 'size' feature, now that Adobe has finally
decided what to do about 'size'.
<LI>
Had the wrong title for kerning state machine dlgs.
<LI>
Redo the preference dlg.
<LI>
The two preference items, AlwaysGenApple, and AlwaysGenOpenType, were a bad
choice on my part and have lead to considerable confusion. I mentioned some
time ago that I would remove them if there were no objection.
<P>
There was no objection.
<P>
I have now removed them.
<P>
I also made the SetPrefs scripting function sort of work if the user tries
to set one of these (it will set the appropriate flags in the default option
set used by generate).
<P>
The defaults of these flags were different on the Mac from everywhere else.
This meant that a script could do different things on the Mac and on linux.
That seems like a bad idea. I have changed things so that the default options
setting for generate is always OpenType.
<P>
<STRONG>THIS IS AN INCOMPATIBLE CHANGE AND SCRIPTS ON THE MAC COULD NOW BEHAVE
DIFFERENTLY.</STRONG>
<LI>
Patch from Michal Nowakowski to have ff number points after conversion to
quadratic.
<LI>
Try to provide disambiguation for all strings "New" so that in languages
where "New" must agree in gender with the thing being created translators
will be happier.
<LI>
Remove the po/Makefile.in and redo the configure script to build it (so that
I don't have to modify it each time I get a new language).
<LI>
Extend the knife tool so that if Meta (Alt) is held down it will move any
spline it intersects (rather than cutting the spline).
<LI>
FF would crash if $HOME (the directory that is, not the environment variable)
did not exist.
<LI>
I guess it makes sense that if ff read in a compressed sfd file then using
a simple File->Save command (not Save As) should produce another compressed
sfd file.
<LI>
When scaling a reference in otf output we had problems if the reference had
more than one contour.
<LI>
If we deleted many glyphs from a font we are sometimes left with kern pairs
pointing to things not worth outputting. Make sure we don't generate kerning
info for them.
<LI>
Ligature carets were not being scaled by scale to em.
<LI>
Patch from mfabian at suse.
<LI>
If a user has a font with a glyph that is bigger than 16*em-size (in many
dimensions) and that user generates a tfm file, then warn him that the glyph
can't be expressed in a tfm file and truncate the size to the biggest legal
value.
<LI>
Attempt to mitigate the effects of X claiming to have a font when it doesn't.
<LI>
Saving CID keyed fonts would look at garbage memory for its encoding data
if not saved from the biggest subfont.
<LI>
Add support for version 4 of the OS/2 table.
<LI>
If Interpretation was set in a font then when generating a 8/16 type cmap
fontforge always went down the traditional chinese (big5) branch.
<LI>
MS has changed their indic shaping engine. It still uses the same features
but they are applied differently. To disambiguate this change they have created
a parallel set of script tags for the indic writing system. FontForge should
recognize these and use them when appropriate.
<LI>
When Adobe first released fonts with a 'size' feature they did not follow
the opentype specification. In August of 2006 they announced an incompatible
change to bring fonts produced after that date in line with the specification.
Unfortunately there are programs which depend on the old, broken format.
<P>
Legacy programs will not work when given a font in the correct format. New
programs should be able to handle either correct or broken 'size' features.
<P>
A few of Adobe's programs make use of the 'size' feature, and XeTeX does.
I know of no others (besides font editors). Both intend to upgrade their
programs... So this may be less of an issue than I initially feared.
<P>
FontForge should now be able to read in a size feature in either format and
gives the user the option of producing 'size' features in either format on
output.
<LI>
For Japanese fonts we tried to use cp932 (a variant of sjis) but then halfway
through didn't know what to do with it.
<LI>
Another fix for saving sub-opentype fonts from a cid font.
<LI>
From a script, if a user asks to generate a ttf outline font with ttf bitmaps
from a database with no outlines then technically this isn't supposed to
work. But it used to and it's easy enough to tweak so that it works again.
<LI>
<STRONG>Update to Unicode 5.0</STRONG>
<LI>
Again when adding accents to the left of a glyph we should shift the glyph
over to give it a reasonable lbearing.
<LI>
When building an accented glyph, we generally want use_my_metrics set on
the reference. But if we add an accent to right (horn) or left (psili/varia
on cap greeks) we want to turn it off. We did turn it off on the right side,
but not on the left.
<LI>
Philipp Poll points out that ScaleToEm doesn't scale the OS/2 metrics (and
some other stuff). Actually it does, but font info did the scaling BEFORE
setting the values. So the metrics get scaled, and then reset to the values
in fontinfo (which usually means they don't get changed).
<LI>
Fix some memory leaks.
<LI>
Some fixes for pcf loading.
<LI>
Various fixes to CID keyed fonts.
<LI>
Even the pretty ttf approximation routines need to worry about diametrically
opposed control points.
<LI>
When generating multiple type1 fonts, output the bounding box of each as
that of the full font. This will make it vaguely likely that applications
will get the same line spacing.
<LI>
Oops. The vertical metrics bit wasn't preserved when flattening a cid font.
<LI>
Ack! Window titles and such were being interpreted in Latin1 and not in UTF-8.
<LI>
Interpretation of PostScript arc operator failed if the two angles were 360
degrees apart. Normalization made them both the same.
<LI>
Try to clean up bitmap only sfnt generation.
<LI>
pcf wasn't in the Open Font dialog format list (nor was pmf, nor pdf)<BR>
Add a filter for TeX bitmap fonts.
<LI>
Provide a mechanism (if a preference item is set) for picking a cmap when
loading a font.
</UL>
<LI>
22-Aug-2006
<UL>
<LI>
Add a pane to the Preference dlg allowing user to control some of fontforge's
hint creation.
<LI>
Someone complained that Find Problems->Path Direction got the wrong answer.
It got the wrong answer because they had a self-intersecting path (which
screws up all concepts of in/out-side. So try to make it clear that they
should do a find intersecting paths first.
<LI>
Update my opentype scripts list (in particular include music).
<LI>
Due to a typo, ff thought pretty much everything outside unicode BMP was
in the hebrew script.
<LI>
Add a new command to the point menu which allows you to specify a spline
and one coordinate (either X or Y) on that spline. FF will calculate the
other coordinate and add a point there.
<LI>
CODE2000 contains an anchor class with only base glyphs (no mark glyphs)
as part of a set of anchor classes. FF crashed.
<LI>
Patch by Nix. svg.c did not compile when designed to be linked directly with
libxml (instead of dlopening it).
<LI>
Redo the font open dlg so that there's a list of standard filters and a mechanism
for changing that list. Remember the last filter used.
<LI>
If a popup menu is huge it used to appear under the cursor. This meant that
even if the user didn't mean to s/he would have selected something and
press/release would not be a no-op. This was a problem with the Font Info
->TTF Names
<LI>
Patch from SUSE. Use of uninitialized local variable. But the result is never
used, so just remove the offending lines.
<LI>
Emulate gtk's boxes and use that to do automatic dialog layout. Get the font
info dlg working (and then several others too). This means that the layout
is no longer optimized for English, but will look better in other languages
(I hope).
<LI>
Add an information to Font Info to display what unicode character ranges
are supplied by the font.
<LI>
Philipp Poll points out that when generating versioned fonts (ie. Ambrosia-1.0
rather than just Ambrosia) you don't want the filename to default to the
fontname (the fontname will be Ambrosia), instead you want some way of specifying
a default filename. So add that to the Names pane of the Font Info dlg.
<LI>
Try to keep track of font creation and modification times. NOTE: This is
different from file times (which is what appears to be stored in the 'head'
table of an sfnt file). Add a new table 'FFTM' to our sfnt output with these
timestamps (and the timestamp of fontforge itself, just in case we ever care).
<LI>
Mark classes could not be set from the selection.
<LI>
Ben Laenen points out that if an order2 glyph has a dependent which refers
to it using point matching and we keep changing the point number on the glyph
then we'll keep getting warning messages. He suggests one message.
<LI>
Empty glyphs weren't marked with red Xs any more.
<LI>
In font compare, when comparing two contextual/chaining lookups, I forgot
that class[0] was always NULL.
<LI>
Open contours caused the ttf point renumberer to crash.
<LI>
A font can have many kerning pairs. More than will fit in one GPOS subtable
(which essentially has a 64k data limit or a bit more than 10,000 kern pairs).
So be prepared to generate many sub-tables each dealing with a subset of
the (first) glyphs.
<LI>
If an apple mutually exclusive feature had a default setting which wasn't
0 then my previous patch didn't work.
<LI>
If guessing bluevalues found no OtherBlues, fontinfo->PS Private would
create an incorrect OtherBlues value [0]
<LI>
Support clipboards containing image/svg
<LI>
Ralf Stubner points out that the maximum zone size of bluezones is determined
by 1/BlueScale. So adjust BlueScale if the max zone is too big.
<LI>
Merge fonts didn't merge anchors and got into a terrible mess. Let's merge
kern classes and state machines too. Merging kern classes may be a bad idea.
We don't really merge them we just copy them so that if the same glyph is
mentioned in two classes unexpected things might happen.
<LI>
ff could crash on an sfd file containing erroneous anchors (such as might
be generated by the merge fonts command).
<LI>
Once upon a time, Apple was so concerned about accuracy of floating point
operations that they required all operations be performed in IEEE extended
(80bit). This had the interesting side effect that a program which conformed
to Apple's standards could not also conform to ANSI C (which required operations
use double temporaries for double values). I find it somewhat ironic, therefore,
that gcc on the mac doesn't even promote floats to doubles. FF needs the
extra accuracy provided by a double (an extended type doesn't seem to provide
additional assistance unfortunately). So on the mac we got extrema that weren't,
which meant that remove overlap didn't.
<LI>
If we had a mac feature which had multiple subtables (ie. a state machine
for a contextual substitution, and a non-contextual substitution too) then
we produced a bad chain in the morx table.
<LI>
Merge & Simplify would sometimes generate solutions using control points
which were diametrically opposed to what they should be.
<LI>
Yet another attempt to do a better job of autohinting.
<LI>
Add a "Revert to Backup" command.
<LI>
Put code in to correct for single bit (sometimes double bit) errors when
search from extrema. This is at a lower level than the previous patch.
<LI>
Output of extension lookups wasn't working
<LI>
Fixed a problem in the ttf names pane of Font Info.
<LI>
A slight improvement to magnifying by dragging a rectangle.
<LI>
The first time you click on a transition in a Font Info->Mac SM->Indic
state machine, ff would crash.
<LI>
Tihkomirov points out that it isn't clear how to delete a ttf name from the
name pane of fontinfo. So add some popup help. The language & string
ID menus in that pane were sorted on the wrong key
<LI>
Was not preserving (unparsed) tables properly. Several bugs.
<LI>
When loading an apple bitmap font (with no hmtx tables) we need to dummy
up widths for the outline glyphs.
</UL>
<LI>
15-Jul-2006
<UL>
<LI>
Apple's bitmap only fonts should not have an 'hhea' nor an 'hmtx' table<BR>
Dummy up outline glyph widths when we don't have a 'hmtx' table by looking
at bitmap widths for that glyph.<BR>
ftxvalidate complains if the vertical line metrics are 0. Even in a strike
with no vertical metrics information. So dummy something up.
<LI>
Was getting the flags wrong for turning off features in an apple morx chain.
<LI>
When outputing mark-to-base sub-tables with multiple marks I neglected to
output an NUL offsets for the anchors that weren't there. So if a glyph had
only one anchor (instead of two, or however many) then the offsets would
be all wrong.
<LI>
The SetPref() scripting function was misdocumented to be called SetPrefs()
so accept both names.
<LI>
When building an accented letter out of glyphs with an anchor class ff would
increase the advance width of the accented glyph by the size (xmax-xmin)
of the accent.
<LI>
Expand the functionality of the ruler tool so that it also shows curvature.
<LI>
When importing a bitmap font from a mac binary or an sfnt and the encodings
of the destination and the bitmap did not match, then things got rather screwed
up and might crash.
<LI>
patch from KANOU. the ref check routine in glyphcomp compared one reference
to itself.
</UL>
<LI>
03-Jul-2006
<UL>
<LI>
Type2 charstrings have no closepath operator. I used to think that meant
I could not omit the final vector. In fact it means I can omit the final
vector AND the closepath operator.
<LI>
If we had a font with no complete code pages we used to generate a version
0 OS/2 table without codepage info. But now windows refuses to install such
a font. Instead generate a bogus codepage field which claims to have latin1
(even though it doesn't).
<P>
Windows won't use a font where the codepages field is 0.
<LI>
When generating a FOND for a bitmap only sfnt, we created dummy 'NFNT' resources
with the wrong resource ids. Which meant we got garbage when the font was
used.
<LI>
Make the TabSets in the font & glyph info dialogs run vertically rather
than hor izontally. (Add an option to get the old display back).
<LI>
Approximate Spline from Point Slopes sometimes set the control point while
leavi ng the nonextcp flag on.
<LI>
Add Extrema only looked at how close a point was to the extrema in one dimension.
While that dimension is more important, make a less stringent check on the
other.
<LI>
Expand Stroke removes "U-turns" from splines because they confuse it. But
the routine that did that got a bit rambunctious and did the wrong thing
on a circular arc.
<LI>
If a font did not contain an OS/2 table then we didn't retain the 'hhea'
ascent/ descent.
<LI>
Various fixes from Matthias Kilian of OpenBSD.
<LI>
When asking for default 'subs' features, every glyph gets assigned U+2080.
<LI>
Display the curvature information at each point. In Point Info dlg, and in
a pop up window when editing cps.
<LI>
Add two new menu commands/scripting commands:
<UL>
<LI>
Canonical Start Points (CanonicalStart())
<LI>
Canonical Contours (CanonicalContours())
</UL>
<P>
The first sets the start point of each contour to the leftmost point, while
the second orders the contours by their leftmost points. This will slightly
reduce the size of output charstrings. It will also make more things available
to be put in subroutines.
<LI>
Print Multi-Size & Full Page printed the wrong glyphs from the font view.
Broken since the encoding change.
<LI>
When stroking a contour that makes a 180degree turn, ff did not give it a
semi-circle if linejoin was set to round.
<LI>
SPLCopyTranslatedHintMasks didn't work if there were more than one contour
being copied.
<LI>
Nathan Summers points out that if the XUID is garbage the ff can go into
an infinite loop when generating an otf/cff font.
<LI>
Somehow the XUID and UniqueID fields crept off the bottom of the fontinfo
Names p ane and weren't visible or modifyable. Give them their own pane now.
<LI>
Apply some patches (with some changes) from Nathan Summers to the truetype
debugger.
<LI>
The property count in BDF fonts is wrong.
<LI>
Ralf Stubner points out that the notdef glyph in an otf font should look
like that in a ttf font, and not like that in a type1 font. (that is there
should be something in the glyph).
<LI>
Add support for group "encodings" which have empty spaces for unused glyphs.
<LI>
make another attempt to find a good default sli for glyphs with no default
script.
<LI>
Typo in scripting function DefaultATT.
<LI>
The View->Display Substitutions has been broken since the encoding change
last summer.
<LI>
Mark glyphs with out of date instructions differently from those with no
instructions.
<LI>
The last change to the cvt table generally did not get made.
<LI>
Make glyph compare check for point matching in anchor points and in references.
<LI>
Add a warning message about out of date instructions when generating a font.
<LI>
When generating a font with anchor points matched to ttf points, ff failed
to allocate enough space for them and offsets got all confused.
<LI>
Oops. Some variables which should have been static were dynamic. Which meant
we kept dlopening libfreetype.
<LI>
If we had an anchor point which positioned itself with point matching, and
we ge nerated an otf font then we'd output a lookup which tried to do point
matching i n postscript. Only do point matching if we are sure we're in a
tt font.
<LI>
Add a preference item to control clearing of tt instructions.
<LI>
Printing a multi-size page of a truetype font crashed.
<LI>
Anchor Point dlg didn't work well with matching tt points.
<LI>
Add a field to allow users to search for a glyph name within a kerning class.
<LI>
Interesting. In kerning by classes, if the coverage table does not match
the glyphs specified in all the classes (for the first (left) glyph), then
any glyphs in the coverage table but not in any class should be treated as
being in class 0.
<LI>
Add something to the font view's copy from menu to control whether truetype
instructions are copied or not.
<LI>
Add some more problems to find problems
<UL>
<LI>
Check for glyphs with both contours and references.
<LI>
Find out of date point matched references.
<LI>
Find references with transformation matrices which can't be expressed (as
refs) in truetype
<LI>
Find references with transformation matrices which aren't translations (and
so can't be expressed (as refs) in type1/2 fonts.
</UL>
<LI>
Allow the user to turn off composite info in afm files.
<LI>
otf kerning classes were dumped in the wrong order.
<LI>
In GaramondPremrPro.otf (version 001.000) Adobe has coverage tables (for
some context chaining subs) which have the glyphs mentioned multiple times.
I suppose this is legal, but it is annoying. I want my strings to have each
glyph appear at most once. So add a little thingy to remove duplicate glyphs
when we generate a list of glyph names.
<LI>
Adobe has depreciated the use of PUA to represent small caps, old style numerals,
etc. Add a preference item so that ff will no longer recognize "a.sc" as
having a PUA encoding.
<LI>
The tool tip for the preference item "NameListForNewFonts" was wrong.
<LI>
Horizontal scrolling in the show att dlg was too slow. It was by pixel. Make
it be by something which approximates the width of a character.
<LI>
Add a new scripting command to give a font's bounding box.
<LI>
Sigh. Within a GPOS lookup, sub-tables are not additive. Only one will be
applied at a time. So order the 'kern' lookup so that pair-wise kerning comes
out first (to override class kerning).
<LI>
Was sometimes outputting mkmk base-mark attachement points as the mark attachment
point.
<LI>
Clytie Siddall has many suggestions about how to make the translation process
easier for translators. He also tells me how to insert contextual comments
into the program source, and provides many fixes for typoes.
<LI>
The OS/2 version 1,2 has a different defn of avgCharWidth than OS/2 version
3(,4) does. Display of CJK fonts is supposed to break under windows if using
the v3 defn.
<P>
Use the appropriate defn for the version we happen to be outputting.
<LI>
Autohinting crashed on glyphs in an order2 font if the glyph contained both
an outline and a reference.
<LI>
Pressing the help key in the main windows went to the overview page, not
to the contextual help for the window.
<LI>
Add a warning when 'CFF ' widths and 'hmtx' widths differ (when loading a
font).
<LI>
Set the default and normative widths too late after the cff subroutine change.
<LI>
Make double clicking in the list of kern pair/anchor combinations bring up
either Kern Pair Closeup dlg or Anchors Away.
<LI>
The Anchor control dlg didn't work after the encoding change.
<LI>
Add a popup message to explain what "Cor:" means.
<LI>
Doing a Close() from a script didn't work if the windowing system were open.
<LI>
Yet another bug in type1 hinting output.
<LI>
Some versions of realloc don't like allocating 0 bytes.
<LI>
Users expect ff to recognize a glyph name "Diaeresis", even though Adobe
(following standard American, but not European spelling) spells it "Dieresis".
<LI>
GhostScript has canniptions when it gets a version 3 OS/2 table in a ttf
file.
<LI>
Can't add a flex hint when there's a hintmask at the mid point.
<LI>
The hintmask part of PointInfo would not let you clear a hintmask.
<LI>
Add a new command to the fontview: Edit->Select->Select by Name<BR>
and a new scripting command: SelectAllInstancesOf
<P>
Both will select all encoding slots containing the named glyph (or unicode
value)
<LI>
Add scripting command: RemoveDetachedGlyphs
<LI>
Was setting typo linegap to hhead linegap.
<LI>
Using the X clipboard to paste into the character view has been broken at
least since I added multi-layered editing.
<LI>
Add a pref to control whether we prefer to use spacing or combining accents
when building accented glyphs.
<LI>
Spacing in the group dlg was sometimes off.
<LI>
More hinting fixes. If the edges of a stem aren't quite parallel we had problems
<LI>
Add some new built in variables: $order, $em, $ascent, $descent
<LI>
The 'TeX ' table was output incorrectly if glyph's order wasn't the same
in the sf as in the ttf.
<LI>
Allow the [*] Back visibility checkbox to control whether the grid fit lines
are visible or not.
<LI>
If scripting is in verbose mode, flush the output buffer before calling a
built in procedure (so any errors it generates will at least show the right
line).
<LI>
Ambrose LI points out that the master font in a cid keyed font should match
the ascent/descent of at least one of its subfonts (so that the
typoAscent/Descent f ields will default correctly).
<LI>
Spend some quality time with valgrind looking (oh, and fixing) memory leaks.
<LI>
Make ControlAfmLigatureOutput (scripting command) apply to ofm/tfm files
too.
<LI>
Oops. When parsing mac state machines I was using sizeof(long) when I should
have said sizeof(int32). It gave rather bad results on 64bit machines.
<LI>
Add a scripting function to load a user defined cidmap file.
<LI>
Hmm. sizeof(point)==8 on AMD64, but structures are aligned to 4. This means
our chunk alloc routines complain. So if we're given something that isn't
in units of sizeof(pointer) then just round it up.
<LI>
lookup ordering within GSUB has been totally broken at least since I added
the code to coalesce lookups for kerning.
<LI>
Kanou suggests changing function name that includes Char to be Glyph. Well
a few do really mean Char, but the rest should be Glyph. Leave the old names
there bu t document them as deprecated.
<LI>
Make CID keyed fonts use the new subroutine mechanism too. We can use global
subrs now too!
<LI>
Oops. Familyname can be NULL, and we were indescriminately checking to make
sure its length was less than 31.
<LI>
Make a better use of subroutines when generating otf fonts. Doesn't work
for CID fonts yet.
<LI>
We crashed if we changed from one cid sub-font to another when compacted.
<LI>
Oops. I made ff work with ft22 if the debugger was being built... but it
failed to compile if people didn't build the debugger.
<LI>
Oops a scripting function was marked as not needing a font when it did
(HasPreservedTable & friends).
<LI>
More for font compare. If there is a difference in a glyph in the two fonts
add the option for including the outlines of the second glyph into the first.
If the first font is missing a glyph, add an option to insert it with the
outlines in the background.
<LI>
Good heavens, someone wants to play with acorn2sfd. Make it compile again.
</UL>
<LI>
08-Apr-2006
<UL>
<LI>
Patch by Mike Frysinger from gentoo. Use the HOME environment variable in
preference to /etc/passwd.
<LI>
Werner wants to see raw data in the points window of the debugger. My guess
is that most people won't be interested in this mode (and it makes the window
a bit uglier) so I've made it configurable. --with-debug-raw-points
<LI>
Write sfddiff as a fontforge script and put it back into the install process.
<LI>
Add code to font compare so it can do the old sfddiff --merge option (if
two corresponding glyphs differ, add the outlines of the second to the background
of the first).
<LI>
Someone wanted acorn2sfd! Make it compile again.
<LI>
Make configure look for libgif
</UL>
<LI>
06-Apr-2006
<UL>
<LI>
Patch by Ian Jackson of Ubuntu. When in an empty glyph (one not WorthOutputting)
then doing a View->Show Grid Fit would cause a crash.
<LI>
The PLRM says that formfeed is whitespace. The T1_Spec says that it is not.
After an eexec the T1_Spec is right (and ff was following the PLRM
definition).<BR>
Also add a check to insure that the first character we generate in pfb encryption
isn't a white space character.
<LI>
On some windows systems (mine at least), windows will refuse to install a
postscript font if the fontname or familyname of that font is longer than
31 characters. These are the names in the Font Dictionary of the postscript
font itself, not the names in the 'name' table (for otf fonts).
<LI>
Make ff compile with freetype 2.2.0
<LI>
The popup menu of text fields was garbage.
<LI>
Make a change to pfm output which might allow non windows ANSI encoded fonts
to work.
<LI>
Allow the freehand tool to work in quadratic fonts.
<LI>
Didn't always refigure splines properly when using Get Info in quadratic
mode. Patch by Michal Nowakowski.
<LI>
Trying to invoke the KDE browser (for help) didn't work. Patch by Dimitar
Zhekov
<LI>
Still losing instructions if contours begin with off-curve points.
<LI>
if a font had a defined notdef glyph, then FF would usually enter it incorrectly
in the 'hmtx' table.
<LI>
In the Select menu, Width had an extra underscore.
<LI>
Wasn't looking in the right place to get the right weight name in an otf
font.
<LI>
People have been complaining about the UI for drawing quadratic (truetype)
curves. It was consistent with the UI for drawing cubic (postscript) curves,
but it seems hard to draw quadratics that way. Rather than concentrating
on the on-curve points (as in cubics), now concentrate on the off-curve points.
So the pen-tool behaves quite differently now in quadratic mode. As does
Element->Get info.
<LI>
A patch added back in 2004 to make vertical substitutions work for Japanese
(to work around a bug in Windows to be precise) had a bug itself if more
than one language was involved.
<LI>
When outputting an inline copy of a reference in otf fonts with translated
hintmasks we did the wrong translation for vertical stems and got garbage
results.
<LI>
New command to allow user to enter X,Y coordinates of a point and have that
point be selected. I want this for debugging. It might be useful generally.
<LI>
Fixed problems with type2 subroutines containing glyphs with conflicts.
<LI>
ReplaceWithReference had too large a fudge factor and found macron when it
should have found macron.sc in minionpro-regular.
<LI>
If an alternate/multiple subs had more than 30 components then we lost all
those after 30 when generating opentype GSUB table.
<LI>
Hmm. Sometimes least squares does give the answer we want for merge. So give
it a try.
<LI>
Patch by kanou to fix some translation problem.
<LI>
In the shape tools (round rect, ellipse): Instead of generating a quadratic
shape at the start, generate a cubic shape and convert to quadratic. The
convert routine now knows about how to find integer control points and such.
<LI>
Patch from Kanou to get more grid size values for looking at bitmaps.
<LI>
If a glyph starts with a control point then ff would sometimes throw out
the ttf instructions, thinking it wasn't numbered properly.
<LI>
A merge in a quadratic font produced a straight line. Even when it shouldn't
have.
<LI>
Change namelists to support non-ASCII glyph names.
<LI>
Oops. Some hinting scripting commands had a "b" prepended to their name by
mistake. Sigh. From now on support both names.
<LI>
When pasting a glyph with hints into an empty glyph, we shouldn't set the
"in need of autohinting" flag. (Actually, we might should if the original
copy were done in a glyph with out of date hints.... but that gets more
complicated).
<LI>
Patch to make loading bdf fonts more efficient.
<LI>
Add Kanou's "fontview" font to the list of fonts searched by default for
the fontview window.
<LI>
FF did not mark ghost hints as different from normal hints.
<LI>
Interpolating fonts broke when I did the encoding change last summer.
<LI>
Patch from Kanou to prevent the hash function from returning negative numbers.
(and crashing)
<LI>
Add a menu and a scripting command to compare two fonts.
<LI>
Oops. There's a stray underscore in a field in font info.
<LI>
Refresh font view(s) after changing glyph name/unicode in glyph info in case
those are being displayed.
<LI>
If a name entered in the goto dlg was a single unicode char, then goto would
treat it as such. Normally this is fine, but a user might use the underscore
character (for example) as a glyph name and not assign it to U+005F. So check
for the name too.
<LI>
Rewrite the cubic->quadratic conversion code. It now looks much prettier
and tries to position intermediate points on integer (or half integer) locations
so there won't be unexpected rounding later. It's slightly less accurate
though.
<LI>
Many changes to the postscript hinting code.
<LI>
If a glyph contained references but no alphabetic characters then Glyph Info
would crash.
<LI>
Scripting command AskUser doesn't work unless FF_SCRIPT_IN_LATIN1 is set.
Patch by Kanou.
<LI>
In some error messages I ended a sentence with a comma. Make it a full stop.
<LI>
Patches from Kanou to make Japanese translation better.
<LI>
Kanou points out that the code which handles modifications to the unicode
char textfield (in glyph info) complains about the wrong things and he provides
a patch.
<LI>
Hand tool failed to scroll background images (probably failed on hints too).
<LI>
When doing a copy splines with hintmask operation we neglected to refigure
the spline after transforming the end points. This was ok since we never
used that info -- except if the splines were quadratic and we needed to convert
to cubic. So when generating a ps font from a quadratic database, and the
font contained references with scaling/rotation/etc. then we'd get erroneous
results.
<LI>
In Find Problems, the Flipped Reference check could fail if the reference
contained a contours which intersected (themselves or each other).
<LI>
Make ff aware of ExtraLight as a valid weight when setting a default value
for the PS weight string.
<LI>
When the user clicked on a textfield with attached pulldown list, ff would
get an event saying the first entry on the list had been chosen. This meant
that the Tag dialog (used for new ligatures/substitutions/etc. would show
the first tag in the list instead of blank.
<LI>
Include some glyph name synonems from Richard Kinch's TrueTeX list.
<LI>
Determination of whether a ghost hint is top (-20) or bottom (-21) should
depend on the current contour, not on the glyph as a whole.
<LI>
If a glyph consists solely of references then add
_<ref-name-1>_<ref-name-2>...<ref-name-n> to the list of
possible names. Sometimes also add uniXXXXXXXX.
<LI>
Kanou wants to translate some more strings.
<LI>
Barry.SCHWARTZ wants to be able to reencode a font to compact from a script.
<LI>
Barry.SCHWARTZ points out that my "cfg" files contain no newlines. Shows
how much use they've received:-)
<LI>
Barry.SCHWARTZ points out that when generating an afm file for an otf font
only the first 256 characters were given encodings.
<LI>
Simplify much improved.
<LI>
Make simplify for quadratic splines aware of the peculiarities of truetype.
So one simplification is to make a point interpolateable. And removing a
point is not always good if it means points that were interpolateable become
non-interpolateable.
<LI>
After examining (and stealing with permission) Huw Davies's code in
wine/tools/fnt2fon.c I believe I can now produce .fon files.
<LI>
Add support for reading bitmap references (from an sfnt bitmap)
<LI>
Patch by Kanou. cvknife didn't compile in one mode.
<LI>
Typo in an error message
<LI>
Add a command to show points of inflection (also change View->Mark Extrema
to show where extrema occur on a spline if not at the endpoints)
<LI>
Patch by Michal Nowakowski. Uninitialized variable in simplify dlg.
<LI>
glyph names for unencoded glyphs were always "uniFFFFFFFF" should be
"NameMe-<n> broken by last summer's encoding changes.
<LI>
Werner wants CC (composite character) entries in afm for GPOS mark-to-base
features.
<LI>
The switch to utf8 last summer broke font info->Size
<LI>
Allow users to ask for both 'GPOS' and old-style 'kern' tables. FontLab does
this. The OpenType list is generally disapproving of the idea.
<LI>
If we tried to put more than about 10000 kerning pairs into one old-style
kerning sub-table then we'd overflow various shorts. So split it up after
about 10000 kp into several different sub-tables.
<LI>
Round to Int screwed up interpolated points.
<LI>
When generating a tfm file don't generate a width bigger than 16*em-size
(even if the font says to) because TeX will throw it out.
<LI>
Alexey Kryukov's patch to fix an error message.
<LI>
Printing a CID keyed truetype font to a pdf file produced a very odd ordering
of glyphs (compacting some and omitting others and getting errors when it
ran out of glyphs but asked for more).
<LI>
Alexey Kryukov suggests repunctuating an error message.
<LI>
Johan Winge suggests an improvement to converting cubic splines to quadratic:
If we end up using a line when looking at the spline as a whole, try breaking
it at the point(s) of inflection first. It seems like a good idea.
<LI>
Johan Winge also points out that I identify points as tangents when they
should not be. This is because I use one measure of sloppiness no matter
how close the cps are to the base point when determining colinear. It's probably
best to have a variable measure depending on how far the cp is from the base
point.
<LI>
Alexey Kryukov thinks Add Unencoded Slots should work in the compacted view
by making the thing have a custom encoding.
<LI>
Scripting reencode didn't get rid of the "compacted" mark.
<LI>
Ralf Stubner points out that I produce type1 charstrings which end in "seac
endchar" when a simple "seac" is sufficient. He's right.
<LI>
When generating opentype tables in from a single sub-font of a cid-keyed
font (ie. user asked for a ttf font generated from one sub-font) ff would
crash.
<LI>
We didn't hint bold fonts well (anything where stems were bigger than em-size/10)
<LI>
When generating a type1 font with a glyph containing a reference that had
to be unlinked, then the vertical stems in that reference would not be hinted.
<LI>
When guessing points at which to attach hints in type1/2 read in we failed
if the points were too widely spaced. Be a bit more lenient.
<LI>
SetCharName didn't check its flag value properly.
<LI>
Uncompacting a font caused memory problems.
<LI>
Fix simple crash in metafont.
<LI>
When importing unencoded glyphs into an already existing font, we would sometimes
fail to find the matching glyph (and would create a new one).
<LI>
If a font contain an encoded glyph called ".notdef" and that glyph was not
the first glyph, then type1 fonts had a .notdef glyph at a random place in
the font. Now freetype seems to renumber glyphs so .notdef is always glyph
0 which fontforge did not expect and produced some strange results when
rasterizing (tested on 2.1.10). Fix is simple: always make notdef be first
in the chars dictionary and then all is happy.
<LI>
Add new scripting command to compare two glyphs. I want this for testsuites,
other people might find a use for it.
<LI>
gniibe reports that the scripting function Export() produces bitmap images
with the wrong format and provides a patch.
</UL>
<LI>
9-Feb-2006
<UL>
<LI>
Instead of refusing to do expand stroke/remove overlap for order2 fonts,
why not convert the contours to order3, do the function and convert back.
<LI>
Once more we are numbering points badly.
<LI>
If we clear a glyph which is being referred to (and we don't unlink it first)
then when we save it into an sfd file we get a reference to a glyph at orig_pos
-1 (because the cleared glyph isn't stored in the sfd) which causes an error
when reading it back in.
<LI>
If a copyright message were an exact multiple of 100 characters long, fontforge
would screw up memory (and potentially crash) when reading it in from an
sfd file.
<LI>
The Merge/Simplify command (which Add Extrema now calls) had problems when
the control points were very close to the base point so that the point was
(to the human eye) a corner point.
<LI>
Add support for the r2l script N'Ko. MS says opentype will use script 'nko
', ISO says the tag should be 'nkoo'. Follow opentype.
<LI>
Kanou tells me that Syriac & Thaana are also r2l scripts and should be
added to my list.
<LI>
If FF was given multiple fonts on the command line the sizes of the font
windows would jump around in a very peculiar fashion.
<LI>
Add the concept of a namelist. Users can specify what names they want for
new glyphs, or can force an entire font into a new naming scheme. Changes
to
<UL>
<LI>
FontInfo
<LI>
Open
<LI>
Generate (Family)
<LI>
Preferences
<LI>
and the Encoding menu.
<LI>
New scripting functions:
<UL>
<LI>
LoadNamelist(filename)
<LI>
LoadNamelistDir([dir])
<LI>
RenameGlyphs(namelist)
<LI>
Extended Generate (scripting) to take a namelist argument.
</UL>
</UL>
<LI>
If users didn't have libuninameslist installed we were still generating spurious
ligatures for numero and TM. (and others)
<LI>
KANOU points out that if you comment out a bdf glyph (with COMMENT) fontforge
sort of reads it anyway.
<LI>
Kanou needs to distinquish between the script latin and the language.
<LI>
SplineRemoveAnnoyingExtrema1 got tweaked a little too much in attempting
not to generate insane control points.
</UL>
<LI>
25-Jan-2006
<UL>
<LI>
If you try to create a bitmap only sfnt but provide pixelsizes for no valid
bitmap strikes, the fontforge would crash.
<LI>
Chia points out that I should use the PIXEL_SIZE property to set a bdf font's
pixelsize (instead of using font ascent+descent).
<LI>
Trying to rasterize a glyph with a coordinate of 1e7 caused a crash.
<LI>
The change to make Add Extrema remove points near the extrema failed to consider
the possbility that some of those points might be corner.
<LI>
In Gentium Roman, when searching for bluevalues, the baseline is further
than 1 standard deviation from the mean of glyph ymin. Change the range searched
so that 0 is always included.
<LI>
In Font Info->PS Private, if we selected OtherBlues and pressed [Guess]
it did not change the OtherBlues value.
<LI>
The gettext patch changed Histograms->Blue Values menu item into a line.
<LI>
When changing the order of a font, ff would ask if you minded losing the
undoes. There's no point in asking the question if the font hasn't been modified
(it has no undoes).
<LI>
The Point Info dlg should enforce that curved points cps are colinear (so
if the user changes one cp, the dlg should change the other to be in the
opposite direction.
<LI>
There was a path though PointInfo that called SplineRefigure3, which meant
that splines got marked as cubics even when they should have been quadratics.
<LI>
Using a rotated elliptical pen in expand stroke did not work
<LI>
Add a homedir button to the file chooser dialogs.
</UL>
<LI>
17-Jan-2006
<UL>
<LI>
Make the Import() scripting command accept {bdf,pcf}.gz files
<LI>
Reading utf7 (ttf name) strings from an sfd file was broken if one of the
characters had bit 15 (high bit) set and its position in the string mod 3
was 1.
<LI>
My horizontal line metrics in the sfnt bitmap strike header were incorrect
<LI>
Use the horizontal line metrics (if they work) to set the ascent/descent
of a bitmap strike.
</UL>
<LI>
15-Jan-2006
<UL>
<LI>
The change to fold all COMMENTS into one bdf property broke the sfnt 'BDF
' table routines.
</UL>
<LI>
14-Jan-2006
<UL>
<LI>
Change AddExtrema so that if an extremum is very close to an old point it
will add the extremum and then remove the old point.
<LI>
Redid how bdf properties were handled
<UL>
<LI>
I had the definitions of some properties slightly wrong
<LI>
I was generating some obsolete properties
<LI>
When I generated CHARSET_ENCODING for iso8859 encodings I had an extraneous
"-" in the value.
<LI>
retain the properties when loading a bdf, pcf font
<LI>
Add a dialog which gives user control over bdf properties
<LI>
design a 'BDF ' table for SFNT files which can contain bdf properties and
make FontForge read and generate this table.
</UL>
<LI>
Ted Packard points out that I output "big metrics" in sfnts inconsistently.
This patch should make them consistent and right.
<LI>
Restore "compact" views to their old glory. Ie. they can now be uncompacted
(and uncompaction happens automagically when generating a font).
<LI>
When reading a GenTags: line from an sfd file stored with CRLF line terminators,
the next line would be lost.
<LI>
ff couldn't handle xrefs which were broken in bits in pdf files?
<LI>
When reading a ttf font from a pdf file we found no encoding info. This caused
us to crash because various routines expected an encoding map. Add a dummy
(Original) map if not exists.
<LI>
Wasn't numbering points in references properly.
<LI>
Gleep! Ever since the gettext code went in, the Generate fonts dlg has refused
to generate "No Outline Font" and "No Bitmap Font".
<LI>
Herbert Duerr from OpenOffice tells me that their OpenSymbol.ttf font when
produced by fontforge does not work on Win98. This is because Win98 doesn't
like the codepages bits ff produces and refuses to use any glyphs in the
font. He submitted a patch to make ff produce a version 0 OS/2 table (with
no codepage info) for this font. Win98 will accept it then. His patch was
against an earlier version of ff and needed to be modified for the current
version.
<LI>
Patch by Raph Levien which finally shows me how to use FT_Outline_Get_Bitmap
properly.
<LI>
If the user has never called PrintSetup (or if the user has not called PrintSetup
this session and has not loaded prefs), then fontforge will invode setpagedevice
on a pagesize which will fit on either A4 or US-Letter. The PS manual says
a printer should refuse such a size unless it has paper within 5 points of
it. So on printers which follow the spec (not mine) nothing will print as
it waits for paper.
<P>
Now if the pagesize has not been set, don't specify a PageSize to setpagedevice.
<LI>
The PrintSetup scripting command should not require a font.
<LI>
Add a mechanism so that users can prevent ff from making a point implicit.
Useful in that point needs to be instructed.
<LI>
New copyright notices for 2006
<LI>
Make the pen tool work better with quadratic splines (make it default to
having control points which cause the point to be implicit).
<LI>
Order2 elipses were not drawn accurately.
<LI>
Point numbers sometimes didn't get properly renumbered after changes. If
we have references & splines in a (truetype) glyph then show the numbers
as "?".
<LI>
When a charview displays numbered (truetype) points, then it shows all the
control points. But the control points are not selectable. This is not a
good thing, so make them selectable.
<LI>
The font display to pdf did not include a title at the top of each page.
<LI>
Peter Denisevich points out that when we print something we say "%%Pages
atend" instead of "%%Pages (atend)". And the latter is correct.
<LI>
Werner points out that my type1 (and type1 cid) fonts contain a
%%DocumentSuppliedResource line, and they should not. The next level up should
do that when it includes the font.
<LI>
Show .xpm files as images we support in import image dlg. We've always supported
them, might as well show them.
<LI>
Check the glyph class when deciding what anchor to use.
<LI>
Anshuman Pandey wants to be able to set the glyph's GDEF class. I've never
understood why the default behavior wasn't good enough, but it's easy to
do.
<LI>
One of the fields in Glyph Info had some garbage initialization.
<LI>
Add a default anchor point type to the AddAnchorPoint scripting command.
FF will try to guess an appropriate value.
<LI>
Add some standard window sizes to the fontview window. I'm tired of having
the windows sized to other people's standards whenever I review a bug.
<LI>
There was a path through expand stroke where a control point was marked as
non-e xistant by mistake.
<LI>
Expand Stroke would leave contours with the reversed orientation if it had
to do a remove overlap internally.
<LI>
Oops. The routine to save the encoding prefs file could not handle an encoding
plug-in.
<LI>
KANOU points out that the origin pulldown list in the transform dlg was not
being translated.
<LI>
In the preference dlg all of the [...] file browsers had the title "Call
Script" which isn't appropriate for most of them.
<LI>
Typing .* and pressing [Filter] did not show hidden files in the file chooser.
<LI>
the code to check for intersections failed to check if there were a crossover
in the last tiny section of a spline before its end.
<LI>
Was generating ofm files when creating bdf fonts. Seems unnecessary.
<LI>
Was producing a EBLC table with bad first/last values for first glyphs.
<LI>
Hmm. Not all systems have tzset. Add a configuration option for it.
<LI>
In scripting, a return within a loop sent ff into an infinite loop.
<LI>
Kanou's patch for adding a new flag to scripting Import, to clear out the
layer first.
<LI>
Patch from KANOU to add SetGlyphChanged scripting function.
<LI>
If an implied point became real, this fact was not reflected on the display
until the user forced a point renumbering.
<LI>
A mouse click in an empty metrics view references garbage memory -- And crashed
Kanou's session.
<LI>
Loading a large bitmap font left bits of the backmap of the encoding map
uninitialized.
<LI>
Loading a pcf font caused a crash.
<LI>
Moving the control points of an implied point should move the implied point.
And we should indicate which points are implied so this behavior doesn't
surprise.
<LI>
Michal Nowakowski points out that renumbering points in a glyph should turn
off point matching in references.
<LI>
Add support for bitmaps with vertical metrics.
<LI>
Wasn't storing the vendor id in the OS/2 table properly.
<LI>
Rounding error present on PPC which was absent on *86 machines.
<LI>
Werner would like pixel size info to show on the title of a charview when
debugging.
<LI>
Added a new menu command "Point->Center Between Control Points" for truetype.
<LI>
When manipulating menus with keys (rather than mouse) Werner found a crash.
</UL>
<LI>
5-Dec-2005
<UL>
<LI>
Creating the first bitmap view might cause a crash -- depending on how the
linker organized memory.
<LI>
Loading an sfd file now checks to see if there are any glyphs with splines
in them, and if there are not turns on the onlybitmaps flag. Someone pointed
out that if you inadvertantly edit in the outline view -- even if it is nothing
significant, then the font is forever after marked as outline. This isn't
a perfect fix, but it will prevent the worst from happening.
</UL>
<LI>
1-Dec-2005
<UL>
<LI>
Use GNU gettext rather than my nomen routines to handle translation of the
UI..
<LI>
Add support for plugins.
<LI>
I added a check in parsing tfm files to make sure I didn't read outside the
bounds of the kern table. But the table size was expressed in ints (32 bit
units), and my index was in bytes, so I frequently exceded it.
<LI>
If we used Get Info on a reference in a ttf font, and that reference did
NOT do point matching we would generate an inappropriate error.
<LI>
My support for using endchar as seac in type2 fonts only worked in bare cff
fonts, it did not work if the cff were inside an sfnt wrapper (opentype).
<LI>
I have decided that I will now store all postscript strings in utf8 (copyright,
weight, familyname, etc.) They SHOULD all be ascii. But the occasional copyright
mark would sneak in. We went into an infinite loop on one such because that
was an illegal utf8 string. So fix a number of problems related to this.
<LI>
Switch from using an internal routine to using freetype to rasterize b&w
bitmaps when debugging ttf instructions.
<LI>
Make the gridfit/debug settings sticky across invocations (store in prefs).
<LI>
Add popup info showing the level of greyness in a truetype font being debugged
in anti-alias mode.
<LI>
Werner suggests altering the dynamic range of anti-aliased rasters in the
charview so that the outlines remain visible behind them.
<LI>
Make the background color of the debugger raster window configurable by the
user
<LI>
If a curved point had no control point in one direction, then ff thought
it had no direction and felt free to change it. It should inherit the direction
from the other side of the point. This was even more confusing if the point
went through a two step process, first simplifying one side into a line (losing
the cp) then simplifying the line away (losing the direction).
<LI>
Use a better algorithm to indicate changed pixels. (in debug window)
<LI>
Screwed up View->Show Grid Fit... in Mono mode.
<LI>
Werner wants to be able to see grey scale rasters while debugging truetype.
He also points out that if the instruction before the end of instructions
changes pixels, ff would leave them marked "changed" even after finishing
the instructions.
<LI>
We were getting multiple error windows.
<LI>
Don't allow users to add instructions to a glyph containing both a reference
and contours. Or a glyph where a reference is scaled more than 200%. (tt
doesn't allow these combinations so the references need to be copied inline)
<LI>
Typo in remove overlap caused bad bug in feta26. Error introduced 15 Sept.
<LI>
Further work on what makes a spline linear.
<LI>
The utf7 output routine in sfd did not convert from utf8 properly.
<LI>
Panov has found yet another error in simplify. Be really exuberant about
turning splines that trace out lines into lines.
<LI>
Panov finds another bug:
<UL>
<LI>
If we change the unicode value of a glyph, then we also need to change
<LI>
the unicode value of any references to that glyph.
</UL>
<LI>
Panov presents four more bugs:
<UL>
<LI>
If an sfd file contains an unencoded glyph, it will crash
<LI>
Force Encoding->Original will crash if there's a bdf font missing some
characters (ie. the piecemeal display font)
<LI>
Goto Dlg tried to free an uninit value
<LI>
Goto Dlg contained a string initialized by latin1 rather than utf8.
</UL>
<LI>
Hmm. the changedsincelasthinted flag doesn't apply to truetype. The equivalent
thing (I guess) is not having any instructions on a glyph with splines.
<LI>
Panov wants a way to build up arrays using easier syntax than: create array,
assign each element.
<LI>
Sometimes we would get both an EUC-CN and a GB2312packed entry in the Encoding
menu.
<LI>
Create a plugin for GB12345, and treat it (in sfnt tables) as GB2312.
<LI>
Add a new scripting funtion: NearlyLines to convert almost linear splines
to linear.
<LI>
Tweak AddExtrema so that it doesn't create Extrema points which are too close
to the endpoints.
<LI>
Didn't terminate an array of answer strings to a question dialog.
<LI>
Fixed a crash in stem database.
</UL>
<LI>
28-Oct-2005
<UL>
<LI>
More work on the mac install procdure.
<LI>
Redo the install documentation on the website & in the readmes
<LI>
Add a hack to the directory browser so that on cygwin getting a directory
listing of "/" will include the magic (fake) directory /cygdrive (which gives
access to the rest of the PC)
<LI>
Add a new scripting funtion: NearlyLines to convert almost linear splines
to linear.
<LI>
Tweak AddExtrema so that it doesn't create Extrema points which are too close
to the endpoints.
<LI>
I was dumping all opentype ligatures into an ofm(tfm) file. But I should
probably only add 'liga' and 'rlig' ligatures.
<LI>
Omega has a bug where it thinks 0 width glyphs do not exist. Which means
it thinks none of the combining accents, etc. exist. So force the width of
any zero width glyphs to be the smallest positive width.
<LI>
When reading ttf/otf fonts, FF gave alternate substitutions (and multiple
subs?) a tag of 0.
<LI>
Add two scripting routines to allow people to read & write strings from
and to files. One string per file.
<LI>
The ClearTable scripting command parsed the table's tag incorrectly.
</UL>
<LI>
23-Oct-2005
<UL>
<LI>
Try to make the Mac install a bit more mac-like by adding an entry to the
X11 Applications menu rather than expecting users to start fontforge from
the command line.
<LI>
David Binderman points out an out of bounds array reference in cvexport which
has been there for years. Gleep.
<LI>
Add scripting commands for manipulating ttf instructions.
<P>
I added the following new scripting functions:
<UL>
<LI>
SetMaxpValue("item-name",
value)
<LI>
GetMaxpValue("item-name")
<LI>
ClearInstrs()
<LI>
ClearTable(tag)
<LI>
AddInstrs(thingamy,replace,instrs)
<LI>
FindOrAddCvtIndex(value[,sign-matters])
<LI>
ReplaceCvtAt(index,value)
<LI>
GetCvtAt(index)
<LI>
PrivateToCvt()
</UL>
<LI>
Daniel Gillmor points out there is no way to set the OS/2 Width field from
a script. He then provided a patch with two new functions which does this.
I realize there is no way to set any of the OS/2 values (except panose),
and there should be (and to retrieve them too).
<P>
I added the following new scripting functions:
<UL>
<LI>
SetOS2Value("item-name",
value)
<LI>
GetOS2Value("item-name")
<LI>
SetPrivateValue("item-key","item-value")
<LI>
GetPrivateValue("item-key")
<LI>
HasPrivateValue("item-key")
<LI>
RemovePrivateValue("item-key")
</UL>
<LI>
A number of fixes for ofm files.
<LI>
When outputting mark-to-base lookups with multiple anchor classes, ff would
put a base glyph in the coverage table several times if it was used by several
mark classes. Bad.
</UL>
<LI>
18-Oct-2005
<UL>
<LI>
KANOU points out that I was using too strict a rule for parsing svg polygons.
<LI>
OFM output was not working in fonts with lots of kerning combinations.
</UL>
<LI>
16-Oct-2005
<UL>
<LI>
A number of fixes for ofm files.
<LI>
Add default 'nukt' "ligature" substitutions to appropriate Devanagari characters
</UL>
<LI>
15-Oct-2005
<UL>
<LI>
The patch to the routine determining what glyphs got output broke bitmap
only fonts.
<LI>
Ofm files didn't contain ligatures.
<LI>
The ofm patch broke tfm output.
</UL>
<LI>
12-Oct-2005
<UL>
<LI>
Add support for generating & parsing ofm files (I hope)
<LI>
If I tried to generate a font from an absolutely empty fontdb (ie. a new
one) then I'd get a stupid error about how .notdef was at encoding -1 and
this was a bad idea.
<LI>
Add 4 new information types to scripting GlyphInfo
<DL>
<DT>
* LayerCount
<DD>
Number of layers in glyph (usually 2)
<DT>
* RefCount
<DD>
Number of refs in glyph
<DT>
* RefNames
<DD>
Returns an array of all reference names (may be 0 length)
<DT>
* RefTransform
<DD>
Returns an array of all reference transforms
</DL>
<LI>
Don't mark glyphs with widths other than 1em as being worth outputting (require
widthset). Used to use both (because in the early days, before pfaedit moved
to sourceforge even, the widthset bit didn't exist). Now there are too many
cases w here glyphs are created with a width other than 1em (marks, glyphs
in monospace fonts (where the space is anything but 1em)).
<LI>
When printing a type3 pdf font, give it a name. Not required, but so what.
<LI>
Patch from Michal Nowakowski. When editing truetype instructions using my
prefix notation for numbers, there was a crash if a number needed a word
(rather than a byte).
<LI>
Add some support for reading fonts out of a pdf file.
<UL>
<LI>
Limited support for pdf type3 (no images)
<LI>
Only support (Hex, 85, Flate, RLE)Decode filters (no support for lzw, fax,
JBIG, DCT)
</UL>
<LI>
The routine to build the stem database (autohint) would set up a point database
and then call a routine to convert all splines into a set of monotonics.
But that routine could remove 0 length splines (and the points attached),
which would mean our point db would be wrong.
<LI>
Stefan Wanger suggests some patches to fix memory leaks.
<LI>
Stefan Wanger gave me a type2 font which used type1 flex conventions (calling
othersubrs, etc.) There is no othersubrs operator in type2, nor any place
to store othersubrs subroutines. But it is easy enough to support, so why
not. Warn that it's an illegal font, of course.
<LI>
Stefan Wanger gave me a font containing the utf8 byte order mark in a fontname
( in a CFF Name Index). PostScript says FontNames are printable ASCII. But
it's easy enough to skip over it.
<LI>
Stepan Roh points out that in a monospace font, combining glyphs should default
to the mono-width while in a proportional font they should default to 0 width
(or perhaps 1 em-unit for compatability with old idiotic windows systems).
Use the panose field to determine if a font is monospace.
<P>
Actually ALL glyphs in a monospace font should default to the mono-space
width rather than 1em.
<LI>
New dialog: Hints->Edit 'maxp'... Gives user access to number of functions
defined, the stack depth, storage usage, number of twilight points, which
ff can't figure out for you.
<LI>
Figured out how to make transparent images work on cygwin
<LI>
Michal Nowakowski points out that negative values are duplicated in cvt.
<LI>
Patch from Michal Nowakowski fixing crash when setting size of cvt table
to 0.
</UL>
<LI>
29-Sept-2005
<UL>
<LI>
Add utf8 entry points for many (ucs2) routines. Minimal ability to draw non-BMP
glyphs now with <A HREF="nonBMP/index.html">bdf fonts</A> with encodings:
*-UnicodePlane-1 (for plane 1), *-UnicodePlane-2 (for plane 2), etc.
<LI>
Add a menu command to add values from the private dict into the cvt table
(BlueValues, StemSnaps).
<LI>
The Edit cvt window usually failed to draw anything in itself when it popped
up (subsequent refreshes were ok).
<LI>
Patch from Michal Nowakowski to improve memory usage in auto instr.
<LI>
Printing sample text was broken in fonts with no kerning classes.
<LI>
cygwin does very weird things with shared libaries, and we didn't support
them at all.
<LI>
FontForge did not support the depreciated usage of endchar to mean (almost)
seac in type2 charstrings. It should now.
<LI>
os2 typo linegap was not read out of sfd files.
<LI>
Display 'gai' files in the open dlg.
<LI>
I got some mnemonics wrong. Fix 'em up.
<LI>
bdftopcf will use the glyph encoded at 0 as the default glyph if there is
no explicit DEFAULT_CHAR. It seems happy with a DEFAULT_CHAR of -1 to mean
no default, so use that if we don't want glyph 0 to be the default.
<LI>
when outputting bdf, fnt or pt3 bitmap fonts with no outline font generated,
we'd get filenames like foo-*-13.bdf. Get rid of the "-*".
<LI>
Support point numbering of composites even when not debugging.
<LI>
Michal Nowakowski points out that the cvt editor crashed if we changed the
length of the table.
<LI>
Provide two new scripting functions:
<UL>
<LI>
MoveReference(xoff,yoff,[ref-name/ref-unicode]+)
<LI>
PositionReference(x,y,[ref-name/ref-unicode]+)
</UL>
<P>
These search all selected glyphs, looking for any references in those glyphs
with the given name/unicode value, and then translating the reference by
(xoff,yoff) or positioning the reference absolutely at (x,y).
<LI>
ff failed to read horizontal metrics properly from a type2 CFF CID font.
In most cases this would be masked by the fact that ff would correct the
bad width values by reading the hmtx table. But if one had a bare CFF font,
or a 'gai' font where there is no external source of widths, ff would get
things wrong.
<LI>
Alexej Kryukov points out that most entries in the private dict should be
scaled when we do a ScaleToEm.
<LI>
Fix a couple of problems with cid font display that "gai" fonts expose.
<LI>
Michal Nowakowski points out that I generated truetype instructions --- and
then forgot to attach them to the glyph. Whoops.
<LI>
Loading extensible glyph information from a tfm file was broken by the encoding
change.
</UL>
<LI>
19-Sept-2005
<UL>
<LI>
ff did not read AAT classes (kerning classes, etc) properly. It read one
extra element which could cause problems
<LI>
Cleanup svg output for kerning classes with no members.
<LI>
Out of bounds array reference in OS2FigureCodePages caused a crash on the
mac.
<LI>
When loading a type1 font we failed to set the unicode encoding on seac
references. This probably broke lots of things, it certainly broke replace
with reference.
<LI>
Add a DefaultRoundToGrid scripting function to set the Round-to-Grid truetype
reference bit (basically set it whenever we have a reference which isn't
point matched).
<LI>
Add support for truetype point matching in references and anchor points
<LI>
Improve the debugging heuristic that notices when we've jumpped to a new
routine to work better with composites
<LI>
If I attempted to debug a glyph with no instructions there was a race condition
and if the race was won one way, ff would hang.
<LI>
We weren't numbering points in a composite. This was only obvious when we
did a View->Show Grid Fit on a composite glyph.
<LI>
When debugging a composite glyph, ff forgot that some references are translated
(or scaled or rotated), and failed to display this.
<LI>
FF failed to keep track of the truetype "RoundToGrid" bit which applies to
references.
<LI>
In the Points window of truetype debugging, if the penultimate point of a
contour was interpolated, then the contour boundary was drawn in the wrong
place.
<LI>
Use to store debugging dpi/pointsize in the charview. Werner suggests that
it be global (so different glyphs will all share the same defaults).
<LI>
Some Unicode code blocks have moved (probably those which only in the pipeline
or some such), and some others have been added to the pipeline.
</UL>
<LI>
15-Sept-2005
<UL>
<LI>
Can't use a subroutine to refer to a translated glyph which contains flex
hints in type1 output.
<LI>
Hide another problem with rounding errors in remove overlap.
<LI>
Don't produce multiple warnings about the local encoding.
<LI>
In quadratic fonts the Remove Overlap menu item is disabled, but if you use
the hotkey the command is invoked (with disasterous results).
<LI>
Typo in point info code to determine whether a hint mask contains conflicts
(matched vertical hints against horizontal ones)
</UL>
<LI>
12-Sept-2005
<UL>
<LI>
Added a scripting command DefaultUseMyMetrics() to set the use_my_metrics
bit in old fonts.
</UL>
<LI>
11-Sept-2005
<UL>
<LI>
When ff pastes refs from one font to another it tries to figure
out the width of a glyph containing references from the width of what appears
to be the base glyph. (because if you paste Aacute from one font to another,
the size of the "A" glyph may be quite different in the new font. Using the
width of the glyph in the original font would be wrong).
<P>
There are two problems with this:
<OL>
<LI>
It didn't take forward references into account, and would use the original
width rather than the modified width of the reference.
<LI>
It would (probably) be confused by an Alphatonos where the width of Alphatonos
is not the same as that of Alpha.
</OL>
<P>
instead figure widths out after all pastes have completed, looking at the
use_my_metrics bit to get things right.
<LI>
Handle forward references to glyphs which will be pasted into by the current
command (used to work, broken by the encoding change)
<LI>
Various fixes for pasting references from a font which has since been closed.
<LI>
Support the ttf "_USE_MY_METRICS" bit on composite glyphs. This entails:
<UL>
<LI>
Retaining it when reading a truetype font
<LI>
Setting properly when generating one
<LI>
Storing it in sfd files
<LI>
Giving the user a way to set it with the Element->GetInfo command
</UL>
</UL>
<LI>
9-Sept-2005
<UL>
<LI>
ff crashed when given a bdf font with multiple glyphs with the same name
<LI>
Try to avoid generating bdf fonts with multiple glyphs with the same name.
This happened when a single glyph was mapped to several encodings, a concept
bdf doesn't support. Now when it looks like this will happen we rename the
glyph.
<LI>
Uninitialized variable in dependant sub-menu (broken by encoding change)
<LI>
Pasting a reference into a font which did not contain the referred glyph
did not give you the option of copying the original outlines any more. (broken
by the encoding change)
<LI>
Merging fonts where glyphs had multiple encodings caused crashes.
<LI>
I'm very old fashioned. I like having error messages on stderr. But far too
many people don't see them there. I guess they invoke fontforge directly
from X with stderr directed to some invisible console window. Well create
a little window to contain warning messages about font errors (for instance
when reading an otf font we might complain about glyphs out of bounds, etc.)
<LI>
Add support for postscript bitmap fonts. This means:
<UL>
<LI>
Ability to parse (simple forms of) the imagemask ps operator
<LI>
Code to detect that a type3 is a ps bitmap, and convert it into a normal
bitmap font that people can edit.
<LI>
Bitmap output as a ps type3 font (using imagemask)
<LI>
Fixing a bug in my output routines which worked fine for images in eps files,
but failed horribly if that same code was stuffed into a charproc and executed
on demand.
</UL>
<LI>
<LI>
ff could not handle an encoding specified as a simple array. (Not allowed
in typ e1 spec, but obvious for a type3)
<LI>
And ff's handling of any type3s was broken by the encoding patch.
<LI>
If a font contained fewer than 256 glyphs, then ff failed to load a format0
cmap subtable properly.
</UL>
<LI>
4-Sept-2005
<UL>
<LI>
In fontinfo, changed the tab "TTF Values" to be "OS/2", consolidated the
Panose tab underneath it. Added many more fields, almost all of OS/2.
<LI>
Fixed a number of uninitialized variables, at the instigation of Pavel Roskin.
<LI>
Applied several patches from Pavel Roskin.
<LI>
The scripting WorthOutputting command insisted on an argument, even when
it should not have.
<LI>
Scripting SetCharCnt command has been broken since the encoding change.
</UL>
<LI>
31-August-2005
<UL>
<LI>
The mac fix for 25-Aug wasn't quite enough.
<LI>
I used to maintain a hidden value of the os2 linegap. This didn't change
when users set linegap with font info, leaving users annoyed.
<LI>
It used to be that both the Hint->Add Hint and Hint->Create Hint commands
would destroy all hint masks. Now we update those hint masks appropriately.
<LI>
The "Original" encoding was broken, and reencoding to it gaves us 256 blank
glyphs before glyph0. Sigh.
<LI>
The CodeRange bit for symbol doesn't mean the font contains any standard
set of "symbol" glyphs, but rather either that it has a 3,0 cmap sub-table,
or that there are glyphs mapped to 0xf000-0xf0ff in the 3,1 (unicode) sub-table.
<P>
Setting this bit should give you a symbol encoding as well as all the other
encodings you've set bits for. It doesn't work under windows. It doesn't
work. TrueType fonts do not provide a symbol encoding, while 'CFF ' fonts
only provide a symbol encoding. But hey, let's support it anyway!
<P>
change View->Goto to know about this range as MS Symbol.
<LI>
Importing an eps file (or pasting the x clipboard) made use of an uninitialized
variable. (introduced 7-Aug)
<LI>
Cleanup pasting references from one font to another (gave some very strange
results when pasting refs with no unicode encodings).
</UL>
<LI>
25-August-2005
<UL>
<LI>
Recode the mac resource fork routines so that they no longer use the FSSpec
structure. 10.4 complains about it.
<LI>
Bug in mm font charstring generation.
<LI>
If a font contained mac feature setting names, then when ff generated it,
ff would produce duplicate entries in the 'name' table for these guys. One
for the name in the font itself, and one for the name ff thought that feature
setting should have.
<LI>
Nobody else puts apple unicode names into the 'name' table so I probably
should not either. Adobe says one should not. Apple's website implies one
should -- but Apple doesn't and its ttf website is not very accurate.
<LI>
When ff generated a ttf/otf font with applemode set and opentype off then
the font would have version 'true'. Which means windows would reject it.
That's probably not a good idea given that this situation is default on the
mac -- even if we don't have a GSUB/GPOS table we should at least let the
glyphs show on windows.
<P>
On the other hand some people might want to make fonts that only work on
macs. So add a configure flag.
<LI>
ff couldn't undo changing the lig carets (if it weren't compiled for multilayer)
<LI>
Copying a pairwise positioning left memory in a bad state.
<LI>
Coalesce all lookups with the same feature & script lang. This makes
ATM happy about kerning on windows.
<LI>
When rasterizing a multilayer font we would sometimes get warnings from the
stroker about how the stroke self-intersected. Get rid of those warnings.
<LI>
Pasting from a multilayered font into a normal one crashed
<LI>
If an order2 font were turned into a PS font, then characters with hint conflicts
got no hints.
<LI>
Makers of fonts on the mac often use out of bound GIDs as flags in contextual
su bstitutions. What I have seen is that one sub-table will insert such a
"glyph" w hen a match is found, and then the next sub table will remove the
flag, and perf orm subsequent transformations. This is important on the mac
because there is a limited number of substitutions that can happen once a
match is found, but if a match is found at the start (ie. the match being
some magic marker glyph) then u nlimited substitutions are available. When
ff first stumbled on these fonts it crashed, then it treated a gid>glyph_cn
t as an error (and so it ignored the substitution). I've just put in code
that c reates dummy glyphs for all these bizarre GIDs so (I hope) the font
will work af ter passing through ff (only there will be some real blank glyphs
at the end of the font rather than vaper-ware glyphs).
<LI>
The Active Hints pane (of Point Info) didn't always work if a glyph had more
than one contour.
<LI>
Be more canny in the use of subroutines for references in type1/2 output.
<LI>
When generating contextual lookups, ff did not set the lookup count between
gpos and gsub. So if a font had both contextual gpos & gsub elements
ff got confused.
<LI>
The code for cff encodings (ie. in bare cff non-cid fonts) didn't handle
multiply encoded glyphs
<LI>
Change the default color of the prev control point (so it's easier for me
to see)
</UL>
<LI>
11-August-2005
<UL>
<LI>
The configure script did not find libfreetype when it lived (solely) in
/usr/X11R6/libs
<LI>
On the Mac, menus incorrectly suggested using Cmd rather than Ctl. (Cmd used
to work on earlier versions of the X server, but now it is snagged by the
X11 menubar itself.)
<LI>
ff uses the Alt/Meta key to alter the behavior of some tools (magnify, ruler,
pointer, pencil, etc.) in the editing windows. This doesn't work well on
the mac. First there is no real Alt/Meta key. If we contemplate using Option
or Command it will generally already be used to turn the single button mouse
into a three button mouse (Option - mouse => button 2, Command - mouse
=> button 3). So instead use the CapsLock key.
</UL>
<LI>
9-August-2005
<UL>
<LI>
The big5 encoding stopped at 64000, which confused routines which expected
unencoded glyphs to start at 65536.
<LI>
We would crash when reencoding a font with enough unencoded alternate unicode
code points.
<LI>
The code for creating an 8/16 cmap subtable didn't work.
<LI>
ff would crash if it had two windows open on the same font and one got reencoded
<LI>
Didn't set the length of the format4 'cmap' sub-table, so the offset to the
format12 (32bit unicode) table was wrong.
<LI>
ttfcopyfile can complain about a ttf table offset being wrong. Give it the
info so that it will now tell us which table has the wrong offset.
<LI>
Uninitialized variable in metricsview when creating a popup window.
<LI>
Redo the ttfnames pane of the font info dlg. Now show the names as an editable
list.
<LI>
Histogram dlg still used wrong encodings for selected glyphs when historgrams
invoked from Hints menu.
</UL>
<LI>
7-August-2005
<UL>
<LI>
SelectIf failed when passed an encoding which was out of bounds
<LI>
Added a new scripting command: ToString
<LI>
Using the X clipboard to paste a glyph into a glyph that contained stuff
caused a crash.
<LI>
Using the X clipboard to paste a glyph with references or with multilayer
did no t work.
<LI>
None of ttf, otf nor svg got multiply encoded glyphs output properly.
<LI>
FF screwed up memory when creating ligatures from an svg font.
<LI>
Merge fonts was writing to bad memory.
<LI>
FF was confused by a strange MM font
<LI>
FindExistingSlot should understand altuni.
<LI>
Font View didn't display current unicode of multiply encoded glyphs. (same
for popups).
<LI>
Still having problems generating type1 code for complicated reference glyphs.
<LI>
Retain knowlege of multiple unicode encodings for some glyphs. Used when
a glyph has multiple encodings and is reencoded.
<LI>
Add back an option to compact an encoding. It's not the same as the old compact
which kept track of the former encoding. This just compacts, user must explicitly
reencode.
<LI>
Force encoding didn't work if the new encoding had more slots than the old.
<LI>
FF also failed to parse glyph based contextual lookups properly
</UL>
<LI>
3-August-2005
<UL>
<LI>
FF failed to parse class based contextual lookups properly (contextual chaining
lookups were ok)
</UL>
<LI>
2-August-2005
<UL>
<LI>
<FONT COLOR="Red"><STRONG><BIG>The OS/2 ulCodeRanges field has been broken
for a long time, and has failed to mark the presence of any latin code
pages.</BIG></STRONG></FONT>
<LI>
The ulCodeRanges field never set Vietnamese, TradChinese, Mac nor PC OEM
<LI>
FF did not support EUC-CN, ISO-2022-CN, ISO=2022-KR iconv encodings properly.
<LI>
Work around a bug in iconv's support for CP1258
<LI>
Put some code in to warn users about unknown language/locales in the ttf
'name' table.
<LI>
Enter some new language/locale codes for ms.
<LI>
Crash when moving the end of an open path in an order2 font.
<LI>
If one loaded an encoding specified by codepoint and then cancelled the dlg
which asked for a name for that encoding, then ff would crash.
<LI>
Don't use Adobe's glyphnames when they are obviously wrong (use uni???? instead)
<LI>
Add (better) support for the new dotlessj
<LI>
Put a check into the context chain dlg to make sure that people don't add
sequence/lookup pairs where the sequence number is too big.
<LI>
Make class be the default format for contextual/chaining substitutions rather
than coverage tables.
<LI>
<FONT COLOR="Red"><STRONG><BIG>The format of the LineBreak.txt file changed
with Unicode 4.1, so all the line break info is wrong (essentially lines
never broke in text fields).</BIG></STRONG></FONT>
<LI>
Reference to bad memory when creating a popup in combinations list.
<LI>
Still problems in the 'name' table when Mac & Mac Unicode strings don't
match.
<LI>
Use of the X clipboard for transfering glyphs resulted in a crash
<LI>
When generating an old-style 'kern' table (either OpenType nor Apple modes
set) decompose all kerning classes into kern pairs as we do for AFM files.
<LI>
Scripting didn't have a way to generate a font with neither Apple nor OpenType
tables. Add one.
<LI>
Oops. wrong default extension for otb fonts from scripts.
<LI>
Fix some potential crashes where loading font types left a new field unset.
</UL>
<LI>
28-July-2005
<UL>
<LI>
<FONT COLOR="Red"><STRONG><BIG>Redesigned the way encodings are handled.
From the user's perspective Encodings are no longer controlled by FontInfo,
but via an encoding menu.</BIG></STRONG></FONT>
<LI>
If we create a bitmap strike in an empty font then change the fontview to
look at the strike.
<LI>
The SetWidth command of FontView produced garbage defaults for empty fonts
<LI>
Don't set the hinting needed bit on: bitmap only fonts, multilayered fonts,
stroked fonts nor quadratic fonts.
<LI>
Fix some problems with the generated names in File->Generate multiple
<LI>
The Save command failed to reset the font window's title (so it still looked
modified)
<LI>
The enabled state of Encoding->Detach Glyphs was wrong
<LI>
FF still didn't allow two ligatures to be created for the same glyph (ie.
it complained if you tried to make both "f + f + i => ffi" and "ff + i
=> ffi"
<LI>
Added a TypeOf command to scripting
<LI>
Added a GetPosSub command to scripting.
<LI>
Werner says negative widths and depths be set to 0 in tfm files.
<LI>
FontForge was generating an incorrect warning message. If a 'name' table
contains a duplicate entry for a given platform/specific/language/id that's
an error in the font. But ff conflated mac names with window names and so
was only checking language/id. So if the mac windows names were different
(which is probably a bad design idea, but not an error) ff said it was wrong.
It can also be caused by using a character in the string which is not in
the Mac Encoding for that language.
<LI>
Don't set "Hinting needed" flag in bitmap only fonts.
<LI>
AutoHint had a crash if there were open contours in a glyph being hinted.
<LI>
Add a couple of browsers to the list to check by default.
<LI>
Using the kerning pair closeup dlg to create a new kerning pair caused a
crash (eventually).
<LI>
When saving a block of ttf bitmap glyphs all with about the same metrics,
<LI>
Kern pairs were not scaled to emsize when loading from an afm file.
<LI>
Add a series of new selection commands, to the font view and to scripting:
<UL>
<LI>
SelectChangedGlyphs
<LI>
SelectHintingNeeded
</UL>
<P>
(just to scripting)
<UL>
<LI>
SelectSingletons
<LI>
SelectMoreSingletons
<LI>
SelectFewerSingletons
</UL>
<LI>
Revert Glyph didn't work. One bug caused by multilayer, one caused by encoding
changes, and one really old one.
<LI>
GetFontNames returned an uninitialized value on bad ttf files.
<LI>
Add some new scripting commands to access the TeX per-glyph fields.
<LI>
Werner suggested some improvements to tfm output.
<LI>
Cleanup behavior of generating ttf bitmaps in a script.
<LI>
I was attaching script/langs to lookups when parsing GPOS/GSUB. That wasn't
good enough. Each sub-table and have it's own set, so attach script/langs
to subtables as well. Still a flaw in that sub-tables could be referenced
through severel extension sub-tables or directly and I don't unravel that
complexity until too late.
<LI>
ATM which handles some kerning for otf fonts for Word, does not handle 'kern'
features where the feature contains more than one lookup. So whenever we
have a feature with multiple lookups try to compress them into one lookup
with multiple sub-tables.
<LI>
Transform (in fontview) and Scale To Em do not scale the vertical advance.
<LI>
We didn't test the right thing when deciding where a subroutine containing
refs began.
<LI>
Remove Undoes was broken by the encoding changes.
<LI>
When saving multiple, make sure we don't get extraneous kerns. (to glyphs
not in the current sub-font).
<LI>
Make sure the blue lines (marking hints needing to be updated) get cleared
properly.
<LI>
Some display problems in the SameGlyphAs command.
<LI>
The Apply Substitutions code did not consider the possibility of loops:<BR>
a->b->c->d->a
<LI>
Werner suggests indicating multi-layer in the version string.
<LI>
Mark to Mark anchor classes should allow each mark glyph also to contain
a base mark entry.
<LI>
Give unicode name data (in grey) for dotted names. (ie for A.super give unicode
name data for "A", but in grey so it stands out as modified).
<LI>
Add scripting routines to detach glyphs from the encoding and to remove them
from the font.
<LI>
FF produced some very strange 'gasp' tables... depending on the bitmap fonts
in the sfd and not on the bitmaps in the output ttf for one thing.
<LI>
Werner wants an Invert Selection command.
<LI>
The position of Coptic and Glagolithic has been shifted in Unicode 4.1 (shifted
from some earlier proposal).
<LI>
Patch by KANOU, ttc files were broken.
<LI>
Some english language strings in the ttfnames pane of fontinfo where sort
of bound to equivalent fields in the names pane. Make this clearer, and
consistent.
<LI>
Werner thinks my error messages for scripts should be improved.
<LI>
Add a check in case sfd files contain unreasonable values for pixelsize,
etc.
<LI>
Werner suggests a --dry <scriptfile> argument which does syntax checking
without actually executing the script. I think it is trivial.
<LI>
Werner points out that the DSC Version comment has a very specific syntax:<BR>
%%Version: <version> <revision><BR>
<version> is a real, <revision> is a uint. So we can't use the
font's version string here (which might be anything). Instead we now generate
a version comment<BR>
%Version: <string><BR>
rather than a DSC Comment.
<LI>
We used to assign a unicode value to ".notdef"s when reading ps encoding
file, if the encoding was in the region of control chars (so location 1 would
get uni0001, while location 65 would get -1). Seems inconsistent.
<LI>
Oops. I failed to provide a mechanism to add other iconv encoding names into
my menu.
<LI>
Code to support group display.
<LI>
Was not reading ps encoding files properly.
<LI>
Remove encoding should always be available.
</UL>
<LI>
19-July-2005
<UL>
<LI>
Extend to Unicode 4.1
<LI>
Change to configuration system to allow relative pathspecs for
--with-freetype-src didn't work.
<LI>
Context chain dlg had problems with empty patterns (no terminal NUL in empty
string used to represent them)
<LI>
The [EditData] button in contextual fontinfo pane was disabled due to reasons
which are no longer valid..
<LI>
Transforming by a negative scale factor screwed up the hints.
<LI>
Add move up/down buttons to the kerning class dlg (class lists area) Use
the selection from the class lists to highlight offsets.
<LI>
Print sample did not handle kerning by classes.
<LI>
When we had: a glyph which contained refs where that glyph was itself used
as a reference in another glyph and all glyphs (except the last) lived in
subroutines then we got multiple declarations of hints and the middle glyph
was translated from where it should have been.
<LI>
When changing lists they should not scroll back to the beginning.
<LI>
Various fixes regarding hints: changing hints should set the char changed
flag changing a glyph should mark all glyphs that refer to it as having out
of date hints display out of date hints in font view. hints weren't being
preserved (and should have been) in charview in Paste and transform.
<LI>
Apply Substitutions was badly broken when ff compiled with multilayer.
<LI>
Kern Pair dlg looked at garbage memory when it closed (and crashed sometimes).
<LI>
ff decides whether to add a 'gasp' table to a font based on whether the font
has instructions or not. ff's own ttf fonts contain instructions in .notdef
but nowhere else, so ignore .notdef when making this check.
<LI>
One more attempt to rule out absurd results in simplify().
<LI>
if the lsb/rsb dlg was given a negative value it complained about negative
widths. (whether the width would have been negative or not).
<LI>
$italicangle has been broken since I added reals to scripting.
<LI>
The kernclass dialog did not handle deleted classes properly.
<LI>
Add ability to undo hints.
<LI>
Once again starting a browser on windows is broken.
<LI>
We didn't do a bounds check when indexing into the names array of an encoding
(when building a character from scratch). If the index was huge the result
was garbage, generally leading to a crash sometime thereafter.
<LI>
An open path consisting of a single point caused replace with reference to
crash.
<LI>
Generating a postscript resource font on the mac from a script did not work.
<LI>
Werner points out that afm files generated by FontForge still claim to have
been made by pfaedit. Oops.
<LI>
Didn't parse user defined encodings properly and often omitted the first
glyph.
</UL>
<LI>
24-June-2005
<UL>
<LI>
Improvements in the way type42 fonts where handled in printing.
<LI>
Fix a crash when parsing mangled cff files
<LI>
Marvelous triple bug:
<UL>
<LI>
Adobe's Tech Note 5176 (cff format) says that a private dict is required.
They mean it's required in a type1 font.
<LI>
Because of this I put a null private dict entry into my cid cff fonts.
<LI>
ghostview finds the null private dict entry and tries to read data from it
even though it is of 0 length.
</UL>
<LI>
Add postscript code necessary for loading a cff font to my cff font output.
<LI>
Fix some uninitialized variables in the display dlg.
<LI>
We didn't get DSC pages properly when printing a CID keyed font.
<LI>
The default (notdef) glyph generated by my palm output routines was a little
wonky.
<LI>
The rle image reader in my sfd routines had an off by one error causing it
to reject some images.
<LI>
We used to munch memory when loading empty glyphs from mac NFNT resources.
<LI>
It used to be that we didn't set the default background until the first font
view window was opened. This meant that if we loaded a grey scale bitmap
before opening a window (ie. from the command line) then that bitmap's clut
would be relative to white rather than the appropriate background.
<LI>
Add some code to protect against badly generated bitmap strikes in sfnts.
<LI>
vhea & vmtx tables were generally wrong in otf fonts (unless the last
full vmetric happened to be the last full hmetric). Also fix problems with
cid hmtx output.
<LI>
The sfd reader looked in the wrong place for sli information in cid keyed
fonts.
<LI>
Damn. Default output (for stdout) encoding never gets initialized when in
a script.
<LI>
I realized a few months ago that there is a difference between encodings
based on names and encoding based on unicode codepoints. Unfortunately I
was only saving encodings as though they were based on names (generating
default names if necessary). This patch retains the distinction even when
encodings are saved to the preferences folder.
<LI>
AddAccent behaved differently when passed a glyphname and a unicode code
point. In the first case it used the glyph specified. In the second it performed
an arcane search which would not always use the specified glyph (left over
from the days when it was important to use a glyph in Adobe Standard so you
could do a seac).
<LI>
When debugging composite glyphs ff failed to notice when we switched from
one glyph to another and so failed to reset the instruction list to those
of the new glyph.
<LI>
Problem with cubic to quadratic spline approximation. Fixed by a more careful
comparison between original and resulting spline.
<LI>
Kerning (and Anchor positioning) didn't work when printing to pdf.
<LI>
Won-kyu Park points out that ff's internal utf7 parser (deep in the guts
of sfd.c) only parses utf7 strings as produced by ff. He took a utf7 string
produced by python and inserted it and ff could not read it. He provides
a patch to fix the problem.
<LI>
If we got an invalid second order spline, let's fix it up into some vaguely
reasonable form, so the poor user doesn't keep getting errors.
<LI>
Extra "-" in type42 header removed.
<LI>
The anchor dialog was all screwed up.
<LI>
The test in show att that all components of a substitution existed failed
to handle a trailing space.
<LI>
Make page Up/Down work in Show ATT
<LI>
Sometimes the simplify algorithem fails to converge.
<LI>
When generating a tfm file the width (height, depth, ic) table was being
scaled twice.
<LI>
Remove a NaN that occurred when moving quadratic splines.
<LI>
Oops. The unicode code point of a glyph was restricted to BMP by Glyph Info
dlg.
<LI>
Werner gave me a font where the glyphs were not properly ordered. So you
can't tell the length of a glyph by loca[i+1]-loca[i]. The data appear valid
in spite of that. So put in a warning for this particular case (we were
generating a warning, but it wasn't as meaningful as it might be.)
<LI>
Make View->Show ATT aware of the mark attachment class info so it can
show the classes.
<LI>
When interpolating to quadratic fonts where the two designs didn't match
then the various possible errors gave us bad splines: Different numbers of
points on the paths meant that the control points at the end (after we reached
the end of the contour in one design but not the other) didn't match. Different
designs meant that interpolating a line (with no control points) to a curved
spline again produced nasties.
<LI>
Drag and drop was broken.
<LI>
Extend lookup flags support to include mark attachment classes (as defined
in GDEF).
<LI>
Bad argument type checking on the AddAccent scripting command.
<LI>
Infinite loop in a rare case involving a flex hint at the start of a contour.
<LI>
The merge fonts command would crash.
<LI>
Problems parsing some bare cff fonts.
</UL>
<LI>
2-May-2005
<UL>
<LI>
Add support for Mark Classes.
<UL>
<LI>
New pane in Font Info to create them
<LI>
New field in the feature tag dlg to use them
<LI>
Input/Output routines
</UL>
<LI>
Drag and drop was broken
<LI>
Infinite loop in some bizarre cases when generating a hinted opentype font.
<LI>
The Merge Fonts command was broken
<LI>
The scripting command: AddAccent checked for the wrong argument type
<LI>
ff generated an error when loading some bare cff fonts.
<LI>
Store desired fontview sizes in prefs file
<LI>
Add a tweak to make the mac's dynamic loader look for fink libraries
<LI>
Problems parsing bare cff cid-keyed fonts
<LI>
recognize that code page 932 is a variant of SJIS
<LI>
The feature tag 'nutf' is an obsolete name for 'afrc'
<LI>
Add a couple of new scripting functions
<UL>
<LI>
Int() which casts its real/int/unicode argument to int
<LI>
UCodePoint() which casts its real/int/unicode argument to unicode
</UL>
<LI>
scripting CharInfo no longer creates the glyph it is asked about
<LI>
WorthOutputting/DrawsSomething can now be applied to the current selection
<LI>
When using the freetype rasterizer don't do an automatic close of open paths.
<LI>
For SCWorthOutputting I used to check both that !widthset and width==em-size.
Remove the em-size check, should be redundant and somethimes (marks) is wrong.
<LI>
The various FindBounds routines didn't pad stroked fonts appropriately
<LI>
Discrepency in docs and code on spelling of scripting Auto[tT]race command.
Accept both variants
<LI>
A debug statement was left in the ps interpreter
<LI>
Make the help command look for japanese docs in the ja locale
<LI>
Add a select fewer scripting command
<LI>
Fix some problems with custom encodings
<LI>
Support '\r' and '\r\n' as line-endings for backslash continuation
<LI>
New version of Japanese UI
<LI>
The kerning pair dlg would sometimes fail to display a pair when searching
on the second char of the pair.
<LI>
Danish translation of some style names, courtesy of Anders Lund
<LI>
Fix some problems with SJIS encoding
<LI>
The point info dlg was quite unusable if you typed in somethng which wasn't
a number
<LI>
When in debug mode display pointer position in pixels
<LI>
Point Info had problems with order2 splines
<LI>
The instruction pane of the debug window was interpretting keystrokes it
should not have
<LI>
Peter Selinger has changed the way potrace is built so it no longer uses
cygwin (it uses MinGW instead). This means ff can't pass it the name of a
temp file as '/tmp/foo' because (on windows) /tmp is a cygwin fiction. So
continue to put the file on cygwin's /tmp, but cd to that directory and then
pass the bare filename.
<LI>
Add some more greek PUA small caps
<LI>
Add scroll bars to debug windows which lacked them
<LI>
Add a gloss window which explains what a ttf instruction is going to use
and what it is going to do.
<LI>
Was using the wrong accent to build cyrillic breves.
<LI>
Remove the adobe private use defs from libgunicode and put them in fontforge.
<LI>
ff had problems reading pfm files containing kerning pairs using non-existant
chars
<LI>
Add pixels per em in register view.
<LI>
No contours in twilight zone
<LI>
When generating tt fonts we did not set bit 8 in 'head'.Flags. This gives
bad results when ppem is not an integer
<LI>
When reencoding to adobe standard (or any encoding where glyph names are
more important than code points) make sure we use glyph names rather than
code points (so "f_i" is not in AdobeStd while "fi" is. But they map to the
same code point).
<LI>
When creating a debug window in a glyph with no instructions (or in which
'gasp' has turned off hinting) we used not to rasterize it.
<LI>
Script/lang count was wrong in a number of places
<LI>
Oops, the transform dlg and menu both used the "round to int" string. Then
I changed what it looked like in the menu, a change which is not appropriate
for the transform dlg. Add a new string just for the dlg.
<LI>
Tavmjong Bah added something to the "ypogegrammeni" list.
<LI>
Fix problems with multiple text fields in the same window all wanting input
contexts (for input methods).
<LI>
We generated ligature code in morx for ligatures that were not worth outputting.
<LI>
Pierre Hanser points out that a recent change to SetWidth broke the scritping
SetWidth command.
<LI>
Yet more effort to remove rounding errors from remove overlap. If a control
point causes a slight overshoot we get an unexpected extremum very close
to one of the endpoints. If it's close enough this can cause problems. Tweak
cps so this does not happen
<LI>
Solaris stores isnan & friends in ieeefp.h not in math.h
<LI>
Add scripting access to standard math functions (trig, exp log)
<LI>
Unary minus didn't work on reals
<LI>
The recalculate bitmaps button in bitmap view was getting munched when we
updated the cursor position.
<LI>
CharInfo("BBox") returned gibberish
</UL>
<LI>
9-Mar-2005
<UL>
<LI>
Deleting a glyph class within a kerning by classes object caused a crash
<LI>
Added some support for palm bitmap fonts
<LI>
Replace with reference only replaced the first instance.
<LI>
The Options dlg behaved oddly with respect to Apple & OpenType modes
<LI>
When given a glyph with conflicting hints for which the first contour contained
no hints, then in type2 output the glyph was drawn at a strange offset from
its correct position.
<LI>
When generating an opentype font from a script, and specifying flags, the
round coordinates flag was ignored
<LI>
When generating a font from a script using the default flag setting, we would
always generate afm/tfm/pfm files
<LI>
KANOU pointed out that the stroked font import glyph command only worked
if multilayer set.
<LI>
Added a preview bitmap to eps files.
<LI>
In a bitmap only font the font metrics menu items behaved in unexpected ways
(as if they referred to a postscript font rather than the bitmap fonts)
<LI>
Various fixes to make importing stroked eps files into stroked fonts work
better.
<LI>
KANOU requests a preference item to turn off use of freetype in font view.
<LI>
Fix more rounding errors in remove overlap.
<LI>
Fix some problems in the routine which finds roots of an arbetrary quartic.
<LI>
The remove bump option of simplify could screw up memory.
<LI>
Remove overlap got unhappy about control points which caused a very tiny
overlap between adjacent splines
<LI>
Redo from the fontview usually caused a crash.
<LI>
KANOU provides a MakeLine scripting command
<LI>
If TYPE3 (multilayer) was not enabled, there was a flow of control through
a function which did not return anything.
<LI>
Recovery files did not contain multilayer marks which lead to strange behavior
and crashes
<LI>
Converting a font to multilayer caused a crash if there were outline glyph
windows open.
<LI>
Make the encoding for scripts be utf8 consistently
<LI>
Allow the scripting Export command to take a format spec
<LI>
Add support for reals to the scripting language
<LI>
NearlyHv{Cps,Lines} scripting commands erroneously complained about too many
args
<LI>
ff had a bug when outputting otf contextual ligatures
<LI>
Fix various crashes and infinite loops involved in parsing bad font files.
<LI>
ff had problems with user defined encodings.
<LI>
Made ff work if the psuedo-type "real" was defined to be a double.
<LI>
the string += concattonation operator in scripting screwed up memory
<LI>
Problems with -c <arg> syntax
<LI>
The font type detector could fail to notice an svg file as such if it began
with a byte order character.
<LI>
Ord didn't do proper type checking on its second argument
</UL>
<LI>
9-Feb-2005
<UL>
<LI>
Use freetype's FT_Outline_Get_Bitmap to make freetype rasterize from our
internal data structures. Use freetype by default for the fontview and
metricsview (except in some cases).
<LI>
The bitmap dlg didn't work for multilayered fonts when told to use freetype
to rasterize.
<LI>
If we had a contour nested inside another, and did an Overlap Exclude with
the nested contour selected, then that contour was not excluded.
<LI>
The []Correct Direction check box when importing PostScript, didn't do anything.
(or rather it did, but got overrulled later)
<LI>
In bitmap only fonts, bitmaps created without moving the width line would
get lost.
<LI>
Added a scripting command "SelectByColor"
<LI>
Don't apply transformations to glyphs which aren't worth outputting
<LI>
Moving control points with the get point info command had problems in quadratic
splines.
<LI>
When adding type42 support I broke multiple master support.
<LI>
Werner provided a patch to add a trailing newline to my type1 fonts.
<LI>
Support for PaintType==2 and stroked fonts.
<LI>
Various problems with the clustering command
<LI>
Oops, somehow a patch reverted and things didn't work on systems without
iconv
<LI>
worked on a couple of other configuration problems for the mac
<LI>
Some people install libraries without headers. Be prepared.
<LI>
Uniscribe (MS unicode text layout routines) may ignore either the GPOS or
the GSUB table depending on the script, and may even refuse to use the font
at all if it doesn't have the right stuff in GPOS/GSUB. A Hebrew font must
have both a GPOS and a GSUB. If it doesn't the font is not used. A latin
font need not have either, but if it doesn't have GSUB then GPOS won't be
used.
<P>
So the script sub-table of both GPOS/GSUB should contain all scripts used
in either (rather than just the scripts used in the current one).
<LI>
The AddATT scripting command didn't understand Nested.
<LI>
Add a cli argument "-c" to introduce a scripting command in an argument.
<LI>
Someone ran ff on a solaris box without iconv. (Odd because iconv is there
by default). FF ran fine (Odder, why didn't it demand the library?), but
crashed when it tried to use a conversion which didn't exist.
<LI>
There's another ASCII map in Unicode (0xe0000-0xe007f).
<LI>
Allow user to supply their own OtherSubrs routines (Some people object to
Adobe's copyright).
<LI>
Codes to handle identifying a loaded font by relative filespec didn't work.
<LI>
Change Add Extrema so that it only adds extrema if
<OL>
<LI>
The spline length is >= em_size/32
<LI>
The extremum is an extremum of the entire contour containing the spline.
</OL>
<P>
(Behavior in the outline view when there is a selection remains the same.
So if the endpoints of a spline are both selected then all local extrema
will be added to that spline, no matter how long it may be).
<LI>
Patch by Ralf Stubner. Fonts without UniqueID had a bad syntax.
</UL>
<LI>
17-Jan-2005
<UL>
<LI>
CapsLock now makes the arrow keys scroll in the outline view
<LI>
We lost count of hints when generating type2 fonts in glyphs with references
to something containing hints which did not overlap. If we were unlucky,
<new-cnt+7>/8 was different than <real-cnt+7>/8 and we ended
up with garbage in the charstring.
<LI>
Add a TeX table to contain TeX metrics.
<LI>
TFM output was wrong. the TFtoPL doc says "
<LI>
reencoding with original encoding could create a glyph table one too small
resulting in writing/reading garbage and an eventual crash.
<LI>
KANOU fixed a couple of problems in reading glyph names from bdf fonts.
<LI>
KANOU needed to disambiguate between "Point" a unit of measurement and "Point"
a geometric object.
</UL>
<LI>
16-Jan-2005
<UL>
<LI>
Added support for OpenType Device Tables (These allow you to add small
corrections to things like kerning at a given point size. Often at small
point sizes kerning and advance widths will round in such a way as to produce
unpleasing results. Device tables allow you to correct for that).
<LI>
Add dialogs for kerning pairs and anchors to allow users to set device tables.
Extend dlg for kerning classes for this.
<LI>
Neil Parker suggested a patch for panose values that didn't apply to latin
fonts
<LI>
Doing a Get Info on a single point caused a crash on the mac
<LI>
Further attempts to improve spline approximation, underlying Merge &
Simplify commands
<LI>
Relaxed simplify's definition of parallel so it will merge a few more straight
lines.
<LI>
Make the behavior of Simplify More consistant across font/outline view. Simplify
More can now set the default behavior for future simplify commands.
<LI>
Provide a menu command to round to hundredths of a em-unit
<LI>
Add a new facility to cluster coordinates to the same value. Useful as a
prepass to Remove Overlap.
<LI>
Bug reading ligature data from a tfm file
<LI>
Add support for GPOS 'size' feature. Create a 'size' pane of the fontinfo
dlg
<LI>
Replace with Reference had an interesting flaw. Consider the open and closed
bullet characters. If the (single) contour in closed bullet matched the outer
contour in open bullet then it would replace it with a reference. But this
is incorrect as the two contours of open bullet need to be treated as a unit.
<LI>
Could get a bad memory reference in the font view if the mouse were to extend
the selection outside of the window.
<LI>
Add a scripting function to return whether a file exists.
<LI>
In a Type1 font, if a glyph had no conflicting hints (and no flex hints)
and got put in a subroutine, then we'd get no hints at all.
<LI>
Be more willing to generate format12 cmap subtables (unicode, non-bmp tables)
</UL>
<LI>
6-Jan-2005
<UL>
<LI>
New Copyright message, etc. Get rid of pfaedit message.
<LI>
Simplify produced strange results on quadratic splines.
<LI>
Simplify had problems with tangent points
<LI>
Changing a point's type from a tangent to a curve usually had unexpected
results.
<LI>
Add a warning message in remove overlap when user passes us two intersecting
contours which are oriented in oposite directions. Unfortunately it also
complains about some other things.
<LI>
The 18 Dec changes to remove overlap introduced an infinite loop in some
rare cases. (When there is a gradient of 0 in distance function between two
splines).
<LI>
In a conditional operator (like && or ||) in scripting where the
second operand was not evaluated and the second operand contained a procedure
call, then ff would crash
<LI>
Tweaked the point info dialog to show small offsets better
<LI>
Tweaked the merge command to behave better when merging tiny spline segments
(where the length of the spline segment is so small that it should just be
treated as a zero length spline and its slope ignored).
<LI>
Added an "Invert selection" command to the outline view, from Yoshiki Hayashi
<LI>
Pasting from the font view did not clear a glyph's instructions.
<LI>
New version of AutoHint. I've removed Diagonal Stem hints and mimum distance
hints for now.
</UL>
<LI>
31-Dec-2004
<UL>
<LI>
Ah, windows pfm files expect the metrics to be output in win latin encoding
order, not in the encoding defined by the pfb file. (Actually there are other
posibilities for encoding, but as none is documented, I must ignore them).
<LI>
ReplaceWithReference broke at some point
<LI>
Add an argument-pair to the ReplaceWithReference() scripting command to allow
the user to specify the amount of error that will be accepted.
<LI>
When generating a Type1 font, if a glyph had a single reference to a glyph
not in adobe encoding, and that glyph itself had a single reference (in adobe
enc) and some splines, then ff would make a reference to the ref in adobe
enc and ignore the splines.
<LI>
Upgrade to Adobe-Japan1-6
<LI>
Various fixes to svg output
<UL>
<LI>
export glyph to svg didn't work
<LI>
multilayered generation had problems
</UL>
<LI>
Ghost hints could get outside a glyphs bounding box in a type2 font.
<LI>
The generated truetype unique id string had an off by one error in the month
<LI>
Add support for dashed lines in multilayered mode
<LI>
In Full Page Glyph printing, the glyph was offset slightly from where it
should have been.
<LI>
Pasting a reference into a multi-layered font produced a very odd layer
<LI>
ff didn't update the metrics view if the user pasted the selection with the
middle mouse button.
<LI>
if a character were not in the current encoding then ff would not display
it in the metrics view (even if it were in the font)
<LI>
Make the behavior of control points at the ends of open paths more reasonable.
<LI>
The Point->Curve command did not adust control points correctly.
<LI>
The View->Display Substitutions had numerous problems.
<LI>
Fix several problems from unicode unification of accents. Many characters
which are said to be based on cedilla actually use a comma, other characters
said to be carons also use comma. Make the n-with-apostrophe character be
treated as an accented letter.
<LI>
Werner points out that straight lines should generally not be simplified
(as they will no longer be straight afterwards). Add this knowledge to the
simplify command.
</UL>
<LI>
18-Dec-2004
<UL>
<LI>
Added a raster debugger wndow
<LI>
Each time debugger starts, remember what debug windows were open last time
it was used.
<LI>
Constraining the pen tool did not do what I expected
<LI>
If a glyph was encoded twice (or more) in a font, and an opentype font (or
perhaps a bitmap only sfnt) were generated, then any glyphs after the second
encoding would have the wrong width (ie. there would be an extra entry in
the horizontal metrics table corresponding to a (non-existant) copy of the
doubly encoded glyph)
<LI>
If a type1 font never defined .notdef but used it at least twice it the Encoding
vector, then ff would crash.
<LI>
Updated Japanese UI (by KANOU)
<LI>
Werner found some crashes related to calling isalnum (etc.) using an index
outside of bmp.
<LI>
More changes (I hope improvements) to remove overlap
</UL>
<LI>
13-Dec-2004
<UL>
<LI>
Some fixes to the raster display of the debug window
<LI>
Conversion of cubic to quadratic had a rounding error introduced by -O2.
Made it a bit more forgiving about rounding errors.
<LI>
Added two new buttons to the point info dialog to allow the user to walk
around the current contour (Normally the Next button skips to the start of
the next contour if you are at the end of the current one, the "Next On Contour"
button returns to the first point on the contour)
<LI>
improve interpretation of some type3 fonts (including those produced by
fontographer 4)
<LI>
patch by Yoshki Hayashi to fix mnemonic crash in layers palette
<LI>
Added a rand() scripting command
<LI>
Support backslash newline to break up lines in a scrpt
<LI>
The internal adobe standard encoding thought it was unicode causing strange
effects
<LI>
Type3 fonts that set colour/grey didn't work
<LI>
Printing at 140pt tried printing 4 glyphs across although there was only
room for 3
<LI>
At install tell pkg-config the verson of fontforge
</UL>
<LI>
3-Dec-2004
<UL>
<LI>
If a cff file contained unencoded glyphs then ff would crash when loading
it.
<LI>
When converting from cubic to quadratic splines, ff would sometimes produce
a line when it should have found a spline
<LI>
During debugging of a ttf glyph, show what rasterization would produce if
the current splines were used (highlight pixels which change)
<LI>
The debugger windows didn't always say "<empty>" when they should have.
<LI>
The debugger would often crash the second time we closed its window
<LI>
Asking for the script (as latin, greek, cyrillic...) of ".notdef" caused
us to look at unallocated memory.
<LI>
We weren't labelling control points in the debugger
<LI>
debugger and grid fitter for tt fonts showed curved splines as lines
<LI>
Kerning pairs did not get scaled when changing em-size
<LI>
Add a preference for turning off automatic gotos as the user types in the
glyph window
<LI>
Add a command to the glyph window to toggle between the two most recent glyphs
used in that window (a mini history)
<LI>
Improved the points debugger window to show
<UL>
<LI>
implied points
<LI>
whether a point is on or off the curve (normal or control)
<LI>
added a scroll bar
</UL>
<LI>
Provide info on debugging points as mouse moves over them.
<LI>
Fix (an innocuous) reference to unallocated memory
<LI>
Added ability to insert an uninterpreted table into an SFNT
<UL>
<LI>
New preference item: PreserveTables which lists a comma separated set of
table tags which are to be loaded from SFNT files without interpretation
(Note if ff thinks it understands a table it will parse it rather than preserving
it)
<LI>
Scripting command LoadTableFromFile("tag ","filename")
<LI>
Scripting command SaveTableToFile("tag ","filename")
<LI>
Scripting command RemovePreservedTable("tag ")
<LI>
Scripting command HasPreservedTable("tag ")
</UL>
</UL>
<LI>
22-Nov-2004
<UL>
<LI>
Kevin Schoedel suggests a new scripting command DrawsSomething()
<LI>
Kevin Schoedel requests that PrintFont be able to print a string sample (as
opposed to a sample file)
<LI>
Kevin Schoedel points out that type1 fonts stuffed into mac resource forks
are to be read in resource order rather than file order (often the two are
the same) and provides a patch to fix this.
<LI>
Change the way the default language/locale is picked in fontinfo->TTF
Names
<LI>
Remember (across invocations) whether palettes should be hidden or not.
<LI>
Ignore NUL chars when reading PostScript strings (PS supports NULs in strings,
I'm not going to bother, but I don't want to parse incorrectly because of
them).
<LI>
ff lost the ability to Select("U+xxxx") or Select("=") from a script.
<LI>
Oops, the routine to read PostScript FontNames from a ttf file was broken
by the encoding change.
<LI>
If a ttf file contained an erroneous composite glyph with flags indicating
more components after the glyph had run out of data, then ff might attempt
to read instructions also and have problems.
<LI>
If a font contains multiple ttf names for a given string in a language then
allow the user to pick which one s/he likes best.
<LI>
Another case where a bad otf table crashes fontforge
<LI>
If a ttf/otf font does not contain a postscript FontName string in the name
table, then ff's attempt to synthesize one out of fullname/familyname did
not check for a valid name.
</UL>
<LI>
15-Nov-2004
<UL>
<LI>
If ff started without a prefs file, then creating a new font would crash
<LI>
If a copyright string contained a newline then ff would generate bad postscript
<LI>
If user added a comment to an empty glyph then the comment wasn't saved in
the sfd file.
<LI>
If ff saved a utf7 string to an sfd file (ttf names, etc.) and that string
contained a hyphen that followed immediately after something that needed
to be encoded in base64, then the hyphen would be lost.
<LI>
new french UI
<LI>
ff was (usually) setting the ascent/descent fields of the 'hhea' table to
0. When the font was drawn on the mac it was clipped to nothing.
<FONT COLOR="Red"><STRONG><BIG>Caveat: Old sfd files are still broken and
there is no UI for fixing them. Instead you must edit them manually, and
change:</BIG></STRONG></FONT>
<PRE>HheadAOffset: 0
HheadDOffset: 0
</PRE>
<P>
to be:
<PRE>HheadAOffset: 1
HheadDOffset: 1
</PRE>
</UL>
<LI>
12-Nov-2004
<UL>
<LI>
ff would crash on postscript fonts where the encoding included a glyph name
not defined in CharStrings (probably broken on 12-Oct)
<LI>
More remove overlap work
<LI>
In the glyph window, when the scaled distance between the top and bottom
of the window is less than 1 em-unit, then the vertical ruler was drawn with
the top and bottom labels reversed.
<LI>
sfd files used to have a limit of 1023 characters in ttf 'name' table strings.
</UL>
<LI>
6-Nov-2004
<UL>
<LI>
Encoding change broke prefs dialog
</UL>
<LI>
5-Nov-2004
<UL>
<LI>
Encoding change didn't work on libiconv systems
</UL>
<LI>
4-Nov-2004
<UL>
<LI>
Added a new scripting command: AddAccent() to add an arbetrary accent to
an arbetrary glyph.
</UL>
<LI>
3-Nov-2004
<UL>
<LI>
KANOU has a <A HREF="http://khdd.net/fontforge-jman/">Japanese version</A>
of this reference manual under construction.
<LI>
In MultiLayered mode, the "New Layer" menu item left a dangling pointer which
caused a crash if anyone looked at the background layer.
<LI>
In MultiLayered mode, if one clicked beyond the last layer in the Layers
palette, ff would crash.
<LI>
KANOU provided a patch to fix another crash in the layers palette.
<LI>
KANOU has provided a new Japanese UI.
<LI>
Made an addition to CharInfo() scripting command so user can determine the
horizontal extrema of a glyph at a given vertical position. Similar addition
for vertical extrema at horizontal pos.
<LI>
Add a scripting command (PasteWithOffset) to allow user to apply an offset
when pasting. For building accented letters by hand.
<LI>
KANOU provides a patch to fix a problem in the new encoding stuff.
<LI>
Select(".notdef") usually didn't work.
</UL>
<LI>
28-Oct-2004
<UL>
<LI>
Kanou noticed that ISO 15924 has been updated and provide a patch including
new scripts.
<LI>
I have redone the way ff handles encodings internally. We used to depend
on the encodings builtin to gdraw/gunicode. Now we use iconv() (if there
is no iconv, then ff will use a dummy iconv which understands the encodings
of gdraw/gunicode). Encodings are identified by name rather than by number
now.
<LI>
Further fixes to the extremum detector
<LI>
Further fixes to remove overlap
<LI>
Added an extra argument to scripting RoundToInt, so that you can have control
over what it rounds to (ie. round to hundredths, tenths, etc.)
<LI>
Added two new scripting commands NearlyHvCps() and NearlyHvLines() which
look for control points or lines that are nearly horizontal or vertical and
force them to be horizontal or vertical.
<LI>
Kanou provided a patch so that the GRadio.Font resource controls the font
in the layers palette of the glyph view.
</UL>
<LI>
23-Oct-2004
<UL>
<LI>
Remove overlap had problems with splines which made abrupt turns (ie. tiny
splines after we found extrema points and divided the spline into bits between
extrema)
<LI>
Remove overlap could munch memory
<LI>
The ruler tool showed all tiny splines as having a length of 0
<LI>
Autorecovery had problems with glyphs containing features (would complain
about sli)
<LI>
KANOU wants to be able to scale greymap fonts
<LI>
removed routines from fvcomposit.c, metricsview.c that were duplicates of
fvfonts.c
<LI>
Oops, the default mac filesystem isn't case concious either, extend the windows
export patch to the mac.
<LI>
Simplify didn't have a very good extremum detector and would sometimes delete
extrema.
</UL>
<LI>
14-Oct-2004
<UL>
<LI>
Remove overlap had problems with tiny splines.
</UL>
<LI>
13-Oct-2004
<UL>
<LI>
I notice (in Fontes & Codages) that the labels in the metrics view aren't
translatable
<LI>
Fontes & Codages suggests that it would be nice if the glyph labels in
the fontview could be something other than an image of the glyph (glyph name,
unicode code point, encoding, etc.)
<LI>
Change the word "Character" to "Glyph" where appropriate.
<LI>
Move the Open Outline/Bitmap/Metrics commands to the Window menu, and change
"Open" to "New".
</UL>
<LI>
12-Oct-2004
<UL>
<LI>
We have a Spanish UI now, courtesy of Walter Echarri. Yeah!
<LI>
Support for loading type3 fonts (that ff produced) was broken. Note: ff is
still unable to load many type3 fonts (any that are filtered, or that use
images for example), but it should be able to read its own fonts.
<LI>
(I hope) minor change to the way .notdef is handled when reading postscript
files.
<LI>
Added support for printing to pdf file
<LI>
(fixed a bug in pdf generation from the export command)
<LI>
Fixed various problems from turning off the multilayer bit in fontinfo
<LI>
KANOU needs a couple more strings disambiguated.
<LI>
Add support for generating type42 and type 11 (type42 cid) fonts, add support
for loading type42 (but I'm not bothering with type11s) and use these guys
when printing order2 fonts.
<LI>
Check to make sure the PostScript Fontname is valid when reading in a truetype
(or svg) font (syntax doesn't enforce this), and if not warn the user and
fix it up.
<LI>
Add some new scripting commands for handling MM fonts since someone seems
to want them.
<LI>
Used to complain if there were more than one Unique Font ID in the truetype
'name' table. (because the OpenType list said there should only be one, else
it would not be unique). But both Apple and MS ship with fonts containing
multiple Unique Font IDs. God knows what that means, or when you pick one
over the other... Anyway I changed my error into a warning.
</UL>
<LI>
30-Sept-2004
<UL>
<LI>
I have rewritten Remove Overlap from scratch. I seems less likely to crash,
but I'm not sure that in any other respect it is improved.
<LI>
In the character view the Remove Overlap (and Intersect and Find Intersections)
now only work on selected contours, or, if no contours are selected then
on all contours. This change makes these commands consistant with most other
commands in the character view, but it is a change from past behavior.
<LI>
The Import scripting command has been extended to give the user control over
the stroking flags (correct direction, remove overlap, handle erasers). And
the background flag has been extended a bit to apply to other things than
bitmaps.
<LI>
ff had a pointer dangling to a freed block after loading a font containing
multiple versions of some greek letters.
<LI>
U+1D400-U+1D7FF are stylized variants of the latin and greek alphabets as
used in Mathematics. The font view will now display (in the glyph header)
the proper variant of the glyph (assuming it can find a font with that style).
<LI>
The AMS (American Mathematical Society) has their own interpretation of the
public use area. FF now understands their glyph names as alternates for those
glyphs, and has an AMS interpretation (under FontInfo->Encoding) that
will make ff use those names in new fonts.
<LI>
Many of code points in the AMS PUA are reencodings of other glyphs. FontForge
will automatically generate these reencodings for you.
<LI>
The AMS also describes how some TeX glyph names map to unicode. So include
those names in our alternate list too (so we can map them correctly, not
as a way of encouraging people to use them).
<LI>
Both the AMS defn. of the PUA and the Big5 defn. map characters which are
properly in other unicode planes into the BMP. FF now understands this, and
converting between a BMP encoding and a full unicode encoding will move things
from the PUA to their proper unicode slot in higher planes.
<LI>
Find Problems thought that adjacent splines intersected at their common
end-point. I suppose they do, but it isn't useful information
<LI>
In the char view, I used to blank out the status line when the mouse moved
outside the window. But some of that info is still valid. So only blank out
the meaningless bits.
<LI>
Kanou requests a disambiguation between two strings with the same label in
English but different meanings in Japanese. (Vertical/VerticalWriting)
<LI>
The Point->Make Line command would crash if either of the two points
was missing a previous or next spline.
<LI>
Pierre HANSER provides a patch to problems.c (it would crash when dealing
with fonts with an encoding with < 32 code points.
<LI>
Pierre HANSER provides a patch to merge fonts (it would crash when merging
bitmap fonts.
<LI>
Closing a charview window with a docked palette could cause a crash if the
cursor was moved quickly into another charview which needed a new cursor.
<LI>
The perspective icon had the wrong background
<LI>
Piska keeps complaining about the way ff handles 0 width strokes. He wants
it to have zero width (disappear, I guess), but PS says it should be stroked
as the thinnest line possible (not clear what this should mean in ff, I interpret
it as a 1em-unit stroke). But METAPOST uses a 0 width stroke in cases where
it wants no stroking (with a fill) so in the special case of a fill with
a 0 width stroke, turn off stroking.
<LI>
Use a different approach to approximating a set of points with fixed slopes
at the end points. Used to do least squares (fixup slopes), least squares
again (fixup slopes). Now I do least squares (fixup slopes), perturb the
lengths of the slope vectors until we find the best fit.
<LI>
I was generating flex hints when I should not have done so. Add a heuristic
so that ff doesn't add flexes to small circles.
<LI>
Failed to read long format pk bitmaps.
<LI>
Patch by Mchael Ghrken to make the Skew scripting command take a
numerator/denominator style argument.
</UL>
<LI>
24-Aug-2004
<UL>
<LI>
Oops, didn't get the expand stroke scripting patch quite right
<LI>
<FONT COLOR="Red"><STRONG><BIG>Changed the way preferences are handled in
scripts</BIG></STRONG></FONT>
<UL>
<LI>
By default preferences are no longer loaded when starting a script.
<LI>
Preferences are not saved in a script unless explicitly requested.
<LI>
Added 2 new scripting functions LoadPrefs() and SavePrefs()
<LI>
Added an environment variable FONTFORGE_LOADPREFS to give the user control
over loading of preferences.
</UL>
<LI>
Used to have a preference item DumpGlyphMap. Now we have an equivalent flag
in the Generate Fonts [Options] dialog.
<LI>
The SetPanose scripting command didn't work. MURAOKA Taro provides a patch
<LI>
It was not possible to get or set NewCharset preference item with GetPref/SetPref
scripting commands. Now GetPref returns a magic number, which may be used
in SetPref. SetPref will accept either a number or one of the encodings accepted
by Reencode().
<LI>
If you copied a glyph feature from a glyph that didn't have that feature,
and then did a paste ff would crash.
<LI>
Added two new tools to the outline character view. One allows you to rotated
your glyph through 3dimensions (and project it back on the xy plane), the
other allows you to do a perspective transformation.
<LI>
Extended the Transformation dialog to handle 3D rotation+projection. After
all it's just:
<TABLE BORDER CELLPADDING="2" ALIGN="Center">
<TR>
<TD>cos(y-axis-rotation)</TD>
<TD><P ALIGN=Center>
0</TD>
</TR>
<TR>
<TD><P ALIGN=Center>
0</TD>
<TD>cos(x-axis-rotation)</TD>
</TR>
</TABLE>
<LI>
Add a Point of View dialog to do real perspective projections
<LI>
Remove the FONTFORGE_CONFIG_NONLINEAR flag, and enable the nonlinear dlg
perminantly. I need some of its routines to do the perspective projections.
<LI>
There was a path through LoadEncodingFile (in a script) where it would silently
fail.
<LI>
LoadEncodingFile would save default encodings even though it hadn't loaded
them. It no longer does this, but now SavePrefs does it instead.
<LI>
Added the ability to see (and create) simple substitutions in the font view.
<LI>
The embossed box around the fontinfo dlg wasn't always in the right place
</UL>
<LI>
8-Aug-2004
<UL>
<LI>
Zhang Lin-bo reports two bugs (which were really three)
<UL>
<LI>
Expand Stroke failed when given a path consisting of a single point had a
zero length spline returning to itself.
<LI>
AddExtrema falls into an infinite loop if the initial spline of a path needs
an extremum added to it.
<LI>
Expand Stroke generates garbage output in some very obscure conditions.
<LI>
AutoHint crashes when given garbage input.
</UL>
<LI>
Michael Gährken points out that ExpandStroke scripting command doesn't
work for caligraphic stroking, provides a patch and an extension.
<LI>
KANOU provides a patch for BDFMakeChar in CID keyed fonts.
<LI>
Change the Shades palette in the bitmap view so that it shows what grey level
is underneath the cursor.
<LI>
When the width is huge, then moving it causes it to wrap into negative values.
It should probably stick at SHRT_MAX instead.
<LI>
If one moves to a negative width and releases the mouse, an error message
pops up warning of this. If you move the cursor around the width continued
to change.
<LI>
If one moves to a negative width, and in response to the width warning says
[No] then the width reverted to the wrong value.
<LI>
ff would crash on a postscript sequence containing "{}" if that was the first
function defined.
<LI>
I got the locale wrong for Hong Kong
<LI>
If nothing was selected in the import dlg (or any of the file open dlgs)
and the user pressed [OK], then the directory would be returned.
<LI>
Improved error message for Import dlg.
<LI>
In spanish various dlgs had buttons that were too close together (and similar
problems)
</UL>
<LI>
01-Aug-2004
<UL>
<LI>
ff did not generate amfm files correctly
<LI>
Changed the Merge Kern Infor (menu item and scripting command) to
<UL>
<LI>
support pfm files
<LI>
detect file type from the file header rather than from the extension
</UL>
<LI>
Added InterpolateFonts as a scripting command
<LI>
Added GetEnv as a scripting command
<LI>
The scripting $fontversion and $copyright psuedo variables broke when I added
the fond name changes.
<LI>
More problems with tfm files.
<LI>
Fixed a couple of problems related to dialog sizing for different languages.
<LI>
In Windows 3.1 some chinese fonts were released with a ttf version of 2 (rather
than 1). Add this to the list of supported TrueType/OpenType versions (see
discussion on freetype mailing list, july 2004 for more info)
<LI>
Added both a menu and scripting command to copy kerning & substitution
info from one glyph to another.
<LI>
FontForge fails to load some svg fonts properly (if they use the "t" directive
within a path => quadratic splines, control point implied, relative to
last point). Result is a nasty scribble.
<LI>
Windows file systems are not case conscious. The file names generated for
Export use glyph names (which are case conscious). So on windows exporting
"a" and "A" will overwrite the same file. (Add a "$" in front of capital
letters to distinguish).
<LI>
We were not scaling refs/images uniformly when we dragged corners. Instead
we changed the sides by the same amount (this works for squares, but nothing
else).
<LI>
XML does not allow backspace as an input character, even when specified by
an entity. This means we can't specify the unicode code point for backspace
in a an svg font (and many ttf fonts contain a blank backspace char, god
only knows why).
<LI>
The Default ATT->Unicode decomposition didn't work.
<LI>
Added a new entry to Default ATT, Caps->Small Caps (and cleaned up lower
case->small caps too).
<LI>
Eschew 0 width hints.
<LI>
Add support for localized unicode glyph names (currently only french is
available)
</UL>
<LI>
3-July-2004
<UL>
<LI>
Undoes in the Guide layer caused a crash (introduced with multi-layer)
<LI>
Fixed another problem with subroutine references in type1 output
<LI>
Preserve hhea.ascent/descent and some OS/2 values (no UI for these, but they
are retained)
<LI>
KANOU provided two patches
<UL>
<LI>
One to set the average Char Width field of OS/2 properly
<LI>
One to set the 'gasp' table so that Windows would actually use embedded bitmaps
</UL>
<LI>
Added support (in build accent) to look for upper case and cyrillic variants
of accents (use grave.cap rather than grave, use breve.cyr rather than breve)
when building upper case or cyrillic letters.
<LI>
Points were not being properly renumbered if they were out of order (when
editing in quadratic mode)
<LI>
When a character had a color attached to it, it looked very strange if the
user changed it.
<LI>
Added an "x" to check boxes when checked
<LI>
FF did not realize that tonos should be treated as an accent (it is spacing,
which confused ff)
<LI>
Cleaned up an ancient message in the nomen files. Used to be three separate
strings, now one with format specs in it.
</UL>
<LI>
18-June-2004
<UL>
<LI>
Point types were not set properly after conversion from quadratic to cubic
splines.
<LI>
Several preference items were not being saved and were not accessable from
scripts.
<LI>
Scripts could not set the resolution for bdf fonts
<LI>
Still having problems with references to references in type1 subroutines.
<LI>
AutoTrace had problems with multi-layered mode.
<LI>
Enhance "ItalicConstrained" in the Character View to allow vertical constrains
as well as those parallel to the italic angle.
<LI>
Build Accented Characters had problems when there were bitmap characters
involved.
<LI>
Can no longer blindly rotate splinesets in type2 fonts to avoid an initial
flex.
<LI>
Add three new problems to Find Problems
<UL>
<LI>
Check for intersecting contours
<LI>
Check for mulitple glyphs with same unicode code point
<LI>
Check for multiple glyphs with same name
</UL>
</UL>
<LI>
31-May-2004
<UL>
<LI>
In the 19-May build I introduced a bug which could generate NaN values for
control points.
</UL>
<LI>
29-May-2004
<UL>
<LI>
The MergeKern scripting command didn't have the capabilities of its menu
counterpart.
<LI>
Enhance the pattern matching capabilities on font names when loading kerning
information from a mac FOND (there is no place in the FOND that names the
styles, so best we can do is make reasonable guesses).
<LI>
When editing quadratic fonts (truetype), changing the type of a point to
be a tangent caused the previous control point to be set the to same location
as the next control point. Bleah.
<LI>
New versions of libpng will not automagically load libz when they are loaded.
Needed a patch to load libz manually.
<LI>
Fixed a couple of bugs in contextual / chaining dialog.
<LI>
When reading PostScript arrays FF failed to parse negative numbers properly.
<LI>
Make it an error (which it should be) to create a mac postscript resource
file without also generating an NFNT.
<LI>
Warn that NFNTs don't work under OS/X, warn that POST resources are probably
depreciated.
<LI>
WinAscent/Descent were being saved incorrectly in sfd files, leading to bad
WinAscent/Descent in t/otf OS/2 tables.
<LI>
Crash in ExpandStroke from a NaN when try to intersect parallel lines
<LI>
Improved Merge a little bit for quadratic splines
</UL>
<LI>
23-May-2004
<UL>
<LI>
Added popups in the Open Font dialog to show the fontname(s) of any font(s)
in a file.
<LI>
FontForge failed to load background images. A bug introduced 24-Feb (part
of multi-layer)
<LI>
Reordered the which glyph FF would pick when searching for accents. It used
to use ASCII versions of the accents over those in the U+03xx range.
</UL>
<LI>
20-May-2004
<UL>
<LI>
Bug in scripting change for mac families.
<LI>
Added a Paste After command (which isn't visible by default) which will allow
you to build up words more easily.
</UL>
<LI>
19-May-2004
<UL>
<LI>
Give the user access to the OS/2 fields WinAscent and WinDescent.
<LI>
Add a new command (Points->Make Line) which will turn a spline between
two selected points into a line.
<LI>
Improve the behavior of defaulting control points so we don't get
self-intersecting loops
<LI>
Add a mode to the pointer tool. Holding down the <Alt> key now means
we don't join two open contours if they make contact while dragging.
<LI>
When loading an otf file and saving it as ttf, sometimes the space glyph
would become zero width.
<LI>
Redid the way mac families were output. Should be more flexible under OS/X
</UL>
<LI>
9-May-2004
<UL>
<LI>
Several problems with tfm files. Didn't handle tfms with more that 128 lig/kerns.
<LI>
Failed to set the r2l flag properly in 'morx' tables
<LI>
More typos in the ghost hint code
<LI>
Allow users to express error term of the scripting Simplify command as a
fraction.
<LI>
The strings in the context / chaining dlg's initial pane were wrong
<LI>
Fixed some bugs in converting OT contextual substitutions to Mac state machines
<LI>
If we wanted to put a glyph with references into a subroutine (in type1 output)
we failed miserably
<LI>
Added a new command
<A HREF="editmenu.html#ReplaceRef">Edit->ReplaceWithReference </A>(and
a scripting version too), which searches all glyphs in the font for any selected
glyphs, and for each embedded occurance it replaces the outlines of the glyph
with a reference to it. This is because reading a postscript (type2 or type1)
font generally loses all reference information.
<LI>
The documentation for OS/2.winAscent makes no sense. I shall ignore it and
set winAscent to hhea.ascent
<LI>
Sivan says that hebrew kerning is broken again.
<LI>
The search dlg didn't work on quadratic (truetype) fonts
</UL>
<LI>
2-May-2004
<UL>
<LI>
I've changed the colour of check boxes because people found black confusing
<LI>
FontForge read Italic Correction incorrectly out of tfm files and had minor
problems generating tfm files.
<LI>
the kern class dlg had an uninitialized variable (introduced with the multiple
master code I think)
<LI>
FontForge would sometimes crash when generating a GDEF table for some types
of otf font.
<LI>
Pierre Hanser has updated the french UI, and pointed out some problems with
the english UI.
<LI>
In a version of FontForge compiled with MultiLayer on, Pasting something
containing a reference screwed up memory
</UL>
<LI>
25-Apr-2004
<UL>
<LI>
AutoHint produced ghost hints for curved stems that sometimes were outside
of the character.
<LI>
Fixed some uninitialized variables in MetaFont (but the algorthim is still
flawed)
<LI>
FontForge had problems when the fontview was maximized.
<LI>
The 18-Apr patch for cubic->quadratic conversion had a bug which generally
resulted in a crash.
<LI>
When flickering in and out of compacted mode, during a Generate Fonts, the
encodings in the displayed bitmap could get out of sync with those of the
font leading to a crash.
<LI>
Don't mess with the control points in point type conversion
(corner->curve/tangent) when the they are already reasonable.
<LI>
Allow rectangles and ellipses to have separate settings of the center out
flag.
<LI>
Add a dialog which allows you to specify exactly where rectangles/ellipses
should go.
<LI>
Double-clicking on the scale/flap/rotate/skew tool brings up the transform
dialog.
<LI>
Add a couple of entries in the transform dlg option menus which copy information
from the last ruler measurement.
<LI>
Give the user control over how long the ruler window hangs around.
</UL>
<LI>
18-Apr-2004
<UL>
<LI>
Fix a couple of bugs dealing with references in multilayered editing.
<LI>
Uninitialized variable in creation of 'name' table (introduced on 10-Apr)
<LI>
Edit->Merge didn't work properly on quadratic splines
<LI>
LCarets should have ignored the script assigned to them, but they didn't.
<LI>
Put in more protection against bad GSUB/GPOS tables. In particular mangal.ttf
has a bad GSUB table (with erroneous class specifications).
<LI>
FontForge wasn't setting <TT>'hhea'.caretSlopeRun</TT> appropriately in italic
fonts (should match <TT>tan(italicAngle)</TT>).
<LI>
Oops. Can do much better converting from cubic to quadratic splines. We were
getting far too many linear segments.
<LI>
Our cubic->quadratic conversion could generate splines where the endpoints
were less than 1 unit apart. Since ttf rounds all coords to ints, this meant
we'd get the two endpoints on top of one another.
<LI>
When generating a truetype font from a cubic database, FontForge calculated
'maxp'.maxCompositePoints incorrectly.
<LI>
Gave the user control over when point numbers are visible (even for cubic
fonts)
</UL>
<LI>
10-Apr-2004
<UL>
<LI>
The flatten commands didn't preserve the ttf 'name' table nor the 'OS/2'
table
<LI>
Redid the way 'name' table was generated, hopefully we do better for the
mac now.
<LI>
the 'kern' table had a bad rangeShift value (it was the negative of what
it should be)
<LI>
Pasting a reference from one font to another could crash if the destination
font did not have the refered character.
<LI>
".null" was appearing twice in the 'post' table when saving a ttf file a
second time.
<LI>
Markus Schwarzenberg points out that the ScaleToEm() scripting command didn't
work when given a single argument.
<LI>
Pierre Hanser points out that the version fix on 4-Apr had a bug that caused
crashes on Macs (perhaps elsewhere).
</UL>
<LI>
04-Apr-2004
<UL>
<LI>
Several more fixes for cff output.
<LI>
We had a bad habit of including extraneous hintmask operators in output
<LI>
Add a proper ff version (well, as much as my versions be proper) to
postscript/svg output
<LI>
Patch from Kanou about reading format 2 bitmaps in a sfnt
<LI>
Patch from Kanou. MS requires a weird format for GSUB in vertical writing.
</UL>
<LI>
29-Mar-2004
<UL>
<LI>
When Type1 output needed to output a reference as inline splines (as opposed
to a subroutine call or using a seac command) then it would lose any translation
applied to that reference.
<LI>
Patch to Type3 output from R.L.Horn
<LI>
FontForge used to crash when reading in a bdf glyph with a bad bounding box.
<LI>
Reading a kerning class from an sfd file when that class had more second
character classes than first character classes would screw up memory and
probably cause a crash.
<LI>
Attempting to edit a 'cvt ' table in a font without one caused a crash.
Attempting to edit a 'cvt ' table in a font with one showed an empty table.
<LI>
Make scaling from the fontview apply to kerning and positioning data.
<LI>
Drawing a rectangle by dragging from center out didn't work
<LI>
Display phantom points when debugging. Be prepared to find either 2 (horizontal
metrics) or 4 (both horizontal or vertical) depending on what version of
freetype we've got.
<LI>
Bug in both reading and writing encoding format 0 of cff fonts. I forgot
to ignore .notdef so everything was off by 1.
<LI>
If a glyph was used as a reference in another glyph, and we put it in a
subroutine (type1 output), and it had hint conflicts, then the first group
of hints never got output.
<LI>
In multilayered mode, the Revert Glyph command left memory in a potentially
bad state. (If you immediately closed the charview, then nothing bad would
happen, but if you tried any editing in it, then nasty things happened.)
</UL>
<LI>
21-Mar-2004
<UL>
<LI>
When flattening a CID file fontforge lost track of the script/lang list (and
other things) which caused bugs when dealing with substitutions
<LI>
When saving multiply, fontforge could free a fonts hash table several times
<LI>
When flattening by a CMAP file from a script fontforge could crash
<LI>
Added a CIDFlatten command to scripting.
<LI>
The "cleanup of OS/2" on 29-Feb actually broke WinAscent/Descent
<LI>
When loading a mac unicode string from the 'name' table, fontforge failed
to convert the language correctly.
<LI>
When loading a mac contextual substitution statemachine, fontforge made egregious
errors in guessing to what glyphs were usable for a substitution of the marked
glyph.
<LI>
Added the current encoding to the font's window title (also display a flag
to show whether the font has been changed)
<LI>
When moving points around on an order2 contour fontforge could end up with
bad control points and would then produce annoying internal errors alerting
the user to this fact.
<LI>
The CID Flatten commands did not work when the view was compacted.
<LI>
CharInfo had been deliberately disabled in CID fonts
<LI>
Show ATT didn't work with CID keyed fonts
<LI>
The preference mapping between mac and opentype small caps features was wrong.
<LI>
Werner found a strange bug in splinefill that I can't reproduce (and can't
understand how it could happen) but the fix appears obvious.
<LI>
Add a command to show what glyphs use the current glyph in a substitution
(so "A.swash" would show that "A" used it, and "i" would show that "fi" used
it).
<LI>
Changed the extension shown in the Generate Fonts dlg for multiple saves
to ".pfb". Put in a %s to make it obvious that more will be added to the
name. Support people who want .pfa fonts too.
<LI>
The dialog for adding/editing correspondences between mac feature/settings
and opentype features never went away.
<LI>
Disable the Default ATT menu if no char is selected in the fontview.
<LI>
FontForge sometimes had trouble drawing the correct rotated glyph in cid
fonts on the display lines of the fontview.
<LI>
Changed the way names used in cidmap files, so there are new cidmap files
now.
<LI>
The ShowAtt dialog could overwrite itself if there were enough aats in it.
(and at one point the vertical scroll bar was set to the bounds of the horizontal
scroll bar)
<LI>
Still getting the windows ascent/descent wrong. This time in CID keyed fonts.
<LI>
Add some new language translations for things like "Bold" (dutch, swedish,
norwegian)
<LI>
Dragging and dropping a char from the font view into the char info dlg (to
create a substitution) created a crash instead.
<LI>
Support more of postscript in the interpreter
<LI>
Our svg fonts pointed to a not-yet-existing dtd file
<LI>
Support for Apple's distortable fonts (sort of like truetype multi-master
fonts)
<LI>
Depressing the control key now makes popups live longer (until the mouse
moves).
<LI>
new command in MM menu: Blend to new font
</UL>
<LI>
2-Mar-2004
<UL>
<LI>
Changed name from pfaedit to fontforge
</UL>
</UL>
<P>
FontForge was first released on 2-Mar-2004. An earlier version of the program,
called PfaEdit, was begun in Sept of 2000, released on the web 7-Nov-2000,
and moved to pfaedit.sf.net on 21-Apr-2001.
</DIV>
</BODY></HTML>
|