File: ChangeLog

package info (click to toggle)
gourmet 0.17.4-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 29,796 kB
  • ctags: 4,543
  • sloc: python: 36,945; sh: 42; xml: 33; makefile: 12
file content (4169 lines) | stat: -rw-r--r-- 167,106 bytes parent folder | download | duplicates (3)
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
2014-06-02  Bernhard Reiter  <ockham@raz.or.at>

        * Merge translations.
        * Use *.po files from Launchpad.
        * Remove obsolete po/xx_XX.po files.
        * Update po/.
        * When saving a shopping list as a menu, add the time in its title.

2014-06-01  Bernhard Reiter  <ockham@raz.or.at>

        * Fix links in InfoBars under Windows, also for threaded export/import.
        * Fix links in InfoBars under Windows.
        * Bump version to 0.17.4.
        * Move offer_url() to reccard.py.
        * Fix guess_singulars() in defaults_en_GB.py by copying it from defaults_en.py.
        * Fix guess_plurals() in defaults_en_GB.py by copying it from defaults_en.py.
        * Remove obsolete offer_url related functions.

2014-05-29  Jessica Eccles <pounamu>

        * fixed typo
        * added appdata file Fixes #759

2014-05-29  Bernhard Reiter  <ockham@raz.or.at>

        * Remove incorrect width and height attributes from gourmet.appdata.xml.in.
        * Add gourmet.appdata.xml.in to po/POTFILES.in, MANIFEST.in, and setup.py.
        * I18nize gourmet.appdata.xml.in.
        * Fix error in gourmet.appdata.xml.in.

2014-05-27  Jessica Eccles <pounamu>

        * changed keyboard shortcuts as per Tom's comment Fixes #264
        * added requested keyboard shortcuts Fixes #264

2014-05-21  Bernhard Reiter  <ockham@raz.or.at>

        * In reccard, import launch_url.
        * Have xml_importer accept unicode filenames.

2014-05-19  Bernhard Reiter  <ockham@raz.or.at>

        * Little fix in case get_pluralized_form is passed an empty string.
        * When adding a recipe to the shopping list that's already there,
          increase the amounts of ingredients accordingly.

2014-05-11  Bernhard Reiter  <ockham@raz.or.at>

        * INSTALL.md: add ReportLab download link.

2014-05-10  Bernhard Reiter  <ockham@raz.or.at>

        * Use InfoBar for message in duplicate finder after website import.
        * Move import/export progress bar to InfoBar.
        * Replace Jump to button in successful export infobar by link to file.
        * When exporting from recipe card, display InfoBar there.
        * In offer_url(), use InfoBar instead of MessageDialog.

2014-05-06  Bernhard Reiter  <ockham@raz.or.at>

        * I18n offer_url parameters.
        * Revert "Don't use Gtk.InfoBar yet as it requires pyGtk >= 2.22.
          We'll keep this in a branch for now."

2014-05-04  Bernhard Reiter  <ockham@raz.or.at>

        * MCB plugin: create XML in temporary directory.
        * MCB plugin: Handle yields/servings properly.
        * Add MCB plugin to default_active_plugin_sets.
        * Add lxml dependencies to setup.py (required for MCB plugin on Windows).
        * Rename mcb-plugin to mycookbook_plugin.
        * Update ChangeLog.

2014-05-03  Bernhard Reiter  <ockham@raz.or.at>

        * Fix rating export and import for the MCB plugin.
        * Update ChangeLog.

2014-05-02  Bernhard Reiter  <ockham@raz.or.at>

        * Fix the MCB plugin's Export all function.

2014-04-28  Bernhard Reiter  <ockham@raz.or.at>

        * Update ChangeLog.

2014-04-20  Bernhard Reiter  <ockham@raz.or.at>

        * Wrap a PIL import.
        * Add Fink section to INSTALL.md
        * Change manage.py location and contents for Django 1.6.
        * Remove a couple of spurious imports from the MCB plugin.
        * Add MyCookbook plugin files to po/POTFILES.in.

2014-04-20  thierry

        * timestamp changed
        * Add MyCookbook export plugin.

2014-04-19  thierry

        * fix segfault

2014-04-14  Bernhard Reiter  <ockham@raz.or.at>

        * In the web plugin, fix the link to the Gourmet website.
        * Replace compressed jQuery v1.4.2 by uncompressed v1.11.0.

2014-04-03  Bernhard Reiter  <ockham@raz.or.at>

        * Bump version to 0.17.3.
        * Add xml.dom to packages included by cx_Freeze.

2014-04-02  Bernhard Reiter  <ockham@raz.or.at>

        * Add FAQ item on setting display resolution.

2014-03-23  Bernhard Reiter  <ockham@raz.or.at>

        * Use playbin2 instead of deprecated playbin for gst sound playback.
        * More on OS X.
        * Add MacPorts section to INSTALL.md

2014-03-20  Bernhard Reiter  <ockham@raz.or.at>

        * Update ChangeLog.
        * Add note about code signing .msi file to INSTALL.md.
        * Bump version to 0.17.2.

2014-03-16  Bernhard Reiter  <ockham@raz.or.at>

        * Remove a couple of spurious lines from setup.cfg.
        * Update ChangeLog.
        * Bump version to 0.17.1.
        * Remove build_rpms.py and related.
        * Remove obsolete lines from print plugin code.
        * Add space to command invoking Adobe reader.

2014-03-09  Bernhard Reiter  <ockham@raz.or.at>

        * Add cx_Freeze requirement to INSTALL.md.
        * Remove EclipseNSIS paragraph from CODING.md.
        * Update CODING, rename to CODING.md.
        * Update README.md and INSTALL.md.

2014-03-08  Bernhard Reiter  <ockham@raz.or.at>

        * Remove some obsolete code meant for PyGTK < 2.6.
        * Require Python 2.7 in README.md.
        * Add two imports to plugins/import_export/gxml_plugin/gxml2_importer.py.

2014-02-26  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a number of regressions in html_exporter.py.
        * Update ChangeLog.

2014-02-25  Bernhard Reiter  <ockham@raz.or.at>

        * Remove redundant newlines from error message.
        * Update *.po[t] files and add/fix some German and Austrian strings.
        * Update ChangeLog.
        * Fix a translation bug in de_DE.po.
        * Remove *.mo files that ware accidentally added to git.

2014-02-24  Bernhard Reiter  <ockham@raz.or.at>

        * Update gourmet.desktop.in.
        * Shorten years listing in copyright notice.
        * Add Flattr donations button to About dialog.

2014-02-23  Bernhard Reiter  <ockham@raz.or.at>

        * Fix loading of FAQ from recipe card and shopping UI.
        * Fix web browser invocation from About dialog under Windows.
        * Remove obsolete exception clause.
        * Under Windows, use Adobe Reader to print reportlab created PDF.

2014-02-22  Bernhard Reiter  <ockham@raz.or.at>

        * Simplify loading of LICENSE file into About dialog.
        * Add donations text and buttons to the About dialog.
        * Update ChangeLog.

2014-02-20  Bernhard Reiter  <ockham@raz.or.at>

        * Add 2014 to copyright years.

2014-02-18  Bernhard Reiter  <ockham@raz.or.at>

        * Some gourmet/backends/db.py cleanup.
        * When connecting to a MySQL database, force UTF-8 charset.

2014-02-09  Bernhard Reiter  <ockham@raz.or.at>

        * Replace deprecated PoolListener by @event.listens_for decorator.

2014-02-08  Bernhard Reiter  <ockham@raz.or.at>

        * Remove \r escape sequence from sl.po.
        * Change Yield unit accelerator in batch editor, update po files.
        * Fix a translation bug in nl.po.
        * Fix bug in Dutch translation.

2014-01-23  Bernhard Reiter  <ockham@raz.or.at>

        * UTF-8-decode ingkey in shopping_key_editor_plugin.

2014-01-21  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a regression introduced by the last commit.

2014-01-20  Bernhard Reiter  <ockham@raz.or.at>

        * When de-activating Browse Recipes plugin, remove its tab.

2014-01-12  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a typo.

2014-01-11  Lyra  <lyra2108@gmail.com>

        * FIX: Create a shopping list even if one entry hasn't an amount

2014-01-06  Bernhard Reiter  <ockham@raz.or.at>

        * Some cleanup.
        * Clean up gourmet/exporters/exporter.py a bit.
        * Update MANIFEST.in.
        * Remove tools/ directory.
        * Remove an obsolete reportlab version check and related code.

2014-01-05  Thomas M. Hinkle <tmhinkle@gmail.com>

        * Hackishly remove indents needed after if statement to workaround build error.
        * Allow null units to be looked up. Otherwise, we can never get conversions for things like "3 eggs."
        * Remove GourmetWindows.pyw

2014-01-05  Bernhard Reiter  <ockham@raz.or.at>

        * Revert "Fix stupid mistake."

2014-01-04  Bernhard Reiter  <ockham@raz.or.at>

        * Check if active_plugin is really there.

2014-01-03  Bernhard Reiter  <ockham@raz.or.at>

        * Add myself as maintainer in setup.py.
        * Add 2012, 2013 to copyright years.
        * Add comment to setup.py.
        * Remove obsolete README.windows.md.
        * Fix stupid mistake.
        * Fix a typo in INSTALL.md.
        * Update TODO, rename to TODO.md.
        * Update CODING.
        * Add more Windows building instructions to INSTALL.md.
        * Disable the PDFPrintPlugin under Windows as poppler doesn't work there.
        * Use Python logging instead of printing a traceback.
        * Migrate from py2exe to cx_Freeze.
        * Set data_dir correctly if Gourmet is frozen.
        * Update IPython requirement in INSTALL.md.
        * Update ChangelLog.

2014-01-02  Bernhard Reiter  <ockham@raz.or.at>

        * Remove NSIS related files.

2014-01-01  Bernhard Reiter  <ockham@raz.or.at>

        * Replace PIL by Pillow requirement.
        * Move *.gourmet-plugin.in files to gourmet/plugins/.
        * Remove an obsolete line.
        * Replace pywin32 requirement by a ctypes function call.
        * Small whitespace fix.
        * Remove missing signal handlers.
        * Bump version to 0.17.0.
        * Fix a translation bug in po/de.po.

2013-12-15  Bernhard Reiter  <ockham@raz.or.at>

        * Add reportlab packages to setup.py so py2exe includes them.

2013-11-19  Bernhard Reiter  <ockham@raz.or.at>

        * De-dupe AboutDotComWebParser class.
        * Move duplicate code into a common base class member.
        * Remove some redundant code.
        * Remove obsolete KeyManagerOldSchool class.
        * Remove duplicate code from gourmet/recipeManager.py.
        * Remove duplicate file gourmet/convertGui.py.

2013-11-15  Bernhard Reiter  <ockham@raz.or.at>

        * Fix wildcard imports.

2013-11-13  Bernhard Reiter  <ockham@raz.or.at>

        * Fix another PIL import.

2013-11-02  Joe Sapp  <joe@babyjoe>

        * Remove "Application" from desktop entry

2013-01-11  Bernhard Reiter  <ockham@raz.or.at>

        * s/options/args/ to make bin/gourmet launch.

2013-01-11  Jeff Raber  <jeff.raber@gmail.com>

        * Replace deprecated optparse with argparse, per issue 683 [1]

2013-10-12  Bernhard Reiter  <ockham@raz.or.at>

        * Fix a typo that broke the nutritional information plugin DB upgrade.

2013-10-11  Bernhard Reiter  <ockham@raz.or.at>

        * Remove some more metakit remnants.
        * Update po[t] files.
        * Remove legacy_db (i.e. metakit) stuff.

2013-10-10  Bernhard Reiter  <ockham@raz.or.at>

        * Clean up recindex.py.
        * Clean up GourmetRecipeManager.py.
        * Clean up reccard.py

2013-09-30  Bernhard Reiter  <ockham@raz.or.at>

        * In PDF export, print title only once (as heading).

2013-09-20  Bernhard Reiter  <ockham@raz.or.at>

        * Only set_current_folder if get_user_special_dir(USER_DIRECTORY_PICTURES) isn't None.

2013-09-09  Bernhard Reiter  <ockham@raz.or.at>

        * Update *.po[t] files.
        * Fix batch editing of categories.
        * Translate attributes in batch editor's confirmation message box.
        * In Batch Editor, replace "Servings" by "Yield" and "Yield Unit" rows.
        * Small fix to ui/catalog/README.
        * Remove some obsolete code checking for old gtk versions.
        * Remove some spurious imports from recindex.py.

2013-09-06  Bernhard Reiter  <ockham@raz.or.at>

        * s/ui/ui_string/ fix in a couple of files.

2013-09-01  Bernhard Reiter  <ockham@raz.or.at>

        * Remove some spurious Image (i.e. PIL) imports.

2013-08-30  Bernhard Reiter  <ockham@raz.or.at>

        * Update Changelog.

2013-08-29  Bernhard Reiter  <ockham@raz.or.at>

    * Update version to 0.16.1 in gourmet/version.py.
    * Update MANIFEST.in.
    * Update translation files.

2013-08-28  Bernhard Reiter  <ockham@raz.or.at>

    * Little schema.org parser improvement.
    * Properly raise an exception in print_plugin.py.
    * Fix a translation bug in po/de_AT.po.
    * Update allrecipes.com test recipe URL.
      In (commented out and still dysfunctional part of) testImporters.py.

2013-08-27  Bernhard Reiter  <ockham@raz.or.at>

    * Drop Python version 2.6 in INSTALL.md.
    * Add PYTHON_ARGCOMPLETE_OK string to bin/gourmet.
    * Remove some obsolete imports from gourmet/importers/html_importer.py.
    * Fix testImporters.py.
    * Merge pull request #724 from sappjw/master
      Replace more 'Image' imports with Pillow-compatible blocks
    * Fix allrecipes.com importer, by extending our newly created schema_org_parser.
      Also add a test gourmet/test/test_allrecipes_com_plugin.py which is capable of
      testing the importer offline, using gourmet/test/recipe_files/allrecipes_com.html.
      (Trying to integrate such an offline test into the existing, commented-out
      allrecipes.com test in gourmet/test/testImporters.py proved a nightmare as
      the importer code is tightly interwoven with the web page download and interactive
      importer functions.)
      Fixes #261
    * Make ica.se importer aware of a recipe's yields property.
    * Scrap more schema.org/Recipe fields.
    * Remove obsolete gtk import from gourmet/importers/generic_recipe_parser.py.
    * Have ica_se tests check for presence of category field.
    * Factor schema.org parsing out of ica_se_plugin.py into a newly created schema_org_parser.py.
    * Have gourmet/test/test_ica_se_plugin.py also test for cooktime parsing.
    * Small fix for more a expressive test result.
    * Small fix, mainly for future BeautifulSoup4 compliance.
    * Move foodnetwork and ica.se importer tests to gourmet/test/.

2013-08-27  Joe Sapp  <joe@babyjoe>

    * Replace more 'Image' imports with Pillow-compatible blocks

2013-08-25  Bernhard Reiter  <ockham@raz.or.at>

    * Fix testImporters.py.
      Among other things, use a temporary in-memory SQLite database for testing.

2013-08-24  Bernhard Reiter  <ockham@raz.or.at>

    * Truncate Source field in PDF export.
      Fixes #721

2013-08-10  Bernhard Reiter  <ockham@raz.or.at>

    * One more string exception to fix.

2013-08-09  Bernhard Reiter  <ockham@raz.or.at>

    * s/thinkle.github.com/thinkle.github.io/

2013-08-06  Bernhard Reiter  <ockham@raz.or.at>

    * Merge pull request #723 from gyp/master
      importing gettext in exportManager as it has localized strings

2013-08-06  Peter Gyongyosi  <gyp@balabit.hu>

    * importing gettext in exportManager as it has localized strings
      This fixes https://bugs.launchpad.net/gourmet/+bug/1157969

2013-08-04  Bernhard Reiter  <ockham@raz.or.at>

    * Add INSTALL.md.

2013-07-30  Bernhard Reiter  <ockham@raz.or.at>

    * Add db upgrade logic for the fix introduced with the previous commit.
      Fixes #711.
    * Merge pull request #722 from rleibman/master
      Fixing issue with mysql, VARCHAR requires a length

2013-07-30  Roberto Leibman  <roberto@leibmanland.com>

    * Fixing issue with mysql, VARCHAR requires a length, I figure 255 is probably good enough

2013-06-01  Bernhard Reiter  <ockham@raz.or.at>

    * Remove obsolete tools/upgrade_pre_script.py.
    * Remove hardwired sys.path.append('/usr/share/gourmet') lines.

2013-05-27  Bernhard Reiter  <ockham@raz.or.at>

    * Additional fix for plugins/python_shell/ipython_view.py.
    * Fix interactive shell plugin to work with current IPython versions.
      Achieved by updating plugins/python_shell/ipython_view.py
      (which was taken from the Accerciser project)
      to the commit before Accerciser's Python3 migration [1],
      reverting their previous PyGI migration [2].
      [1] https://git.gnome.org/browse/accerciser/commit/?id=b9bb2f48eebbf9f21ca633b6ecd6a58d6befe04a
      [2] https://git.gnome.org/browse/accerciser/commit/?id=48b8c06d598f84943ab7a0af1259408b7409484d
    * Prepare plugins/python_shell/ipython_view.py for update.

2013-05-17  Bernhard Reiter  <ockham@raz.or.at>

    * Remove a bunch of unused imports.
    * Fix setup.py so it works on non-Windows platforms again.
    * Remove obsolete checks for PyGTK version < 2.8.
    * Remove obsolete gtk_extras/ThumbnailGenerator.py.
    * Remove obsolete gtk_extras/chooserNotebook.py.
    * Remove obsolete gtk_extras/fauxDruid.py.
    * Remove obsolete gtk_extras/FauxActionGroups.py.

2013-05-07  jens persson  <jens@persson.cx>

    * Buglet found with tests and som whitespace triming in foodnetwork plugin
    * Add tests for foodnetwork plugin
    * Fix buglet discovered due to tests
    * Add tests for ica.se plugin

2013-04-20  Bernhard Reiter  <ockham@raz.or.at>

    * Merge pull request #715 from MrShark/master
      An importer for ica.se (Swedish storechain)

2013-04-11  jens persson  <jens@persson.cx>

    * First shot on an importer for ica.se

2013-04-06  Bernhard Reiter  <ockham@raz.or.at>

    * Revert "Add back gnomeprinter.py." (Accidental commit, meant to be in a new branch.)
      This reverts commit acad0d848f7c0567bf553dae27d7e6bbd3fe67a4.
    * Add FAQ item about Gourmet's data storage location.
    * Add back gnomeprinter.py.
    * Remove obsolete PIL import.
    * Add 'Francouzská' and 'Indická' (French and Indian) to defaults_sk.py
    * Add "French" and "Asian/Indian" to Cuisine defaults.
      Fixes #713.

2013-03-25  Bernhard Reiter  <ockham@raz.or.at>

    * Add Development Tools section (taken from the Wiki).
    * Move Windows version warning to README.windows.md.

2013-03-23  Bernhard Reiter  <ockham@raz.or.at>

    * Fix a bug in defaults_ru.py

2013-03-12  Bernhard Reiter  <ockham@raz.or.at>

    * Merge setup_win.py into setup.py.
      Also add some extra functionality to include required Gtk+ Theme files.
    * Add __init__.py to web_plugin to turn it into a module.
      Otherwise, there's an error with py2exe.

