Compare commits
1172 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
908aa90b61 | ||
|
32426459db | ||
|
66114432df | ||
|
5baf8d322c | ||
|
1302743541 | ||
|
da417a5ee7 | ||
|
08338db8ab | ||
|
9fecb67bd8 | ||
|
d89e9d2c67 | ||
|
67e0f75107 | ||
|
3e4569bd49 | ||
|
dddd5b5db2 | ||
|
2fc9459aad | ||
|
ba98dc0412 | ||
|
586bd2fcf5 | ||
|
f7e8b90d60 | ||
|
e6b8dacfc3 | ||
|
a6de1c81bc | ||
|
03773fe9a2 | ||
|
6f849befe0 | ||
|
6ec12af6d7 | ||
|
5fa70824a3 | ||
|
05a53a40c9 | ||
|
1b09074fc4 | ||
|
b0d040ee99 | ||
|
b56b63a9fa | ||
|
e6cc62ff9c | ||
|
d81e851fd5 | ||
|
c96a8b85b9 | ||
|
0d07292d23 | ||
|
a8198c3ef1 | ||
|
b4827dc9c1 | ||
|
6d99a47b5e | ||
|
db2037fe08 | ||
|
2309747413 | ||
|
a3bf2e4d6e | ||
|
bd694b0baa | ||
|
8bf081ccc3 | ||
|
6f66a021bb | ||
|
55733cb264 | ||
|
17f8b4818c | ||
|
3755337db9 | ||
|
afbfaa815d | ||
|
7beb66dd66 | ||
|
e3374b8cb5 | ||
|
d3f90860c1 | ||
|
227da7671f | ||
|
7c3eaa9684 | ||
|
4cfa03ab16 | ||
|
ae89bc4d83 | ||
|
75ac634fa9 | ||
|
2e6e13e166 | ||
|
dec1130c81 | ||
|
dcb0aa8c35 | ||
|
1b4143f83c | ||
|
f5adb32bb6 | ||
|
c36e3f4747 | ||
|
688ee0f918 | ||
|
f548570af1 | ||
|
09e3ff2a62 | ||
|
73f75f7317 | ||
|
1e3ad0d325 | ||
|
09dd6deea3 | ||
|
460049809d | ||
|
80a9597e5a | ||
|
428c341005 | ||
|
a8d2f21b23 | ||
|
93962adaef | ||
|
d893ec5de5 | ||
|
9ff1f7781c | ||
|
b2fa1350f0 | ||
|
67e6a53951 | ||
|
01a68f5692 | ||
|
0f8bdbca00 | ||
|
f582592cf1 | ||
|
96173da947 | ||
|
e9ddd513a4 | ||
|
39cc00963d | ||
|
cc25a21ad7 | ||
|
f7084a775b | ||
|
2ac9f5bbd6 | ||
|
7a7ac5376d | ||
|
ad01a680aa | ||
|
318f2e93ce | ||
|
d210ea64f6 | ||
|
0f11ac01c8 | ||
|
25b999a140 | ||
|
be59619444 | ||
|
a1c0db37ad | ||
|
a2dbc495df | ||
|
3104900c21 | ||
|
50911b7cf1 | ||
|
dd33a4b172 | ||
|
d03f13c503 | ||
|
65f0df74c7 | ||
|
dce07dcb1d | ||
|
2dae5c3a08 | ||
|
3ed5e74657 | ||
|
67e6c66555 | ||
|
a121922310 | ||
|
6fc4d1f536 | ||
|
98409ca194 | ||
|
085409bcc0 | ||
|
bd06550331 | ||
|
1dc8746810 | ||
|
e53f15e8a9 | ||
|
8209096b73 | ||
|
7fa9e647e5 | ||
|
dcb8efd8e6 | ||
|
c0bdfafbda | ||
|
e5d564dbf0 | ||
|
aabb06ab11 | ||
|
a14894fce7 | ||
|
3df700b22a | ||
|
58d7cbe99d | ||
|
b5f419cbf3 | ||
|
9aaaaa3816 | ||
|
f2b1a5bdbc | ||
|
58fc415e28 | ||
|
f3898c5d43 | ||
|
de6847db7b | ||
|
e7ce80a06e | ||
|
789a94b59b | ||
|
10029e3a67 | ||
|
31aa503934 | ||
|
5cf54d4300 | ||
|
7b5c692787 | ||
|
1b91f53622 | ||
|
f3a3da5e5c | ||
|
e525aab0c8 | ||
|
8346836cf9 | ||
|
ce6edaf901 | ||
|
83e671afd5 | ||
|
5d5ca47863 | ||
|
2a8d75c493 | ||
|
63f09baab0 | ||
|
f96df5658c | ||
|
5d86e44264 | ||
|
b5eaeff3a4 | ||
|
d2da00989a | ||
|
36687cd703 | ||
|
25a9f17d66 | ||
|
f8380e1b0c | ||
|
3c2b7406c5 | ||
|
595828ba99 | ||
|
8b09bcdb98 | ||
|
d19bed4b42 | ||
|
8e0e07240f | ||
|
e7ba2423aa | ||
|
c19402f731 | ||
|
faba7ddc2c | ||
|
4379f42999 | ||
|
f30a353e15 | ||
|
029241bae9 | ||
|
86cab99e7a | ||
|
85a97c1c7f | ||
|
538b00b3c8 | ||
|
2637e2dcc1 | ||
|
cc1d15fc3f | ||
|
ad8259814d | ||
|
0cd63965a7 | ||
|
7b987cfa88 | ||
|
3e6fd00286 | ||
|
27e6d9b2a9 | ||
|
8b65c60a04 | ||
|
6e69cbcb04 | ||
|
6b929e9c7e | ||
|
f9ccea0149 | ||
|
feee26f74a | ||
|
6e68cc3f73 | ||
|
bce1462567 | ||
|
61443ad9ce | ||
|
2e93109d75 | ||
|
bbab0cdbba | ||
|
ae73a30a6d | ||
|
eed9e6505e | ||
|
34bb729c7a | ||
|
3060d7504a | ||
|
2e32fc7141 | ||
|
ee060b85a2 | ||
|
289436ee33 | ||
|
905ac154d3 | ||
|
ac29b091a7 | ||
|
1a618c3a2e | ||
|
c731c68ec5 | ||
|
ab80af602c | ||
|
4caa412a06 | ||
|
49ec2e1244 | ||
|
63dc1ddff8 | ||
|
b9c3b077e8 | ||
|
8c9333b58d | ||
|
fd22effab3 | ||
|
5e5e92ac9a | ||
|
7fac5c6607 | ||
|
fa26216839 | ||
|
9032c0a37d | ||
|
fb6a2cecf2 | ||
|
90de5dffec | ||
|
8ec10c067f | ||
|
84be6de6ab | ||
|
0b88c61421 | ||
|
d943e122a8 | ||
|
fc08e7de4e | ||
|
a04c8dc497 | ||
|
66c943f69d | ||
|
0ad17ac27f | ||
|
01536e4b50 | ||
|
811261609f | ||
|
cba763611d | ||
|
56de5ff4af | ||
|
928a0af713 | ||
|
913fdd071c | ||
|
22a27e9707 | ||
|
2142118832 | ||
|
fabd5742fc | ||
|
7a3da35543 | ||
|
c0c165d155 | ||
|
030ffd8226 | ||
|
4964461fa4 | ||
|
42c4662329 | ||
|
d3eafc00db | ||
|
a2030431c0 | ||
|
56f867d783 | ||
|
5a752205b3 | ||
|
6e87ee433c | ||
|
70806f2388 | ||
|
b8b186dde2 | ||
|
d10c4faffe | ||
|
8bff04729f | ||
|
9cddf3ebdb | ||
|
c089eba1c3 | ||
|
a94f3100df | ||
|
5d341a684e | ||
|
26723c1b60 | ||
|
de7430eeb8 | ||
|
89ffc6b4cc | ||
|
a18120f17d | ||
|
2846fc7dc5 | ||
|
e6c5232ae8 | ||
|
e7ab8b322b | ||
|
fde34bb53b | ||
|
60c0843861 | ||
|
2ae2ca5c7d | ||
|
9747d1deea | ||
|
e52d0a7a90 | ||
|
eefd3e13e4 | ||
|
918317434f | ||
|
8dfc5381cd | ||
|
6511a80b47 | ||
|
a5074e9478 | ||
|
b90808525c | ||
|
fedfabc87e | ||
|
891b9d2e34 | ||
|
3b0579afc3 | ||
|
5e763026a4 | ||
|
de706de317 | ||
|
b884dc0e4c | ||
|
aaba2ec347 | ||
|
bdd44b57fd | ||
|
8deb444a6c | ||
|
ca3158a6ff | ||
|
53a9cfc83f | ||
|
92fc8f8dcb | ||
|
7a488c2fd4 | ||
|
98ff7693f3 | ||
|
6b7258dfe0 | ||
|
aceee07544 | ||
|
9e670d51bd | ||
|
8e97b25f38 | ||
|
6aeeafe74d | ||
|
4189799d45 | ||
|
5bfe514f45 | ||
|
aa35dbfb82 | ||
|
784ab0c3c7 | ||
|
5847bb0e17 | ||
|
08ac0b0996 | ||
|
c38ccf22ed | ||
|
1866b7ace1 | ||
|
27b7676caa | ||
|
c273926941 | ||
|
ba8392923a | ||
|
2b8b92dab9 | ||
|
d5cb32d4ee | ||
|
3a9717f143 | ||
|
021bb0532e | ||
|
c268e4055c | ||
|
958af590b2 | ||
|
2f4682acbd | ||
|
fff6a5ce15 | ||
|
25e62a7797 | ||
|
95b9057810 | ||
|
f5d6c72a93 | ||
|
67238a16c6 | ||
|
d0c9f868de | ||
|
fec5a5dab0 | ||
|
966551385b | ||
|
d7ac28a12a | ||
|
988137e5f3 | ||
|
5b039eb2f0 | ||
|
a21dff8bf7 | ||
|
8d188effac | ||
|
18a3731e5b | ||
|
ae227084d1 | ||
|
aad2aea73d | ||
|
5a23088ff9 | ||
|
04583236c5 | ||
|
d7bf498f15 | ||
|
b2fdb2349d | ||
|
fd782bd057 | ||
|
4276970565 | ||
|
9c406e10d6 | ||
|
5d3a7edaa3 | ||
|
51402bd486 | ||
|
a943e63b84 | ||
|
cb852385bd | ||
|
24c1104f71 | ||
|
8a9fbc35e3 | ||
|
3c08eb5b80 | ||
|
f2e4fa779e | ||
|
91ac3c699a | ||
|
962608c6bf | ||
|
c3a4f85e72 | ||
|
cc6820f80c | ||
|
e448272259 | ||
|
24bf67db3c | ||
|
afe7fa39f9 | ||
|
fd90c19515 | ||
|
124b45eccc | ||
|
9c9dc2c8e2 | ||
|
0c232eb807 | ||
|
d2d2f4cf9e | ||
|
001744d5f7 | ||
|
0a0fbc6d6a | ||
|
9af365c2b0 | ||
|
e016199958 | ||
|
ef646190d9 | ||
|
c2d4e0c7ba | ||
|
abbe27f53a | ||
|
eaf0061087 | ||
|
dfb45bdc5d | ||
|
015f882826 | ||
|
2835f51fb6 | ||
|
b363360ac8 | ||
|
75cc4fb721 | ||
|
8fd1a93f97 | ||
|
0f079c4320 | ||
|
53887d2033 | ||
|
ae1af073a7 | ||
|
f2f78ef2f4 | ||
|
9790890e02 | ||
|
b0c82f6b6e | ||
|
b8ffc8a77d | ||
|
e554e324af | ||
|
cd1a6ba45a | ||
|
dd68fbf75d | ||
|
e355a93dc1 | ||
|
e5591da496 | ||
|
56d83c1c5c | ||
|
75009f0fe0 | ||
|
bd5d463299 | ||
|
4cab86897f | ||
|
457ed21c6c | ||
|
293556b88e | ||
|
ec0c705b55 | ||
|
f125a982d6 | ||
|
9e648b0de5 | ||
|
9e7ec88d3f | ||
|
cd8a0cd2f2 | ||
|
2bf4718af7 | ||
|
cbe83feeaa | ||
|
0ad582f7b0 | ||
|
6e0e7d3763 | ||
|
9f8ffc5226 | ||
|
612c4665ae | ||
|
11878e41f4 | ||
|
e3ba779edb | ||
|
87022267d9 | ||
|
36bb4471a3 | ||
|
578cdf6c79 | ||
|
d7719962fd | ||
|
2b90e90987 | ||
|
b2606fb6d3 | ||
|
cde99b6f24 | ||
|
74e90431c0 | ||
|
3d9d9e2851 | ||
|
35a38bc2bd | ||
|
ad1babbd4c | ||
|
f0bfce68c2 | ||
|
0eb027a095 | ||
|
d8946d75ac | ||
|
9e468c7cd8 | ||
|
f74f4942d5 | ||
|
b615fcb93c | ||
|
aabd158944 | ||
|
3a38f21eb7 | ||
|
89e20b90b7 | ||
|
03b78a0884 | ||
|
ccbab78fbc | ||
|
306ede4e8e | ||
|
b966ba74af | ||
|
d57fccc9c6 | ||
|
c8fa5169b5 | ||
|
4a1a42783a | ||
|
45a1e17bd7 | ||
|
4e0927eba4 | ||
|
40fa203659 | ||
|
5fde29a34c | ||
|
0360a5987e | ||
|
dfe88deeda | ||
|
2ad372bcba | ||
|
23f46f6679 | ||
|
d890942b43 | ||
|
f4f83e456e | ||
|
53a00dd2d2 | ||
|
a566be07a5 | ||
|
c6ad403cab | ||
|
ecac48e5b1 | ||
|
774855496f | ||
|
b86ec4ffe9 | ||
|
710f7eab3c | ||
|
f7c6acaec8 | ||
|
92709c2fb0 | ||
|
ad404317cb | ||
|
49d195037d | ||
|
2cfe156ad8 | ||
|
3294c07275 | ||
|
befddcbfb6 | ||
|
f8b74490b7 | ||
|
aee8c07c83 | ||
|
42df438ea0 | ||
|
dbc68eef53 | ||
|
816b05b7e8 | ||
|
52ce4883ed | ||
|
007c05086c | ||
|
ef8f197afd | ||
|
d2a49ffb98 | ||
|
42e52f9d3e | ||
|
d6f1c65325 | ||
|
dfeaedb261 | ||
|
5eb92f6f6f | ||
|
bf7e9d6b0b | ||
|
ad42e741e2 | ||
|
34c0668866 | ||
|
ac85b4eca3 | ||
|
47dab1e0fe | ||
|
9f85c03278 | ||
|
83c689dd87 | ||
|
8c7aa07992 | ||
|
ec02e74371 | ||
|
114decfb3d | ||
|
74e5f0dc2c | ||
|
63af2bd82c | ||
|
bf6fe1bf36 | ||
|
618fd83f22 | ||
|
9abd7fed10 | ||
|
6f76538f95 | ||
|
56841abd92 | ||
|
33a702474f | ||
|
79d6f886f9 | ||
|
ee6c787ef9 | ||
|
6ce4f458ad | ||
|
1ee7409866 | ||
|
bfcf2110ec | ||
|
ae2223bd8b | ||
|
a7d63e2eee | ||
|
e74955d5f8 | ||
|
50ce6c6c79 | ||
|
d94e67399e | ||
|
af41f88760 | ||
|
506e380431 | ||
|
f6859e21bf | ||
|
3cfbc16ff5 | ||
|
9900edc5c1 | ||
|
aceb7430bd | ||
|
5795edd6ed | ||
|
303d830a36 | ||
|
4bd3e77d99 | ||
|
b8f5c482d1 | ||
|
36e57ad59f | ||
|
014507ad88 | ||
|
30fd78ccf1 | ||
|
5d87d712f5 | ||
|
18300e28de | ||
|
2cd8de2313 | ||
|
82d6e5d215 | ||
|
e6cb3b1360 | ||
|
4c69260c4b | ||
|
8db502cea5 | ||
|
4a088bae53 | ||
|
a6abc76a74 | ||
|
e1ff1a78b3 | ||
|
d772bb8357 | ||
|
4326d00591 | ||
|
5180620a49 | ||
|
e9741e138d | ||
|
cf4f3f549f | ||
|
988797dc21 | ||
|
075f2ccb7b | ||
|
3f23c2c5cd | ||
|
092a9025dc | ||
|
9877666fa5 | ||
|
35e42dbd06 | ||
|
71e3729b14 | ||
|
20ec704d5d | ||
|
2e2c32708f | ||
|
68f319052c | ||
|
dcdf2be76f | ||
|
16ef886292 | ||
|
a9806d649e | ||
|
5af8c0d992 | ||
|
a40f3e70cf | ||
|
6ca9487709 | ||
|
a1f67b92e0 | ||
|
bc6cc2befe | ||
|
0ae571de7d | ||
|
ec427f602c | ||
|
d8b996212e | ||
|
796aaad339 | ||
|
36e6ede0a2 | ||
|
4ae9a23931 | ||
|
2f609d2f25 | ||
|
59303fd7d0 | ||
|
6e38945ab1 | ||
|
28567ab58e | ||
|
a4f85f05ad | ||
|
877a2e9e4e | ||
|
9422c088e9 | ||
|
d36a72ee18 | ||
|
7ef7e3bbf5 | ||
|
7afda11c9b | ||
|
588e2f9427 | ||
|
0affffb241 | ||
|
edc3a001d6 | ||
|
116e484fce | ||
|
c1a37c2dac | ||
|
e630c87f50 | ||
|
a3be3fd482 | ||
|
6c480baffe | ||
|
7cef5babe7 | ||
|
3a10a0fc04 | ||
|
b0c2203b98 | ||
|
663ec3f1d5 | ||
|
b2b514a390 | ||
|
f7e3294a65 | ||
|
a11245ef97 | ||
|
92fe4cd7bc | ||
|
5106de5687 | ||
|
8b360b4588 | ||
|
aa1acac08f | ||
|
40cebe4893 | ||
|
4e2a0ff1a5 | ||
|
1ead84b831 | ||
|
762323fac9 | ||
|
d9b42ac2dc | ||
|
88c06d41fb | ||
|
7970b04113 | ||
|
5cb0fa4ca5 | ||
|
ad54db2cb5 | ||
|
102463d9ef | ||
|
1f922d17be | ||
|
6033a2141e | ||
|
8c18eae777 | ||
|
66c410f55e | ||
|
3195f10a36 | ||
|
37ff832288 | ||
|
caac0901cb | ||
|
70c11878f4 | ||
|
2ee685e71b | ||
|
906b9e737d | ||
|
b401741143 | ||
|
4566c62014 | ||
|
b14a2abdfc | ||
|
7967f47934 | ||
|
c5cf398e64 | ||
|
7c9fd0ae63 | ||
|
5149ac7554 | ||
|
f7dc7ba859 | ||
|
e172b6520d | ||
|
1e9f1dbb3e | ||
|
8b934fd651 | ||
|
d73b9e9249 | ||
|
0b35e90fc1 | ||
|
7be52a96fd | ||
|
8ac6617e71 | ||
|
f9f369fb03 | ||
|
1d9391dfc9 | ||
|
5ccd4a4377 | ||
|
e1621b70a8 | ||
|
c11c63169f | ||
|
cfb9f64db9 | ||
|
c36ddf0845 | ||
|
b79b2c3955 | ||
|
152535f61b | ||
|
3dd194698a | ||
|
3147cf5a2b | ||
|
8e8c206a8f | ||
|
cb8e726f2b | ||
|
7a6879999d | ||
|
64db425ab0 | ||
|
bb1e5f4e3d | ||
|
7a507a6b01 | ||
|
0e19785b92 | ||
|
4bd5faf446 | ||
|
a02c68edfb | ||
|
1f5c8be4db | ||
|
d86aa283eb | ||
|
8069855017 | ||
|
7f180f3883 | ||
|
f7f0f60d8b | ||
|
1d1a4de566 | ||
|
ef965caf4a | ||
|
2e6fbc5e6e | ||
|
7e1ba04faa | ||
|
70a7922b9d | ||
|
c886725e3b | ||
|
f886698723 | ||
|
b384635529 | ||
|
c40d2d200d | ||
|
d4310848e9 | ||
|
f81673cdac | ||
|
7a3941e80e | ||
|
3af6e0853d | ||
|
35440f241a | ||
|
9e22e94645 | ||
|
200ffd385d | ||
|
1ee9c60814 | ||
|
e4b2cf9583 | ||
|
deeb408690 | ||
|
50c1080d37 | ||
|
5af7335e54 | ||
|
b5610e9d5f | ||
|
ef19a11889 | ||
|
d6c6d208c5 | ||
|
54dde99ad0 | ||
|
042f57d2e9 | ||
|
9ce42f7174 | ||
|
d984e5796b | ||
|
f53d6482da | ||
|
d1653be44d | ||
|
e25a2d23e2 | ||
|
0657680432 | ||
|
7ab417da94 | ||
|
a9a91b19c9 | ||
|
5dba5711b9 | ||
|
1fff4e7b0c | ||
|
946a4fbd2b | ||
|
57acf9d21a | ||
|
6961361c61 | ||
|
41d9bbe4c0 | ||
|
2a1da2efba | ||
|
a8f08749d4 | ||
|
afb6603b27 | ||
|
99d38a539e | ||
|
a40fbc1716 | ||
|
a15bfd98df | ||
|
c2adf1be01 | ||
|
a550abe41b | ||
|
7000992bf0 | ||
|
4a06f9c0e3 | ||
|
98e21d9fb9 | ||
|
336d627b6d | ||
|
1bd9ec19df | ||
|
0f5bbce528 | ||
|
0eff99871a | ||
|
d42a8b7adb | ||
|
c6052e12fe | ||
|
553de2ce24 | ||
|
99ab72ff82 | ||
|
0700a8c25d | ||
|
94c293ab5e | ||
|
1e0d34dc4f | ||
|
727d96cc22 | ||
|
f727d6b4a9 | ||
|
8d0ae96b7d | ||
|
8cf9e7324d | ||
|
a3c923d180 | ||
|
115b16ffb7 | ||
|
768dcbf112 | ||
|
b324e0fb80 | ||
|
40da51849e | ||
|
be0744d454 | ||
|
787c76e013 | ||
|
12d29e79f6 | ||
|
075a237873 | ||
|
64ef033724 | ||
|
c40ea85727 | ||
|
bf57632deb | ||
|
35dead7b26 | ||
|
ad1d47cc37 | ||
|
43882165cf | ||
|
6100a5b7da | ||
|
d095458ec0 | ||
|
5b39a018cf | ||
|
e400ff6944 | ||
|
cc1ab8bac4 | ||
|
bb30862c1b | ||
|
fdc42a9693 | ||
|
9fe9083e36 | ||
|
13bee7cf26 | ||
|
ec35a5d0cb | ||
|
4d66fbe8c3 | ||
|
b5fb4292c9 | ||
|
1d70822764 | ||
|
41fad77bf9 | ||
|
efcd86697c | ||
|
126dbf8800 | ||
|
254fb87ab3 | ||
|
c7187fafc3 | ||
|
ca08999cf8 | ||
|
4f2239cb9f | ||
|
3b5e2c99cf | ||
|
3ab1f6ce0e | ||
|
c606dc512e | ||
|
33dd8e8e0f | ||
|
4b11ed740a | ||
|
5dfbd791a7 | ||
|
046d046a30 | ||
|
6c256b96d6 | ||
|
3163d39f95 | ||
|
11cc83403d | ||
|
46bdb38a11 | ||
|
ac530d8a34 | ||
|
4bb60a80e7 | ||
|
bee9ac5a44 | ||
|
fc58b123b4 | ||
|
f4418d65b9 | ||
|
23c023f787 | ||
|
12490b4600 | ||
|
07aec2000a | ||
|
53d3c96e58 | ||
|
5da10c5a80 | ||
|
c9fd339289 | ||
|
beab7892e5 | ||
|
6d047c946c | ||
|
63ffd83021 | ||
|
2ecf1a3ddc | ||
|
7147236403 | ||
|
e0608f0ec4 | ||
|
3299deda11 | ||
|
3b5efdf7ae | ||
|
ad073326e5 | ||
|
7cb69fa7c2 | ||
|
4d0508e6bf | ||
|
8845f2d4c0 | ||
|
6bdc7fea05 | ||
|
ba748030b4 | ||
|
d1fdf737a7 | ||
|
965e0d22a3 | ||
|
ccc296d748 | ||
|
245a3f5d8b | ||
|
68cc250fe9 | ||
|
7fdfd81ca0 | ||
|
6b00029831 | ||
|
9e763f1584 | ||
|
b890c0ab2f | ||
|
8e24aee3e6 | ||
|
0a6880d45e | ||
|
b28f762afd | ||
|
acef2c29c2 | ||
|
79558ac588 | ||
|
3cd8a8f38f | ||
|
4eff49762f | ||
|
e551fad10f | ||
|
cbcfcfd14d | ||
|
456482f43b | ||
|
6a04b63fa5 | ||
|
6bdd17f9a6 | ||
|
f52c53738f | ||
|
7e7c0d6e3d | ||
|
8a868bdae1 | ||
|
e80fa5b4a5 | ||
|
86486ce043 | ||
|
2b7829a746 | ||
|
c44092b576 | ||
|
4db8558a1b | ||
|
021da38047 | ||
|
102c099f1d | ||
|
1e1cea792e | ||
|
f540f2a511 | ||
|
e80445127f | ||
|
c136791a00 | ||
|
411b2995eb | ||
|
159fa31888 | ||
|
2796d77566 | ||
|
d75860f6c1 | ||
|
3c4eef5461 | ||
|
d595d46129 | ||
|
70fd3d1dbc | ||
|
2da2bcdeac | ||
|
9335a21e3a | ||
|
9f843464b3 | ||
|
dd20212156 | ||
|
e70bb04f82 | ||
|
92610bf486 | ||
|
9444cbe388 | ||
|
b89cdeb077 | ||
|
c800524955 | ||
|
f7443a3a41 | ||
|
97433d2189 | ||
|
94776a3e4f | ||
|
1a661bcc3d | ||
|
4f72a8bc6a | ||
|
09fa42dd94 | ||
|
deba8169bb | ||
|
3d043a7b53 | ||
|
149b049650 | ||
|
0778a6f706 | ||
|
9713b08bf0 | ||
|
fab7afd2a3 | ||
|
423559f48e | ||
|
3145eadd0a | ||
|
0ae56692eb | ||
|
a01722d35f | ||
|
39450c0590 | ||
|
21d850783c | ||
|
bb9e630bba | ||
|
12c4b21587 | ||
|
e1957471d7 | ||
|
d5b93c52be | ||
|
ffa92451f9 | ||
|
c6a8af9eb6 | ||
|
49320f0fc4 | ||
|
203f216679 | ||
|
d913cd45ae | ||
|
df6e2f9946 | ||
|
2e71c22d3f | ||
|
68f909c4e6 | ||
|
9396be3cad | ||
|
7393b483e3 | ||
|
45af196e03 | ||
|
240252292d | ||
|
2fd3e42e91 | ||
|
18a22478c3 | ||
|
a7e23c5a63 | ||
|
274bf75fd1 | ||
|
5391d20cf0 | ||
|
0ac34fb885 | ||
|
0163a8528c | ||
|
71ae1fbca3 | ||
|
30d809ed17 | ||
|
59238765e8 | ||
|
bc920f8f19 | ||
|
fdf52c5ff4 | ||
|
9c8afdd155 | ||
|
e2718770b9 | ||
|
1177e3a87e | ||
|
d16f13adcf | ||
|
89da611e38 | ||
|
9faca8b943 | ||
|
0e75f4bc44 | ||
|
5f2b4202ed | ||
|
5006cbe244 | ||
|
4d8678b821 | ||
|
5f67aa271d | ||
|
a9ecad943f | ||
|
8c6dad631c | ||
|
4a1022bad3 | ||
|
c1ef48d6d2 | ||
|
5a64ffed7c | ||
|
b69171f1a1 | ||
|
3e3abbf3e1 | ||
|
89dc89d83a | ||
|
b5dcd09e11 | ||
|
83da6e241c | ||
|
46146a4893 | ||
|
331ea351a2 | ||
|
06cae9ed32 | ||
|
e38a080a3e | ||
|
c0054fd4e4 | ||
|
938f38c077 | ||
|
7ec60ae6a3 | ||
|
8be5616802 | ||
|
5bdb45416f | ||
|
63fe1a4bd2 | ||
|
7311ea147a | ||
|
f89990b5f1 | ||
|
3a0f699fae | ||
|
28bc8ba590 | ||
|
46b2f0a169 | ||
|
ec9dbcc045 | ||
|
0bc7bc8b40 | ||
|
c8e60460c1 | ||
|
e75d901b29 | ||
|
597f4bb1ac | ||
|
d69a84d56e | ||
|
cd779d5163 | ||
|
8fd456f604 | ||
|
bb26e53fc0 | ||
|
f2fc776d41 | ||
|
d295142a4d | ||
|
66fd541eea | ||
|
f4abd460ba | ||
|
e568babb33 | ||
|
479992935c | ||
|
f626cb9d0a | ||
|
bc4cd8ec2e | ||
|
cfb3b2cc84 | ||
|
9bf4661453 | ||
|
ed70aa0d74 | ||
|
2b1405624f | ||
|
797f6c1683 | ||
|
626c11999e | ||
|
dcea49c2a7 | ||
|
1f8aa6917f | ||
|
faeeeb6ceb | ||
|
f137c5b909 | ||
|
d6b00841d7 | ||
|
594e1aa0a2 | ||
|
2f5ab9c6f8 | ||
|
d426f6232e | ||
|
f67620dbfe | ||
|
0643949cbf | ||
|
3be2150861 | ||
|
88033fe549 | ||
|
0b117f6adc | ||
|
713675521f | ||
|
1ed41b33e3 | ||
|
67206a7f4f | ||
|
9284e3d1c9 | ||
|
de8575fd18 | ||
|
c57f574cb8 | ||
|
4af340c1e1 | ||
|
4e95abe0c9 | ||
|
e0822322a7 | ||
|
a36a2a36e6 | ||
|
660cf1b5af | ||
|
9774f405f1 | ||
|
bc02336867 | ||
|
2ba8a051b7 | ||
|
22ef07cdeb | ||
|
4995765c5f | ||
|
45326898dd | ||
|
d4a99d8488 | ||
|
48eb2842ee | ||
|
a52a931b57 | ||
|
813075ae2f | ||
|
1fae92ca54 | ||
|
efe55a7fc3 | ||
|
3818d7e5e3 | ||
|
2d590abebd | ||
|
bfc2ef5ab3 | ||
|
0436228eb1 | ||
|
a7bffb9259 | ||
|
90d35cc678 | ||
|
2264f5506a | ||
|
c2e2be69fa | ||
|
0301ddd1a6 | ||
|
da2c8aa644 | ||
|
cd540cdb13 | ||
|
d716146e9d | ||
|
e9c441c62f | ||
|
4ad884d54e | ||
|
e83190dd82 | ||
|
88c919d034 | ||
|
4ade6db556 | ||
|
ebb9b53589 | ||
|
b7ab556393 | ||
|
1797b66f48 | ||
|
4e86fdafc5 | ||
|
79d876e350 | ||
|
ea3afbb35c | ||
|
077be0c07e | ||
|
5324ca28d4 | ||
|
addcf6f034 | ||
|
6bf0cfa857 | ||
|
0ca906298b | ||
|
4fb677283e | ||
|
93a26b26d2 | ||
|
a372922e02 | ||
|
c7dfeaf25f | ||
|
6e73dba8e2 | ||
|
bf23a94f5d | ||
|
f02247b89c | ||
|
b1a686445f | ||
|
9e0f8b2f28 | ||
|
e799b9d3d0 | ||
|
3575964835 | ||
|
93744057ad | ||
|
91c85ee0d0 | ||
|
6952304b34 | ||
|
9edd496b8d | ||
|
ad0d3d19c1 | ||
|
6ff9ed00f0 | ||
|
bb67bdb83c | ||
|
7a06f0b8e1 | ||
|
d4e43ef663 | ||
|
55c7e223d4 | ||
|
a29232a133 | ||
|
9eb8700cfd | ||
|
246694b0f7 | ||
|
f68e8837f7 | ||
|
df15991a8e | ||
|
612a72a455 | ||
|
d3e75650b4 | ||
|
9075066cca | ||
|
206b397e7c | ||
|
395184d519 | ||
|
50be0fc292 | ||
|
236b5e68fa | ||
|
e2e4d3c57a | ||
|
453b339775 | ||
|
aea848de23 | ||
|
bdf38344ff | ||
|
4c71006c9d | ||
|
b22b66877e | ||
|
d8a37c1089 | ||
|
59e3a7814a | ||
|
d59290e69f | ||
|
19130134c3 | ||
|
f6e7d32b06 | ||
|
0c587838b4 | ||
|
2441f341d7 | ||
|
8e0fb6fd2c | ||
|
13ff503bed | ||
|
43cfb600d5 | ||
|
da97578658 | ||
|
35c8d10899 | ||
|
592707deea | ||
|
550eac7d64 | ||
|
60ca25deee | ||
|
462897bf44 | ||
|
6ce73e128e | ||
|
f66a810b46 | ||
|
0751d49adc | ||
|
da2023b3f8 | ||
|
136fabfc16 | ||
|
4f85cf0278 | ||
|
5d26c3b6a1 | ||
|
2ec9de511a | ||
|
75f62ea5b9 | ||
|
86303f6116 | ||
|
ebc213f0ac | ||
|
be3da94188 | ||
|
ceeab158b4 | ||
|
5e61827693 | ||
|
8312bfa839 | ||
|
bfa8795144 | ||
|
f37f61ae5f | ||
|
19b843f541 | ||
|
eac193566f | ||
|
0e805c1f5c | ||
|
7f8b3e538c | ||
|
06b063a5d5 | ||
|
149021a131 | ||
|
62a64f2ea5 | ||
|
d239aa78b7 | ||
|
90ff13a4dd | ||
|
0fdffe7814 | ||
|
f9ecc2ebef | ||
|
23b0025c1c | ||
|
f752c69c5c | ||
|
2998a8d03b | ||
|
1d00e5a2fb | ||
|
5068ec1849 | ||
|
ab2fc3a6b4 | ||
|
a3c13cdecc | ||
|
0aaa7f316d | ||
|
b75516feaf | ||
|
8159de4f49 | ||
|
7626068792 | ||
|
a5dd462e4f | ||
|
24299857b7 | ||
|
f4dac50a69 | ||
|
43e52e012b | ||
|
d9923bdf77 | ||
|
0659083568 | ||
|
4a95862d81 | ||
|
1ef95df160 | ||
|
59c92d1207 | ||
|
0aac5469ca | ||
|
aaecb02187 | ||
|
98db4da3ff | ||
|
33178a2337 | ||
|
6f002ea173 | ||
|
d8a6d2f6a8 | ||
|
daee6c032c | ||
|
63d8ef783c | ||
|
a615ba35a4 | ||
|
48763c8ade | ||
|
fa5011003c | ||
|
8ffa78ad19 | ||
|
8de7d287b7 | ||
|
cc794110d1 | ||
|
8627429987 | ||
|
78ec767368 | ||
|
de790d12da | ||
|
4581c40a53 | ||
|
2bfd496870 | ||
|
fe46587c2e | ||
|
b456b10a8d | ||
|
1c75a997d6 | ||
|
8c94dcfd27 | ||
|
5680becf16 | ||
|
28f31ba65c | ||
|
2441654242 | ||
|
52dcd93f83 | ||
|
f55379e7a6 | ||
|
9c8cf267e6 | ||
|
65dbb1bd46 | ||
|
89b923d1ab | ||
|
d3dfcdf2b9 | ||
|
6950679504 | ||
|
7987e8c1d6 | ||
|
9a664acc20 | ||
|
cd9a00b787 | ||
|
c7810b217f | ||
|
85466e1289 | ||
|
36f481a5ef | ||
|
546a53e6f2 | ||
|
a95cbc624f | ||
|
234ee04a7e | ||
|
bc26a2c2fe | ||
|
a328f3f6ca | ||
|
325c4efb8b | ||
|
c93bffb8f6 | ||
|
70a30c6c3d | ||
|
5770a38ea4 | ||
|
21df604765 | ||
|
176493c011 | ||
|
d633c7711d | ||
|
aeda10a3fe | ||
|
f3566ebc34 | ||
|
52928e3a7c | ||
|
52a4e5d581 | ||
|
637f72d4af | ||
|
12e7019af9 | ||
|
02b8ec013f | ||
|
89b054d39e | ||
|
f5b404108d | ||
|
c61f11c5e8 | ||
|
63f0a77cf2 | ||
|
2e2fbe8fc6 | ||
|
c5d5285e7e | ||
|
e87ca38574 | ||
|
96ceb1534a | ||
|
666b4fd56e | ||
|
3a3af67106 | ||
|
e6edfefd99 | ||
|
78e9bb070a | ||
|
76d365a3f7 | ||
|
39b6954062 | ||
|
1af22a530c | ||
|
de797ec63a | ||
|
f29341fcb3 | ||
|
6ff6c479fa | ||
|
50f283552d | ||
|
58843c01b4 | ||
|
d06cf9ab08 | ||
|
4f165ab959 | ||
|
98e2b7c582 | ||
|
30376b802e | ||
|
72b96c96f9 | ||
|
545b99e348 | ||
|
313d015ceb | ||
|
6af8fe607f | ||
|
84bde16850 | ||
|
225b244aca | ||
|
70a0650ba0 | ||
|
ab58ca890e | ||
|
8b38ce5bce | ||
|
b7bb377939 | ||
|
77f652bb22 | ||
|
daa8cb755e | ||
|
975c6ef577 | ||
|
084e56d1aa | ||
|
91fe0fe083 | ||
|
68726b9c62 | ||
|
2af09727b7 | ||
|
842379e6db | ||
|
b45bda2e57 | ||
|
b2426f9c0e | ||
|
ec112667a4 |
.gitattributes.gitignore.travis.ymlFAQGramps.pyINSTALLNEWSREADMERELEASE_NOTES
data
authors.xml
css
gramps.desktop.ingrampsxml.dtdgrampsxml.rngman
templates
tips.xml.indebian
docs
example
gramps
__init__.py
cli
gen
config.pyconst.pyconstfunc.py
grampsapp.pydatehandler
__init__.py_date_ar.py_date_bg.py_date_ca.py_date_cs.py_date_da.py_date_de.py_date_el.py_date_es.py_date_fi.py_date_fr.py_date_hr.py_date_hu.py_date_it.py_date_ja.py_date_lt.py_date_nb.py_date_nl.py_date_pl.py_date_pt.py_date_ru.py_date_sk.py_date_sl.py_date_sr.py_date_sv.py_date_uk.py_date_zh.py_date_zh_CN.py_date_zh_TW.py_datedisplay.py_datehandler.py_dateparser.py_datestrings.py_grampslocale.py
test
db
backup.pybase.pybsddbtxn.pycursor.pydbconst.pydictionary.pyexceptions.pyread.py
dbstate.pytest
txn.pyundoredo.pyupgrade.pywrite.pydisplay
filters
__init__.py_filterlist.py_filterparser.py_genericfilter.py
git_revision.pyrules
_haseventbase.py_hasgallerybase.py_hasldsbase.py_hasnotebase.py_hasreferencecountbase.py_hassourcecountbase.py_rule.py
citation
event
family
note
person
_hasaddress.py_hasassociation.py_hasbirth.py_hasdeath.py_hasfamilyevent.py_haslds.py_hassourcecount.py_isdescendantfamilyof.py_isrelatedwith.py_probablyalive.py
place
source
lib
__init__.pyattrbase.pyattribute.pybaseobj.pycitation.pydate.pyeventtype.pygcalendar.pygrampstype.pyhandle.pylocation.pymediaobj.pynote.pyperson.pyplace.pyplacename.pyplacetype.pyrepo.pyresearcher.pysrc.pystyledtext.pytableobj.py
test
url.pymerge
mime
plug
proxy
recentfiles.pyrelationship.pysimple
sort.pysoundex.pytest
updatecallback.pyutils
gui
aboutdialog.pyactiongroup.pyautocomp.pyclipboard.pycolumnorder.pyconfigure.pydbloader.pydbman.pyddtargets.pydialog.pydisplay.pydisplaystate.py
editors
addmedia.py
displaytabs
__init__.pybackreflist.pybackrefmodel.pybuttontab.pychildmodel.pyembeddedlist.pyeventembedlist.pyeventrefmodel.pygallerytab.pygrampstab.pygroupembeddedlist.pyldsmodel.pynameembedlist.pypersonrefembedlist.pyplacenameembedlist.pyplacenamemodel.pyplacerefembedlist.pyplacerefmodel.pysurnametab.pywebembedlist.py
editaddress.pyeditattribute.pyeditchildref.pyeditcitation.pyeditdate.pyeditevent.pyediteventref.pyeditfamily.pyeditldsord.pyeditlink.pyeditmedia.pyeditmediaref.pyeditname.pyeditnote.pyeditperson.pyeditpersonref.pyeditplace.pyeditplacename.pyeditplaceref.pyeditprimary.pyeditreference.pyeditrepository.pyeditsource.pyedittaglist.pyediturl.pyfiltereditor.pyobjectentries.pytest
filters
glade.pyglade
addmedia.gladebaseselector.gladebook.glade
grampsgui.pylistmodel.pycatalog
clipboard.gladeconfigure.gladedbman.gladedialog.gladedisplaystate.gladeeditaddress.gladeeditattribute.gladeeditchildref.gladeeditcitation.gladeeditdate.gladeeditevent.gladeediteventref.gladeeditfamily.gladeeditldsord.gladeeditlink.gladeeditlocation.gladeeditmedia.gladeeditmediaref.gladeeditname.gladeeditnote.gladeeditperson.gladeeditpersonref.gladeeditplace.gladeeditplacename.gladeeditplaceref.gladeeditreporef.gladeeditrepository.gladeeditsource.gladeediturl.gladegrampletpane.glademergecitation.glademergedata.glademergeevent.glademergefamily.glademergemedia.glademergenote.glademergeperson.glademergeplace.glademergerepository.glademergesource.gladepapermenu.gladeplugins.gladereorder.gladerule.gladestyleeditor.gladetipofday.gladeupdateaddons.gladelogger
makefilter.pymanagedwindow.pymerge
mergecitation.pymergeevent.pymergefamily.pymergemedia.pymergenote.pymergeperson.pymergeplace.pymergerepository.pymergesource.py
navigator.pyplug
_guioptions.py_windows.py
pluginmanager.pyexport
quick
report
_bookdialog.py_docreportdialog.py_fileentry.py_graphvizreportdialog.py_papermenu.py_reportdialog.py_stylecombobox.py_styleeditor.py
tool.pyselectors
baseselector.pyselectcitation.pyselectevent.pyselectfamily.pyselectnote.pyselectobject.pyselectperson.pyselectplace.pyselectrepository.pyselectsource.py
test
thumbnails.pytipofday.pyundohistory.pyuser.pyutils.pyutilscairo.pyviewmanager.pyviews
widgets
__init__.pybuttons.pydateentry.pyexpandcollapsearrow.pyfanchart.pyfanchartdesc.pygrabbers.pygrampletbar.pygrampletpane.pyinteractivesearchbox.pylabels.pylinkbox.pymonitoredwidgets.pymultitreeview.pyplaceentry.pyprogressdialog.pyselectionwidget.pyshortlistcomboentry.pystatusbar.pystyledtextbuffer.pystyledtexteditor.pyundoablebuffer.pyundoableentry.pyvalidatedcomboentry.pyvalidatedmaskedentry.py
guiQML
plugins
docgen
drawreport
ancestortree.pycalendarreport.pydescendtree.pydrawplugins.gpr.pyfanchart.pystatisticschart.pytimeline.py
export
export.gpr.pyexportcsv.gladeexportcsv.pyexportftree.gladeexportgedcom.pyexportgeneweb.gladeexportgeneweb.pyexportpkg.pyexportvcalendar.gladeexportvcalendar.pyexportvcard.gladeexportvcard.pyexportxml.py
test
gramplet
ageondategramplet.pyagestats.pyancestor.pyattributes.pycalendargramplet.pychildren.pydescendant.pyeval.pyevents.pyfanchartdescgramplet.pyfanchartgramplet.pyfaqgramplet.pyfilter.pygallery.pygivennamegramplet.pygramplet.gpr.pyleak.pylocations.pymediapreview.pymetadataviewer.pynotes.pypedigreegramplet.pypersondetails.pypersonresidence.pyplacedetails.pyrecordsgramplet.pyrepositorydetails.pysessionloggramplet.pysoundgen.pytodo.pytodogramplet.pytopsurnamesgramplet.pywelcomegramplet.py
graph
importer
import.gpr.pyimportcsv.pyimportgedcom.gladeimportgedcom.pyimportgeneweb.pyimportgrdb.pyimportprogen.pyimportvcard.pyimportxml.py
test
lib
holidays.xml.inlibcairodoc.pylibgedcom.pylibgrampsxml.pylibholiday.pylibhtml.pylibmetadata.pylibnarrate.pylibpersonview.pylibplaceimport.pylibplaceview.pylibplugins.gpr.pylibrecords.pylibrecurse.pylibsubstkeyword.pylibtreebase.py
maps
mapservices
quickview
rel
rel_ca.pyrel_cs.pyrel_da.pyrel_de.pyrel_es.pyrel_fi.pyrel_fr.pyrel_hr.pyrel_hu.pyrel_it.pyrel_nl.pyrel_no.pyrel_pl.pyrel_pt.pyrel_ru.pyrel_sk.pyrel_sl.pyrel_sv.pyrel_uk.pyrelplugins.gpr.py
sidebar
textreport
ancestorreport.pybirthdayreport.pycustombooktext.pydescendreport.pydetancestralreport.pydetdescendantreport.pyendoflinereport.pyfamilygroup.pyindivcomplete.pykinshipreport.pynotelinkreport.pynumberofancestorsreport.pyplacereport.pyrecordsreport.pysimplebooktitle.pysummary.pytableofcontents.pytagreport.pytextplugins.gpr.py
tool
changenames.gladechangenames.pychangetypes.gladechangetypes.pycheck.gladecheck.pydateparserdisplaytest.pydumpgenderstats.pyeventcmp.gladeeventcmp.pyextractcity.pyfinddupes.gladefinddupes.pymediamanager.pymergecitations.glademergecitations.pynotrelated.gladenotrelated.pyownereditor.gladeownereditor.pypatchnames.gladepatchnames.pyphpgedview.gladephpgedviewconnector.pypopulatesources.pyrebuild.pyrebuildgenderstat.pyrebuildrefmap.pyrelcalc.gladeremoveunused.gladeremoveunused.pyreorderids.pytestcasegenerator.pytools.gpr.pytoolsdebug.gpr.pyverify.gladeverify.py
view
citationlistview.pycitationtreeview.pydashboardview.pyeventview.pyfamilyview.pyfanchartdescview.pyfanchartview.pygeoclose.pygeoevents.pygeofamclose.pygeofamily.pygeography.gpr.pygeomoves.pygeoperson.pygeoplaces.pyhtmlrenderer.gpr.pyhtmlrenderer.pymediaview.pynoteview.pypedigreeview.pyplacetreeview.pyrelview.pyrepoview.pysourceview.pyview.gpr.py
webreport
webstuff
test
version.pywebapp
help
images/hicolor
16x16
actions
geo-fixed-zoom.pnggeo-free-zoom.pnggeo-place-add.pnggeo-place-link.pnggeo-show-event.pnggeo-show-family.pnggeo-show-person.pnggeo-show-place.pnggramps-address.pnggramps-attribute.pnggramps-bookmark-delete.pnggramps-bookmark-edit.pnggramps-bookmark-new.pnggramps-bookmark.pnggramps-citation.pnggramps-config.pnggramps-date-edit.pnggramps-date.pnggramps-event.pnggramps-family.pnggramps-fanchart.pnggramps-fanchartdesc.pnggramps-font-bgcolor.pnggramps-font-color.pnggramps-font.pnggramps-geo.pnggramps-gramplet.pnggramps-lock.pnggramps-media.pnggramps-merge.pnggramps-notes.pnggramps-parents-add.pnggramps-parents-open.pnggramps-parents.pnggramps-pedigree.pnggramps-person.pnggramps-place.pnggramps-relation.pnggramps-reports.pnggramps-repository.pnggramps-source.pnggramps-spouse.pnggramps-tag-new.pnggramps-tag.pnggramps-tools.pnggramps-tree-group.pnggramps-tree-list.pnggramps-tree-select.pnggramps-unlock.pnggramps-view.pnggramps-viewmedia.pnggramps-zoom-best-fit.pnggramps-zoom-fit-width.pnggramps-zoom-in.pnggramps-zoom-out.pnggramps.png
source
22x22
actions
geo-fixed-zoom.pnggeo-free-zoom.pnggeo-place-add.pnggeo-place-link.pnggeo-show-event.pnggeo-show-family.pnggeo-show-person.pnggeo-show-place.pnggramps-address.pnggramps-attribute.pnggramps-bookmark-delete.pnggramps-bookmark-edit.pnggramps-bookmark-new.pnggramps-bookmark.pnggramps-citation.pnggramps-config.pnggramps-date-edit.pnggramps-date.pnggramps-event.pnggramps-family.pnggramps-fanchart.pnggramps-fanchartdesc.pnggramps-font-bgcolor.pnggramps-font-color.pnggramps-font.pnggramps-geo-altmap.pnggramps-geo-birth.pnggramps-geo-death.pnggramps-geo-mainmap.pnggramps-geo-marriage.pnggramps-geo.pnggramps-gramplet.pnggramps-lock.pnggramps-media.pnggramps-merge.pnggramps-notes.pnggramps-parents-add.pnggramps-parents-open.pnggramps-parents.pnggramps-pedigree.pnggramps-person.pnggramps-place.pnggramps-relation.pnggramps-reports.pnggramps-repository.pnggramps-source.pnggramps-spouse.pnggramps-tag-new.pnggramps-tag.pnggramps-tools.pnggramps-tree-group.pnggramps-tree-list.pnggramps-tree-select.pnggramps-unlock.pnggramps-view.pnggramps-viewmedia.pnggramps-zoom-best-fit.pnggramps-zoom-fit-width.pnggramps-zoom-in.pnggramps-zoom-out.pnggramps.png
24x24
actions
add-parent-existing-family.pnggeo-fixed-zoom.pnggeo-free-zoom.pnggeo-place-add.pnggeo-place-link.pnggeo-show-event.pnggeo-show-family.pnggeo-show-person.pnggeo-show-place.pnggramps-address.pnggramps-attribute.pnggramps-bookmark-delete.pnggramps-bookmark-edit.pnggramps-bookmark-new.pnggramps-bookmark.pnggramps-citation.pnggramps-config.pnggramps-date-edit.pnggramps-date.pnggramps-event.pnggramps-family.pnggramps-fanchart.pnggramps-fanchartdesc.pnggramps-font-bgcolor.pnggramps-font-color.pnggramps-font.pnggramps-geo-altmap.pnggramps-geo-birth.pnggramps-geo-death.pnggramps-geo-mainmap.pnggramps-geo-marriage.pnggramps-geo.pnggramps-gramplet.pnggramps-lock.pnggramps-media.pnggramps-merge.pnggramps-notes.pnggramps-parents-add.pnggramps-parents-open.pnggramps-parents.pnggramps-pedigree.pnggramps-person.pnggramps-place.pnggramps-relation.pnggramps-reports.pnggramps-repository.pnggramps-source.pnggramps-spouse.pnggramps-tag-new.pnggramps-tag.pnggramps-tools.pnggramps-tree-group.pnggramps-tree-list.pnggramps-tree-select.pnggramps-unlock.pnggramps-view.pnggramps-viewmedia.pnggramps-zoom-best-fit.pnggramps-zoom-fit-width.pnggramps-zoom-in.pnggramps-zoom-out.pnggramps.png
48x48
actions
geo-fixed-zoom.pnggeo-free-zoom.pnggeo-place-add.pnggeo-place-link.pnggeo-show-event.pnggeo-show-family.pnggeo-show-person.pnggeo-show-place.pnggramps-address.pnggramps-attribute.pnggramps-bookmark-delete.pnggramps-bookmark-edit.pnggramps-bookmark-new.pnggramps-bookmark.pnggramps-citation.pnggramps-config.pnggramps-date-edit.pnggramps-date.pnggramps-event.pnggramps-family.pnggramps-fanchart.pnggramps-fanchartdesc.pnggramps-font-bgcolor.pnggramps-font-color.pnggramps-font.pnggramps-geo-altmap.pnggramps-geo-birth.pnggramps-geo-death.pnggramps-geo-mainmap.pnggramps-geo-marriage.pnggramps-geo.pnggramps-gramplet.pnggramps-lock.pnggramps-media.pnggramps-merge.pnggramps-notes.pnggramps-parents-add.pnggramps-parents-open.pnggramps-parents.pnggramps-pedigree.pnggramps-person.pnggramps-place.pnggramps-relation.pnggramps-reports.pnggramps-repository.pnggramps-source.pnggramps-spouse.pnggramps-tag-new.pnggramps-tag.pnggramps-tools.pnggramps-tree-group.pnggramps-tree-list.pnggramps-tree-select.pnggramps-unlock.pnggramps-view.pnggramps-viewmedia.pnggramps-zoom-best-fit.pnggramps-zoom-fit-width.pnggramps-zoom-in.pnggramps-zoom-out.pnggramps.png
scalable
actions
add-parent-existing-family.svggeo-fixed-zoom.svggeo-free-zoom.svggeo-place-add.svggeo-place-link.svggeo-show-event.svggeo-show-family.svggeo-show-person.svggeo-show-place.svggramps-address.svggramps-attribute.svggramps-bookmark-delete.svggramps-bookmark-edit.svggramps-bookmark-new.svggramps-bookmark.svggramps-citation.svggramps-config.svggramps-date-edit.svggramps-date.svggramps-event.svggramps-family.svggramps-fanchart.svggramps-fanchartdesc.svggramps-font-bgcolor.svggramps-font-color.svggramps-font.svggramps-geo-altmap.svggramps-geo-birth.svggramps-geo-death.svggramps-geo-mainmap.svggramps-geo-marriage.svggramps-geo.svggramps-gramplet.svggramps-lock.svggramps-media.svggramps-merge.svggramps-notes.svggramps-parents-add.svggramps-parents-open.svggramps-parents.svggramps-pedigree.svggramps-person.svggramps-place.svggramps-relation.svggramps-reports.svggramps-repository.svggramps-source.svggramps-spouse.svggramps-tag-new.svggramps-tag.svggramps-tools.svggramps-tree-group.svggramps-tree-list.svggramps-tree-select.svggramps-unlock.svggramps-view.svggramps-viewmedia.svggramps-zoom-best-fit.svggramps-zoom-fit-width.svggramps-zoom-in.svggramps-zoom-out.svggramps.svg
mac
po
POTFILES.inPOTFILES.skipar.pobg.pobr.poca.pocheck_pocs.poda.pode.poel.poen_GB.poeo.poes.pofi.pofr.poga.pogramps.pothe.pohr.pohu.pois.poit.poja.polt.pomk.ponb.ponl.ponn.popl.popt_BR.popt_PT.poro.poru.posk.posl.posq.posr.posr_Latn.posv.potr.pouk.poupdate_po.pyvi.pozh_CN.pozh_HK.pozh_TW.po
setup.py
9
.gitattributes
vendored
Normal file
9
.gitattributes
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Make Github recognise Gramps as a Python project,
|
||||
# by marking .sql files as text files!
|
||||
# See: https://github.com/github/linguist/issues/2462
|
||||
# https://github.com/github/linguist/blob/master/README.md
|
||||
*.sql linguist-language=txt
|
||||
|
||||
# Have Github ignore js vendored files.
|
||||
# https://github.com/gramps-project/gramps/tree/master/data/javascript
|
||||
#data/javascript/*.js linguist-vendored
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -18,3 +18,4 @@ tags
|
||||
|
||||
# Testing
|
||||
test/data
|
||||
gramps/webapp/grampsdb/fixtures/initial_data.json
|
||||
|
29
.travis.yml
Normal file
29
.travis.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
# After changing this file, check it on:
|
||||
# http://lint.travis-ci.org/
|
||||
|
||||
|
||||
language: c
|
||||
#python:
|
||||
# - 3.3
|
||||
# - 3.4
|
||||
|
||||
install:
|
||||
- git clone --depth=50 --branch=maintenance/gramps42 git://github.com/gramps-project/gramps.git gramps-project/gramps
|
||||
- cd gramps-project/gramps
|
||||
- time sudo apt-get update
|
||||
- travis_retry sudo apt-get install gir1.2-pango gir1.2-gtk xdg-utils librsvg2-common libglib2.0-dev intltool
|
||||
- travis_retry sudo apt-get install python3-gobject python3-gi python3-cairo python3-gi-cairo python3-bsddb3 python3-dev python3-nose
|
||||
|
||||
- travis_retry curl https://bootstrap.pypa.io/get-pip.py | sudo python3
|
||||
- travis_retry sudo pip3 install Django==1.7
|
||||
- travis_retry sudo pip3 install pyicu==1.8
|
||||
- travis_retry sudo pip3 install mock
|
||||
- python3 setup.py build
|
||||
|
||||
#before_script:
|
||||
# - sudo Xvfb :99 -ac &
|
||||
# - export DISPLAY=:99
|
||||
|
||||
script:
|
||||
- mkdir -p /home/travis/.gramps/grampsdb/
|
||||
- DJANGO_SETTINGS_MODULE=gramps.webapp.settings nosetests3 --exclude=TestcaseGenerator --exclude=vcard --exclude=merge_ref_test gramps
|
185
FAQ
185
FAQ
@@ -1,4 +1,4 @@
|
||||
**** This is GRAMPS Frequently Asked Questions ****
|
||||
**** This is Gramps Frequently Asked Questions ****
|
||||
|
||||
The questions below frequently come up in mailing list discussions and forums.
|
||||
This list is by no means complete. If you would like to add questions/answers
|
||||
@@ -9,23 +9,23 @@ to this list, please email your suggestions to gramps-devel@lists.sf.net
|
||||
|
||||
==General==
|
||||
|
||||
1. What is GRAMPS?
|
||||
1. What is Gramps?
|
||||
|
||||
2. Where do I get it and how much does it cost?
|
||||
|
||||
3. Does GRAMPS exist in other languages?
|
||||
3. Does Gramps exist in other languages?
|
||||
|
||||
4. How do I keep backups?
|
||||
|
||||
5. Does Gramps support Unicode fonts? In particular, does it support non-Roman Unicode fonts?
|
||||
|
||||
6. What is needed to install GRAMPS under Linux, Solaris, or FreeBSD?
|
||||
6. What is needed to install Gramps under Linux, Solaris, or FreeBSD?
|
||||
|
||||
7. Does it work with Windows (tm)?
|
||||
|
||||
8. Does it work with the Mac?
|
||||
|
||||
9. What are the Minimum Specs to run GRAMPS?
|
||||
9. What are the Minimum Specs to run Gramps?
|
||||
|
||||
==Preferences==
|
||||
|
||||
@@ -33,43 +33,43 @@ to this list, please email your suggestions to gramps-devel@lists.sf.net
|
||||
|
||||
==Collaboration-Portability==
|
||||
|
||||
11. Is GRAMPS compatible with other genealogical software?
|
||||
11. Is Gramps compatible with other genealogical software?
|
||||
|
||||
12. Can GRAMPS read files created by GenApp X?
|
||||
12. Can Gramps read files created by GenApp X?
|
||||
|
||||
13. Can GRAMPS write files readable by GenApp X?
|
||||
13. Can Gramps write files readable by GenApp X?
|
||||
|
||||
14. What standards does GRAMPS support?
|
||||
14. What standards does Gramps support?
|
||||
|
||||
15. How do I import data from another genealogy program into GRAMPS?
|
||||
15. How do I import data from another genealogy program into Gramps?
|
||||
|
||||
16. Can I install GRAMPS on a Linux Web Server and use it via a web browser? This would enable my relations worldwide to access and update it.
|
||||
16. Can I install Gramps on a Linux Web Server and use it via a web browser? This would enable my relations worldwide to access and update it.
|
||||
|
||||
==Reports==
|
||||
|
||||
17. Can GRAMPS print a genealogical tree for my family?
|
||||
17. Can Gramps print a genealogical tree for my family?
|
||||
|
||||
18. In what formats can GRAMPS output its reports?
|
||||
18. In what formats can Gramps output its reports?
|
||||
|
||||
19. How can I change the default language in reports?
|
||||
|
||||
20. Is GRAMPS compatible with the Internet?
|
||||
20. Is Gramps compatible with the Internet?
|
||||
|
||||
21. Can I create custom reports/filters/whatever?
|
||||
|
||||
22. Why are non-latin characters displayed as garbage in PDF/PS reports?
|
||||
|
||||
23. I would like to contribute to GRAMPS by writing my favorite report.
|
||||
23. I would like to contribute to Gramps by writing my favorite report.
|
||||
|
||||
==Database - GRAMPS file formats==
|
||||
==Database - Gramps file formats==
|
||||
|
||||
24. What is the maximum database size (bytes) GRAMPS can handle?
|
||||
24. What is the maximum database size (bytes) Gramps can handle?
|
||||
|
||||
25. How many people can GRAMPS database handle?
|
||||
25. How many people can Gramps database handle?
|
||||
|
||||
26. My database is really big. Is there a way around loading all the data into memory?
|
||||
|
||||
27. Can I run GRAMPS from a database on a NFS share?
|
||||
27. Can I run Gramps from a database on a NFS share?
|
||||
|
||||
28. Why is the database format not portable?
|
||||
|
||||
@@ -77,123 +77,116 @@ to this list, please email your suggestions to gramps-devel@lists.sf.net
|
||||
|
||||
29. I found a bug and I want it fixed right now! What do I do?
|
||||
|
||||
30. GRAMPS should be a .... type of application
|
||||
30. Gramps should be a .... type of application
|
||||
|
||||
==GRAMPS Webhosting ==
|
||||
|
||||
31. How can I publish web sites generated by GRAMPS?
|
||||
|
||||
32. How do I submit my pages to the GRAMPS library site (http://library.gramps-project.org)?
|
||||
|
||||
33. After I upload my Family Web Page to library.gramps-project.org, is the password used for write privileges only or read privileges?
|
||||
|
||||
34. Do I view the Family Web Page with a url into my browser? Or through a link on a list of Family Web Pages on the GRAMPS-Project.org site?
|
||||
==Gramps Webhosting ==
|
||||
|
||||
31. How can I publish web sites generated by Gramps?
|
||||
|
||||
|
||||
**** Questions and answers ****
|
||||
|
||||
==General==
|
||||
|
||||
1. What is GRAMPS?
|
||||
1. What is Gramps?
|
||||
|
||||
GRAMPS is the Genealogical Research and Analysis Management Program System.
|
||||
Gramps is the Genealogical Research and Analysis Management Program System.
|
||||
In other words, it is a personal genealogy program letting you store, edit,
|
||||
and research genealogical data using the powers of your computer.
|
||||
|
||||
|
||||
2. Where do I get it and how much does it cost?
|
||||
|
||||
GRAMPS can be downloaded from http://sf.net/projects/gramps at no charge.
|
||||
GRAMPS is an Open Source project covered by the GNU General Public License.
|
||||
Gramps can be downloaded from http://sf.net/projects/gramps at no charge.
|
||||
Gramps is an Open Source project covered by the GNU General Public License.
|
||||
You have full access to the source code and are allowed to distribute the
|
||||
program and source code freely.
|
||||
|
||||
|
||||
3. Does GRAMPS exist in other languages?
|
||||
3. Does Gramps exist in other languages?
|
||||
|
||||
Yes, at the moment GRAMPS is translated in 15 languages
|
||||
Yes, at the moment Gramps is translated in 15 languages
|
||||
|
||||
|
||||
4. How do I keep backups?
|
||||
|
||||
Use a recent version of GRAMPS! From 2.2.5 onwards there is an automatic backup utility.
|
||||
It is extremely important to keep backups of your data, and keep them in a safe place. GRAMPS has a specific portable file format which is small, and human readable, denoted by .gramps. If you have allowed this in the preferences (In Edit menu->Preferences->General), GRAMPS will keep a backup of your database on exit. You can copy this backup file from time to time to a save location (eg a usb stick).
|
||||
Use a recent version of Gramps! From 2.2.5 onwards there is an automatic backup utility.
|
||||
It is extremely important to keep backups of your data, and keep them in a safe place. Gramps has a specific portable file format which is small, and human readable, denoted by .gramps. If you have allowed this in the preferences (In Edit menu->Preferences->General), Gramps will keep a backup of your database on exit. You can copy this backup file from time to time to a save location (eg a usb stick).
|
||||
|
||||
Note: The .gramps files are compressed. Clicking them will open GRAMPS. To see the XML select them and open them with a decompressing utility (like ark, gunzip), after which you can extract the XML file which is human readable.
|
||||
Do not keep backups in GEDCOM. Not all information GRAMPS stores can be written in the GEDCOM. Hence, an export/import operation GRAMPS --> GEDCOM --> GRAMPS, will mean you lose data. Use the .gramps file format for backups!
|
||||
Note: The .gramps files are compressed. Clicking them will open Gramps. To see the XML select them and open them with a decompressing utility (like ark, gunzip), after which you can extract the XML file which is human readable.
|
||||
Do not keep backups in GEDCOM. Not all information Gramps stores can be written in the GEDCOM. Hence, an export/import operation Gramps --> GEDCOM --> Gramps, will mean you lose data. Use the .gramps file format for backups!
|
||||
Do not keep backups in GRDB format. GRDB is a database, which might be computer dependent (read, not working on a different PC). Small damage to a GRDB file can also not be repaired. Use the .gramps file format for backups!
|
||||
|
||||
|
||||
5. Does Gramps support Unicode fonts? In particular, does it support non-Roman Unicode fonts?
|
||||
|
||||
Yes. GRAMPS works internally with Unicode (UTF-8), so all alphabets can be used on all entry fields. All reports fully support this, although for PDF/PS you need to work with gnome-print or openoffice.
|
||||
Yes. Gramps works internally with Unicode (UTF-8), so all alphabets can be used on all entry fields. All reports fully support this, although for PDF/PS you need to work with gnome-print or openoffice.
|
||||
|
||||
==Installation==
|
||||
|
||||
6. What is needed to install GRAMPS under Linux, Solaris, or FreeBSD?
|
||||
6. What is needed to install Gramps under Linux, Solaris, or FreeBSD?
|
||||
|
||||
GRAMPS is a [http://en.wikipedia.org/wiki/Gtk GTK] application. GRAMPS needs to have the [http://en.wikipedia.org/wiki/Pygtk pygtk] libraries installed on the system. As long as these libraries are installed, GRAMPS should function. It will operate under the GNOME desktop, KDE desktop, or any other desktop. If the GNOME bindings for Python are installed on the system, GRAMPS will have additional functionality. The GRAMPS project recommends version 2.8 or higher of GTK.
|
||||
Gramps is a [http://en.wikipedia.org/wiki/Gtk GTK] application. Gramps needs to have the [http://en.wikipedia.org/wiki/Pygtk pygtk] libraries installed on the system. As long as these libraries are installed, Gramps should function. It will operate under the GNOME desktop, KDE desktop, or any other desktop. If the GNOME bindings for Python are installed on the system, Gramps will have additional functionality. The Gramps project recommends version 2.8 or higher of GTK.
|
||||
|
||||
|
||||
7. Does it work with Windows (tm)?
|
||||
|
||||
The Linux Genealogy CD can function as a live CD that you boot directly from. You can then run Linux and GRAMPS off the CD, even if your computer is entirely Windows.
|
||||
The Linux Genealogy CD can function as a live CD that you boot directly from. You can then run Linux and Gramps off the CD, even if your computer is entirely Windows.
|
||||
|
||||
An experimental Windows installer is available, however we do not have the manpower to offer support for Windows. A windows mailing list is available however and we do do our best to solve windows related problems.
|
||||
|
||||
|
||||
8. Does it work with the Mac?
|
||||
|
||||
The Fink project has ported some older versions of GRAMPS to OS X (tm). The Mac OS X port is not directly supported by the GRAMPS project, primarily because none of the GRAMPS developers have access to Mac OS X and because OS X is not Free Software.
|
||||
The Fink project has ported some older versions of Gramps to OS X (tm). The Mac OS X port is not directly supported by the Gramps project, primarily because none of the Gramps developers have access to Mac OS X and because OS X is not Free Software.
|
||||
|
||||
This present version of GRAMPS (2.2.x) does not appear to have been ported by the Fink project. Please contact the Fink project for more information. However, some users had success in installing 2.2.x on Mac OSX either running in native mode or running on X11 using some of the fink packages.
|
||||
This present version of Gramps (2.2.x) does not appear to have been ported by the Fink project. Please contact the Fink project for more information. However, some users had success in installing 2.2.x on Mac OSX either running in native mode or running on X11 using some of the fink packages.
|
||||
|
||||
|
||||
9. What are the Minimum Specs to run GRAMPS?
|
||||
9. What are the Minimum Specs to run Gramps?
|
||||
|
||||
We would recommend at least an 800x600 video display. For GRAMPS 2.0, the memory requirements have been reduced, and GRAMPS can run quite efficiently on a 256MB system, holding considerably more people. A system with 512MB should be able to hold around 200,000 people. Disk space requirements for databases are however considerably larger, with a typical database being several megabytes in size. For 120.000 people you must consider already 530Mb for the database. Pictures are stored on disk separately, so a large harddisk is necessary.
|
||||
We would recommend at least an 800x600 video display. For Gramps 2.0, the memory requirements have been reduced, and Gramps can run quite efficiently on a 256MB system, holding considerably more people. A system with 512MB should be able to hold around 200,000 people. Disk space requirements for databases are however considerably larger, with a typical database being several megabytes in size. For 120.000 people you must consider already 530Mb for the database. Pictures are stored on disk separately, so a large harddisk is necessary.
|
||||
|
||||
|
||||
==Preferences==
|
||||
|
||||
10. Can I change the dates in reports to 'day month year'
|
||||
|
||||
Yes, change in the preferences ("Edit->Preferences") the date for GRAMPS to the required format (eg YYYY-MM-DD or day mont year), and make the report. Your global date preferences will be used.
|
||||
Yes, change in the preferences ("Edit->Preferences") the date for Gramps to the required format (eg YYYY-MM-DD or day mont year), and make the report. Your global date preferences will be used.
|
||||
|
||||
|
||||
==Collaboration-Portability==
|
||||
|
||||
11. Is GRAMPS compatible with other genealogical software?
|
||||
11. Is Gramps compatible with other genealogical software?
|
||||
|
||||
GRAMPS makes every effort to maintain compatibility with GEDCOM, the general standard of recording genealogical information. We have import and export filters that enable GRAMPS to read and write GEDCOM files.
|
||||
Gramps makes every effort to maintain compatibility with GEDCOM, the general standard of recording genealogical information. We have import and export filters that enable Gramps to read and write GEDCOM files.
|
||||
|
||||
It is important to understand that the GEDCOM standard is poorly implemented -- virtually every genealogical software has its own "flavor" of GEDCOM. As we learn about new flavor, the import/export filters can be created very quickly. However, finding out about the unknown flavors requires user feedback. Please feel free to inform us about any GEDCOM flavor not supported by GRAMPS, and we will do our best to support it!
|
||||
It is important to understand that the GEDCOM standard is poorly implemented -- virtually every genealogical software has its own "flavor" of GEDCOM. As we learn about new flavor, the import/export filters can be created very quickly. However, finding out about the unknown flavors requires user feedback. Please feel free to inform us about any GEDCOM flavor not supported by Gramps, and we will do our best to support it!
|
||||
|
||||
|
||||
12. Can GRAMPS read files created by GenApp X?
|
||||
12. Can Gramps read files created by GenApp X?
|
||||
|
||||
See above.
|
||||
|
||||
|
||||
13. Can GRAMPS write files readable by GenApp X?
|
||||
13. Can Gramps write files readable by GenApp X?
|
||||
|
||||
See above.
|
||||
|
||||
|
||||
14. What standards does GRAMPS support?
|
||||
14. What standards does Gramps support?
|
||||
|
||||
The nice thing about standards is that there never is a shortage of them. GRAMPS is tested to support the following flavors of GEDCOM: GEDCOM5.5, Brother's Keeper, Family Origins, Family Tree Maker, Ftree, GeneWeb, Legacy, Personal Ancestral File, Pro-Gen, Reunion, and Visual Genealogie.
|
||||
The nice thing about standards is that there never is a shortage of them. Gramps is tested to support the following flavors of GEDCOM: GEDCOM5.5, Brother's Keeper, Family Origins, Family Tree Maker, Ftree, GeneWeb, Legacy, Personal Ancestral File, Pro-Gen, Reunion, and Visual Genealogie.
|
||||
|
||||
|
||||
15. How do I import data from another genealogy program into GRAMPS?
|
||||
15. How do I import data from another genealogy program into Gramps?
|
||||
|
||||
The best way is to create a new gramps database file (.grdb), and select the import option in the file menu. Here you select the GEDCOM you generated with the other program, and import it.
|
||||
|
||||
|
||||
16. Can I install GRAMPS on a Linux Web Server and use it via a web browser? This would enable my relations worldwide to access and update it.
|
||||
16. Can I install Gramps on a Linux Web Server and use it via a web browser? This would enable my relations worldwide to access and update it.
|
||||
|
||||
While GRAMPS can generate web sites, it does not provide a web interface that allows for editing. If this is a requirement, then [http://geneweb.org GeneWeb] or [http://phpgedview.sourceforge.net PhpGedView] are programs more likely to meet your needs. However, you may wish to ask yourself the following questions:
|
||||
While Gramps can generate web sites, it does not provide a web interface that allows for editing. If this is a requirement, then [http://geneweb.org GeneWeb] or [http://phpgedview.sourceforge.net PhpGedView] are programs more likely to meet your needs. However, you may wish to ask yourself the following questions:
|
||||
* Do I really want relatives or other people to directly edit my genealogy database?
|
||||
* Do I implicitly trust, without verification, any data that people may enter?
|
||||
* Do these people have the same understanding of good genealogy practice that I have?
|
||||
@@ -204,7 +197,7 @@ You may also want to consider the effects of possible downtime of your site if y
|
||||
|
||||
==Reports==
|
||||
|
||||
17. Can GRAMPS print a genealogical tree for my family?
|
||||
17. Can Gramps print a genealogical tree for my family?
|
||||
|
||||
Yes. Different people have different ideas of what a genealogical tree is.
|
||||
Some think of it as a chart going from the distant ancestor and listing
|
||||
@@ -212,14 +205,14 @@ all his/her descendants and their families. Others think it should be a
|
||||
chart going from the person back in time, listing the ancestors and their
|
||||
families. Yet other people think of a table, text report, etc.
|
||||
|
||||
GRAMPS can produce any of the above, and many more different charts and
|
||||
Gramps can produce any of the above, and many more different charts and
|
||||
reports. Moreover, the plugin architechture enables users (you) to create
|
||||
their own plugins which could be new reports, charts, or research tools.
|
||||
|
||||
|
||||
18. In what formats can GRAMPS output its reports?
|
||||
18. In what formats can Gramps output its reports?
|
||||
|
||||
Text reports are available in HTML, PDF, ODT, LaTeX, and RTF formats. Graphical reports (charts and diagrams) are available in PostScript, PDF, SVG, ODS, and GraphViz formats.
|
||||
Text reports are available in HTML, PDF, ODT, LaTeX, and RTF formats. Graphical reports (charts and diagrams) are available in PostScript, PDF, SVG, ODS, and Graphviz formats.
|
||||
|
||||
|
||||
19. How can I change the default language in reports?
|
||||
@@ -227,11 +220,11 @@ Text reports are available in HTML, PDF, ODT, LaTeX, and RTF formats. Graphical
|
||||
The reports are in the language of your linux installation. You can change it by installing extra language packs, see [Howto: Change the language of reports] on wiki.
|
||||
|
||||
|
||||
20. Is GRAMPS compatible with the Internet?
|
||||
20. Is Gramps compatible with the Internet?
|
||||
|
||||
GRAMPS can store web addresses and direct your browser to them. It can import
|
||||
Gramps can store web addresses and direct your browser to them. It can import
|
||||
data that you download from the Internet. It can export data that you could
|
||||
send over the Internet. GRAMPS is familiar with the standard file formats
|
||||
send over the Internet. Gramps is familiar with the standard file formats
|
||||
widely used on the Internet (e.g. JPEG, PNG, and GIF images, MP3, OGG, and
|
||||
WAV sound files, QuickTime, MPEG, and AVI movie files, etc). Other than that,
|
||||
there is little that a genealogical program can do with the Internet :-)
|
||||
@@ -241,7 +234,7 @@ there is little that a genealogical program can do with the Internet :-)
|
||||
|
||||
Yes. There are many levels of customization. One is creating or modifying
|
||||
the templates used for the reports. This gives you some control over
|
||||
the fonts, colors, and some layout of the reports. You can also use GRAMPS
|
||||
the fonts, colors, and some layout of the reports. You can also use Gramps
|
||||
controls in the report dialogs to tell what contents should be used for a
|
||||
particular report. In addition to this, you have an ability to create your
|
||||
own filters -- this is useful in selecting people based on criteria set
|
||||
@@ -253,47 +246,47 @@ knowledge of programming in Python.
|
||||
|
||||
22. Why are non-latin characters displayed as garbage in PDF/PS reports?
|
||||
|
||||
This is a limitation of the built-in fonts of PS and PDF formats. To print non-Latin text, use the Print... in the format selection menu of the report dialog. This will use the gnome-print backend, which supports PS and PDF creation, as well as direct printing. (Note: you might need to install gnome-print separately as it is not required for GRAMPS).
|
||||
This is a limitation of the built-in fonts of PS and PDF formats. To print non-Latin text, use the Print... in the format selection menu of the report dialog. This will use the gnome-print backend, which supports PS and PDF creation, as well as direct printing. (Note: you might need to install gnome-print separately as it is not required for Gramps).
|
||||
|
||||
If you only have Latin text, the PDF option will produce a smaller PDF compared to that created by gnome-print, simply because no font information will be embedded.
|
||||
|
||||
|
||||
23. I would like to contribute to GRAMPS by writing my favorite report.
|
||||
23. I would like to contribute to Gramps by writing my favorite report.
|
||||
How do I do that?
|
||||
|
||||
The easiest way to contribute to reports, filters, tools, etc. is to copy an existing GRAMPS report, filter, or tool. If you can create what you want by modifying existing code -- great! If your idea does not fit into the logic of any existing GRAMPS tool, you will need to write your own plugin from scratch. Help is available on the [Developers Portal] on wiki, or on the developers mailing list: gramps-devel@lists.sourceforge.net.
|
||||
The easiest way to contribute to reports, filters, tools, etc. is to copy an existing Gramps report, filter, or tool. If you can create what you want by modifying existing code -- great! If your idea does not fit into the logic of any existing Gramps tool, you will need to write your own plugin from scratch. Help is available on the [Developers Portal] on wiki, or on the developers mailing list: gramps-devel@lists.sourceforge.net.
|
||||
|
||||
To test your work in progress, you may save your plugin under $HOME/.gramps/plugins directory and it should be found and imported on startup. The correctly written plugin will register itself with GRAMPS, create menu item, and so on.
|
||||
To test your work in progress, you may save your plugin under $HOME/.gramps/plugins directory and it should be found and imported on startup. The correctly written plugin will register itself with Gramps, create menu item, and so on.
|
||||
|
||||
If you are happy with your plugin and would like to contribute your code back to the GRAMPS project, you are very welcome to do so by contacting us at gramps-devel@lists.sourceforge.net
|
||||
If you are happy with your plugin and would like to contribute your code back to the Gramps project, you are very welcome to do so by contacting us at gramps-devel@lists.sourceforge.net
|
||||
|
||||
|
||||
==Database - GRAMPS file formats==
|
||||
==Database - Gramps file formats==
|
||||
|
||||
24. What is the maximum database size (bytes) GRAMPS can handle?
|
||||
24. What is the maximum database size (bytes) Gramps can handle?
|
||||
|
||||
GRAMPS has no hard limits on the size of a database that it can handle. Starting with 2.0.0 release, GRAMPS no longer loads all data into memory, which allows it to work with a much larger database than before. In reality, however, there are practical limits. The main limiting factors are the available memory on the system and the cache size used for BSDDB database access. With common memory sizes these days, GRAMPS should have no problem using databases with tens of thousands of people.
|
||||
Gramps has no hard limits on the size of a database that it can handle. Starting with 2.0.0 release, Gramps no longer loads all data into memory, which allows it to work with a much larger database than before. In reality, however, there are practical limits. The main limiting factors are the available memory on the system and the cache size used for BSDDB database access. With common memory sizes these days, Gramps should have no problem using databases with tens of thousands of people.
|
||||
|
||||
|
||||
25. How many people can GRAMPS database handle?
|
||||
25. How many people can Gramps database handle?
|
||||
|
||||
See above. Again, this is dependent on how much memory you have, see [GRAMPS Performance] on wiki.
|
||||
See above. Again, this is dependent on how much memory you have, see [Gramps Performance] on wiki.
|
||||
|
||||
|
||||
26. My database is really big. Is there a way around loading all the data into memory?
|
||||
|
||||
Starting with 2.0.0 release, GRAMPS no longer loads all data into memory, which allows it to work with a much larger database than before. The fileformat used is .grdb which means gramps database.
|
||||
Starting with 2.0.0 release, Gramps no longer loads all data into memory, which allows it to work with a much larger database than before. The fileformat used is .grdb which means gramps database.
|
||||
|
||||
|
||||
27. Can I run GRAMPS from a database on a NFS share?
|
||||
27. Can I run Gramps from a database on a NFS share?
|
||||
|
||||
Yes you can.
|
||||
|
||||
|
||||
28. Why is the database format not portable?
|
||||
|
||||
The biggest issue with GRAMPS portability lies with 'transactions'. With
|
||||
GRAMPS 2.2, we added support for atomic transactions to protect data.
|
||||
The biggest issue with Gramps portability lies with 'transactions'. With
|
||||
Gramps 2.2, we added support for atomic transactions to protect data.
|
||||
With atomic transactions, multiple changes are committed as a single
|
||||
unit. Either all the changes make it, or none of the changes make it.
|
||||
You are never left in a situation with a partial set of changes. A side
|
||||
@@ -341,41 +334,25 @@ If the above explanations seem vague, please follow this link:
|
||||
http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
||||
|
||||
|
||||
30. GRAMPS should be a .... type of application
|
||||
30. Gramps should be a .... type of application
|
||||
|
||||
The surest way to see it happen is to get it done by yourself. Since GRAMPS is free/open source, nobody prevents you from taking all of the code and continuing its development in whatever direction you see fit. In doing so, you may consider giving your new project another name to avoid confusion with the continuing GRAMPS development. If you would like the GRAMPS project to provide advice, expertise, filters, etc., we will gladly cooperate with your new project, to ensure compatibility or import/export options to your new format of a project.
|
||||
The surest way to see it happen is to get it done by yourself. Since Gramps is free/open source, nobody prevents you from taking all of the code and continuing its development in whatever direction you see fit. In doing so, you may consider giving your new project another name to avoid confusion with the continuing Gramps development. If you would like the Gramps project to provide advice, expertise, filters, etc., we will gladly cooperate with your new project, to ensure compatibility or import/export options to your new format of a project.
|
||||
|
||||
If, however, you would like the GRAMPS project to adopt your strategy, you would need to convince GRAMPS developers that your strategy is good for GRAMPS and superior to the present development strategy.
|
||||
If, however, you would like the Gramps project to adopt your strategy, you would need to convince Gramps developers that your strategy is good for Gramps and superior to the present development strategy.
|
||||
|
||||
HINT: if GRAMPS developers are still not convinced after about three
|
||||
HINT: if Gramps developers are still not convinced after about three
|
||||
messages sent to gramps-devel, maybe you are better off on your own
|
||||
rather than with a company of retards who can't fully realize the
|
||||
potential of your great idea :-)
|
||||
|
||||
|
||||
==GRAMPS Webhosting ==
|
||||
==Gramps Webhosting ==
|
||||
|
||||
31. How can I publish web sites generated by GRAMPS?
|
||||
31. How can I publish web sites generated by Gramps?
|
||||
|
||||
Since GRAMPS generates HTML pages, you can upload the pages to your personal web site. If you do not have a personal web site, and still wish to have your pages available on the internet, the GRAMPS project can provide space for you at the http://library.gramps-project.org, see the [webhosting article] on wiki.
|
||||
Since Gramps generates HTML pages, you can upload the pages to your personal web site. If you do not have a personal web site, and still wish to have your pages available on the internet.
|
||||
|
||||
|
||||
32. How do I submit my pages to the GRAMPS library site (http://library.gramps-project.org)?
|
||||
|
||||
If you wish to submit pages to the GRAMPS library site, you will need to contact the GRAMPS project, typically by sending a message to the gramps-users mailing list. You will then be given a username and password that will allow you to upload your files to the site. After you upload the files (in a gzip'ed tar file), the GRAMPS project will install the pages for you on the site.
|
||||
|
||||
|
||||
33. After I upload my Family Web Page to library.gramps-project.org, is the password used for write privileges only or read privileges?
|
||||
|
||||
In order to prevent abuse of the library.gramsp-project.org site, the password given allows uploads only. If you wish to have a username and password combination to restrict read access to your pages, you will need to contact the GRAMPS project, and we could set this up for you. However, the read and write accounts will be separate accounts.
|
||||
|
||||
|
||||
34. Do I view the Family Web Page with a url into my browser? Or through a link on a list of Family Web Pages on the GRAMPS-Project.org site?
|
||||
|
||||
The main page on the library.gramps-project.org site will contain an index of the available family sites. However, there will be a unique URL for each site as well.
|
||||
|
||||
|
||||
|
||||
**** End of GRAMPS Frequently Asked Questions ****
|
||||
**** End of Gramps Frequently Asked Questions ****
|
||||
|
||||
$Id$
|
||||
|
2
Gramps.py
Normal file → Executable file
2
Gramps.py
Normal file → Executable file
@@ -1,4 +1,4 @@
|
||||
#! /usr/bin/env python
|
||||
#! /usr/bin/env python3
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
|
72
INSTALL
72
INSTALL
@@ -1,50 +1,55 @@
|
||||
$Id$
|
||||
|
||||
This file contains some useful details on the installation from source code
|
||||
for GRAMPS. It does not cover installation of a pre-built binary package.
|
||||
for Gramps. It does not cover installation of a pre-built binary package.
|
||||
For that use your package manager, the rest is already done by the packager.
|
||||
|
||||
Uninstall old version
|
||||
---------------------
|
||||
If you do a source install in the same place of an existing install,
|
||||
If you do a source install in the same place as an existing install,
|
||||
you need to remove the old version first. You can delete the old
|
||||
version by deleting the installed directories (for example,
|
||||
/usr/share/gramps
|
||||
version by deleting the installed directories. For example, if your installation prefix is /usr/local, remove the following:
|
||||
/usr/local/share/gramps
|
||||
/usr/local/lib/pythonx.x/site-packages/gramps
|
||||
If you installed with a package manager you might instead need to remove
|
||||
/usr/local/lib/pythonx.x/dist-packages/gramps
|
||||
/usr/lib/pythonx.x/site-packages/gramps
|
||||
/usr/lib/pythonx.x/dist-packages/gramps
|
||||
where pythonx.x is python2.7 or whatever version you installed gramps with.
|
||||
Also remove the gramps .egg files that are installed along with the gramps
|
||||
directory.
|
||||
|
||||
replacing pythonx.x with the python version you used, e.g. python3.4.
|
||||
Also remove any gramps .egg files that are installed along with the gramps
|
||||
directory and the file /usr/local/bin/gramps.
|
||||
|
||||
|
||||
If you don't know the list of all files that Gramps installed, you can
|
||||
reinstall it with the --record option, and take a look at the list this
|
||||
produces (so python setup.py install --record grampsfiles.txt
|
||||
|
||||
GRAMPS is a python application, so loading happens on reading the
|
||||
Gramps is a python application, so loading happens on reading the
|
||||
files, meaning that files of a previous version that are no longer
|
||||
present in the new version can still be loaded, making the new install
|
||||
unstable!
|
||||
|
||||
distutils install
|
||||
-----------------
|
||||
We do not check all dependencies of Gramps, see README for a
|
||||
list of all required and optional dependencies. On running Gramps, errors will
|
||||
be returned if dependencies are missing.
|
||||
|
||||
If you are building from released tarball, you should be able to just
|
||||
run
|
||||
We do not check all dependencies of Gramps, see README for a list of
|
||||
all required and optional dependencies. Missing dependencies will
|
||||
result in runtime errors.
|
||||
|
||||
To build and install, whether from a tarball or git repo:
|
||||
python setup.py build
|
||||
python setup.py install
|
||||
sudo python setup.py install
|
||||
|
||||
where the last must be done as root. You can work with Gramps if you only build
|
||||
it by pointing the PYTHONPATH to the build directory, but things like MIME type
|
||||
and desktop entries will not be created then.
|
||||
You can avoid using sudo for the install step by specifying a prefix to which you have write priviledge. The default is /usr/local, which is usually owned by root. You can learn of more options with
|
||||
python setup.py --help
|
||||
|
||||
One can use gramps from the command line without installing it by
|
||||
setting the following environment variables, but that won't provide
|
||||
things like MIME type and desktop entries.
|
||||
|
||||
export PYTHONPATH="/top/grampsdir/gramps:$PYTHONPATH"
|
||||
export GRAMPS_RESOURCES="/top/grampsdir"
|
||||
|
||||
See below for ways to invoke Gramps.
|
||||
|
||||
Typical install directories in linux (ubuntu) are:
|
||||
* /usr/local/lib/python2.7/dist-packages/gramps/ : the gramps python module
|
||||
* /usr/local/lib/python3.4/dist-packages/gramps/ : the gramps python module
|
||||
* /usr/local/share/mime-info : mime info so gramps opens files automatically
|
||||
* /usr/local/share/icons/gnome : our icons
|
||||
* /usr/local/share/doc/gramps : documentation, also example .gramps and .gedcom
|
||||
@@ -57,18 +62,18 @@ Typical install directories in linux (ubuntu) are:
|
||||
Running Gramps
|
||||
--------------
|
||||
Gramps is python only, so no compilation is needed, you can even run gramps
|
||||
from the source directory.
|
||||
from the source directory.
|
||||
|
||||
a) You installed Gramps, then you can run it with the command
|
||||
|
||||
gramps
|
||||
gramps
|
||||
|
||||
b) You installed Gramps, and want to start it from the PYTHONPATH. In this
|
||||
case use the command:
|
||||
|
||||
python -c 'from gramps.grampsapp import main; main()'
|
||||
|
||||
The executable 'gramps' in /usr/local/bin or /usr/bin from a) does
|
||||
The executable 'gramps' in /usr/local/bin or /usr/bin from a) does
|
||||
this for you.
|
||||
|
||||
b) You downloaded the Gramps source code to a directory, and want to run it.
|
||||
@@ -76,22 +81,16 @@ from the source directory.
|
||||
|
||||
python Gramps.py
|
||||
|
||||
See gramps/gen/const.py how Gramps finds his resource directories in case
|
||||
See gramps/gen/const.py how Gramps finds its resource directories in case
|
||||
you encounter problems.
|
||||
|
||||
Custom directory installation
|
||||
-------------------------------------
|
||||
If you would like to install GRAMPS without being root, or in an
|
||||
If you would like to install Gramps without being root, or in an
|
||||
alternative location on windows, supply the --root argument to setup.py
|
||||
|
||||
For example:
|
||||
python setup.py install --root ~/test
|
||||
or
|
||||
python setup.py install --root ~/test --enable-packager-mode
|
||||
|
||||
The last option, --enable-packager-mode, is needed if you want to disable
|
||||
execution of post-install mime processing. If you don't have root/admin
|
||||
access, this will be needed
|
||||
|
||||
Packager's issues
|
||||
------------------
|
||||
@@ -100,3 +99,8 @@ To create a source distribution run:
|
||||
|
||||
python setup.py sdist
|
||||
|
||||
If Gramps is built outside of the source tree in a temporary location (e.g. when
|
||||
packaging for a distribution), the --resourcepath option can be used to specify
|
||||
the path to the installed location of the Gramps resources (e.g. /usr/share):
|
||||
|
||||
python setup.py install --resourcepath=/usr/share
|
||||
|
202
NEWS
202
NEWS
@@ -1,3 +1,201 @@
|
||||
2015-10-12
|
||||
Version 4.2.1,
|
||||
* Support for Retina and HiDPI Display, added 24px icons
|
||||
* Fix verification tool with "Estimate missing or inexact dates"
|
||||
* Fix missing link in hourglass graph report
|
||||
* Sort custom place types in editors
|
||||
* Allow Easter calculation with python3
|
||||
* Fix crash on Descendants-detailed report
|
||||
* FanChartDescendants View should at least have 2 generations
|
||||
* Allow hyphenated gramps-id in Graphviz reports
|
||||
* Complete Individual Report fails to run
|
||||
* Fix broken wiki help links
|
||||
* Set TextOption widget to expand vertically
|
||||
* Unused Object Dialog box too small
|
||||
* Short cut keys does not work in 'Change Event Types' dialog
|
||||
* Update some Tips of the day
|
||||
* Error when extracting place names
|
||||
* Custom filters for note text repaired
|
||||
* Fix Pedigreeview crash when selecting Compact view
|
||||
* Set "visable_window" in GtkEventBox to fix transparency
|
||||
* Faster scrolling
|
||||
** cache database access for column values
|
||||
** cache do_get_path lookups
|
||||
** speed up load access on treeviews with no filters
|
||||
** new LRU size of 1k (was 250)
|
||||
** use cache in do_get_path from siblings
|
||||
* Avoid using person-centric date matching for places
|
||||
* Use place title as default name in GEDCOM import
|
||||
* Ensure place names are not empty after upgrade
|
||||
* Fix proxy to include all referenced place objects
|
||||
* Fix bug that prevented any addons being loaded onto the Mac version
|
||||
* Remove copy button from family tree manager
|
||||
* Consistency for name fields on Person Editor
|
||||
* [Geography] Place.set_name(name) requires a PlaceName()
|
||||
* [Geography] Fix and improvements on place selection
|
||||
* Limit problems with existing selection in media reference editor
|
||||
* Stability fixes on Mac port
|
||||
* Mac port localization crash with non-standard locale (e.g. en_IT).
|
||||
* Fix color on history
|
||||
* Fix countries selector for holidays
|
||||
* Fix missing markups into textual reports
|
||||
* All sidebars with Types now show custom types in combo list
|
||||
* [New] Added Places to CSV import/export
|
||||
* Some fixes on installer (setup.py)
|
||||
* Various improvements on gen.plug.utils
|
||||
* Fix graph reports [in Greek locale]
|
||||
* New date handler for Hungarian locale
|
||||
* Updated translations : cs, de, el, en_GB, fi, fr, hu, is, sv
|
||||
|
||||
2015-08-02
|
||||
Version 4.2.0,
|
||||
* New date and language fields on place name
|
||||
* Review on GtkBuilder, fix some Gtk3 warnings and move from deprecated methods
|
||||
* Change icons and buttons handling methods
|
||||
* Enhanced Place Editor and new Place Name editor
|
||||
* New widget: use own interactive-search
|
||||
* Ability to import kml data into Geography views
|
||||
* Enhancement for removing multiple selected items from Views (action group)
|
||||
* Add drag support on more Views, Selectors and Editors
|
||||
* Add right-click "Copy all" to ListModel and all QuickTables
|
||||
* Review Alternate Place handling and edition
|
||||
* New 'Place' configuration keys set by user (settings)
|
||||
* New filter rule: is enclosed by
|
||||
* Consistency on Privacy option for reports
|
||||
* Consistency on "Name-format" options for reports
|
||||
* Add DeferredFilter class (a subclass of GenericFilter)
|
||||
* New textual Report: Links on Notes
|
||||
* Fix alphabetic index and toc bug in books
|
||||
* Enhancements on Style Editor
|
||||
* Enhancements on End Notes into textual reports
|
||||
* Changes on Individuals complete textual report
|
||||
* Changes on Ancestors Tree draw report: Include Siblings
|
||||
* Add name-format option, and deferred translation on Records report
|
||||
* Add deferred translation on Timeline draw report
|
||||
* Enable attributes gramplet on Source and Citation Views
|
||||
* New place locations gramplet
|
||||
* Optimizations around index, Flat and TreeView models
|
||||
* Enhanced samples files
|
||||
* All importers return now an ImportInfo object
|
||||
* Experimental gwplus (geneweb) import file format support
|
||||
* Remove experimental HTML renderer view
|
||||
* New test scripts
|
||||
* New Date handler for Japanese
|
||||
* Review on Slovenian and Czech Date Handlers
|
||||
* Implement both "traditional" and "simplfied" Chinese (translations and dates)
|
||||
* Serbian review
|
||||
|
||||
2015-05-01
|
||||
Version 4.1.3, "Thou shalt not count to five", a maintenance release.
|
||||
* Fix db upgrade failure
|
||||
* GtkDialog mapped without a transient parent
|
||||
* [Gedcom} SUBN and SUBM record handling
|
||||
* [Gedcom] Import/export round trip causes lost information
|
||||
* [Gedcom] Entering a witness to an event such as marriage might be ignored
|
||||
* [Gedcom] Gramps can't import estim. date period exported by itself
|
||||
* [Gedcom] 1/4 and 1/2 ANSEL characters not supported on importing ANSEL
|
||||
* [Gedcom] Importing file containing multibyte UTF-8 characters fails
|
||||
* [Gedcom] Import fails for ANSI file under python 3
|
||||
* [Gedcom] Failure importing ANSEL encoded gedcom file.
|
||||
* [Gedcom] Characters ignored on a Gedcom encoded ANSI (cp1252 West Europe, USA)
|
||||
* [Gedcom] NameError in importer
|
||||
* [Gedcom] Event address is lost on import, i.e. disconnected from event
|
||||
* Crash on geneweb export with python3
|
||||
* GuiColorOption missing avail-changed event handler
|
||||
* Bad generation of [timeline report] ODT files since 4.0.0
|
||||
* Fix bad handle in explanation note for unknown event
|
||||
* Fix spurious generation of empty 'Alternative Name' in place.merge()
|
||||
* Support creating directories in various scenarios
|
||||
* Attempting to add a bookmark causes an error
|
||||
* Long series of "unhandled exception" popup boxes while doing a check & repair
|
||||
* Crash when trying to link existing place as an enclosing place using P0001 number
|
||||
* HTML view fails to load
|
||||
* Relationship Graph crashes
|
||||
* Python3 needs new_subpixbuf not subpixbuf
|
||||
* Regression: running gramps from crontab fails
|
||||
* tag_map is not initialized
|
||||
* Some labels now fit better on citations sidebar filter
|
||||
* Event columns in web narrative are too narrow
|
||||
* Problem by start program (launcher)
|
||||
* Translation string missing in Not Related tool for help and close button
|
||||
* Date format month/year is not well reported at editing time [in Italian]
|
||||
* Fix unknown gender relationships handler for the french locale
|
||||
* Fix a handle type bug on sidebar filter
|
||||
* Tidy up About dialog
|
||||
* Cleanup on some man files
|
||||
* Convert some remaining unicode literals
|
||||
* Fix mac menubar setting
|
||||
* Enable python3 to run po/update_po.py
|
||||
* Updated translations: cs, de, fr, is, nl
|
||||
|
||||
2015-02-28
|
||||
Version 4.1.2, "That's no ordinary rabbit", a maintenance release.
|
||||
* Error converting python2 utf-8 strings to python3 str when loading data from database
|
||||
* Removing a parent place from a place leaves a dangling reference
|
||||
* Error during checking the database
|
||||
* Stubborn blank space in database won't be removed, fix removing rows in flat list views
|
||||
* Database upgrade fails if default media path is not set
|
||||
* Error converting database after upgrade to Gramps 4.1.1
|
||||
* Error in a single place within the places section
|
||||
* Entries from the add-or-choose selector of Place/Source/Media/Note cannot be dragged
|
||||
* Enclosing places tab should work like other similar tabs, new place reference editor
|
||||
* Association editor refuses dropped persons
|
||||
* Error on opening twice an object from clipboard
|
||||
* Incorrect spacing in export assistant file chooser
|
||||
* New Event types are saved as a disordered list
|
||||
* Always display main participants
|
||||
* Place titles can now be generated on-the-fly by a place displayer, default is still to use the place title field
|
||||
* GEDCOM import of embedded notes attached to media does not work
|
||||
* Crash on Ancestry.com .ged import; consistent.
|
||||
* Errors handling owner/submitter information in GEDCOM files.
|
||||
Only import researcher from GEDCOM or XML if the family tree was originally empty.
|
||||
* GEDCOM export does not export media attached to citations.
|
||||
* The fanchart view crashes if max generation is set to 1 away.
|
||||
* Sidebar Filters do not match placetypes in new placeview, two new filter rules (HasTitle, HasData)
|
||||
* Fix bug when family has no parents
|
||||
* Fix bad handle in explanation note for unknown event
|
||||
* Some labels now fit better on citations sidebar filter
|
||||
* Views in Geography should not always use the last option set by the user
|
||||
* Request for keyboard-controlled zoom on Geography view
|
||||
* Error geography view - Displaying main menu
|
||||
* Configure screen needs a file selector to select directory for "offline mode" files
|
||||
* Filter panel on geography view displays improperly
|
||||
* Detailed descendant report crashes, bibliography (citations)
|
||||
* Can't disable box shadow in SVG descendant tree
|
||||
* Descendant tree graphical report, syntax error in svg output
|
||||
* Regression: Complete Individual report has partially-untranslated output
|
||||
* Events Page in Narrative Report not working
|
||||
* Gramps freeze after defining a report style with German cm values
|
||||
* Various problems with docgen.TextDoc.add_media_object
|
||||
* Report event attribute name is not translated
|
||||
* Records Gramplet uses wrong text
|
||||
* Closing detached gramplet causes python to crash
|
||||
* Cannot reduce size of gramplets detached from a gramplet bar
|
||||
* Gramplets don't fill window when detached from dashboard
|
||||
* ImageMetadata doesn't show metadata
|
||||
* typo on GLib call, used by an addon only
|
||||
* Fix error setting gramplet tab label
|
||||
* Check for active person in session log gramplet
|
||||
* Spurious spaces in CLI List Family Trees, tab delimited output.
|
||||
Print statements changed to assemble the whole line before output.
|
||||
* Gtk3 warning and custom undoableentry widget, see bugzilla_id 644927
|
||||
* Warnings: deprecated Gtk properties and errors loading theme icon.
|
||||
Fix: database manager dialog is inconsistent for older gtk+3 versions.
|
||||
Warnings: deprecated Gtk properties and errors loading theme icon.
|
||||
Fix: Error loading theme icon 'gtk-apply'
|
||||
* gramps fails to start with gtk+-3.13.3
|
||||
* Places in data.gramps are not in the new Place hierarchy
|
||||
* Upgrade the version of some dependencies for Mac OS and Windows OS.
|
||||
* Keywords entry in gramps.desktop does not work
|
||||
* 'Available Gramps Updates for Addons' window not on top
|
||||
* Some text not translatable in context menu fancharts
|
||||
* Fix for Unit test
|
||||
* date inflections in _datehandler.py, update for Ukrainian, Russian, Croatian
|
||||
* Better support for Serbian and Turkish locales
|
||||
* New translation: Icelandic
|
||||
* Re-enable Turkish support after a major review. Thank you Uğur.
|
||||
* Updated translations: cs, de, eo, fi, fr, hr, hu, it, nb, nn, ru, sk, sr, sv, uk, zh_CN
|
||||
|
||||
2014-10-24
|
||||
Version 4.1.1, "MachineThatGoes...Ping!", a maintenance release.
|
||||
* Fix custom place types in the place editor
|
||||
@@ -249,8 +447,8 @@ Version 3.4.3 of Gramps! "Whenever life gets you down, Mrs. Brown", a maintenanc
|
||||
* GEDCOM Repositories not imported correctly from FTM for Windows and Heredis.
|
||||
* Fixes to a number of errors in filtering notes.
|
||||
* Fix some errors in determining whether someone is alive (e.g. for filtering out alive people).
|
||||
* Make availability of GraphViz settings depend on output format
|
||||
* Improve the descriptions and tooltip for GraphViz aspect ratio option
|
||||
* Make availability of Graphviz settings depend on output format
|
||||
* Improve the descriptions and tooltip for Graphviz aspect ratio option
|
||||
* Fixed update problems with citation bottombar gramplet (bug #6336)
|
||||
* Fixed Open Document Text output in Book report (bug #6457)
|
||||
* A number of changes to Narrative Web:
|
||||
|
59
README
59
README
@@ -1,24 +1,21 @@
|
||||
$Id$
|
||||
|
||||
Please read the COPYING file first.
|
||||
|
||||
If building from source, also read the INSTALL file (at least through the
|
||||
"SUPER-SHORT VERSION") before going further.
|
||||
Please read the INSTALL file if you intend to build from source.
|
||||
|
||||
Requirements
|
||||
--------------------------------
|
||||
The following packages *MUST* be installed in order for Gramps to work:
|
||||
Python 2.7 or greater, Python 3.2 or greater (or both python versions)
|
||||
GTK 3.0 or greater
|
||||
pygobject 3.3.2 or greater
|
||||
Python 3.2 or greater
|
||||
GTK 3.10 or greater
|
||||
pygobject 3.12 or greater
|
||||
cairo, pango, pangocairo with introspection bindings (the gi packages)
|
||||
librsvg2 (svg icon view)
|
||||
xdg-utils
|
||||
bsddb3 is required for Python 3.2 (not python 2.7)
|
||||
bsddb3
|
||||
|
||||
The following package is needed for full translation of the interface
|
||||
to your language:
|
||||
language-pack-gnome-xx
|
||||
language-pack-gnome-xx
|
||||
Translation of GTK elements to your language, with
|
||||
xx your language code; e.g. for Dutch you need
|
||||
language-pack-gnome-nl. The translation of the
|
||||
@@ -27,21 +24,13 @@ to your language:
|
||||
|
||||
The following packages are *STRONGLY RECOMMENDED* to be installed:
|
||||
|
||||
osmgpsmap Used to show maps in the geography view.
|
||||
osmgpsmap Used to show maps in the geography view.
|
||||
It may be osmgpsmap, osm-gps-map, or python-osmgpsmap,
|
||||
but the Python bindings for this must also be present.
|
||||
Without this the GeoView will not be active, see
|
||||
http://gramps-project.org/wiki/index.php?title=Gramps_4.0_Wiki_Manual_-_Main_Window#Geography_Category
|
||||
!! PACKAGERS: unfortunately, at the moment (March 2013),
|
||||
the patches which gramps 4.0 needs osm-gps-map to have
|
||||
are not yet released (as a new osm-gps-map version). The
|
||||
osm-gps-map sources must be dated 6 February 2013 (or
|
||||
later) to have the necessary patches. You may obtain
|
||||
it from: http://nzjrs.github.com/osm-gps-map/ or else
|
||||
http://sourceforge.net/projects/gramps/files/Dependencies
|
||||
(The necessary version seems to be 0.8 -- or later.)
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_4.2_Wiki_Manual_-_Categories#Geography_Category
|
||||
|
||||
GraphViz Enable creation of graphs using GraphViz engine.
|
||||
Graphviz Enable creation of graphs using Graphviz engine.
|
||||
Without this, three reports cannot be run.
|
||||
Obtain it from: http://www.graphviz.org
|
||||
|
||||
@@ -53,23 +42,25 @@ The following packages are *STRONGLY RECOMMENDED* to be installed:
|
||||
sorting is done through built-in libraries. PyICU is
|
||||
fairly widely available through the package managers of
|
||||
distributions. See http://pyicu.osafoundation.org/
|
||||
(These are Python bindings for the ICU package.)
|
||||
(These are Python bindings for the ICU package.
|
||||
https://pypi.python.org/pypi/PyICU/)
|
||||
|
||||
The following packages are optional
|
||||
|
||||
gtkspell Enable spell checking in the notes. Gtkspell depends on
|
||||
gtkspell Enable spell checking in the notes. Gtkspell depends on
|
||||
enchant. A version of gtkspell with gobject introspection
|
||||
is needed, so minimally version 3.0.0
|
||||
|
||||
rcs The GNU Revision Control System (RCS) can be used to manage
|
||||
multiple revisions of your family trees. See info at
|
||||
http://www.gramps-project.org/wiki/index.php?title=Gramps_4.0_Wiki_Manual_-_Manage_Family_Trees#Archiving_a_Family_Tree
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_4.2_Wiki_Manual_-_Manage_Family_Trees#Archiving_a_Family_Tree
|
||||
Only rcs is needed, NO python bindings are required
|
||||
|
||||
PIL Python Image Library is needed to crop
|
||||
images and also to convert non-JPG images to
|
||||
JPG so as to include them in LaTeX output.
|
||||
(For Python3 a different source may be needed.)
|
||||
(For Python3 a different source may be needed,
|
||||
python-imaging or python-pillow or python3-pillow)
|
||||
|
||||
GExiv2 Enables Gramps to manage Exif metadata embedded in your
|
||||
media. Gramps needs version 0.5 or greater.
|
||||
@@ -77,20 +68,12 @@ The following packages are optional
|
||||
|
||||
ttf-freefont More font support in the reports
|
||||
|
||||
gir-webkit GObject introspection data of WebKit is required for the
|
||||
hidden view 'Htmlview', which allows websites to be
|
||||
opened in Gramps. Users can unhide the view in the
|
||||
plugin manager. A html renderer must be installed to
|
||||
use the view.
|
||||
!! PACKAGERS, Test if on your distribution
|
||||
webkit and Gramps is stable. If you obtain crashes, patch
|
||||
src/plugins/view/htmlrenderer.py and
|
||||
src/plugins/view/geoview.gpr.py, so as to remove:
|
||||
from gi.repository import WebKit as webkit
|
||||
gir-webkit Required for the (user-downloadable) HtmlView plugin
|
||||
|
||||
goocanvas2:
|
||||
Required for the (user-downloadable) Graphview plugin
|
||||
goocanvas2 Required for the (user-downloadable) GraphView plugin
|
||||
|
||||
No longer needed in 4.1:
|
||||
?
|
||||
No longer needed in 4.0:
|
||||
pygoocanvas, pygtk, pyexiv2
|
||||
No longer needed in 3.3:
|
||||
@@ -98,12 +81,12 @@ No longer needed in 3.3:
|
||||
No longer needed in 3.2:
|
||||
python glade bindings
|
||||
No longer needed in 3.1:
|
||||
yelp Gnome help browser. At the moment no help is shipped
|
||||
yelp Gnome help browser. No offline help is shipped see Gramps website for User manual
|
||||
|
||||
|
||||
Documentation
|
||||
---------------------------------
|
||||
The User Manual is now maintained on the gramps website,
|
||||
The User Manual is maintained on the Gramps website,
|
||||
http://www.gramps-project.org/wiki/index.php?title=User_manual
|
||||
|
||||
--------------------------------
|
||||
|
@@ -1,36 +1,13 @@
|
||||
$Id$
|
||||
Major enhancements in Gramps 4.2.0:
|
||||
|
||||
UNSTABLE Gramps 4.0.0 Beta2 release.
|
||||
* GEP 36: GEPS 036: Extended Alternative Place Name Handling:
|
||||
https://gramps-project.org/wiki/index.php?title=GEPS_036:_Extended_Alternative_Place_Name_Handling
|
||||
|
||||
This is a technology preview to allow distribution packagers (and plugin
|
||||
writers) to update their scripts (and plugins). This release is not
|
||||
production ready, so only use it for testing!
|
||||
* GEP interactive search: own interactive-search box.
|
||||
|
||||
It is recommended that Gramps 4.0.0 be used with python 2.7 since many
|
||||
dependent packages do not yet have python 3 versions. A determined person
|
||||
can probably download their sources and build them, however.
|
||||
|
||||
The dependencies for Gramps 4.0.0 are _completely_ different than 3.4 due
|
||||
to the switch to GObject introspection, and the removal of autotools. So
|
||||
only install 4.0.0 if you are certain you can obtain the dependencies,
|
||||
see README and INSTALL.
|
||||
|
||||
For linux, in Ubuntu 12.10 you can install 4.0.0, but you will need to
|
||||
compile and install osmgpsmap manually to have the maps working (see
|
||||
http://www.gramps-project.org/wiki/index.php?title=GEPS_029:_GTK3-GObject_introspection_Conversion#OsmGpsMap_for_Geography )
|
||||
|
||||
|
||||
Major enhancements in Gramps 4.0.0:
|
||||
|
||||
* GEP 8: code reorganization: http://www.gramps-project.org/wiki/index.php?title=GEPS_008:_File_Organization
|
||||
|
||||
* GEP 26: Replace make: http://www.gramps-project.org/wiki/index.php?title=GEPS_026:_Replace_%27make%27_for_Gramps_build
|
||||
|
||||
* GEP 29: Gtk 3 :http://www.gramps-project.org/wiki/index.php?title=GEPS_029:_GTK3-GObject_introspection_Conversion
|
||||
|
||||
* GEP 31: Python 3 support: http://www.gramps-project.org/wiki/index.php?title=GEPS_031:_Python_3_support
|
||||
* Speedup on Tree and Flat Views
|
||||
|
||||
More info in the manual
|
||||
http://www.gramps-project.org/wiki/index.php?title=Gramps_4.0_Wiki_Manual_-_What%27s_new%3F
|
||||
http://www.gramps-project.org/wiki/index.php?title=Gramps_4.2_Wiki_Manual_-_What%27s_new%3F
|
||||
|
||||
Everybody is invited to update the manual to make it current!
|
||||
|
@@ -1,142 +1,142 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Id$ -->
|
||||
<authors xmlns:html="http://www.w3.org/1999/xhtml">
|
||||
<author uid="rshura" title="author">
|
||||
<author title="author">
|
||||
Alex Roitman <<html:a href="mailto:shura@gramps-project.org">shura@gramps-project.org</html:a>>
|
||||
</author>
|
||||
<author uid="asleinius" title="contributor">
|
||||
<author title="contributor">
|
||||
Arturas Sleinius <<html:a href="mailto:asleinius@users.sourceforge.net">asleinius@users.sourceforge.net</html:a>>
|
||||
</author>
|
||||
<author uid="bmcage" title="author">
|
||||
<author title="author">
|
||||
Benny Malengier <<html:a href="mailto:benny.malengier@gramps-project.org">benny.malengier@gramps-project.org</html:a>>
|
||||
</author>
|
||||
<author uid="borilg" title="contributor">
|
||||
<author title="contributor">
|
||||
Boril Gourinov <<html:a href="mailto:boril.gourinov@gmail.com">boril.gourinov@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="pez4brian" title="author">
|
||||
<author title="author">
|
||||
Brian Matherly <<html:a href="mailto:brian@gramps-project.org">brian@gramps-project.org</html:a>>
|
||||
</author>
|
||||
<author uid="dallingham" title="author">
|
||||
<author title="author">
|
||||
Don Allingham <<html:a href="mailto:don@gramps-project.org">don@gramps-project.org</html:a>>
|
||||
</author>
|
||||
<author uid="dpeterso" title="author">
|
||||
<author title="author">
|
||||
Donald A. Peterson <<html:a href="mailto:"></html:a>>
|
||||
</author>
|
||||
<author uid="dsblank" title="author">
|
||||
<author title="author">
|
||||
Doug Blank <<html:a href="mailto:doug.blank@gmail.com">doug.blank@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="eerot" title="contributor">
|
||||
<author title="contributor">
|
||||
Eero Tamminen <<html:a href="mailto:eerot@users.sourceforge.net">eerot@users.sourceforge.net</html:a>>
|
||||
</author>
|
||||
<author uid="erikdrgm" title="contributor">
|
||||
<author title="contributor">
|
||||
Erik De Richter <<html:a href="mailto:erikdrgm@users.sourceforge.net">erikdrgm@users.sourceforge.net</html:a>>
|
||||
</author>
|
||||
<author uid="espenbe" title="contributor">
|
||||
<author title="contributor">
|
||||
Espen Berg <<html:a href="mailto:espenbe@gmail.com">espenbe@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="gburto01" title="contributor">
|
||||
<author title="contributor">
|
||||
Gary Burton <<html:a href="mailto:gary.burton@zen.co.uk">gary.burton@zen.co.uk</html:a>>
|
||||
</author>
|
||||
<author uid="gbritton" title="contributor">
|
||||
Gerald Britton <<html:a href="mailto:gerald.britton@gmail.com">gerald.britton@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="jgsack" title="contributor">
|
||||
<author title="contributor">
|
||||
James G Sack <<html:a href="mailto:jgsack@san.rr.com">jgsack@san.rr.com</html:a>>
|
||||
</author>
|
||||
<author uid="has_no_svn_access" title="contributor">
|
||||
<author title="contributor">
|
||||
Janne Kovesjärvi <<html:a href="mailto:janne.kovesjarvi@gmail.com">janne.kovesjarvi@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="has_no_svn_access" title="contributor">
|
||||
<author title="contributor">
|
||||
Jason Simanek <<html:a href="mailto:jsimanek@gmail.com">jsimanek@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="romjerome" title="contributor">
|
||||
<author title="contributor">
|
||||
Jérôme Rapinat <<html:a href="mailto:romjerome@yahoo.fr">romjerome@yahoo.fr</html:a>>
|
||||
</author>
|
||||
<author uid="jcreus" title="contributor">
|
||||
<author title="contributor">
|
||||
Joan Creus <<html:a href="mailto:joan.creus@gmail.com">joan.creus@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="josip" title="contributor">
|
||||
<author title="contributor">
|
||||
Josip Pisoj <<html:a href="mailto:josip@pisoj.com">josip@pisoj.com</html:a>>
|
||||
</author>
|
||||
<author uid="jsanchez" title="contributor">
|
||||
<author title="contributor">
|
||||
Julio Sánchez <<html:a href="mailto:julio.sanchez@gmail.com">julio.sanchez@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="keesb" title="contributor">
|
||||
<author title="contributor">
|
||||
Kees Bakker <<html:a href="mailto:kees.bakker@xs4all.nl">kees.bakker@xs4all.nl</html:a>>
|
||||
</author>
|
||||
<author uid="kdorichev" title="contributor">
|
||||
<author title="contributor">
|
||||
Konstantin Dorichev <<html:a href="mailto:kdorichev@gmail.com">kdorichev@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="has_no_svn_access" title="contributor">
|
||||
<author title="contributor">
|
||||
Lubo Vasko <<html:a href="mailto:pgval@inMail.sk">pgval@inMail.sk</html:a>>
|
||||
</author>
|
||||
<author uid="ltosky" title="contributor">
|
||||
<author title="contributor">
|
||||
Luigi Toscano <<html:a href="mailto:luigi.toscano@tiscali.it">luigi.toscano@tiscali.it</html:a>>
|
||||
</author>
|
||||
<author uid="has_no_svn_access" title="contributor">
|
||||
<author title="contributor">
|
||||
Luiz Gonzaga dos Santos Filho <<html:a href="mailto:lfilho@gmail.com">lfilho@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="has_no_svn_access" title="contributor">
|
||||
<author title="contributor">
|
||||
Łukasz Rymarczyk <<html:a href="mailto:yenidai@poczta.onet.pl">yenidai@poczta.onet.pl</html:a>>
|
||||
</author>
|
||||
<author uid="m_d_n" title="contributor">
|
||||
<author title="contributor">
|
||||
Michiel Nauta <<html:a href="mailto:m.d.nauta@hetnet.nl">m.d.nauta@hetnet.nl</html:a>>
|
||||
</author>
|
||||
<author uid="leonhaeuser" title="contributor">
|
||||
<author title="contributor">
|
||||
Mirko Leonhäuser <<html:a href="mailto:mirko@leonhaeuser.de">mirko@leonhaeuser.de</html:a>>
|
||||
</author>
|
||||
<author uid="has_no_svn_access" title="contributor">
|
||||
<author title="contributor">
|
||||
Morten Bo Johansen <<html:a href="mailto:mbj@spamcop.net">mbj@spamcop.net</html:a>>
|
||||
</author>
|
||||
<author uid="loshawlos" title="author">
|
||||
<author title="author">
|
||||
Martin Hawlisch <<html:a href="mailto:martin.hawlisch@gmx.de">martin.hawlisch@gmx.de</html:a>>
|
||||
</author>
|
||||
<author uid="nick-h" title="contributor">
|
||||
<author title="contributor">
|
||||
Nick Hall <<html:a href="mailto:nick__hall@hotmail.com">nick__hall@hotmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="ldnp" title="contributor">
|
||||
<author title="contributor">
|
||||
Peter Landgren <<html:a href="mailto:peter.talken@telia.com">peter.talken@telia.com</html:a>>
|
||||
</author>
|
||||
<author uid="acraphae" title="contributor">
|
||||
<author title="contributor">
|
||||
Raphael Ackermann <<html:a href="mailto:raphael.ackermann@gmail.com">raphael.ackermann@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="hippy" title="author">
|
||||
<author title="author">
|
||||
Richard Taylor <<html:a href="mailto:rjt-gramps@thegrindstone.me.uk">rjt-gramps@thegrindstone.me.uk</html:a>>
|
||||
</author>
|
||||
<author uid="noirauds" title="contributor">
|
||||
<author title="contributor">
|
||||
Serge Noiraud <<html:a href="mailto:Serge.Noiraud@free.fr">Serge.Noiraud@free.fr</html:a>>
|
||||
</author>
|
||||
<author uid="has_no_svn_access" title="contributor">
|
||||
<author title="contributor">
|
||||
Sigmund Lorentsen <<html:a href="mailto:sigmund.lorentsen@tele2.no">sigmund.lorentsen@tele2.no</html:a>>
|
||||
</author>
|
||||
<author uid="betula" title="contributor">
|
||||
<author title="contributor">
|
||||
Stefan Bjork <<html:a href="mailto:betula@users.sourceforge.net">betula@users.sourceforge.net</html:a>>
|
||||
</author>
|
||||
<author uid="s_charette" title="contributor">
|
||||
<author title="contributor">
|
||||
Stéphane Charette <<html:a href="mailto:stephanecharette@gmail.com">stephanecharette@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="twaugh" title="author">
|
||||
<author title="author">
|
||||
Tim Waugh <<html:a href="mailto:twaugh@redhat.com">twaugh@redhat.com</html:a>>
|
||||
</author>
|
||||
<author uid="vassilii" title="contributor">
|
||||
<author title="contributor">
|
||||
Vassilii Khachaturov <<html:a href="mailto:vassilii@tarunz.org">vassilii@tarunz.org</html:a>>
|
||||
</author>
|
||||
<author uid="matlas" title="contributor">
|
||||
<author title="contributor">
|
||||
Zdeněk Hataš <<html:a href="mailto:zdenek.hatas@gmail.com">zdenek.hatas@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="robhealey1" title="author">
|
||||
<author title="author">
|
||||
Rob G. Healey <<html:a href="mailto:robhealey1@gmail.com">robhealey1@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="zfoldvar" title="contributor">
|
||||
<author title="contributor">
|
||||
Zsolt Foldvari <<html:a href="mailto:zfoldvar@users.sourceforge.net">zfoldvar@users.sourceforge.net</html:a>>
|
||||
</author>
|
||||
<author uid="ander882" title="contributor">
|
||||
<author title="contributor">
|
||||
Craig J. Anderson <<html:a href="mailto:ander882@hotmail.com">ander882@hotmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="kulath" title="author">
|
||||
<author title="author">
|
||||
Tim G L Lyons <<html:a href="mailto:tim.g.lyons@gmail.com">tim.g.lyons@gmail.com</html:a>>
|
||||
</author>
|
||||
<author uid="jralls" title="author">
|
||||
<author title="author">
|
||||
John Ralls <<html:a href="mailto:jralls@ceridwen.us">jralls@ceridwen.us</html:a>>
|
||||
</author>
|
||||
</authors>
|
||||
|
@@ -248,6 +248,14 @@ table.primobjlist tr.BeginLetter td, table.primobjlist tr.BeginSurname td {
|
||||
td.ColumnLetter, td.ColumnRowLabel {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* bug #8213 testing by Stephane, 2014-12-6 */
|
||||
td.ColumnEvent, td.ColumnDate {
|
||||
white-space: nowrap;
|
||||
}
|
||||
td.ColumnPlace, td.ColumnDescription {
|
||||
width: 20%
|
||||
}
|
||||
/* end of customizations by Stephane */
|
||||
td.ColumnBirth, td.ColumnDeath, td.ColumnPartner, td.ColumnParents {
|
||||
font-size: 90%;
|
||||
}
|
||||
|
0
data/css/Web_Horizontal-Menus.css
Executable file → Normal file
0
data/css/Web_Horizontal-Menus.css
Executable file → Normal file
0
data/css/Web_Vertical-Menus.css
Executable file → Normal file
0
data/css/Web_Vertical-Menus.css
Executable file → Normal file
@@ -8,6 +8,6 @@ Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Categories=GTK;Office;
|
||||
_Keywords=Genealogy;Family History;Research;Family Tree;GEDCOM
|
||||
_Keywords=Genealogy;Family History;Research;Family Tree;GEDCOM;
|
||||
MimeType=application/x-gramps;application/x-gedcom;application/x-gramps-package;application/x-gramps-xml;
|
||||
Exec=gramps %F
|
||||
|
@@ -25,15 +25,15 @@
|
||||
-->
|
||||
|
||||
<!--
|
||||
This is the Document Type Definition file for v1.6.0
|
||||
This is the Document Type Definition file for v1.7.1
|
||||
of the GRAMPS XML genealogy data format.
|
||||
Please use the following formal public identifier to identify it:
|
||||
|
||||
"-//GRAMPS//DTD GRAMPS XML V1.6.0//EN"
|
||||
"-//GRAMPS//DTD GRAMPS XML V1.7.1//EN"
|
||||
|
||||
For example:
|
||||
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.6.0//EN"
|
||||
"http://gramps-project.org/xml/1.6.0/grampsxml.dtd"
|
||||
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.7.1//EN"
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd"
|
||||
[...]>
|
||||
-->
|
||||
|
||||
@@ -62,7 +62,7 @@ DATABASE
|
||||
<!ELEMENT database (header, name-formats?, tags?, events?, people?, families?,
|
||||
citations?, sources?, places?, objects?, repositories?,
|
||||
notes?, bookmarks?, namemaps?)>
|
||||
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.6.0/">
|
||||
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.7.1/">
|
||||
|
||||
|
||||
<!-- ************************************************************
|
||||
@@ -122,6 +122,7 @@ GENDER has values of M, F, or U.
|
||||
|
||||
<!ELEMENT name (first?, call?, surname*, suffix?, title?, nick?, familynick?, group?,
|
||||
(daterange|datespan|dateval|datestr)?, noteref*, citationref*)>
|
||||
<!-- (Unknown|Also Know As|Birth Name|Married Name|Other Name) -->
|
||||
<!ATTLIST name
|
||||
alt (0|1) #IMPLIED
|
||||
type CDATA #IMPLIED
|
||||
@@ -138,6 +139,8 @@ GENDER has values of M, F, or U.
|
||||
<!ELEMENT familynick (#PCDATA)>
|
||||
<!ELEMENT group (#PCDATA)>
|
||||
<!ELEMENT surname (#PCDATA)>
|
||||
<!-- (Unknown|Inherited|Given|Taken|Patronymic|Matronymic|Feudal|
|
||||
Pseudonym|Patrilineal|Matrilineal|Occupation|Location) -->
|
||||
<!ATTLIST surname
|
||||
prefix CDATA #IMPLIED
|
||||
prim (1|0) #IMPLIED
|
||||
@@ -196,12 +199,13 @@ FAMILY
|
||||
<!ELEMENT mother EMPTY>
|
||||
<!ATTLIST mother hlink IDREF #REQUIRED>
|
||||
|
||||
<!-- (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) -->
|
||||
<!ELEMENT childref (citationref*,noteref*)>
|
||||
<!ATTLIST childref
|
||||
hlink IDREF #REQUIRED
|
||||
priv (0|1) #IMPLIED
|
||||
mrel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
|
||||
frel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
|
||||
mrel CDATA #IMPLIED
|
||||
frel CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT type (#PCDATA)>
|
||||
@@ -248,20 +252,25 @@ PLACES
|
||||
|
||||
<!ELEMENT places (placeobj)*>
|
||||
|
||||
<!ELEMENT placeobj (ptitle?, code?, alt_name*, coord?, placeref*, location*,
|
||||
<!ELEMENT placeobj (ptitle?, pname+, code?, coord?, placeref*, location*,
|
||||
objref*, url*, noteref*, citationref*, tagref*)>
|
||||
<!ATTLIST placeobj
|
||||
id CDATA #IMPLIED
|
||||
handle ID #REQUIRED
|
||||
priv (0|1) #IMPLIED
|
||||
change CDATA #REQUIRED
|
||||
name CDATA #REQUIRED
|
||||
type CDATA #REQUIRED
|
||||
>
|
||||
|
||||
<!ELEMENT pname (daterange|datespan|dateval|datestr)?>
|
||||
|
||||
<!ATTLIST pname
|
||||
lang CDATA #IMPLIED
|
||||
value CDATA #REQUIRED
|
||||
>
|
||||
|
||||
<!ELEMENT ptitle (#PCDATA)>
|
||||
<!ELEMENT code (#PCDATA)>
|
||||
<!ELEMENT alt_name (#PCDATA)>
|
||||
|
||||
<!ELEMENT coord EMPTY>
|
||||
<!ATTLIST coord
|
||||
|
@@ -25,13 +25,13 @@
|
||||
-->
|
||||
|
||||
<!--
|
||||
This is the RELAX NG schema for the Gramps XML genealogy data format.
|
||||
This is the RELAX NG schema for the GRAMPS XML genealogy data format.
|
||||
-->
|
||||
|
||||
|
||||
<grammar
|
||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
|
||||
ns="http://gramps-project.org/xml/1.6.0/"
|
||||
ns="http://gramps-project.org/xml/1.7.1/"
|
||||
xmlns="http://relaxng.org/ns/structure/1.0">
|
||||
|
||||
<start><element name="database">
|
||||
@@ -210,16 +210,7 @@
|
||||
</define>
|
||||
|
||||
<define name="child-rel">
|
||||
<choice>
|
||||
<value>Birth</value>
|
||||
<value>Adopted</value>
|
||||
<value>Stepchild</value>
|
||||
<value>Sponsored</value>
|
||||
<value>Foster</value>
|
||||
<value>None</value>
|
||||
<value>Other</value>
|
||||
<value>Unknown</value>
|
||||
</choice>
|
||||
<text/>
|
||||
</define>
|
||||
|
||||
<define name="name-content">
|
||||
@@ -230,13 +221,7 @@
|
||||
<optional><attribute name="priv">
|
||||
<ref name="priv-content"/>
|
||||
</attribute></optional>
|
||||
<optional><attribute name="type"><choice>
|
||||
<value>Unknown</value>
|
||||
<value>Also Known As</value>
|
||||
<value>Birth Name</value>
|
||||
<value>Married Name</value>
|
||||
<value>Other Name</value>
|
||||
</choice></attribute></optional>
|
||||
<optional><attribute name="type"><text/></attribute></optional>
|
||||
<optional><attribute name="sort"><text/></attribute></optional>
|
||||
<optional><attribute name="display"><text/></attribute></optional>
|
||||
<optional><element name="first"><text/></element></optional>
|
||||
@@ -265,20 +250,7 @@
|
||||
<value>1</value>
|
||||
<value>0</value>
|
||||
</choice></attribute></optional>
|
||||
<optional><attribute name="derivation"><choice>
|
||||
<value>Unknown</value>
|
||||
<value>Inherited</value>
|
||||
<value>Given</value>
|
||||
<value>Taken</value>
|
||||
<value>Patronymic</value>
|
||||
<value>Matronymic</value>
|
||||
<value>Feudal</value>
|
||||
<value>Pseudonym</value>
|
||||
<value>Patrilineal</value>
|
||||
<value>Matrilineal</value>
|
||||
<value>Occupation</value>
|
||||
<value>Location</value>
|
||||
</choice></attribute></optional>
|
||||
<optional><attribute name="derivation"><text/></attribute></optional>
|
||||
<optional><attribute name="connector"><text/></attribute></optional>
|
||||
</define>
|
||||
|
||||
@@ -479,11 +451,12 @@
|
||||
|
||||
<define name="place-content">
|
||||
<ref name="primary-object"/>
|
||||
<attribute name="name"><text/></attribute>
|
||||
<attribute name="type"><text/></attribute>
|
||||
<optional><element name="ptitle"><text/></element></optional>
|
||||
<oneOrMore><element name="pname">
|
||||
<ref name="placename-content"/>
|
||||
</element></oneOrMore>
|
||||
<optional><element name="code"><text/></element></optional>
|
||||
<zeroOrMore><element name="alt_name"><text/></element></zeroOrMore>
|
||||
<optional><element name="coord">
|
||||
<attribute name="long"><text/></attribute>
|
||||
<attribute name="lat"><text/></attribute>
|
||||
@@ -772,6 +745,12 @@
|
||||
<text/>
|
||||
</define>
|
||||
|
||||
<define name="placename-content">
|
||||
<attribute name="value"><text/></attribute>
|
||||
<optional><attribute name="lang"><text/></attribute></optional>
|
||||
<optional><ref name="date-content"/></optional>
|
||||
</define>
|
||||
|
||||
<define name="placeref-content">
|
||||
<attribute name="hlink"><data type="IDREF"/></attribute>
|
||||
<optional><ref name="date-content"/></optional>
|
||||
|
@@ -41,16 +41,16 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, Gramps project'
|
||||
copyright = u'2015, Gramps project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.1'
|
||||
version = '4.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '4.1.0'
|
||||
release = '4.2.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -41,16 +41,16 @@ master_doc = 'cs'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, Gramps project'
|
||||
copyright = u'2015, Gramps project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.0'
|
||||
version = '4.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '4.0.0'
|
||||
release = '4.2.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -82,9 +82,9 @@ gramps(1) @VERSION@ gramps(1)
|
||||
|
||||
|
||||
**-i** , **--import=** *FILE*
|
||||
Import data from *FILE* . If you haven't specified a database then
|
||||
a temporary database is used; this is deleted when you exit
|
||||
gramps.
|
||||
Import data from *FILE* . If you haven't specified a database, then
|
||||
an empty database is created for you called Family Tree x
|
||||
(where x is an incrementing number).
|
||||
|
||||
When more than one input file is given, each has to be preceded
|
||||
by **-i** flag. The files are imported in the specified order, i.e.
|
||||
|
@@ -41,16 +41,16 @@ master_doc = 'fr'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, Gramps project'
|
||||
copyright = u'2015, Gramps project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.1'
|
||||
version = '4.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = 'trunk'
|
||||
release = '4.2.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -82,8 +82,8 @@ gramps(1) @VERSION@ gramps(1)
|
||||
|
||||
**-i** , **--import=** *FICHIER*
|
||||
Importer des données depuis un *FICHIER* . Si vous n'avez pas
|
||||
spécifié de base de données alors une base de données temporaire
|
||||
est utilisée; elle sera effacée quand vous quitterez gramps.
|
||||
spécifié de base de données, alors une base de données vide
|
||||
est utilisée.
|
||||
|
||||
Quand plus d'un fichier doit être importé, chacun doit être
|
||||
précédé par la commande **-i** . Ces fichiers sont importés dans le
|
||||
|
@@ -1,4 +1,4 @@
|
||||
.TH "GRAMPS" "1" "28 December 2012" "4.0" "Gramps"
|
||||
.TH "GRAMPS" "1" "09 March 2015" "4.2" "Gramps"
|
||||
.SH NAME
|
||||
gramps \- Gramps Documentation
|
||||
.
|
||||
@@ -28,7 +28,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.\" Man page generated from reStructuredText.
|
||||
.\" Man page generated from reStructeredText.
|
||||
.
|
||||
.sp
|
||||
gramps(1) @VERSION@ gramps(1)
|
||||
@@ -106,8 +106,8 @@ sources, vous devez utiliser l\(aqoption d\(aqimport.
|
||||
.TP
|
||||
.B \fB\-i\fP , \fB\-\-import=\fP \fIFICHIER\fP
|
||||
Importer des données depuis un \fIFICHIER\fP . Si vous n\(aqavez pas
|
||||
spécifié de base de données alors une base de données temporaire
|
||||
est utilisée; elle sera effacée quand vous quitterez gramps.
|
||||
spécifié de base de données, alors une base de données vide
|
||||
est utilisée.
|
||||
.sp
|
||||
Quand plus d\(aqun fichier doit être importé, chacun doit être
|
||||
précédé par la commande \fB\-i\fP . Ces fichiers sont importés dans le
|
||||
@@ -312,15 +312,15 @@ besoins
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \fBAUTEURS\fP
|
||||
Donald Allingham <\fI\%don@gramps-project.org\fP>
|
||||
\fI\%http://gramps-project.org/\fP
|
||||
Donald Allingham <\fI\%don@gramps\-project.org\fP>
|
||||
\fI\%http://gramps\-project.org/\fP
|
||||
.sp
|
||||
Cette page man a d\(aqabord été écrite par :
|
||||
Brandon L. Griffith <\fI\%brandon@debian.org\fP>
|
||||
pour Debian GNU/Linux système.
|
||||
.sp
|
||||
Cette page man est maintenue par :
|
||||
Gramps project <\fI\%xxx@gramps-project.org\fP>
|
||||
Gramps project <\fI\%xxx@gramps\-project.org\fP>
|
||||
.sp
|
||||
La traduction française :
|
||||
Jérôme Rapinat <\fI\%romjerome@yahoo.fr\fP>
|
||||
@@ -330,13 +330,14 @@ La documentation\-utilisateur est disponible par un navigateur
|
||||
standard sous la forme du manuel Gramps.
|
||||
.sp
|
||||
La documentation pour développeur est disponible sur le site
|
||||
\fI\%http://www.gramps-project.org/wiki/index.php?title=Portal:Developers\fP .
|
||||
\fI\%http://www.gramps\-project.org/wiki/index.php?title=Portal:Developers\fP .
|
||||
.UNINDENT
|
||||
.sp
|
||||
gramps(1) @VERSION@ gramps(1)
|
||||
.SH AUTHOR
|
||||
Jerome Rapinat
|
||||
.SH COPYRIGHT
|
||||
2012, Gramps project
|
||||
2015, Gramps project
|
||||
.\" Generated by docutils manpage writer.
|
||||
.\"
|
||||
.
|
||||
|
@@ -104,7 +104,7 @@ If no action, import or export options are given on the command line then an int
|
||||
|
||||
.TP
|
||||
.BI \-i,\-\^\-import= " FILE"
|
||||
Import data from \fIFILE\fR. If you haven't specified a database then a temporary database is used; this is deleted when you exit gramps.
|
||||
Import data from \fIFILE\fR. If you haven't specified a database, then an empty database is created for you called Family Tree x (where x is an incrementing number).
|
||||
.br
|
||||
|
||||
When more than one input file is given, each has to be preceded by \fB\-i\fR
|
||||
|
@@ -41,16 +41,16 @@ master_doc = 'nl'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, Gramps project'
|
||||
copyright = u'2015, Gramps project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.0'
|
||||
version = '4.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '4.0.0'
|
||||
release = '4.2.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -41,16 +41,16 @@ master_doc = 'pl'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, Gramps project'
|
||||
copyright = u'2015, Gramps project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.0'
|
||||
version = '4.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '4.0.0'
|
||||
release = '4.2.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -41,16 +41,16 @@ master_doc = 'pt_BR'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, Gramps project'
|
||||
copyright = u'2015, Gramps project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.0'
|
||||
version = '4.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '4.0.0'
|
||||
release = '4.2.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -41,16 +41,16 @@ master_doc = 'sv'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, Gramps project'
|
||||
copyright = u'2015, Gramps project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.0'
|
||||
version = '4.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '4.0.0'
|
||||
release = '4.2.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -43,7 +43,7 @@ except:
|
||||
DOCUTILS = False
|
||||
|
||||
LANGUAGES = ['sv', 'nl', 'pl', 'cs', 'pt_BR', 'fr']
|
||||
VERSION = '4.0.0'
|
||||
VERSION = '4.2.0'
|
||||
DATE = ''
|
||||
|
||||
# You can set these variables from the command line.
|
||||
|
@@ -390,7 +390,7 @@ function buttonOut(button) {
|
||||
<p id="createdate">
|
||||
<a href="http://www.gramps-project.org/wiki/index.php?title=Gramps-Connect">Gramps-Connect, version {{gramps_version}}</a>.
|
||||
</p>
|
||||
<p id="copyright">© 2009-2013 <a href="http://www.gramps-project.org/">www.gramps-project.org</a>
|
||||
<p id="copyright">© 2009-2015 <a href="http://www.gramps-project.org/">www.gramps-project.org</a>
|
||||
</p>
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
@@ -27,7 +27,7 @@
|
||||
|
||||
<_tip number="14"><b>Calculating Relationships</b><br/>To check if two people in the database are related (by blood, not marriage) try the tool under "Tools > Utilities > Relationship Calculator...". The exact relationship as well as all common ancestors are reported.</_tip>
|
||||
|
||||
<_tip number="15"><b>SoundEx can help with family research</b><br/>SoundEx solves a long standing problem in genealogy, how to handle spelling variations. The SoundEx utility takes a surname and generates a simplified form that is equivalent for similar sounding names. Knowing the SoundEx Code for a surname is very helpful for researching Census Data files (microfiche) at a library or other research facility. To get the SoundEx codes for surnames in your database, go to "Tools > Utilities > Generate SoundEx Codes...".</_tip>
|
||||
<_tip number="15"><b>SoundEx can help with family research</b><br/>SoundEx solves a long standing problem in genealogy, how to handle spelling variations. The SoundEx Gramplet takes a surname and generates a simplified form that is equivalent for similar sounding names. Knowing the SoundEx Code for a surname is very helpful for researching Census Data files (microfiche) at a library or other research facility. To view the SoundEx codes for surnames in your database, add the SoundEx Gramplet.</_tip>
|
||||
|
||||
<_tip number="16"><b>Setting Your Preferences</b><br/>"Edit > Preferences..." lets you modify a number of settings, such as the path to your media files, and allows you to adjust many aspects of the Gramps presentation to your needs. Each separate view can also be configured under "View > Configure View..."</_tip>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
<_tip number="23"><b>Organising the Views</b><br/>Many of the views can present your data as either a hierarchical tree or as a simple list. Each view can also be configured to the way you like it. Have a look to the right of the top toolbar or under the "View" menu.</_tip>
|
||||
|
||||
<_tip number="24"><b>Navigating Back and Forward</b><br/>Gramps maintains a list of previous active objects such as People, Events and . You can move forward and backward through the list using "Go > Forward" and "Go > Back" or the arrow buttons.</_tip>
|
||||
<_tip number="24"><b>Navigating Back and Forward</b><br/>Gramps maintains a list of previous active objects such as People and Events. You can move forward and backward through the list using "Go > Forward" and "Go > Back" or the arrow buttons.</_tip>
|
||||
|
||||
<_tip number="25"><b>Keyboard Shortcuts</b><br/>Tired of having to take your hand off the keyboard to use the mouse? Many functions in Gramps have keyboard shortcuts. If one exists for a function it is displayed on the right side of the menu.</_tip>
|
||||
|
||||
@@ -67,11 +67,11 @@
|
||||
|
||||
<_tip number="36"><b>Bookmarking Individuals</b><br/>The Bookmarks menu is a convenient place to store the names of frequently used individuals. Selecting a bookmark will make that person the Active Person. To bookmark someone make them the Active Person then go to "Bookmarks > Add Bookmark" or press Ctrl+D. You can also bookmark most of the other objects.</_tip>
|
||||
|
||||
<_tip number="37"><b>Incorrect Dates</b><br/>Everyone occasionally enters dates with an invalid format. Incorrect date formats will show up in Gramps with a reddish background. You can fix the date using the Date Selection dialog which can be opened by clicking on the date button. The format of the date is set under "Edit > Preferences > Display".</_tip>
|
||||
<_tip number="37"><b>Incorrect Dates</b><br/>Everyone occasionally enters dates with an invalid format. Incorrect date formats will show up in Gramps with a either a reddish background or a red dot on the right edge of the field. You can fix the date using the Date Selection dialog which can be opened by clicking on the date button. The format of the date is set under "Edit > Preferences > Display".</_tip>
|
||||
|
||||
<_tip number="38"><b>Listing Events</b><br/>Events are added using the editor opened with "Person > Edit Person > Events". There is a long list of preset event types. You can add your own event types by typing in the text field, they will be added to the available events, but not translated.</_tip>
|
||||
|
||||
<_tip number="39"><b>Managing Names</b><br/>It is easy to manage people with several names in Gramps. In the Person Editor select the Names tab. You can add names of different types and set the prefered name by dragging it to the Prefered Name section.</_tip>
|
||||
<_tip number="39"><b>Managing Names</b><br/>It is easy to manage people with several names in Gramps. In the Person Editor select the Names tab. You can add names of different types and set the preferred name by dragging it to the Preferred Name section.</_tip>
|
||||
|
||||
<_tip number="40"><b>Ancestor View</b><br/>The Ancestry View displays a traditional pedigree chart. Hold the mouse over an individual to see more information about them or right click on an individual to access other family members and settings. Play with the settings to see the different options.</_tip>
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
<_tip number="48"><b>Web Family Tree Format</b><br/>Gramps can export data to the Web Family Tree (WFT) format. This format allows a family tree to be displayed online using a single file, instead of many html files.</_tip>
|
||||
|
||||
<_tip number="49"><b>Making a Genealogy Website</b><br/>You can easily export your family tree to a web page. Select the entire database, family lines or selected individuals to a collection of web pages ready for upload to the World Wide Web. The Gramps project provides free hosting of websites made with Gramps.</_tip>
|
||||
<_tip number="49"><b>Making a Genealogy Website</b><br/>You can easily export your family tree to a web page. Select the entire database, family lines or selected individuals to a collection of web pages ready for upload to the World Wide Web.</_tip>
|
||||
|
||||
<_tip number="50"><b>Reporting Bugs in Gramps</b><br/>The best way to report a bug in Gramps is to use the Gramps bug tracking system at http://bugs.gramps-project.org</_tip>
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
|
||||
<_tip number="62"><b>The 'How and Why' of Your Genealogy</b><br/> Genealogy isn't only about dates and names. It is about people. Be descriptive. Include why things happened, and how descendants might have been shaped by the events they went through. Narratives go a long way in making your family history come alive.</_tip>
|
||||
|
||||
<_tip number="63"><b>Don't speak English?</b><br/>Volunteers have translated Gramps into more than 20 languages. If Gramps supports your language and it is not being displayed, set the default language in your operating system and restart Gramps.</_tip>
|
||||
<_tip number="63"><b>Don't speak English?</b><br/>Volunteers have translated Gramps into more than 40 languages. If Gramps supports your language and it is not being displayed, set the default language in your operating system and restart Gramps.</_tip>
|
||||
|
||||
<_tip number="64"><b>Gramps Translators</b><br/>Gramps has been designed so that new translations can easily be added with little development effort. If you are interested in participating please email gramps-devel@lists.sf.net</_tip>
|
||||
|
||||
|
33
debian/control
vendored
33
debian/control
vendored
@@ -7,41 +7,44 @@ Build-Depends-Indep:
|
||||
gettext,
|
||||
intltool,
|
||||
libxml-parser-perl,
|
||||
python-all,
|
||||
python-setuptools
|
||||
python3-all,
|
||||
python3-setuptools
|
||||
Build-Depends:
|
||||
dh-python,
|
||||
debhelper (>= 9.0.0)
|
||||
Standards-Version: 3.9.5
|
||||
Vcs-Git: git://anonscm.debian.org/collab-maint/gramps.git
|
||||
Vcs-browser: http://anonscm.debian.org/gitweb/?p=collab-maint/gramps.git
|
||||
Homepage: http://www.gramps-project.org/
|
||||
X-Python-Version: >= 2.7
|
||||
X-Python-Version: >= 3.2
|
||||
|
||||
Package: python-gramps
|
||||
Package: python3-gramps
|
||||
Architecture: all
|
||||
Depends:
|
||||
gir1.2-gtk-3.0,
|
||||
gir1.2-gtk-3.0 (>= 3.10.0),
|
||||
librsvg2-2,
|
||||
python-gi,
|
||||
python-gi-cairo,
|
||||
python3-gi,
|
||||
python3-gi-cairo,
|
||||
python3-bsddb3,
|
||||
xdg-utils,
|
||||
${misc:Depends},
|
||||
${python:Depends}
|
||||
${python3:Depends}
|
||||
Recommends:
|
||||
graphviz,
|
||||
libosmgpsmap-1.0-0-dev,
|
||||
python-pyicu
|
||||
libosmgpsmap-1.0-0,
|
||||
gir1.2-osmgpsmap-1.0,
|
||||
python3-pyicu
|
||||
Suggests:
|
||||
fonts-freefont-ttf,
|
||||
gir1.2-gexiv2-0.4,
|
||||
gir1.2-gtk-gtkspell3-3.0,
|
||||
python-pil,
|
||||
gir1.2-gexiv2-0.10,
|
||||
gir1.2-gtkspell3-3.0,
|
||||
python3-pil,
|
||||
rcs
|
||||
Description: Genealogical research program
|
||||
GRAMPS is an Open Source genealogy program written in Python, using
|
||||
Gramps is an Open Source genealogy program written in Python, using
|
||||
the GTK/GNOME interface. It is an extremely flexible program fitting
|
||||
the needs for both the amateur genealogist and serious genealogical
|
||||
researcher.
|
||||
GRAMPS has the ability to import GEDCOM files exported from many
|
||||
Gramps has the ability to import GEDCOM files exported from many
|
||||
proprietary genealogy programs and can produce a large number of
|
||||
reports in many popular formats.
|
||||
|
@@ -1,13 +0,0 @@
|
||||
diff --git a/setup.py b/setup.py
|
||||
index 3f702ae..9622d75 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -248,7 +248,7 @@ class install(_install):
|
||||
'utils', 'resource-path')
|
||||
with io.open(resource_file, 'w', encoding='utf-8',
|
||||
errors='strict') as fp:
|
||||
- path = os.path.abspath(os.path.join(self.install_data, 'share'))
|
||||
+ path = '/usr/share'
|
||||
if sys.version_info[0] < 3:
|
||||
path = unicode(path)
|
||||
fp.write(path)
|
22
debian/patches/0002-Disable-HTML-View.patch
vendored
22
debian/patches/0002-Disable-HTML-View.patch
vendored
@@ -1,22 +0,0 @@
|
||||
diff --git a/gramps/plugins/view/htmlrenderer.py b/gramps/plugins/view/htmlrenderer.py
|
||||
index c41942a..8f35b16 100644
|
||||
--- a/gramps/plugins/view/htmlrenderer.py
|
||||
+++ b/gramps/plugins/view/htmlrenderer.py
|
||||
@@ -122,11 +122,12 @@ user_pref("general.useragent.locale, %(lang)s);
|
||||
|
||||
TOOLKIT = NOWEB
|
||||
|
||||
-try:
|
||||
- from gi.repository import WebKit as webkit
|
||||
- TOOLKIT = WEBKIT
|
||||
-except:
|
||||
- pass
|
||||
+#Disable webkit as it is causing a crash in Gramps 4.0.2
|
||||
+#try:
|
||||
+# from gi.repository import WebKit as webkit
|
||||
+# TOOLKIT = WEBKIT
|
||||
+#except:
|
||||
+# pass
|
||||
|
||||
#no interfaces present, raise Error so that options for GeoView do not show
|
||||
if TOOLKIT == NOWEB :
|
2
debian/patches/series
vendored
2
debian/patches/series
vendored
@@ -1,2 +0,0 @@
|
||||
0001-Correct-resource-path-in-setup.py.patch
|
||||
0002-Disable-HTML-View.patch
|
17
debian/rules
vendored
17
debian/rules
vendored
@@ -5,32 +5,31 @@ export DH_VERBOSE=1
|
||||
export DH_OPTIONS=-v
|
||||
|
||||
%:
|
||||
dh $@ --with python2
|
||||
dh $@ --with python3 --buildsystem=pybuild
|
||||
|
||||
# Override auto test because upstream do not use the standard unittest discover
|
||||
override_dh_auto_test:
|
||||
|
||||
# Override of auto_build
|
||||
override_dh_auto_build:
|
||||
python setup.py build
|
||||
python3 setup.py build
|
||||
|
||||
# Override of auto_install to remove information from package
|
||||
override_dh_auto_install:
|
||||
#dh_auto_install
|
||||
python3 setup.py install --resourcepath=/usr/share --root=debian/python3-gramps --install-layout=deb
|
||||
# Remove duplicate copyright information
|
||||
#rm $(CURDIR)/debian/python-gramps/usr/share/doc/gramps/COPYING
|
||||
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/COPYING
|
||||
# Remove install file as it is not needed by package users
|
||||
#rm $(CURDIR)/debian/python-gramps/usr/share/doc/gramps/INSTALL
|
||||
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/INSTALL
|
||||
# Remove duplicate license information
|
||||
#rm $(CURDIR)/debian/python-gramps/usr/share/doc/gramps/LICENSE
|
||||
python setup.py install --root=debian/python-gramps --install-layout=deb
|
||||
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/LICENSE
|
||||
ln -s /usr/share/common-licenses/GPL-2 $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/COPYING
|
||||
|
||||
# Make css style sheets and png icons non-executable
|
||||
override_dh_fixperms:
|
||||
dh_fixperms
|
||||
chmod a-x $(CURDIR)/debian/python-gramps/usr/share/gramps/css/Web_*.css
|
||||
chmod a-x $(CURDIR)/debian/python-gramps/usr/share/gramps/images/22x22/gramps*.png
|
||||
chmod a-x $(CURDIR)/debian/python-gramps/usr/share/gramps/images/16x16/gramps*.png
|
||||
chmod a-x $(CURDIR)/debian/python3-gramps/usr/share/gramps/css/Web_*.css
|
||||
|
||||
# Avoid compressing COPYING file so that it can appear in the "About" dialog
|
||||
override_dh_compress:
|
||||
|
2
debian/source/format
vendored
2
debian/source/format
vendored
@@ -1 +1 @@
|
||||
1.0
|
||||
1.8
|
||||
|
1
debian/source/local-options
vendored
1
debian/source/local-options
vendored
@@ -1 +0,0 @@
|
||||
unapply-patches
|
4
debian/watch
vendored
4
debian/watch
vendored
@@ -1,4 +0,0 @@
|
||||
version=3
|
||||
|
||||
opts="dversionmangle=s/\+dfsg//g" \
|
||||
http://sf.net/gramps/gramps-(.+)\.tar\.gz
|
@@ -3,7 +3,9 @@ Installation and building the docs
|
||||
|
||||
You need to install sphinx. Assuming you have installed the python setuptools, just do:
|
||||
|
||||
sudo easy_install sphinx
|
||||
sudo easy_install sphinx
|
||||
or
|
||||
sudo pip install sphinx
|
||||
|
||||
Once installed, go to the docs directory, and do:
|
||||
|
||||
@@ -17,7 +19,7 @@ Documentation Guidelines
|
||||
|
||||
Doc strings in python files should be written in reStructured text: http://docutils.sourceforge.net/docs/user/rst/quickref.html
|
||||
|
||||
The typical docstring for GRAMPS should look like this:
|
||||
The typical docstring for Gramps should look like this:
|
||||
|
||||
"""Brief synopsis
|
||||
|
||||
@@ -69,4 +71,4 @@ Change in many files something:
|
||||
perl -pi -w -e "s/L{PersonRef}/:class:\`\~gen.lib.personref.PersonRef\`/g;" *.py
|
||||
|
||||
here L{PersonRef} is changed in :class:`~gen.lib.personref.PersonRef
|
||||
`
|
||||
`
|
||||
|
@@ -25,7 +25,7 @@ sys.path.append(os.path.abspath(os.pardir))
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage']
|
||||
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.viewcode']
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
@@ -41,16 +41,16 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Gramps'
|
||||
copyright = u'2012, The Gramps Project'
|
||||
copyright = u'2015, The Gramps Project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '4.1'
|
||||
version = '4.2.0'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '4.0.99-trunk'
|
||||
release = '4.2.0-master'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
Developer Guide
|
||||
===============
|
||||
|
||||
Please consult the API documentation, and the development part of `our wiki <http://gramps-project.org>`_\ .
|
||||
Please consult the API documentation, and the development section of `our wiki <https://gramps-project.org/wiki/index.php?title=Portal:Developers>`_\ .
|
||||
|
@@ -1,4 +1,4 @@
|
||||
User Guide
|
||||
==========
|
||||
|
||||
Please consult the manual which you find on `our wiki <http://www.gramps-project.org/wiki/index.php?title=User_manual>`_\ .
|
||||
Please consult the manual which you find on `our wiki <https://gramps-project.org/wiki/index.php?title=User_manual>`_\ .
|
||||
|
0
example/gedcom/sample.ged
Executable file → Normal file
0
example/gedcom/sample.ged
Executable file → Normal file
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE database PUBLIC "-//Gramps//DTD Gramps XML 1.6.0//EN"
|
||||
"http://gramps-project.org/xml/1.6.0/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.6.0/">
|
||||
<!DOCTYPE database PUBLIC "-//Gramps//DTD Gramps XML 1.7.1//EN"
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="2014-05-15" version="4.1.0"/>
|
||||
<created date="2015-07-04" version="4.2.0"/>
|
||||
<researcher>
|
||||
<resname>Alex Roitman,,,</resname>
|
||||
</researcher>
|
||||
@@ -1523,80 +1523,218 @@
|
||||
</source>
|
||||
</sources>
|
||||
<places>
|
||||
<placeobj handle="_4ZLT6DVCWT9LTZRDCS" change="1198197326" id="P0003" name="Ronne" type="None">
|
||||
<placeobj handle="_4ZLT6DVCWT9LTZRDCS" change="1422124381" id="P0003" type="City">
|
||||
<ptitle>Ronne, Bornholm, Denmark</ptitle>
|
||||
<pname value="Ronne"/>
|
||||
<placeref hlink="_cef2428d9dd233688ea3ed3cc24"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_61NT6D3G1JMOTO6Z7Y" change="1198197326" id="P0012" name="Grostorp" type="None">
|
||||
<placeobj handle="_61NT6D3G1JMOTO6Z7Y" change="1422123855" id="P0012" type="Municipality">
|
||||
<ptitle>Grostorp, Kristianstad Lan, Sweden</ptitle>
|
||||
<pname value="Grostorp"/>
|
||||
<placeref hlink="_cef23a81ba8c837cc364895d88"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_67MT6DB6KWOVMBAXSY" change="1198197326" id="P0002" name="San Francisco" type="None">
|
||||
<ptitle>San Francisco, San Francisco Co., CA</ptitle>
|
||||
<placeobj handle="_67MT6DB6KWOVMBAXSY" change="1422125128" id="P0002" type="City">
|
||||
<ptitle>San Francisco, San Francisco Co., CA, USA</ptitle>
|
||||
<pname value="San Francisco"/>
|
||||
<placeref hlink="_cef24668db23c27d421f51c667d"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_7JMT6DN2LOF54KXHTU" change="1198197326" id="P0010" name="Reno" type="None">
|
||||
<ptitle>Reno, Washoe Co., NV</ptitle>
|
||||
<placeobj handle="_7JMT6DN2LOF54KXHTU" change="1422125958" id="P0010" type="City">
|
||||
<ptitle>Reno, Washoe Co., NV, USA</ptitle>
|
||||
<pname value="Reno"/>
|
||||
<placeref hlink="_cef2513e057732c3f27780750d"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_A9MT6DHVWGWRP59DEV" change="1198197326" id="P0011" name="Sweden" type="None">
|
||||
<placeobj handle="_A9MT6DHVWGWRP59DEV" change="1422123595" id="P0011" type="Country">
|
||||
<ptitle>Sweden</ptitle>
|
||||
<pname value="Sweden"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_AANT6D026O5SHNUCDH" change="1198197326" id="P0015" name="Simrishamn" type="None">
|
||||
<placeobj handle="_AANT6D026O5SHNUCDH" change="1422123942" id="P0015" type="Municipality">
|
||||
<ptitle>Simrishamn, Kristianstad Lan, Sweden</ptitle>
|
||||
<pname value="Simrishamn"/>
|
||||
<placeref hlink="_cef23a81ba8c837cc364895d88"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_AKMT6DMEYZDTG9J6DS" change="1198197326" id="P0013" name="Copenhagen" type="None">
|
||||
<placeobj handle="_AKMT6DMEYZDTG9J6DS" change="1422124249" id="P0013" type="City">
|
||||
<ptitle>Copenhagen, Denmark</ptitle>
|
||||
<pname value="Copenhagen"/>
|
||||
<placeref hlink="_cef2418f9333e16e00f6ce2eb14"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_BAOT6D1WY6J4O4ARRN" change="1198197326" id="P0030" name="San Ramon" type="None">
|
||||
<ptitle>San Ramon, Conta Costa Co., CA</ptitle>
|
||||
<placeobj handle="_BAOT6D1WY6J4O4ARRN" change="1422125198" id="P0030" type="City">
|
||||
<ptitle>San Ramon, Conta Costa Co., CA, USA</ptitle>
|
||||
<pname value="San Ramon"/>
|
||||
<placeref hlink="_cef2478a94b48a58d3be6a10493"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_DYLT6DF4DX2MNZICJ8" change="1198197326" id="P0014" name="Hoya/Jona/Hoia" type="None">
|
||||
<ptitle>Hoya/Jona/Hoia, Sweden</ptitle>
|
||||
<placeobj handle="_DYLT6DF4DX2MNZICJ8" change="1422126222" id="P0014" type="City">
|
||||
<ptitle>Hoya, Sweden</ptitle>
|
||||
<pname value="Hoya"/>
|
||||
<pname value="Jona"/>
|
||||
<pname value="Hoia"/>
|
||||
<placeref hlink="_A9MT6DHVWGWRP59DEV"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_ELNT6DS8GN8WI7Z4SO" change="1198197326" id="P0008" name="Hayward" type="None">
|
||||
<ptitle>Hayward, Alameda Co., CA</ptitle>
|
||||
<placeobj handle="_ELNT6DS8GN8WI7Z4SO" change="1422125073" id="P0008" type="City">
|
||||
<ptitle>Hayward, Alameda Co., CA, USA</ptitle>
|
||||
<pname value="Hayward"/>
|
||||
<placeref hlink="_cef245b044820b7405a1180f298"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_FBNT6DL92NDY0Z5SGP" change="1198197326" id="P0021" name="Santa Rosa" type="None">
|
||||
<ptitle>Santa Rosa, Sonoma Co., CA</ptitle>
|
||||
<placeobj handle="_FBNT6DL92NDY0Z5SGP" change="1422125294" id="P0021" type="City">
|
||||
<ptitle>Santa Rosa, Sonoma Co., CA, USA</ptitle>
|
||||
<pname value="Santa Rosa"/>
|
||||
<placeref hlink="_cef24b7a76efa8b9d98d67ea5a"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_GWNT6D12ZV06PK969X" change="1198197326" id="P0020" name="Sacramento" type="None">
|
||||
<ptitle>Sacramento, Sacramento Co., CA</ptitle>
|
||||
<placeobj handle="_GWNT6D12ZV06PK969X" change="1422125101" id="P0020" type="City">
|
||||
<ptitle>Sacramento, Sacramento Co., CA, USA</ptitle>
|
||||
<pname value="Sacramento"/>
|
||||
<placeref hlink="_cef246117947f75e54c09680419"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_HFNT6D12ZC0KOWY69T" change="1198197326" id="P0016" name="Fremont" type="None">
|
||||
<ptitle>Fremont, Alameda Co., CA</ptitle>
|
||||
<placeobj handle="_HFNT6D12ZC0KOWY69T" change="1422125018" id="P0016" type="City">
|
||||
<ptitle>Fremont, Alameda Co., CA, USA</ptitle>
|
||||
<pname value="Fremont"/>
|
||||
<placeref hlink="_cef245b044820b7405a1180f298"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_HINT6DP8JGGL0KKB8J" change="1198197326" id="P0000" name="Loderup" type="None">
|
||||
<placeobj handle="_HINT6DP8JGGL0KKB8J" change="1422123879" id="P0000" type="Municipality">
|
||||
<ptitle>Loderup, Malmous Lan, Sweden</ptitle>
|
||||
<pname value="Loderup"/>
|
||||
<placeref hlink="_cef23c1ee8b7da58c764e88c637"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_IEOT6DOW3RE8AQ94HH" change="1198197326" id="P0025" name="Bí" type="None">
|
||||
<placeobj handle="_IEOT6DOW3RE8AQ94HH" change="1422126043" id="P0025" type="Unknown">
|
||||
<ptitle>Bí</ptitle>
|
||||
<pname value="Bí"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_LTNT6DKZ5CR8PZSVUS" change="1198197326" id="P0022" name="San Jose" type="None">
|
||||
<ptitle>San Jose, Santa Clara Co., CA</ptitle>
|
||||
<placeobj handle="_LTNT6DKZ5CR8PZSVUS" change="1422125169" id="P0022" type="City">
|
||||
<ptitle>San Jose, Santa Clara Co., CA, USA</ptitle>
|
||||
<pname value="San Jose"/>
|
||||
<placeref hlink="_cef246c95c132bcf6a0255d4d17"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_PUNT6D1XHS0DJW9QP6" change="1198197326" id="P0024" name="UC Berkeley" type="None">
|
||||
<ptitle>UC Berkeley</ptitle>
|
||||
<placeobj handle="_PUNT6D1XHS0DJW9QP6" change="1422125605" id="P0024" type="University">
|
||||
<ptitle>UC Berkeley, CA, USA</ptitle>
|
||||
<pname value="UC Berkeley"/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_PXMT6DBL0WSBL76WD7" change="1198197326" id="P0026" name="Smestorp" type="None">
|
||||
<placeobj handle="_PXMT6DBL0WSBL76WD7" change="1422123936" id="P0026" type="Municipality">
|
||||
<ptitle>Smestorp, Kristianstad Lan, Sweden</ptitle>
|
||||
<pname value="Smestorp"/>
|
||||
<placeref hlink="_cef23a81ba8c837cc364895d88"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_QBOT6DN7UCCTZQ055" change="1198197326" id="P0029" name="Woodland" type="None">
|
||||
<ptitle>Woodland, Yolo Co., CA</ptitle>
|
||||
<placeobj handle="_QBOT6DN7UCCTZQ055" change="1422125399" id="P0029" type="City">
|
||||
<ptitle>Woodland, Yolo Co., CA, USA</ptitle>
|
||||
<pname value="Woodland"/>
|
||||
<placeref hlink="_cef24c2e3592e759b7797f95465"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_QJMT6DGII29FWCPX2E" change="1198197326" id="P0028" name="Ronne Bornholm" type="None">
|
||||
<placeobj handle="_QJMT6DGII29FWCPX2E" change="1422124361" id="P0028" type="City">
|
||||
<ptitle>Ronne Bornholm, Denmark</ptitle>
|
||||
<pname value="Ronne Bornholm"/>
|
||||
<placeref hlink="_cef2418f9333e16e00f6ce2eb14"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_R8MT6DRIZVNRYDK0VN" change="1198197326" id="P0027" name="Tommarp" type="None">
|
||||
<placeobj handle="_R8MT6DRIZVNRYDK0VN" change="1422123930" id="P0027" type="Municipality">
|
||||
<ptitle>Tommarp, Kristianstad Lan, Sweden</ptitle>
|
||||
<pname value="Tommarp"/>
|
||||
<placeref hlink="_cef23a81ba8c837cc364895d88"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_RPMT6DTQR8J7LK98HJ" change="1198197326" id="P0019" name="Denver" type="None">
|
||||
<ptitle>Denver, Denver Co., CO</ptitle>
|
||||
<placeobj handle="_RPMT6DTQR8J7LK98HJ" change="1422125771" id="P0019" type="City">
|
||||
<ptitle>Denver, Denver Co., CO, USA</ptitle>
|
||||
<pname value="Denver"/>
|
||||
<placeref hlink="_cef24ffc57f28a50ea65f0af645"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_S1NT6DPOBYC1JGMR1P" change="1198197326" id="P0001" name="Sparks" type="None">
|
||||
<ptitle>Sparks, Washoe Co., NV</ptitle>
|
||||
<placeobj handle="_S1NT6DPOBYC1JGMR1P" change="1422125992" id="P0001" type="City">
|
||||
<ptitle>Sparks, Washoe Co., NV, USA</ptitle>
|
||||
<pname value="Sparks"/>
|
||||
<placeref hlink="_cef2513e057732c3f27780750d"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_XLNT6DUONITFPPEGVH" change="1198197326" id="P0009" name="Community Presbyterian Church" type="None">
|
||||
<ptitle>Community Presbyterian Church, Danville, CA</ptitle>
|
||||
<placeobj handle="_XLNT6DUONITFPPEGVH" change="1422125508" id="P0009" type="Church">
|
||||
<ptitle>Community Presbyterian Church, Danville, CA, USA</ptitle>
|
||||
<pname value="Community Presbyterian Church"/>
|
||||
<placeref hlink="_cef24d930653dc59ec3a36510e4"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_XSMT6DNISHYRCR1E78" change="1198197326" id="P0004" name="Gladsax" type="None">
|
||||
<placeobj handle="_XSMT6DNISHYRCR1E78" change="1422123836" id="P0004" type="Municipality">
|
||||
<ptitle>Gladsax, Kristianstad Lan, Sweden</ptitle>
|
||||
<pname value="Gladsax"/>
|
||||
<placeref hlink="_cef23a81ba8c837cc364895d88"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef23a81ba8c837cc364895d88" change="1422123677" id="P0005" type="County">
|
||||
<ptitle>Kristianstad Lan, Sweden</ptitle>
|
||||
<pname value="Kristianstad Lan"/>
|
||||
<placeref hlink="_A9MT6DHVWGWRP59DEV"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef23c1ee8b7da58c764e88c637" change="1422123662" id="P0006" type="County">
|
||||
<ptitle>Malmous Lan, Sweden</ptitle>
|
||||
<pname value="Malmous Lan"/>
|
||||
<placeref hlink="_A9MT6DHVWGWRP59DEV"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef2418f9333e16e00f6ce2eb14" change="1422124233" id="P0007" type="Country">
|
||||
<ptitle>Denmark</ptitle>
|
||||
<pname value="Denmark"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef2428d9dd233688ea3ed3cc24" change="1422124337" id="P0017" type="Region">
|
||||
<ptitle>Bornholm, Denmark</ptitle>
|
||||
<pname value="Bornholm"/>
|
||||
<placeref hlink="_cef2418f9333e16e00f6ce2eb14"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef2438892244290ca7fb5750" change="1422124440" id="P0018" type="Country">
|
||||
<ptitle>USA</ptitle>
|
||||
<pname value="USA"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef243fb5634559442323368f63" change="1422124487" id="P0023" type="State">
|
||||
<ptitle>CA, USA</ptitle>
|
||||
<pname value="CA"/>
|
||||
<placeref hlink="_cef2438892244290ca7fb5750"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef244224d14af0273799b281e" change="1422124514" id="P0031" type="State">
|
||||
<ptitle>CO, USA</ptitle>
|
||||
<pname value="CO"/>
|
||||
<placeref hlink="_cef2438892244290ca7fb5750"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef24468f6e3a984bf57967e95d" change="1422124542" id="P0032" type="State">
|
||||
<ptitle>NV, USA</ptitle>
|
||||
<pname value="NV"/>
|
||||
<placeref hlink="_cef2438892244290ca7fb5750"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef245b044820b7405a1180f298" change="1422124666" id="P0033" type="County">
|
||||
<ptitle>Alameda Co., CA, USA</ptitle>
|
||||
<pname value="Alameda Co."/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef246117947f75e54c09680419" change="1422124908" id="P0034" type="County">
|
||||
<ptitle>Sacramento Co., CA, USA</ptitle>
|
||||
<pname value="Sacramento Co."/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef24668db23c27d421f51c667d" change="1422124741" id="P0035" type="County">
|
||||
<ptitle>San Francisco Co., CA, USA</ptitle>
|
||||
<pname value="San Francisco Co."/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef246c95c132bcf6a0255d4d17" change="1422124781" id="P0036" type="County">
|
||||
<ptitle>Santa Clara Co., CA, USA</ptitle>
|
||||
<pname value="Santa Clara Co."/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef2478a94b48a58d3be6a10493" change="1422124860" id="P0037" type="County">
|
||||
<ptitle>Conta Costa Co., CA, USA</ptitle>
|
||||
<pname value="Conta Costa Co."/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef24b7a76efa8b9d98d67ea5a" change="1422125273" id="P0038" type="County">
|
||||
<ptitle>Sonoma Co., CA, USA</ptitle>
|
||||
<pname value="Sonoma Co."/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef24c2e3592e759b7797f95465" change="1422125420" id="P0039" type="County">
|
||||
<ptitle>Yolo Co., CA, USA</ptitle>
|
||||
<pname value="Yolo Co."/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef24d930653dc59ec3a36510e4" change="1422125493" id="P0040" type="City">
|
||||
<ptitle>Danville, CA, USA</ptitle>
|
||||
<pname value="Danville"/>
|
||||
<placeref hlink="_cef243fb5634559442323368f63"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef24ffc57f28a50ea65f0af645" change="1422125745" id="P0041" type="County">
|
||||
<ptitle>Denver Co., CO, USA</ptitle>
|
||||
<pname value="Denver Co."/>
|
||||
<placeref hlink="_cef244224d14af0273799b281e"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_cef2513e057732c3f27780750d" change="1422125877" id="P0042" type="County">
|
||||
<ptitle>Washoe Co., NV, USA</ptitle>
|
||||
<pname value="Washoe Co."/>
|
||||
<placeref hlink="_cef24468f6e3a984bf57967e95d"/>
|
||||
</placeobj>
|
||||
</places>
|
||||
<objects>
|
||||
|
782
example/gramps/datetest.gramps
Normal file
782
example/gramps/datetest.gramps
Normal file
@@ -0,0 +1,782 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE database PUBLIC "-//Gramps//DTD Gramps XML 1.5.0//EN"
|
||||
"http://gramps-project.org/xml/1.5.0/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.5.0/">
|
||||
<header>
|
||||
<created date="2015-05-14" version="3.4.0"/>
|
||||
<researcher>
|
||||
</researcher>
|
||||
</header>
|
||||
<events>
|
||||
<event handle="_cde77b2c30c13ea85db" change="1426803047" id="E0000">
|
||||
<type>Birth</type>
|
||||
<dateval val="1823" type="before"/>
|
||||
</event>
|
||||
<event handle="_cde77b7eff96ae8455f" change="1426803072" id="E0001">
|
||||
<type>Birth</type>
|
||||
<dateval val="1823-03" type="before"/>
|
||||
</event>
|
||||
<event handle="_cde77be2a67401f7b16" change="1426803096" id="E0002">
|
||||
<type>Birth</type>
|
||||
<dateval val="1823-03-13" type="before"/>
|
||||
</event>
|
||||
<event handle="_cde7b70d22b30f00b14" change="1426802975" id="E0003">
|
||||
<type>Birth</type>
|
||||
<dateval val="1822" type="after"/>
|
||||
</event>
|
||||
<event handle="_cde7b8eb90e0a8792a9" change="1426802998" id="E0004">
|
||||
<type>Birth</type>
|
||||
<dateval val="1822-02" type="after"/>
|
||||
</event>
|
||||
<event handle="_cde7b95cb7e40432538" change="1426803021" id="E0005">
|
||||
<type>Birth</type>
|
||||
<dateval val="1822-02-13" type="after"/>
|
||||
</event>
|
||||
<event handle="_cde7b9b2b00713c42af" change="1426802885" id="E0006">
|
||||
<type>Birth</type>
|
||||
<dateval val="1821" type="about"/>
|
||||
</event>
|
||||
<event handle="_cde7b9f0da51d2ff10a" change="1426802925" id="E0007">
|
||||
<type>Birth</type>
|
||||
<dateval val="1821-01" type="about"/>
|
||||
</event>
|
||||
<event handle="_cde7ba310240e18a0ea" change="1426802949" id="E0008">
|
||||
<type>Birth</type>
|
||||
<dateval val="1821-01-13" type="about"/>
|
||||
</event>
|
||||
<event handle="_ce00f22be3443f0c30b" change="1426803671" id="E0009">
|
||||
<type>Birth</type>
|
||||
<dateval val="1851"/>
|
||||
</event>
|
||||
<event handle="_ce00f2ab83911df5354" change="1426803701" id="E0010">
|
||||
<type>Birth</type>
|
||||
<dateval val="1852-02"/>
|
||||
</event>
|
||||
<event handle="_ce00f2eb2f86d94ece0" change="1426803729" id="E0011">
|
||||
<type>Birth</type>
|
||||
<dateval val="1853-03-04"/>
|
||||
</event>
|
||||
<event handle="_cfa02e904f161e652da" change="1426793018" id="E0014">
|
||||
<type>Birth</type>
|
||||
<dateval val="1801-01"/>
|
||||
</event>
|
||||
<event handle="_cfa02efc75b0eb05cfa" change="1426793062" id="E0015">
|
||||
<type>Birth</type>
|
||||
<dateval val="1801-01-13"/>
|
||||
</event>
|
||||
<event handle="_cfa02f60fbe55ad36f7" change="1426793103" id="E0016">
|
||||
<type>Birth</type>
|
||||
<dateval val="1802-02"/>
|
||||
</event>
|
||||
<event handle="_cfa02fd93615614dc94" change="1426793153" id="E0017">
|
||||
<type>Birth</type>
|
||||
<dateval val="1802-02-13"/>
|
||||
</event>
|
||||
<event handle="_cfa030376d1228fb29b" change="1426793191" id="E0018">
|
||||
<type>Birth</type>
|
||||
<dateval val="1803-03"/>
|
||||
</event>
|
||||
<event handle="_cfa0308a9e766a18a5a" change="1426793225" id="E0019">
|
||||
<type>Birth</type>
|
||||
<dateval val="1803-03-13"/>
|
||||
</event>
|
||||
<event handle="_cfa0311ff9474a33dad" change="1426793404" id="E0020">
|
||||
<type>Birth</type>
|
||||
<dateval val="1804-04"/>
|
||||
</event>
|
||||
<event handle="_cfa0314208a175c695f" change="1426793300" id="E0021">
|
||||
<type>Birth</type>
|
||||
<dateval val="1804-04-13"/>
|
||||
</event>
|
||||
<event handle="_cfa031df6bb2f50f9c5" change="1426793365" id="E0022">
|
||||
<type>Birth</type>
|
||||
<dateval val="1805-05"/>
|
||||
</event>
|
||||
<event handle="_cfa0335efcf6eeb6bf6" change="1426793522" id="E0024">
|
||||
<type>Birth</type>
|
||||
<dateval val="1805-05-13"/>
|
||||
</event>
|
||||
<event handle="_cfa0342171e10e9a0c8" change="1426793602" id="E0025">
|
||||
<type>Birth</type>
|
||||
<dateval val="1806-06"/>
|
||||
</event>
|
||||
<event handle="_cfa03468bc76cf7a295" change="1426793631" id="E0026">
|
||||
<type>Birth</type>
|
||||
<dateval val="1807-07"/>
|
||||
</event>
|
||||
<event handle="_cfa034b07c9408b12cc" change="1426793660" id="E0027">
|
||||
<type>Birth</type>
|
||||
<dateval val="1808-08"/>
|
||||
</event>
|
||||
<event handle="_cfa034f8da44738c323" change="1426793690" id="E0028">
|
||||
<type>Birth</type>
|
||||
<dateval val="1809-09"/>
|
||||
</event>
|
||||
<event handle="_cfa03547c3765017895" change="1426793722" id="E0029">
|
||||
<type>Birth</type>
|
||||
<dateval val="1810-10"/>
|
||||
</event>
|
||||
<event handle="_cfa035965a02da81147" change="1426793754" id="E0030">
|
||||
<type>Birth</type>
|
||||
<dateval val="1811-11"/>
|
||||
</event>
|
||||
<event handle="_cfa035ee99b03f59cbc" change="1426793790" id="E0031">
|
||||
<type>Birth</type>
|
||||
<dateval val="1812-12"/>
|
||||
</event>
|
||||
<event handle="_cfa038cce441e73b1c5" change="1426794091" id="E0032">
|
||||
<type>Birth</type>
|
||||
<dateval val="1806-06-13"/>
|
||||
</event>
|
||||
<event handle="_cfa039308b34bf173be" change="1426794132" id="E0033">
|
||||
<type>Birth</type>
|
||||
<dateval val="1807-07-13"/>
|
||||
</event>
|
||||
<event handle="_cfa0399114e40ffcadf" change="1426794172" id="E0034">
|
||||
<type>Birth</type>
|
||||
<dateval val="1808-08-13"/>
|
||||
</event>
|
||||
<event handle="_cfa039f6e510c198300" change="1426794213" id="E0035">
|
||||
<type>Birth</type>
|
||||
<dateval val="1809-09-13"/>
|
||||
</event>
|
||||
<event handle="_cfa03a5c2fe4ce6e75d" change="1426794255" id="E0036">
|
||||
<type>Birth</type>
|
||||
<dateval val="1810-10-13"/>
|
||||
</event>
|
||||
<event handle="_cfa03aabe141219bb22" change="1426794287" id="E0037">
|
||||
<type>Birth</type>
|
||||
<dateval val="1811-11-13"/>
|
||||
</event>
|
||||
<event handle="_cfa03afa2ac4d140d9d" change="1426794319" id="E0038">
|
||||
<type>Birth</type>
|
||||
<dateval val="1812-12-13"/>
|
||||
</event>
|
||||
<event handle="_cfa0424ffcb19aed9f7" change="1426804001" id="E0039">
|
||||
<type>Birth</type>
|
||||
<datespan start="1876" stop="1877"/>
|
||||
</event>
|
||||
<event handle="_cfa042e5a0d52e9c63f" change="1426804044" id="E0040">
|
||||
<type>Birth</type>
|
||||
<datespan start="1876-06" stop="1877-07"/>
|
||||
</event>
|
||||
<event handle="_cfa0436b49b7746d225" change="1426804087" id="E0041">
|
||||
<type>Birth</type>
|
||||
<datespan start="1876-06-13" stop="1877-07-13"/>
|
||||
</event>
|
||||
<event handle="_cfa044b58de7b9a9759" change="1426803857" id="E0042">
|
||||
<type>Birth</type>
|
||||
<daterange start="1864" stop="1865"/>
|
||||
</event>
|
||||
<event handle="_cfa0454785d7f7fe074" change="1426803895" id="E0043">
|
||||
<type>Birth</type>
|
||||
<daterange start="1864-04" stop="1865-05"/>
|
||||
</event>
|
||||
<event handle="_cfa045f559074cd25a6" change="1426803934" id="E0044">
|
||||
<type>Birth</type>
|
||||
<daterange start="1864-04-13" stop="1865-05-13"/>
|
||||
</event>
|
||||
<event handle="_cfa05eab109493097d1" change="1426803468" id="E0045">
|
||||
<type>Birth</type>
|
||||
<dateval val="1849" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa05fb82182cf228bc" change="1426803506" id="E0046">
|
||||
<type>Birth</type>
|
||||
<dateval val="1849-09" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa0604633236ff9d43" change="1426803535" id="E0047">
|
||||
<type>Birth</type>
|
||||
<dateval val="1849-09-13" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa060d09d433ae6313" change="1426803223" id="E0048">
|
||||
<type>Birth</type>
|
||||
<dateval val="1835" quality="calculated"/>
|
||||
</event>
|
||||
<event handle="_cfa062751af6a105a82" change="1426803248" id="E0049">
|
||||
<type>Birth</type>
|
||||
<dateval val="1835-05" quality="calculated"/>
|
||||
</event>
|
||||
<event handle="_cfa062e50d3096da9a5" change="1426803275" id="E0050">
|
||||
<type>Birth</type>
|
||||
<dateval val="1835-05-13" quality="calculated"/>
|
||||
</event>
|
||||
<event handle="_cfa063e88800cb80b33" change="1426803138" id="E0051">
|
||||
<type>Birth</type>
|
||||
<dateval val="1834" type="before" quality="calculated"/>
|
||||
</event>
|
||||
<event handle="_cfa064a6da37f0563f5" change="1426803166" id="E0052">
|
||||
<type>Birth</type>
|
||||
<dateval val="1834-04" type="before" quality="calculated"/>
|
||||
</event>
|
||||
<event handle="_cfa0654060124488afa" change="1426803189" id="E0053">
|
||||
<type>Birth</type>
|
||||
<dateval val="1834-04-13" type="before" quality="calculated"/>
|
||||
</event>
|
||||
<event handle="_cfa0670f11e1049f07b" change="1426803306" id="E0054">
|
||||
<type>Birth</type>
|
||||
<dateval val="1846" type="about" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa067a8bbe2900a40c" change="1426803330" id="E0055">
|
||||
<type>Birth</type>
|
||||
<dateval val="1846-06" type="about" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa0681c5085ac5e9e0" change="1426803354" id="E0056">
|
||||
<type>Birth</type>
|
||||
<dateval val="1846-06-13" type="about" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa069a50b23f6b87fa" change="1426803388" id="E0057">
|
||||
<type>Birth</type>
|
||||
<daterange start="1848" stop="1849" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa086bc43c31bcd49b" change="1426803415" id="E0058">
|
||||
<type>Birth</type>
|
||||
<daterange start="1848-08" stop="1849-09" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa0873e5170a315aea" change="1426803439" id="E0059">
|
||||
<type>Birth</type>
|
||||
<daterange start="1848-08-13" stop="1849-09-13" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa087488800cb80b33" change="1426803138" id="E0060">
|
||||
<type>Birth</type>
|
||||
<dateval val="1847" type="after" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa08756da37f0563f5" change="1426803166" id="E0061">
|
||||
<type>Birth</type>
|
||||
<dateval val="1847-07" type="after" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa0876060124488afa" change="1426803189" id="E0062">
|
||||
<type>Birth</type>
|
||||
<dateval val="1847-07-13" type="after" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa0877ffcb19aed9f7" change="1426804001" id="E0063">
|
||||
<type>Birth</type>
|
||||
<datespan start="1878" stop="1879" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa08785a0d52e9c63f" change="1426804044" id="E0064">
|
||||
<type>Birth</type>
|
||||
<datespan start="1878-08" stop="1879-09" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_cfa0879b49b7746d225" change="1426804087" id="E0065">
|
||||
<type>Birth</type>
|
||||
<datespan start="1878-08-13" stop="1879-09-13" quality="estimated"/>
|
||||
</event>
|
||||
<event handle="_d0545e83fa37336070a" change="1431629910" id="E0066">
|
||||
<type>Birth</type>
|
||||
<dateval val="1800-00-13"/>
|
||||
</event>
|
||||
</events>
|
||||
<people home="_ce00f22fdb926a87cdd">
|
||||
<person handle="_cde77b359d42a7abeb8" change="1426803052" id="I0000">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Before-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde77b2c30c13ea85db" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde77b89083519bcf0b" change="1426803077" id="I0001">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Before-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde77b7eff96ae8455f" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde77be591457afcffb" change="1426803099" id="I0002">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Before-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde77be2a67401f7b16" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde7b70f31a17456a2e" change="1426802978" id="I0003">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>After-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde7b70d22b30f00b14" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde7b8ed6cd11b5562e" change="1426803002" id="I0004">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>After-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde7b8eb90e0a8792a9" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde7b95ec952bc2b12d" change="1426803025" id="I0005">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>After-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde7b95cb7e40432538" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde7b9b4e9e5e81800d" change="1426802890" id="I0006">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>About-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde7b9b2b00713c42af" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde7b9f2d2e633055b9" change="1426802928" id="I0007">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>About-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde7b9f0da51d2ff10a" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cde7ba324d85d019053" change="1426802954" id="I0008">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>About-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cde7ba310240e18a0ea" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_ce00f22fdb926a87cdd" change="1426803678" id="I0009">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Normal-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_ce00f22be3443f0c30b" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_ce00f2aeb776bb53be5" change="1426803705" id="I0010">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Normal-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_ce00f2ab83911df5354" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_ce00f2eda384642791d" change="1426803733" id="I0011">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Normal-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_ce00f2eb2f86d94ece0" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa02ea21cf2c08d6e2" change="1426793828" id="I0014">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B01</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa02e904f161e652da" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa02f060870eef1f71" change="1426793996" id="I0015">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C01</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa02efc75b0eb05cfa" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa02f6db513f4e1c14" change="1426793845" id="I0016">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B02</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa02f60fbe55ad36f7" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa02fe4e8d3cad65e6" change="1426794012" id="I0017">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C02</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa02fd93615614dc94" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03042b93635f71a0" change="1426793861" id="I0018">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B03</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa030376d1228fb29b" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03092fb610f772ba" change="1426794027" id="I0019">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C03</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0308a9e766a18a5a" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0314a7de1852f830" change="1426794043" id="I0021">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C04</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0314208a175c695f" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa031e7f6333a37f87" change="1426793893" id="I0022">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B05</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa031df6bb2f50f9c5" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03248bae711cb306" change="1426793877" id="I0023">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B04</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0311ff9474a33dad" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa033674d813cb83fb" change="1426794060" id="I0024">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C05</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0335efcf6eeb6bf6" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03429a3506b90a17" change="1426793911" id="I0025">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B06</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0342171e10e9a0c8" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03471249305e11a3" change="1426793926" id="I0026">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B07</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa03468bc76cf7a295" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa034ba95d55bbb30d" change="1426793947" id="I0027">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B08</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa034b07c9408b12cc" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa035043d730daedcc" change="1426793965" id="I0028">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B09</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa034f8da44738c323" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03553f6327fb3aa3" change="1426793727" id="I0029">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B10</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa03547c3765017895" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa035a31fd38ced89e" change="1426793759" id="I0030">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B11</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa035965a02da81147" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa035f87450688702b" change="1426793794" id="I0031">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B12</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa035ee99b03f59cbc" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa038d6790220eb6a0" change="1426794095" id="I0032">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C06</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa038cce441e73b1c5" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa039412cf2c81aaa6" change="1426794139" id="I0033">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C07</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa039308b34bf173be" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0399d5b4296c09ed" change="1426794177" id="I0034">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C08</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0399114e40ffcadf" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03a00ae7431e3c10" change="1426794217" id="I0035">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C09</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa039f6e510c198300" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03a68a5e1f70d524" change="1426794260" id="I0036">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C10</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa03a5c2fe4ce6e75d" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03ab437d05844dc3" change="1426794291" id="I0037">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C11</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa03aabe141219bb22" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa03b0c1635ed179a5" change="1426794327" id="I0038">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C12</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa03afa2ac4d140d9d" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0425f40e5bd7f546" change="1426804005" id="I0039">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>SpanFrom-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0424ffcb19aed9f7" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0431254247adca83" change="1426804048" id="I0040">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>SpanFrom-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa042e5a0d52e9c63f" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0439de437d741e80" change="1426804091" id="I0041">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>SpanFrom-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0436b49b7746d225" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa044c262e1e5c8503" change="1426803860" id="I0042">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>RangeBetween-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa044b58de7b9a9759" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa04565ce470dcd2f8" change="1426803898" id="I0043">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>RangeBetween-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0454785d7f7fe074" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0460050935c9a427" change="1426803937" id="I0044">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>RangeBetween-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa045f559074cd25a6" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa05ec0033766aaf99" change="1426803473" id="I0045">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Estimated-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa05eab109493097d1" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa05fccf2c4051824b" change="1426803510" id="I0046">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Estimated-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa05fb82182cf228bc" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa060511337394614d" change="1426803539" id="I0047">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Estimated-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0604633236ff9d43" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa060e177361c262d1" change="1426803227" id="I0048">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Calculated-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa060d09d433ae6313" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0627d4346f5a6156" change="1426803252" id="I0049">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Calculated-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa062751af6a105a82" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa062f0f6d6be03ddb" change="1426803278" id="I0050">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Calculated-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa062e50d3096da9a5" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa063f5677702eaa46" change="1426803142" id="I0051">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Calculated-Before-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa063e88800cb80b33" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa064bb7630e608798" change="1426803169" id="I0052">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Calculated-Before-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa064a6da37f0563f5" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0654ca9f46930cc4" change="1426803193" id="I0053">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Calculated-Before-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0654060124488afa" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa06717fb57c27f756" change="1426803310" id="I0054">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Estimated-About-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0670f11e1049f07b" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa067b2e020880caf3" change="1426803333" id="I0055">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Estimated-About-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa067a8bbe2900a40c" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa068250bc3c821f3c" change="1426803357" id="I0056">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Estimated-About-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0681c5085ac5e9e0" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa069b80556bceaf0b" change="1426803392" id="I0057">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Estimated-RangeBetween-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa069a50b23f6b87fa" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa086c6e4e248b4ac6" change="1426803418" id="I0058">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Estimated-RangeBetween-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa086bc43c31bcd49b" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0874684b42b63ab7" change="1426803443" id="I0059">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Estimated-RangeBetween-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0873e5170a315aea" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa087580556bceaf0b" change="1426803392" id="I0060">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Estimated-After-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa087488800cb80b33" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa08766e4e248b4ac6" change="1426803418" id="I0061">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Estimated-After-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa08756da37f0563f5" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0877684b42b63ab7" change="1426803443" id="I0062">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Estimated-After-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0876060124488afa" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa087780556bceaf0b" change="1426803392" id="I0063">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>A</first>
|
||||
<surname>Estimated-SpanFrom-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0877ffcb19aed9f7" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa08786e4e248b4ac6" change="1426803418" id="I0064">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>B</first>
|
||||
<surname>Estimated-SpanFrom-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa08785a0d52e9c63f" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_cfa0879684b42b63ab7" change="1426803443" id="I0065">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>C</first>
|
||||
<surname>Estimated-SpanFrom-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_cfa0879b49b7746d225" role="Primary"/>
|
||||
</person>
|
||||
<person handle="_d0545e25fed7da2d864" change="1431629912" id="I0066">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Zero-Month</first>
|
||||
<surname>Month-Person</surname>
|
||||
</name>
|
||||
<eventref hlink="_d0545e83fa37336070a" role="Primary"/>
|
||||
</person>
|
||||
</people>
|
||||
</database>
|
File diff suppressed because it is too large
Load Diff
@@ -20,9 +20,9 @@
|
||||
# gen/__init__.py
|
||||
|
||||
"""
|
||||
The core gramps module provides the different packages
|
||||
The core gramps modules that provide the different packages
|
||||
|
||||
Plugins are loaded dynamically, so they the plugin directory is not included
|
||||
Plugins are loaded dynamically, so that plugin directory is not included
|
||||
"""
|
||||
|
||||
__all__ = ["gen", "cli", "gui"]
|
||||
|
@@ -34,7 +34,6 @@ Module responsible for handling the command line arguments for Gramps.
|
||||
# Standard python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -395,7 +394,7 @@ class ArgHandler(object):
|
||||
:param: climan: the manager of a CLI session
|
||||
:type: :class:`.CLIManager` object
|
||||
"""
|
||||
|
||||
# Handle the "-l" List Family Trees option.
|
||||
if self.list:
|
||||
print(_('List of known Family Trees in your database path\n'))
|
||||
|
||||
@@ -406,6 +405,7 @@ class ArgHandler(object):
|
||||
% {'full_DB_path' : dirname, 'f_t_name' : name})
|
||||
sys.exit(0)
|
||||
|
||||
# Handle the "-L" List Family Trees in detail option.
|
||||
if self.list_more:
|
||||
print(_('Gramps Family Trees:'))
|
||||
summary_list = self.dbman.family_tree_summary()
|
||||
@@ -415,28 +415,32 @@ class ArgHandler(object):
|
||||
for item in sorted(summary):
|
||||
if item != "Family Tree":
|
||||
# translators: needed for French, ignore otherwise
|
||||
print(_(" %s: %s") % (item, summary[item]))
|
||||
print(_(" %(item)s: %(summary)s") % {
|
||||
'item' : item,
|
||||
'summary' : summary[item] } )
|
||||
sys.exit(0)
|
||||
|
||||
# Handle the "-t" List Family Trees, tab delimited option.
|
||||
if self.list_table:
|
||||
print(_('Gramps Family Trees:'))
|
||||
summary_list = self.dbman.family_tree_summary()
|
||||
if not summary_list:
|
||||
sys.exit(0)
|
||||
print(_("Family Tree"), end="")
|
||||
# We have to construct the line elements together, to avoid
|
||||
# insertion of blank spaces when print on the same line is used
|
||||
line_list = [_("Family Tree")]
|
||||
for key in sorted(summary_list[0]):
|
||||
if key != "Family Tree":
|
||||
print("\t ", end="")
|
||||
print(key, end="")
|
||||
print()
|
||||
if key != _("Family Tree"):
|
||||
line_list += [key]
|
||||
print("\t".join(line_list))
|
||||
for summary in sorted(summary_list,
|
||||
key=lambda sum: sum[_("Family Tree")].lower()):
|
||||
print('"%s"' % summary[_("Family Tree")], end="")
|
||||
line_list = [(_('"%s"') % summary[_("Family Tree")])]
|
||||
for item in sorted(summary):
|
||||
if item != _("Family Tree"):
|
||||
print("\t ", end="")
|
||||
print('"%s"' % summary[item], end="")
|
||||
print()
|
||||
# translators: ignore unless your quotation marks differ
|
||||
line_list += [(_('"%s"') % summary[item])]
|
||||
print("\t".join(line_list))
|
||||
sys.exit(0)
|
||||
|
||||
self.__open_action()
|
||||
|
@@ -34,7 +34,6 @@ Module responsible for handling the command line arguments for Gramps.
|
||||
# Standard python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import print_function, unicode_literals
|
||||
import sys
|
||||
import getopt
|
||||
import logging
|
||||
|
@@ -30,18 +30,12 @@ creating, and deleting of databases.
|
||||
# Standard python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import io
|
||||
if sys.version_info[0] < 3:
|
||||
from urlparse import urlparse
|
||||
from urllib2 import urlopen, url2pathname
|
||||
else:
|
||||
from urllib.parse import urlparse
|
||||
from urllib.request import urlopen, url2pathname
|
||||
from urllib.parse import urlparse
|
||||
from urllib.request import urlopen, url2pathname
|
||||
import tempfile
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -63,7 +57,7 @@ _ = glocale.translation.gettext
|
||||
from gramps.gen.db import DbBsddb
|
||||
from gramps.gen.plug import BasePluginManager
|
||||
from gramps.gen.config import config
|
||||
from gramps.gen.constfunc import win, conv_to_unicode, UNITYPE
|
||||
from gramps.gen.constfunc import win, conv_to_unicode
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# constants
|
||||
@@ -144,10 +138,7 @@ class CLIDbManager(object):
|
||||
current DB.
|
||||
Returns ("Unknown", "Unknown", "Unknown") if invalid DB or other error.
|
||||
"""
|
||||
if config.get('preferences.use-bsddb3') or sys.version_info[0] >= 3:
|
||||
from bsddb3 import dbshelve, db
|
||||
else:
|
||||
from bsddb import dbshelve, db
|
||||
from bsddb3 import dbshelve, db
|
||||
|
||||
from gramps.gen.db import META, PERSON_TBL
|
||||
from gramps.gen.db.dbconst import BDBVERSFN
|
||||
@@ -517,6 +508,6 @@ def find_locker_name(dirpath):
|
||||
# feature request 2356: avoid genitive form
|
||||
last = _("Locked by %s") % username
|
||||
ifile.close()
|
||||
except (OSError, IOError):
|
||||
except (OSError, IOError, UnicodeDecodeError):
|
||||
last = _("Unknown")
|
||||
return last
|
||||
|
@@ -31,8 +31,6 @@ Provides also two small base classes: :class:`CLIDbLoader`, :class:`CLIManager`
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import print_function
|
||||
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
import os
|
||||
@@ -297,7 +295,10 @@ class CLIManager(object):
|
||||
# apply preferred researcher if loaded file has none
|
||||
res = self.dbstate.db.get_researcher()
|
||||
owner = get_researcher()
|
||||
if res.get_name() == "" and owner.get_name() != "":
|
||||
# If the DB Owner Info is empty and
|
||||
# [default] Researcher is not empty and
|
||||
# database is empty, then copy default researcher to DB owner
|
||||
if res.is_empty() and not owner.is_empty() and self.dbstate.db.is_empty():
|
||||
self.dbstate.db.set_researcher(owner)
|
||||
|
||||
name_displayer.set_name_format(self.dbstate.db.name_formats)
|
||||
|
@@ -32,7 +32,6 @@
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import print_function
|
||||
import traceback
|
||||
import os
|
||||
import sys
|
||||
@@ -60,7 +59,6 @@ from gramps.gen.plug.report import (CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_BOOK,
|
||||
from gramps.gen.plug.report._paper import paper_sizes
|
||||
from gramps.gen.const import USER_HOME
|
||||
from gramps.gen.dbstate import DbState
|
||||
from gramps.gen.constfunc import STRTYPE, conv_to_unicode_direct
|
||||
from ..grampscli import CLIManager
|
||||
from ..user import User
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
@@ -78,13 +76,13 @@ def _convert_str_to_match_type(str_val, type_val):
|
||||
str_val = str_val.strip()
|
||||
ret_type = type(type_val)
|
||||
|
||||
if isinstance(type_val, STRTYPE):
|
||||
if isinstance(type_val, str):
|
||||
if ( str_val.startswith("'") and str_val.endswith("'") ) or \
|
||||
( str_val.startswith('"') and str_val.endswith('"') ):
|
||||
# Remove enclosing quotes
|
||||
return conv_to_unicode_direct(str_val[1:-1])
|
||||
return str(str_val[1:-1])
|
||||
else:
|
||||
return conv_to_unicode_direct(str_val)
|
||||
return str(str_val)
|
||||
|
||||
elif ret_type == int:
|
||||
if str_val.isdigit():
|
||||
@@ -227,7 +225,7 @@ class CommandLineReport(object):
|
||||
self.raw_name = name
|
||||
self.option_class = option_class(name, database)
|
||||
if category == CATEGORY_GRAPHVIZ:
|
||||
# Need to include GraphViz options
|
||||
# Need to include Graphviz options
|
||||
self.__gvoptions = graphdoc.GVOptions()
|
||||
menu = self.option_class.menu
|
||||
self.__gvoptions.add_menu_options(menu)
|
||||
|
@@ -21,8 +21,6 @@
|
||||
|
||||
""" Unittest for argparser.py """
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import unittest
|
||||
from ..argparser import ArgParser
|
||||
import sys
|
||||
|
@@ -20,16 +20,13 @@
|
||||
|
||||
""" CLI tests for gramps """
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
import re
|
||||
import io
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
from gramps.gen.constfunc import cuni
|
||||
from gramps.gen.const import TEMP_DIR
|
||||
|
||||
test_ged = """0 HEAD
|
||||
@@ -43,13 +40,6 @@ test_ged = """0 HEAD
|
||||
0 TRLR
|
||||
"""
|
||||
|
||||
# see gramps.grampsapp.py
|
||||
## hack to avoid mentioning 'utf8' encoding everywhere unicode or str is is used
|
||||
if sys.version_info[0] < 3:
|
||||
reload(sys)
|
||||
sys.setdefaultencoding('utf8')
|
||||
##
|
||||
|
||||
ddir = os.path.dirname(__file__)
|
||||
min1r = os.path.join(ddir, "min1r.ged")
|
||||
out_ged = os.path.join(ddir, "test_out.ged")
|
||||
@@ -83,10 +73,11 @@ class Test(unittest.TestCase):
|
||||
# This tests the fix for bug #1331-1334
|
||||
# read trivial gedcom input, write gedcom output
|
||||
def test2_exec_CLI(self):
|
||||
pyexec = sys.executable
|
||||
ifile = min1r
|
||||
ofile = out_ged
|
||||
gcmd = "Gramps.py -i %s -e %s" % (ifile, ofile)
|
||||
process = subprocess.Popen("python %s" % gcmd,
|
||||
process = subprocess.Popen("%s %s" % (pyexec ,gcmd),
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE, shell=True)
|
||||
@@ -105,17 +96,21 @@ class Test(unittest.TestCase):
|
||||
# (eg cleanout stale files from prior crash-runs)
|
||||
def test3_files_in_import_dir(self):
|
||||
ddir = os.path.join(TEMP_DIR, "import_dbdir")
|
||||
os.makedirs(ddir)
|
||||
try:
|
||||
os.makedirs(ddir)
|
||||
except:
|
||||
pass
|
||||
bogofiles = [os.path.join(ddir, fn) for fn in ("family.db", "lock")]
|
||||
for fn in bogofiles:
|
||||
with io.open(fn, "w") as f:
|
||||
f.write("garbage")
|
||||
|
||||
# ~same as test 2
|
||||
pyexec = sys.executable
|
||||
ifile = min1r
|
||||
ofile = out_ged
|
||||
gcmd = "Gramps.py -i %s -e %s" % (ifile, ofile)
|
||||
process = subprocess.Popen("python %s" % gcmd,
|
||||
process = subprocess.Popen("%s %s" % (pyexec, gcmd),
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE, shell=True)
|
||||
@@ -128,28 +123,27 @@ class Test(unittest.TestCase):
|
||||
|
||||
class UnicodeTest(unittest.TestCase):
|
||||
|
||||
@unittest.skipIf(sys.version_info[0] < 3 and sys.platform == 'win32',
|
||||
"Python2 bsddb doesn't handle unicode paths")
|
||||
|
||||
def setUp(self):
|
||||
from gramps.cli.clidbman import CLIDbManager
|
||||
from gramps.gen.config import set as setconfig
|
||||
from gramps.gen.config import set as setconfig, get as getconfig
|
||||
from gramps.gen.dbstate import DbState
|
||||
self.newpath = os.path.join(os.path.dirname(__file__),
|
||||
cuni('\u0393\u03c1\u03b1\u03bc\u03c3\u03c0'))
|
||||
self.newtitle = cuni('Gr\u00e4mps T\u00e9st')
|
||||
'\u0393\u03c1\u03b1\u03bc\u03c3\u03c0')
|
||||
self.newtitle = 'Gr\u00e4mps T\u00e9st'
|
||||
os.makedirs(self.newpath)
|
||||
self.old_path = getconfig('behavior.database-path')
|
||||
setconfig('behavior.database-path', self.newpath)
|
||||
self.cli = CLIDbManager(DbState())
|
||||
|
||||
def tearDown(self):
|
||||
from gramps.gen.config import set as setconfig
|
||||
for (dirpath, dirnames, filenames) in os.walk(self.newpath, False):
|
||||
for afile in filenames:
|
||||
os.remove(os.path.join(dirpath, afile))
|
||||
for adir in dirnames:
|
||||
os.rmdir(os.path.join(dirpath, adir))
|
||||
os.rmdir(self.newpath)
|
||||
pass
|
||||
setconfig('behavior.database-path', self.old_path)
|
||||
|
||||
# Test that clidbman will open files in a path containing
|
||||
# arbitrary Unicode characters.
|
||||
|
@@ -21,8 +21,6 @@
|
||||
|
||||
""" Unittest for user.py """
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import unittest
|
||||
from .. import user
|
||||
from ...gen.test.user_test import TestUser
|
||||
|
@@ -22,14 +22,6 @@
|
||||
The User class provides basic interaction with the user.
|
||||
"""
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Python Modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from __future__ import print_function, unicode_literals
|
||||
import sys
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps Modules
|
||||
@@ -66,7 +58,7 @@ class User(user.User):
|
||||
user.User.__init__(self, callback, error)
|
||||
self.steps = 0;
|
||||
self.current_step = 0;
|
||||
self._input = raw_input if sys.version_info[0] < 3 else input
|
||||
self._input = input
|
||||
|
||||
def yes(*args):
|
||||
return True
|
||||
@@ -117,7 +109,7 @@ class User(user.User):
|
||||
"""
|
||||
self._fileout.write("\r100%\n")
|
||||
|
||||
def prompt(self, title, message, accept_label, reject_label):
|
||||
def prompt(self, title, message, accept_label, reject_label, parent=None):
|
||||
"""
|
||||
Prompt the user with a message to select an alternative.
|
||||
|
||||
|
@@ -150,7 +150,7 @@ register('behavior.surname-guessing', 0)
|
||||
register('behavior.use-tips', False)
|
||||
register('behavior.welcome', 100)
|
||||
register('behavior.web-search-url', 'http://google.com/#&q=%(text)s')
|
||||
register('behavior.addons-url', "http://svn.code.sf.net/p/gramps-addons/code/branches/gramps41/")
|
||||
register('behavior.addons-url', "https://raw.githubusercontent.com/gramps-project/addons/master/gramps42")
|
||||
|
||||
register('export.proxy-order', [
|
||||
["privacy", 0],
|
||||
@@ -169,9 +169,7 @@ register('geography.zoom', 0)
|
||||
register('geography.zoom_when_center', 12)
|
||||
register('geography.show_cross', False)
|
||||
register('geography.path', "")
|
||||
|
||||
register('htmlview.start-url', "http://gramps-project.org")
|
||||
register('htmlview.url-handler', False)
|
||||
register('geography.use-keypad', True)
|
||||
|
||||
register('interface.address-height', 450)
|
||||
register('interface.address-width', 650)
|
||||
@@ -212,7 +210,6 @@ register('interface.grampletbar-close', False)
|
||||
register('interface.height', 500)
|
||||
register('interface.ignore-gexiv2', False)
|
||||
register('interface.ignore-osmgpsmap', False)
|
||||
register('interface.ignore-webkit', False)
|
||||
register('interface.lds-height', 450)
|
||||
register('interface.lds-width', 600)
|
||||
register('interface.location-height', 250)
|
||||
@@ -272,6 +269,7 @@ register('interface.url-width', 600)
|
||||
register('interface.view', True)
|
||||
register('interface.width', 775)
|
||||
register('interface.surname-box-height', 150)
|
||||
register('interface.treemodel-cache-size', 1000)
|
||||
|
||||
register('paths.recent-export-dir', '')
|
||||
register('paths.recent-file', '')
|
||||
@@ -295,6 +293,11 @@ register('preferences.hide-ep-msg', False)
|
||||
register('preferences.invalid-date-format', "<b>%s</b>")
|
||||
register('preferences.iprefix', 'I%04d')
|
||||
register('preferences.name-format', 1)
|
||||
register('preferences.place-auto', True)
|
||||
register('preferences.place-number', False)
|
||||
register('preferences.place-reverse', False)
|
||||
register('preferences.place-restrict', 0)
|
||||
register('preferences.place-lang', '')
|
||||
register('preferences.patronimic-surname', False)
|
||||
register('preferences.no-given-text', "[%s]" % _("Missing Given Name"))
|
||||
register('preferences.no-record-text', "[%s]" % _("Missing Record"))
|
||||
@@ -313,7 +316,6 @@ register('preferences.sprefix', 'S%04d')
|
||||
register('preferences.use-last-view', False)
|
||||
register('preferences.last-view', '')
|
||||
register('preferences.last-views', [])
|
||||
register('preferences.use-bsddb3', False)
|
||||
register('preferences.family-relation-type', 3) # UNKNOWN
|
||||
register('preferences.age-display-precision', 1)
|
||||
register('preferences.color-gender-male-alive', '#b8cee6')
|
||||
@@ -343,7 +345,7 @@ register('researcher.researcher-phone', '')
|
||||
register('researcher.researcher-postal', '')
|
||||
register('researcher.researcher-state', '')
|
||||
|
||||
register('plugin.hiddenplugins', ['htmlview'])
|
||||
register('plugin.hiddenplugins', [])
|
||||
register('plugin.addonplugins', [])
|
||||
|
||||
#---------------------------------------------------------------
|
||||
|
@@ -25,8 +25,6 @@
|
||||
Provides constants for other modules
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Standard python modules
|
||||
@@ -49,7 +47,7 @@ from .constfunc import get_env_var, conv_to_unicode
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
PROGRAM_NAME = "Gramps"
|
||||
from ..version import VERSION, VERSION_TUPLE, major_version
|
||||
from gramps.version import VERSION, VERSION_TUPLE, major_version
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Standard GRAMPS Websites
|
||||
@@ -57,9 +55,14 @@ from ..version import VERSION, VERSION_TUPLE, major_version
|
||||
#-------------------------------------------------------------------------
|
||||
URL_HOMEPAGE = "http://gramps-project.org/"
|
||||
URL_MAILINGLIST = "http://sourceforge.net/mail/?group_id=25770"
|
||||
URL_BUGTRACKER = "http://bugs.gramps-project.org/bug_report_advanced_page.php"
|
||||
URL_BUGHOME = "http://bugs.gramps-project.org"
|
||||
URL_BUGTRACKER = "http://bugs.gramps-project.org/bug_report_page.php"
|
||||
URL_WIKISTRING = "http://gramps-project.org/wiki/index.php?title="
|
||||
URL_MANUAL_PAGE = "Gramps_%s_Wiki_Manual" % major_version
|
||||
URL_MANUAL_DATA = '%s_-_Entering_and_editing_data:_detailed' % URL_MANUAL_PAGE
|
||||
URL_MANUAL_SECT1 = '%s_-_part_1' % URL_MANUAL_DATA
|
||||
URL_MANUAL_SECT2 = '%s_-_part_2' % URL_MANUAL_DATA
|
||||
URL_MANUAL_SECT3 = '%s_-_part_3' % URL_MANUAL_DATA
|
||||
WIKI_FAQ = "FAQ"
|
||||
WIKI_KEYBINDINGS = "Gramps_%s_Wiki_Manual_-_Keybindings" % major_version
|
||||
WIKI_EXTRAPLUGINS= "%s_Addons" % major_version
|
||||
@@ -122,20 +125,15 @@ USER_DIRLIST = (USER_HOME, HOME_DIR, VERSION_DIR, ENV_DIR, TEMP_DIR, THUMB_DIR,
|
||||
# above this one, and that the plugins directory is below the root directory.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
# test for sys.frozen to detect a py2exe executable on Windows
|
||||
|
||||
if sys.version_info[0] < 3 and hasattr(sys, "frozen"):
|
||||
ROOT_DIR = os.path.abspath(os.path.dirname(unicode(sys.executable)))
|
||||
else:
|
||||
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(
|
||||
conv_to_unicode(__file__)), os.pardir))
|
||||
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(
|
||||
conv_to_unicode(__file__)), os.pardir))
|
||||
|
||||
sys.path.insert(0, ROOT_DIR)
|
||||
git_revision = get_git_revision(ROOT_DIR)
|
||||
if sys.platform == 'win32' and git_revision == "":
|
||||
git_revision = get_git_revision(os.path.split(ROOT_DIR)[1])
|
||||
#VERSION += git_revision
|
||||
VERSION += "-1"
|
||||
#VERSION += "-1"
|
||||
|
||||
#
|
||||
# Glade files
|
||||
@@ -192,7 +190,7 @@ GTK_GETTEXT_DOMAIN = 'gtk30'
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
COPYRIGHT_MSG = "© 2001-2006 Donald N. Allingham\n" \
|
||||
"© 2007-2014 The Gramps Developers"
|
||||
"© 2007-2015 The Gramps Developers"
|
||||
COMMENTS = _("Gramps\n (Genealogical Research and Analysis "
|
||||
"Management Programming System)\n"
|
||||
"is a personal genealogy program.")
|
||||
@@ -215,9 +213,6 @@ DOCUMENTERS = [
|
||||
'Alexander Roitman',
|
||||
]
|
||||
|
||||
TRANSLATORS = _('TRANSLATORS: Translate this to your '
|
||||
'name in your native language')
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Constants
|
||||
|
@@ -50,35 +50,11 @@ WINDOWS = ["Windows", "win32"]
|
||||
# Public Functions
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
#python 2 and 3 support, use correct conversion to unicode
|
||||
if sys.version_info[0] < 3:
|
||||
conv_to_unicode_direct = unicode
|
||||
STRTYPE = basestring
|
||||
UNITYPE = unicode
|
||||
else:
|
||||
conv_to_unicode_direct = str
|
||||
STRTYPE = str
|
||||
UNITYPE = str
|
||||
cuni = conv_to_unicode_direct
|
||||
def conv_to_unicode(x, y='utf8'):
|
||||
return x if x is None or isinstance(x, UNITYPE) else cuni(x, y) if y else cuni(x)
|
||||
|
||||
def uni_to_gui(x):
|
||||
'''
|
||||
In Py2 we need to convert strings to utf8 before passing them to
|
||||
Gtk functions.
|
||||
'''
|
||||
if sys.version_info[0] < 3 and isinstance(x, UNITYPE):
|
||||
return x.encode('utf8')
|
||||
else:
|
||||
return x
|
||||
return x if x is None or isinstance(x, str) else str(x, y) if y else str(x)
|
||||
|
||||
# handle in database is bytes, while internally Gramps wants unicode for py3
|
||||
if sys.version_info[0] < 3:
|
||||
handle2internal = lambda x: x
|
||||
else:
|
||||
handle2internal = lambda x: conv_to_unicode(x, 'utf-8')
|
||||
handle2internal = lambda x: conv_to_unicode(x, 'utf-8')
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -184,16 +160,6 @@ def get_env_var(name, default=None):
|
||||
if not name or not name in os.environ:
|
||||
return default
|
||||
|
||||
if sys.version_info[0] < 3 and win():
|
||||
name = unicode(name) # make sure string argument is unicode
|
||||
n = ctypes.windll.kernel32.GetEnvironmentVariableW(name, None, 0)
|
||||
if n==0:
|
||||
return default
|
||||
# n is number of codepoints
|
||||
buf = ctypes.create_unicode_buffer(n+1)
|
||||
ctypes.windll.kernel32.GetEnvironmentVariableW(name, buf, n)
|
||||
return buf.value
|
||||
|
||||
return os.environ[name]
|
||||
|
||||
def get_curr_dir():
|
||||
@@ -203,14 +169,4 @@ def get_curr_dir():
|
||||
an arbitrary unicode character in a path. This function uses the
|
||||
native GetCurrentDirectory function to return a unicode cwd.
|
||||
'''
|
||||
if not (sys.version_info[0] < 3 and win()):
|
||||
return os.getcwd()
|
||||
|
||||
n = ctypes.windll.kernel32.GetCurrentDirectoryW(0, None)
|
||||
if n == 0:
|
||||
return None
|
||||
buf = ctypes.create_unicode_buffer(n+1)
|
||||
ctypes.windll.kernel32.GetCurrentDirectoryW(n, buf)
|
||||
return buf.value
|
||||
|
||||
|
||||
return os.getcwd()
|
||||
|
@@ -22,8 +22,6 @@
|
||||
Class handling language-specific selection for date parser and displayer.
|
||||
"""
|
||||
|
||||
from __future__ import print_function, unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# set up logging
|
||||
@@ -50,7 +48,9 @@ from . import _date_es
|
||||
from . import _date_fi
|
||||
from . import _date_fr
|
||||
from . import _date_hr
|
||||
from . import _date_hu
|
||||
from . import _date_it
|
||||
from . import _date_ja
|
||||
from . import _date_lt
|
||||
from . import _date_nb
|
||||
from . import _date_nl
|
||||
@@ -62,6 +62,8 @@ from . import _date_sl
|
||||
from . import _date_sr
|
||||
from . import _date_sv
|
||||
from . import _date_uk
|
||||
from . import _date_zh_CN
|
||||
from . import _date_zh_TW
|
||||
|
||||
# Initialize global parser
|
||||
try:
|
||||
|
@@ -28,7 +28,6 @@ Arabic-specific classes for parsing and displaying dates.
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import unicode_literals
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@@ -67,9 +66,6 @@ class DateParserAR(DateParser):
|
||||
'حوالي.' : Date.MOD_ABOUT,
|
||||
'حوالي' : Date.MOD_ABOUT,
|
||||
}
|
||||
# in some languages some of above listed modifiers are after the date,
|
||||
# in that case the subclass should put them into this dictionary instead
|
||||
modifier_after_to_int = {}
|
||||
|
||||
islamic_to_int = {
|
||||
"محرّم" : 1, "محرّم الحرام" : 1,
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Bulgarian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -24,7 +24,7 @@
|
||||
"""
|
||||
Catalan-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Czech-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
@@ -164,7 +164,7 @@ class DateParserCZ(DateParser):
|
||||
|
||||
quality_to_int = {
|
||||
'přibližně' : Date.QUAL_ESTIMATED,
|
||||
'odhadované' : Date.QUAL_ESTIMATED,
|
||||
'odhadem' : Date.QUAL_ESTIMATED,
|
||||
'odh.' : Date.QUAL_ESTIMATED,
|
||||
'vypočteno' : Date.QUAL_CALCULATED,
|
||||
'vypočtené' : Date.QUAL_CALCULATED,
|
||||
@@ -173,6 +173,8 @@ class DateParserCZ(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._text2 = re.compile('(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
"(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
@@ -221,7 +223,9 @@ class DateDisplayCZ(DateDisplay):
|
||||
# this must agree with DateDisplayEn's "formats" definition
|
||||
# (since no locale-specific _display_gregorian exists, here)
|
||||
|
||||
def display(self, date):
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
def orig_display(self, date):
|
||||
"""
|
||||
Return a text string representing the date.
|
||||
"""
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Danish-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
German-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -24,7 +24,6 @@
|
||||
Greek-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
@@ -78,9 +77,6 @@ class DateParserEL(DateParser):
|
||||
'γυρ.' : Date.MOD_ABOUT,
|
||||
'~' : Date.MOD_ABOUT,
|
||||
}
|
||||
# in some languages some of above listed modifiers are after the date,
|
||||
# in that case the subclass should put them into this dictionary instead
|
||||
modifier_after_to_int = {}
|
||||
|
||||
bce = ["π.Χ.", "π.Κ.Χ.", "π.Κ.Ε.", "π.Χ" ]
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Spanish-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Finnish-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
@@ -98,7 +98,8 @@ class DateParserFI(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
# date, whitespace
|
||||
self._text2 = re.compile('(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._span = re.compile("(?P<start>.+)\s+(-)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
@@ -114,90 +115,68 @@ class DateDisplayFI(DateDisplay):
|
||||
"""
|
||||
Finnish language date display class.
|
||||
"""
|
||||
long_months = ("", "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu",
|
||||
"Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu",
|
||||
"Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu")
|
||||
|
||||
short_months = ("", "Tammi", "Helmi", "Maali", "Huhti", "Touko",
|
||||
"Kesäk", "Heinä", "Eloku", "Syysk", "Lokak", "Marra",
|
||||
"Joulu")
|
||||
|
||||
calendar = ("",
|
||||
"juliaaninen",
|
||||
"heprealainen",
|
||||
"ranskan v.",
|
||||
"persialainen",
|
||||
"islamilainen",
|
||||
"svensk"
|
||||
)
|
||||
|
||||
_qual_str = ("", "arviolta", "laskettuna")
|
||||
|
||||
_bce_str = "%s ekr."
|
||||
|
||||
formats = (
|
||||
"VVVV-KK-PP (ISO)",
|
||||
"PP.KK.VVVV"
|
||||
"PP.KK.VVVV",
|
||||
"Päivä Kuukausi Vuosi" # Day, full month name, year
|
||||
)
|
||||
# normally, this would agree with DateDisplayEn's "formats"
|
||||
# (since no locale-specific _display_gregorian exists, here),
|
||||
# but the locale-specific "display" (below) forces self.format = 1
|
||||
# this definition must agree with its "_display_calendar" method
|
||||
|
||||
def display(self, date):
|
||||
"""
|
||||
Return a text string representing the date.
|
||||
"""
|
||||
mod = date.get_modifier()
|
||||
qual = date.get_quality()
|
||||
cal = date.get_calendar()
|
||||
start = date.get_start_date()
|
||||
newyear = date.get_new_year()
|
||||
|
||||
if mod == Date.MOD_TEXTONLY:
|
||||
return date.get_text()
|
||||
if start == Date.EMPTY:
|
||||
return ""
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
# select numerical date format
|
||||
self.format = 1
|
||||
def _display_calendar(self, date_val, long_months, short_months = None,
|
||||
inflect=""):
|
||||
# this must agree with its locale-specific "formats" definition
|
||||
|
||||
if mod == Date.MOD_SPAN:
|
||||
d1 = self.display_cal[cal](start)
|
||||
d2 = self.display_cal[cal](date.get_stop_date())
|
||||
text = "%s - %s" % (d1, d2)
|
||||
elif mod == Date.MOD_RANGE:
|
||||
stop = date.get_stop_date()
|
||||
if start[0] == start[1] == 0 and stop[0] == 0 and stop[1] == 0:
|
||||
d1 = self.display_cal[cal](start)
|
||||
d2 = self.display_cal[cal](stop)
|
||||
text = "vuosien %s ja %s välillä" % (d1, d2)
|
||||
else:
|
||||
d1 = self.display_cal[cal](start)
|
||||
d2 = self.display_cal[cal](stop)
|
||||
text = "%s ja %s välillä" % (d1, d2)
|
||||
if short_months is None:
|
||||
# Let the short formats work the same as long formats
|
||||
short_months = long_months
|
||||
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
elif self.format == 1:
|
||||
# numerical
|
||||
value = self.dd_dformat01(date_val)
|
||||
# elif self.format == 4:
|
||||
else:
|
||||
text = self.display_cal[date.get_calendar()](start)
|
||||
if mod == Date.MOD_AFTER:
|
||||
text = text + " jälkeen"
|
||||
elif mod == Date.MOD_ABOUT:
|
||||
text = "noin " + text
|
||||
elif mod == Date.MOD_BEFORE:
|
||||
text = "ennen " + text
|
||||
# day month_name year
|
||||
value = self.dd_dformat04(date_val, inflect, long_months)
|
||||
if date_val[2] < 0:
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||
return self._bce_str % value
|
||||
else:
|
||||
return value
|
||||
|
||||
if qual:
|
||||
# prepend quality
|
||||
text = "%s %s" % (self._qual_str[qual], text)
|
||||
|
||||
if cal or newyear:
|
||||
# append calendar type
|
||||
scal = self.format_extras(cal, newyear)
|
||||
text = "%s %s" % (text, scal)
|
||||
|
||||
return text
|
||||
def dd_dformat04(self, date_val, inflect, long_months):
|
||||
"""
|
||||
day month_name year -- for Finnish locale
|
||||
"""
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
else:
|
||||
if inflect:
|
||||
return self.format_long_month_year(date_val[1], year,
|
||||
inflect, long_months)
|
||||
else:
|
||||
return "{long_month.f[IN]} {year}".format(
|
||||
long_month = long_months[date_val[1]],
|
||||
year = year)
|
||||
else:
|
||||
if not hasattr(long_months[date_val[1]], 'f'): # not a Lexeme
|
||||
return self.dd_dformat01(date_val) # maybe the month is zero
|
||||
return "{day:d}. {long_month.f[P]} {year}".format(
|
||||
day = date_val[0],
|
||||
long_month = long_months[date_val[1]],
|
||||
year = year)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('fi_FI', 'fi', 'finnish', 'Finnish'), DateParserFI, DateDisplayFI)
|
||||
register_datehandler(('fi_FI', 'fi', 'finnish', 'Finnish'),
|
||||
DateParserFI, DateDisplayFI)
|
||||
|
@@ -21,16 +21,15 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
"""
|
||||
French-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
"""
|
||||
French-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
@@ -26,7 +26,7 @@
|
||||
"""
|
||||
Croatian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
@@ -57,8 +57,7 @@ class DateParserHR(DateParser):
|
||||
'po. ' : Date.MOD_AFTER,
|
||||
'okolo' : Date.MOD_ABOUT,
|
||||
'ok. ' : Date.MOD_ABOUT,
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
'približno' : Date.QUAL_ESTIMATED,
|
||||
@@ -75,20 +74,20 @@ class DateParserHR(DateParser):
|
||||
compiles regular expression strings for matching dates
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
#~ DateParser.calendar_to_int.update({
|
||||
#~ 'персидский' : Date.CAL_PERSIAN,
|
||||
#~ 'п' : Date.CAL_PERSIAN,
|
||||
#~ })
|
||||
_span_1 = ['od']
|
||||
_span_2 = ['do']
|
||||
_range_1 = ['između']
|
||||
_range_2 = ['i']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
# match 'Day. MONTH year.' format with or without dots
|
||||
self._text2 = re.compile('(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*\.?$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
|
||||
|
||||
# match Day.Month.Year.
|
||||
self._numeric = re.compile(
|
||||
"((\d+)[/\. ])?\s*((\d+)[/\.])?\s*(\d+)\.?$")
|
||||
#"((\d+)[/\.]\s*)?((\d+)[/\.]\s*)?(\d+)\s*$")
|
||||
self._span = re.compile(
|
||||
"(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'\
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -105,6 +104,47 @@ class DateDisplayHR(DateDisplay):
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
"""
|
||||
numerical
|
||||
"""
|
||||
if date_val[3]:
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
return str(date_val[2]) + '.'
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%Y', str(abs(date_val[2])))
|
||||
return value
|
||||
|
||||
def dd_dformat04(self, date_val, inflect, long_months):
|
||||
"""
|
||||
day month_name year
|
||||
|
||||
this must agree with DateDisplayEn's "formats" definition
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
|
||||
_ = self._locale.translation.sgettext
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year + '.'
|
||||
else:
|
||||
return self.format_long_month_year(date_val[1], year,
|
||||
inflect, long_months)
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{day:d} {long_month} {year}").format(
|
||||
day = date_val[0],
|
||||
long_month = self.format_long_month(date_val[1],
|
||||
inflect, long_months).replace(' .', ''),
|
||||
year = year)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
|
368
gramps/gen/datehandler/_date_hu.py
Normal file
368
gramps/gen/datehandler/_date_hu.py
Normal file
@@ -0,0 +1,368 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2015 Lajos Nemeséri <nemeseril@gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
"""
|
||||
Hungarian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Hungarian parser
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserHU(DateParser):
|
||||
|
||||
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
month_to_int["-"]=0 #to make the Zero month to work
|
||||
|
||||
month_to_int["január"] = 1
|
||||
month_to_int["jan"] = 1
|
||||
month_to_int["jan."] = 1
|
||||
month_to_int["I"] = 1
|
||||
# month_to_int["i"] = 1
|
||||
|
||||
month_to_int["február"] = 2
|
||||
month_to_int["feb"] = 2
|
||||
month_to_int["feb."] = 2
|
||||
month_to_int["II"] = 2
|
||||
# month_to_int["ii"] = 2
|
||||
|
||||
month_to_int["március"] = 3
|
||||
month_to_int["márc"] = 3
|
||||
month_to_int["márc."] = 3
|
||||
month_to_int["III"] = 3
|
||||
# month_to_int["iii"] = 3
|
||||
|
||||
month_to_int["április"] = 4
|
||||
month_to_int["ápr"] = 4
|
||||
month_to_int["ápr."] = 4
|
||||
month_to_int["IV"] = 4
|
||||
# month_to_int["iv"] = 4
|
||||
|
||||
month_to_int["május"] = 5
|
||||
month_to_int["máj"] = 5
|
||||
month_to_int["máj."] = 5
|
||||
month_to_int["V"] = 5
|
||||
# month_to_int["v"] = 5
|
||||
|
||||
month_to_int["június"] = 6
|
||||
month_to_int["jún"] = 6
|
||||
month_to_int["jún."] = 6
|
||||
month_to_int["VI"] = 6
|
||||
# month_to_int["vi"] = 6
|
||||
|
||||
month_to_int["július"] = 7
|
||||
month_to_int["júl"] = 7
|
||||
month_to_int["júl."] = 7
|
||||
month_to_int["VII"] = 7
|
||||
# month_to_int["vii"] = 7
|
||||
|
||||
month_to_int["augusztus"] = 8
|
||||
month_to_int["aug"] = 8
|
||||
month_to_int["aug."] = 8
|
||||
month_to_int["VIII"] = 8
|
||||
# month_to_int["viii"] = 8
|
||||
|
||||
month_to_int["szeptember"] = 9
|
||||
month_to_int["szept"] = 9
|
||||
month_to_int["szept."] = 9
|
||||
month_to_int["IX"] = 9
|
||||
# month_to_int["ix"] = 9
|
||||
|
||||
month_to_int["október"] = 10
|
||||
month_to_int["okt"] = 10
|
||||
month_to_int["okt."] = 10
|
||||
month_to_int["X"] = 10
|
||||
# month_to_int["x"] = 10
|
||||
|
||||
month_to_int["november"] = 11
|
||||
month_to_int["nov"] = 11
|
||||
month_to_int["nov."] = 11
|
||||
month_to_int["XI"] = 11
|
||||
# month_to_int["xi"] = 11
|
||||
|
||||
month_to_int["december"] = 12
|
||||
month_to_int["dec"] = 12
|
||||
month_to_int["dec."] = 12
|
||||
month_to_int["XII"] = 12
|
||||
# month_to_int["xii"] = 12
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
#
|
||||
# Alternative and latin names - not verified
|
||||
#
|
||||
#-----------------------------------------------------------------------
|
||||
# Other common latin names
|
||||
|
||||
# month_to_int["januaris"] = 01
|
||||
# month_to_int["januarii"] = 01
|
||||
# month_to_int["januarius"] = 01
|
||||
# month_to_int["februaris"] = 02
|
||||
# month_to_int["februarii"] = 02
|
||||
# month_to_int["februarius"] = 02
|
||||
# month_to_int["martii"] = 03
|
||||
# month_to_int["martius"] = 03
|
||||
# month_to_int["aprilis"] = 04
|
||||
# month_to_int["maius"] = 05
|
||||
# month_to_int["maii"] = 05
|
||||
# month_to_int["junius"] = 06
|
||||
# month_to_int["junii"] = 06
|
||||
# month_to_int["julius"] = 07
|
||||
# month_to_int["julii"] = 07
|
||||
# month_to_int["augustus"] = 08
|
||||
# month_to_int["augusti"] = 08
|
||||
# month_to_int["septembris"] = 09
|
||||
# month_to_int["7bris"] = 09
|
||||
# month_to_int["september"] = 09
|
||||
# month_to_int["october"] = 10
|
||||
# month_to_int["octobris"] = 10
|
||||
# month_to_int["8bris"] = 10
|
||||
# month_to_int["novembris"] = 11
|
||||
# month_to_int["9bris"] = 11
|
||||
# month_to_int["november"] = 11
|
||||
# month_to_int["decembris"] = 12
|
||||
# month_to_int["10bris"] = 12
|
||||
# month_to_int["xbris"] = 12
|
||||
# month_to_int["december"] = 12
|
||||
|
||||
# old Hungarian names
|
||||
|
||||
# month_to_int["Boldogasszony hava"] = 01
|
||||
# month_to_int["Fergeteg hava"] = 01
|
||||
# month_to_int["Böjtelő hava"] = 02
|
||||
# month_to_int["Jégbontó hava"] = 02
|
||||
# month_to_int["Böjtmás hava"] = 03
|
||||
# month_to_int["Kikelet hava"] = 03
|
||||
# month_to_int["Szent György hava"] = 04
|
||||
# month_to_int["Szelek hava"] = 04
|
||||
# month_to_int["Pünkösd hava"] = 05
|
||||
# month_to_int["Ígéret hava"] = 05
|
||||
# month_to_int["Szent Iván hava"] = 06
|
||||
# month_to_int["Napisten hava"] = 06
|
||||
# month_to_int["Szent Jakab hava"] = 07
|
||||
# month_to_int["Áldás hava"] = 07
|
||||
# month_to_int["Kisasszony hava"] = 08
|
||||
# month_to_int["Újkenyér hava"] = 08
|
||||
# month_to_int["Szent Mihály hava"] = 09
|
||||
# month_to_int["Földanya hava"] = 09
|
||||
# month_to_int["Mindszent hava"] = 10
|
||||
# month_to_int["Magvető hava"] = 10
|
||||
# month_to_int["Szent András hava"] = 11
|
||||
# month_to_int["Enyészet hava"] = 11
|
||||
# month_to_int["Karácsony hava"] = 12
|
||||
# month_to_int["Álom hava"] = 12
|
||||
|
||||
modifier_after_to_int={
|
||||
'előtt' : Date.MOD_BEFORE,
|
||||
'körül' : Date.MOD_ABOUT,
|
||||
'után' : Date.MOD_AFTER,
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
'becsült' : Date.QUAL_ESTIMATED,
|
||||
'hozzávetőleg' : Date.QUAL_ESTIMATED,
|
||||
'becs.' : Date.QUAL_ESTIMATED,
|
||||
'számított' : Date.QUAL_CALCULATED,
|
||||
'körülbelül' : Date.QUAL_ESTIMATED,
|
||||
'számolt' : Date.QUAL_CALCULATED,
|
||||
'szám.' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
bce = ["időszámításunk előtt", "időszámítás előtt", "i. e.",
|
||||
"Krisztus előtt", "Krisztus előtti", "Kr. e."] + DateParser.bce
|
||||
|
||||
|
||||
calendar_to_int = {
|
||||
'Gergely' : Date.CAL_GREGORIAN,
|
||||
'Julián' : Date.CAL_JULIAN,
|
||||
'héber' : Date.CAL_HEBREW,
|
||||
'iszlám' : Date.CAL_ISLAMIC,
|
||||
'francia köztársasági' : Date.CAL_FRENCH,
|
||||
'perzsa' : Date.CAL_PERSIAN,
|
||||
'svéd' : Date.CAL_SWEDISH,
|
||||
}
|
||||
|
||||
|
||||
def init_strings(self):
|
||||
# Compiles regular expression strings for matching dates
|
||||
DateParser.init_strings(self)
|
||||
|
||||
self._numeric = re.compile(
|
||||
"((\d+)[/\.])?\s*((\d+)[/\.])?\s*(\d+)[/\. ]?$")
|
||||
self._text2 = re.compile('((\d+)(/\d+)?\.)?\s+?%s\.?\s*(\d+\.)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
_span_1 = ['-tó\(ő\)l', '-tól', '-től']
|
||||
_span_2 = ['-ig']
|
||||
_range_1 = ['és']
|
||||
_range_2 = ['között']
|
||||
self._span = re.compile("(?P<start>.+)(%s)\s+(?P<stop>.+)(%s)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(?P<start>.+)\s+(%s)\s+(?P<stop>.+)\s+(%s)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
|
||||
def _get_int(self, val):
|
||||
"""
|
||||
Convert the string to an integer if the value is not None. If the
|
||||
value is None, a zero is returned
|
||||
"""
|
||||
if val is None:
|
||||
return 0
|
||||
else:
|
||||
return int(val.replace('.', ''))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Hungarian display
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateDisplayHU(DateDisplay):
|
||||
"""
|
||||
Hungarian language date display class.
|
||||
"""
|
||||
|
||||
_bce_str = "i. e. %s"
|
||||
|
||||
roman_months=(
|
||||
"-.", "I.", "II.", "III.", "IV.", "V.", "VI.",
|
||||
"VII.", "VIII.", "IX.", "X.", "XI.", "XII."
|
||||
)
|
||||
|
||||
formats = (
|
||||
"ÉÉÉÉ-HH-NN (ISO)", # 0
|
||||
"Alapértelmezett éééé. hh. nn.", # 1
|
||||
"Év hónap nap", # year, full month name, day # 2
|
||||
"Év hó nap", #year, short month name, day # 3
|
||||
"Év római h.sz. nap" #year, Roman number, day # 4
|
||||
)
|
||||
# this definition must agree with its "_display_calendar" method
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
def _display_calendar(self, date_val, long_months, short_months = None,
|
||||
inflect=""):
|
||||
# this must agree with its locale-specific "formats" definition
|
||||
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
|
||||
if short_months is None:
|
||||
# Let the short formats work the same as long formats
|
||||
short_months = long_months
|
||||
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
|
||||
elif self.format == 1:
|
||||
# Base defined Hungarian form
|
||||
if date_val[3]:
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
if date_val[0]==0: #No day
|
||||
if date_val[1]==0: #No month -> year
|
||||
value="%s" % year
|
||||
else:
|
||||
value="%s. %02d." % (year, date_val[1]) #If no day -> year, month
|
||||
else:
|
||||
value="%s. %02d. %02d." % (year, date_val[1], date_val[0])
|
||||
|
||||
elif self.format == 2:
|
||||
# year, full month name, day
|
||||
|
||||
if date_val[0]==0:
|
||||
if date_val[1]==0:
|
||||
value="%s" % year
|
||||
else:
|
||||
value="%s. %s" % (year, self.long_months[date_val[1]]) #If no day -> year, month
|
||||
else:
|
||||
if date_val[1]==0:
|
||||
value="%s. %s %02d." % (year, '-', date_val[0]) #To indicate somehow if the month is missing
|
||||
else:
|
||||
value="%s. %s %02d." % (year, self.long_months[date_val[1]], date_val[0])
|
||||
|
||||
|
||||
elif self.format == 3:
|
||||
#year, short month name, day
|
||||
|
||||
if date_val[0]==0:
|
||||
if date_val[1]==0:
|
||||
value="%s" % year
|
||||
else:
|
||||
value="%s. %s" % (year, self.short_months[date_val[1]]) #If no day -> year, month
|
||||
else:
|
||||
if date_val[1]==0:
|
||||
value="%s. %s %02d." % (year, '-.', date_val[0]) #To indicate somehow if the month is missing
|
||||
else:
|
||||
value="%s. %s %02d." % (year, self.short_months[date_val[1]], date_val[0])
|
||||
|
||||
|
||||
elif self.format == 4:
|
||||
#year, Roman number, day
|
||||
|
||||
if date_val[0]==0:
|
||||
if date_val[1]==0:
|
||||
value="%s" % year
|
||||
else:
|
||||
value="%s. %s" % (year, self.roman_months[date_val[1]]) #If no day -> year, month
|
||||
else:
|
||||
value="%s. %s %02d." % (year, self.roman_months[date_val[1]], date_val[0])
|
||||
|
||||
|
||||
else:
|
||||
# day month_name year
|
||||
value = self.dd_dformat04(date_val, inflect, long_months)
|
||||
|
||||
if date_val[2] < 0:
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||
return self._bce_str % value
|
||||
else:
|
||||
return value
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('hu_HU', 'hu', 'hungarian', 'Hungarian', 'magyar'),
|
||||
DateParserHU, DateDisplayHU)
|
@@ -24,7 +24,7 @@
|
||||
"""
|
||||
Italian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
269
gramps/gen/datehandler/_date_ja.py
Normal file
269
gramps/gen/datehandler/_date_ja.py
Normal file
@@ -0,0 +1,269 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2014 Mathieu MD <mathieu.md@gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
|
||||
"""
|
||||
Japanese-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
from . import _grampslocale
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Japanese parser
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserJA(DateParser):
|
||||
"""
|
||||
Convert a text string into a Date object. If the date cannot be
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
# modifiers before the date
|
||||
modifier_to_int = {
|
||||
'以前' : Date.MOD_BEFORE,
|
||||
'以降' : Date.MOD_AFTER,
|
||||
'頃' : Date.MOD_ABOUT,
|
||||
'ごろ' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
quality_to_int = {
|
||||
'およそ' : Date.QUAL_ESTIMATED,
|
||||
'ごろ' : Date.QUAL_ESTIMATED,
|
||||
'位' : Date.QUAL_ESTIMATED,
|
||||
'計算上' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
bce = ["紀元前", "BC"] + DateParser.bce
|
||||
|
||||
def init_strings(self):
|
||||
"""
|
||||
This method compiles regular expression strings for matching dates.
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
|
||||
DateParser.calendar_to_int.update({
|
||||
'グレゴリオ暦' : Date.CAL_GREGORIAN,
|
||||
'g' : Date.CAL_GREGORIAN,
|
||||
'ユリウス暦' : Date.CAL_JULIAN,
|
||||
'j' : Date.CAL_JULIAN,
|
||||
'ユダヤ暦' : Date.CAL_HEBREW,
|
||||
'h' : Date.CAL_HEBREW,
|
||||
'ヒジュラ暦' : Date.CAL_ISLAMIC,
|
||||
'i' : Date.CAL_ISLAMIC,
|
||||
'フランス革命暦' : Date.CAL_FRENCH,
|
||||
'共和暦' : Date.CAL_FRENCH,
|
||||
'f' : Date.CAL_FRENCH,
|
||||
'イラン暦' : Date.CAL_PERSIAN,
|
||||
'p' : Date.CAL_PERSIAN,
|
||||
'スウェーデン暦' : Date.CAL_SWEDISH,
|
||||
's' : Date.CAL_SWEDISH,
|
||||
})
|
||||
|
||||
DateParser.month_to_int.update({
|
||||
"一月" : 1,
|
||||
"ichigatsu" : 1,
|
||||
"睦月" : 1,
|
||||
"mutsuki" : 1,
|
||||
"二月" : 2,
|
||||
"nigatsu" : 2,
|
||||
"如月" : 2,
|
||||
"kisaragi" : 2,
|
||||
"衣更着" : 2,
|
||||
"kinusaragi" : 2,
|
||||
"三月" : 3,
|
||||
"sangatsu" : 3,
|
||||
"弥生" : 3,
|
||||
"yayoi" : 3,
|
||||
"四月" : 4,
|
||||
"shigatsu" : 4,
|
||||
"卯月" : 4,
|
||||
"uzuki" : 4,
|
||||
"五月" : 5,
|
||||
"gogatsu" : 5,
|
||||
"皐月" : 5,
|
||||
"satsuki" : 5,
|
||||
"早苗月" : 5,
|
||||
"sanaetsuki" : 5,
|
||||
"六月" : 6,
|
||||
"rokugatsu" : 6,
|
||||
"水無月" : 6,
|
||||
"minazuki" : 6,
|
||||
"七月" : 7,
|
||||
"shichigatsu" : 7,
|
||||
"文月" : 7,
|
||||
"fumizuki" : 7,
|
||||
"八月" : 8,
|
||||
"hachigatsu" : 8,
|
||||
"葉月" : 8,
|
||||
"hazuki" : 8,
|
||||
"九月" : 9,
|
||||
"kugatsu" : 9,
|
||||
"長月" : 9,
|
||||
"nagatsuki" : 9,
|
||||
"十月" : 10,
|
||||
"jugatsu" : 10,
|
||||
"jūgatsu" : 10,
|
||||
"juugatsu" : 10,
|
||||
"神無月" : 10,
|
||||
"kannazuki" : 10,
|
||||
"kaminazuki" : 10,
|
||||
"神有月" : 10,
|
||||
"神在月" : 10,
|
||||
"kamiarizuki" : 10,
|
||||
"十一月" : 11,
|
||||
"juichigatsu" : 11,
|
||||
"jūichigatsu" : 11,
|
||||
"juuichigatsu" : 11,
|
||||
"霜月" : 11,
|
||||
"shimotsuki" : 11,
|
||||
"十二月" : 12,
|
||||
"junigatsu" : 12,
|
||||
"jūnigatsu" : 12,
|
||||
"juunigatsu" : 12,
|
||||
"師走" : 12,
|
||||
"shiwasu" : 12,
|
||||
})
|
||||
|
||||
_span_1 = ['から', '~', '〜']
|
||||
_span_2 = ['まで', '']
|
||||
_range_1 = ['から', 'と', '~', '〜']
|
||||
_range_2 = ['までの間', 'の間']
|
||||
self._span = re.compile("(?P<start>.+)(%s)(?P<stop>\d+)(%s)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(?P<start>.+)(%s)(?P<stop>.+)(%s)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Japanese display
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateDisplayJA(DateDisplay):
|
||||
"""
|
||||
Japanese language date display class.
|
||||
"""
|
||||
|
||||
# Specify what is actually the "System Default".
|
||||
_locale_tformat = _grampslocale.tformat
|
||||
_locale_tformat = _locale_tformat.replace('%d', "31")
|
||||
_locale_tformat = _locale_tformat.replace('%m', "12")
|
||||
_locale_tformat = _locale_tformat.replace('%Y', "1999")
|
||||
|
||||
# This definition must agree with its "_display_gregorian" method
|
||||
formats = ("YYYY-MM-DD (ISO)", # 0
|
||||
"システムデフォールト (" + _locale_tformat + ")", # 1
|
||||
"1999年12月31日", # 2
|
||||
"1999年十二月31日", # 3
|
||||
)
|
||||
|
||||
def _display_gregorian(self, date_val, **kwargs):
|
||||
"""
|
||||
display gregorian calendar date in different format
|
||||
"""
|
||||
# this must agree with its locale-specific "formats" definition
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if self.format == 0:
|
||||
# ISO
|
||||
return self.display_iso(date_val)
|
||||
|
||||
elif self.format == 1:
|
||||
# System Default
|
||||
if date_val[2] < 0 or date_val[3]:
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
value = str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
if date_val[0] == 0: # ignore the zero day and its delimiter
|
||||
i_day = value.find('%d')
|
||||
value = value.replace(value[i_day:i_day+3], '')
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%Y', str(date_val[2]))
|
||||
|
||||
elif self.format == 2:
|
||||
# 1999年12月31日
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = "%s年" % year
|
||||
else:
|
||||
value = "%s年%s" % (year,
|
||||
self.short_months[date_val[1]])
|
||||
else:
|
||||
value = "%s年%s%s日" % (year,
|
||||
self.short_months[date_val[1]],
|
||||
date_val[0])
|
||||
|
||||
elif self.format == 3:
|
||||
# 1999年十二月31日
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = "%s年" % year
|
||||
else:
|
||||
value = "%s年%s" % (year,
|
||||
self.long_months[date_val[1]])
|
||||
else:
|
||||
value = "%s年%s%s日" % (year,
|
||||
self.long_months[date_val[1]],
|
||||
date_val[0])
|
||||
|
||||
else:
|
||||
return self.display_iso(date_val)
|
||||
|
||||
if date_val[2] < 0:
|
||||
return self._bce_str % value
|
||||
else:
|
||||
return value
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('ja_JP', 'ja', 'japanese', 'Japanese'),
|
||||
DateParserJA, DateDisplayJA)
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Lithuanian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
@@ -130,6 +130,8 @@ class DateParserLT(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._text2 = re.compile('((\d+)(/\d+)?)?\s+?m\.\s+%s\s*(\d+)?\s*d?\.?$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
_span_1 = ['nuo']
|
||||
_span_2 = ['iki']
|
||||
_range_1 = ['tarp']
|
||||
@@ -141,27 +143,6 @@ class DateParserLT(DateParser):
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# FIXME: oficial long date format (ex, 2011 m. vasario 4 d.)
|
||||
# is not recognized correctly:
|
||||
# with self._text2 - day is recognized as year, year - as day
|
||||
# with self._iso - month not recognized, day recognized,
|
||||
# year increased by 1, date treated as double
|
||||
# TODO: in _DateParser.py in _parse_calendar modify groups
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# # gregorian and julian
|
||||
#
|
||||
# self._text2 = re.compile('(\d+)?\s*?m\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*?d?\.?' %
|
||||
# self._mon_str, re.IGNORECASE)
|
||||
#
|
||||
# self._iso = re.compile('(\d+)(/\d+)?\s*?m?\.?\s+?%s\.?\s*((\d+))?\s*?d?\.?' %
|
||||
# self._mon_str, re.IGNORECASE)
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Lithuanian displayer
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Norwegian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -28,7 +28,6 @@
|
||||
"""
|
||||
Dutch-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
@@ -25,7 +25,7 @@
|
||||
"""
|
||||
Polish-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -24,7 +24,7 @@
|
||||
"""
|
||||
Portuguese-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Russian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
@@ -119,6 +119,23 @@ class DateDisplayRU(DateDisplay):
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
def dd_dformat04(self, date_val, inflect, long_months):
|
||||
"""
|
||||
day month_name year -- for Russian locale
|
||||
"""
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
else:
|
||||
return self.format_long_month_year(date_val[1], year,
|
||||
inflect, long_months)
|
||||
else:
|
||||
return "{day:d} {long_month.f[Р]} {year}".format(
|
||||
day = date_val[0],
|
||||
long_month = long_months[date_val[1]],
|
||||
year = year)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Slovak-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -22,7 +22,7 @@
|
||||
# Slovenian version 2010 by Bernard Banko, based on croatian one by Josip
|
||||
|
||||
"""
|
||||
Slovenian-specific classes for parsing and displaying dates.
|
||||
Slovenian-specific classes for parsing and displaying dates - new framework.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
#-------------------------------------------------------------------------
|
||||
@@ -51,79 +51,6 @@ class DateParserSL(DateParser):
|
||||
"""
|
||||
Converts a text string into a Date object
|
||||
"""
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
month_to_int["januar"] = 1
|
||||
month_to_int["januarja"] = 1
|
||||
month_to_int["januarjem"] = 1
|
||||
month_to_int["jan"] = 1
|
||||
month_to_int["i"] = 1
|
||||
|
||||
month_to_int["februar"] = 2
|
||||
month_to_int["februarjem"] = 2
|
||||
month_to_int["februarja"] = 2
|
||||
month_to_int["feb"] = 2
|
||||
month_to_int["ii"] = 2
|
||||
|
||||
month_to_int["mar"] = 3
|
||||
month_to_int["marcem"] = 3
|
||||
month_to_int["marec"] = 3
|
||||
month_to_int["marca"] = 3
|
||||
month_to_int["iii"] = 3
|
||||
|
||||
month_to_int["apr"] = 4
|
||||
month_to_int["april"] = 4
|
||||
month_to_int["aprilom"] = 4
|
||||
month_to_int["aprila"] = 4
|
||||
month_to_int["iv"] = 4
|
||||
|
||||
month_to_int["maj"] = 5
|
||||
month_to_int["maja"] = 5
|
||||
month_to_int["majem"] = 5
|
||||
month_to_int["v"] = 5
|
||||
|
||||
month_to_int["jun"] = 6
|
||||
month_to_int["junij"] = 6
|
||||
month_to_int["junijem"] = 6
|
||||
month_to_int["junija"] = 6
|
||||
month_to_int["vi"] = 6
|
||||
|
||||
month_to_int["jul"] = 7
|
||||
month_to_int["julij"] = 7
|
||||
month_to_int["julijem"] = 7
|
||||
month_to_int["julija"] = 7
|
||||
month_to_int["vii"] = 7
|
||||
|
||||
month_to_int["avg"] = 8
|
||||
month_to_int["avgust"] = 8
|
||||
month_to_int["avgustom"] = 8
|
||||
month_to_int["avgusta"] = 8
|
||||
month_to_int["viii"] = 8
|
||||
|
||||
month_to_int["sep"] = 9
|
||||
month_to_int["sept"] = 9
|
||||
month_to_int["september"] = 9
|
||||
month_to_int["septembrom"] = 9
|
||||
month_to_int["septembra"] = 9
|
||||
month_to_int["ix"] = 9
|
||||
|
||||
month_to_int["okt"] = 10
|
||||
month_to_int["oktober"] = 10
|
||||
month_to_int["oktobrom"] = 10
|
||||
month_to_int["oktobra"] = 10
|
||||
month_to_int["x"] = 10
|
||||
|
||||
month_to_int["nov"] = 11
|
||||
month_to_int["november"] = 11
|
||||
month_to_int["novembrom"] = 11
|
||||
month_to_int["novembra"] = 11
|
||||
month_to_int["xi"] = 11
|
||||
|
||||
month_to_int["dec"] = 12
|
||||
month_to_int["december"] = 12
|
||||
month_to_int["decembrom"] = 12
|
||||
month_to_int["decembra"] = 12
|
||||
month_to_int["xii"] = 12
|
||||
|
||||
modifier_to_int = {
|
||||
'pred' : Date.MOD_BEFORE,
|
||||
@@ -136,31 +63,18 @@ class DateParserSL(DateParser):
|
||||
'cca.' : Date.MOD_ABOUT,
|
||||
'cca' : Date.MOD_ABOUT,
|
||||
'circa' : Date.MOD_ABOUT,
|
||||
'ca.' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
calendar_to_int = {
|
||||
'gregorijanski' : Date.CAL_GREGORIAN,
|
||||
'greg.' : Date.CAL_GREGORIAN,
|
||||
'julijanski' : Date.CAL_JULIAN,
|
||||
'jul.' : Date.CAL_JULIAN,
|
||||
'hebrejski' : Date.CAL_HEBREW,
|
||||
'hebr.' : Date.CAL_HEBREW,
|
||||
'islamski' : Date.CAL_ISLAMIC,
|
||||
'isl.' : Date.CAL_ISLAMIC,
|
||||
'francoski republikanski': Date.CAL_FRENCH,
|
||||
'franc.' : Date.CAL_FRENCH,
|
||||
'perzijski' : Date.CAL_PERSIAN,
|
||||
'perz. ' : Date.CAL_PERSIAN,
|
||||
'švedski' : Date.CAL_SWEDISH,
|
||||
'šved.' : Date.CAL_SWEDISH,
|
||||
'ca.' : Date.MOD_ABOUT,
|
||||
'približno' : Date.MOD_ABOUT,
|
||||
'pribl.' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
'približno' : Date.QUAL_ESTIMATED,
|
||||
'pribl.' : Date.QUAL_ESTIMATED,
|
||||
'izračunano' : Date.QUAL_CALCULATED,
|
||||
'izrač.' : Date.QUAL_CALCULATED,
|
||||
'ocenjeno' : Date.QUAL_ESTIMATED,
|
||||
'oc.' : Date.QUAL_ESTIMATED,
|
||||
'po oceni' : Date.QUAL_ESTIMATED,
|
||||
'izračunano' : Date.QUAL_CALCULATED,
|
||||
'izrač.' : Date.QUAL_CALCULATED,
|
||||
'po izračunu': Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
bce = ["pred našim štetjem", "pred Kristusom",
|
||||
@@ -170,6 +84,7 @@ class DateParserSL(DateParser):
|
||||
"""
|
||||
compiles regular expression strings for matching dates
|
||||
"""
|
||||
|
||||
DateParser.init_strings(self)
|
||||
# match 'Day. MONTH year.' format with or without dots
|
||||
self._text2 = re.compile('(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*\.?$'
|
||||
@@ -194,116 +109,11 @@ class DateDisplaySL(DateDisplay):
|
||||
"""
|
||||
Slovenian language date display class.
|
||||
"""
|
||||
long_months = ( "", "januarja", "februarja", "marca","aprila",
|
||||
"maja", "junija", "julija", "avgusta", "septembra",
|
||||
"oktobra", "novembra", "decembra"
|
||||
)
|
||||
|
||||
short_months = ( "", "jan", "feb", "mar", "apr", "maj", "jun",
|
||||
"jul", "avg", "sep", "okt", "nov", "dec"
|
||||
)
|
||||
|
||||
calendar = (
|
||||
"", "julijanski", "hebrejski",
|
||||
"francoski republikanski", "perzijski", "islamski",
|
||||
"švedski"
|
||||
)
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||
# not refactoring _bce_str into base class because it'll be gone under #7064
|
||||
_bce_str = "%s pr.Kr."
|
||||
|
||||
_mod_str = ("", "pred ", "po ", "okrog ", "", "", "")
|
||||
|
||||
_qual_str = ("", "približno ", "izračunano ")
|
||||
|
||||
_bce_str = "%s p.n.š."
|
||||
|
||||
formats = (
|
||||
"ISO (leto-mm-dd)",
|
||||
"številčno",
|
||||
"dan. mes. leto",
|
||||
"dan. mesec leto"
|
||||
)
|
||||
# this definition must agree with its "_display_gregorian" method
|
||||
|
||||
def _display_gregorian(self, date_val):
|
||||
"""
|
||||
display gregorian calendar date in different format
|
||||
"""
|
||||
# this must agree with its locale-specific "formats" definition
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
elif self.format == 1:
|
||||
# day. month_number. year
|
||||
if date_val[3]:
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
if date_val[0] == 0 and date_val[1] == 0:
|
||||
value = str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%Y', str(date_val[2]))
|
||||
value = value.replace('-', '. ')
|
||||
elif self.format == 2:
|
||||
# day. month_abbreviation. year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = year
|
||||
else:
|
||||
value = "%s. %s" % (self.short_months[date_val[1]], year)
|
||||
else:
|
||||
value = "%d. %s. %s" % (date_val[0],
|
||||
self.short_months[date_val[1]], year)
|
||||
else:
|
||||
# day. month_name year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = "%s." % year
|
||||
else:
|
||||
value = "%s %s" % (self.long_months[date_val[1]], year)
|
||||
else:
|
||||
value = "%d. %s %s" % (
|
||||
date_val[0],self.long_months[date_val[1]], year)
|
||||
if date_val[2] < 0:
|
||||
return self._bce_str % value
|
||||
else:
|
||||
return value
|
||||
|
||||
def display(self, date):
|
||||
"""
|
||||
Return a text string representing the date.
|
||||
"""
|
||||
mod = date.get_modifier()
|
||||
cal = date.get_calendar()
|
||||
qual = date.get_quality()
|
||||
start = date.get_start_date()
|
||||
newyear = date.get_new_year()
|
||||
|
||||
qual_str = self._qual_str[qual]
|
||||
|
||||
if mod == Date.MOD_TEXTONLY:
|
||||
return date.get_text()
|
||||
elif start == Date.EMPTY:
|
||||
return ""
|
||||
elif mod == Date.MOD_SPAN:
|
||||
d_1 = self.display_cal[cal](start)
|
||||
d_2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%sod %s do %s%s" % (qual_str, d_1, d_2, scal)
|
||||
elif mod == Date.MOD_RANGE:
|
||||
d_1 = self.display_cal[cal](start)
|
||||
d_2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
date_string = "%smed %s in %s%s" % (qual_str, d_1, d_2, scal)
|
||||
date_string = date_string.replace("a ","em ") #to correct declination
|
||||
date_string = date_string.replace("lem ","lom ")
|
||||
date_string = date_string.replace("rem ","rom ")
|
||||
date_string = date_string.replace("tem ","tom ")
|
||||
return date_string
|
||||
else:
|
||||
text = self.display_cal[date.get_calendar()](start)
|
||||
scal = self.format_extras(cal, newyear)
|
||||
date_string = "%s%s%s%s" % (qual_str, self._mod_str[mod], text, scal)
|
||||
return date_string
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
@@ -25,7 +25,7 @@
|
||||
"""
|
||||
Serbian-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"""
|
||||
Swedish-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
|
@@ -3,7 +3,7 @@
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2013 Fedir Zinchuk <fedikw[at]gmail.com>
|
||||
# Copyright (C) 2013-2014 Fedir Zinchuk <fedikw[at]gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -29,7 +29,6 @@ Ukrainian-specific classes for parsing and displaying dates.
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import unicode_literals
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@@ -42,7 +41,6 @@ from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
from . import _grampslocale
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -51,53 +49,10 @@ from . import _grampslocale
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserUK(DateParser):
|
||||
"""
|
||||
Convert a text string into a Date object. If the date cannot be
|
||||
Convert a text string into a :class:`.Date` object. If the date cannot be
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
# the genitive
|
||||
month_to_int["січня"] = 1
|
||||
month_to_int["лютого"] = 2
|
||||
month_to_int["березня"] = 3
|
||||
month_to_int["квітня"] = 4
|
||||
month_to_int["травня"] = 5
|
||||
month_to_int["червня"] = 6
|
||||
month_to_int["липня"] = 7
|
||||
month_to_int["серпня"] = 8
|
||||
month_to_int["вересня"] = 9
|
||||
month_to_int["жовтня"] = 10
|
||||
month_to_int["листопада"] = 11
|
||||
month_to_int["грудня"] = 12
|
||||
|
||||
# some short variants of the months
|
||||
month_to_int["січ."] = 1
|
||||
month_to_int["січ"] = 1
|
||||
month_to_int["лют."] = 2
|
||||
month_to_int["лют"] = 2
|
||||
month_to_int["бер."] = 3
|
||||
month_to_int["бер"] = 3
|
||||
month_to_int["квіт."] = 4
|
||||
month_to_int["квіт"] = 4
|
||||
month_to_int["трав."] = 5
|
||||
month_to_int["трав"] = 5
|
||||
month_to_int["черв."] = 6
|
||||
month_to_int["черв"] = 6
|
||||
month_to_int["лип."] = 7
|
||||
month_to_int["лип"] = 7
|
||||
month_to_int["серп."] = 8
|
||||
month_to_int["серп"] = 8
|
||||
month_to_int["вер."] = 9
|
||||
month_to_int["вер"] = 9
|
||||
month_to_int["жовт."] = 10
|
||||
month_to_int["жовт"] = 10
|
||||
month_to_int["лист."] = 11
|
||||
month_to_int["лист"] = 11
|
||||
month_to_int["груд."] = 12
|
||||
month_to_int["груд"] = 12
|
||||
|
||||
|
||||
# modifiers before the date
|
||||
modifier_to_int = {
|
||||
'перед' : Date.MOD_BEFORE,
|
||||
@@ -116,89 +71,6 @@ class DateParserUK(DateParser):
|
||||
'біля' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
hebrew_to_int = {
|
||||
"тішрі" : 1, "хешвен" : 2, "кіслев" : 3,
|
||||
"тевет" : 4, "шват" : 5, "адар" : 6,
|
||||
"адара" : 7, "нісан" : 8, "іяр" : 9,
|
||||
"сиван" : 10, "таммуз" : 11, "ав" : 12,
|
||||
"елул" : 13,
|
||||
#alternative spelling
|
||||
"мархешван": 2, "ве адар" : 7,
|
||||
#GEDCOM months
|
||||
"tsh" : 1, "csh": 5, "ksl": 3, "tvt": 4, "shv": 5, "adr": 6,
|
||||
"ads" : 7, "nsn": 8, "iyr": 9, "svn":10, "tmz":11, "aav":12,
|
||||
"ell":13,
|
||||
}
|
||||
|
||||
french_to_int = {
|
||||
'вандем’єр' : 1, 'брюмер' : 2,
|
||||
'фрімер' : 3, 'нівоз' : 4,
|
||||
'плювіоз' : 5, 'вентоз' : 6,
|
||||
'жерміналь' : 7, 'флореаль' : 8,
|
||||
'преріаль' : 9, 'мессідор' : 10,
|
||||
'термідор' : 11, 'фрюктідор': 12,
|
||||
'додатковий' : 13,
|
||||
#short
|
||||
'ванд' : 1, 'брюм' : 2,
|
||||
'фрім' : 3, 'нів' : 4,
|
||||
'плюв' : 5, 'вент' : 6,
|
||||
'жерм' : 7, 'флор' : 8,
|
||||
'прер' : 9, 'месс' : 10,
|
||||
'терм' : 11, 'фрюкт': 12,
|
||||
'дод' : 13,
|
||||
#GEDCOM months
|
||||
'vend' : 1, 'brum' : 2,
|
||||
'frim' : 3, 'nivo' : 4,
|
||||
'pluv' : 5, 'vent' : 6,
|
||||
'germ' : 7, 'flor' : 8,
|
||||
'prai' : 9, 'mess' : 10,
|
||||
'ther' : 11, 'fruc' : 12,
|
||||
'comp' : 13,
|
||||
}
|
||||
|
||||
islamic_to_int = {
|
||||
"мухаррам" : 1, "мухаррем" : 1,
|
||||
"сафар" : 2, "рабі-аль-авваль" : 3,
|
||||
"рабі-ассані" : 4,
|
||||
"джумада-аль-уля" : 5, "джумада-аль-авваль" : 5,
|
||||
"джумада-аль-ахіра" : 6, "джумада-ас-сані" : 6,
|
||||
"раджаб" : 7, "шаабан" : 8,
|
||||
"рамадан" : 9, "рамазан" : 9,
|
||||
"шавваль" : 10, "зуль-каада" : 11,
|
||||
"зуль-хіджжа" : 12,
|
||||
}
|
||||
|
||||
persian_to_int = {
|
||||
"фарвардін" : 1, "ордібехешт" : 2,
|
||||
"хордад" : 3, "тир" : 4,
|
||||
"мордад" : 5, "шахрівар" : 6,
|
||||
"мехр" : 7, "абан" : 8,
|
||||
"азар" : 9, "дей" : 10,
|
||||
"бахман" : 11, "есфанд" : 12,
|
||||
}
|
||||
|
||||
bce = ['до нашої ери', 'до н. е.', 'до н.е.']
|
||||
|
||||
calendar_to_int = {
|
||||
'григоріанський' : Date.CAL_GREGORIAN,
|
||||
'г' : Date.CAL_GREGORIAN,
|
||||
'юліанський' : Date.CAL_JULIAN,
|
||||
'ю' : Date.CAL_JULIAN,
|
||||
'єврейський' : Date.CAL_HEBREW,
|
||||
'є' : Date.CAL_HEBREW,
|
||||
'ісламський' : Date.CAL_ISLAMIC,
|
||||
'і' : Date.CAL_ISLAMIC,
|
||||
'французький' : Date.CAL_FRENCH,
|
||||
'французький республіканський': Date.CAL_FRENCH,
|
||||
'французький революційний' : Date.CAL_FRENCH,
|
||||
'ф' : Date.CAL_FRENCH,
|
||||
'іранський' : Date.CAL_PERSIAN,
|
||||
'перський' : Date.CAL_PERSIAN,
|
||||
'п' : Date.CAL_PERSIAN,
|
||||
'шведський' : Date.CAL_SWEDISH,
|
||||
'ш' : Date.CAL_SWEDISH,
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
'за оцінкою' : Date.QUAL_ESTIMATED,
|
||||
'за оц.' : Date.QUAL_ESTIMATED,
|
||||
@@ -206,6 +78,7 @@ class DateParserUK(DateParser):
|
||||
'орієнтовно' : Date.QUAL_ESTIMATED,
|
||||
'приблизно' : Date.QUAL_ESTIMATED,
|
||||
'прибл.' : Date.QUAL_ESTIMATED,
|
||||
|
||||
'підраховано' : Date.QUAL_CALCULATED,
|
||||
'підрах.' : Date.QUAL_CALCULATED,
|
||||
'розраховано' : Date.QUAL_CALCULATED,
|
||||
@@ -213,6 +86,11 @@ class DateParserUK(DateParser):
|
||||
'розрах.' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
bce = [
|
||||
'до нашої ери', 'до н. е.', 'до н.е.',
|
||||
'до народження Христа'
|
||||
] + DateParser.bce
|
||||
|
||||
def init_strings(self):
|
||||
"""
|
||||
This method compiles regular expression strings for matching dates.
|
||||
@@ -221,12 +99,19 @@ class DateParserUK(DateParser):
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
|
||||
DateParser.hebrew_to_int.update({
|
||||
'мархешван': 2,
|
||||
'ве адар' : 7,
|
||||
'адар бет' : 7,
|
||||
'авів' : 8,
|
||||
})
|
||||
|
||||
_span_1 = ['з', 'від']
|
||||
# b.c.e. pattern also have "до" so skip "до н."
|
||||
_span_2 = ['по', 'до?!\sн\.']
|
||||
_span_2 = ['по', 'до(?!\s+н)']
|
||||
_range_1 = ['між']
|
||||
_range_2 = ['і', 'та']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
@@ -243,115 +128,10 @@ class DateDisplayUK(DateDisplay):
|
||||
Ukrainian language date display class.
|
||||
"""
|
||||
|
||||
# the months as the noun or as the genitive???
|
||||
|
||||
# as the genitive:
|
||||
long_months = (
|
||||
"", "січня", "лютого", "березня", "квітня",
|
||||
"травня", "червня", "липня", "серпня",
|
||||
"вересня", "жовтня", "листопада", "грудня"
|
||||
)
|
||||
|
||||
# as the noun:
|
||||
# long_months = (
|
||||
# "", "січень", "лютий", "березень", "квітень",
|
||||
# "травень", "червень", "липень", "серпень",
|
||||
# "вересень", "жовтень", "листопад", "грудень"
|
||||
# )
|
||||
|
||||
short_months = (
|
||||
"", "січ.", "лют.", "бер.", "квіт.", "трав.", "черв.",
|
||||
"лип.", "серп.", "вер.", "жовт.", "лист.", "груд."
|
||||
)
|
||||
|
||||
hebrew = (
|
||||
"", "тішрі", "хешвен", "кіслев", "тевет", "шват",
|
||||
"адар", "адара", "нісан", "іяр", "сиван", "таммуз",
|
||||
"ав", "елул"
|
||||
)
|
||||
|
||||
french = (
|
||||
'', 'вандем’єр', 'брюмер', 'фрімер', 'нівоз',
|
||||
'плювіоз', 'вентоз', 'жерміналь', 'флореаль',
|
||||
'преріаль', 'мессідор', 'термідор', 'фрюктідор',
|
||||
'додатковий'
|
||||
)
|
||||
|
||||
persian = (
|
||||
"", "фарвардін", "ордібехешт", "хордад", "тир",
|
||||
"мордад", "шахрівар", "мехр", "абан",
|
||||
"азар", "дей", "бахман", "есфанд"
|
||||
)
|
||||
|
||||
islamic = (
|
||||
"", "мухаррам", "сафар", "рабі-аль-авваль",
|
||||
"рабі-ассані", "джумада-аль-уля", "джумада-аль-ахіра",
|
||||
"раджаб", "шаабан", "рамадан", "шавваль", "зуль-каада",
|
||||
"зуль-хіджжа",
|
||||
)
|
||||
|
||||
# Replace the previous "Numerical" by a string which
|
||||
# do have an explicit meaning: "System default (format)"
|
||||
_locale_tformat = _grampslocale.tformat
|
||||
_locale_tformat = _locale_tformat.replace('%d', "д")
|
||||
_locale_tformat = _locale_tformat.replace('%m', "м")
|
||||
_locale_tformat = _locale_tformat.replace('%Y', "р")
|
||||
|
||||
formats = (
|
||||
"рррр-мм-дд (ISO)", #0
|
||||
"стандартний для системи (" + _locale_tformat + ")", #1
|
||||
"місяць день, рік", #2
|
||||
"міс. дд, рррр", #3
|
||||
"день місяць рік", #4
|
||||
"дд міс. рррр" #5
|
||||
)
|
||||
# this must agree with DateDisplayEn's "formats" definition
|
||||
# (since no locale-specific _display_gregorian exists, here)
|
||||
|
||||
calendar = (
|
||||
"", "юліанський", "єврейський", "французький республіканський",
|
||||
"іранський", "ісламський", "шведський"
|
||||
)
|
||||
|
||||
_mod_str = ("", "до ", "після ", "близько ", "", "", "")
|
||||
|
||||
_qual_str = ("", "орієнтовно ", "розрахунково ")
|
||||
|
||||
_bce_str = "%s до н.е."
|
||||
|
||||
def display(self, date):
|
||||
"""
|
||||
Return a text string representing the date.
|
||||
"""
|
||||
mod = date.get_modifier()
|
||||
cal = date.get_calendar()
|
||||
qual = date.get_quality()
|
||||
start = date.get_start_date()
|
||||
newyear = date.get_new_year()
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
qual_str = self._qual_str[qual]
|
||||
|
||||
if mod == Date.MOD_TEXTONLY:
|
||||
return date.get_text()
|
||||
elif start == Date.EMPTY:
|
||||
return ""
|
||||
elif mod == Date.MOD_SPAN:
|
||||
d1 = self.display_cal[cal](start)
|
||||
d2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%sз %s %s %s%s" % (qual_str, d1, 'по', d2,
|
||||
scal)
|
||||
elif mod == Date.MOD_RANGE:
|
||||
d1 = self.display_cal[cal](start)
|
||||
d2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%s%s %s %s %s%s" % (qual_str, 'між', d1, 'та',
|
||||
d2, scal)
|
||||
else:
|
||||
text = self.display_cal[date.get_calendar()](start)
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%s%s%s%s" % (qual_str, self._mod_str[mod],
|
||||
text, scal)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
@@ -1,250 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
"""
|
||||
Chinese-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Chinese parser
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserZH(DateParser):
|
||||
"""
|
||||
Convert a text string into a Date object. If the date cannot be
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
modifier_to_int = {
|
||||
'before' : Date.MOD_BEFORE, 'bef' : Date.MOD_BEFORE,
|
||||
'bef.' : Date.MOD_BEFORE, 'after' : Date.MOD_AFTER,
|
||||
'aft' : Date.MOD_AFTER, 'aft.' : Date.MOD_AFTER,
|
||||
'about' : Date.MOD_ABOUT, 'abt.' : Date.MOD_ABOUT,
|
||||
'abt' : Date.MOD_ABOUT, 'circa' : Date.MOD_ABOUT,
|
||||
'c.' : Date.MOD_ABOUT, 'around' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
month_to_int["正"] = 1
|
||||
month_to_int["一"] = 1
|
||||
month_to_int["zhēngyuè"] = 1
|
||||
month_to_int["二"] = 2
|
||||
month_to_int["èryuè"] = 2
|
||||
month_to_int["三"] = 3
|
||||
month_to_int["sānyuè"] = 3
|
||||
month_to_int["四"] = 4
|
||||
month_to_int["sìyuè"] = 4
|
||||
month_to_int["五"] = 5
|
||||
month_to_int["wǔyuè"] = 5
|
||||
month_to_int["六"] = 6
|
||||
month_to_int["liùyuè"] = 6
|
||||
month_to_int["七"] = 7
|
||||
month_to_int["qīyuè"] = 7
|
||||
month_to_int["八"] = 8
|
||||
month_to_int["bāyuè"] = 8
|
||||
month_to_int["九"] = 9
|
||||
month_to_int["jiǔyuè"] = 9
|
||||
month_to_int["十"] = 10
|
||||
month_to_int["shíyuè"] = 10
|
||||
month_to_int["十一"] = 11
|
||||
month_to_int["shíyīyuè"] = 11
|
||||
month_to_int["十二"] = 12
|
||||
month_to_int["shí'èryuè"] = 12
|
||||
month_to_int["假閏"] = 13
|
||||
month_to_int["jiǎ rùn yùe"] = 13
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
calendar_to_int = {
|
||||
'gregorian' : Date.CAL_GREGORIAN,
|
||||
'g' : Date.CAL_GREGORIAN,
|
||||
'julian' : Date.CAL_JULIAN,
|
||||
'j' : Date.CAL_JULIAN,
|
||||
'hebrew' : Date.CAL_HEBREW,
|
||||
'h' : Date.CAL_HEBREW,
|
||||
'islamic' : Date.CAL_ISLAMIC,
|
||||
'i' : Date.CAL_ISLAMIC,
|
||||
'french' : Date.CAL_FRENCH,
|
||||
'french republican': Date.CAL_FRENCH,
|
||||
'f' : Date.CAL_FRENCH,
|
||||
'persian' : Date.CAL_PERSIAN,
|
||||
'p' : Date.CAL_PERSIAN,
|
||||
'swedish' : Date.CAL_SWEDISH,
|
||||
's' : Date.CAL_SWEDISH,
|
||||
}
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
quality_to_int = {
|
||||
'estimated' : Date.QUAL_ESTIMATED,
|
||||
'est.' : Date.QUAL_ESTIMATED,
|
||||
'est' : Date.QUAL_ESTIMATED,
|
||||
'calc.' : Date.QUAL_CALCULATED,
|
||||
'calc' : Date.QUAL_CALCULATED,
|
||||
'calculated' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
bce = ["before calendar", "negative year"] + DateParser.bce
|
||||
|
||||
def init_strings(self):
|
||||
"""
|
||||
This method compiles regular expression strings for matching dates.
|
||||
|
||||
Most of the re's in most languages can stay as is. span and range
|
||||
most likely will need to change. Whatever change is done, this method
|
||||
may be called first as DateParser.init_strings(self) so that the
|
||||
invariant expresions don't need to be repeteadly coded. All differences
|
||||
can be coded after DateParser.init_strings(self) call, that way they
|
||||
override stuff from this method. See DateParserRU() as an example.
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
|
||||
# day: 日 ; month : 月 ; year : 年
|
||||
|
||||
# See DateParser class; translate english strings (from/to, between/and) into chinese
|
||||
# do not translate <start> and <stop>
|
||||
|
||||
self._span = re.compile("(from)\s+(?P<start>.+)\s+to\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(bet|bet.|between)\s+(?P<start>.+)\s+and\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
|
||||
#def _parse_lunisolar(self, date_val=text):
|
||||
#text = text.strip() # otherwise spaces can make it a bad date
|
||||
#date = Date(self._qual_str, self._mod_str, self._cal_str, text, self._ny_str)
|
||||
#return unicode(text)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Chinese display
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateDisplayZH(DateDisplay):
|
||||
"""
|
||||
Chinese language date display class.
|
||||
"""
|
||||
|
||||
# translate english strings into chinese
|
||||
|
||||
long_months = ( "", "January", "February", "March", "April", "May",
|
||||
"June", "July", "August", "September", "October",
|
||||
"November", "December" )
|
||||
|
||||
short_months = ( "", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" )
|
||||
|
||||
calendar = (
|
||||
"", "Julian", "Hebrew", "French Republican",
|
||||
"Persian", "Islamic", "Swedish"
|
||||
)
|
||||
|
||||
_mod_str = ("", "before ", "after ", "around ", "", "", "")
|
||||
|
||||
_qual_str = ("", "estimated ", "calculated ", "")
|
||||
|
||||
_bce_str = "%s B.C.E."
|
||||
|
||||
|
||||
def display(self, date):
|
||||
"""
|
||||
Return a text string representing the date.
|
||||
"""
|
||||
|
||||
mod = date.get_modifier()
|
||||
cal = date.get_calendar()
|
||||
qual = date.get_quality()
|
||||
start = date.get_start_date()
|
||||
newyear = date.get_new_year()
|
||||
|
||||
qual_str = (self._qual_str)[qual]
|
||||
|
||||
if mod == Date.MOD_TEXTONLY:
|
||||
return date.get_text()
|
||||
elif start == Date.EMPTY:
|
||||
return ""
|
||||
elif mod == Date.MOD_SPAN:
|
||||
date1 = self.display_cal[cal](start)
|
||||
date2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
# translate english strings into chinese
|
||||
return "%s%s %s %s %s%s" % (qual_str, 'from', date1, 'to',
|
||||
date2, scal)
|
||||
elif mod == Date.MOD_RANGE:
|
||||
date1 = self.display_cal[cal](start)
|
||||
date2 = self.display_cal[cal](date.get_stop_date())
|
||||
scal = self.format_extras(cal, newyear)
|
||||
# translate english strings into chinese
|
||||
return "%s%s %s %s %s%s" % (qual_str, 'between', date1, 'and',
|
||||
date2, scal)
|
||||
else:
|
||||
text = self.display_cal[date.get_calendar()](start)
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%s%s%s%s" % (qual_str, (self._mod_str)[mod], text,
|
||||
scal)
|
||||
|
||||
#def _display_chinese(self, date_val):
|
||||
#self._tformat = '%Y年%m月%d日'
|
||||
#year = self._slash_year(date_val[2], date_val[3])
|
||||
#if date_val[3]:
|
||||
#return self.display_iso(date_val)
|
||||
#else:
|
||||
#if date_val[0] == date_val[1] == 0:
|
||||
#value = u'%Y年' % date_val[2]
|
||||
#else:
|
||||
#value = self._tformat.replace('%m月', str(self.lunisolar[date_val[1]]))
|
||||
#value = u'%m月' % date_val[1]
|
||||
#value = u'%d日' % date_val[0]
|
||||
#value = u'%Y年' % date_val[2]
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('zh_CN', 'zh_TW', 'zh_SG', 'zh_HK', 'zh', 'chinese', 'Chinese'),
|
||||
DateParserZH, DateDisplayZH)
|
182
gramps/gen/datehandler/_date_zh_CN.py
Normal file
182
gramps/gen/datehandler/_date_zh_CN.py
Normal file
@@ -0,0 +1,182 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2014-2015 Paul Franklin
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
"""
|
||||
Simplified-Chinese-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Simplified-Chinese parser
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserZH_CN(DateParser):
|
||||
"""
|
||||
Convert a text string into a Date object. If the date cannot be
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
# modifiers before the date
|
||||
modifier_to_int = {
|
||||
'以前' : Date.MOD_BEFORE,
|
||||
'以后' : Date.MOD_AFTER,
|
||||
'大约' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
month_to_int["正"] = 1
|
||||
month_to_int["一"] = 1
|
||||
month_to_int["zhēngyuè"] = 1
|
||||
month_to_int["二"] = 2
|
||||
month_to_int["èryuè"] = 2
|
||||
month_to_int["三"] = 3
|
||||
month_to_int["sānyuè"] = 3
|
||||
month_to_int["四"] = 4
|
||||
month_to_int["sìyuè"] = 4
|
||||
month_to_int["五"] = 5
|
||||
month_to_int["wǔyuè"] = 5
|
||||
month_to_int["六"] = 6
|
||||
month_to_int["liùyuè"] = 6
|
||||
month_to_int["七"] = 7
|
||||
month_to_int["qīyuè"] = 7
|
||||
month_to_int["八"] = 8
|
||||
month_to_int["bāyuè"] = 8
|
||||
month_to_int["九"] = 9
|
||||
month_to_int["jiǔyuè"] = 9
|
||||
month_to_int["十"] = 10
|
||||
month_to_int["shíyuè"] = 10
|
||||
month_to_int["十一"] = 11
|
||||
month_to_int["shíyīyuè"] = 11
|
||||
month_to_int["十二"] = 12
|
||||
month_to_int["shí'èryuè"] = 12
|
||||
month_to_int["假閏"] = 13
|
||||
month_to_int["jiǎ rùn yùe"] = 13
|
||||
|
||||
calendar_to_int = {
|
||||
'阳历' : Date.CAL_GREGORIAN,
|
||||
'g' : Date.CAL_GREGORIAN,
|
||||
'儒略历' : Date.CAL_JULIAN,
|
||||
'j' : Date.CAL_JULIAN,
|
||||
'希伯来历' : Date.CAL_HEBREW,
|
||||
'h' : Date.CAL_HEBREW,
|
||||
'伊斯兰历' : Date.CAL_ISLAMIC,
|
||||
'i' : Date.CAL_ISLAMIC,
|
||||
'法国共和历' : Date.CAL_FRENCH,
|
||||
'f' : Date.CAL_FRENCH,
|
||||
'伊郎历' : Date.CAL_PERSIAN,
|
||||
'p' : Date.CAL_PERSIAN,
|
||||
'瑞典历' : Date.CAL_SWEDISH,
|
||||
's' : Date.CAL_SWEDISH,
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
'据估计' : Date.QUAL_ESTIMATED,
|
||||
'据计算' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
# FIXME translate these English strings into simplified-Chinese ones
|
||||
bce = ["before calendar", "negative year"] + DateParser.bce
|
||||
|
||||
def init_strings(self):
|
||||
"""
|
||||
This method compiles regular expression strings for matching dates.
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
_span_1 = ['自']
|
||||
_span_2 = ['至']
|
||||
_range_1 = ['介于']
|
||||
_range_2 = ['与']
|
||||
self._span = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Simplified-Chinese display
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateDisplayZH_CN(DateDisplay):
|
||||
"""
|
||||
Simplified-Chinese language date display class.
|
||||
"""
|
||||
|
||||
formats = (
|
||||
"年年年年-月月-日日 (ISO)", "数字格式",
|
||||
)
|
||||
# this definition must agree with its "_display_calendar" method
|
||||
|
||||
# FIXME translate these English strings into simplified-Chinese ones
|
||||
_bce_str = "%s B.C.E."
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
def _display_calendar(self, date_val, long_months, short_months = None,
|
||||
inflect=""):
|
||||
# this must agree with its locale-specific "formats" definition
|
||||
|
||||
if short_months is None:
|
||||
# Let the short formats work the same as long formats
|
||||
short_months = long_months
|
||||
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
# elif self.format == 1:
|
||||
else:
|
||||
# numerical
|
||||
value = self.dd_dformat01(date_val)
|
||||
if date_val[2] < 0:
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||
return self._bce_str % value
|
||||
else:
|
||||
return value
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('zh_CN', 'zh_SG', 'zh', 'chinese', 'Chinese'),
|
||||
DateParserZH_CN, DateDisplayZH_CN)
|
182
gramps/gen/datehandler/_date_zh_TW.py
Normal file
182
gramps/gen/datehandler/_date_zh_TW.py
Normal file
@@ -0,0 +1,182 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2014-2015 Paul Franklin
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
"""
|
||||
Traditional-Chinese-specific classes for parsing and displaying dates.
|
||||
"""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Traditional-Chinese parser
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserZH_TW(DateParser):
|
||||
"""
|
||||
Convert a text string into a Date object. If the date cannot be
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
# modifiers before the date
|
||||
modifier_to_int = {
|
||||
'以前' : Date.MOD_BEFORE,
|
||||
'以後' : Date.MOD_AFTER,
|
||||
'大約' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
month_to_int = DateParser.month_to_int
|
||||
|
||||
month_to_int["正"] = 1
|
||||
month_to_int["一"] = 1
|
||||
month_to_int["zhēngyuè"] = 1
|
||||
month_to_int["二"] = 2
|
||||
month_to_int["èryuè"] = 2
|
||||
month_to_int["三"] = 3
|
||||
month_to_int["sānyuè"] = 3
|
||||
month_to_int["四"] = 4
|
||||
month_to_int["sìyuè"] = 4
|
||||
month_to_int["五"] = 5
|
||||
month_to_int["wǔyuè"] = 5
|
||||
month_to_int["六"] = 6
|
||||
month_to_int["liùyuè"] = 6
|
||||
month_to_int["七"] = 7
|
||||
month_to_int["qīyuè"] = 7
|
||||
month_to_int["八"] = 8
|
||||
month_to_int["bāyuè"] = 8
|
||||
month_to_int["九"] = 9
|
||||
month_to_int["jiǔyuè"] = 9
|
||||
month_to_int["十"] = 10
|
||||
month_to_int["shíyuè"] = 10
|
||||
month_to_int["十一"] = 11
|
||||
month_to_int["shíyīyuè"] = 11
|
||||
month_to_int["十二"] = 12
|
||||
month_to_int["shí'èryuè"] = 12
|
||||
month_to_int["假閏"] = 13
|
||||
month_to_int["jiǎ rùn yùe"] = 13
|
||||
|
||||
calendar_to_int = {
|
||||
'陽曆' : Date.CAL_GREGORIAN,
|
||||
'g' : Date.CAL_GREGORIAN,
|
||||
'儒略曆' : Date.CAL_JULIAN,
|
||||
'j' : Date.CAL_JULIAN,
|
||||
'希伯來歷' : Date.CAL_HEBREW,
|
||||
'h' : Date.CAL_HEBREW,
|
||||
'伊斯蘭曆' : Date.CAL_ISLAMIC,
|
||||
'i' : Date.CAL_ISLAMIC,
|
||||
'法國共和歷' : Date.CAL_FRENCH,
|
||||
'f' : Date.CAL_FRENCH,
|
||||
'伊郎歷' : Date.CAL_PERSIAN,
|
||||
'p' : Date.CAL_PERSIAN,
|
||||
'瑞典歷' : Date.CAL_SWEDISH,
|
||||
's' : Date.CAL_SWEDISH,
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
'據估計' : Date.QUAL_ESTIMATED,
|
||||
'據計算' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
# FIXME translate these English strings into traditional-Chinese ones
|
||||
bce = ["before calendar", "negative year"] + DateParser.bce
|
||||
|
||||
def init_strings(self):
|
||||
"""
|
||||
This method compiles regular expression strings for matching dates.
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
_span_1 = ['自']
|
||||
_span_2 = ['至']
|
||||
_range_1 = ['介於']
|
||||
_range_2 = ['與']
|
||||
self._span = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Traditional-Chinese display
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateDisplayZH_TW(DateDisplay):
|
||||
"""
|
||||
Traditional-Chinese language date display class.
|
||||
"""
|
||||
|
||||
formats = (
|
||||
"年年年年-月月-日日 (ISO)", "數字格式",
|
||||
)
|
||||
# this definition must agree with its "_display_calendar" method
|
||||
|
||||
# FIXME translate these English strings into traditional-Chinese ones
|
||||
_bce_str = "%s B.C.E."
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
def _display_calendar(self, date_val, long_months, short_months = None,
|
||||
inflect=""):
|
||||
# this must agree with its locale-specific "formats" definition
|
||||
|
||||
if short_months is None:
|
||||
# Let the short formats work the same as long formats
|
||||
short_months = long_months
|
||||
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
# elif self.format == 1:
|
||||
else:
|
||||
# numerical
|
||||
value = self.dd_dformat01(date_val)
|
||||
if date_val[2] < 0:
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||
return self._bce_str % value
|
||||
else:
|
||||
return value
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('zh_TW', 'zh_HK'),
|
||||
DateParserZH_TW, DateDisplayZH_TW)
|
@@ -3,6 +3,8 @@
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2013 Vassilii Khachaturov
|
||||
# Copyright (C) 2014-2015 Paul Franklin
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -23,7 +25,6 @@
|
||||
U.S English date display class. Should serve as the base class for all
|
||||
localized tasks.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -65,7 +66,7 @@ class DateDisplay(object):
|
||||
# such as YY.MM.DD, MM-DD-YY, or whatever your locale prefers.
|
||||
# This should be the format that is used under the locale by
|
||||
# strftime() for '%x'.
|
||||
# You may translate this string as "Numerical", "System preferred", or similar.
|
||||
# You may translate this as "Numerical", "System preferred", or similar.
|
||||
_("date format|Numerical"),
|
||||
|
||||
# Full month name, day, year
|
||||
@@ -83,10 +84,11 @@ class DateDisplay(object):
|
||||
"""
|
||||
.. note:: Will be overridden if a locale-specific date displayer exists.
|
||||
|
||||
If your localized :meth:`~_display_calendar`/:meth:`~_display_gregorian` are
|
||||
overridden,you should override the whole formats list according to your own
|
||||
formats, and you need not localize the format names here. This ``formats``
|
||||
must agree with :meth:`~_display_calendar`/:meth:`~_display_gregorian`.
|
||||
If your localized :meth:`~_display_calendar`/:meth:`~_display_gregorian`
|
||||
are overridden, you should override the whole formats list according
|
||||
to your own formats, and you need not localize the format names here.
|
||||
This ``formats`` must agree with
|
||||
:meth:`~_display_calendar`/:meth:`~_display_gregorian`.
|
||||
"""
|
||||
del _
|
||||
|
||||
@@ -159,44 +161,70 @@ class DateDisplay(object):
|
||||
|
||||
"from"
|
||||
# first date in a span
|
||||
# You only need to translate this string if you translate one of the
|
||||
# inflect=_("...") with "from"
|
||||
# If "from <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("from|{long_month} {year}"),
|
||||
|
||||
"to"
|
||||
# second date in a span
|
||||
# You only need to translate this string if you translate one of the
|
||||
# inflect=_("...") with "to"
|
||||
# If "to <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("to|{long_month} {year}"),
|
||||
|
||||
"between"
|
||||
# first date in a range
|
||||
# You only need to translate this string if you translate one of the
|
||||
# inflect=_("...") with "between"
|
||||
# If "between <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("between|{long_month} {year}"),
|
||||
|
||||
"and"
|
||||
# second date in a range
|
||||
# You only need to translate this string if you translate one of the
|
||||
# inflect=_("...") with "and"
|
||||
# If "and <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("and|{long_month} {year}"),
|
||||
|
||||
"before"
|
||||
# You only need to translate this string if you translate one of the
|
||||
# inflect=_("...") with "before"
|
||||
# If "before <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("before|{long_month} {year}"),
|
||||
|
||||
"after"
|
||||
# You only need to translate this string if you translate one of the
|
||||
# inflect=_("...") with "after"
|
||||
# If "after <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("after|{long_month} {year}"),
|
||||
|
||||
"about"
|
||||
# You only need to translate this string if you translate one of the
|
||||
# inflect=_("...") with "about"
|
||||
# If "about <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("about|{long_month} {year}"),
|
||||
|
||||
# TODO if no modifier, but with qual, might need to inflect in some lang.
|
||||
"estimated"
|
||||
# If "estimated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("estimated|{long_month} {year}"),
|
||||
|
||||
"calculated"
|
||||
# If "calculated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("calculated|{long_month} {year}"),
|
||||
}
|
||||
|
||||
self.FORMATS_short_month_year = {
|
||||
@@ -205,28 +233,70 @@ class DateDisplay(object):
|
||||
|
||||
"from"
|
||||
# first date in a span
|
||||
# If "from <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("from|{short_month} {year}"),
|
||||
|
||||
"to"
|
||||
# second date in a span
|
||||
# If "to <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("to|{short_month} {year}"),
|
||||
|
||||
"between"
|
||||
# first date in a range
|
||||
# If "between <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("between|{short_month} {year}"),
|
||||
|
||||
"and"
|
||||
# second date in a range
|
||||
# If "and <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("and|{short_month} {year}"),
|
||||
|
||||
"before"
|
||||
# If "before <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("before|{short_month} {year}"),
|
||||
|
||||
"after"
|
||||
# If "after <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("after|{short_month} {year}"),
|
||||
|
||||
"about"
|
||||
# If "about <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("about|{short_month} {year}"),
|
||||
|
||||
"estimated"
|
||||
# If "estimated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("estimated|{short_month} {year}"),
|
||||
|
||||
"calculated"
|
||||
# If "calculated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("calculated|{short_month} {year}"),
|
||||
}
|
||||
|
||||
def set_format(self, format):
|
||||
@@ -257,8 +327,9 @@ class DateDisplay(object):
|
||||
"""
|
||||
Return a text string representing the date.
|
||||
|
||||
(Will be overridden if a locale-specific date displayer exists.)
|
||||
Disregard any format settings and use display_iso for each date.
|
||||
|
||||
(Will be overridden if a locale-specific date displayer exists.)
|
||||
"""
|
||||
mod = date.get_modifier()
|
||||
cal = date.get_calendar()
|
||||
@@ -312,6 +383,56 @@ class DateDisplay(object):
|
||||
else:
|
||||
return value
|
||||
|
||||
def dd_span(self, date):
|
||||
"""
|
||||
Return a text string representing the span date
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
cal = date.get_calendar()
|
||||
qual_str = self._qual_str[date.get_quality()]
|
||||
scal = self.format_extras(cal, date.get_new_year())
|
||||
d1 = self.display_cal[cal](date.get_start_date(),
|
||||
# If there is no special inflection for "from <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "from" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("from-date|"))
|
||||
d2 = self.display_cal[cal](date.get_stop_date(),
|
||||
# If there is no special inflection for "to <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "to" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("to-date|"))
|
||||
return self._("{date_quality}from {date_start} to {date_stop}"
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
date_start=d1,
|
||||
date_stop=d2,
|
||||
nonstd_calendar_and_ny=scal)
|
||||
|
||||
def dd_range(self, date):
|
||||
"""
|
||||
Return a text string representing the range date
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
cal = date.get_calendar()
|
||||
qual_str = self._qual_str[date.get_quality()]
|
||||
scal = self.format_extras(cal, date.get_new_year())
|
||||
d1 = self.display_cal[cal](date.get_start_date(),
|
||||
# If there is no special inflection for "between <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "between" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("between-date|"))
|
||||
d2 = self.display_cal[cal](date.get_stop_date(),
|
||||
# If there is no special inflection for "and <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "and" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("and-date|"))
|
||||
return self._("{date_quality}between {date_start} and {date_stop}"
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
date_start=d1,
|
||||
date_stop=d2,
|
||||
nonstd_calendar_and_ny=scal)
|
||||
|
||||
def display_formatted(self, date):
|
||||
"""
|
||||
Return a text string representing the date, according to the format.
|
||||
@@ -330,66 +451,59 @@ class DateDisplay(object):
|
||||
elif start == Date.EMPTY:
|
||||
return ""
|
||||
elif mod == Date.MOD_SPAN:
|
||||
d1 = self.display_cal[cal](start,
|
||||
# If there is no special inflection for "from <Month>" in your
|
||||
# language, don't translate this string.
|
||||
# Otherwise, translate it to the ENGLISH!!! ENGLISH!!!
|
||||
# key appearing above in the FORMATS_... dict
|
||||
# that maps to the special inflected format string that you need to localize.
|
||||
inflect=_("from-date|"))
|
||||
d2 = self.display_cal[cal](date.get_stop_date(),
|
||||
# If there is no special inflection for "to <Month>" in your
|
||||
# language, don't translate this string.
|
||||
# Otherwise, translate it to the ENGLISH!!! ENGLISH!!!
|
||||
# key appearing above in the FORMATS_... dict
|
||||
# that maps to the special inflected format string that you need to localize.
|
||||
inflect=_("to-date|"))
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return _("{date_quality}from {date_start} to {date_stop}"
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
date_start=d1,
|
||||
date_stop=d2,
|
||||
nonstd_calendar_and_ny=scal)
|
||||
return self.dd_span(date)
|
||||
elif mod == Date.MOD_RANGE:
|
||||
d1 = self.display_cal[cal](start,
|
||||
# If there is no special inflection for "between <Month>" in your
|
||||
# language, don't translate this string.
|
||||
# Otherwise, translate it to the ENGLISH!!! ENGLISH!!!
|
||||
# key appearing above in the FORMATS_... dict
|
||||
# that maps to the special inflected format string that you need to localize.
|
||||
inflect=_("between-date|"))
|
||||
d2 = self.display_cal[cal](date.get_stop_date(),
|
||||
# If there is no special inflection for "and <Month>" in your
|
||||
# language, don't translate this string.
|
||||
# Otherwise, translate it to the ENGLISH!!! ENGLISH!!!
|
||||
# key appearing above in the FORMATS_... dict
|
||||
# that maps to the special inflected format string that you need to localize.
|
||||
inflect=_("and-date|"))
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return _("{date_quality}between {date_start} and {date_stop}"
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
date_start=d1,
|
||||
date_stop=d2,
|
||||
nonstd_calendar_and_ny=scal)
|
||||
return self.dd_range(date)
|
||||
else:
|
||||
text = self.display_cal[date.get_calendar()](start,
|
||||
# If there is no special inflection for "before/after/around <Month>" in your
|
||||
# language, don't translate this string.
|
||||
# Otherwise, translate it to the ENGLISH!!! ENGLISH!!!
|
||||
# key appearing above in the FORMATS_... dict
|
||||
# that maps to the special inflected format string that you need to localize.
|
||||
# TODO are there languages for which the inflections for the different
|
||||
# modifiers are different?!
|
||||
inflect=_("before-date|") if mod != Date.MOD_NONE else "")
|
||||
if mod == Date.MOD_BEFORE:
|
||||
# If there is no special inflection for "before <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "before" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("before-date|")
|
||||
elif mod == Date.MOD_AFTER:
|
||||
# If there is no special inflection for "after <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "after" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("after-date|")
|
||||
elif mod == Date.MOD_ABOUT:
|
||||
# If there is no special inflection for "about <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "about" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("about-date|")
|
||||
elif qual == Date.QUAL_ESTIMATED:
|
||||
# If there is no special inflection for "estimated <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "estimated" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("estimated-date|")
|
||||
elif qual == Date.QUAL_CALCULATED:
|
||||
# If there is no special inflection for "calculated <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "calculated" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("calculated-date|")
|
||||
else:
|
||||
date_type = ""
|
||||
# TODO -- do "estimated" and "calculated" need their own "if"?
|
||||
# i.e., what happens if a date is both "modified" and "qualified"?
|
||||
# it won't matter if the month gets the same lexeme type, but
|
||||
# what should be done if the types differ? there can only be one
|
||||
# lexeme type for any month so which one should be last? so we
|
||||
# will wait and see if any language ever requires such fine tuning
|
||||
# as maybe it will be as simple as putting the "elif" choices for
|
||||
# "estimated" and "calculated" before the others, or something
|
||||
text = self.display_cal[cal](start, inflect=date_type)
|
||||
modifier = self._mod_str[mod]
|
||||
# some languages have a modifier after the date (e.g. Finnish)
|
||||
# (if so, they are specified in DateParser.modifier_after_to_int)
|
||||
if modifier.startswith(' '):
|
||||
text += modifier
|
||||
modifier = ''
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return _("{date_quality}{noncompound_modifier}{date}"
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
noncompound_modifier=self._mod_str[mod],
|
||||
date=text,
|
||||
nonstd_calendar_and_ny=scal)
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
noncompound_modifier=modifier,
|
||||
date=text,
|
||||
nonstd_calendar_and_ny=scal)
|
||||
|
||||
def _display_gregorian(self, date_val, **kwargs):
|
||||
return self._display_calendar(date_val, self.long_months,
|
||||
@@ -398,104 +512,186 @@ class DateDisplay(object):
|
||||
# Julian and Swedish date display is the same as Gregorian
|
||||
_display_julian = _display_swedish = _display_gregorian
|
||||
|
||||
def format_long_month_year(self, month, year, inflect, long_months):
|
||||
if not hasattr(long_months[1], 'f'): # not a Lexeme: no inflection
|
||||
return "{long_month} {year}".format(
|
||||
long_month = long_months[month], year = year)
|
||||
return self.FORMATS_long_month_year[inflect].format(
|
||||
long_month = long_months[month], year = year)
|
||||
|
||||
def format_short_month_year(self, month, year, inflect, short_months):
|
||||
if not hasattr(short_months[1], 'f'): # not a Lexeme: no inflection
|
||||
return "{short_month} {year}".format(
|
||||
short_month = short_months[month], year = year)
|
||||
return self.FORMATS_short_month_year[inflect].format(
|
||||
short_month = short_months[month], year = year)
|
||||
|
||||
def format_long_month(self, month, inflect, long_months):
|
||||
if not hasattr(long_months[1], 'f'): # not a Lexeme: no inflection
|
||||
return "{long_month}".format(long_month = long_months[month])
|
||||
return self.FORMATS_long_month_year[inflect].format(
|
||||
long_month = long_months[month], year = '').rstrip()
|
||||
|
||||
def format_short_month(self, month, inflect, short_months):
|
||||
if not hasattr(short_months[1], 'f'): # not a Lexeme: no inflection
|
||||
return "{short_month}".format(short_month = short_months[month])
|
||||
return self.FORMATS_short_month_year[inflect].format(
|
||||
short_month = short_months[month], year = '').rstrip()
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
"""
|
||||
numerical
|
||||
|
||||
this must agree with DateDisplayEn's "formats" definition
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
if date_val[3]:
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
return str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
if date_val[0] == 0: # ignore the zero day and its delimiter
|
||||
i_day = value.find('%d')
|
||||
value = value.replace(value[i_day:i_day+3], '')
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%Y', str(abs(date_val[2])))
|
||||
return value.replace('-', '/')
|
||||
|
||||
def dd_dformat02(self, date_val, inflect, long_months):
|
||||
"""
|
||||
month_name day, year
|
||||
|
||||
this must agree with DateDisplayEn's "formats" definition
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
_ = self._locale.translation.sgettext
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
else:
|
||||
return self.format_long_month_year(date_val[1], year,
|
||||
inflect, long_months)
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{long_month} {day:d}, {year}").format(
|
||||
long_month = self.format_long_month(date_val[1],
|
||||
inflect,
|
||||
long_months),
|
||||
day = date_val[0],
|
||||
year = year)
|
||||
|
||||
def dd_dformat03(self, date_val, inflect, short_months):
|
||||
"""
|
||||
month_abbreviation day, year
|
||||
|
||||
this must agree with DateDisplayEn's "formats" definition
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
_ = self._locale.translation.sgettext
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
else:
|
||||
return self.format_short_month_year(date_val[1], year,
|
||||
inflect, short_months)
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{short_month} {day:d}, {year}").format(
|
||||
short_month = self.format_short_month(date_val[1],
|
||||
inflect,
|
||||
short_months),
|
||||
day = date_val[0],
|
||||
year = year)
|
||||
|
||||
def dd_dformat04(self, date_val, inflect, long_months):
|
||||
"""
|
||||
day month_name year
|
||||
|
||||
this must agree with DateDisplayEn's "formats" definition
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
_ = self._locale.translation.sgettext
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
else:
|
||||
return self.format_long_month_year(date_val[1], year,
|
||||
inflect, long_months)
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{day:d} {long_month} {year}").format(
|
||||
day = date_val[0],
|
||||
long_month = self.format_long_month(date_val[1],
|
||||
inflect,
|
||||
long_months),
|
||||
year = year)
|
||||
|
||||
def dd_dformat05(self, date_val, inflect, short_months):
|
||||
"""
|
||||
day month_abbreviation year
|
||||
|
||||
this must agree with DateDisplayEn's "formats" definition
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
_ = self._locale.translation.sgettext
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
else:
|
||||
return self.format_short_month_year(date_val[1], year,
|
||||
inflect, short_months)
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{day:d} {short_month} {year}").format(
|
||||
day = date_val[0],
|
||||
short_month = self.format_short_month(date_val[1],
|
||||
inflect,
|
||||
short_months),
|
||||
year = year)
|
||||
|
||||
def _display_calendar(self, date_val, long_months, short_months = None,
|
||||
inflect=""):
|
||||
inflect=""):
|
||||
"""
|
||||
this must agree with DateDisplayEn's "formats" definition
|
||||
(it may be overridden if a locale-specific date displayer exists)
|
||||
"""
|
||||
|
||||
if short_months is None:
|
||||
# Let the short formats work the same as long formats
|
||||
short_months = long_months
|
||||
|
||||
_ = self._locale.translation.sgettext
|
||||
# this one must agree with DateDisplayEn's "formats" definition
|
||||
# (it may be overridden if a locale-specific date displayer exists)
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
|
||||
# For partial dates, several formats reduce to just month + year.
|
||||
def format_long_month_year():
|
||||
return self.FORMATS_long_month_year[inflect].format(
|
||||
long_month = long_months[date_val[1]],
|
||||
year = year)
|
||||
|
||||
def format_short_month_year():
|
||||
return self.FORMATS_short_month_year[inflect].format(
|
||||
short_month = short_months[date_val[1]],
|
||||
year = year)
|
||||
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
elif self.format == 1:
|
||||
# numerical
|
||||
if date_val[3]:
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
value = str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%Y', str(abs(date_val[2])))
|
||||
value = value.replace('-', '/')
|
||||
value = self.dd_dformat01(date_val)
|
||||
elif self.format == 2:
|
||||
# month_name day, year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = year
|
||||
else:
|
||||
value = format_long_month_year()
|
||||
else:
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection for your language.
|
||||
value = _("{long_month} {day:d}, {year}").format(
|
||||
long_month = long_months[date_val[1]],
|
||||
day = date_val[0],
|
||||
year = year)
|
||||
value = self.dd_dformat02(date_val, inflect, long_months)
|
||||
elif self.format == 3:
|
||||
# month_abbreviation day, year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = year
|
||||
else:
|
||||
value = format_short_month_year()
|
||||
else:
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection for your language.
|
||||
value = _("{short_month} {day:d}, {year}").format(
|
||||
short_month = short_months[date_val[1]],
|
||||
day = date_val[0],
|
||||
year = year)
|
||||
value = self.dd_dformat03(date_val, inflect, short_months)
|
||||
elif self.format == 4:
|
||||
# day month_name year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = year
|
||||
else:
|
||||
value = format_long_month_year()
|
||||
else:
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection for your language.
|
||||
value = _("{day:d} {long_month} {year}").format(
|
||||
day = date_val[0],
|
||||
long_month = long_months[date_val[1]],
|
||||
year = year)
|
||||
value = self.dd_dformat04(date_val, inflect, long_months)
|
||||
# elif self.format == 5:
|
||||
else:
|
||||
# day month_abbreviation year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = year
|
||||
else:
|
||||
value = format_short_month_year()
|
||||
else:
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection for your language.
|
||||
value = _("{day:d} {short_month} {year}").format(
|
||||
short_month = short_months[date_val[1]],
|
||||
day = date_val[0],
|
||||
year = year)
|
||||
value = self.dd_dformat05(date_val, inflect, short_months)
|
||||
if date_val[2] < 0:
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||
return self._bce_str % value
|
||||
@@ -532,3 +728,4 @@ class DateDisplayEn(DateDisplay):
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
_locale = DateDisplay._locale # normally set in register_datehandler
|
||||
|
@@ -21,7 +21,6 @@
|
||||
"""
|
||||
Class handling language-specific selection for date parser and displayer.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -45,7 +44,7 @@ log = logging.getLogger(".gen.datehandler")
|
||||
#-------------------------------------------------------------------------
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay, DateDisplayEn
|
||||
from ..constfunc import win, cuni
|
||||
from ..constfunc import win
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
from gramps.gen.utils.grampslocale import GrampsLocale
|
||||
|
||||
@@ -70,8 +69,8 @@ if LANG:
|
||||
else:
|
||||
LANG_SHORT = "C"
|
||||
|
||||
LANG = cuni(LANG)
|
||||
LANG_SHORT = cuni(LANG_SHORT)
|
||||
LANG = str(LANG)
|
||||
LANG_SHORT = str(LANG_SHORT)
|
||||
|
||||
LANG_TO_PARSER = {
|
||||
'C' : DateParser,
|
||||
@@ -84,11 +83,6 @@ LANG_TO_DISPLAY = {
|
||||
'en' : DateDisplayEn,
|
||||
'en_GB' : DateDisplayEn,
|
||||
'English_United States' : DateDisplayEn,
|
||||
'zh_CN' : DateDisplay,
|
||||
'zh_TW' : DateDisplay,
|
||||
'zh_SG' : DateDisplay,
|
||||
'zh_HK' : DateDisplay,
|
||||
'ja_JP' : DateDisplay,
|
||||
'ko_KR' : DateDisplay,
|
||||
'nb_NO' : DateDisplay,
|
||||
}
|
||||
|
@@ -29,8 +29,6 @@ date parsing class. The default base class provides parsing for English.
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import print_function, unicode_literals
|
||||
|
||||
import re
|
||||
import calendar
|
||||
|
||||
@@ -352,6 +350,7 @@ class DateParser(object):
|
||||
match.groups() == ('d', 'b', 'y'))
|
||||
self.ymd = (match.groups() == ('y', 'm', 'd') or \
|
||||
match.groups() == ('y', 'b', 'd'))
|
||||
# note ('m','d','y') is valid -- in which case both will be False
|
||||
else:
|
||||
self.dmy = True
|
||||
self.ymd = False
|
||||
@@ -529,22 +528,38 @@ class DateParser(object):
|
||||
match = regex2.match(text.lower())
|
||||
if match:
|
||||
groups = match.groups()
|
||||
if groups[1] is None:
|
||||
m = 0
|
||||
else:
|
||||
m = mmap[groups[1].lower()]
|
||||
d = self._get_int(groups[0])
|
||||
|
||||
if groups[2] is None:
|
||||
y = None
|
||||
s = False
|
||||
else:
|
||||
if groups[4] is not None: # slash year digit
|
||||
y = int(groups[3]) + 1 # fullyear + 1
|
||||
s = True
|
||||
if self.ymd:
|
||||
if groups[3] is None:
|
||||
m = 0
|
||||
else:
|
||||
y = int(groups[3])
|
||||
m = mmap[groups[3].lower()]
|
||||
d = self._get_int(groups[4])
|
||||
if groups[0] is None:
|
||||
y = None
|
||||
s = False
|
||||
else:
|
||||
if groups[2] is not None: # slash year digit
|
||||
y = int(groups[1]) + 1 # fullyear + 1
|
||||
s = True
|
||||
else: # regular, non-slash year
|
||||
y = int(groups[1])
|
||||
s = False
|
||||
else:
|
||||
if groups[1] is None:
|
||||
m = 0
|
||||
else:
|
||||
m = mmap[groups[1].lower()]
|
||||
d = self._get_int(groups[0])
|
||||
if groups[2] is None:
|
||||
y = None
|
||||
s = False
|
||||
else:
|
||||
if groups[4] is not None: # slash year digit
|
||||
y = int(groups[3]) + 1 # fullyear + 1
|
||||
s = True
|
||||
else: # regular, non-slash year
|
||||
y = int(groups[3])
|
||||
s = False
|
||||
value = (d, m, y, s)
|
||||
if check and not check((d, m, y)):
|
||||
value = Date.EMPTY
|
||||
@@ -616,12 +631,18 @@ class DateParser(object):
|
||||
match = self._numeric.match(text)
|
||||
if match:
|
||||
groups = match.groups()
|
||||
if groups == (None, None, None, None, None):
|
||||
return Date.EMPTY
|
||||
if self.ymd:
|
||||
# '1789' and ymd: incomplete date
|
||||
if groups[1] is None:
|
||||
y = self._get_int(groups[4])
|
||||
m = 0
|
||||
d = 0
|
||||
elif groups[3] is None:
|
||||
y = self._get_int(groups[1])
|
||||
m = self._get_int(groups[4])
|
||||
d = 0
|
||||
else:
|
||||
y = self._get_int(groups[1])
|
||||
m = self._get_int(groups[3])
|
||||
@@ -629,8 +650,12 @@ class DateParser(object):
|
||||
else:
|
||||
y = self._get_int(groups[4])
|
||||
if self.dmy:
|
||||
m = self._get_int(groups[3])
|
||||
d = self._get_int(groups[1])
|
||||
if groups[3] is None:
|
||||
m = self._get_int(groups[1])
|
||||
d = 0
|
||||
else:
|
||||
m = self._get_int(groups[3])
|
||||
d = self._get_int(groups[1])
|
||||
else:
|
||||
m = self._get_int(groups[1])
|
||||
d = self._get_int(groups[3])
|
||||
|
@@ -21,8 +21,22 @@
|
||||
|
||||
"""
|
||||
Date strings to translate per each language for display and parsing.
|
||||
|
||||
__main__
|
||||
--------
|
||||
|
||||
Run this code with the appropriate ``LANG`` and ``LC_DATE`` set for your target
|
||||
language, in order to generate the .po snippets initialized with the strings
|
||||
from your locale (from the deprecated data provided in _grampslocale).
|
||||
|
||||
E.g., for French::
|
||||
|
||||
LANG=fr_FR.utf8 LC_ALL=fr_FR.utf8 GRAMPS_RESOURCES=$PWD python -m gramps.gen.datehandler._datestrings
|
||||
|
||||
Then merge the output into your language's .po file, and further modify the
|
||||
strings as needed. Then remove the strings from your language's
|
||||
:class:`DateParserXX` and :class:`DateHandlerXX` classes.
|
||||
"""
|
||||
from __future__ import print_function, unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -206,8 +220,14 @@ class DateStrings(object):
|
||||
)
|
||||
|
||||
self.modifiers = ("",
|
||||
# TRANSLATORS: if the modifier is after the date
|
||||
# put the space ahead of the word instead of after it
|
||||
_("date modifier|before "),
|
||||
# TRANSLATORS: if the modifier is after the date
|
||||
# put the space ahead of the word instead of after it
|
||||
_("date modifier|after "),
|
||||
# TRANSLATORS: if the modifier is after the date
|
||||
# put the space ahead of the word instead of after it
|
||||
_("date modifier|about "),
|
||||
"", "", "")
|
||||
|
||||
@@ -228,23 +248,6 @@ class DateStrings(object):
|
||||
_("Saturday"),
|
||||
)
|
||||
|
||||
__doc__ += """
|
||||
__main__
|
||||
--------
|
||||
|
||||
Run this code with the appropriate ``LANG`` and ``LC_DATE`` set for your target
|
||||
language, in order to generate the .po snippets initialized with the strings
|
||||
from your locale (from the deprecated data provided in _grampslocale).
|
||||
|
||||
E.g., for French::
|
||||
|
||||
LANG=fr_FR.utf8 LC_ALL=fr_FR.utf8 GRAMPS_RESOURCES=$PWD python -m gramps.gen.datehandler._datestrings
|
||||
|
||||
Then merge the output into your language's .po file, and further modify the
|
||||
strings as needed. Then remove the strings from your language's
|
||||
:class:`DateParserXX` and :class:`DateHandlerXX` classes.
|
||||
"""
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
from ..utils.grampslocale import GrampsLocale
|
||||
|
@@ -21,9 +21,6 @@
|
||||
#
|
||||
|
||||
import locale
|
||||
import sys
|
||||
from ..constfunc import mac, win, conv_to_unicode
|
||||
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
|
||||
"""
|
||||
@@ -36,11 +33,6 @@ strftime.
|
||||
Since these routines return values encoded into selected character
|
||||
set, we have to convert to unicode.
|
||||
"""
|
||||
if sys.version_info[0] < 3:
|
||||
to_uni = conv_to_unicode
|
||||
else:
|
||||
#locale returns unicode in python 3
|
||||
to_uni = lambda x, y: x
|
||||
codeset = glocale.encoding
|
||||
|
||||
try:
|
||||
@@ -48,34 +40,34 @@ try:
|
||||
# here only for the upgrade tool, see _datestrings.py __main__
|
||||
_deprecated_long_months = (
|
||||
"",
|
||||
to_uni(locale.nl_langinfo(locale.MON_1), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_2), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_3), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_4), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_5), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_6), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_7), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_8), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_9), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_10), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_11), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.MON_12), codeset),
|
||||
locale.nl_langinfo(locale.MON_1),
|
||||
locale.nl_langinfo(locale.MON_2),
|
||||
locale.nl_langinfo(locale.MON_3),
|
||||
locale.nl_langinfo(locale.MON_4),
|
||||
locale.nl_langinfo(locale.MON_5),
|
||||
locale.nl_langinfo(locale.MON_6),
|
||||
locale.nl_langinfo(locale.MON_7),
|
||||
locale.nl_langinfo(locale.MON_8),
|
||||
locale.nl_langinfo(locale.MON_9),
|
||||
locale.nl_langinfo(locale.MON_10),
|
||||
locale.nl_langinfo(locale.MON_11),
|
||||
locale.nl_langinfo(locale.MON_12),
|
||||
)
|
||||
|
||||
_deprecated_short_months = (
|
||||
"",
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_1), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_2), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_3), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_4), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_5), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_6), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_7), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_8), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_9), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_10), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_11), codeset),
|
||||
to_uni(locale.nl_langinfo(locale.ABMON_12), codeset),
|
||||
locale.nl_langinfo(locale.ABMON_1),
|
||||
locale.nl_langinfo(locale.ABMON_2),
|
||||
locale.nl_langinfo(locale.ABMON_3),
|
||||
locale.nl_langinfo(locale.ABMON_4),
|
||||
locale.nl_langinfo(locale.ABMON_5),
|
||||
locale.nl_langinfo(locale.ABMON_6),
|
||||
locale.nl_langinfo(locale.ABMON_7),
|
||||
locale.nl_langinfo(locale.ABMON_8),
|
||||
locale.nl_langinfo(locale.ABMON_9),
|
||||
locale.nl_langinfo(locale.ABMON_10),
|
||||
locale.nl_langinfo(locale.ABMON_11),
|
||||
locale.nl_langinfo(locale.ABMON_12),
|
||||
)
|
||||
|
||||
# Gramps day number: Sunday => 1, Monday => 2, etc
|
||||
@@ -86,24 +78,24 @@ try:
|
||||
# see http://docs.python.org/library/locale.html
|
||||
_deprecated_long_days = (
|
||||
"",
|
||||
to_uni(locale.nl_langinfo(locale.DAY_1), codeset), # Sunday
|
||||
to_uni(locale.nl_langinfo(locale.DAY_2), codeset), # Monday
|
||||
to_uni(locale.nl_langinfo(locale.DAY_3), codeset), # Tuesday
|
||||
to_uni(locale.nl_langinfo(locale.DAY_4), codeset), # Wednesday
|
||||
to_uni(locale.nl_langinfo(locale.DAY_5), codeset), # Thursday
|
||||
to_uni(locale.nl_langinfo(locale.DAY_6), codeset), # Friday
|
||||
to_uni(locale.nl_langinfo(locale.DAY_7), codeset), # Saturday
|
||||
locale.nl_langinfo(locale.DAY_1), # Sunday
|
||||
locale.nl_langinfo(locale.DAY_2), # Monday
|
||||
locale.nl_langinfo(locale.DAY_3), # Tuesday
|
||||
locale.nl_langinfo(locale.DAY_4), # Wednesday
|
||||
locale.nl_langinfo(locale.DAY_5), # Thursday
|
||||
locale.nl_langinfo(locale.DAY_6), # Friday
|
||||
locale.nl_langinfo(locale.DAY_7), # Saturday
|
||||
)
|
||||
|
||||
_deprecated_short_days = (
|
||||
"",
|
||||
to_uni(locale.nl_langinfo(locale.ABDAY_1), codeset), # Sunday
|
||||
to_uni(locale.nl_langinfo(locale.ABDAY_2), codeset), # Monday
|
||||
to_uni(locale.nl_langinfo(locale.ABDAY_3), codeset), # Tuesday
|
||||
to_uni(locale.nl_langinfo(locale.ABDAY_4), codeset), # Wednesday
|
||||
to_uni(locale.nl_langinfo(locale.ABDAY_5), codeset), # Thursday
|
||||
to_uni(locale.nl_langinfo(locale.ABDAY_6), codeset), # Friday
|
||||
to_uni(locale.nl_langinfo(locale.ABDAY_7), codeset), # Saturday
|
||||
locale.nl_langinfo(locale.ABDAY_1), # Sunday
|
||||
locale.nl_langinfo(locale.ABDAY_2), # Monday
|
||||
locale.nl_langinfo(locale.ABDAY_3), # Tuesday
|
||||
locale.nl_langinfo(locale.ABDAY_4), # Wednesday
|
||||
locale.nl_langinfo(locale.ABDAY_5), # Thursday
|
||||
locale.nl_langinfo(locale.ABDAY_6), # Friday
|
||||
locale.nl_langinfo(locale.ABDAY_7), # Saturday
|
||||
)
|
||||
|
||||
tformat = locale.nl_langinfo(locale.D_FMT).replace('%y','%Y')
|
||||
@@ -116,34 +108,34 @@ except:
|
||||
|
||||
_deprecated_long_months = (
|
||||
"",
|
||||
to_uni(time.strftime('%B',(1,1,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,2,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,3,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,4,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,5,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,6,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,7,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,8,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,9,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,10,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,11,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%B',(1,12,1,1,1,1,1,1,1)), codeset),
|
||||
time.strftime('%B',(1,1,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,2,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,3,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,4,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,5,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,6,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,7,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,8,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,9,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,10,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,11,1,1,1,1,1,1,1)),
|
||||
time.strftime('%B',(1,12,1,1,1,1,1,1,1)),
|
||||
)
|
||||
|
||||
_deprecated_short_months = (
|
||||
"",
|
||||
to_uni(time.strftime('%b',(1,1,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,2,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,3,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,4,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,5,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,6,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,7,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,8,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,9,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,10,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,11,1,1,1,1,1,1,1)), codeset),
|
||||
to_uni(time.strftime('%b',(1,12,1,1,1,1,1,1,1)), codeset),
|
||||
time.strftime('%b',(1,1,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,2,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,3,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,4,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,5,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,6,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,7,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,8,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,9,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,10,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,11,1,1,1,1,1,1,1)),
|
||||
time.strftime('%b',(1,12,1,1,1,1,1,1,1)),
|
||||
)
|
||||
|
||||
# Gramps day number: Sunday => 1, Monday => 2, etc
|
||||
@@ -157,24 +149,24 @@ except:
|
||||
# just a dummy.
|
||||
_deprecated_long_days = (
|
||||
"",
|
||||
to_uni(time.strftime('%A',(1,1,1,1,1,1,6,1,1)), codeset), # Sunday
|
||||
to_uni(time.strftime('%A',(1,1,1,1,1,1,0,1,1)), codeset), # Monday
|
||||
to_uni(time.strftime('%A',(1,1,1,1,1,1,1,1,1)), codeset), # Tuesday
|
||||
to_uni(time.strftime('%A',(1,1,1,1,1,1,2,1,1)), codeset), # Wednesday
|
||||
to_uni(time.strftime('%A',(1,1,1,1,1,1,3,1,1)), codeset), # Thursday
|
||||
to_uni(time.strftime('%A',(1,1,1,1,1,1,4,1,1)), codeset), # Friday
|
||||
to_uni(time.strftime('%A',(1,1,1,1,1,1,5,1,1)), codeset), # Saturday
|
||||
time.strftime('%A',(1,1,1,1,1,1,6,1,1)), # Sunday
|
||||
time.strftime('%A',(1,1,1,1,1,1,0,1,1)), # Monday
|
||||
time.strftime('%A',(1,1,1,1,1,1,1,1,1)), # Tuesday
|
||||
time.strftime('%A',(1,1,1,1,1,1,2,1,1)), # Wednesday
|
||||
time.strftime('%A',(1,1,1,1,1,1,3,1,1)), # Thursday
|
||||
time.strftime('%A',(1,1,1,1,1,1,4,1,1)), # Friday
|
||||
time.strftime('%A',(1,1,1,1,1,1,5,1,1)), # Saturday
|
||||
)
|
||||
|
||||
_deprecated_short_days = (
|
||||
"",
|
||||
to_uni(time.strftime('%a',(1,1,1,1,1,1,6,1,1)), codeset), # Sunday
|
||||
to_uni(time.strftime('%a',(1,1,1,1,1,1,0,1,1)), codeset), # Monday
|
||||
to_uni(time.strftime('%a',(1,1,1,1,1,1,1,1,1)), codeset), # Tuesday
|
||||
to_uni(time.strftime('%a',(1,1,1,1,1,1,2,1,1)), codeset), # Wednesday
|
||||
to_uni(time.strftime('%a',(1,1,1,1,1,1,3,1,1)), codeset), # Thursday
|
||||
to_uni(time.strftime('%a',(1,1,1,1,1,1,4,1,1)), codeset), # Friday
|
||||
to_uni(time.strftime('%a',(1,1,1,1,1,1,5,1,1)), codeset), # Saturday
|
||||
time.strftime('%a',(1,1,1,1,1,1,6,1,1)), # Sunday
|
||||
time.strftime('%a',(1,1,1,1,1,1,0,1,1)), # Monday
|
||||
time.strftime('%a',(1,1,1,1,1,1,1,1,1)), # Tuesday
|
||||
time.strftime('%a',(1,1,1,1,1,1,2,1,1)), # Wednesday
|
||||
time.strftime('%a',(1,1,1,1,1,1,3,1,1)), # Thursday
|
||||
time.strftime('%a',(1,1,1,1,1,1,4,1,1)), # Friday
|
||||
time.strftime('%a',(1,1,1,1,1,1,5,1,1)), # Saturday
|
||||
)
|
||||
|
||||
# depending on the locale, the value returned for 20th Feb 2009 could be
|
||||
@@ -194,6 +186,8 @@ except:
|
||||
'10/25/2005' : '%m/%d/%Y',
|
||||
'2005/10/25' : '%Y/%m/%d',
|
||||
'25.10.2005' : '%d.%m.%Y',
|
||||
'25.10.2005.' : '%d.%m.%Y.',
|
||||
'25. 10. 2005.' : '%d. %m. %Y.',
|
||||
'10.25.2005' : '%m.%d.%Y',
|
||||
'2005.10.25' : '%Y.%m.%d',
|
||||
}
|
||||
|
@@ -23,7 +23,6 @@
|
||||
Deeper testing of some DateParser internals.
|
||||
"""
|
||||
|
||||
from __future__ import print_function, unicode_literals
|
||||
import unittest
|
||||
|
||||
from ...utils.grampslocale import GrampsLocale
|
||||
|
@@ -32,7 +32,6 @@ Based on the Check Localized Date Displayer and Parser tool.
|
||||
# standard python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import unicode_literals, division
|
||||
import unittest
|
||||
|
||||
import sys
|
||||
@@ -57,7 +56,7 @@ from .. import displayer as _dd
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DateHandlerTest(unittest.TestCase):
|
||||
def base_test(self, test_date):
|
||||
def base_case(self, test_date):
|
||||
datestr = _dd.display(test_date)
|
||||
new_date = _dp.parse(datestr)
|
||||
|
||||
@@ -86,7 +85,7 @@ class DateHandlerTest(unittest.TestCase):
|
||||
dates.append(d)
|
||||
|
||||
for test_date in dates:
|
||||
self.base_test(test_date)
|
||||
self.base_case(test_date)
|
||||
|
||||
def test_span(self):
|
||||
|
||||
@@ -125,7 +124,7 @@ class DateHandlerTest(unittest.TestCase):
|
||||
dates.append(d)
|
||||
|
||||
for test_date in dates:
|
||||
self.base_test(test_date)
|
||||
self.base_case(test_date)
|
||||
|
||||
def test_textual(self):
|
||||
calendar = Date.CAL_GREGORIAN
|
||||
@@ -135,7 +134,7 @@ class DateHandlerTest(unittest.TestCase):
|
||||
test_date = Date()
|
||||
test_date.set(quality, modifier, calendar, Date.EMPTY,
|
||||
"This is a textual date")
|
||||
self.base_test(test_date)
|
||||
self.base_case(test_date)
|
||||
|
||||
def test_too_few_arguments(self):
|
||||
dateval = (4, 7, 1789, False)
|
||||
|
@@ -23,7 +23,6 @@
|
||||
Deeper testing of some DateParser internals.
|
||||
"""
|
||||
|
||||
from __future__ import print_function, unicode_literals
|
||||
import unittest
|
||||
|
||||
from ...utils.grampslocale import GrampsLocale
|
||||
|
@@ -19,8 +19,6 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
from __future__ import print_function, unicode_literals
|
||||
|
||||
import unittest
|
||||
|
||||
from .. import _datestrings
|
||||
|
@@ -53,11 +53,7 @@ db.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import sys
|
||||
if sys.version_info[0] < 3:
|
||||
import cPickle as pickle
|
||||
else:
|
||||
import pickle
|
||||
import pickle
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
|
@@ -77,7 +77,7 @@ class DbReadBase(object):
|
||||
Databases can implement certain features or not. The default is
|
||||
None, unless otherwise explicitly stated.
|
||||
"""
|
||||
return self.__feature.get(feature, None) # can also be explitily None
|
||||
return self.__feature.get(feature, None) # can also be explicitly None
|
||||
|
||||
def set_feature(self, feature, value):
|
||||
"""
|
||||
@@ -1149,8 +1149,8 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_prefixes(self, person, media, family, source, place, event,
|
||||
repository, note):
|
||||
def set_prefixes(self, person, media, family, source, citation,
|
||||
place, event, repository, note):
|
||||
"""
|
||||
Set the prefixes for the gramps ids for all gramps objects
|
||||
"""
|
||||
|
@@ -27,7 +27,6 @@ BSDDBTxn class: Wrapper for BSDDB transaction-oriented methods
|
||||
# BSDDBTxn
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from __future__ import print_function, with_statement
|
||||
|
||||
class BSDDBTxn(object):
|
||||
"""
|
||||
@@ -186,12 +185,7 @@ class BSDDBTxn(object):
|
||||
# test code
|
||||
if __name__ == "__main__":
|
||||
print("1")
|
||||
from ..config import config
|
||||
import sys
|
||||
if config.get('preferences.use-bsddb3') or sys.version_info[0] >= 3:
|
||||
from bsddb3 import db, dbshelve
|
||||
else:
|
||||
from bsddb import db, dbshelve
|
||||
from bsddb3 import db, dbshelve
|
||||
print("2")
|
||||
x = db.DBEnv()
|
||||
print("3")
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user