2013-03-10  Bernhard Reiter  <ockham@raz.or.at>

    * Add (Eclipse's) .settings/ dir to .gitignore
    * Fix a bug in get_pluralized_form.

2013-03-09  Bernhard Reiter  <ockham@raz.or.at>

    * Remove some obsolete imports from gourmet/importers/html_importer.py.
    * Remove obsolete Queue import from gourmet/importers/imageBrowser.py.
      This was causing problems with py2exe.
    * Add *.pyo files to .gitignore.

2013-03-06  Bernhard Reiter  <ockham@raz.or.at>

    * Fix a bug that caused gourmet to fail when LC_ALL=C

2013-03-06  Bernhard Reiter  <ockham@raz.or.at>

	* Remove -dev suffix from version in gourmet/version.py.
	* Update MANIFEST.in.
	  Running "python setup.py sdist" will now exactly reproduce
	  the current git state.
	* Add .project to .gitignore.
	* Remove gourmet/.gitignore as omission of *.pyc files is recursively
	  covered by our root .gitignore
	* Remove bin/gourmet-importer and bin/gourmet-importer-profile.
	  Both are apparently unused, unmaintained and severely outdated.
	* Remove translation scripts from po/ as they're obsoleted
	  by distutils-extra (see CODING file).
	* Replace 'import Image' by 'try: from PIL import Image
	  except ImportError: import Image'.
	  Rationale: http://lists.debian.org/debian-python/2013/02/msg00017.html
	* Update Gourmet and Python version in windows/gourmet-installer.nsi.
	* Update *.po files to match current source.
	* Update *.po files from Launchpad Translations.
	* Add author_email field to setup.py.
	* Update MANIFEST.in.
	* Remove windows/Gourmet.pyw from po/POTFILES.in.

2013-03-04  Bernhard Reiter  <ockham@raz.or.at>

	* Remove obsolete files.
	* Update LICENSE (new FSF address).
	* Remove windows/Gourmet.pyw as it's obsoleted by bin/gourmet.
	* Fix some py2exe parameters.

2013-03-03  Bernhard Reiter  <ockham@raz.or.at>

	* Fix directory locations in setup_win.py.
	* Fix import path in setup_win.py

2013-02-27  Bernhard Reiter  <ockham@raz.or.at>

	* Backup when upgrading the DB to v0.16.
	* Remove obsolete comment.
	* Remove obsolete file gourmet/PngImagePluginUpToDate.py.
	* Simplify a conditional expression.
	* Avoid a KeyError when pressing Enter on an empty search entry.
	* Remove gourmet/importers/mealmaster_importer.py from po/POTFILES.in.

2013-02-20  Bernhard Reiter  <ockham@raz.or.at>

	* Remove gourmet/importers/mealmaster_importer.py as it's obsolete.
	  That file lives now in gourmet/plugins/import_export/mealmaster_plugin/.
	* Remove shebangs from non-executable files.
	* Change wording of README.md a bit.
	* Merge pull request #694 from MrShark/master
	  Make working in a virtualenv easier

2013-02-14  jens persson  <jens@persson.cx>

	* Update documentation
	* changed /usr/bin/python to /usr/bin/env python to alow usage in virtualenvs
	* Remove hardcoded install path

2013-02-06  Bernhard Reiter  <ockham@raz.or.at>

	Fix #288.

2013-02-05  Bernhard Reiter  <ockham@raz.or.at>

	* Remove some clauses that checked for SQLALchemy < 0.6 as we're relying on >= 0.7 anyway now.
	* Add Integer primary key columns (named 'id') to all remaining tables.

2013-02-04  Bernhard Reiter  <ockham@raz.or.at>

	Remove pickle_key and pickle_val options from dbDic.

2013-02-03  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/convert.py (integerp): Restore NUMBER_END_NO_RANGE_REGEXP
	(integerp): Quick fix to NumberEnry

	* gourmet/backends/db.py (regexp): Fix sqlite custom function
	error -- regexp searching now works. This closes #691. This bug
	was caused by a change in SQLAlchemy behavior 0.6->0.7.
	

2013-02-02  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_importer.py (mmf_constants.__init__): servings->yields

	* gourmet/plugins/import_export/krecipe_plugin/krecipe_importer.py (KrecHandler): servingsyields->

	* gourmet/importers/importer.py (Importer.commit_rec): Update servings->yields.

	* gourmet/backends/db.py (RecData.add_rec): Update servings/yields
	code.

	* gourmet/exporters/exportManager.py
	(ExportManager.offer_multiple_export): Fix bug #234, #691.

2013-02-01  Bernhard Reiter  <ockham@raz.or.at>

	Unpickle Booleans and Strings that have erroneously remained pickled in the
	database during previous Metakit -> SQLite -> SQLAlchemy database migrations.

	Fixes #678.

2013-01-30  Bernhard Reiter  <ockham@raz.or.at>

	* Rename gourmet/sound_gnome.py to gourmet/sound_gst.py.
	* Restructure directory layout once again.
	  Move images, icons, sound, and style directories to data/;
	  this is in preparation of a possible future move to DistutilExtra's
	  auto setup (see #679).
	* Install FAQ and LICENSE to share/doc/gourmet/.
	* Prepend chromium-browser to list of *.html document launchers.
	* Prepend libreoffice to list of *.rtf document launchers.
	* When exporting, point Save as dialog to user's Documents directory by default.

2013-01-29  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/plugins/nutritional_information/nutrition.py
	(NutritionData.get_matches): Make sure get_matches returns a list
	as expected, not None.
	(NutritionData.get_nutinfo_for_item): Handle empty units correctly.
	(NutritionData.get_conversion_for_amt): Handle empty units correctly.

	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py (mealmaster_exporter.__init__): Fix boneheaded typo.
	(mealmaster_exporter.write_attr): Update servings-->yields
	(mealmaster_exporter.write_attr): Reduce padding to conform to MMF standard
	(mealmaster_exporter.write_categories): Reduce padding to conform to MMF standard
	(mealmaster_exporter.write_ing): Allow for empty units (fix boneheaded error)

	* gourmet/plugins/import_export/html_plugin/html_exporter.py
	(html_exporter.write_text): Fix NAME_TO_ATTR lookup issue w/
	plugins.

	* gourmet/plugins/field_editor/fieldEditor.py
	(FieldEditor.fieldChangedCB): Fix possible issue with NAME_TO_ATTR
	lookups and plugins searching for attributes that don't exist
	there.

	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_importer.py
	(mmf_constants.__init__): Respect new Gourmet norms regarding
	standard ingredient abbreviations (remove periods, mostly)
	* gourmet/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py
	(mealmaster_exporter.__init__): Make sure category comes first as
	per mealmaster specs.
	(mealmaster_exporter.__init__): Remove redundant/stupid code
	(mealmaster_exporter.write_ing): Fix ingredient code and make more
	robust against future changes in defaults.

2013-01-25  Bernhard Reiter  <ockham@raz.or.at>

	* Mention BeautifulSoup in the Extra Requirements section of README.md.
	* Merge pull request #689 from jraber/unbundleBeautifulSoup
	  Removed bundled (old) versions of BeautifulSoup.py
	* Change back perms for bin/gourmet to 755.

2013-01-17  Jeff Raber  <jeff.raber@gmail.com>

	Removed bundled (old) versions of BeautifulSoup.py

	BeautifulSoup.py seems to be available in the common linux distros. Otherwise, it can
	be installed with 'pip install BeautifulSoup'

	Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=895228

2013-01-15  Bernhard Reiter  <ockham@raz.or.at>

	Add slogan to README.md ;-)

2013-01-12  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/importers/importManager.py: gettext fix

2013-01-12  Bernhard Reiter  <ockham@raz.or.at>

	* Add new Integer primary keys to the shopcats, shopcatsorder, and pantry tables.
	  Those tables had Text columns as primary keys, which, when used with MySQL,
	  requires an extra parameter specifying the length of the substring that MySQL
	  is supposed to use for the key. Thus, we're adding columns named id of type
	  Integer and make them the new primary keys instead.
	  Fixes #681.

	* Move *.gourmet-plugin files to plugins/, install to share/gourmet/plugins.
	  This is required for python-distutils-extra to be able
	  to translate and install *.gourmet-plugin files properly.

2013-01-09  Bernhard Reiter  <ockham@raz.or.at>

	* Change data/recipe.dtd perms from 755 to 644.
	* .gitignore: Remove obsolete lines, add .pydevproject. .cvsignore: Delete.

2013-01-07  Bernhard Reiter  <ockham@raz.or.at>

	* Enable building of *.mo and *.gourmet-plugin files during development.
	  Furthermore, update CODING with instructions, and remove
	  bin/gourmet_in_place as it's now obsolete.
	* Modify file locations in built settings.py, not the one in the source tree.

2013-01-06  Thomas Mills Hinkle  <tom@pebble>

	* gourmet/GourmetRecipeManager.py (RecGui.setup_main_window): Make sure search entry has focus.

	* gourmet/plugins/listsaver/shoppingSaverPlugin.py: gettext fix

	* gourmet/plugins/key_editor/recipeEditorPlugin.py: gettext fix

	* gourmet/plugins/import_export/pdf_plugin/print_plugin.py: Fix gettext

2013-01-06  Bernhard Reiter  <ockham@raz.or.at>

	* Remove obsolete cruft from windows/ directory.
	* Update website, download link and Tom's email address in NSIS script.
	* In the HTML output, don't translate class names.

	  Otherwise, this would require CSS selectors to be also localized and would
	  not work across languages. That's obviously not how it should be done.
	* Remove modules_check and other cruft from setup.py
	  This hasn't been used or updated for a while, and as it isn't really
	  supported by distutils, it has been more a source of redundancy (read
	  confusion and maintenance burden) in conjunction with dependencies
	  listed in our README.
	* Rename README to README.md, and use Markdown to style it.
	* Remove bin/__init__.py as it's obsolete now.
	* Minor line layout fix.
	* Replace our custom tools/gourmet_distutils.py by a python-distutils-extra dependency.
	* Update po/POTFILES.in and po/gourmet.pot.

2013-01-05  Bernhard Reiter  <ockham@raz.or.at>

	* Replace some wildcard imports.
	* Remove some cruft from gourmet/__init__.py.

2013-01-02  Bernhard Reiter  <ockham@raz.or.at>

	* Update requirements in the README file.
	* Update setup.cfg to at least somewhat reflect current RPM based distributions.
	* Remove rpm/gourmet.fedora.spec and rpm_build.sh.
	  This stuff was severely outdated, duplicates information from setup.py and
	  setup.cfg (if we're really going to keep providing RPMs which hasn't been done
	  during the past releases), and is maintained better at Fedora anyway.
	* Change more URLS from Sourceforge to GitHub.

2013-01-01  Bernhard Reiter  <ockham@raz.or.at>

	* Change old SourceForge URLs to new GitHub ones where applicable.
	* Move practically all program information to version.py and import it from there into setup.py and setup_win.py.
	* Fix some install locations.
	* Add back toolbar, with an option in the preferences dialog to hide it.
	* Don't fall back to version = 0.11.0 in setup.py.
	* Simplify some code.

2012-12-31  Bernhard Reiter  <ockham@raz.or.at>

	Remove BUG_URL link from gglobals.py as its both outdated and not used anywhere.

2012-12-30  Bernhard Reiter  <ockham@raz.or.at>

	* Don't use Gtk.InfoBar yet as it requires pyGtk >= 2.22. We'll keep this in a branch for now.
	* Remove obsolete line from gglobals.py
	* Move info.py contents back into version.py as we got rid of the critical circular dependency with OptionParser.py.
	* Remove checks for gtk.CellRendererCombo as it has been part of GTK since v2.6.
	* Determine location of installed files properly.
	* Another stylesheet path fix in html_exporter.py.

2012-12-28  Bernhard Reiter  <ockham@raz.or.at>

	* Add *.html pattern to html_exporter_plugin.py's saveas_filters.
	* Fix default.css location in HTML exporter plugin.
	* Remove custom file type widget from FileSelectorDialog.
	* Remove FileChooserSaveAs.py as it has long been obsoleted by gtk_extras/dialog_extras.py.

2012-12-25  Bernhard Reiter  <ockham@raz.or.at>

	* Let tools.gourmet_distutils.py take care of translation and installation of gourmet.desktop.
	* Install png and svg icons to locations that enable desktop environments to pick proper file.
	  See http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#directory_layout

2012-12-19  Bernhard Reiter  <ockham@raz.or.at>

	Remove obsolete GourmetFauxThreads.py and GourmetThreads.py.

2012-12-17  Bernhard Reiter  <ockham@raz.or.at>

	* Fix db.py to allow (dev) version suffices like 0.16.0-dev.
	* Add patch to include schema.org metadata for HTML exporter by SF user freedo.
	  See https://sourceforge.net/tracker/?func=detail&aid=3519632&group_id=108118&atid=649654
	  and http://www.schema.org/Recipe, respectively.
	* Add plurals handling fix by A. Katz.
	  "Just a quick patch to fix a bug in default.py.
	  The function for converting a plural to a singular unit had two issues.
	  a) WORD_TO_SING_PLUR_PAIR keys are lowercase but the word being handed to the function could be in any case
	  b) if the word is not in WORD_TO_SING_PLUR_PAIR it does nothing, this patch tries lang.guess_singulars before
	  giving up."
	  See https://sourceforge.net/tracker/?func=detail&aid=3420657&group_id=108118&atid=649654

2012-11-27  Bernhard Reiter  <ockham@raz.or.at>

	Remove obsolete line from setup.py

2012-11-26  Bernhard Reiter  <ockham@raz.or.at>

	* Fix gourmet/backends/db.py so it works with SQLAlchemy >= 0.7.
	* Remove po/*/LC_MESSAGES/gourmet.mo files as they are generated at build time from po/*.po files.

2012-11-22  Bernhard Reiter  <ockham@raz.or.at>

	Remove obsolete file (now in gourmet/plugins/import_export/mastercook_import_plugin/)

2012-05-25  Thomas Hinkle  <tmhinkle@gmail.com>

	* Fixed conflict
	* ++gettext

2012-04-27  Tom  <tom@localhost6.localdomain6>

	* gourmet/plugins/unit_display_prefs/__init__.py: import gettext

	* gourmet/plugins/python_shell/__init__.py: import gettext

	* gourmet/plugins/nutritional_information/nutrition.py (NutritionData.get_nutinfo): remove verbosity

	* gourmet/plugins/nutritional_information/nutPrefsPlugin.py: import gettext

	* gourmet/plugins/nutritional_information/main_plugin.py: import gettext

	* gourmet/plugins/field_editor/__init__.py: import gettext

	* gourmet/plugins/email_plugin/emailer_plugin.py: import gettext

	* gourmet/plugins/duplicate_finder/recipeMergerPlugin.py: import gettext

	* gourmet/plugin_gui.py: import gettext

	* gourmet/info.py: import gettext

	* gourmet/plugin_loader.py (Pluggable.get_plugin_by_module): Add
	convenience function for grabbing plugin instances.

2012-04-22  Bernhard Reiter  <ockham@raz.or.at>

	Bump version number to 0.16.0-dev

2012-03-06  Bernhard Reiter  <ockham@raz.or.at>

	* Remove gettext_setup.py as its logic has been split in settings.py and gglobals.py (and info.py)
	* Remove some obsolete logic from setup.py.
	* Move localized stuff from version.py to newly created info.py to avoid circular dependencies.
	* Move logic that searches for the data files path from gglobals.py to newly created settings.py.
	* Wrap the path finding stuff in bin/_preamble.py in a function
	* Add __init__.py to the bin/ directory so we can import it as a module.
	* Rename --data-directory cmdline option to --gourmet-base.
	* Fix occurrences of HELP_FILE constant.

2012-02-27  Bernhard Reiter  <ockham@raz.or.at>

	* Remove --image-directory and --ui-directory cmd line options, as those are now subdirectories of --data-directory.
	* Replace custom inquiry if existing file should be overwritten by GTK one.

2012-02-26  Bernhard Reiter  <ockham@raz.or.at>

	* Replace create_manifest.py by MANIFEST.in
	* Remove some more duplicates

2012-02-20  Bernhard Reiter  <ockham@raz.or.at>

	Minor setup.py fix

2012-02-16  Bernhard Reiter  <ockham@raz.or.at>

	Remove tools/gourmet_distutils as it's unused (there's still tools/gourmet_distutils.py)

2012-02-12  Bernhard Reiter  <ockham@raz.or.at>

	* Move website URL from GRM.py to version.py
	* Replace old splash screen by new one
	* Change directory layout once more. Looks good now, but still a lot of code fixes ahead.

2012-02-11  Bernhard Reiter  <ockham@raz.or.at>

	* Un-hardwire intltool's path under windows in setup.py
	* Fix FAQ and LICENSE locations in code
	* Update setup.cfg, mostly to use .bz2 compression
	* Restructure data/ directory
	* Add images/gourmet.svg, and remove a couple of outdated images.
	* Rename glade/ directory to ui/
	* Restructure directory layout to comply more to
	  http://as.ynchrono.us/2007/12/filesystem-structure-of-python-project_21.html

2012-02-10  Thomas Hinkle  <tmhinkle@gmail.com>

	* Fixed density of sugar (I think I'd used the density from a chemistry,
	  rather than a cooking, site, which didn't account for the air between
	  the sugar crystals when you measure it)
	* Don't fail if elib.intl isn't present -- print a warning instead.
	* Glade-->UI

2012-02-09  Bernhard Reiter  <ockham@raz.or.at>

	Rename i18n/ directory to po/ so intltool-update --maintain will work

2012-02-08  Bernhard Reiter  <ockham@raz.or.at>

	* Images cleanup
	* Remove a stray .po file
	* Rename gladed command line option to uid
	* Rename some more methods from glade to ui (or builder)
	* s/gladebase/uibase/g
	* Use updated i18n/de.po from Launchpad

2012-02-07  Bernhard Reiter  <ockham@raz.or.at>

	* Replace custom hack in setup_gettext.py by elib.intl module
	* Add Lauchpad header to i18n/de.po

2012-02-06  Bernhard Reiter  <ockham@raz.or.at>

	Update i18n/gourmet.pot translation template

2012-02-05  Bernhard Reiter  <ockham@raz.or.at>

	* New German translations by nobody (at) t4b.me
	* i18n string unification fixes by nobody (at) t4b.me
	* Another i18n fix

2012-02-01  Bernhard Reiter  <ockham@raz.or.at>

	* Yet another (somewhat prominent) i18n fix.
	* Internationalize src/lib/plugins/import_export/archive_plugin/zip_importer_plugin.py
	* s/ = /=/ in the *.gourmet-plugin.in files, which previously impeded
	  localization, as intltool-merge can't deal with whitespaces on the wrong places.

2012-01-31  Bernhard Reiter  <ockham@raz.or.at>

	* Fix i18n/POTFILES.in to properly include .gourmet-plugin.in files
	* Add Russian localization files i18n/ru.po and src/lib/defaults/defaults_ru.py
	  by Alexander Prokoudine, from our Sourceforge patch tracker: see 
	  https://sourceforge.net/tracker/?func=detail&aid=2858486&group_id=108118&atid=649654
	  and https://sourceforge.net/tracker/?func=detail&aid=2858485&group_id=108118&atid=649654
	* Fix sort of a typo
	* Replace occurrences of .props.someproperty by {g|s}et_property('someproperty') to fix bug #3480177
	* Replace occurrences of .props.someproperty by {g|s}et_property('someproperty') to fix bug #3480177
	* Another fix to make i18n work.

2012-01-30  Bernhard Reiter  <ockham@raz.or.at>

	Small i18n related fix.

2012-01-29  Bernhard Reiter  <ockham@raz.or.at>

	* Add domain=gourmet attribute to the interface tag in the .ui files
	* Update i18n/POTFILES.in to reflect .glade -> .ui file conversion
	* Add [type: gettext/glade] prefix to .ui files in i18n/POTFILES.in
	  so that they're actually searched for strings by intltool.
	* Add locale.bindtextdomain('gourmet',DIR) so that the strings from
	  our .ui (and glade) files are actually translated -- which they previously weren't.

2012-01-21  Bernhard Reiter  <ockham@raz.or.at>

	* Add i18n/generate_mo.sh as i18n/generate_mo.py doesn't seem to work for me.
	* In src/lib/version.py, import gettext_setup so trings get translated.
	* Make ImageSelectorDialog open the user's Pictures directory when launching it.

2012-01-19  Bernhard Reiter  <ockham@raz.or.at>

	* Remove obsolete cmd line options documentation from gourmet.1
	* Move LICENSE displaying logic from version.py to GourmetRecipeManager.py
	  as it requires some imports; and add LICENSE to setup.py

2012-01-17  Bernhard Reiter  <ockham@raz.or.at>

	Add LICENSE to MANIFEST as it's needed by the About dialog.

2012-01-12  Bernhard Reiter  <ockham@raz.or.at>

	Comment out an obsolete windows workaround.

2012-01-11  Bernhard Reiter  <ockham@raz.or.at>

	Remove a stray file that had sneaked into MANIFEST and i18n/POTFILES.in

2012-01-10  Bernhard Reiter  <ockham@raz.or.at>

	* Regenerate i18n/gourmet.pot and i18n/*.po files by running i18n/grab_strings.sh
	* Update i18n/POTFILES.in based on MANIFEST contents
	* Update MANIFEST
	* Update POTFILES, translation template (gourmet.pot), and merge into individual *.po files
	* Fix Nutritional Information plugin

2012-01-07  Bernhard Reiter  <ockham@raz.or.at>

	Remove make_star_button and make_star_image functions as they aren't needed anymore.

2012-01-06  Bernhard Reiter  <ockham@raz.or.at>

	* Replace gnome.sound_* stuff with gstreamer (gst) stuff.
	  This should conclude our removal of (python-)gnome dependencies.
	  We now need pygtk >= 2.16 and (py)gst instead (which is much less heavy-weight than gnome).
	* Remove gnome stuff from the pdf_exporter.py test code.
	* Replace gnome-open by the cross-desktop xdg-open command.
	* Remove gnomeprint import from gglobals.py
	* Remove obsolete 'printer' command line option.
	* Remove call to gnome.url_show as we can assume gtk.show_uri to exist in PyGTK >= 2.16

2011-12-30  Bernhard Reiter  <ockham@raz.or.at>

	Replace gnome.ui.About dialog by gtk.AboutDialog

2011-12-27  Bernhard Reiter  <ockham@raz.or.at>

	Use an InfoBar to display deletion warning message

2011-12-19  Bernhard Reiter  <ockham@raz.or.at>

	Add alignment objects to recCardDisplay.ui as that information got lost during gtk.Builder migration.

2011-12-17  Bernhard Reiter  <ockham@raz.or.at>

	Add NutritionLabel widget back to nut_recipe_card_display.ui which got lost in the migration to gtk.Builder

2011-12-16  Bernhard Reiter  <ockham@raz.or.at>

	* Fix a signal handler related bug due to gtk.Builder migration
	* Remove import gtk.glade statements everywhere.
	* Remove custom_handlers stuff as it's obsolete now after migrating to gtk.Builder.
	* Migrate even the faux stuff to gtk.Builder
	* Remove references to *.glade files in setup.py and create_manifest.py; recreate MANIFEST.
	* Migrate the Nutritional Information plugin to gtk.Builder. This requires still some polishing.
	* Change NumberEntry's default_to_fractions argument default value to False
	  (as that's what it's set to practically everywhere, and it will make migration to gtk.Builder easier).
	* Forgot to add keyeditor.ui and remove keyeditor.glade
	* Migrate recipeMerger.py to gtk.Builder
	* Migrate keyEditor.py to gtk.Builder
	* Remove app.glade (in favor of app.gui)
	* Migrate chooserNotebook.py to gtk.Builder (though currently unused)
	* Remove recipeMerger.py from src/lib as it's now in a plugin subdirectory
	* Replace remaining glade.XML occurrences in GRM.py by gtk.Builder equivalents.
	* Migration to gtk.Builder: Add app.ui and change remaining occurrences of app.glade to app.ui
	* Replace checks for app.glade by checks for app.ui
	* Remove an unnecessary import from src/lib/reccard.py
	* Migrate batchEditor from glade to gtk.Builder
	* Remove glade/keyeditor.glade as that files is already in src/lib/plugins/key_editor/
	* Remove glade/*.glade and glade/*.gladep files for which conversion to *.ui is complete.
	* Migrate recipe card to gtk.Builder

2011-12-15  Bernhard Reiter  <ockham@raz.or.at>

	* Fix reccard.py after migration to gtk.Builder; plus two fixes to ratingWidget.py
	* Add a README to glade/catalog
	* More recCardDisplay to gtk.Builder fixes
	* Properly migrate recCardDisplay to gtk.Builder
	* Create gourmetwidgets catalog for glade, adapt widgets code.

2011-12-13  Bernhard Reiter  <ockham@raz.or.at>

	Start migrating recCardDisplay to gtk.Builder

2011-07-01  Tom  <tom@localhost6.localdomain6>

	* src/lib/convert.py (NUMBER_FINDER_REGEXP): Avoid seeing things
	with a terminal . or , as numbers, thus avoiding seeing numbered
	lists as ingredients.

2011-06-28  Tom  <tom@localhost6.localdomain6>

	* src/lib/reccard.py (IngredientController.commit_ingredients.commit_iter):
	Fix attr lookup error in corner cases.

2011-03-20  Tom  <tom@localhost6.localdomain6>

	* src/lib/version.py (version): Version --> 0.15.9

	* src/lib/shopgui.py (ShopGui.show): Make sure window shows up
	when something's added.

	* src/lib/backends/db.py (RecData.initialize_connection): Remove
	threadlocal strategy. This may be a mistake, but it seems to clear
	up the commit errors numerous people were experiencing.

	* src/lib/shopgui.py (ShopGui.__init__): Make sure popup menu gets
	set-up for changing categories in shopping list.

	* src/lib/reccard.py (shop_for_recipe_cb): Fix shopping list, and improve error messages.

	* src/lib/GourmetRecipeManager.py (StuffThatShouldBePlugins.shop_recs): fix shopping list.

	* src/lib/shopping.py: Fix refactoring error.

	* src/lib/shopgui.py (ShopGui.getOptionalIngDic): Fix refactoring
	error that broke "add-to-shopping list" behavior

2011-03-08  Tom  <tom@localhost6.localdomain6>

	* src/lib/version.py (version): Version --> 0.15.8

2011-03-07  Tom  <tom@localhost6.localdomain6>

	* src/lib/backends/db.py (RecData._force_unicode): Don't unicode-ify images!

2011-02-02  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer.py: 
	Adapt mealmaster plugin to handle 'Windows Gourmet' file (who
	knows what this program was, but we appreciate their name!). The
	adaptations shouldn't do any harm to mealmaster, and may help with
	imports of some of the many broken mealmaster files that exist on
	the internet.

2011-01-05  Tom  <Thomas_Hinkle@sf.net>

	* create_manifest.py: 
	(write_lst_to_file): Include *.ui files!
	* README: Remove obsolete material about Gnomeprint.
	* src/lib/plugin.py (RecEditorModule.grab_focus): Add method for
	editor modules to setup focus for editing.
	* src/lib/reccard.py (RecEditor.present): Add code to allow each
	module to grab focus programatically to set up editing.
	(DescriptionEditorModule.grab_focus): Make DescriptionEditorModule
	grab focus for the "title" box right away, so that when you open
	the editor window you can start typing.

	* src/lib/backends/db.py (RecData.get_unique_values): Fix bug in
	DB code that caused a SQL error.

2010-12-16  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/version.py (version): Version->0.15.7
	* src/lib/backends/db.py (RecData.get_unique_values): Patch from
	Steve Langasek for Ubuntu bug #534088
	(RecData.get_unique_values): Fix handling of null criteria.

2010-12-10  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/web_plugin/gourmetweb/templates/shop.html: Add forms to add/remove from pantry.

	* src/lib/plugins/web_plugin/gourmetweb/recview/views.py (MyShoppingList.get_shopper): Use database for shopping list so we can store e.g. pantry data.
	(multiply_rec): Use 'yields' when possible; otherwise use multiply
	(shop_to_pantry): Add callback to move items to pantry
	(shop_to_list): Add callback to remove items from pantry

	* src/lib/plugins/web_plugin/gourmetweb/urls.py: Add shopping list
	callbacks (move to/from pantry)

2010-12-09  Tom  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.isearchCB):
	Set cursor to busy while searching.

	* src/lib/recindex.py (RecIndex.search): Fix busy cursor while searching.

	* src/lib/backends/db.py (RecData.get_ingkeys_with_count): Fix bug
	that broke IngredientEditor view entirely.

	* src/lib/plugins/key_editor/keyEditor.py (KeyStore.reset_views):
	Don't undo search when resetting view after applying an edit.

	* src/lib/backends/db.py (RecData.do_modify): Force unicode (Fixes #3120915)

2010-11-28  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.update_version_info): Patch from Jeff Raber to remove sqlite3 reference
	(RecData.get_unique_values): Patch from buergi to get working with MySQL

2010-11-16  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/reccard.py (DescriptionEditorModule.update_from_database):
	Fix signal used for spinbutton for yield and any other
	spinbuttons. (patch from Saulius Lukauskas)

	* src/lib/plugins/import_export/mastercook_import_plugin/mastercook_plaintext_importer.py:
	Patch from Saulius Lukauskas fixing column-matching/dash-matching
	conflict that broke ingredient import.

2010-10-20  Thomas Hinkle  <tom@grenville>

	* src/lib/plugins/web_plugin/gourmetweb/templates/rec.html: Start
	adding some style to web-based recipe view.

	* src/lib/backends/db.py (RecData.add_column_to_table): Workaround
	sqlalchemy 0.6.0 incompatability

	* src/lib/plugins/nutritional_information/nutrition.py (NutritionData.get_nutinfo_for_ing):
	Take into account amounts on recipes called as ingredients.

2010-08-01  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/web_plugin/gourmetweb/templates/rec.html: Add
	AJAX magic to do multiplication ajax-style when javascript is
	available.

2010-07-30  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/shopping.py: Refactor code -- move some code from
	shopgui classes to front-end neutral ShoppingList class that can
	be base class for HTML front-end.

	* src/lib/shopgui.py: Refactor code to allow web-front-end


	* src/lib/plugins/web_plugin/: Start a django-based web-front-end
	to Gourmet

2010-07-21  Thomas M. Hinkle  <tom@grenville>

	* src/lib/version.py (version): Version->0.15.6

2010-07-20  Thomas M. Hinkle  <tom@grenville>

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.mimetypes):
	Fixed bug in mimetypes, by adding expected application/xhtml+xml
	type.

	* src/lib/backends/db.py (RecData.get_criteria): Fix another
	sqlalchemy-API-change-caused bug.

2010-07-13  Thomas M. Hinkle  <tom@grenville>

	* src/lib/backends/db.py (RecData.save): Try to work around
	sqlalchemy bug that seems to through error on some (extra?)
	commits.

2010-07-10  Thomas M. Hinkle  <tom@grenville>

	* src/lib/version.py (version): Version-->0.15.5

	* src/lib/recindex.py (RecIndex.tree_keypress_cb): Handle Page-Up,
	Page-Down, Home and End properly for our multiple page interface.

2010-07-09  Thomas M. Hinkle  <tom@grenville>

	* src/lib/backends/db.py (RecipeManager.parse_ingredient): Fix
	typo/logic-error that prevented some units from being recognized.

	* src/lib/* Get rid of raise + string calls, as python 2.6
	prohibits them (patch from #2979619)

	* src/lib/recindex.py (RecIndex.make_search_dic): Look anywhere in
	text, not just at beginning. (fixes bug #3021913)

	* src/lib/reccard.py (DescriptionEditorModule.save): Remove old
	debug statements. Note to self: leaving in print statements is
	dangerous, as it can raise unicode errors and create bugs where
	all was well, as in bug #3018283

	* glade/recCardIngredientsEditor.glade: Update ingredient editor tooltip.

2010-06-07  Thomas Mills Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (map_type_to_sqlalchemy): Use LargeBinary type if available (sqlalchemy 0.6+)
	(RecData.get_unique_values): Fix boolean-related sqlalchemy 0.6+ bug.

	* src/lib/importers/interactive_importer.py (InteractiveImporter.label_selection):
	Fix error (we needed iter, we got mark) (patch from Jeff Spaleta)
	(InteractiveImporter.set_text): Fix logic error (remove extra
	newlines before parsing when it still matters).(patch from Jeff
	Spaleta)

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.test_url):
	Check that content_type is iterable (modified version of patch
	from Jeff Spaleta).

2010-05-19  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/db.py: Change name of ingredient_parser to
	parse_ingredient (following naming conventions used everyone else
	by pretty much everyone alive). Make this change throughout other
	source files.

	* src/lib/importers/generic_recipe_parser.py (RecipeParser): Fix
	unicode/regexp issue with ing_matcher

2010-03-25  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.update_version_info): Make sure
	recipe_id doesn't already exist as a column before altering old
	databases -- apparently we were wrong about when this change was
	made.

2010-03-05  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gglobals.py (FLOAT_REC_ATTRS): Add list of recipe
	attributes that are floats (as opposed to ints, text, etc)

	* src/lib/reccard.py (DescriptionEditorModule.save): Make sure
	floating attributes (e.g. yields) get grabbed as values and not as
	text.

	* glade/recCardDescriptionEditor.glade: Make yields amount entry
	accept decimals.
	* src/lib/defaults/defaults_en.py (UNITS): ++drops
	* src/lib/defaults/defaults_en_GB.py (UNITS): ++drops

	* src/lib/reccard.py (IngredientTreeUI.ingtree_keypress_cb): Make
	delete-key in ingredient editor view only work in treeview (same
	as change made for main view on 2/9/2010).

2010-03-03  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (GourmetApplication.get_attribute_model):
	Don't bother caching the attribute models. It results in
	inconsistency for the user and it's not that expensive to just
	regenerate the lists each time we need them.

	* defaults_en.py defaults_en_GB.py ++T. and t. as abbreviations
	for Tablespoon and teaspoon

2010-02-09  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (RecGui): Make
	delete-key-deletes-recipe behavior a callback on keypresses only
	in treeview. This prevents users using the delete key in the
	search box from accidentally deleting recipes. Also, let backspace
	delete recipes as well for convenience. 

	* src/lib/backends/db.py (RecData.get_criteria): Make sure search
	strings are proper unicode objects. Fixes bug #2948135.

2010-01-16  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/version.py Version->0.15.4
	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.postparse):
	Strip extra newlines.
	(MenuAndAdStrippingWebParser.cut_menus): Add more common website
	nav class ID's (footer, header, sitemap).
	(MenuAndAdStrippingWebParser.cut_menus): Don't ignore the whole
	body tag, no matter what (fixes epicurious import)

	* src/lib/importers/interactive_importer.py (InteractiveImporter.set_text):
	Strip extra newlines.

2010-01-15  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gtk_extras/thumbnail.py (check_for_thumbnail): Catch
	non-ASCII characters in URLs.

2010-01-06  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/interactive_importer.py (InteractiveImporter):
	Replace text-tags in buffers with ComboBox widget that allows user
	to change tag of marked-up region. Also, separated out giant list
	of buttons into categories and made more suitable for wider and
	shorter screens.

2010-01-02  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.setup_tree):
	Wrap text in treeview when it is too long; automatically reflow as
	window is resized.

2009-12-29  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.test_file):
	Add support for xhtml. Be fallback option whenever we match a file
	pattern.

	* src/lib/plugins/import_export/plaintext_plugin/plaintext_importer_plugin.py (PlainTextImporterPlugin.test_file):
	Don't match *all* files as fallback options -- have a list of
	"antipatterns" to exclude.

2009-12-18  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gtk_extras/dialog_extras.py (SimpleFaqDialog.NESTED_MATCHER):
	Fix bug in REGEXP in number-header parsing.

	* src/lib/plugins/nutritional_information/databaseGrabber.py (DatabaseGrabber.parse_abbrevfile):
	Remove old code.

	* FAQ: Update FAQ (which was pretty seriously out-of-date).

2009-12-17  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.validate_recdic): Ensure recipe
	info is unicode.

	* src/lib/check_encodings.py: Be less verbose.

	* Version -> 0.15.3

	* src/lib/plugins/nutritional_information/parser_data.py (NUTRITION_FIELDS): Update fields for SR21.

	* src/lib/plugins/nutritional_information/nutritionGrabberGui.py (check_for_db):
	Update DBs from SR20 (check if there are choline entries to see if
	the DB is old).

	* src/lib/plugins/nutritional_information/databaseGrabber.py (DatabaseGrabber.parse_abbrevfile):
	Update fields when adding doesn't work.

	* src/lib/plugins/nutritional_information/data_plugin.py (NutritionDataPlugin.update_version): Add new field (choline)

	* src/lib/backends/db.py (RecData.update_version_info): Fix update
	from versions < 0.11.x
	
	* i18n/gourmet.pot: Update.

	* i18n/POTFILES.in: Update to reflect current MANIFEST

	* src/lib/plugins/nutritional_information/parser_data.py (NUTRITION_FIELDS):
	Reorder fields and add choline for SR21 (they changed more than I
	had first thought!)

2009-12-14  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.update_version_info): Fix update
	from versions < 0.11.x

2009-12-11  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/nutrition.py (foo.SimpleInterface.print_info):
	Be less verbose.
	* src/lib/importers/importer.py (Importer.commit_rec): Make sure
	we provide unicode strings to db.
	* src/lib/reccard.py (IngredientEditorModule.quick_add): Make sure
	we provide unicode strings to DB.
	(DescriptionEditorModule.save): Make sure we provide unicode strings.

2009-12-02  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/check_encodings.py (GetFile.__init__): Divide lines
	using built-in splitlines() function -- this fixes problems with
	line breaks on e.g. mac text files.

	* src/lib/importers/importManager.py (ImportManager.finish_web_import):
	Print information about importer being used.


2009-12-01  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (RecGui.setup_main_window): Add
	right-click menu back to main interface (we use the contents of
	the action menu for the right-click).

	* src/lib/reccard.py (RecCardDisplay.update_yields_multiplier):
	Fix updating of yield_unit on yield_change.

2009-11-29  Thomas M Hinkle  <tom@minime>

	* src/lib/prefsGui.py (PreferencesGui): Make PreferencesGui
	pluggable.

	* src/lib/plugins/nutritional_information/__init__.py: ++
	preferences plugin

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin):
	Add preference that allows user to turn off nutritional export
	altogether or to turn it off when information is only partial.

	* src/lib/plugin.py (BaseExporterPlugin.add_field): Add parameter
	write_empty_field (which defaults to False) to determine whether
	we add custom fields with no content.
	(DatabasePlugin.remove): Change "deactivate" call to "remove",
	which was what was intended (deactivate is called when the
	pluggable is destroyed; remove is called when the plugin is
	deactivated).
	(PrefsPlugin): Add base class for adding tabs to preferences
	dialog.

	* src/lib/plugin_loader.py (MasterLoader.register_pluggable): Fix
	typo.

	* glade/preferenceDialog.glade: Remove hardcoded email
	preferences (if we want them back, they belong in the email
	plugin).
	
2009-11-22  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (CustomUnitOption):
	Add custom widget for setting margins that allows adjusting of
	units (cm/inch/points).
	(PdfPrefGetter.get_args_from_opts): Save page layout preferences
	correctly.

	* src/lib/gtk_extras/optionTable.py (OptionTable.createOptionWidgets):
	Add CustomOption option for callers who want to provide their own
	widget for setting an option.

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob):
	Escape items in case they have &s or other characters that screw
	up XML.

2009-11-21  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/pdf_plugin/print_plugin.py (PDFRecipePrinter.begin_print):
	Try to raise an error if there's a problem with the PDF.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfPrefTable):
	Use prefs to save pdf settings automatically.

	* src/lib/gtk_extras/optionTable.py (OptionTable.createOptionWidgets):
	Fix bug where having a default value of 0 made any other value
	unsettable.

	* src/lib/reccard.py (RecCardDisplay.print_cb): Move repetitive
	code to printmanager.

	* src/lib/exporters/printer.py (PrintManager.print_recipes): Move
	basic printing code to PrintManager.

	* src/lib/GourmetRecipeManager.py (ImporterExporter.print_recs):
	Move repetitive print code to print manager so we can do things
	like handle exceptions elegantly there.

2009-11-20  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob):
	Fix typo that broke printing.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.setup_recipes):
	Clarify code around autosave.


	* src/lib/plugins/nutritional_information/reccard_plugin.py (NutritionDisplayModule.enter_page):
	Fix keyError bug on initialization.

	* src/lib/plugins/nutritional_information/nutritionLabel.py (NutritionLabel.setup_yield_label):
	Use singular form for "amount per ___" yield unit.

	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob):
	Use singular form for "amount per ____" yield unit.

	* src/lib/shopgui.py (ShopGui.setup_main): Don't show window
	initially.

	* src/lib/reccard.py (RecCardDisplay.update_yields_multiplier):
	Use singular forms when settings yields to 1.

2009-11-19  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (write_ingref):
	Only write links that will work -- we do this by tracking which
	recipes are going into our document and checking links against
	that list of recipes.

	* src/lib/plugins/import_export/pdf.gourmet-plugin.in: Change name
	and description to reflect this plugin's new status as the primary
	printing provider.

	* src/lib/exporters/printer.py: Add simple message telling user
	which plugin to install to get printing if there is no printing.

	* src/lib/exporters/exporter.py (ExporterMultirec.append_referenced_recipes):
	Add method to automatically append referenced recipes to the list
	of recipes to be exported.

	* src/lib/plugin_loader.py (MasterLoader.deactivate_plugin_set):
	Fix typo that broke deactivation of plugins.

2009-11-17  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (ImporterExporter.print_recs):
	Use new printing API to print.
	* src/lib/plugin.py (PrinterPlugin): Add new plugin for printing.
	* src/lib/reccard.py (RecCardDisplay.print_cb): Use new printing
	API to print.
	* src/lib/shopgui.py (ShopGui.doSave): No longer use "lprprinter"
	to do text save.
	(ShopGui.printList): Use new printing API to print.
	* src/lib/exporters/printer.py: Rewrite printer.py to use a plugin
	architecture. If no plugins are available, no printing. The
	expected plugin will be the PDF plugin using Reportlab.
	* plugins/import_export/pdf_plugin/print_plugin.py: Create plugin
	for new printing plugin architecture.

2009-11-06  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/website_import_plugins/__init__.py (plugins):
	++new AllRecipes plugin

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfPrefTable):
	Add preference widget that can be embedded in print preview
	dialog (in preparation for new printing back-end using
	poppler+reportlab)

	* src/lib/backends/db.py (RecData.update_version_info): Make sure
	we do updates for 0.14.7 ++ for people updatings from versions
	before 0.14

2009-11-01  Thomas M. Hinkle  <Thomas_Hinkle@sf.net>

	* lib/GourmetRecipeManager.py Make sure all actions w/o icons are
	marked as important (fixes Gourmet in horizontal-toolbar mode)
	* lib/plugin.py ditto (fix Gourmet in horizontal-toolbar mode)
	* lib/reccard.py ditto (fix Gourmet in horizontal-toolbar mode)
	* lib/shopgui.py  ditto (fix Gourmet in horizontal-toolbar mode)
	* lib/gtk_extras/__init__.py (fix_action_group_importance): New
	convenience method to make sure all actions in an ActionGroup that
	don't have icons are marked important

2009-10-31  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.update_from_ingredient_editor_cb.process_row):
	Handle groups correctly.

	* README: Fix sql dependencies.

2009-08-26  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* data/ABBREV.txt
	* data/WEIGHT.txt
	* data/FOOD_DES.txt update nutritional database version to SR21

2009-08-22  Thomas M Hinkle  <tom@minime>

	* glade/recCardDisplay.glade: Fix add-to-shopping-list button (use stock id)

2009-08-18  Thomas M Hinkle  <tom@minime>

	* src/lib/shopgui.py (ShopGui.__init__): Fix bug that screwed up
	positions of panes in shopping list view.

2009-08-15  Thomas M Hinkle  <tom@minime>

	* src/lib/version.py (version): Push version to 0.15.0 (will be
	stable release -- dependencies, alas, have changed enough that
	0.13.x has become unstable on up-to-date systems.

	* create_manifest.py: Add style/ directory to manifest.

	* src/test_gui.py (BasicTests.tearDown): Make sure processes
	really die.

	* src/lib/threadManager.py (ThreadManagerGui.__init__): Add title
	to default dialog.

	* src/lib/reccard.py (TextFieldEditor.setup_main_interface): Add
	a11y names for all entries to help make dogtail-based testing
	easier.

	* src/lib/importers/interactive_importer.py: Fix default tags to
	include tags for all text fields.

	* src/lib/importers/importManager.py (ImportManager.offer_web_import):
	Remove "." from dialog title (Enter website address)

	* src/lib/importers/generic_recipe_parser.py (RecipeParser):
	Include notes in list of fields automatically parsed.
	(RecipeParser.ing_matcher): Fix typo in regexp that made any line
	starting with the letter "a" look like in ingredient (require a
	space between number or article and word)

	* src/lib/gglobals.py (REC_ATTRS): Fix typo that put extra colon in yield unit field.

2009-08-06  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.IGNORE):
	Ignore style tag.

	* src/lib/plugins/import_export/web_import_plugin/generic_web_importer_plugin.py (GenericWebImporter.get_importer):
	Fix typo (get_web_importer -> self.get_web_importer

2009-08-03  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.__init__):
	Fix case of 'key' (error caused extra search to be run on
	launching keyEditor.py)
	(KeyStore.limit): Only limit if text has changed.
	(KeyStore.get_recs): Fix recipe fetching (old DB change --
	id->recipe_id in ingredients table)

2009-07-28  Thomas M Hinkle  <tom@minime>

	* src/lib/reccard.py (RecCardDisplay.multiplication_change_cb):
	Implement multiplication again.

2009-07-15  Thomas M Hinkle  <tom@minime>

	* src/lib/ImageExtras.py (get_pixbuf_from_jpg): Create one unique
	tempfile per session, rather than hardcoding name
	gourmet_tempfile, which breaks Gourmet in multiuser
	environments (bug #271712)

	* windows/gtkrc: Remove custom theme to try to work around bug
	with vertical notebooks (see bug #2768204)

	* src/lib/plugin_loader.py (MasterLoader.load_plugin_directories):
	Fix hardcoded / in glob path. Fix from Julianne Sharer.

2009-07-14  Thomas M Hinkle  <tom@minime>

	* src/lib/importers/interactive_importer.py (InteractiveImporter.commit_changes):
	Fix syntax error in last commit (parens).
	* src/lib/defaults/defaults_de.py: Unicodify strings (u'')
	* src/lib/convert.py (float_to_metric): Use integer format
	code (%i) instead of string format-code which allows decimals to
	slip through formatting algorithm when they shouldn't (and
	non-localized decimals at that)
	(float_string): Allow people with commas as decimal separators to
	correctly parse recipes from period-separated locales where
	unambiguous (e.g. 23.00 and not 23.000).

2009-06-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/interactive_importer.py (InteractiveImporter.commit_changes.mark_sorter):
	Handle markup in title of recipe in imageBrowser dialog window.

2009-06-18  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/* Get rid of old debugging print statements throughout library.

	* src/lib/importers/interactive_importer.py (InteractiveImporter.setup_window):
	Set parent to threadManagerGui dialog.

	* src/lib/version.py: version->0.14.10

	* src/lib/threadManager.py (ThreadManagerGui.__init__): Make
	thread manager dialog transient for main Gourmet window if not
	told who its transient for.

2009-06-17  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/gxml_plugin/gxml_exporter_plugin.py (GourmetExportChecker.check_attrs):
	Fix tests (read files as utf-8)

	* src/lib/plugins/nutritional_information/reccard_plugin.py: servings->yields
	* src/lib/plugins/nutritional_information/nutritionLabel.py: servings->yields
	* src/lib/plugins/nutritional_information/export_plugin.py (NutritionBaseExporterPlugin.get_nutritional_info_as_text_blob): servings->yields
	* src/lib/GourmetRecipeManager.py (StuffThatShouldBePlugins.batch_edit_recs):
	Remove obsolete FieldEditor (moved to plugin).

2009-06-17  Thomas M Hinkle  <tom@minime>

	* src/lib/keymanager.py (KeyManager.__init__): Initialize categories again.

2009-06-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/nutritionDruid.py (NutritionInfoDruid.apply_custom):
	Fix custom information for fat.

2009-06-07  Thomas M Hinkle  <tom@minime>

	* src/lib/recipeManager.py (DatabaseShopper.init_orgdic): Use new
	initailize method of dbDic
	(DatabaseShopper.init_pantry): Use new initialize method of dbDic

	* src/lib/plugin_loader.py (MasterLoader.default_active_plugin_sets):
	Fix typo in list of plugins (missing comma).

	* src/lib/backends/db.py (dbDic.initialize): Add fast method for
	initializing a dbDic from defaults (faster than adding rows one at
	a time)

	* src/lib/keyEditor: Get rid of cruft (moved to plugin long ago)

	* src/lib/keymanager.py (KeyManager.__init__): Speed up
	initialization of keydic. Don't initialize each word in keydic
	from defaults (this should be part of the key editor plugin -- in
	our default mode, our users don't really care about keys (they
	always get the defaults) so we don't need to worry about setting
	up the DB for search (which is costly and makes first load seem
	unduly slow).

	* src/lib/version.py (version): Version->0.14.9

2009-06-04  Thomas M Hinkle  <tom@minime>

	* src/lib/plugin_loader.py (MasterLoader.default_active_plugin_sets):
	Add spellcheck to plugins that default to on.

	* src/lib/gtk_extras/TextBufferMarkup.py (PangoBuffer.get_text):
	Ignore tags that we didn't put there (such as those from
	gtkspell).

	* src/lib/plugins/spellcheck*: Add spellcheck plugin (adds
	automatic spell checking to all TextViews in recipe card editor.

	* src/lib/convert.py (NUM_AND_FRACTION_REGEXP): Fix typo for
	langauges without fraction support (ubuntu bug #352678)

	* test_deb.sh: Wipe out packages installed by python2.6 as well.

	* src/lib/reccard.py (RecCard.__init__): ++ get app if not handed
	GRM instance.

	* src/lib/plugin.py (RecEditorPlugin): ++documentation

	* src/lib/gtk_extras/dialog_extras.py (MessageDialog.setup_dialog):
	++title on dialog (helps out with testing w/ dogtail + just makes
	sense).

2009-06-04  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/interactive_importer.py: Add support for old
	style "servings" tags to support legacy importer/markup scripts.

	* src/lib/importers/importer.py (Importer.commit_rec): Make sure
	yields is floated.

2009-05-30  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/reccard.py (RecSelector.ok): If recipe has a yields
	value, ask user how much they would like to add (this allows user
	to specify e.g. "3 cups" or "2 crusts", which is easier than
	changing the amount of recipes, which is what shows up in the
	ingredient list.
	(YieldSelector): Dialog for selecting amount of recipe based on
	yields value.
	(getYieldSelection): Convenience function for grabbing amount of
	recipe based on yields value (or not).

2009-05-30  Thomas M Hinkle  <tom@minime>

	* src/lib/test_plugin_loader.py: Add simple plugin_loader test
	file.
	* src/lib/gtk_extras/dialog_extras.py (ProgressDialog.setup_buttons):
	Bypass strange bug in pygtk with python2.6 which effectively
	changes ToggleButton API
	* Release 0.14.8

2009-05-29  Thomas M Hinkle  <tom@minime>

	* gourmet.desktop.in (_Comment): Update description of app.

	* setup.py (maybe_intltool): Apply patch from Rupert Swarbrick
	<rswarbrick@googlemail.com> which avoids running intltool-merge
	when not necessary.

2009-05-28  Thomas M Hinkle  <tom@minime>

	* MANIFEST: Don't include test_* files in MANIFEST.

2009-05-26  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/browse_recipes/browser.py (RecipeBrowserView.build_base_model):
	Don't include yields in browser.

2009-05-25  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer_plugin.py (test_dir):
	Look for sample recs in src/tests/recipe_files...

	* src/lib/exporters/test_exportManager.py (TestExports.testSingleExport):
	Improve error message when plugin's check_export method throws an
	error.

2009-05-24  Thomas M Hinkle  <tom@minime>

	* src/lib/importers/xml_importer.py (Converter.do_run): Make sure
	we get added_recs from recHandler class.

	* src/lib/importers/importer.py (Importer.__init__): Get
	keymanager using new singleton access method.

	* src/lib/importers/importManager.py (ImportManager.import_filenames):
	make import_filenames return a list of importer instances that we
	used.

2009-05-24  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exportManager.py (ExportManager.get_extra_prefs):
	Add method for handling of extra prefs (through UI or
	automagically).
	(do_multiple_export): Use get_extra_prefs / extra_prefs parameter
	(ExportManager.do_single_export): Use get_extra_prefs /
	extra_prefs parameter

2009-05-24  Thomas M Hinkle  <tom@minime>

	* src/lib/plugins/import_export/gxml_plugin/gxml_exporter_plugin.py (GourmetExportChecker):
	Add class for testing exports for validity.
	(GourmetExporterPlugin.check_export): Run export checker.

	* src/lib/exporters/test_exportManager.py (TestExports.testSingleExport):
	Run plugin's check_export script if it has one (allows plugins to
	implement their own test).

	* src/lib/reccard.py (IngredientController.get_extra_ingredient_attributes):
	Don't throw error if item is blank/None

2009-05-23  Thomas M Hinkle  <tom@minime>

	* src/tests/recipe_files/mealmaster.mmf: Add custom yield (6 puffs
	for Almond puff)

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer.py (mmf_importer.handle_line):
	Add support for yields units other than servingts.

2009-05-19  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exporter.py (exporter.__init__._grab_attr_):
	Fix handling of yield/yield unit output.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter_plugin.py (PdfExporterPlugin.get_default_prefs):
	Use DEFAULT_PDF_ARGS for default PDF prefs.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py: Update default PDF args.

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter_plugin.py (MealmasterExporterPlugin.get_multiple_exporter):
	Remove obsolete args (conv/prog)

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py (mealmaster_exporter.__init__):
	Get mealmaster_importer from plugin, not from obsolete location
	inside Gourmet's main libraries.

	* src/lib/plugins/import_export/html_plugin/html_exporter.py (website_exporter): Update servings->yields

	* (Head): Rename test suites (*_tests.py -> test_*). I had
	preferred the alphabetization of *_tests.py, but a number of
	unittest tools are written to work only the other way.

2009-05-17  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/nutritional_information/nutrition.py (NutritionData.get_nutinfo_for_ing):
	Catch very unusual corner case where i.rangeamount and i.amount
	don't add cleanly (this means something's wrong with the inputs --
	but the least we can do is display a nicer error message).

	* src/lib/backends/db_tests.py (TestMoreDataStuff.test_modify_rec):
	Add test to make sure modify_rec is working.
	(TestMoreDataStuff.test_modify_ing): Add test to make sure
	modify_ing is working (this would have caught the regression in my
	last commit).

	* src/lib/backends/db.py (RecData.add_ings): Move fix previously
	put in validate_ingdic here (putting it in validate_ingdic has bad
	side effects -- oops)
	(validate_ingdic): Remove code put here earlier today (it caused
	modify_ing, etc. to delete data)

	* src/lib/importers/importer_tests.py: Add new test suites for
	base import class (including test against regression of today's
	new bugfix)

	* src/test_gourmet.py: Add new tests suites.

	* src/lib/importers/interactive_importer_tests.py: basic test
	suite for interactive importer (created to track down bug with
	"disappearing" ingredient units).

	* src/lib/importers/importer.py (RatingConverter.get_conversions):
	Fix converter (bad import call)

	* src/lib/backends/db.py (RecData.validate_ingdic): Make sure
	ingdic includes keys for all columns. This avoids a very nasty bug
	when executing an insert statement with more than one
	row (basically, we'd drop random columns if the rows didn't all
	have the same columns).

2009-05-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/test_gourmet.py: Add unit testing script (currently tests DB
	and convert backends.)

	* src/lib/backends/db_tests.py: Convert db tests to use unittest
	module.

	* src/lib/convert_tests.py: Add testing file for our convert module.

2009-05-15  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/tests/recipe_files/athenos.mx2: Add test mastercook file for importing.

	src/lib/plugins/import_export/gxml_plugin/gxml2_importer.py (RecHandler.endElement):
	Add code for parsing yields field into yields and yields_unit.

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (recipe_table_to_xml.__init__):
	Change servings to yields.

	* src/lib/backends/db_tests.py (test_unicode): Extend tests of
	unicode support.

2009-05-10  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/importers/xml_importer.py (Converter.__init__): Get rid
	of self.name assignment (Thread throws an error otherwise)

	* src/lib/backends/db.py (RecData._force_unicode): Force unicode
	for modify methods as well (fixes traceback on import with
	non-unicode text that was getting fed straight to sqlite.

2009-05-07  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exporter.py (exporter_mult._grab_attr_): Add yields/yield_unit
	(exporter.__init__._grab_attr_): Add support for yields/yield_unit

2009-05-05  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/threadManager.py (SuspendableThread.__init__): Don't set name attribute on Thread (pass it to Thread.__init__() call (setting name throws an error in python 2.6)

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.__init__):
	No longer set name attribute (this breaks the python 2.6
	implementation of Thread)

	* src/lib/importers/interactive_importer.py: Add yield_unit to
	buttons.

2009-05-01  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/recipeIdentifier.py (get_ingredient_hash): md5 ->
	hashlib (remove deprecated md5 lib)

	* src/lib/gtk_extras/thumbnail.py (check_for_thumbnail): md5 ->
	hashlib (remove deprecated md5 lib)

	* src/lib/backends/db.py : Fix unicode type errors from sqlalchemy.
	* src/lib/*: Change servings->yields

2009-03-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exportManager.py (ExportManager.offer_multiple_export):
	Include any recipes linked to in your recipes in your export.

	* src/lib/backends/db.py (RecData.include_linked_recipes): Add
	convenience method to append linked recipes (from
	recipe-as-ingredient) to a list of recipes.

2009-03-26  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/gtk_extras/dialog_extras.py (saveas_file): If we can't
	guess our file type based on the extension, use whatever is
	selected in the filetype combo box as fallback.

	* src/lib/exporters/exportManager.py (ExportManager.offer_multiple_export):
	Show error message if we don't get an export type.

	* src/lib/backends/db.py (RecData.get_amount_and_unit): Don't
	require conv argument to be passed (switching to singleton design
	pattern...)

2009-03-26  Artis Rozentāls  <artis.rozentals@gmail.com>

	* src/lib/plugins/nutritional_information/nutrition.py (NutritionData.set_key_from_ndbno):
	Fix association editing.

2009-03-24  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/html_plugin/html_exporter_plugin.py (HtmlExporterPlugin.get_multiple_exporter):
	Eliminate obsolete arguments (progress_func is no longer needed
	with our new signal interface and converters are now gotten using
	a singleton design pattern.

2009-03-14  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugin_gui.py (PluginChooser.do_change_plugin): Display
	error to user when loading a plugin fails. Give suggestions as to
	how to install dependencies in case of import error.

	* src/lib/plugin_loader.py (MasterLoader): Remove key_editor from
	default plugin set. This is a lot of functionality to put on
	people who don't want it -- removing it greatly simplifies Gourmet
	for those not interested.
	(MasterLoader.__init__): Add class variable 'errors' to keep track
	of errors raised in instantiating plugins, etc. This allows
	plugin_gui to display these errors to users. Use this variable
	when instantiating PluginSets to keep track of error messages our
	users may want.

2009-03-07  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/shopgui.py (ShopGui): Prevent ShopGui window from
	getting destroyed on delete-event (when user closes window from WM
	control).

2009-03-01  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/shopgui.py (ShopGui.item_added): Make sure added items
	don't end up in the pantry.

2009-02-28  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/listsaver: Added plugin (this was in the tarball
	released earlier, but had accidentally not been added to CVS).

2009-02-22  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.update_from_ingredient_editor_cb):
	Fix typo that caused weirdness in ingredient key editor
	view (where key of last ingredient in list got propogated to
	ingredients as they were added).
	(IngredientKeyEditor.update_from_ingredient_editor_cb): Actually
	guess the key using keyManager rather than just cutting off key
	after the semicolon.

	* src/lib/reccard.py (IngredientEditor): Remove old
	IngredientEditor class (This has all been simplified or moved to
	plugins).

	* src/lib/keymanager.py (KeyManager.look_for_key): Change math on
	key lookup slightly so that multi-word keys such as "chocolate
	chips" get penalized when matching on single-word
	items ("chocolate"), just as we would punish "chocolate" for being
	only one word in "chocolate chips".

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.__init__):
	Create our own keymodel (old use of rg.rd.inginfo is obsolete).

2009-02-21  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/version.py - Version-> 0.14.7. Released 0.14.7
	tarball+deb to SF

2009-02-21  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/nutritional_information/main_plugin.py (NutritionMainPlugin.activate):
	Fix add_icon call.

	* src/lib/plugins/nutritional_information/__init__.py (plugins): Add shopping list plugin
	* src/lib/shopgui.py (ui): Add placeholder to file menu for
	plugins to add things above "close".
	(ShopGui.__init__): Add ShoppingListPlugin

	* src/lib/reccard.py (IngredientEditorModule.add_ingredient_from_line):
	Fix ingredient-adding for lines with no amount.

	* src/lib/plugin.py (ShoppingListPlugin.__init__): Fix
	ShoppingListPlugin API (no menu_bars params necessary, just a ui
	string)

	* src/lib/gglobals.py (add_icon): Fix add_icon to work as
	advertised.

2009-02-19  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/GourmetRecipeManager.py (GourmetApplication.setup_prefs):
	Use singleton method to get prefs
	(GourmetApplication.setup_shopping): No arguments necessary now to
	get ShopGUI

2009-02-18  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugin.py (ShoppingListPlugin): Add ShoppingListPlugin
	class.

	* src/lib/shopgui.py: Complete overhaul of the shopping UI -- we
	now use a UIManager based GUI in place of the glade-based one from
	previous Gourmet versions. This allows us to be easily pluggable,
	among other things. In addition to converting the interface, a
	"Change Category" button has been added to the toolbar so that it
	does not require right-clicking to discover (those right-clicking
	still works).

2009-02-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/python_shell/ipython_view.py: Import IPython
	outright -- if there's an ImportError, let the plugin fail to
	instantiate (this makes sense, since the plugin won't work without
	IPython)

	* src/lib/exporters/exporter.py (exporter.__init__.handle_markup):
	Handle case where handle_markup is handed None

	* Release 0.14.6 tarball and .deb to SF.net
	
	* src/lib/check_encodings.py (EncodingDialog): Fix type on encodings.
	(EncodingDialog.diff_texts): Make sure we base our diffs on the
	encoding with the most lines. Otherwise, utf-16 screws us up in
	most cases so the diff-view no longer works properly.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfExporter.__init__):
	Sshhh.

	* src/lib/gtk_extras/dialog_extras.py (MessageDialog): Allow
	passing modal=False to make this a non-modal dialog.

	* src/lib/GourmetRecipeManager.py (RecGui.offer_url): Make dialog
	non-modal -- the modal dialog was freezing up Gourmet after user
	clicked "Jump to" button.

2009-02-15  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/nutritional_information/databaseGrabber.py (DatabaseGrabber.parse_abbrevfile):
	Use new do_add_fast and commit_fast_adds method to drastically
	speed-up initial population of nutritional DB
	(DatabaseGrabber.parse_weightfile): Use new do_add_fast and
	commit_fast_adds method to drastically speed-up initial population
	of nutritional DB.
	* src/lib/backends/db.py (RecData.do_add_fast): Add method that
	uses sqlite (bypassing sqlalchemy) to add to the DB. This
	substantially speeds up adding things to the DB. The method
	returns nothing (unlike do_add, which returns a reference to the
	added object) and we need to call commit_fast_adds in order to
	commit the additions to the DB.
	(RecData.commit_fast_adds): A method to commit anything added
	using do_add_fast

2009-02-13  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/shopping_associations/shopping_key_editor_plugin.py (KeyEditorPlugin):
	Add text box that allows editing shopping category for multiple
	selected ingredient keys at a time.

	* src/lib/plugins/nutritional_information/data_plugin.py (NutritionDataPlugin.create_tables):
	Use Text() type from sqlalchemy instead of deprecated
	String(length=None)

	* src/lib/plugins/key_editor/recipeEditorPlugin.py (IngredientKeyEditor.setup_main_interface):
	Make TreeView allow multiple selections so we can do actions on
	multiple keys at once.
	(IngredientKeyEditor.setup_main_interface): Setup any extra
	widgets provided by plugins.

	* src/lib/plugins/key_editor/keyEditorPluggable.py (KeyEditorPlugin):
	Update API to allow plugins to provide a widget for changing value
	for all selected rows.

	* src/lib/backends/db.py (RecData.alter_table): Use embedded
	select in insert statement rather than pythonic for-loop to loop
	through data -- this is enormously faster.

	* src/lib/reccard.py (RecEditor.ui): Remove KeyEditor (moved to plugin)
	(UndoableTreeStuff.record_positions): Fix mess with attribute name changes.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.show_about):
	Remove colons from strings marked for translation.

2009-02-08  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor.tree_edited):
	rd.update -> rd.update_by_criteria (correct method name)

	* src/lib/defaults/defaults.py: Fix SF bug #1947796 where calling
	Gourmet with an unsupported locale broke Gourmet and made it fail
	to start.

2009-02-07  Thomas Mills Hinkle  <tom@hydrophax>

	* glade/recCardIngredientsEditor.glade: Simplify ingredient
	interface -- remove detailed expander widget. We now simply have
	an "Add" textbox and a list of ingredients. All of the complexity
	of ingredient keys is hidden in this view now, leaving our basic
	interface simpler and cleaner.

	* src/lib/plugin.py (RecEditorPlugin): Create RecEditorPlugin
	class.
	(RecEditorModule.__gsignals__): Add signals 'saved' and
	'toggle-edited' to RecEditorModule for communicating state-changes
	of individual modules.
	(IngredientControllerPlugin): ++IngredientControllerPlugin.

	* src/lib/reccard.py (RecEditor.add_plugin): Rework
	plugin-interface as part of making ingkey-editor plugin a recipe
	card editor module.
	(DescriptionEditorModule.save): Use new signal interface to
	indicate saved.
	(IngredientController): Make controller pluggable so that plugins
	can add info to ingredients if they like.
	(IngredientTreeUI.setup_columns): Remove ingredient key and
	shopping category from standard treeview -- these are now only
	visible with plugins.

	* src/lib/version.py (version): Version->0.14.6

2009-02-03  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/defaults/defaults_en_GB.py: Replace missing
	comma (syntax error)

	* src/lib/version.py: Version->0.14.5 for release

	* src/lib/reccard.py: Change icon to new recipe card/editor icons.

2009-02-01  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/key_editor/keyeditor.glade: Remove "Edit
	nutritional info" button.

	* src/lib/plugins/key_editor/keyEditor.py (KeyEditor): Remove
	references to nutritional info. Update to work with current DB
	front-end.

	* src/lib/gtk_extras/treeview_extras.py (selectionSaver.add_selection):
	Fix mysterious bug that occurred when we tried to use sqlalchemy
	0.5 rowobjects as dictionary keys.
	(selectionSaver.restore_selections): Fix mysterious bug that
	occurred when we tried to use sqlalchemy 0.5 rowobjects as
	dictionary keys.

	* src/lib/backends/db.py (RecData.get_ingkeys_with_count):
	Implement the functionality needed for a keyEditor interface.

	* src/lib/gglobals.py: ++ png icons for reccard and reccard_edit.

2009-01-31  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/unit_display_prefs: New plugin that allows user
	to specify which kinds of units to display, resulting in
	displaying e.g. all metric units without the need to tinker with
	the underlying data.

	* src/lib/defaults/defaults_en_GB.py (CONVERTER_TABLE): Add units for
	non-American cups (Japanese cup, metric cup, imperial cup,
	imperial pint).

	* src/lib/defaults/defaults_en.py (CONVERTER_TABLE): same change as defaults_en.py

	* src/lib/defaults/defaults.py (unit_rounding_guide): Add
	parameter unit_rounding_guide (which can be overridden in the
	defaults_XX files). This allows us to hone what kinds of decimal
	values we show for different units.

	* src/lib/backends/db.py (RecData.get_amount_and_unit): Make
	get_amount_and_unit take arguments favor_current_unit and
	preferred_unit_group to allow further control over how it handles
	conversion. Also make pluggable, enabling our new
	unit_display_prefs plugin to do its work.

	* src/lib/shopping.py (Shopper._ing_compare): Disable special
	ingorder comparisons, falling back to alphabetical. In the future,
	it would be worth looking into what was implemented and why it was
	failing -- I've simply disabled the functionality since it wasn't
	working properly anyway.

	* src/lib/reccard.py (RecCardDisplay.toggle_readable_units_cb):
	Fix reference to obsolete method resetIngList (replaced by
	display_ingredients)

	* src/lib/plugin_loader.py (Pluggable.run_pre_hook): Changed API
	around pre_hook -- pre-hooks can now modify the args fed to the
	function they're hooking around by returning args,kwargs as the
	return value. If they don't return a tuple and a dictionary, then
	we fail with a warning (this means the old API will fail with a
	warning until I update old plugins that use this).
	(pluggable_method._): Changed pre-hook API (see above)

	* src/lib/convert.py (float_to_metric): Changes to float-to-metric
	to allow rounding based on an approx value rather than always
	assuming we want 2 decimal points.
	(float_to_frac): Return a simple integer if we're within approx of
	an integer.
	(Converter.adjust_unit): Accept a parameter
	preferred_unit_groups. If we have this parameter, we look for
	conversions within our preferred groups and convert if possible. A
	group could be, e.g. metric mass, metric volume, imperial volume,
	etc., as defined in UNIT_GROUPS in defaults.
	(Converter.readability_score): Adjust scoring algorithm: being a
	weird decimal is less bad than being out of the defined range (I
	was getting values like 2034 mL instead of 2 L because it
	preferred the integer (2034) to the decimal even though the
	integer was outside the preferred range for mL).

2009-01-28  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/reccard.py: Add shop-recipe to menus. Add key commands
	for most menu items.

	* glade/shopList.glade: Remove nutritional info button/icon (this
	should become a plugin anyway)

	* test_deb.sh (LATEST_DEB): Remove python version specificity.

	* Released 0.14.4 to SF as .deb and .tar.gz

	* src/lib/gtk_extras/treeview_extras.py (selectionSaver.restore_selections):
	Change variable names from iter->itr (to avoid unintended
	consequences). Unsuccessfully trying to get at mysterious
	traceback in restore_selections and add_selection (somehow builtin
	dictionary method get() is not working).

	* images/reccard.ico: Added reccard icon

	* images/Nutrition.png: Moved to the plugin

	* src/lib/plugins/nutritional_information/images/Nutrition.png: Moved from images/

2009-01-27  Thomas Mills Hinkle  <tom@hydrophax>

	* create_manifest.py: Add png's to plugin files to include; add images/*.ico to included files.

	* gourmet.desktop.in (Categories): Category->Utility

	* setup.py: Apply debian patch; include png etc.

	* src/lib/plugins/nutritional_information/main_plugin.py (NutritionMainPlugin.activate):
	Add nutritional icon.

	* src/lib/plugins/import_export/website_import_plugins/foodnetwork_plugin.py (test_url):
	Be less verbose.

	* src/lib/plugins/import_export/website_import_plugins/about_dot_com_plugin.py (test_url):
	Be less verbose.

	* src/lib/gtk_extras/treeview_extras.py: Remove python version
	dependency

	* src/lib/version.py (version): Version->0.14.4
	(copyright): ++2009

	* src/lib/threadManager.py (ThreadManagerGui): Fix resizing
	ugliness on table (it's still ugly, but less so)

	* src/lib/reccard.py (RecCardDisplay.setup_main_window): Add icon
	(RecEditor.setup_main_interface): Add icon

	* src/lib/gglobals.py (add_icon): Rework code for adding icons to
	make it easy for plugins to add stock icons using the convenience
	function add_icon

	* src/lib/gdebug.py: Remove python version dependency.

	* src/lib/GourmetRecipeManager.py (RecGui.setup_main_window): Add icon to window.

2009-01-19  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/timeScanner.py (make_time_links): Remove line that
	escaped text automatically (caller can handle escaping)

2009-01-18  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/gtk_extras/TextBufferMarkup.py (PangoBuffer.set_text):
	Give a better error message when we have problems with unescaped
	text.

	* src/lib/gtk_extras/LinkedTextView.py (set_text): Remove line
	that unescapes incoming text (this was an attempt to fix another
	bug in the wrong place, but it causes problems when the clients
	are behaving properly...)
	(set_text): Remove line that unescapes incoming text (see above
	comment about dumb fixes creating more problems than they solve).

	* src/lib/plugins/python_shell/ipython_view.py: Eitan Isaacson's
	IPython console widget, with a few modifications.

	* src/lib/plugins/python_shell/__init__.py (ConsolePlugin): Plugin
	to allow access to a python shell from within Gourmet. This is
	incredibly handy for testing/development. It also allows a
	super-geeky user to modify their DB on the fly etc.

	* src/lib/plugins/field_editor/__init__.py (FieldEditorPlugin.show_field_editor):
	Grab GourmetApplication singleton rather than relying on pluggable
	being the GourmetApp, which it isn't always.

	* src/lib/plugins/browse_recipes/browser.py (RecipeBrowserView):
	to selection-multiple mode
	(RecipeBrowserView.get_selected_recipes): Add handy method to grab
	selected recs.
	(RecipeBrowserView.reset_model): Add handy method to reset model
	in response to DB updates.

	* src/lib/plugins/browse_recipes/__init__.py (BrowserPlugin): Set
	up hooks so that actions-on-recipes work (add-to-shopping list,
	delete, etc)

	* src/lib/backends/db.py (RecData.fetch_count): Fix fetch_count to
	actually work as described. Previously, it ignored criteria.
	(RecData.fetch_len): Fix fetch_len to actually use criteria.

	* src/lib/plugin_loader.py (Pluggable.run_post_hook): Post hooks
	should be allowed to modify the return value -- now they're
	required to do so (otherwise they change the return value of the
	method to None, of course.

	* src/lib/GourmetRecipeManager.py (RecGui.get_selected_recs_from_rec_tree):
	Add this method here as a pluggable_method so that plugins can
	implement recipe browsers/search of their own and have it work
	with actions that require selected recipes.
	(RecGui.update_recipe): Make pluggable
	(RecGui.redo_search): Make pluggable
	(RecGui.delete_open_card_carefully): Use
	get_selected_recs_from_rec_tree for deletion (this allows plugins
	to simply modify get_selected_recs_from_rec_tree and have deletion
	of selected recipes work right)
	(RecGui.rec_tree_delete_recs): Add call to show user a message
	telling them they've deleted recipes and offering undo.
	(RecGui.setup_delete_messagebox): Method to set up a message to
	user offering undo after delete.

2009-01-16  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/field_editor.gourmet-plugin.in: Added field
	editor plugin (provides material previously in valueEditor
	module).

	* src/lib/GourmetRecipeManager.py (showValueEditor): Removed value
	editor -- this is now a plugin (field-editor).

	* src/lib/ValueEditor.py - removed file (moved to field_editor plugin)

2009-01-13  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/browse_recipes/images/cooktime_empty_clock.png:
	Adjust pixel height so preptime and cooktime clock-pie-wedges can
	be drawn with same size and position
	
	* src/lib/batchEditor.py (BatchEditor.setup_glade): Use new
	gglobals-based custom handler system.

	* src/lib/GourmetRecipeManager.py (StuffThatShouldBePlugins.batch_edit_recs):
	Fix batch edit callback (self.update_rec_iter ->
	self.rmodel.update_recipe

2009-01-13  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/backends/db.py (RecData.fetch_count): Correctly alias
	select "COUNT AS COUNT" using sqlalchemy's "label" keyword,
	avoiding ugly hack that fails in 0.5 anyway.

	* src/lib/exporters/exportManager.py (ExportManager.do_single_export):
	Fix API for exporting single recipes (this fixes recipe export
	from recipe card view).

2009-01-12  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/backends/db.py (make_order_by): Sort nulls last
	(RecData.search_recipes): Special case sorting of 'rating' (the
	default feels backwards)

2009-01-11  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/browse_recipes/browser.py (RecipeBrowser.append_button):
	Use i18n'd text rather than attribute names themselves for
	breadcrumbs buttons.
	(RecipeBrowserView.get_pixbuf): Use generic icons differentiated
	by attribute (source, category, etc)
	(RecipeBrowserView.build_base_model): Don't browse by link attribute.
	(RecipeBrowserView.get_base_icon): Use base icons from icon_helpers.py

	* src/lib/plugins/browse_recipes/icon_helpers.py (get_pixbuf_from_image):
	Add the rest of the icons.

2009-01-11  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/importers/imageBrowser.py (ImageBrowserDialog.setup_dialog):
	Fix giant-dialog-window problem caused when Progressbar gets
	super-long text (e.g. if an image name is gigantic). Fixes Ubuntu
	bug #289861

	* src/lib/backends/db.py (make_simple_select_arg): Update in_()
	call to comply with SQLAlchemy 0.5 API change.

2009-01-10  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/backends/db.py (RecData._setup_object_for_table): All
	tables need an explicit primary key declared now -- sqlalchemy no
	longer supports implicit oid/rowid in 0.5
	(RecData.setup_info_table): Add sqlite rowid column to table
	explicitly.

	* src/lib/plugin.py (MainPlugin): Add base methods to MainPlugin
	to make it easy to add a tab to main interface (add_tab)

	* src/lib/GourmetRecipeManager.py (RecGui.setup_main_window): Add
	notebook to which plugins can add tabs.

2009-01-07  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/nutritional_information/parser_data.py (ABBREVS):
	Remove RED as abbreviation (and add more specification
	abbreviations like RED NA, RED FAT, RED CAL). (bug # 2492442)

	* src/lib/plugins/browse_recipes/* Implement basic recipe browsing
	interface as alternative to search (a new plugin).

2009-01-03  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/duplicate_finder/recipeMerger.glade: Add
	auto-merge button to glade file. Rename some buttons for
	convenient handling from recipeMerger dialog.

	* src/lib/importers/plaintext_importer.py (TextImporter.pre_run):
	Change attribute total to total_lines to avoid confusing ourbase
	class into thinking that we know how many recipes have based on
	how many lines we have (this fixes a bug where users would see
	something like "Imported 56 of 5000 recipes" for a 5000 lines text
	file with 56 recipes in it).

	* src/lib/importers/importManager.py (ImportManager.__init__): Add
	support for ImportManager plugins (which are separate from our
	standard ImporterPlugins). This allows our RecipeMerger plugin to
	add a post-import hook.

	* src/lib/plugin.py (ImportManagerPlugin): Add base class for
	plugings that modify the ImportManager itself (not new import
	plugins which are already covered by the ImporterPlugin)

	* src/lib/plugins/duplicate_finder/recipeMergerPlugin.py (RecipeMergerImportManagerPlugin):
	Separate out plugin that adds a check for duplicates after new
	imports

	* src/lib/plugins/duplicate_finder/recipeMerger.py (RecipeMergerDialog.merge_next_recipe):
	Add label to interface showing how many recipes have been merged
	so far (giving user a sense of progress).
	(RecipeMergerDialog): Add last_modified time to list of attributes
	shown to user so they can see which recipe is older/newer.
	(RecipeMergerDialog.offer_auto_merge): Add option to automatically
	merge, always selecting for newer or older recipes.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.setup_recipes):
	Remove misleading catchall database connection error message

	* src/lib/check_encodings.py (getEncoding): Fix typo that broke
	encoding dialog by always returning ascii

2008-12-28  Thomas Mills Hinkle  <tom@hydrophax>

	* README: Cut down README to keep it from going out of date so
	fast; update README to describe plugin system; add reportlab as a
	requirement.


2008-12-22  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter_plugin.py (MealmasterExporterPlugin):
	Mealmaster file are text/plain, not text/html

	* src/lib/plugins/import_export/gxml_plugin/gxml_exporter_plugin.py (GourmetExporterPlugin.get_multiple_exporter):
	Remove obsolete references to progress_func

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (__init__):
	Remove obsolete references to progress_func

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter_plugin.py (PdfExporterPlugin.get_default_prefs):
	Add method to bypass prefs dialog when necessary.

	* src/lib/gtk_extras/dialog_extras.py (get_type_for_filters):
	Separate function to grab the type of a file based on the filters
	used to save it. Split this out of the functions that get the
	actual file.

	* src/lib/exporters/exportManager.py (ExportManager): Split off
	separate do_multiple_export and do_single_export methods to allow
	outside functions/plugins to use exporters without having the user
	select the file name/type through the UI.

	* src/lib/backends/db.py (RecData.backup_db): Warn user when doing
	a DB update with little/no feedback on progress.

	* src/lib/plugin.py (ExporterPlugin): Add get_default_prefs method
	as alternative to run_extra_prefs_dialog (to enable full
	automation, for example, of libraries that like to ask users for
	prefs)

	* src/lib/plugins/email_plugin/*: Pluginify email
	functionality. We now just support PDF and plain text (the HTML
	was a failed attempt to write HTML email anyway)

	* TESTS: Add some more tests we should do before stable releases.

2008-12-21  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/plaintext.gourmet-plugin.in (_Comment):
	++export.

	* src/lib/plugins/import_export/plaintext_plugin/__init__.py: Add
	plaintext_exporter to plaintext_plugin.

	* src/lib/backends/db.py (RecData.backup_db): Let user know when
	we're doing a potentially slow DB upgrade (note that this is
	implemented directly in GTK so the DB code now depends on GTK at
	least in the upgrade spot; if we ever properly abstract the DB for
	another front-end we'll need to rework this.

	* src/lib/plugin.py (BaseExporterPlugin.add_field.do_write): Don't
	pass mark-up to exporters that expect plain text.

2008-12-19  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/tests/testImporters.py (ImportTestCase.testArchive): Add
	test of archive plugin

	* src/lib/plugins/import_export/archive_plugin/zip_importer_plugin.py (ArchiveImporterPlugin.test_file):
	Fix file pattern matching using fnmatch.

	* glade/preferenceDialog.glade: Hide label for removing items you
	don't use from recipe card interface, since this interface isn't
	currently functional anyway.

	* src/lib/exporters/exporter.py (exporter): Create new
	ALLOW_PLUGINS_TO_WRITE_NEW_FIELDS attribute (defaults to True).

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (rec_to_xml):
	Don't allow plugins to create new fields since supposedly we could
	be creating valid XML and plugins would create a moving target.

	* src/lib/plugin.py (BaseExporterPlugin.add_field.do_write):
	Respect new exporter attribute ALLOW_PLUGINS_TO_WRITE_NEW_FIELDS
	which allows exporters to prevent their write_attr/write_text
	methods from being called with new plugin-invented fields

	* src/lib/importers/importManager.py (ImportManager.get_filters):
	Remove repeat filetypes in file dialog filter dropdown + add "All
	importable files" filter as default file filter.

	* src/lib/check_encodings.py (EncodingDialog.create_options): Make
	encodings in encoding choosing dialog follow order given in source
	code for encodings/all_encodings (presumably the order of common
	to uncommon).
	(getEncoding): If user cancels dialog, give them the first
	encoding on the list rather than throwing an error.

2008-12-19  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/check_encodings.py: Fix bug #2446589 by adding utf-16 to
	our list of commonly tried encodings. Also, fix a bug in
	check-encodings/diffy code.

2008-12-16  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.__init__):
	Instantiate InteractiveImporter in __init__.py call.

	* src/lib/importers/imageBrowser.py (grab_thumbnail): Ignore errors
	in thumbnail creation (with warning).

	* src/lib/plugins/nutritional_information/data_plugin.py (NutritionDataPlugin.do_add_nutrition):
	Add do_add_nutrition convenience method (fix bug #2405494)

2008-12-15  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugin_loader.py (MasterLoader.register_pluggable):
	Fixed warning message.

	* src/lib/GourmetRecipeManager.py (SuspendableDeletions): Create
	class for running deletions in their own thread. This used to be
	in the moribund GourmetThreads module.
	(purge_selected_recs): Update deletion code to work with new
	threadManager module.
	(ImporterExporter): Get rid of unused old code.
	(purge_rec_tree): Remove old lock-checking code.
	(RecGui.purge_rec_tree): Update deletion code to work with new
	threadManager module.

	* src/lib/gtk_extras/LinkedTextView.py (LinkedPangoBuffer.set_text):
	Unescape all text so that markup outside of links works
	properly (fixes bug where <span> tags showed up in recipe card
	display view.)

2008-12-13  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/exportManager.py (ExportManager.offer_single_export):
	Give us a useful error message when ignoring an invalid file mode.

	* src/lib/backends/db.py (RecData._format_amount_string_from_amount):
	Don't set default here to be FRACTIONS_ALL. Instead, default to
	use the converter default (whatever that has been set to). This
	will be correct as far as i18n etc.

2008-12-13  Thomas Mills Hinkle  <tom@hydrophax>

	* src/tests/testImporters.py: Update testImporters to work with
	importManager.

	* src/tests/test.py: Use same method gourmet_in_place uses for
	making sure we use our version of Gourmet libraries and not ones
	installed elsewhere in system.
	(profile): Add convenience function for profiling calls.

	* src/lib/plugins/unit_converter/convertGui.py (ConvGui.__init__):
	Use new convert.get_converter() method instead of
	convert.Converter()

	* src/lib/plugins/nutritional_information/enter_nutritional_defaults.py:
	Use new get_converter() method.

	* src/lib/plugins/import_export/mastercook_import_plugin/mastercook_importer_plugin.py (MastercookTextImporterPlugin.get_importer):
	Fix typo (actually return an importer object instead of none).

	* src/lib/plugins/import_export/mastercook_import_plugin/mastercook_importer.py (MastercookXMLHandler.IngR_handler):
	Update start_ing() call (we no longer set recipe_ids before
	commit-time.

	* src/lib/plugins/import_export/gxml_plugin/gxml2_importer.py (RecHandler.endElement):
	Make sure our keys in our dictionary rec are all strings and not
	unicode objects (this throws an error on the DB side).

	* src/lib/version.py (version): 0.14.3 - Get ready for another release soon.
	* src/lib/importers/importer.py (Importer.__init__): use new
	get_converter() method to get Converter singleton. This speeds up
	import by a factor of 3 or so (we were wasting a lot of time
	instantiating new Converter classes all the time because we
	weren't passing it around as designed. It's easier just to use the
	singleton and not have to worry about remembering to pass the
	converter instance back and forth.
	(Importer.check_for_sleep): Fix name error (we no longer import
	anything as gt)
	(Importer.start_rec): Add a warning when ingredients are left from
	previous recipe at start of next recipe.
	(Importer.start_rec): Don't generate new id in start_rec code.
	(Importer.commit_rec): Fix IDs here -- if we have an ID from our
	importer, we add it here to our ID converter (or get it from our
	ID converter if we already created it -- if, for example, another
	recipe in the import referenced this recipe before it was
	created).  We also add ingredients to the database all at once now
	rather than making separate INSERT calls for each ingredient.
	(Importer.start_ing): No longer set recipe_id up in start_ing --
	it will be handled in commit_rec now.
	(Importer.finish_ing): Change commit_ing to finish_ing as we no
	longer commit our ingredients here (we commit all ingredients
	together in commit_rec. This should help speed up imports.
	(Importer.commit_ing): commit_ing is now an alias for finish_ing
	-- this enables all our old code to keep working. However, if any
	old code actually depended on commit_ing commiting the ingredient
	to the database, it will break. The model now is that we run
	start_ing and finish_ing for each ing before running commit_rec.
	(MultipleImporter): Remove MultipleImporter class. This is now
	handled in importManager (and has been for some time)

	* src/lib/importers/importManager.py (ImportManager.__init__):
	Singleton exception should be the first thing that happens here.
	(ImportManager.get_app_and_prefs): Move the get_application() call
	out of __init__ for convenience of subclassing (this allows the
	creation of non-gui-dependant subclasses easily.

	* src/lib/gtk_extras/timeEntry.py (TimeEntry.__init__): use new
	get_converter() method to get Converter singleton.

	* src/lib/exporters/exporter.py (exporter.__init__): use new
	get_converter() method to get Converter singleton.

	* src/lib/backends/db.py (RecData.initialize_connection): Run
	commit() once after initialization. This appears to fix a problem
	where some importers were throwing a "database locked" error on
	import if no recipe had been created yet in that instance of the
	application.
	(RecData.add_rec): Always return ID of recipe (it was
	unpredictable before whether this would return an ID or an object.

	* src/lib/timeScanner.py (c): use new get_converter() method to
	get Converter singleton

	* src/lib/recipeManager.py (DatabaseShopper.init_converter): use
	new get_converter() method to get Converter singleton

	* src/lib/recipeIdentifier.py (hash_recipe): use new
	get_converter() method to get Converter singleton

	* src/lib/convertGui.py (ConvGui.__init__): Converter is now a singleton.
	(get_converter): Convenience method to get the Converter singleton.

	* src/lib/convert.py (Converter.__single): Converter is now a singleton.
	(get_converter): Convenience method to get the Converter singleton.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.__init__):
	use new get_converter() method to get Converter singleton

	(GourmetApplication.setup_prefs): Make sure that we set
	useFractions the same way from prefs and from user toggling.

2008-12-06  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/importers/importManager.py: Remove broken import of
	zip_importer (this has moved into a plugin)

	* test_tarball.sh: Print contents of TESTS as a reminder of what
	to test.

	* create_manifest.py (STARTER_LIST): Include TESTS file in MANIFEST

	* MANIFEST: Include TESTS file in MANIFEST (list of common tests
	we should run on releases -- this might be something downstream
	packages want to make sure they run through.

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.get_images):
	Ignore <img> tags with no src= attribute (I didn't realize there
	were such tags)

	* src/lib/recipeIdentifier.py (apply_line_markup): Don't throw
	error when we get diff markup we don't expect

	* src/lib/gglobals.py (launch_url): Project Ridley -
	gnome.url_show -> gtk.show_uri

	* MANIFEST Update manifest.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter_plugin.py (PdfExporterPlugin.do_single_export):
	Fix name of method.

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py (PdfExporter.__init__):
	Fix handling of output arg that is an open file.

2008-12-04  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/gtk_extras/treeview_extras.py (print_tree): Add a handy
	convenience function for debugging treeview changes
	(move_iter): Fix destination description on drag-n-drop
	calls. This should fix dnd.

	* src/lib/gdebug.py (debug_decorator): Add handy decorator for
	quick debugging.

2008-12-02  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/html_plugin/html_exporter_plugin.py (HtmlExporterPlugin.do_single_export):
	Fix single export (export from recipe card view)

	* src/lib/reccard.py (RecCardDisplay.ui): Eliminate KeyEditor (it's a plugin now).
	(IngredientEditorModule.setup_action_groups): Shorten button names
	for ingredient editing toolbar.
	(TextEditor): Add generic TextEditor base class with copy/paste/cut support.
	(DescriptionEditorModule.ui): Add "Cut" item
	(TextFieldEditor.ui): Add "Cut" item
	(TextFieldEditor.setup_action_groups): Add rich text editing (bold/italic/underline)
	(IngredientController.get_path_from_persistent_ref): Avoid
	throwing error when we don't find an iter (return None instead)
	(IngredientController.commit_ingredients.commit_iter): Save new
	ingredient object into ListStore -- this fixes bug that broke
	editing of new ingredients once committed.
	(UndoableTreeStuff.record_positions): Fix typo (rc->re)

2008-12-01  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/backends/db.py (RecData.setup_info_table): String->Text
	fix to avoid annoying warning.
	(make_simple_select_arg): Make sure we use unicode in our select
	args.

2008-11-23  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* setup.py: Fix typo that prevented new import/export .in files from being i18n'd.

2008-11-23  Thomas Mills Hinkle  <tom@hydrophax>

	* setup.py (crawl): Automate addition of plugin directories to
	setup.py script.

2008-11-23  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugins/import_export/krecipe_plugin.gourmet-plugin.in:
	Port old krecipe importer to new plugin system.

	* src/lib/plugins/import_export/krecipe_plugin/ New krecipe plugin.

	* src/lib/threadManager.py (ThreadManagerGui.thread_done): Handle
	case where there is no text when we're done with progress bar;
	show completed processes as progress 100% no matter what.

	* src/lib/plugin_loader.py (MasterLoader): Add all import/export
	as defaults (these don't clog up the interface, so why not include
	them).

	* src/lib/GourmetRecipeManager.py (GourmetApplication.quit): Fix
	error saving recipe card on quit.

2008-11-22  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	This is the warning-fix edition, where we get rid of all the
	annoying warnings on Gourmet startup!

	* src/lib/backends/db.py: Use Text() class explicitly for strings
	without length limit instead of deprecated String(length=None

	* src/lib/GourmetRecipeManager.py (RecGui.__init__): Add action
	group search_action before calling setup_main_window -- this gets
	rid of annoying warning about missing actions on startup.

	* src/lib/recindex.py (RecIndex.setup_reccolumns.get_colnum): cell
	renderers take pango.WRAP_* enums, not gtk.WRAP_* enums

	* src/lib/reccard.py (IngredientDisplay.setup_widgets): cell
	renderers take pango.WRAP_ enums, not gtk.WRAP_* enums.

	* glade/preferenceDialog.glade: Fix deprecation error about
	setting an adjustment with non-zero page size.

2008-11-20  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py:
	Change back to BeautifulSoup instead of BeautifulStoneSoup -- this
	makes sure we know about, e.g., standard self-closing tags.

2008-11-17  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/gxml_plugin/gxml2_exporter.py (rec_to_xml.write_text):
	Make sure we don't create element names with spaces in them.

2008-11-15  Thomas Mills Hinkle  <tom@hydrophax>

	* src/lib/plugins/import_export/web_import_plugin/webpage_importer.py (WebParser.add_buffer_to_parsed):
	Add code to cycle through MS chars and eliminate those that
	remain/were foobarred by beautifupsoup.

2008-11-11  Thomas Mills Hinkle  <thomas_hinkle@users.sf.net>

	* src/lib/importers/importManager.py (ImportManager.finish_web_import):
	Recognize mimetypes with ;'s and encoding declarations to fix
	issue reported at
	https://sourceforge.net/forum/message.php?msg_id=5619998

2008-11-08  Thomas Mills Hinkle  <thomas_hinkle@users.sf.net>

	* src/lib/plugin_loader.py: Catch plugin errors and display as
	warning; don't let plugin failures bring down whole app at
	start-up.

2008-10-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* Version->0.14.2

	* src/lib/importers/html_importer.py: Don't import old
	html_plugins directory

v	* setup.py (result): Add new plugins.
	(data_files): Fix data files.

	* src/lib/backends/db.py (RecData.backup_db): Automatically make a
	copy of the database when we're about to do a DB update, just in
	case something ugly happens.

2008-10-27  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/plugin_loader.py: Add debug calls to make it easy to see
	what plugins are being loaded from where with a -v flag.

	* src/lib/backends/db.py (RecData.do_add): On ValueError, try
	coercing our dictionary of column->values into proper types or
	None and reinserting. This fixes a bug with the update code, where
	empty strings were being passed where we needed null (None).

2008-10-25  Thomas Hinkle  <thomas_hinkle@users.sourceforge.net>

	* Release 0.14.1

2008-10-25  Thomas Mills HInkle  <tom@hydrophax>

	* src/lib/recindex.py (RecIndex.setup_widgets): Make
	search-as-you-type the default.

	* create_manifest.py: Add data directory
	* src/lib/plugins/import_export/gxml.gourmet-plugin.in: This is an
	import and export plugin

2008-10-25  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>

	* MANIFEST: Include data/ directory.

	* src/lib/legacy_db/db_085/rdatabase.py (mkConverter.create_conv_table):
	Fix capitalization of converter.Converter

2008-10-18  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>
	* src/lib/gtk_extras/mnemonic_manager.py: Fix mnemonic-manager's
	handling of submenus. Automatically add TreeViews to mnemonic
	manager.

	* src/lib/GourmetRecipeManager.py: Add mnemonic-manager calls to
	resolve conflicts.

	* src/lib/reccard.py: Add mnemonic-manager calls to resolve
	mnemonic conflicts.

2008-10-16  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>

	* src/lib/plugins/import_export/web_import_plugin/* - Add web
	import plugin. We've removed the fully-automated web import in
	favor of a preparser to the interactive importer; this means that
	work we do building scrapers can only help, since users can always
	fall-back to fully manual marking up if the scraper does a bad
	job.

	* src/lib/plugins/import_export/website_import_plugins/* - Add web
	import plugin plugin for helping scrape specific websites (food
	channel, about.com, etc).

	* src/lib/importers/interactive_importer.py
	(InteractiveImporter.commit_changes): Add image browser dialog
	back to interactive importer (if self.images is populated)

	* src/lib/plugin_loader.py (MasterLoader.activate_plugin_set):
	Don't iterate over the dictionary since we might modify it.

	* src/lib/plugin.py (PluginPlugin): Create PluginPlugin class for
	allowing Pluggables in plugin classes -- we have plugin plugins
	specify a target string so that different pluggable plugins can
	differentiate among themselves. (This is currently used only for
	allowing the web importer to accept plugins).

2008-10-13  Thomas Mills HInkle  <thinkle@sf.net>

	* src/lib/plugin_loader.py (Pluggable.__init__): Be less verbose...

	* src/lib/GourmetRecipeManager.py (print_recs): Remove gt.* calls.

	* src/lib/exporters/gnomeprinter.py: Correct printing (we were
	using old exporter API in which exporter's did export on
	instantiation. We now work with the new API, though printing is
	not properly threaded (this is a one-line fix to get printing back
	for now -- printing should be reworked with the different printers
	written as plug-ins etc).

	* src/lib/gglobals.py (GladeCustomHandlers.__init__.custom_handler):
	Be less verbose.

2008-10-12  Thomas Mills HInkle  <thomas_hinkle@users.sourceforge.net>

	* src/lib/plugins/import_export/pdf_plugin/pdf_exporter.py: Move
	finish-up code out of PdfExporter.__init__ and into write_foot, so
	that it happens after writing the recipe (this reflects a change
	in the design of exporters -- everything used to happen on
	instantiation, but with threading, everything should happen in the
	do_run call that can be run as a separate thread.

	* src/lib/plugin_loader.py: Fix dependency checking. Add
	check_if_depended_upon and make deactivating a dependee plugin
	deactivate depender plugins well.

	* src/lib/plugin_gui.py (PluginChooser): Check dependencies when
	activating and deactivating and act appropriately. Automatically
	activate dependencies. Ask users when deactivating a
	depeneded-upon plugin.

	* src/lib/sound.py (Player.play_file): Remove debug print statement

2008-10-12  Thomas Mills Hinkle  <thomas_hinkle@sf.net>

	* src/lib/reccard.py (IngredientController.commit_ingredients.commit_iter):
	Fix null amounts (they should be None, not the empty string). 

2008-10-12  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/plugin_loader.py: Remove excess print statements. Don't
	write duplicate entries for plugins in saved_plugins file.

	* src/lib/GourmetRecipeManager.py: Remove all obsolete
	gt.threads calls

	* style/default.css: Make title sans-serif
	* src/lib/exporters/gnomeprinter.py (renderer.write_paragraph):
	Catch IndexErrors if we're trying to break a string with no spaces
	in it.

2008-10-03  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/importers/interactive_importer.py Add support for
	'ignore' tag in parsed data. This will lead to "hidden" text (we
	display a button to un-hide it if the user so chooses).
	* src/lib/importers/generic_recipe_parser.py (RecipeParser.parse):
	Add 'ignored' keyword to base parser (this allows a preparser to
	mark some text not worth the user seeing (for example, banner ads
	in HTML import)
	* src/lib/backends/db
	* src/lib/plugins/import_export/web_import_plugin Port basic
        web import plugin to plugin system. Still not clear on how
        we'll do web import plugin plugins.

2008-08-10  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/xml_exporter.py (XmlExporter.append_text):
	Raise a clear type error when handed non-text.

	* src/lib/backends/db.py (RecData): Fix alter table and
	add-column-to-table routines. Add new table plugin_info for
	storing version info on plugins, so that plugins know the Gourmet
	version and Plugin version at the last time of
	instantiation (since a plugin could have been in use, then out of
	use, then reactivated after an upgrade).

	* src/lib/plugin_loader.py (MasterLoader.activate_plugin_set):
	Avoid activating a plugin set twice.

	* src/lib/plugin.py (DatabasePlugin.activate): Update database
	plugin code to work with new versioning code for telling plugins
	about version changes reliably. Fix bug in exporter plugin when we
	get a None where we expect text.

2008-08-10  Thomas Hinkle  <Thomas_Hinkle@sf.net>

	* src/lib/exporters/xml_exporter.py (XmlExporter.append_text):
	Raise a clear type error when handed non-text.

	* src/lib/backends/db.py (RecData): Fix alter table and
	add-column-to-table routines. Add new table plugin_info for
	storing version info on plugins, so that plugins know the Gourmet
	version and Plugin version at the last time of
	instantiation (since a plugin could have been in use, then out of
	use, then reactivated after an upgrade).

	* src/lib/plugin_loader.py (MasterLoader.activate_plugin_set):
	Avoid activating a plugin set twice.

	* src/lib/plugin.py (DatabasePlugin.activate): Update database
	plugin code to work with new versioning code for telling plugins
	about version changes reliably. Fix bug in exporter plugin when we
	get a None where we expect text.

2008-07-24  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_importer_plugin.py (MealmasterImporterPlugin.test_file):
	Fix typo but that made no file look like a Mealmaster file.

	* src/lib/importers/xml_importer.py: Stop passing around recData
	instances (use singleton pattern instead). Also, fix
	capitalization of classes.

	* src/lib/importers/interactive_importer.py: Rewrite interactive
	importer to allow removing tags once applied and to include
	auto-markup of recipes. The UI is basic but functional now, with a
	number of obvious improvements yet-to-be-made. Once this UI is
	mature, it is likely many imprecise importers will be implemented
	as preparsers for the interactive importer rather than as their
	own importers.

	* src/lib/importers/importManager.py (ImportManager): Add code to
	handle web-based import (asking user for URL, fetching file,
	finding importer)

	* src/lib/importers/generic_recipe_parser.py (RecipeParser.parse):
	Update code to work with threadManager based progress-reporting

	* src/lib/backends/db.py (RecData.update_version_info): Fix
	indentation error bug in version update that meant that in new
	installations, the version was being set to an old verison,
	resulting in an attempt to run upgrade code on the 2nd run.

	* src/lib/threadManager.py (NotThreadSafe): Add class
	NotThreadSafe for the somewhat hackish purpose of allowing
	e.g. importer classes that touch the GUI. By inheriting
	NotThreadSafe, subclasses will ensure that such classes are not
	run in their own threads, no matter what, even when they look like
	they should be.

	* src/lib/plugin.py (ImporterPlugin.test_url): Add web methods
	test_url and get_web_importer to ImporterPlugin base class. By
	default, these methods act on normal files (which our
	importManager will retrieve for us), so nothing special has to
	happen except for importers that might, for example, need to know
	the URL whence a file came.

	* src/lib/GourmetRecipeManager.py (ImporterExporter.import_webpageg):
	Move import code for web import to importManager where it belongs

2008-07-08  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/importers/importManager.py (ImportFileList): Add a way
	to handle an importer calling more importers -- specifically, we
	allow ourselves to raise an exception that contains a list of
	files, thus circumventing any threading problems that would happen
	from calling importManager methods within an importer.

	* src/lib/plugin.py (ImporterPlugin.get_importer): Update method
	name in accordance with actual usage (we return an importer class
	rather than doing the import here, so the import manager can
	handle threading etc.

	* src/lib/importers/plaintext_importer.py (TextImporter.__init__):
	Remove rd argument from TextImporter.

	* src/lib/plugins/import_export/ Add mealmaster plugin to cvs. Add
	plugin to handle zip archives and tarballs.

	* src/lib/recipeManager.py (get_recipe_manager): Add
	get_recipe_manager name as alias for poorly named
	default_rec_manager (the right thing would be just to replace the
	name, but I'm lazy just now)

	* src/lib/importers/importer.py (Importer): Rename class Importer
	in accord with conventions. Remove rd argument (as we move to
	singleton pattern to handle this). Remove prog arguments (as we
	move to SuspendableThread to handle this). Move convenience
	function add_to_fn to this file

2008-06-01  Thomas Hinkle   <tmhinkle@gmail.com>

	* Release 0.14.0
	
	* src/lib/plugins/duplicate_finder/recipeMergerPlugin.py: Get rid
	of all GourmetThreads calls (as we plan to delete that module).

	* src/lib/importers/importManager.py (ImportManager.offer_import):
	Call make_rec_visible when we're done importing to show newly
	imported recipes.

	* src/lib/version.py (copyright): ++ last 2 years

	* src/lib/gglobals.py: Get rid of attempts to use gnomevfs

	* setup.py: Remove obsolete nutrition module

	* create_manifest.py: Create a script to generate a MANIFEST
	automatically (this is what MANIFEST.in should do, but trying to
	use MANIFEST.in was turning into a living hell, so I gave up and
	hand-coded a script to do the job more easily)
	* test_tarball.sh: Add call to new MANIFEST-generating script +
	clear out old directories from /tmp/ before starting.

	* src/lib/reccard.py (RecCardDisplay.ui): Remove e-mail
	stuff (this will be reimplemented as a plugin).
	* src/lib/GourmetRecipeManager.py: Remove all e-mail stuff (this
	will be reimplemented in a plugin).

2008-05-24  Thomas Mills Hinkle  <tmhinkle@gmail.com>

	* setup.py (result): Change location of import/export plugins.
	* src/lib/reccard.py (RecCardDisplay.update_image): Show/hide
	image when image has been created or removed.
	(ImageBox.commit): Fix typo that raised error.

2008-05-20  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/backends/db.py (RecData.initialize_connection): Handle
	newer sqlalchemy API
	* src/lib/threadManager.py: Add Terminated exception class
	* src/lib/GourmetRecipeManager.py: Make use of new threading for
	export and import
	* src/lib/gglobals.py: Remove old threading stuff
	* src/lib/prefs.py: Make Prefs a singleton
	* src/lib/exporters/exportManager.py: Use threadManager
	* src/lib/exporters/exporter.py: Use threadManager
	* src/lib/gtk_extras/dialog_extras.py (ModalDialog.setup_expander):
	Put expander into a scrolled window so we don't create monstrous
	dialogs that exceed the screenspace.
	* src/lib/importers/*: Continue working to port importers to
	threadManager and to plugins...

2008-04-26  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/plugins/import_export/mealmaster_plugin/mealmaster_exporter.py (mealmaster_exporter.write_text):
	Fix from Christopher Donham (#1151150)

2008-04-23  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/gtk_extras/dialog_extras.py (ModalDialog.setup_expander):
	Add expander text in scrolled window in case it's too big to fit
	in one dialog

2008-03-05  Thomas Mills HInkle  <tmhinkle@gmail.com>

	** Note - I'm half-way through re-implementing importers and
	import plugins.

	* src/lib/threadManager.py : Create a new module to handle
	threading (so we can move this out of GourmetRecipeManager.py and
	handle it more carefully. This will lead to the elimination of
	GourmetThreads.py and GourmetFauxThreads.py

	* src/lib/importers/__init__.py (Module): Remove importer set-up
	code from here. It now belongs in the new file name
	importManager.py

	* src/lib/keymanager.py (get_keymanager): Make KeyManager a singleton.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.__init__):
	Use new import manager to do imports.

2008-02-25  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* glade/recCardDescriptionEditor.glade: Put recipe card
	description into its own Glade file (part of UIManager rewrite)
	* glade/recCardDisplay.glade UIManager rewrite
	* glade/recCardIngredientsEditor.glade  UIManager rewrite
	* glade/recipe_index.glade - Move recipe index view into its own
	individual glade file
	* src/gourmet_in_place Update gourmet_in_place script to i18n .in files.
	* src/lib/gtk_extras/timeEntry.py (make_time_entry): Rename
	makeTimeEntry to make_time_entry for consistency with new coding
	style.
	* MANIFEST: Add many of plugins to Manifest. (This probably isn't
	all-the-way-updated yet though).

	* Various-other-files-I'm-too-lazy-to-track Making the change to a
	plugin system, this means adding logs of plugins and moving around
	import/export modules. As of this commit, exporters have been
	fully plugin-a-fied; importers have yet to be converted properly.

2008-02-24  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* gourmet.desktop.in: This is now the gourmet desktop file (built
	into an i18n'd version with intltool).

	* setup.py : Add calls to intltool to build desktop files. Add new
	export_plugins.
	
	
2008-01-26  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/gglobals.py: Add our own icons as stock icons.
	* src/lib/backends/db.py (RecData.get_amount_as_float): Our new
	SQLAlchemy class can make amounts show up as floats *or* integers.

2008-01-18  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* setup.py: Proper i18n of desktop file and plugin information files.
	* gourmet.desktop.in: Proper i18n of desktop file.
	* glade/app.glade Remove app.glade
	* glade/converter.glade Remove converter.glade -- this now belongs
	in the UnitConverter plugin.
	* glade/recCardDescriptionEditor.glade Break recCard.glade into pieces
	* glade/recCardDisplay.glade Break recCard.glade into pieces.
	* glade/recCardIngredientsEditor.glade Break recCard.glade up
	* glade/recipe_index.glade Main search view (replaces app.glade)
	* src/lib/plugins/key_editor/*: Create keyEditorPlugin (move
	keyEditor from src/lib/keyEditor to here).
	* src/lib/plugins/key_editor.gourmet-plugin.in: Add Key Editor
	plugin.
	* src/lib/plugins/unit_converter.gourmet-plugin.in: Add Unit
	Converter plugin.
	* src/lib/plugins/nutritional_information.gourmet-plugin.in: Add
	nutritional information plugin.
	* src/lib/plugins/nutritional_information/* Move files from
	src/lib/nutrition/ here. Create reccard_plugin, main_plugin and
	data_plugin
	* src/lib/plugins/duplicate_finder.gourmet-plugin.in: Add
	duplicate_finder plugin.
	* src/lib/gtk_extras/timeEntry.py (make_time_entry): Use proper
	function_or_method_style name for function (was makeTimeEntry)
	* src/lib/exporters/*: Fix Converter capitalization.
	* src/lib/backends/db.py (RecData): Make RecData pluggable.
	(RecData.__init__): Make RecData a singleton (on a per-file basis
	-- that is, we keep a dictionary of database files and only allow
	one instance to be created per file. Also, add a _created flag so
	plugins can tell if they're being plugged in before or after the
	creation of the DB.
	(RecData.setup_tables): Make setup_tables pluggable.
	(setup_nutrition_tables): Remove all nutrition table setup code -
	this is now implemented in the nutrition plugin.
	(RecData.update_version_info): Add code to run the plugin method
	update_version()
	(get_database): Add method to grab singleton database.
	* src/lib/shopgui.py: Remove nutritional information code -- will
	be reimplemented as part of our plugin.
	* src/lib/recipeManager.py (default_rec_manager): Return singleton
	RecipeManager() (singleton for a given db file, that is)
	* src/lib/reccard.py: Remove nutrition items and import new plugin
	framework -- nutrition is now a plugin!
	(GladeCustomHandlers): Remove GladeCustomHandlers -- this is now
	part of gglobals. Update code to use gglobals.gladeCustomHandlers.
	(RecCard.set_edited): Allow edited property to be set (when
	GourmetApplication saves, it does this)
	(RecCardDisplay): Make RecCardDisplay pluggable.
	(RecCardDisplay.setup_style): Make widgets white.
	(RecCardDisplay.remove_plugin_to_left_notebook): Make it possible
	to remove plugin
	(RecEditor): Make RecEditor pluggable.
	(DescriptionEditorModule.setup_main_interface): Use separate glade
	file - recCardDescriptionEditor.glade
	(TextFieldEditor.setup_main_interface): Workaround textview bug by
	setting scroll policy to AUTOMATIC,AUTOMATIC even though we don't
	really want it that way.

	* src/lib/GourmetRecipeManager.py (GourmetApplication.__init__):
	Make GourmetApplication a singleton -- this simplifies life here
	on out.
	(setup_nutrition): Remove - nutrition into a plugin
	(quit): Update reccard calls to work with new recipe card.
	(ImporterExporter.import_cleanup): Add plugin
	hook (pluggable_method decorator) so that the recipeMerger plugin
	can hook into imports.
	(UnitModel): Move UnitModel from convertGui (which is now a
	plugin) here.
	(show_duplicate_finder): Remove - now a plugin
	(show_duplicate_editor): Remove - now a plugin
	(RecGui.__init__): Make Pluggable
	(RecGui.setup_actions): Add show_plugin_chooser action. Remove
	items that are now plugins
	(get_application): Create convenience method to get our singleton
	application.

	* src/lib/Undo.py (UndoHistoryList.set_sensitive): Be less verbose.
	(Module): 

	* src/lib/gglobals.py (GladeCustomHandlers): Add custom handler
	code for glade here. Now anyone who needs a custom handler
	registers it through the gladeCustomHandlers instance that's
	instantiated in gglobals.
	(Module): 

	* src/lib/plugin.py New plugin module. This provides the base
	classes that plugins need to subclass.
	(Module): 

	* src/lib/plugin_gui.py Dialog for turning plugins on and off.
	* src/lib/plugin_loader.py Plugin management module. This provides
	the base class that pluggables need to subclass, as well as
	providing a nice decorator function for making individual methods
	"pluggable" (i.e. for adding pre-hooks and post-hooks)


2008-01-17  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/gtk_extras/timeEntry.py (make_time_entry): Update
	function name to new underscore_function_name norm

2008-01-09  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* src/lib/convertGui.py: 

	* src/lib/recipeMerger.py: 

2008-01-06  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* glade/recCard.glade (Module): Reorganize glade file as we move
	more of the UI construction into code and out of glade.

	* src/lib/GourmetRecipeManager.py (Module): Reorganize module in
	preparation for coming change to plugin basis. Separate out
	various bits of RecGui class into sub-classes that make more sense
	-- ImporterExporter, GourmetApplication, and so on. Use UIManager
	and ActionManager to build UI rather than glade -- now we use
	UIManager's nifty merging to handle our updated Go menu (formerly
	View menu)

	* src/lib/Undo.py (Module): Move undo stuff that was in reccard.py here.

	* src/lib/batchEditor.py (Module): changed method names (from GourmetRecipeManager.py)

	* src/lib/reccard.py (Module): Completely rearrange module. We
	break recipe editor and recipe display into separate classes. We
	use UIManager and ActionManager for the UI in preparation for the
	coming plugin interface.

	* src/lib/recindex.py (Module): Setup searchActions action group
	for user with uimanager.

	setup_search_views - respect the default_searches parameter.

	searchentry_activate_cb - this callback belongs here and not in
	subclasses.

	* src/lib/backends/db.py: Allow sorting by category.  Implement
	duplicate-finding methods.  make_simple_select_arg now supports
	operators including "in"

	* src/lib/defaults/defaults_en.py: Remove periods from units.

	* src/lib/defaults/defaults_en_GB.py: Remove periods from units.

	* src/lib/gtk_extras/ratingWidget.py: Don't throw an error when we
	receive a click event w/ no selected row

	* src/lib/nutrition/nutritionDruid.py: Use proper exception class
	so that unicode doesn't throw an error in the error-throwing.


2008-01-04  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/lprprinter.py (Module): Fix import statement
	for dialog_extras (moved to gtk_extras)
	* src/lib/exporters/winprinter.py (Module): Fix import statement
	for dialog_extras (moved to gtk_extras)


2007-12-29  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py (Module): adjust_amount - if we somehow have
	units in our unit list that don't convert, print warning rather
	than defaulting to no conversion.

	* src/lib/defaults/defaults_en_GB.py (Module): Fix tsp/Tbs. Remove
	periods after imperial unit names.

	* src/lib/defaults/defaults_en.py (Module): Fix tsp/Tbs
	conversion. Remove periods after imperial unit names.

	* src/lib/backends/db.py (Module): Fix category modifications. Fix
	amount-fetching convenience methods (apparently sqlalchemy can
	return an integer out of a float field!?!) Fix dbDic.


2007-12-28  Thomas Mills HInkle  <tmhinkle@gmail.com>

	* Everywhere Change names of database tables from views (metakit
	legacy) to table (current reality). Capitalize all classes.

	* MANIFEST - Remove old database modules; add new one.

	* test_tarball.sh - Assume python2.5 rather than python2.4

	* glade/app.glade - Move search options to menus; hide and
	simplify search interface by default (now that we have "search
	anywhere")

	* src/gourmet_in_place - Some improvements to make sure this gets
	its glade and data files from the source directory.

	* src/lib/convertGui.py (Module): Fix import statement to work
	with the new code organization (gtk_extras.cb_extras)

	* src/lib/gglobals.py (Module): Remove old database stuff (metakit
	v sqlite etc), replace with new.

	* src/lib/GourmetRecipeManager.py (Module) - Break up giant
	__init__ method so it is more readable. Make hitting return work
	if we are not in search-as-you-type mode.

	* src/lib/OptionParser.py (Module) - Remove old database
	options. Add --database-url argument for custom database
	arguments.

	* src/lib/recindex.py (Module): Add "anywhere" to search options
	-- this allows us to search for a string in any of the columns
	without specifying! Also, fix search-as-you-type toggle.
	
	* src/lib/recipeManager.py (Module): Update to use new database.

	* src/lib/timeScanner.py (Module): Update to use capitalized Converter class name.

	* src/lib/upgradeHandler.py (Module): Fix import dialog_extras statement.
	
	* src/lib/backends/__init__.py (Module): Remove inaccurate comments
	
	* src/lib/backends/db.py (Module) - New database backend class
	based on sqlalchemy. This provides at least the basis for support
	for all sql dialects that sqlalchemy supports. You can try other
	database settings by using the database-url argument to Gourmet.

	* src/lib/backends/db_tests.py (Module) - Move tests that were at the
	bottom of rdatabase.py to a separate test file.

	* src/lib/backends/db/* - Remove old legacy database files.

	* src/lib/gtk_extras/timeEntry.py (Module): Fix reference to
	capitalized Converter() class

	* src/lib/exporters/__init__.py (Module): Change rview_to_xml to
	recipe_table_to_xml in accordance with our new freedom from
	metakit semantics.
	
	* src/lib/importers/imageBrowser.py (Module): Fix gtk_extras import.

	* src/lib/importers/importer.py (Module): Fix gtk_extras import.

	* src/lib/nutrition/nutritionDruid.py (Module): Fix up various import
	statements for modules now in gtk_extras.


2007-11-19  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/FileChooserSaveAs.py Class renaming - capitalize all class names.
	* src/lib/convert.py Class renaming - capitalize all class names.
	* src/lib/convertGui.py Class renaming - capitalize all class names.
	* src/lib/reccard.py Class renaming - capitalize all class names.
	* src/lib/recipeManager.py Class renaming - capitalize all class names.
	* src/lib/shopgui.py Class renaming - capitalize all class names.
	* src/lib/shopping.py Class renaming - capitalize all class names.
	* src/lib/backends/rdatabase.py Class renaming - capitalize all class names.
	* src/tests/reference_setup/recipes.db Class renaming - capitalize all class names.

2007-11-19  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/gxml2_exporter.py Rearrange order of
	attributes to be slightly more logical (with link following
	source, since they are related).

2007-11-11  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* everything or close to it: Rearrange code -- move all defaults_*
	files into defaults/. Move all widgety convenience libraries into
	gtk_extras

2007-10-12  Thomas Mills HInkle  <thomas_hinkle@sf.net>

	* Fix non-GNOME fallback about dialog in GourmetRecipeManager.py

2007-09-12  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* i18n/ca.po Updated Catalan translation from Raul Cambero.

2007-09-10  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_de.py patch from SF user enfant_terribly fixing
	up some problems in the German translation.
	* src/lib/defaults.py  patch from SF user enfant_terrible
	fixing language support on Windows.
	* src/lib/gettext_setup.py patch from SF user enfant_terrible
	fixing language support on Windows.
	* src/lib/GourmetRecipeManager.py patch from SF user
	enfant_terrible fixing language support on Windows.
	* src/lib/recipeMerger.py Properly destroy dialog on close.
	* src/lib/exporters/html_exporter.py Actually apply the changes
	logged on 8/25
	* i18n/de_AT.po Updates from enfant_terrible
	* i18n/de_DE.po Updates from enfant_terrible	

2007-08-25  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/html_exporter.py Make recipe links hyperlinks.
	
2007-08-25  Thomas M. Hinkle  <thomas_hinkle@sf.net>
	
	* RELEASE 0.13.7
	* TODO Update todo list.
	* glade/nutritionDruid.glade Fix reversion/bug introduced in UI
	cleanup from Jeff/Kiddo
	* src/lib/version.py Upped version to 0.13.7
	* src/lib/backends/sql_db.py Respect SQL libraries different
	paramstyles rather than hardcoding the question mark.
	* src/lib/backends/sqlite_db.py Make sqlite3 (built-into
	python2.5) the default and fallback to pysqlite2 only as
	needed. Respect SQL libraries different paramstyles rather than
	hardcoding the question mark.
	* src/lib/exporters/exporter.py Update exporter so that if two
	recipes have the same name, they can both be exported
	(generate_filename now gets a flag -- if we are exporting multiple
	recipes, we automatically append ID numbers, otherwise we don't,
	since they are unnecessarily ugly if someone just wants to e-mail
	a copy of a single recipe to their mom or whatnot.
	* src/lib/exporters/pdf_exporter.py Fix bug 1776930 (formatting
	broken in PDF). Add links for recipe references and for webpages.
	* src/lib/exporters/html_exporter.py Use the changes in exporter.py
	to avoid screwing up if more than one recipe have the same name.
	* src/lib/exporters/gxml2_exporter.py Export the link field.
	* src/lib/nutrition/nutritionDruid.py Fix nutrition labels per
	ingredients so they don't say "per recipe". Fix bug that broke the
	nutrition druid when user changed an ingredient key.
	* src/tests/testExporters.py Update export tests.
	* src/tests/reference_setup/recipes.db Add a webpage to export
	test suite.
	
2007-08-20  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_en.py Call granulated sugar granulated sugar,
	not white sugar.
	* src/lib/GourmetRecipeManager When threaded quitting fails, save
	our database just in case the user force-quits and loses
	data. Also, purge deleted ingredients on quit since they won't be
	of any use (they're already lost to the UI--why keep them in the DB)
	* src/lib/backends/sql_db.py Don't return deleted ingredients in
	list of ingredient keys (in get_ingkeys_with_count)
	
2007-08-15  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/sql_db.py Applied patch from Anthony Foglia to
	fix typo bug in find_dupliaces

2007-08-08  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/timer.py Backwards compatability for pre-2.8 versions:
	set_urgency_hint.

2007-08-08  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/Undo.py Fix potential bug that prevents action_hooks
	from being run correctly -- we grab a reference to the action
	directly in case carrying the action out modifies the history list
	itself.
	* src/tests/testRecCard.py Reduce repetition of try/except blocks
	by abstracting out the try/except-with-informative-message
	pattern. Also, make VERBOSE into a global variable (again,
	simplifies).

2007-08-04  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/mastercook_importer.py Make Notes import as
	Notes rather than instructions (bug report from Anthony Foglia).

2007-08-03  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/prefs.py Handle broken config files gracefully. Namely,
	if there is an error loading, print the error to the screen and
	save a backup of the broken file. Then proceed as if there had
	been no original config file (overwriting the old one on a clean
	close with a new, clean config file).

	* src/lib/importers/mastercook_importer.py Fix for attributes with
	< or > signs - path from Anthony Foglia.

2007-07-30  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recSelector.glade Fix reversion introduced in Jeff/Kiddo
	patch (ShowingLabel had gone missing)

2007-07-19  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/app.glade Glade cleanup from Jeff/Kiddo
	* glade/generic_importer.glade Glade cleanup from Jeff/Kiddo
	* glade/nutritionDruid.glade Glade cleanup from Jeff/Kiddo
	* glade/recMerger.glade Glade cleanup from Jeff/Kiddo
	* glade/recSelector.glade Glade cleanup from Jeff/Kiddo
	* glade/valueEditor.glade Glade cleanup from Jeff/Kiddo
	* src/lib/nutrition/nutritionInfoEditor.py: Add to CVS.

2007-07-19  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/GourmetRecipeManager Use default DEFAULT_HIDDEN_COLUMNS
	for hidden columns (so that not all columns are shown by default).
	* src/lib/cb_extras.py Don't screw up the alignment of combo boxes.
	* src/lib/gglobals.py Add DEFAULT_HIDDEN_COLUMNS so that link,
	servings, preptime and cooktime are not included in index views by
	default.
	* src/lib/recindex.py Use DEFAULT_HIDDEN_COLUMNS
	variable. Ellipsize links when they are shown rather than wraping
	them.
	
2007-07-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/gourmet Update copyright dates.
	* src/gourmet_in_place Add convenient script to run Gourmet from
	source in tree.
	* glade/app.glade Change name of ingredient editor, since now it
	edits nutritional info as well as keys.
	* src/lib/ImageExtras.py Commit method needed in bugfix committed
	on on 6/29

2007-07-15  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST Added nutritionInfoEditor.py
	* src/lib/defaults_en_GB.py Declared encoding (PEP 263)

2007-06-29  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/reccard.py Fix bug that prevented images from being
	deleted. While we're at it, remove confirmation dialog on image
	deletion, since it is undo-able.

2007-06-29  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/keyeditor.glade Add button to edit nutritional
	information.
	* glade/nutritionDruid.glade Fix name collisions between two
	different treeview setups that are now in this druid. Make various
	tweaks to nutritional info display page.
	* glade/recCard.glade Add generic "edit nutritional info" button
	(in parallel with all other edit buttons).
	* src/lib/keyEditor.py Add check mark to show whether there is
	nutritional info. Also add callbacks to handle editing nutritional
	info from this view. Wrap text if possible to avoid horizontal
	scrolling.
	* src/lib/reccard.py Add edit_nutrition callback.
	* src/lib/backends/rdatabase.py Add fetch_join method.
	* src/lib/backends/sql_db.py Tweak make_where_statement call to
	allow "in (foo, bar)" SQL queries. Also change handling of "OR"
	and "AND" syntax. Add fetch_join method to allow simple joins.
	* src/lib/nutrition/nutrition.py Allow modifying of existing
	ingkey->ndbno association and conversions. Change from "g." to "g"
	everywhere.
	* src/lib/nutrition/nutritionDruid.py We now allow editing
	nutritional information (and viewing and searching existing info
	in the database). Change "g." to "g" everywhere. Added methods for
	display of nutrtional information. Reconceptualize "back" button
	to work with a simpler stack model.
	* src/lib/nutrition/nutritionLabel.py Add generic show_druid
	method to show druid even when there is no vapor.
	
2007-06-28  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* nutritionDruid.py Clean up code for nutrition druid (part way to
	a complete rewrite).

2007-06-27  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/mastercook_importer.py Fixed order of
	encodings, fixing bug #1721376

2007-06-23  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recipeMerger.glade Add label for possible message when
	merger window is used as a dialog. Fix close and cancel buttons.
	* src/lib/backends/sql_db.py Fix behavior of find_duplicates and
	find_complete_duplicates when given a recipes parameter.
	* src/lib/importers.py Make MulipleImporter track added_recs
	* src/lib/importers/xml_importer.py Give converters added_ings and
	added_rec attributes (references to underlying importer class)
	* src/lib/GourmetRecipeManager.py Fix typo bug in progress_dialog
	close callback. Add importer callback to bring up duplicates
	dialog when we import recipes that look like duplicates. Fix
	normal RecipeMergerDialog call (from Tools->Find Duplicates) so
	that it uses our new callbacks that will try to show whatever kind
	of duplicate there is rather than show an empty list.

	* src/lib/recipeMerger Merge identical recipes in one-click rather
	than making user click "Apply". Add show_if_there_are_dups
	callback to show the dialog only if there are duplicates found
	(i.e. for use as a post-importer dialog). Also add
	populate_tree_if_possible callback to attempt to set the
	searchType combo box so there will be something to show. Add a
	parameter for a on_close_callback that allows our creator to do
	something when we're closed. Add very lame image display (namely,
	text that says "An image" or "No image").

	* src/lib/version.py Up version to 0.13.6
	
2007-06-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST Added recipeMerger stuff.

2007-06-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/app.glade Add button to get to recipe merger tool
	(duplicate finder)
	* glade/recipeMerger.glade Make cancel buttons visible. Hide
	tabs. Improve spacing.
	* src/lib/GourmetRecipeManager.py Add callback to show duplicate
	finder/recipe merger.
	* src/lib/recipeIdentifier.py Added header comment.
	* src/lib/recipeMerger.py Fix bug that made ingredient selection
	fail. Add close callback. Remove print statements and add better
	documentation.
	* src/lib/version.py Bring version to 0.13.5 -- we'll up to 0.14
	when we have a "stable" version with our handy new features.

2007-06-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_* Remove . from SI units (such as g, kg, etc.).
	
2007-05-19  Thomas Hinkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py Fix bug in regexp in time parser that would
	through error on some misidentified times.

2007-05-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/dialog_extras.py Improve docstring
	* src/lib/mnemonic_manager.py Improve crawling algorithm for
	finding mnemonic labels.
	* src/lib/nutrition/nutritionDruid.py Behave better when user
	cancels out of a dialog.
	* src/lib/reccard.py Move selection down when user adds an
	ingredient.
	* src/lib/recipeIdentifier.py Rework API as I work on writing a
	recipeMerger dialog.
	* src/lib/recipeMerger.py Check in incomplete duplicate-recipe
	merger/eliminator code.
	* glade/recipeMerger.glade Check in incomplete duplicate-recipe
	merger/eliminator code.
	* src/lib/recindex.py Expand title column by default (rather than
	letting the last column take up all the extra space)
	* src/lib/version.py Bump up version number - When we finish this
	merger stuff &c this will be a new .x version (0.14.0)
	* src/lib/backends/rdatabase.py Add methods for finding duplicates
	* src/lib/backends/sql_db.py Improve duplicate-finding SQL
	* src/lib/exporters/recipe_emailer.py Allow e-mailing PDFs.
	
	
2007-03-25  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/rezkonv_importer.py Fix encoding on top. Also
	fix some other errors -- import convert module and fix a regexp.

2007-03-18  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/mnemonic_manager.py Improve documentation.

2007-03-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/exporters/xml_exporter.py Patch [ 1682624 ] Remove
	double escaping in xml export from Lennart Fricke
	* src/lib/exporters/exporter.py Fix Bug [ 1682613 ] Export with
	German locale Servings multiplied by 10. We avoid unnecessary
	float->text->float conversion in mult_exporter.py. Hopefully this
	fixes the issue (not yet tested in German Locale)


2007-03-09  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/interactive_importer.py Fix bug where, when
	unknown units are put into the item string, a space was omitted.

	

2007-02-11  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py Fix bug in timestring_to_seconds that threw
	error in some unparseable times.

2007-02-10  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/recipeIdentifier.py Only round when we have something to
	round.

2007-01-21  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/rdatabase.py Fix bug in update code that kept
	us from properly updating if a version was not stored correctly.
	* src/lib/recipeIdentifier.py Fix bug in standardize_ingredient
	that threw an exception with g. or ml. and no amount
	
2007-01-20  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/shopgui.py Clarify logic around optional ingredient
	adding.
	* src/lib/recipeIdentifier.py Some more work toward a diff-ing
	interface (not done)
	
2007-01-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/html_importer.py Raise more useful error
	message when a rule is malformed. If custom ingdic has ['text']
	but not ['item'], make sure we end up with an item.
	
	* src/lib/importers/html_plugins/recipezaar.py Update importer
	script for updated website. Add import for cuisine and category
	and servings.

2007-01-17  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST add batchEditor.py and batchEditor.glade
	* glade/app.glade Add menu items for launching batch editor 
	* glade/recCard.glade Fix alignment of items on Recipe Details page.
	* src/lib/GourmetRecipeManager.py Add batch editor. Create new
	methods to store models for attributes (cuisine, category, etc) in
	one place, rather than re-creating them in each recipe card,
	etc. that needs them.
	* src/lib/reccard.py Use new methods for creating global attribute
	models.
	* src/lib/recindex.py Fix type error that cropped up in update_recipe
	* src/lib/backends/sql_db.py
	* src/lib/importers/html_importer.py When dealing with pre-parsed
	ingredient dictionaries, only use our own parsing to fill in gaps
	(this allows html importer scripts to do some but not all parsing
	on their own).
	

2007-01-11  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/html_importer.py When scrapers fail, display
	the error, but fallback to a generic importer -- this is really
	important since scrapers will certainly fail as websites change.

2007-01-06  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* MANIFEST add valueEditor.glade and valueEditor.py
	* glade/app.glade add button to open valueEditor (called fieldEditor)
	* glade/valueEditor.glade Fix typo in "title" label. Add interface
	for changing *other* values (i.e. so that you can change the
	cuisine from foo->bar wherever the source is set to baz.)
	* src/lib/GourmetRecipeManager.py Add valueEditor to main interface.
	* src/lib/valueEditor.py Add ability to change *other* fields that
	the field selected for (i.e. so that you can change the cuisine
	from foo->bar wherever the source is set to baz.) Make sure the
	recipe index is updated when we make a change.

2007-01-04  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/valueEditor.glade Create basic value editor for editing
	values of e.g. categories throughout the database.	
	* src/lib/backends/sql_db.py Make get_unique_values() sort
	results.  Allow new syntax for criteria for make_where_statement
	whereby we can have a list of "and"/"or" values for a single
	column. Add update_by_criteria alias for update since that's what
	the rdatabase.py parent class uses.
	* src/lib/defaults_es.py Added gr. abbreviation.
	* src/lib/defaults_en.py Added gr. abbreviation.
	* src/lib/valueEditor.py Create basic value editor for editing
	values of e.g. categories throughout the database.

2007-01-03  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/recindex.py Hide First/Last/Prev/Next buttons when there
	are only 1 page's worth of recipes.

2007-01-02  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/importers/html_plugins/allrecipes.py Disable this plugin
	temporarily -- it isn't working properly and I don't have time to
	fix it.
	* src/lib/reccard.py Fix up group undo/redo so that ingredient
	group editing works again. This started with a simple typo fix
	(self.history->self.rc.history), but in the process of fixing it,
	I realized the undo was more fundamentally broken and had to be
	updated to properly use "permanent references"
	* src/lib/reccard.py Disable ingredient group toggling from the UI
	since it does not work and cannot be easily made to sensibly work
	given the structure of our ingredient DB.
	* src/lib/version.py Version 0.13.3
	* src/tests/testExporters.py Update to work with fancy PDF Export.
	* src/tests/testImporters.py Disable AllRecipes test since it's
	broken and we're disabling the plugin. Also, improve message on
	failure of import to produce a recipe with the expected title.
	* src/tests/reference_setup/recipes.db Update to latest DB.
	* src/tests/testRecCard.py Add a test for group editing. Exit when
	tests complete successfully.

	
2007-01-01  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/convert.py Fix i18n related bug in new unit-parsing
	regular expression. Also, keep new code for debugging bug (this
	will make us fail more verbosely if we haven't caught all such
	bugs with our new unicode() call
	* src/lib/defaults_es.py Fix some typos in Spanish defaults.
	
2006-12-29  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recCard.glade Move scrollbar inside of notebook so that
	nutrition/Recipe tabs are always in view.
	* src/lib/backends/rdatabase.py Only update if we have a new
	database.
	* src/lib/backends/sqlite_db.py	Set a flag if we are a new database.
	* src/lib/exports/pdf_exporter.py Fix typo in get_pdf_prefs that
	required extra nonsense argument.
	* src/lib/defaults_en.py Fix fl. oz.
	* src/lib/nutrition/databaseGrabber.py Be less verbose.
	* src/lib/nutrition/nutritionLabel.py Improve formatting
	* src/lib/reccard.py Respect "Allow Units to Change" preference
	(previously, we were always adjusting the units in the recipe card
	display and never adjusting them in the nutritional info
	display). Properly handle redrawing and flowing with changed
	reccard glade layout.
	* src/lib/version.py Version 0.13.2

2006-12-28  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/defaults_en.py Fix tablespoons (standardized to Tbs.)

2006-12-27  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/rdatabase.py Fix bug in URL-finding code in updater.
	* src/lib/ratingWidget.py Prevent warning about integer v. float
	* src/lib/shopgui.py Fix typo which prevented add-to-shopping-list
	from working with optional ingredients in some cases.
	* src/lib/shopping.py Fix ingredients when a range is being added
	to "None"
	* src/lib/TextBufferMarkup.py Make sure we are using unicode for
	text we get from textbuffer. (This seems to prevent unicode
	conversion errors elsewhere).
	* src/lib/version.py Set version to 0.13.1
	
2006-12-26  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/backends/rdatabase.py Fix bug in new installations (this
	change was actually made before 0.13.0 went up to SF but not
	committed to cvs). Also, fix bug in ingredient parser that meant
	the space between two words in an ingredient got eliminated.
	* src/lib/Undo.py Catch all "Too many changes" errors that can
	happen in our text-change undo routine.

2006-12-24  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* src/lib/reccard Hide "Website:" label when there is no link.

2006-12-23  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* data/recipe.dtd Add link
	* glade/recCard.glade Move title and shopping-list button above
	other stuff to un-clutter ingredient text and keep title in view
	at all times.
	* src/lib/reccard.py Default to highlighting calories, and save
	last-highlighted nutritional item as a preference. Update flowing
	to take into account different default widths (so that our title,
	which is not the width of the whole card, can be wrapped
	appropriately). Highlight ingredients with boldness as well as
	color. Also, change color highlighting so that all items with some
	of the content will have a visible amount of yellow behind them.
	* src/lib/nutrition/nutritionLabel.py Hide MINOR items for which
	there is no nutritional content. Also, track toggles in a
	dictionary so that callers can programatically toggle highlighting
	(i.e. so that we can store preferences for which nutritional info
	to highlight)

2006-12-22  Thomas M. Hinkle  <thomas_hinkle@sf.net>


	* glade/recCard.glade Less confusing naming of notebook widgets.
	* src/lib/nutrition/nutrition.py Allow nested
	NutritionInfoLists. Handle embedded recipes from here. rather than
	forcing caller to deal with them.
	* src/lib/nutrition/nutritionLabel.py Set up label to work as
	button for selecting one part of nutrition to focus on elsewhere
	(e.g. to choose "Calories" or "Protein" or what have you.
	* src/lib/reccard.py Set up nutritional highlighting of ingredients.
	* src/lib/shopgui.py Use modify_ing method to modify ings (not assignment).
	* src/lib/TextBufferMarkup.py Fix bug in setting background color.


2006-12-16  Thomas M. Hinkle  <thomas_hinkle@sf.net>

	* glade/recCard.glade Move nutrition into a separate tab to reduce clutter/scrolling.
	* src/lib/LinkedTextView.py Fix links with escaped characters (e.g. &)
	* src/lib/defaults_en.py Add fluid ounces
	* src/lib/reccard.py Comment on text-wrapping code. Fix title display.
	* src/lib/recindex.py Set up text wrapping for index view
	* src/lib/backends/rdatabase.py Add last-modified timestamp. Add some methods for dealing with dups.
	* src/lib/backends/sql_db.py Raise an error if we set attributes on read-only RowObject
	* src/lib/recipeIdentifier.py Updates in still-experimental-and-incomplete recipeIdentifier code
	* src/lib/importers/html_importer.py Automatically add 'link' attribute to all HTML imports