Compare commits
756
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ecf02a023a | ||
|
|
25dafee197 | ||
|
|
8c1ccabe31 | ||
|
|
33635db955 | ||
|
|
ee67f4496d | ||
|
|
a97c20f4b5 | ||
|
|
04b8be8710 | ||
|
|
d68bbf3383 | ||
|
|
6cbc465e60 | ||
|
|
657aca35ac | ||
|
|
c727d56ed0 | ||
|
|
b18676aaf4 | ||
|
|
bf634ee8e8 | ||
|
|
e01a8602b6 | ||
|
|
ac8f5a059a | ||
|
|
e40f5d9faa | ||
|
|
6a4bd7dceb | ||
|
|
118e6c89e9 | ||
|
|
bc17245331 | ||
|
|
ea5b54598e | ||
|
|
f276507fb8 | ||
|
|
736f10875f | ||
|
|
7230e8618e | ||
|
|
b4fed8101a | ||
|
|
ed8807f73a | ||
|
|
512fa615bf | ||
|
|
16cd995558 | ||
|
|
5939e722e4 | ||
|
|
352d6fc558 | ||
|
|
83d24ed681 | ||
|
|
d14383cb3a | ||
|
|
f1659d556e | ||
|
|
22e7243660 | ||
|
|
2d1d0342c9 | ||
|
|
fd1418dc8a | ||
|
|
b38f68496f | ||
|
|
f035196b6c | ||
|
|
c3fb9c0c4e | ||
|
|
ca7f65865e | ||
|
|
9485e061b1 | ||
|
|
d6a97cf90e | ||
|
|
4791550f6b | ||
|
|
59cced2bc6 | ||
|
|
bef4b309b6 | ||
|
|
6a35246e08 | ||
|
|
fa46fe189b | ||
|
|
61526190e6 | ||
|
|
a4550d2cd6 | ||
|
|
85161726a2 | ||
|
|
80779a35fa | ||
|
|
05f04093af | ||
|
|
ccc3a4a8ef | ||
|
|
657e76ccb4 | ||
|
|
d7379bd2f1 | ||
|
|
e145a30291 | ||
|
|
543661d62e | ||
|
|
022da0cb82 | ||
|
|
5791788f0e | ||
|
|
2a2a0d2766 | ||
|
|
804fa635e6 | ||
|
|
cf479647ad | ||
|
|
14faa46363 | ||
|
|
1b18b652bb | ||
|
|
0d704f03d8 | ||
|
|
07ce8c22d8 | ||
|
|
8086d9f2ca | ||
|
|
709f3a33d5 | ||
|
|
108d7b461c | ||
|
|
355110e703 | ||
|
|
dd828cee5b | ||
|
|
22c966bd8a | ||
|
|
2e2e6c88a4 | ||
|
|
60ab0a01bf | ||
|
|
f9cacac1db | ||
|
|
1e54cbbec3 | ||
|
|
828c187dc3 | ||
|
|
8244c7b211 | ||
|
|
c6970e640c | ||
|
|
5ffb4bcfac | ||
|
|
8d0fcc5730 | ||
|
|
5056b8addf | ||
|
|
c8001c7483 | ||
|
|
49493290c5 | ||
|
|
38db06f931 | ||
|
|
d284ace4ed | ||
|
|
2974f82aad | ||
|
|
98238c7112 | ||
|
|
8f99b4b488 | ||
|
|
41bd626aa2 | ||
|
|
c5ddeeca5e | ||
|
|
6b2f7aea64 | ||
|
|
2c67db6a58 | ||
|
|
6b45d7cedd | ||
|
|
1ba072e6fc | ||
|
|
2b6cc3cd18 | ||
|
|
55fa920628 | ||
|
|
db8b95cf2d | ||
|
|
9dec0bc364 | ||
|
|
bf1875e830 | ||
|
|
2fef1b30d0 | ||
|
|
df6b946268 | ||
|
|
78a0ac5f50 | ||
|
|
37b2f09134 | ||
|
|
1766f9944c | ||
|
|
2965d77cde | ||
|
|
e0a8bb4f5e | ||
|
|
fd4795e957 | ||
|
|
cb932b9221 | ||
|
|
8379e0ce6e | ||
|
|
38239526f6 | ||
|
|
8ee8e89011 | ||
|
|
1f8f8b9434 | ||
|
|
95b2a8765b | ||
|
|
977db6223f | ||
|
|
ef271dc381 | ||
|
|
3d3b13c8ad | ||
|
|
efd73e9427 | ||
|
|
ae72a999f0 | ||
|
|
5713d173b3 | ||
|
|
fab2537dce | ||
|
|
3fdc986542 | ||
|
|
141cd18651 | ||
|
|
3b5fcae948 | ||
|
|
916232a6ef | ||
|
|
8a3b606b7a | ||
|
|
6d050fbf7c | ||
|
|
002f1e0899 | ||
|
|
85292a9ef1 | ||
|
|
d2ec35ec35 | ||
|
|
0d121b32c5 | ||
|
|
0a58ce69f9 | ||
|
|
c56177169d | ||
|
|
9246484876 | ||
|
|
08746bf024 | ||
|
|
0919763f15 | ||
|
|
d7b409ccec | ||
|
|
73ca25e68e | ||
|
|
64690ea554 | ||
|
|
be6780fa7d | ||
|
|
2dbfcb27dd | ||
|
|
57efc716ef | ||
|
|
7d907c5d63 | ||
|
|
ef3f1718b6 | ||
|
|
3f652cfb45 | ||
|
|
473dd3257a | ||
|
|
747104b3ab | ||
|
|
95762e864f | ||
|
|
46c6737d67 | ||
|
|
ce01a69314 | ||
|
|
facff359e3 | ||
|
|
a9df15c9be | ||
|
|
83a4b553f4 | ||
|
|
c4f94bf9dc | ||
|
|
e59aa0c907 | ||
|
|
638f590eb3 | ||
|
|
c5f8d2b5db | ||
|
|
3d897f3146 | ||
|
|
998c2f31b9 | ||
|
|
337be8e6af | ||
|
|
968f378174 | ||
|
|
6110fc7612 | ||
|
|
c1c2c1557c | ||
|
|
44b7983331 | ||
|
|
9cc770a70c | ||
|
|
3b9d97d348 | ||
|
|
f57386ab63 | ||
|
|
adccc67a68 | ||
|
|
cd084ca257 | ||
|
|
03c26cb83c | ||
|
|
c8a418f5bf | ||
|
|
539330309b | ||
|
|
0cba44146a | ||
|
|
93af3a0c63 | ||
|
|
349bdf85b7 | ||
|
|
0813ba25db | ||
|
|
49c5ec5977 | ||
|
|
c4fc1066bb | ||
|
|
39c3dc437a | ||
|
|
143919db14 | ||
|
|
49df7446b2 | ||
|
|
d08b394e7c | ||
|
|
b865556ddd | ||
|
|
97bf1cb406 | ||
|
|
7c5df1300e | ||
|
|
d5e8b810b9 | ||
|
|
1571f8409a | ||
|
|
3901e7dd4c | ||
|
|
c352fa6378 | ||
|
|
5ac0d29f00 | ||
|
|
111d792c0c | ||
|
|
1e0e1c0b39 | ||
|
|
eb3c13dbca | ||
|
|
9116148587 | ||
|
|
5b51f3dcc9 | ||
|
|
459d3f931c | ||
|
|
55ff3efd5f | ||
|
|
d59f4e86b2 | ||
|
|
682cbe6e21 | ||
|
|
7d38122be8 | ||
|
|
28850728af | ||
|
|
f603f24bbd | ||
|
|
e1ba3d0523 | ||
|
|
dee377762a | ||
|
|
ceeb4382f1 | ||
|
|
f92ee329a9 | ||
|
|
ce830fb8bf | ||
|
|
1ce98afc86 | ||
|
|
fc4b9fe695 | ||
|
|
8f09adefe9 | ||
|
|
74ffc76af0 | ||
|
|
7b578356fd | ||
|
|
6bf8870295 | ||
|
|
a8e6f7b9a3 | ||
|
|
d71f7d7097 | ||
|
|
06476cfc6d | ||
|
|
4541027dc3 | ||
|
|
1c4d27c2a9 | ||
|
|
0599539d09 | ||
|
|
b8ba05540e | ||
|
|
b3509ad3f4 | ||
|
|
0c144c97a9 | ||
|
|
715cce27f4 | ||
|
|
8876252771 | ||
|
|
0f906b363b | ||
|
|
8196b65aab | ||
|
|
4daf7e1214 | ||
|
|
63d37e84cc | ||
|
|
fae1cb710b | ||
|
|
5d842e046e | ||
|
|
a948feb60e | ||
|
|
4226bc9d45 | ||
|
|
5fe0a4df46 | ||
|
|
d0b50caea1 | ||
|
|
3e5a956454 | ||
|
|
e46321a7c6 | ||
|
|
6a6d0c3a2e | ||
|
|
782f81fb5e | ||
|
|
53eabbaa86 | ||
|
|
55d3a24d2e | ||
|
|
f7bda7d51b | ||
|
|
3af9a8b803 | ||
|
|
7f813e95e5 | ||
|
|
7f07ad2637 | ||
|
|
88842e875f | ||
|
|
62403b5789 | ||
|
|
6f0119288b | ||
|
|
2692f86cd6 | ||
|
|
64208cf9b9 | ||
|
|
e588ff504b | ||
|
|
7855df6c08 | ||
|
|
5ceb7b69d9 | ||
|
|
0d7b79ea88 | ||
|
|
20f7b862cf | ||
|
|
fe989d9ce3 | ||
|
|
532928ef69 | ||
|
|
2e9c9a435a | ||
|
|
4b313694fc | ||
|
|
ace8cb415f | ||
|
|
61c678417a | ||
|
|
67b967ce3c | ||
|
|
2278ceef55 | ||
|
|
9ca01a3211 | ||
|
|
a50675f7ac | ||
|
|
30cd5f885b | ||
|
|
5749fadedc | ||
|
|
064ec90db0 | ||
|
|
0c9953bb1a | ||
|
|
2da74564a3 | ||
|
|
14d8e36aba | ||
|
|
f3e11efeaf | ||
|
|
0307c10244 | ||
|
|
ef647b0680 | ||
|
|
f034a2b8c7 | ||
|
|
8f86906e8a | ||
|
|
71cc974639 | ||
|
|
e8c6ad2542 | ||
|
|
4e7eaf016a | ||
|
|
022ba94cd7 | ||
|
|
40176eeaaf | ||
|
|
42ed11e0ff | ||
|
|
c8b9a5ee5b | ||
|
|
4284eb95a7 | ||
|
|
081095d333 | ||
|
|
076d75eba4 | ||
|
|
705ae9075d | ||
|
|
79888ec6ea | ||
|
|
ea133b3e9f | ||
|
|
b58ac2da8a | ||
|
|
f28c90bc7a | ||
|
|
28bf8479fd | ||
|
|
1ae88d9aed | ||
|
|
ae960f79d4 | ||
|
|
c07dcbe0ee | ||
|
|
5ca82248d3 | ||
|
|
ec6343e00c | ||
|
|
94716cc20f | ||
|
|
c3c9b72e88 | ||
|
|
e287101688 | ||
|
|
1a1515d6e3 | ||
|
|
d0e9728567 | ||
|
|
010fe736ec | ||
|
|
aee05dc200 | ||
|
|
d52a8f0a61 | ||
|
|
cad3871523 | ||
|
|
df4e547a18 | ||
|
|
880947c387 | ||
|
|
fd47f8d146 | ||
|
|
1a113ae0fd | ||
|
|
267a762262 | ||
|
|
544e3dbcc4 | ||
|
|
5fead50446 | ||
|
|
c3c8a632de | ||
|
|
dfdb11bfc9 | ||
|
|
36d68f089f | ||
|
|
a6276cd38f | ||
|
|
d46a00edea | ||
|
|
68fbebe7d1 | ||
|
|
2f2b619762 | ||
|
|
1e54054953 | ||
|
|
4912cc08e4 | ||
|
|
2cb8c2801a | ||
|
|
f10ce1c368 | ||
|
|
a879144cc7 | ||
|
|
86263712a9 | ||
|
|
d3279c1382 | ||
|
|
42f2ac04e9 | ||
|
|
cde65a53a6 | ||
|
|
fdeb604d1f | ||
|
|
26038164ec | ||
|
|
4c010a94e4 | ||
|
|
f094346742 | ||
|
|
ed0be5f17d | ||
|
|
963acb56e0 | ||
|
|
ee150c101a | ||
|
|
8739412351 | ||
|
|
f03dab0be3 | ||
|
|
6b38e74ecb | ||
|
|
b6bb8ccdcc | ||
|
|
593d57dbc0 | ||
|
|
eac59d932d | ||
|
|
db81851195 | ||
|
|
5068aa1b85 | ||
|
|
fe1fa8b505 | ||
|
|
41bcfefd67 | ||
|
|
4c2464cb49 | ||
|
|
c7bbc01b20 | ||
|
|
3b06bf10dd | ||
|
|
88e98fcd92 | ||
|
|
6a51ac55db | ||
|
|
3ac49dcb2c | ||
|
|
f59c7c16bd | ||
|
|
16f56fbbea | ||
|
|
1b01e9d74e | ||
|
|
ffdef3276c | ||
|
|
efcdcd7434 | ||
|
|
e7e1976222 | ||
|
|
8fa6fad67a | ||
|
|
a937d151af | ||
|
|
a860a9d80b | ||
|
|
99b7fc8815 | ||
|
|
04b7888817 | ||
|
|
2574202a46 | ||
|
|
e24faddabb | ||
|
|
52846b8e68 | ||
|
|
0c03ec2fc1 | ||
|
|
1aeea6a6e8 | ||
|
|
fb8d529e5b | ||
|
|
ec9d6e8fa7 | ||
|
|
659329c879 | ||
|
|
56fa449de8 | ||
|
|
4ad41e9269 | ||
|
|
af674df82e | ||
|
|
9aeeae8baf | ||
|
|
5df1612339 | ||
|
|
b79d5c4cfc | ||
|
|
c712e5813a | ||
|
|
9ccfd50d93 | ||
|
|
0c4529c0ae | ||
|
|
db37a7dbd9 | ||
|
|
4f96497e64 | ||
|
|
8841d13a7e | ||
|
|
b31f6922dd | ||
|
|
fe763b7490 | ||
|
|
0633930667 | ||
|
|
dedb5122cb | ||
|
|
8f494a683f | ||
|
|
8f79b0adbb | ||
|
|
3ee28584cb | ||
|
|
5633570250 | ||
|
|
3bcea79cc5 | ||
|
|
3b049b5da1 | ||
|
|
f46350d595 | ||
|
|
566d057456 | ||
|
|
813361179f | ||
|
|
1a6db46ffa | ||
|
|
ba7eff6e67 | ||
|
|
cea4d15d7d | ||
|
|
0e33ea7a81 | ||
|
|
7e90144db3 | ||
|
|
b8495e7436 | ||
|
|
7a7101e71c | ||
|
|
86c4301cb9 | ||
|
|
8a8807c670 | ||
|
|
c4c1059c50 | ||
|
|
53542ea3d5 | ||
|
|
89699dc847 | ||
|
|
5099b421e0 | ||
|
|
f5365202cc | ||
|
|
ec1360076e | ||
|
|
c43c0b72d2 | ||
|
|
b7155b47ed | ||
|
|
40fbdae481 | ||
|
|
30a657b69e | ||
|
|
43d1f8ce04 | ||
|
|
2a1234c45c | ||
|
|
d30c8e21aa | ||
|
|
b974750621 | ||
|
|
7efcd2edf6 | ||
|
|
56280fa418 | ||
|
|
e267893470 | ||
|
|
49321133e0 | ||
|
|
e95fe692ba | ||
|
|
1991d194fa | ||
|
|
d2b200c121 | ||
|
|
3b16b6be79 | ||
|
|
998c5f4bee | ||
|
|
4f11e97b8d | ||
|
|
5acf75d696 | ||
|
|
5e10faf779 | ||
|
|
b774ed8f32 | ||
|
|
f6e854d98d | ||
|
|
5666441e75 | ||
|
|
b6f9fbca9a | ||
|
|
e343d55044 | ||
|
|
b06c101a8a | ||
|
|
2588e61a96 | ||
|
|
6d1631dbfe | ||
|
|
7406c6ecf4 | ||
|
|
3bca0e8184 | ||
|
|
dde84ed8bc | ||
|
|
043ebaba65 | ||
|
|
08eb715da2 | ||
|
|
af240c9b53 | ||
|
|
f92903b1f7 | ||
|
|
34d6ddada0 | ||
|
|
a09d5471cf | ||
|
|
908201a80d | ||
|
|
01b7490c8c | ||
|
|
0496756abb | ||
|
|
1590f8c000 | ||
|
|
1a09304335 | ||
|
|
f762fda80d | ||
|
|
0b2aab53ee | ||
|
|
ebe56a3f05 | ||
|
|
0a47474e0e | ||
|
|
45de935d5e | ||
|
|
cf839a195b | ||
|
|
4498ee32df | ||
|
|
f25fb1415b | ||
|
|
dd151a3990 | ||
|
|
7c471db1c9 | ||
|
|
13b53e35d4 | ||
|
|
e931b8a75c | ||
|
|
85e437d291 | ||
|
|
f3053b19ca | ||
|
|
3b4ceeb630 | ||
|
|
3ce8c4880a | ||
|
|
defcda7981 | ||
|
|
2359633198 | ||
|
|
5ad32042c6 | ||
|
|
376f2b0010 | ||
|
|
66260871dc | ||
|
|
f75618eb2d | ||
|
|
e5ca4186da | ||
|
|
5ecb140094 | ||
|
|
0309598193 | ||
|
|
cb38e81a3d | ||
|
|
a1dff4457b | ||
|
|
061f5fbb1f | ||
|
|
1a3f08203c | ||
|
|
6c993242f2 | ||
|
|
a0b2cf1803 | ||
|
|
34aefd9530 | ||
|
|
14142ff5e3 | ||
|
|
1a74ba03b8 | ||
|
|
91a279e362 | ||
|
|
b71b4e9c7f | ||
|
|
55edefd4b8 | ||
|
|
ce884b6578 | ||
|
|
90b8145693 | ||
|
|
dc320aab8c | ||
|
|
6a6fe9b48d | ||
|
|
1e8ab3ec69 | ||
|
|
a5ed1086d8 | ||
|
|
fb6ed2ab53 | ||
|
|
cb27d546e9 | ||
|
|
1742d44d35 | ||
|
|
9bf5144e70 | ||
|
|
9c92bb8551 | ||
|
|
341d48bd40 | ||
|
|
2577367f01 | ||
|
|
76cb80f17f | ||
|
|
9a53fae5a0 | ||
|
|
33169fd05f | ||
|
|
1af4e89094 | ||
|
|
ab2793476f | ||
|
|
f372f5b813 | ||
|
|
09cad05e05 | ||
|
|
083a2a721e | ||
|
|
beb3962f52 | ||
|
|
f17379cd16 | ||
|
|
a27e49cf0e | ||
|
|
291c29ad04 | ||
|
|
e9acf39cf2 | ||
|
|
93f59af9d8 | ||
|
|
f01d469849 | ||
|
|
1b6d84353c | ||
|
|
03128a0728 | ||
|
|
23213e590b | ||
|
|
af7c09d8ae | ||
|
|
5929f2066e | ||
|
|
48bab7bed1 | ||
|
|
a9ce126ed4 | ||
|
|
251c4acde2 | ||
|
|
3406450451 | ||
|
|
f3dc114476 | ||
|
|
cdf6e0e3a3 | ||
|
|
90a513effa | ||
|
|
2087f807f3 | ||
|
|
9b5ef6d069 | ||
|
|
f2229db819 | ||
|
|
f072dd889e | ||
|
|
36380651e4 | ||
|
|
b848f1cd2a | ||
|
|
9ccc149161 | ||
|
|
2c9bad6108 | ||
|
|
55fa8f8d86 | ||
|
|
289d28c22b | ||
|
|
35b79acacc | ||
|
|
5621ade2e4 | ||
|
|
772265c3ef | ||
|
|
176fcae6ad | ||
|
|
cde4c4ebf5 | ||
|
|
7f24aca813 | ||
|
|
c8998cc81c | ||
|
|
ca105fb73a | ||
|
|
4e812c738b | ||
|
|
d8796d35fb | ||
|
|
83e5bd6be3 | ||
|
|
50bb8ffbbc | ||
|
|
290fd6ec43 | ||
|
|
c358d5c3e1 | ||
|
|
f321d68db1 | ||
|
|
4a30d9e4b7 | ||
|
|
013617dafb | ||
|
|
67c3d4a77a | ||
|
|
bd7cc813aa | ||
|
|
6264461a54 | ||
|
|
52ccc26753 | ||
|
|
16f229c644 | ||
|
|
4e2ab54fb9 | ||
|
|
6098ccd468 | ||
|
|
5dd88052cf | ||
|
|
593f5a8f2b | ||
|
|
eceeddb1e4 | ||
|
|
a3925313ad | ||
|
|
413da833ca | ||
|
|
bbb8b5161d | ||
|
|
d407c2fb6b | ||
|
|
2c454268a1 | ||
|
|
467f779230 | ||
|
|
61da801fa1 | ||
|
|
3e69fa5cbe | ||
|
|
35b7495438 | ||
|
|
92618fcc6d | ||
|
|
238a1c5c12 | ||
|
|
ff6be8b3d6 | ||
|
|
66a3dd6050 | ||
|
|
6ab5a22292 | ||
|
|
e584704e7b | ||
|
|
983d787322 | ||
|
|
9d77418b30 | ||
|
|
c835c6f87c | ||
|
|
55661056e2 | ||
|
|
6188812b41 | ||
|
|
8c7b0f8585 | ||
|
|
3646f2a86c | ||
|
|
bc32d2fd76 | ||
|
|
13c5d75bc1 | ||
|
|
1fda1e2a92 | ||
|
|
bfb99f17ad | ||
|
|
8aeebcdfd2 | ||
|
|
2fc4bae826 | ||
|
|
9a40306bd1 | ||
|
|
13064ef627 | ||
|
|
6495240859 | ||
|
|
e75a45748f | ||
|
|
8159e95389 | ||
|
|
98ed617a5d | ||
|
|
74aba1f6b4 | ||
|
|
cba583a486 | ||
|
|
26e5f7aa9c | ||
|
|
5f928d5379 | ||
|
|
db3d7a3d0d | ||
|
|
9a6c074888 | ||
|
|
9ae653986f | ||
|
|
3842b0e760 | ||
|
|
73267600bd | ||
|
|
eb8c17cfa5 | ||
|
|
ff1f2fe33b | ||
|
|
72bcfc5cd6 | ||
|
|
e94696ecf0 | ||
|
|
27c2b0c81d | ||
|
|
b556b29b25 | ||
|
|
0a11cbf8b5 | ||
|
|
a4a3c55c09 | ||
|
|
2365a72d98 | ||
|
|
cf58de59c1 | ||
|
|
1039156019 | ||
|
|
11942d8975 | ||
|
|
98950a89a3 | ||
|
|
3bf40f9921 | ||
|
|
634691516c | ||
|
|
de177975a0 | ||
|
|
e3d732a31e | ||
|
|
13acd73c9e | ||
|
|
5826307b63 | ||
|
|
ee4e652cac | ||
|
|
baff7cddb0 | ||
|
|
e1dca2bfaa | ||
|
|
fec5d532d1 | ||
|
|
3d854ba944 | ||
|
|
79cb66b0f1 | ||
|
|
da018c1842 | ||
|
|
d8077a8169 | ||
|
|
74b87e04eb | ||
|
|
cb738e88ad | ||
|
|
382987f366 | ||
|
|
5358e8dd93 | ||
|
|
18b00846fe | ||
|
|
635db88800 | ||
|
|
0f9c3012be | ||
|
|
5932addfb5 | ||
|
|
882c37afc1 | ||
|
|
a3960c8515 | ||
|
|
3fe7d20799 | ||
|
|
4f30f09fab | ||
|
|
43106eb47f | ||
|
|
4653b35cb3 | ||
|
|
894ce3aca5 | ||
|
|
f157148414 | ||
|
|
6675cce1f2 | ||
|
|
4a49287292 | ||
|
|
e0cb56ee93 | ||
|
|
0743c19449 | ||
|
|
5ff0b3f977 | ||
|
|
8eedb37772 | ||
|
|
15ca5e6d4c | ||
|
|
bd142c0744 | ||
|
|
b99c9f41cc | ||
|
|
4ffc5e3af4 | ||
|
|
bb919efec7 | ||
|
|
905717f4f1 | ||
|
|
f4bc6c3384 | ||
|
|
67dfc55a0b | ||
|
|
def6b3fd07 | ||
|
|
d4cb0c3d7c | ||
|
|
5f794c0570 | ||
|
|
f38ce3f3f6 | ||
|
|
4120c5a1bc | ||
|
|
00aa25258e | ||
|
|
676ff5601c | ||
|
|
7ceb8ab57a | ||
|
|
f69883a586 | ||
|
|
b82ec171a2 | ||
|
|
105f9fb227 | ||
|
|
216f9a93bf | ||
|
|
bb9614282c | ||
|
|
8cd4a75482 | ||
|
|
4e80f42425 | ||
|
|
e851211460 | ||
|
|
22c1bd4e1c | ||
|
|
dd0eedc772 | ||
|
|
5f77d0eed7 | ||
|
|
473d3aab48 | ||
|
|
8d7c1945f1 | ||
|
|
e4551a483c | ||
|
|
00b2bff6d0 | ||
|
|
9ed969eea1 | ||
|
|
0fb91b860f | ||
|
|
d21ead1c8d | ||
|
|
19201eed67 | ||
|
|
ab4e147021 | ||
|
|
5bbce108fd | ||
|
|
ad49598b51 | ||
|
|
9fc316abdf | ||
|
|
1905d417be | ||
|
|
89cba484c0 | ||
|
|
9f4cb97512 | ||
|
|
d333f2eee7 | ||
|
|
aab0984dfb | ||
|
|
aaf4bee03d | ||
|
|
63b15de40a | ||
|
|
e6088271bd | ||
|
|
ddce9b0138 | ||
|
|
73d87e59e3 | ||
|
|
efa910e5b9 | ||
|
|
f036206961 | ||
|
|
2bbc8702a7 | ||
|
|
2947e84501 | ||
|
|
5fcb3ef815 | ||
|
|
5e0198542f | ||
|
|
00dd91340b | ||
|
|
6923c53871 | ||
|
|
691b70ccb3 | ||
|
|
831b4f731b | ||
|
|
69456b34e5 | ||
|
|
1fd76160ef | ||
|
|
d5c4a71ee2 | ||
|
|
ce59a8a5c9 | ||
|
|
900624193f | ||
|
|
8a385af882 | ||
|
|
534c5e20fd | ||
|
|
be3541756f | ||
|
|
49a547af5e | ||
|
|
662c5c8866 | ||
|
|
1494b5d28e | ||
|
|
c1c616e0f3 | ||
|
|
d1e3280821 | ||
|
|
a3718e23ab | ||
|
|
6092065fe3 | ||
|
|
3149420f80 | ||
|
|
2f1f1f1b1e | ||
|
|
6f6284852d | ||
|
|
c373f6ed90 | ||
|
|
7b183fc79c | ||
|
|
41f3475681 | ||
|
|
c9ae621d61 | ||
|
|
22c93d8c87 | ||
|
|
fa9d6005a4 | ||
|
|
5c28d739ea | ||
|
|
46257a4e5c | ||
|
|
2babfd2e8b | ||
|
|
8548f16ae2 | ||
|
|
a158c9cba8 | ||
|
|
736b057706 | ||
|
|
eea104b8a6 | ||
|
|
b29682cafb | ||
|
|
4a70e9233e | ||
|
|
a39eff5766 | ||
|
|
f2767c0d12 | ||
|
|
2993d59c2e | ||
|
|
fa2b52b9e3 | ||
|
|
03bed89fab | ||
|
|
589eb06474 | ||
|
|
2fb5fbf568 |
@@ -13,3 +13,6 @@
|
||||
*.ged -text
|
||||
*.GED -text
|
||||
*.csv -text
|
||||
*.DEF -text
|
||||
*.IXI -text
|
||||
*.REM -text
|
||||
|
||||
+20
-3
@@ -53,6 +53,17 @@ addons:
|
||||
- python3-mock
|
||||
- python3-pyicu
|
||||
- python3-coverage
|
||||
- python3-jsonschema
|
||||
# lxml dependencies. for merge_ref_test to work
|
||||
# - libxml2-dev
|
||||
# - libxslt1-dev
|
||||
- libxml2-utils
|
||||
- python3-lxml
|
||||
- python-libxml2
|
||||
# ubuntu 14.04 requires this in addition to libxml2-dev and
|
||||
# libxslt1-dev for compiling lxml.
|
||||
# https://github.com/deanmalmgren/textract/issues/19
|
||||
- zlib1g-dev
|
||||
|
||||
before_install:
|
||||
|
||||
@@ -79,17 +90,23 @@ before_script:
|
||||
- export PYTHONPATH=meta
|
||||
# set module exclusions. --exclude=TestUser because of older version of mock
|
||||
# without configure_mock
|
||||
- export EXCLUDE="--exclude=TestcaseGenerator --exclude=vcard
|
||||
--exclude=merge_ref_test --exclude=user_test"
|
||||
- export EXCLUDE="--exclude=TestcaseGenerator"
|
||||
# --exclude=merge_ref_test"
|
||||
# set GRAMPS_RESOURCES for locale, data,image and documentation
|
||||
- export GRAMPS_RESOURCES=.
|
||||
# Install addons
|
||||
- mkdir -p ~/.gramps/gramps50/plugins/
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps50/download/CliMerge.addon.tgz
|
||||
- tar -C ~/.gramps/gramps50/plugins -xzf CliMerge.addon.tgz
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps50/download/ExportRaw.addon.tgz
|
||||
- tar -C ~/.gramps/gramps50/plugins -xzf ExportRaw.addon.tgz
|
||||
|
||||
script:
|
||||
# Ignore the virtualenv entirely. Use nosetests3, python3 (3.4.0) and coverage
|
||||
# from /usr/bin. Use libraries from /usr/lib/python3.4,
|
||||
# /usr/local/lib/python3.4/dist-packages and /usr/lib/python3/dist-packages
|
||||
- nosetests3 --nologcapture --with-coverage --cover-package=gramps $EXCLUDE
|
||||
gramps test test/GrampsLogger
|
||||
gramps
|
||||
# FIXME: This should have run from the current directory, rather than from
|
||||
# gramps, because there is some test code in that directory.
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
See developer documentation at:
|
||||
https://gramps-project.org/wiki/index.php?title=Portal:Developers
|
||||
https://gramps-project.org/wiki/index.php?title=Brief_introduction_to_Git#Making_a_patchfile
|
||||
https://gramps-project.org/wiki/index.php?title=Brief_introduction_to_Git#Making_a_PR
|
||||
|
||||
If you are interested in translating:
|
||||
* The Gramps program to your language see:
|
||||
https://gramps-project.org/wiki/index.php?title=Translating_Gramps
|
||||
https://gramps-project.org/wiki/index.php?title=Portal:Translators
|
||||
|
||||
* The Gramps user manual to your language see:
|
||||
https://gramps-project.org/wiki/index.php?title=Translating_the_Gramps_User_manual
|
||||
@@ -1,397 +0,0 @@
|
||||
GNU Free Documentation License
|
||||
Version 1.2, November 2002
|
||||
|
||||
|
||||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
0. PREAMBLE
|
||||
|
||||
The purpose of this License is to make a manual, textbook, or other
|
||||
functional and useful document "free" in the sense of freedom: to
|
||||
assure everyone the effective freedom to copy and redistribute it,
|
||||
with or without modifying it, either commercially or noncommercially.
|
||||
Secondarily, this License preserves for the author and publisher a way
|
||||
to get credit for their work, while not being considered responsible
|
||||
for modifications made by others.
|
||||
|
||||
This License is a kind of "copyleft", which means that derivative
|
||||
works of the document must themselves be free in the same sense. It
|
||||
complements the GNU General Public License, which is a copyleft
|
||||
license designed for free software.
|
||||
|
||||
We have designed this License in order to use it for manuals for free
|
||||
software, because free software needs free documentation: a free
|
||||
program should come with manuals providing the same freedoms that the
|
||||
software does. But this License is not limited to software manuals;
|
||||
it can be used for any textual work, regardless of subject matter or
|
||||
whether it is published as a printed book. We recommend this License
|
||||
principally for works whose purpose is instruction or reference.
|
||||
|
||||
|
||||
1. APPLICABILITY AND DEFINITIONS
|
||||
|
||||
This License applies to any manual or other work, in any medium, that
|
||||
contains a notice placed by the copyright holder saying it can be
|
||||
distributed under the terms of this License. Such a notice grants a
|
||||
world-wide, royalty-free license, unlimited in duration, to use that
|
||||
work under the conditions stated herein. The "Document", below,
|
||||
refers to any such manual or work. Any member of the public is a
|
||||
licensee, and is addressed as "you". You accept the license if you
|
||||
copy, modify or distribute the work in a way requiring permission
|
||||
under copyright law.
|
||||
|
||||
A "Modified Version" of the Document means any work containing the
|
||||
Document or a portion of it, either copied verbatim, or with
|
||||
modifications and/or translated into another language.
|
||||
|
||||
A "Secondary Section" is a named appendix or a front-matter section of
|
||||
the Document that deals exclusively with the relationship of the
|
||||
publishers or authors of the Document to the Document's overall subject
|
||||
(or to related matters) and contains nothing that could fall directly
|
||||
within that overall subject. (Thus, if the Document is in part a
|
||||
textbook of mathematics, a Secondary Section may not explain any
|
||||
mathematics.) The relationship could be a matter of historical
|
||||
connection with the subject or with related matters, or of legal,
|
||||
commercial, philosophical, ethical or political position regarding
|
||||
them.
|
||||
|
||||
The "Invariant Sections" are certain Secondary Sections whose titles
|
||||
are designated, as being those of Invariant Sections, in the notice
|
||||
that says that the Document is released under this License. If a
|
||||
section does not fit the above definition of Secondary then it is not
|
||||
allowed to be designated as Invariant. The Document may contain zero
|
||||
Invariant Sections. If the Document does not identify any Invariant
|
||||
Sections then there are none.
|
||||
|
||||
The "Cover Texts" are certain short passages of text that are listed,
|
||||
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
|
||||
the Document is released under this License. A Front-Cover Text may
|
||||
be at most 5 words, and a Back-Cover Text may be at most 25 words.
|
||||
|
||||
A "Transparent" copy of the Document means a machine-readable copy,
|
||||
represented in a format whose specification is available to the
|
||||
general public, that is suitable for revising the document
|
||||
straightforwardly with generic text editors or (for images composed of
|
||||
pixels) generic paint programs or (for drawings) some widely available
|
||||
drawing editor, and that is suitable for input to text formatters or
|
||||
for automatic translation to a variety of formats suitable for input
|
||||
to text formatters. A copy made in an otherwise Transparent file
|
||||
format whose markup, or absence of markup, has been arranged to thwart
|
||||
or discourage subsequent modification by readers is not Transparent.
|
||||
An image format is not Transparent if used for any substantial amount
|
||||
of text. A copy that is not "Transparent" is called "Opaque".
|
||||
|
||||
Examples of suitable formats for Transparent copies include plain
|
||||
ASCII without markup, Texinfo input format, LaTeX input format, SGML
|
||||
or XML using a publicly available DTD, and standard-conforming simple
|
||||
HTML, PostScript or PDF designed for human modification. Examples of
|
||||
transparent image formats include PNG, XCF and JPG. Opaque formats
|
||||
include proprietary formats that can be read and edited only by
|
||||
proprietary word processors, SGML or XML for which the DTD and/or
|
||||
processing tools are not generally available, and the
|
||||
machine-generated HTML, PostScript or PDF produced by some word
|
||||
processors for output purposes only.
|
||||
|
||||
The "Title Page" means, for a printed book, the title page itself,
|
||||
plus such following pages as are needed to hold, legibly, the material
|
||||
this License requires to appear in the title page. For works in
|
||||
formats which do not have any title page as such, "Title Page" means
|
||||
the text near the most prominent appearance of the work's title,
|
||||
preceding the beginning of the body of the text.
|
||||
|
||||
A section "Entitled XYZ" means a named subunit of the Document whose
|
||||
title either is precisely XYZ or contains XYZ in parentheses following
|
||||
text that translates XYZ in another language. (Here XYZ stands for a
|
||||
specific section name mentioned below, such as "Acknowledgements",
|
||||
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
|
||||
of such a section when you modify the Document means that it remains a
|
||||
section "Entitled XYZ" according to this definition.
|
||||
|
||||
The Document may include Warranty Disclaimers next to the notice which
|
||||
states that this License applies to the Document. These Warranty
|
||||
Disclaimers are considered to be included by reference in this
|
||||
License, but only as regards disclaiming warranties: any other
|
||||
implication that these Warranty Disclaimers may have is void and has
|
||||
no effect on the meaning of this License.
|
||||
|
||||
|
||||
2. VERBATIM COPYING
|
||||
|
||||
You may copy and distribute the Document in any medium, either
|
||||
commercially or noncommercially, provided that this License, the
|
||||
copyright notices, and the license notice saying this License applies
|
||||
to the Document are reproduced in all copies, and that you add no other
|
||||
conditions whatsoever to those of this License. You may not use
|
||||
technical measures to obstruct or control the reading or further
|
||||
copying of the copies you make or distribute. However, you may accept
|
||||
compensation in exchange for copies. If you distribute a large enough
|
||||
number of copies you must also follow the conditions in section 3.
|
||||
|
||||
You may also lend copies, under the same conditions stated above, and
|
||||
you may publicly display copies.
|
||||
|
||||
|
||||
3. COPYING IN QUANTITY
|
||||
|
||||
If you publish printed copies (or copies in media that commonly have
|
||||
printed covers) of the Document, numbering more than 100, and the
|
||||
Document's license notice requires Cover Texts, you must enclose the
|
||||
copies in covers that carry, clearly and legibly, all these Cover
|
||||
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
|
||||
the back cover. Both covers must also clearly and legibly identify
|
||||
you as the publisher of these copies. The front cover must present
|
||||
the full title with all words of the title equally prominent and
|
||||
visible. You may add other material on the covers in addition.
|
||||
Copying with changes limited to the covers, as long as they preserve
|
||||
the title of the Document and satisfy these conditions, can be treated
|
||||
as verbatim copying in other respects.
|
||||
|
||||
If the required texts for either cover are too voluminous to fit
|
||||
legibly, you should put the first ones listed (as many as fit
|
||||
reasonably) on the actual cover, and continue the rest onto adjacent
|
||||
pages.
|
||||
|
||||
If you publish or distribute Opaque copies of the Document numbering
|
||||
more than 100, you must either include a machine-readable Transparent
|
||||
copy along with each Opaque copy, or state in or with each Opaque copy
|
||||
a computer-network location from which the general network-using
|
||||
public has access to download using public-standard network protocols
|
||||
a complete Transparent copy of the Document, free of added material.
|
||||
If you use the latter option, you must take reasonably prudent steps,
|
||||
when you begin distribution of Opaque copies in quantity, to ensure
|
||||
that this Transparent copy will remain thus accessible at the stated
|
||||
location until at least one year after the last time you distribute an
|
||||
Opaque copy (directly or through your agents or retailers) of that
|
||||
edition to the public.
|
||||
|
||||
It is requested, but not required, that you contact the authors of the
|
||||
Document well before redistributing any large number of copies, to give
|
||||
them a chance to provide you with an updated version of the Document.
|
||||
|
||||
|
||||
4. MODIFICATIONS
|
||||
|
||||
You may copy and distribute a Modified Version of the Document under
|
||||
the conditions of sections 2 and 3 above, provided that you release
|
||||
the Modified Version under precisely this License, with the Modified
|
||||
Version filling the role of the Document, thus licensing distribution
|
||||
and modification of the Modified Version to whoever possesses a copy
|
||||
of it. In addition, you must do these things in the Modified Version:
|
||||
|
||||
A. Use in the Title Page (and on the covers, if any) a title distinct
|
||||
from that of the Document, and from those of previous versions
|
||||
(which should, if there were any, be listed in the History section
|
||||
of the Document). You may use the same title as a previous version
|
||||
if the original publisher of that version gives permission.
|
||||
B. List on the Title Page, as authors, one or more persons or entities
|
||||
responsible for authorship of the modifications in the Modified
|
||||
Version, together with at least five of the principal authors of the
|
||||
Document (all of its principal authors, if it has fewer than five),
|
||||
unless they release you from this requirement.
|
||||
C. State on the Title page the name of the publisher of the
|
||||
Modified Version, as the publisher.
|
||||
D. Preserve all the copyright notices of the Document.
|
||||
E. Add an appropriate copyright notice for your modifications
|
||||
adjacent to the other copyright notices.
|
||||
F. Include, immediately after the copyright notices, a license notice
|
||||
giving the public permission to use the Modified Version under the
|
||||
terms of this License, in the form shown in the Addendum below.
|
||||
G. Preserve in that license notice the full lists of Invariant Sections
|
||||
and required Cover Texts given in the Document's license notice.
|
||||
H. Include an unaltered copy of this License.
|
||||
I. Preserve the section Entitled "History", Preserve its Title, and add
|
||||
to it an item stating at least the title, year, new authors, and
|
||||
publisher of the Modified Version as given on the Title Page. If
|
||||
there is no section Entitled "History" in the Document, create one
|
||||
stating the title, year, authors, and publisher of the Document as
|
||||
given on its Title Page, then add an item describing the Modified
|
||||
Version as stated in the previous sentence.
|
||||
J. Preserve the network location, if any, given in the Document for
|
||||
public access to a Transparent copy of the Document, and likewise
|
||||
the network locations given in the Document for previous versions
|
||||
it was based on. These may be placed in the "History" section.
|
||||
You may omit a network location for a work that was published at
|
||||
least four years before the Document itself, or if the original
|
||||
publisher of the version it refers to gives permission.
|
||||
K. For any section Entitled "Acknowledgements" or "Dedications",
|
||||
Preserve the Title of the section, and preserve in the section all
|
||||
the substance and tone of each of the contributor acknowledgements
|
||||
and/or dedications given therein.
|
||||
L. Preserve all the Invariant Sections of the Document,
|
||||
unaltered in their text and in their titles. Section numbers
|
||||
or the equivalent are not considered part of the section titles.
|
||||
M. Delete any section Entitled "Endorsements". Such a section
|
||||
may not be included in the Modified Version.
|
||||
N. Do not retitle any existing section to be Entitled "Endorsements"
|
||||
or to conflict in title with any Invariant Section.
|
||||
O. Preserve any Warranty Disclaimers.
|
||||
|
||||
If the Modified Version includes new front-matter sections or
|
||||
appendices that qualify as Secondary Sections and contain no material
|
||||
copied from the Document, you may at your option designate some or all
|
||||
of these sections as invariant. To do this, add their titles to the
|
||||
list of Invariant Sections in the Modified Version's license notice.
|
||||
These titles must be distinct from any other section titles.
|
||||
|
||||
You may add a section Entitled "Endorsements", provided it contains
|
||||
nothing but endorsements of your Modified Version by various
|
||||
parties--for example, statements of peer review or that the text has
|
||||
been approved by an organization as the authoritative definition of a
|
||||
standard.
|
||||
|
||||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||||
passage of up to 25 words as a Back-Cover Text, to the end of the list
|
||||
of Cover Texts in the Modified Version. Only one passage of
|
||||
Front-Cover Text and one of Back-Cover Text may be added by (or
|
||||
through arrangements made by) any one entity. If the Document already
|
||||
includes a cover text for the same cover, previously added by you or
|
||||
by arrangement made by the same entity you are acting on behalf of,
|
||||
you may not add another; but you may replace the old one, on explicit
|
||||
permission from the previous publisher that added the old one.
|
||||
|
||||
The author(s) and publisher(s) of the Document do not by this License
|
||||
give permission to use their names for publicity for or to assert or
|
||||
imply endorsement of any Modified Version.
|
||||
|
||||
|
||||
5. COMBINING DOCUMENTS
|
||||
|
||||
You may combine the Document with other documents released under this
|
||||
License, under the terms defined in section 4 above for modified
|
||||
versions, provided that you include in the combination all of the
|
||||
Invariant Sections of all of the original documents, unmodified, and
|
||||
list them all as Invariant Sections of your combined work in its
|
||||
license notice, and that you preserve all their Warranty Disclaimers.
|
||||
|
||||
The combined work need only contain one copy of this License, and
|
||||
multiple identical Invariant Sections may be replaced with a single
|
||||
copy. If there are multiple Invariant Sections with the same name but
|
||||
different contents, make the title of each such section unique by
|
||||
adding at the end of it, in parentheses, the name of the original
|
||||
author or publisher of that section if known, or else a unique number.
|
||||
Make the same adjustment to the section titles in the list of
|
||||
Invariant Sections in the license notice of the combined work.
|
||||
|
||||
In the combination, you must combine any sections Entitled "History"
|
||||
in the various original documents, forming one section Entitled
|
||||
"History"; likewise combine any sections Entitled "Acknowledgements",
|
||||
and any sections Entitled "Dedications". You must delete all sections
|
||||
Entitled "Endorsements".
|
||||
|
||||
|
||||
6. COLLECTIONS OF DOCUMENTS
|
||||
|
||||
You may make a collection consisting of the Document and other documents
|
||||
released under this License, and replace the individual copies of this
|
||||
License in the various documents with a single copy that is included in
|
||||
the collection, provided that you follow the rules of this License for
|
||||
verbatim copying of each of the documents in all other respects.
|
||||
|
||||
You may extract a single document from such a collection, and distribute
|
||||
it individually under this License, provided you insert a copy of this
|
||||
License into the extracted document, and follow this License in all
|
||||
other respects regarding verbatim copying of that document.
|
||||
|
||||
|
||||
7. AGGREGATION WITH INDEPENDENT WORKS
|
||||
|
||||
A compilation of the Document or its derivatives with other separate
|
||||
and independent documents or works, in or on a volume of a storage or
|
||||
distribution medium, is called an "aggregate" if the copyright
|
||||
resulting from the compilation is not used to limit the legal rights
|
||||
of the compilation's users beyond what the individual works permit.
|
||||
When the Document is included an aggregate, this License does not
|
||||
apply to the other works in the aggregate which are not themselves
|
||||
derivative works of the Document.
|
||||
|
||||
If the Cover Text requirement of section 3 is applicable to these
|
||||
copies of the Document, then if the Document is less than one half of
|
||||
the entire aggregate, the Document's Cover Texts may be placed on
|
||||
covers that bracket the Document within the aggregate, or the
|
||||
electronic equivalent of covers if the Document is in electronic form.
|
||||
Otherwise they must appear on printed covers that bracket the whole
|
||||
aggregate.
|
||||
|
||||
|
||||
8. TRANSLATION
|
||||
|
||||
Translation is considered a kind of modification, so you may
|
||||
distribute translations of the Document under the terms of section 4.
|
||||
Replacing Invariant Sections with translations requires special
|
||||
permission from their copyright holders, but you may include
|
||||
translations of some or all Invariant Sections in addition to the
|
||||
original versions of these Invariant Sections. You may include a
|
||||
translation of this License, and all the license notices in the
|
||||
Document, and any Warranty Disclaimers, provided that you also include
|
||||
the original English version of this License and the original versions
|
||||
of those notices and disclaimers. In case of a disagreement between
|
||||
the translation and the original version of this License or a notice
|
||||
or disclaimer, the original version will prevail.
|
||||
|
||||
If a section in the Document is Entitled "Acknowledgements",
|
||||
"Dedications", or "History", the requirement (section 4) to Preserve
|
||||
its Title (section 1) will typically require changing the actual
|
||||
title.
|
||||
|
||||
|
||||
9. TERMINATION
|
||||
|
||||
You may not copy, modify, sublicense, or distribute the Document except
|
||||
as expressly provided for under this License. Any other attempt to
|
||||
copy, modify, sublicense or distribute the Document is void, and will
|
||||
automatically terminate your rights under this License. However,
|
||||
parties who have received copies, or rights, from you under this
|
||||
License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
|
||||
10. FUTURE REVISIONS OF THIS LICENSE
|
||||
|
||||
The Free Software Foundation may publish new, revised versions
|
||||
of the GNU Free Documentation License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns. See
|
||||
http://www.gnu.org/copyleft/.
|
||||
|
||||
Each version of the License is given a distinguishing version number.
|
||||
If the Document specifies that a particular numbered version of this
|
||||
License "or any later version" applies to it, you have the option of
|
||||
following the terms and conditions either of that specified version or
|
||||
of any later version that has been published (not as a draft) by the
|
||||
Free Software Foundation. If the Document does not specify a version
|
||||
number of this License, you may choose any version ever published (not
|
||||
as a draft) by the Free Software Foundation.
|
||||
|
||||
|
||||
ADDENDUM: How to use this License for your documents
|
||||
|
||||
To use this License in a document you have written, include a copy of
|
||||
the License in the document and put the following copyright and
|
||||
license notices just after the title page:
|
||||
|
||||
Copyright (c) YEAR YOUR NAME.
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the section entitled "GNU
|
||||
Free Documentation License".
|
||||
|
||||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||||
replace the "with...Texts." line with this:
|
||||
|
||||
with the Invariant Sections being LIST THEIR TITLES, with the
|
||||
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
|
||||
|
||||
If you have Invariant Sections without Cover Texts, or some other
|
||||
combination of the three, merge those two alternatives to suit the
|
||||
situation.
|
||||
|
||||
If your document contains nontrivial examples of program code, we
|
||||
recommend releasing these examples in parallel under your choice of
|
||||
free software license, such as the GNU General Public License,
|
||||
to permit their use in free software.
|
||||
+3
-1
@@ -1,13 +1,15 @@
|
||||
include ChangeLog
|
||||
include po/ChangeLog
|
||||
include AUTHORS
|
||||
include COPYING
|
||||
include FAQ
|
||||
include Gramps.py
|
||||
include INSTALL
|
||||
include LICENSE
|
||||
include MANIFEST.in
|
||||
include NEWS
|
||||
include RELEASE_NOTES
|
||||
include TODO
|
||||
include CONTRIBUTING
|
||||
include TestPlan.txt
|
||||
recursive-include data *
|
||||
recursive-include debian *
|
||||
|
||||
@@ -42,7 +42,7 @@ The following packages are **STRONGLY RECOMMENDED** to be installed:
|
||||
|
||||
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.
|
||||
but the Python bindings for this must also be present, so gir1.2-osmgpsmap-1.0.
|
||||
Without this the GeoView will not be active, see
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_4.2_Wiki_Manual_-_Categories#Geography_Category
|
||||
|
||||
@@ -50,7 +50,7 @@ The following packages are **STRONGLY RECOMMENDED** to be installed:
|
||||
|
||||
Enable creation of graphs using Graphviz engine.
|
||||
Without this, three reports cannot be run.
|
||||
Obtain it from: http://www.graphviz.org
|
||||
Obtain it from: http://www.graphviz.org or try graphviz and python3-pygraphviz from your packages.
|
||||
|
||||
* **PyICU**
|
||||
|
||||
@@ -98,13 +98,6 @@ The following packages are optional:
|
||||
|
||||
More font support in the reports
|
||||
|
||||
* **Meta**
|
||||
|
||||
Required for experimental "where" clause creation. This functionality
|
||||
is not yet in main-line code so it is not needed by users. If the package
|
||||
will be used by gramps developers, to support further development, then
|
||||
it may be included. Install with pypi: https://pypi.python.org/pypi/meta.
|
||||
|
||||
Optional packages required by Third-party Addons
|
||||
------------------------------------------------
|
||||
|
||||
@@ -116,7 +109,7 @@ Prerequistes required for the following Addons to work:
|
||||
* **Family Sheet** - Requires: PIL (Python Imaging Library) or PILLOW.
|
||||
( https://gramps-project.org/wiki/index.php?title=Family_Sheet )
|
||||
|
||||
* **Graph View** - Requires: PyGoocanvas and Goocanvas.
|
||||
* **Graph View** - Requires: PyGoocanvas and Goocanvas (python-pygoocanvas, gir1.2-goocanvas-2.0).
|
||||
( https://gramps-project.org/wiki/index.php?title=Graph_View )
|
||||
|
||||
* **PedigreeChart** - Can optionally use - numpy if installed
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
@@ -0,0 +1,236 @@
|
||||
[PRO-GEN]
|
||||
version=3.0b
|
||||
type=def
|
||||
format=2
|
||||
|
||||
[general]
|
||||
dateformat=DD/MM/YYYY
|
||||
pointerlength=4
|
||||
tables=2
|
||||
|
||||
[Table_1]
|
||||
name1=Person
|
||||
name2=Persons
|
||||
fileext=.PER
|
||||
indexext=.IXP
|
||||
n_lines=42
|
||||
hiddenlines=4,5,6,7,8,10,12,13,14,15,19,25,30,32,33,34,35,36,40
|
||||
t01=É͵INDIVIDUAL ÆÍÍÍÍÍÍÍÍÍÍÍÍÍ͵pg30-1gbÆÍÍÍÍÍÍÍÍ͵LAST CHANGE ÆÍ»
|
||||
t02=º ÛGiven name: º
|
||||
t03=º Surname : Sex: º
|
||||
t04=º Patronym : º
|
||||
t05=º Call name : Alias: Code: º
|
||||
t06=º Title 1 : Title 2: Title 3: º
|
||||
t07=º Father : º
|
||||
t08=º Mother : º
|
||||
t09=º Occupation: º
|
||||
t10=º Scratch : º
|
||||
t11=º Info : º
|
||||
t12=ÇÄ´ÛAddressÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t13=º Date : Street: º
|
||||
t14=º Zip : Place: Country: º
|
||||
t15=º Phone : Info: º
|
||||
t16=ÇÄ´ÛBirthÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t17=º Date : Place: Time: º
|
||||
t18=º Source: Reference: º
|
||||
t19=º Text : º
|
||||
t20=º Info : º
|
||||
t21=ÇÄ´ÛChristeningÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t22=º Date : Place: Religion: º
|
||||
t23=º Witn. : º
|
||||
t24=º Source: Reference: º
|
||||
t25=º Text : º
|
||||
t26=º Info : º
|
||||
t27=ÇÄ´ÛDeathÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t28=º Date : Place: Time: º
|
||||
t29=º Source: Reference: º
|
||||
t30=º Text : º
|
||||
t31=º Info : º
|
||||
t32=ÇÄ´CÛremationÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t33=º Date : Place: º
|
||||
t34=º Source: Reference: º
|
||||
t35=º Text : º
|
||||
t36=º Info : º
|
||||
t37=ÇÄ´BÛurialÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t38=º Date : Place: º
|
||||
t39=º Source: Reference: º
|
||||
t40=º Text : º
|
||||
t41=º Info : º
|
||||
t42=ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
n_fields=58
|
||||
f01=Person_record ,31, 6, 0, 1,15,"","INDI RFN"
|
||||
f02=Person_last_change ,32,10,10, 1,68,"","INDI CHAN DATE"
|
||||
f03=Given_name ,47,64, 4, 2,15,"",""
|
||||
f04=Surname ,47,40, 4, 3,15,"","INDI NAME"
|
||||
f05=Sex ,45, 1, 1, 3,67,"MMFFmmff??","INDI SEX"
|
||||
f06=Patronym ,47,40, 4, 4,15,"","INDI _PATR"
|
||||
f07=Call_name ,47,18, 4, 5,15,"","INDI NAME NICK/INDI NAME ALIA/INDI CHR NICK"
|
||||
f08=Alias ,47,19, 4, 5,41,"","INDI NAME _ALIA/INDI NAME COMM"
|
||||
f09=Person_code ,47,12, 4, 5,67,"","INDI REFN/INDI CODE"
|
||||
f10=Title1 ,47,16, 4, 6,15,"","INDI TITL"
|
||||
f11=Title2 ,47,16, 4, 6,41,"","INDI _TITL2"
|
||||
f12=Title3 ,47,12, 4, 6,67,"","INDI _TITL3"
|
||||
f13=Father , 2,64, 4, 7,15,"",""
|
||||
f14=Mother , 3,64, 4, 8,15,"",""
|
||||
f15=Occupation ,47,64, 4, 9,15,"","INDI OCCU"
|
||||
f16=Person_scratch ,46,64, 4,10,15,"","INDI _COMM/INDI COMM"
|
||||
f17=Person_info ,46,64, 4,11,15,"","INDI NOTE"
|
||||
f18=Address_date ,44,10,10,13,11,"","INDI RESI DATE"
|
||||
f19=Address_street ,47,49, 4,13,30,"","INDI RESI ADDR"
|
||||
f20=Address_zip ,47,11, 4,14,11,"","INDI RESI ADDR POST/INDI RESI POST"
|
||||
f21=Address_place ,47,27, 4,14,30,"","INDI RESI ADDR CITY/INDI RESI PLAC"
|
||||
f22=Address_country ,47,12, 4,14,67,"","INDI RESI ADDR CTRY/INDI RESI CTRY"
|
||||
f23=Address_phone ,47,12, 4,15,11,"","INDI RESI PHON/INDI PHON"
|
||||
f24=Address_info ,46,49, 4,15,30,"","INDI RESI NOTE/INDI ADDR"
|
||||
f25=Birth_date ,44,10,10,17,11,"","INDI BIRT DATE"
|
||||
f26=Birth_place ,47,30, 4,17,30,"","INDI BIRT PLAC"
|
||||
f27=Birth_time ,45, 5, 5,17,67,"09::..","INDI BIRT TIME"
|
||||
f28=Birth_source ,47,44, 4,18,11,"","INDI BIRT SOUR/INDI BIRT SOUR TITL"
|
||||
f29=Birth_ref ,45,12,12,18,67,"","INDI BIRT SOUR REFN"
|
||||
f30=Birth_text ,46,68, 4,19,11,"","INDI BIRT SOUR TEXT"
|
||||
f31=Birth_info ,46,68, 4,20,11,"","INDI BIRT NOTE"
|
||||
f32=Christening_date ,44,10,10,22,11,"","INDI CHR DATE"
|
||||
f33=Christening_place ,47,26, 4,22,30,"","INDI CHR PLAC"
|
||||
f34=Religion ,47,12, 4,22,67,"","INDI CHR RELI/INDI RELI"
|
||||
f35=Christening_witness ,47,68, 4,23,11,"","INDI CHR _WITN/INDI CHR WITN"
|
||||
f36=Christening_source ,47,44, 4,24,11,"","INDI CHR SOUR/INDI CHR SOUR TITL"
|
||||
f37=Christening_ref ,45,12,12,24,67,"","INDI CHR SOUR REFN"
|
||||
f38=Christening_text ,46,68, 4,25,11,"","INDI CHR SOUR TEXT"
|
||||
f39=Christening_info ,46,68, 4,26,11,"","INDI CHR NOTE"
|
||||
f40=Death_date ,44,10,10,28,11,"","INDI DEAT DATE"
|
||||
f41=Death_place ,47,30, 4,28,30,"","INDI DEAT PLAC"
|
||||
f42=Death_time ,45, 5, 5,28,67,"09::..","INDI DEAT TIME"
|
||||
f43=Death_source ,47,44, 4,29,11,"","INDI DEAT SOUR/INDI DEAT SOUR TITL"
|
||||
f44=Death_ref ,45,12,12,29,67,"","INDI DEAT SOUR REFN"
|
||||
f45=Death_text ,46,68, 4,30,11,"","INDI DEAT SOUR TEXT"
|
||||
f46=Death_info ,46,68, 4,31,11,"","INDI DEAT NOTE"
|
||||
f47=Cremation_date ,44,10,10,33,11,"","INDI CREM DATE"
|
||||
f48=Cremation_place ,47,49, 4,33,30,"","INDI CREM PLAC"
|
||||
f49=Cremation_source ,47,44, 4,34,11,"","INDI CREM SOUR/INDI CREM SOUR TITL"
|
||||
f50=Cremation_ref ,45,12,12,34,67,"","INDI CREM SOUR REFN"
|
||||
f51=Cremation_text ,46,68, 4,35,11,"","INDI CREM SOUR TEXT"
|
||||
f52=Cremation_info ,46,68, 4,36,11,"","INDI CREM NOTE"
|
||||
f53=Burial_date ,44,10,10,38,11,"","INDI BURI DATE"
|
||||
f54=Burial_place ,47,49, 4,38,30,"","INDI BURI PLAC"
|
||||
f55=Burial_source ,47,44, 4,39,11,"","INDI BURI SOUR/INDI BURI SOUR TITL"
|
||||
f56=Burial_ref ,45,12,12,39,67,"","INDI BURI SOUR REFN"
|
||||
f57=Burial_text ,46,68, 4,40,11,"","INDI BURI SOUR TEXT"
|
||||
f58=Burial_info ,46,68, 4,41,11,"","INDI BURI NOTE"
|
||||
n_replace=4
|
||||
r01=Surname,Patronym
|
||||
r02=Birth_date,Christening_date/Birth_place,Christening_place
|
||||
r03=Death_date,Burial_date/Death_place,Burial_place
|
||||
r04=Burial_date,Cremation_date/Burial_place,Cremation_place
|
||||
|
||||
[Table_2]
|
||||
name1=Marriage
|
||||
name2=Marriages
|
||||
fileext=.REL
|
||||
indexext=.IXR
|
||||
n_lines=35
|
||||
hiddenlines=5,7,8,9,10,11,16,22,28,30,31,32,33,34
|
||||
t01=É͵MARRIAGE ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵pg30-1gbÆÍÍÍÍÍÍÍÍ͵LAST CHANGE ÆÍ»
|
||||
t02=º ÛHusband: º
|
||||
t03=º Wife : º
|
||||
t04=º Code : º
|
||||
t05=º Scratch: º
|
||||
t06=º Info : º
|
||||
t07=ÇÄ´ÛLiving togetherÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t08=º Date : Place: º
|
||||
t09=º Source: Reference: º
|
||||
t10=º Text : º
|
||||
t11=º Info : º
|
||||
t12=ÇÄ´Publication of the ÛbannsÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t13=º Date : Place: º
|
||||
t14=º Witn. : º
|
||||
t15=º Source: Reference: º
|
||||
t16=º Text : º
|
||||
t17=º Info : º
|
||||
t18=ÇÄ´Civil ÛmarriageÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t19=º Date : Place: º
|
||||
t20=º Witn. : º
|
||||
t21=º Source: Reference: º
|
||||
t22=º Text : º
|
||||
t23=º Info : º
|
||||
t24=ÇÄ´ÛChurch marriageÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t25=º Date : Place: Church: º
|
||||
t26=º Witn. : º
|
||||
t27=º Source: Reference: º
|
||||
t28=º Text : º
|
||||
t29=º Info : º
|
||||
t30=ÇÄ´ÛDivorceÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
|
||||
t31=º Date : Place: º
|
||||
t32=º Source: Reference: º
|
||||
t33=º Text : º
|
||||
t34=º Info : º
|
||||
t35=ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||||
n_fields=41
|
||||
f01=Relation_record ,31, 6, 0, 1,13,"","FAM RFN"
|
||||
f02=Relation_last_change,32,10,10, 1,68,"","FAM CHAN DATE"
|
||||
f03=Husband ,22,67, 4, 2,12,"","FAM HUSB"
|
||||
f04=Wife ,23,67, 4, 3,12,"","FAM WIFE"
|
||||
f05=Relation_code ,47,12, 4, 4,12,"","FAM REFN/FAM CODE"
|
||||
f06=Relation_scratch ,46,67, 4, 5,12,"","FAM _COMM/FAM COMM"
|
||||
f07=Relation_info ,46,67, 4, 6,12,"","FAM NOTE"
|
||||
f08=Living_date ,44,10,10, 8,11,"","FAM _LIV DATE"
|
||||
f09=Living_place ,47,49, 4, 8,30,"","FAM _LIV PLAC"
|
||||
f10=Living_source ,47,44, 4, 9,11,"","FAM _LIV SOUR/FAM _LIV SOUR TITL"
|
||||
f11=Living_ref ,45,12,12, 9,67,"","FAM _LIV SOUR REFN"
|
||||
f12=Living_text ,46,68, 4,10,11,"","FAM _LIV SOUR TEXT"
|
||||
f13=Living_info ,46,68, 4,11,11,"","FAM _LIV NOTE"
|
||||
f14=Banns_date ,44,10,10,13,11,"","FAM MARB DATE/FAM REGS DATE"
|
||||
f15=Banns_place ,47,49, 4,13,30,"","FAM MARB PLAC/FAM REGS PLAC"
|
||||
f16=banns_witnesses ,47,68, 4,14,11,"","FAM MARB _WITN/FAM MARB WITN"
|
||||
f17=Banns_source ,47,44, 4,15,11,"","FAM MARB SOUR/FAM MARB SOUR TITL/FAM REGS SOUR"
|
||||
f18=Banns_ref ,45,12,12,15,67,"","FAM MARB SOUR REFN/FAM REGS SOUR REFN"
|
||||
f19=Banns_text ,46,68, 4,16,11,"","FAM MARB SOUR TEXT"
|
||||
f20=Banns_info ,46,68, 4,17,11,"","FAM MARB NOTE"
|
||||
f21=Civil_date ,44,10,10,19,11,"","FAM MARR(Civil) DATE/FAM MARR DATE"
|
||||
f22=Civil_place ,47,49, 4,19,30,"","FAM MARR(Civil) PLAC/FAM MARR PLAC"
|
||||
f23=Civil_witnesses ,47,68, 4,20,11,"","FAM MARR(Civil) _WITN/FAM MARR _WITN/FAM MARR WITN/FAM WITN"
|
||||
f24=Civil_source ,47,44, 4,21,11,"","FAM MARR(Civil) SOUR/FAM MARR SOUR/FAM MARR SOUR TITL"
|
||||
f25=Civil_ref ,45,12,12,21,67,"","FAM MARR(Civil) SOUR REFN/FAM MARR SOUR REFN"
|
||||
f26=Civil_text ,46,68, 4,22,11,"","FAM MARR(Civil) SOUR TEXT/FAM MARR SOUR TEXT"
|
||||
f27=Civil_info ,46,68, 4,23,11,"","FAM MARR(Civil) NOTE/FAM MARR NOTE"
|
||||
f28=Church_date ,44,10,10,25,11,"","FAM MARR(Church) DATE/FAM ORDI DATE"
|
||||
f29=Church_place ,47,28, 4,25,30,"","FAM MARR(Church) PLAC/FAM ORDI PLAC"
|
||||
f30=Church ,47,12, 4,25,67,"","FAM MARR(Church) _CHUR/FAM ORDI _CHUR/FAM ORDI RELI"
|
||||
f31=Church_witnesses ,47,68, 4,26,11,"","FAM MARR(Church) _WITN/FAM ORDI _WITN/FAM ORDI WITN"
|
||||
f32=Church_source ,47,44, 4,27,11,"","FAM MARR(Church) SOUR/FAM ORDI SOUR/FAM ORDI SOUR TITL"
|
||||
f33=Church_ref ,45,12,12,27,67,"","FAM MARR(Church) SOUR REFN/FAM ORDI SOUR REFN"
|
||||
f34=Church_text ,46,68, 4,28,11,"","FAM MARR(Church) SOUR TEXT/FAM ORDI SOUR TEXT"
|
||||
f35=Church_info ,46,68, 4,29,11,"","FAM MARR(Church) NOTE/FAM ORDI NOTE"
|
||||
f36=Divorce_date ,44,10,10,31,11,"","FAM DIV DATE/FAM DIVO DATE"
|
||||
f37=Divorce_place ,47,49, 4,31,30,"","FAM DIV PLAC/FAM DIVO PLAC"
|
||||
f38=Divorce_source ,47,44, 4,32,11,"","FAM DIV SOUR/FAM DIV SOUR TITL"
|
||||
f39=Divorce_ref ,45,12,12,32,67,"","FAM DIV SOUR REFN"
|
||||
f40=Divorce_text ,46,68, 4,33,11,"","FAM DIV SOUR TEXT"
|
||||
f41=Divorce_info ,46,68, 4,34,11,"","FAM DIV NOTE"
|
||||
n_replace=3
|
||||
r01=Banns_date,Living_date/Banns_place,Living_place
|
||||
r02=Civil_date,Church_date/Civil_place,Church_place
|
||||
r03=Church_date,Banns_date/Church_place,Banns_place
|
||||
|
||||
[Genealogical]
|
||||
male=M
|
||||
female=F
|
||||
function_father=[FATHER]
|
||||
function_mother=[MOTHER]
|
||||
function_husband=[HUSBAND]
|
||||
function_wife=[WIFE]
|
||||
function_age=[AGE]
|
||||
function_initials=[INITIALS]
|
||||
field_father=Father
|
||||
field_mother=Mother
|
||||
field_givenname=Given_name
|
||||
field_surname=Surname
|
||||
field_sex=Sex
|
||||
field_birthdate=Birth_date
|
||||
field_christeningdate=Christening_date
|
||||
field_deathdate=Death_date
|
||||
field_burialdate=Burial_date
|
||||
field_husband=Husband
|
||||
field_wife=Wife
|
||||
field_marriagedate=Civil_date
|
||||
field_churchdate=Church_date
|
||||
field_divorcedate=Divorce_date
|
||||
@@ -0,0 +1,2 @@
|
||||
\0
|
||||
PG30-1GB.DEF
|
||||
@@ -0,0 +1,22 @@
|
||||
[PRO-GEN]
|
||||
version=3.21
|
||||
type=ixi
|
||||
indexformat=2
|
||||
|
||||
[Table_1]
|
||||
current_record=0
|
||||
current_index=1
|
||||
indexes=1
|
||||
sel_1=
|
||||
sort_1=
|
||||
mark_1=
|
||||
marked_1=0
|
||||
|
||||
[Table_2]
|
||||
current_record=0
|
||||
current_index=1
|
||||
indexes=1
|
||||
sel_1=
|
||||
sort_1=
|
||||
mark_1=
|
||||
marked_1=0
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
File of remarks for GEDCOM import.
|
||||
|
||||
GEDCOM file : D:\Users\PRC\Documents\Gramps\data\tests\exp_sample_ged.ged
|
||||
PRO-GEN file : C:\PG30\GB\DATA\SAMPLE
|
||||
Date : 13/01/2017
|
||||
|
||||
Rec. Remarks (P=person, R=Marriage)
|
||||
--------------------------------------------------------------------------------
|
||||
P1 (@I0000@) Surname (Anna Nana /Hansdotter/) has already been entered.
|
||||
2 FAMC @F0008@
|
||||
P25 (@I0024@) Death_date (BEF 23 JUL 1930) too long.
|
||||
2 FAMC @F0010@
|
||||
P43 (@I0042@) Surname (Frank /Neilsen/) has already been entered.
|
||||
2 FAMC @F0005@
|
||||
P47 (@I0046@) Address_date (FROM 1 JAN 1964 TO 3 MAR 1970) too long.
|
||||
(@I0046@) Address_date (I think 1970 to 1971) has already been entered.
|
||||
2 FAMC @F0016@
|
||||
2 FAMC @F0016@
|
||||
2 FAMC @F0016@
|
||||
--------------------------------------------------------------------------------
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
+248
-15
@@ -3,11 +3,14 @@
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="2016-09-04" version="5.0.0-alpha1"/>
|
||||
<created date="2016-10-29" version="5.0.0-alpha1"/>
|
||||
<researcher>
|
||||
<resname>Alex Roitman,,,</resname>
|
||||
<resaddr>Not Provided</resaddr>
|
||||
<resphone>666-555-4444</resphone>
|
||||
<resemail>an_email@gmail.com</resemail>
|
||||
</researcher>
|
||||
<mediapath>{DATA_DIR}/tests</mediapath>
|
||||
</header>
|
||||
<tags>
|
||||
<tag handle="_d54b22fbfc721be9331fb706e3" change="1465741788" name="Unicode" color="#000000" priority="0"/>
|
||||
@@ -566,25 +569,93 @@
|
||||
<attribute type="WWW" value="http://mrstester.com"/>
|
||||
<noteref hlink="_d65a448167a6b06a71840a1953b"/>
|
||||
</event>
|
||||
<event handle="_d65a448167a70779a5ea555fb99" change="1472500308" id="E0094">
|
||||
<event handle="_d65a448167a70779a5ea555fb99" change="1477749917" id="E0094">
|
||||
<type>Residence</type>
|
||||
<dateval val="1964"/>
|
||||
<datespan start="1964-01-01" stop="1970-03-03"/>
|
||||
<place hlink="_0000006a0000006a"/>
|
||||
<attribute type="Phone" value="440-871-3402"/>
|
||||
<attribute type="EMAIL" value="tomtester@gmail.com"/>
|
||||
<attribute type="FAX" value="440-321-4569"/>
|
||||
<attribute type="WWW" value="http://tomtester.com"/>
|
||||
</event>
|
||||
<event handle="_d70437393c02164585e75a1733c" change="1477581914" id="ID_Laborer">
|
||||
<type>Occupation</type>
|
||||
<dateval val="1972"/>
|
||||
</event>
|
||||
<event handle="_d7043782aa05af41571ec778c76" change="1477584625" id="E0095">
|
||||
<type>Birth</type>
|
||||
<dateval val="1954"/>
|
||||
<place hlink="_0000006500000065"/>
|
||||
<attribute type="Time" value="12:45 am"/>
|
||||
<attribute type="Agency" value="A hosptial"/>
|
||||
<attribute type="Unknown" value="Who knows"/>
|
||||
</event>
|
||||
<event handle="_d7044217b59dd082df3d9af68f" change="1477583054" id="E0096">
|
||||
<type>Death</type>
|
||||
</event>
|
||||
<event handle="_d70443bf71c6340e05a9adc10ae" change="1477583227" id="E0097">
|
||||
<type>Burial</type>
|
||||
<dateval val="2017-01-01"/>
|
||||
<description>Buried in a Cemetary</description>
|
||||
</event>
|
||||
<event handle="_d70443f345457255bed58a2c65b" change="1477758153" id="E0098">
|
||||
<type>Marriage</type>
|
||||
<attribute type="Father Age" value="45"/>
|
||||
<attribute type="Mother Age" value="15"/>
|
||||
</event>
|
||||
<event handle="_d70444b050662d2c4b8ae028b26" change="1477583326" id="E0099">
|
||||
<type>Engagement</type>
|
||||
<description>They were engaged</description>
|
||||
</event>
|
||||
<event handle="_d70446576f35592a31604008bf6" change="1477583499" id="E0100">
|
||||
<type>Alternate Marriage</type>
|
||||
<description>Married by a clown in the buff</description>
|
||||
</event>
|
||||
<event handle="_d70446bff1e2c2e3c842d42b8cb" change="1477583668" id="E0101">
|
||||
<type>Alternate Marriage</type>
|
||||
<attribute type="Father Age" value="44"/>
|
||||
<attribute type="Mother Age" value="15"/>
|
||||
</event>
|
||||
<event handle="_d7044d1d2c749802e8116b33f47" change="1477584209" id="E0102">
|
||||
<type>Retirement</type>
|
||||
</event>
|
||||
<event handle="_d70a7933f8d7296231917a2cc14" change="1477749894" id="E0104">
|
||||
<type>Residence</type>
|
||||
<datestr val="I think 1970 to 1971"/>
|
||||
<place hlink="_0000000900000009"/>
|
||||
</event>
|
||||
<event handle="_d70acccb2bdd725c3180c78f28" change="1477758659" id="E0105">
|
||||
<type>Death</type>
|
||||
</event>
|
||||
<event handle="_d70ad043a9e669bb85bfe71deba" change="1477759023" id="E0106">
|
||||
<type>LossOfMojo</type>
|
||||
<dateval val="1973-07-07"/>
|
||||
<description>A very bad day</description>
|
||||
</event>
|
||||
<event handle="_d70ad0ba90b766d0f8966fb0aba" change="1477759072" id="E0107">
|
||||
<type>GainOfMojo</type>
|
||||
<dateval val="1973-07-10"/>
|
||||
</event>
|
||||
</events>
|
||||
<people>
|
||||
<person handle="_0000000100000001" change="1198222526" id="I0000">
|
||||
<person handle="_0000000100000001" change="1477581282" id="I0000">
|
||||
<gender>F</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Anna</first>
|
||||
<surname>Hansdotter</surname>
|
||||
<nick>Annanana</nick>
|
||||
</name>
|
||||
<name alt="1" type="Also Known As">
|
||||
<first>Anna Nana</first>
|
||||
<surname>Hansdotter</surname>
|
||||
</name>
|
||||
<eventref hlink="_0000000200000002" role="Primary"/>
|
||||
<eventref hlink="_0000000400000004" role="Primary"/>
|
||||
<parentin hlink="_0000000600000006"/>
|
||||
<personref hlink="_0000008700000087" rel="Friend">
|
||||
<noteref hlink="_d7042e81dfd1dadee8ef6e5cac4"/>
|
||||
</personref>
|
||||
<noteref hlink="_d70429bc98a43469b08051816c7"/>
|
||||
</person>
|
||||
<person handle="_0000000700000007" change="1198222526" id="I0001">
|
||||
<gender>M</gender>
|
||||
@@ -1032,20 +1103,36 @@
|
||||
<surname>リチミシキスイミ</surname>
|
||||
</name>
|
||||
</person>
|
||||
<person handle="_d65a448167a2736b3dfc08c11d8" change="1473020199" id="I0044">
|
||||
<person handle="_d65a448167a2736b3dfc08c11d8" change="1477759240" id="I0044">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>The</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<eventref hlink="_d65a44813a618a10a0abaa1ed6a" role="Primary"/>
|
||||
<eventref hlink="_d70acccb2bdd725c3180c78f28" role="Unknown"/>
|
||||
<eventref hlink="_d70ad043a9e669bb85bfe71deba" role="Primary"/>
|
||||
<eventref hlink="_d70ad0ba90b766d0f8966fb0aba" role="Primary"/>
|
||||
<lds_ord type="baptism">
|
||||
<dateval val="1955-01-02"/>
|
||||
<status val="Infant"/>
|
||||
</lds_ord>
|
||||
<address>
|
||||
<dateval val="2017-10-27"/>
|
||||
<locality>test village</locality>
|
||||
<city>Akron</city>
|
||||
<state>OH</state>
|
||||
<country>Cuyahoga</country>
|
||||
<postal>44177</postal>
|
||||
</address>
|
||||
<attribute type="Nickname" value="Testy"/>
|
||||
<childof hlink="_0000000a0000000a"/>
|
||||
<parentin hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
<citationref hlink="_d65a448168445feea89cc1499fb"/>
|
||||
</person>
|
||||
<person handle="_d65a4481684319731c24a1e105a" change="1473020199" id="I0045">
|
||||
<person handle="_d65a4481684319731c24a1e105a" change="1477750978" id="I0045">
|
||||
<gender>F</gender>
|
||||
<name type="Birth Name">
|
||||
<name type="Married Name">
|
||||
<first>Mrs</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
@@ -1065,16 +1152,103 @@
|
||||
<noteref hlink="_d65a448168e1061fc46719b5efa"/>
|
||||
<citationref hlink="_d65a448168e27ed358658e331d9"/>
|
||||
</person>
|
||||
<person handle="_d65a448168e2615f26e025aa37c" change="1473020269" id="I0046">
|
||||
<person handle="_d65a448168e2615f26e025aa37c" change="1477758479" id="I0046">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Tom</first>
|
||||
<surname>Tester</surname>
|
||||
<surname prefix="Von" connector="y">Tester</surname>
|
||||
<surname prim="0">tested</surname>
|
||||
<nick>TesterNickname</nick>
|
||||
</name>
|
||||
<eventref hlink="_d65a448167a70779a5ea555fb99" role="Primary"/>
|
||||
<eventref hlink="_d70a7933f8d7296231917a2cc14" role="Primary"/>
|
||||
<lds_ord type="sealed_to_parents">
|
||||
<dateval val="1999" type="about" quality="estimated"/>
|
||||
<temple val="DENVE"/>
|
||||
<place hlink="_0000006a0000006a"/>
|
||||
<sealed_to hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
</lds_ord>
|
||||
<url href="" type="FTP"/>
|
||||
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
<citationref hlink="_d65a448169813b50e0fdc0eea70"/>
|
||||
</person>
|
||||
<person handle="_d70431c6959122e6b45d92a0f79" change="1477758479" id="I0047">
|
||||
<gender>U</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Fake</first>
|
||||
<call>Person</call>
|
||||
<surname prefix="von" derivation="Feudal">Person</surname>
|
||||
<suffix>I</suffix>
|
||||
<title>Fake person</title>
|
||||
<nick>Fake</nick>
|
||||
</name>
|
||||
<eventref hlink="_d70437393c02164585e75a1733c" role="Primary"/>
|
||||
<eventref hlink="_d7043782aa05af41571ec778c76" role="Primary">
|
||||
<attribute type="Father Age" value="47"/>
|
||||
<attribute type="Mother Age" value="16"/>
|
||||
<attribute type="Description" value="An eventref description"/>
|
||||
</eventref>
|
||||
<eventref hlink="_d7044217b59dd082df3d9af68f" role="Primary"/>
|
||||
<eventref hlink="_d70443bf71c6340e05a9adc10ae" role="Primary"/>
|
||||
<eventref hlink="_d7044d1d2c749802e8116b33f47" role="Primary"/>
|
||||
<lds_ord type="baptism">
|
||||
<dateval val="1960-06-07"/>
|
||||
<temple val="DENVE"/>
|
||||
<place hlink="_0000006a0000006a"/>
|
||||
<status val="Qualified"/>
|
||||
</lds_ord>
|
||||
<address>
|
||||
<dateval val="1954"/>
|
||||
<street>8888 Cliff Dr</street>
|
||||
<city>Bay Village</city>
|
||||
<state>Ohio</state>
|
||||
<country>Cuyahoga</country>
|
||||
<postal>44140</postal>
|
||||
<phone>440-871-3400</phone>
|
||||
</address>
|
||||
<attribute type="Identification Number" value="ID99999"/>
|
||||
<attribute type="RFN" value="RFN8888"/>
|
||||
<attribute type="RESN" value="">
|
||||
<noteref hlink="_d7043cbb41e378229bb7645880a"/>
|
||||
</attribute>
|
||||
<attribute type="Age" value="99"/>
|
||||
<attribute type="Agency" value="a hospital"/>
|
||||
<attribute type="Description" value="A fake description"/>
|
||||
<url href="ftp://whoknows.org" type="FTP" description="A test FTP URL"/>
|
||||
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
</person>
|
||||
<person handle="_d704394bd865d87c4e17e0ddb52" change="1477758479" id="I0048">
|
||||
<gender>F</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Mary</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
</person>
|
||||
<person handle="_d7043a0d88d6c229604fb03acd8" change="1477758479" id="I0049">
|
||||
<gender>F</gender>
|
||||
<name type="Unknown">
|
||||
<first>Martha</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
</person>
|
||||
<person handle="_d7043e8a06054d316b49becaa9" change="1477758479" id="I0050">
|
||||
<gender>M</gender>
|
||||
<name type="Also Known As">
|
||||
<first>John</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
</person>
|
||||
<person handle="_d70ac994c26790fb000f95f0a31" change="1477758479" id="I0051">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Mark</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
|
||||
</person>
|
||||
</people>
|
||||
<families>
|
||||
<family handle="_0000000600000006" change="1198222526" id="F0003">
|
||||
@@ -1194,11 +1368,30 @@
|
||||
<mother hlink="_0000005600000056"/>
|
||||
<eventref hlink="_000000a9000000a9" role="Family"/>
|
||||
</family>
|
||||
<family handle="_d65a46d6c0034a50640d7a84213" change="1473020211" id="F0016">
|
||||
<family handle="_d65a46d6c0034a50640d7a84213" change="1477758479" id="F0016">
|
||||
<rel type="Married"/>
|
||||
<father hlink="_d65a448167a2736b3dfc08c11d8"/>
|
||||
<mother hlink="_d65a4481684319731c24a1e105a"/>
|
||||
<eventref hlink="_d70443f345457255bed58a2c65b" role="Family"/>
|
||||
<eventref hlink="_d70444b050662d2c4b8ae028b26" role="Family"/>
|
||||
<eventref hlink="_d70446576f35592a31604008bf6" role="Family"/>
|
||||
<eventref hlink="_d70446bff1e2c2e3c842d42b8cb" role="Family"/>
|
||||
<lds_ord type="sealed_to_spouse">
|
||||
<dateval val="2000-02-22"/>
|
||||
<temple val="DENVE"/>
|
||||
<place hlink="_0000003400000034"/>
|
||||
<status val="Cleared"/>
|
||||
</lds_ord>
|
||||
<childref hlink="_d65a448168e2615f26e025aa37c"/>
|
||||
<childref hlink="_d70431c6959122e6b45d92a0f79" mrel="Stepchild" frel="Adopted"/>
|
||||
<childref hlink="_d704394bd865d87c4e17e0ddb52" mrel="Adopted"/>
|
||||
<childref hlink="_d7043a0d88d6c229604fb03acd8" mrel="Foster" frel="Foster"/>
|
||||
<childref hlink="_d7043e8a06054d316b49becaa9" mrel="Stepchild" frel="Stepchild"/>
|
||||
<childref hlink="_d70ac994c26790fb000f95f0a31" mrel="Sponsored" frel="Sponsored"/>
|
||||
<attribute type="Number of Children" value="4"/>
|
||||
<attribute type="RFN" value="RFN3333"/>
|
||||
<attribute type="License Number" value="7532951"/>
|
||||
<attribute type="Unknown" value=""/>
|
||||
</family>
|
||||
</families>
|
||||
<citations>
|
||||
@@ -1219,10 +1412,15 @@
|
||||
<confidence>3</confidence>
|
||||
<sourceref hlink="_d53252d41b370ebe65ebd50c34f"/>
|
||||
</citation>
|
||||
<citation handle="_d53254b0c802fe24bdea26f3180" change="1465075912" id="C0004">
|
||||
<citation handle="_d53254b0c802fe24bdea26f3180" change="1477757692" id="C0004">
|
||||
<dateval val="1955-05-05"/>
|
||||
<page>22 6</page>
|
||||
<confidence>2</confidence>
|
||||
<noteref hlink="_d70a86ba52769996c5099561a3d"/>
|
||||
<noteref hlink="_d70a873db52134a80abb82d9769"/>
|
||||
<srcattribute type="EVEN" value="Citation Event?"/>
|
||||
<srcattribute type="EVEN:ROLE" value="The Event type Role"/>
|
||||
<srcattribute type="Unknown" value="I'ts unknown!"/>
|
||||
<sourceref hlink="_000000b9000000b9"/>
|
||||
</citation>
|
||||
<citation handle="_d65a448168445feea89cc1499fb" change="1472500308" id="C0005">
|
||||
@@ -1233,8 +1431,9 @@
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_d65a448169824195df7cdb2236c"/>
|
||||
</citation>
|
||||
<citation handle="_d65a448169813b50e0fdc0eea70" change="1472500308" id="C0007">
|
||||
<citation handle="_d65a448169813b50e0fdc0eea70" change="1477757813" id="C0007">
|
||||
<confidence>2</confidence>
|
||||
<noteref hlink="_d70a86ba52769996c5099561a3d"/>
|
||||
<sourceref hlink="_d65a448169824195df7cdb2236c"/>
|
||||
</citation>
|
||||
</citations>
|
||||
@@ -1274,6 +1473,13 @@
|
||||
<stitle>Ohio Births, 1958-2002</stitle>
|
||||
<reporef hlink="_d65a44816ac165956f5723df07d" medium="Book"/>
|
||||
</source>
|
||||
<source handle="_d7044abba5546284583fee1e21c" change="1477758039" id="S0007">
|
||||
<stitle></stitle>
|
||||
<sauthor>The tester</sauthor>
|
||||
<spubinfo>Published when the test was written</spubinfo>
|
||||
<sabbrev>TST</sabbrev>
|
||||
<reporef hlink="_d7044c855b91ee04c40e98987e7"/>
|
||||
</source>
|
||||
</sources>
|
||||
<places>
|
||||
<placeobj handle="_0000000300000003" change="1465741826" id="P0000" type="Unknown">
|
||||
@@ -1306,7 +1512,7 @@
|
||||
<ptitle>Hayward, Alameda Co., CA</ptitle>
|
||||
<pname value="Hayward, Alameda Co., CA"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000003400000034" change="1463929997" id="P0007" type="Unknown">
|
||||
<placeobj handle="_0000003400000034" change="1477754702" id="P0007" type="Locality">
|
||||
<ptitle>Community Presbyterian Church, Danville, CA</ptitle>
|
||||
<pname value="Community Presbyterian Church, Danville, CA"/>
|
||||
</placeobj>
|
||||
@@ -1442,8 +1648,9 @@
|
||||
</placeobj>
|
||||
</places>
|
||||
<objects>
|
||||
<object handle="_d54c1b52c8636648123580900ca" change="1465767829" id="O0000">
|
||||
<file src="D:/Users/prc/Downloads/Michael O'Toole 2015-11.jpg" mime="image/jpeg" checksum="ed5423c128d9bc43dbc03a8311f185bd" description="Michael O'Toole 2015-11"/>
|
||||
<object handle="_d54c1b52c8636648123580900ca" change="1477754617" id="O0000">
|
||||
<file src="O0.jpg" mime="image/jpeg" checksum="887d22e5822c86bd3961d0d179fbc0a2" description="Michael O'Toole 2015-11"/>
|
||||
<noteref hlink="_d70aa63baa15f9fee23b45f03b"/>
|
||||
</object>
|
||||
</objects>
|
||||
<repositories>
|
||||
@@ -1509,6 +1716,13 @@
|
||||
<noteref hlink="_d65a44816cafa196ba741ab38d"/>
|
||||
<noteref hlink="_d65a44816ca32ac25b0b586e61c"/>
|
||||
</repository>
|
||||
<repository handle="_d7044c064202cdd982648bfce19" change="1477584095" id="R0005">
|
||||
<type>Library</type>
|
||||
<url href="555-444-3333" type="Unknown"/>
|
||||
</repository>
|
||||
<repository handle="_d7044c855b91ee04c40e98987e7" change="1477758030" id="R0006">
|
||||
<type>Library</type>
|
||||
</repository>
|
||||
</repositories>
|
||||
<notes>
|
||||
<note handle="_0000004200000042" change="1463929997" id="N0002" type="General">
|
||||
@@ -1593,5 +1807,24 @@ Only one phone number supported Line 9:
|
||||
<range start="0" end="144"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_d70429bc98a43469b08051816c7" change="1477580626" id="N0014" type="Person Note">
|
||||
<text>******************************************************************890123456789
|
||||
******************************************************************89 123456789</text>
|
||||
</note>
|
||||
<note handle="_d7042e81dfd1dadee8ef6e5cac4" change="1477581000" id="N0015" type="Association Note">
|
||||
<text>This should show up under the ASSO tag in Gedcom</text>
|
||||
</note>
|
||||
<note handle="_d7043cbb41e378229bb7645880a" change="1477582492" id="N0016" type="Attribute Note">
|
||||
<text>??? What is RESN???</text>
|
||||
</note>
|
||||
<note handle="_d70a86ba52769996c5099561a3d" change="1477757590" id="N0017" type="Source text">
|
||||
<text>A citation Note Source text</text>
|
||||
</note>
|
||||
<note handle="_d70a873db52134a80abb82d9769" change="1477751366" id="N0018" type="Citation">
|
||||
<text>Another Citation Note</text>
|
||||
</note>
|
||||
<note handle="_d70aa63baa15f9fee23b45f03b" change="1477754616" id="N0019" type="Media Note">
|
||||
<text>A bad photo for sure</text>
|
||||
</note>
|
||||
</notes>
|
||||
</database>
|
||||
|
||||
@@ -4,6 +4,7 @@ PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
|
||||
FN:Anna Hansdotter
|
||||
N:Hansdotter;Anna;;;
|
||||
SORT-STRING:Hansdotter Anna
|
||||
NICKNAME:Annanana
|
||||
X-GENDER:Female
|
||||
BDAY:1864-10-02
|
||||
END:VCARD
|
||||
@@ -439,6 +440,7 @@ N:Tester;The;;;
|
||||
SORT-STRING:Tester The
|
||||
X-GENDER:Male
|
||||
BDAY:1954-12-29
|
||||
ADR:;;;Akron;OH;44177;Cuyahoga
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
@@ -459,9 +461,58 @@ END:VCARD
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
|
||||
FN:Tom Tester
|
||||
N:Tester;Tom;;;
|
||||
FN:Tom Von Tester y tested
|
||||
N:Von Tester y,tested;Tom;;;
|
||||
SORT-STRING:Tester Tom
|
||||
NICKNAME:TesterNickname
|
||||
X-GENDER:Male
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
|
||||
FN:Fake person Fake von Person\, I
|
||||
N:von Person;Person;Fake;Fake,person;I
|
||||
SORT-STRING:Person Fake I
|
||||
NICKNAME:Fake
|
||||
ADR:;;8888 Cliff Dr;Bay Village;Ohio;44140;Cuyahoga
|
||||
TEL:440-871-3400
|
||||
URL:ftp://whoknows.org
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
|
||||
FN:Mary Tester
|
||||
N:Tester;Mary;;;
|
||||
SORT-STRING:Tester Mary
|
||||
X-GENDER:Female
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
|
||||
FN:Martha Tester
|
||||
N:Tester;Martha;;;
|
||||
SORT-STRING:Tester Martha
|
||||
X-GENDER:Female
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
|
||||
FN:John Tester
|
||||
N:Tester;John;;;
|
||||
SORT-STRING:Tester John
|
||||
X-GENDER:Male
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
|
||||
FN:Mark Tester
|
||||
N:Tester;Mark;;;
|
||||
SORT-STRING:Tester Mark
|
||||
X-GENDER:Male
|
||||
END:VCARD
|
||||
|
||||
|
||||
+352
-82
@@ -2,10 +2,10 @@
|
||||
1 SOUR Gramps
|
||||
2 VERS 5.0.0-alpha1
|
||||
2 NAME Gramps
|
||||
1 DATE 4 SEP 2016
|
||||
2 TIME 15:21:50
|
||||
1 DATE 29 OCT 2016
|
||||
2 TIME 15:10:31
|
||||
1 SUBM @SUBM@
|
||||
1 FILE D:\Users\prc\Downloads\exp_sample_ged.ged
|
||||
1 FILE C:\Users\prc\AppData\Roaming\gramps\temp\exp_sample_ged.ged
|
||||
1 COPR Copyright (c) 2016 Alex Roitman,,,.
|
||||
1 GEDC
|
||||
2 VERS 5.5.1
|
||||
@@ -16,10 +16,17 @@
|
||||
1 NAME Alex Roitman,,,
|
||||
1 ADDR Not Provided
|
||||
2 ADR1 Not Provided
|
||||
1 PHON 666-555-4444
|
||||
1 EMAIL an_email@gmail.com
|
||||
0 @I0000@ INDI
|
||||
1 NAME Anna /Hansdotter/
|
||||
2 GIVN Anna
|
||||
2 SURN Hansdotter
|
||||
2 NICK Annanana
|
||||
1 NAME Anna Nana /Hansdotter/
|
||||
2 TYPE aka
|
||||
2 GIVN Anna Nana
|
||||
2 SURN Hansdotter
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 TYPE Birth of Anna Hansdotter
|
||||
@@ -30,9 +37,13 @@
|
||||
2 DATE 29 SEP 1945
|
||||
2 PLAC Sparks, Washoe Co., NV
|
||||
1 FAMS @F0003@
|
||||
1 ASSO @I0038@
|
||||
2 RELA Friend
|
||||
2 NOTE @N0015@
|
||||
1 NOTE @N0014@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
2 DATE 27 OCT 2016
|
||||
3 TIME 15:14:42
|
||||
0 @I0001@ INDI
|
||||
1 NAME Keith Lloyd /Smith/
|
||||
2 GIVN Keith Lloyd
|
||||
@@ -43,9 +54,10 @@
|
||||
2 DATE 11 AUG 1966
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 FAMC @F0008@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0002@ INDI
|
||||
1 NAME Amber Marie /Smith/
|
||||
2 GIVN Amber Marie
|
||||
@@ -59,10 +71,13 @@
|
||||
2 TYPE Christening of Amber Marie Smith
|
||||
2 DATE 26 APR 1998
|
||||
2 PLAC Community Presbyterian Church, Danville, CA
|
||||
2 ADDR
|
||||
3 ADR2 Community Presbyterian Church, Danville, CA
|
||||
1 FAMC @F0013@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0003@ INDI
|
||||
1 NAME Magnes /Smith/
|
||||
2 GIVN Magnes
|
||||
@@ -77,10 +92,11 @@
|
||||
2 DATE 20 FEB 1910
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
1 FAMC @F0002@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0011@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0004@ INDI
|
||||
1 NAME Ingeman /Smith/
|
||||
2 GIVN Ingeman
|
||||
@@ -91,9 +107,10 @@
|
||||
2 DATE 29 JAN 1826
|
||||
2 PLAC Gladsax, Kristianstad Län, Sweden
|
||||
1 FAMC @F0000@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0005@ INDI
|
||||
1 NAME Mason Michael /Smith/
|
||||
2 GIVN Mason Michael
|
||||
@@ -107,10 +124,13 @@
|
||||
2 TYPE Christening of Mason Michael Smith
|
||||
2 DATE 10 JUL 1996
|
||||
2 PLAC Community Presbyterian Church, Danville, CA
|
||||
2 ADDR
|
||||
3 ADR2 Community Presbyterian Church, Danville, CA
|
||||
1 FAMC @F0013@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0006@ INDI
|
||||
1 NAME Edwin /Willard/
|
||||
2 GIVN Edwin
|
||||
@@ -122,7 +142,7 @@
|
||||
1 FAMS @F0004@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0007@ INDI
|
||||
1 NAME Ingar /Smith/
|
||||
2 GIVN Ingar
|
||||
@@ -133,9 +153,10 @@
|
||||
2 DATE AFT 1823
|
||||
2 PLAC Gladsax, Kristianstad Län, Sweden
|
||||
1 FAMC @F0000@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0008@ INDI
|
||||
1 NAME Hjalmar /Smith/
|
||||
2 GIVN Hjalmar
|
||||
@@ -158,11 +179,12 @@
|
||||
2 DATE 14 NOV 1912
|
||||
2 PLAC Copenhagen, Denmark
|
||||
1 FAMC @F0003@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0006@
|
||||
1 NOTE @N0003@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0009@ INDI
|
||||
1 NAME Emil /Smith/
|
||||
2 GIVN Emil
|
||||
@@ -173,9 +195,10 @@
|
||||
2 DATE 27 SEP 1860
|
||||
2 PLAC Simrishamn, Kristianstad Län, Sweden
|
||||
1 FAMC @F0002@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0010@ INDI
|
||||
1 NAME Hans Peter /Smith/
|
||||
2 GIVN Hans Peter
|
||||
@@ -189,6 +212,10 @@
|
||||
3 PAGE 22 6
|
||||
3 DATA
|
||||
4 DATE 5 MAY 1955
|
||||
4 TEXT A citation Note Source text
|
||||
3 NOTE @N0018@
|
||||
3 EVEN Citation Event?
|
||||
4 ROLE The Event type Role
|
||||
1 DEAT
|
||||
2 TYPE Death of Hans Peter Smith
|
||||
2 DATE 29 JAN 1977
|
||||
@@ -202,11 +229,12 @@
|
||||
3 DATA
|
||||
4 DATE 22 JUL 1977
|
||||
1 FAMC @F0003@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0009@
|
||||
1 FAMS @F0014@
|
||||
1 CHAN
|
||||
2 DATE 4 JUN 2016
|
||||
3 TIME 16:32:08
|
||||
3 TIME 21:32:08
|
||||
0 @I0011@ INDI
|
||||
1 NAME Hanna /Smith/
|
||||
2 GIVN Hanna
|
||||
@@ -217,9 +245,10 @@
|
||||
2 DATE 29 JAN 1821
|
||||
2 PLAC Gladsax, Kristianstad Län, Sweden
|
||||
1 FAMC @F0000@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0012@ INDI
|
||||
1 NAME Herman Julius /Nielsen/
|
||||
2 GIVN Herman Julius
|
||||
@@ -235,7 +264,7 @@
|
||||
1 FAMS @F0005@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0013@ INDI
|
||||
1 NAME Evelyn /Michaels/
|
||||
2 GIVN Evelyn
|
||||
@@ -247,7 +276,7 @@
|
||||
1 FAMS @F0007@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0014@ INDI
|
||||
1 NAME Marjorie Lee /Smith/
|
||||
2 GIVN Marjorie Lee
|
||||
@@ -258,9 +287,10 @@
|
||||
2 DATE 4 NOV 1934
|
||||
2 PLAC Reno, Washoe Co., NV
|
||||
1 FAMC @F0006@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0015@ INDI
|
||||
1 NAME Gus /Smith/
|
||||
2 GIVN Gus
|
||||
@@ -275,10 +305,11 @@
|
||||
2 DATE 21 OCT 1963
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 FAMC @F0003@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0007@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0016@ INDI
|
||||
1 NAME Jennifer /Anderson/
|
||||
2 GIVN Jennifer
|
||||
@@ -295,7 +326,7 @@
|
||||
1 FAMS @F0014@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0017@ INDI
|
||||
1 NAME Lillie Harriet /Jones/
|
||||
2 GIVN Lillie Harriet
|
||||
@@ -311,7 +342,7 @@
|
||||
1 FAMS @F0009@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0018@ INDI
|
||||
1 NAME John Hjalmar /Smith/
|
||||
2 GIVN John Hjalmar
|
||||
@@ -322,10 +353,11 @@
|
||||
2 DATE 30 JAN 1932
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 FAMC @F0006@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0012@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0019@ INDI
|
||||
1 NAME Eric Lloyd /Smith/
|
||||
2 GIVN Eric Lloyd
|
||||
@@ -340,10 +372,11 @@
|
||||
2 FAMC @F0008@
|
||||
3 ADOP BOTH
|
||||
1 FAMC @F0008@
|
||||
2 PEDI adopted
|
||||
1 FAMS @F0010@
|
||||
1 CHAN
|
||||
2 DATE 4 JUN 2016
|
||||
3 TIME 16:25:13
|
||||
3 TIME 21:25:13
|
||||
0 @I0020@ INDI
|
||||
1 NAME Carl Emil /Smith/
|
||||
2 GIVN Carl Emil
|
||||
@@ -359,9 +392,10 @@
|
||||
2 PLAC Reno, Washoe Co., NV
|
||||
2 CAUS Bad breath
|
||||
1 FAMC @F0003@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0021@ INDI
|
||||
1 NAME Hjalmar /Smith/
|
||||
2 GIVN Hjalmar
|
||||
@@ -376,9 +410,10 @@
|
||||
2 DATE 25 SEP 1894
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
1 FAMC @F0003@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0022@ INDI
|
||||
1 NAME Martin /Smith/
|
||||
2 GIVN Martin
|
||||
@@ -397,11 +432,12 @@
|
||||
2 DATE 23 NOV 1830
|
||||
2 PLAC Gladsax, Kristianstad Län, Sweden
|
||||
1 FAMC @F0000@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0002@
|
||||
1 NOTE @N0002@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0023@ INDI
|
||||
1 NAME Astrid Shermanna Augusta /Smith/
|
||||
2 GIVN Astrid Shermanna Augusta
|
||||
@@ -416,10 +452,11 @@
|
||||
2 DATE 21 DEC 1963
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 FAMC @F0003@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0005@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0024@ INDI
|
||||
1 NAME Gustaf /Smith/ Sr.
|
||||
2 GIVN Gustaf
|
||||
@@ -443,10 +480,11 @@
|
||||
2 DATE 7 DEC 1862
|
||||
2 PLAC Gladsax, Kristianstad Län, Sweden
|
||||
1 FAMC @F0002@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0003@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0025@ INDI
|
||||
1 NAME Marta /Ericsdotter/
|
||||
2 GIVN Marta
|
||||
@@ -459,7 +497,7 @@
|
||||
1 FAMS @F0001@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0026@ INDI
|
||||
1 NAME Kirsti Marie /Smith/
|
||||
2 GIVN Kirsti Marie
|
||||
@@ -474,10 +512,11 @@
|
||||
2 DATE 18 JUL 1966
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 FAMC @F0003@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0004@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0027@ INDI
|
||||
1 NAME Ingeman /Smith/
|
||||
2 GIVN Ingeman
|
||||
@@ -490,7 +529,7 @@
|
||||
1 FAMS @F0001@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0028@ INDI
|
||||
1 NAME Anna /Streiffert/
|
||||
2 GIVN Anna
|
||||
@@ -507,7 +546,7 @@
|
||||
1 FAMS @F0011@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0029@ INDI
|
||||
1 NAME Craig Peter /Smith/
|
||||
2 GIVN Craig Peter
|
||||
@@ -521,9 +560,10 @@
|
||||
2 TYPE Census of Craig Peter Smith
|
||||
2 NOTE @N0000@
|
||||
1 FAMC @F0008@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0030@ INDI
|
||||
1 NAME Janice Ann /Adams/
|
||||
2 GIVN Janice Ann
|
||||
@@ -540,7 +580,7 @@
|
||||
1 FAMS @F0013@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0031@ INDI
|
||||
1 NAME Marjorie /Ohman/
|
||||
2 GIVN Marjorie
|
||||
@@ -564,7 +604,7 @@
|
||||
1 FAMS @F0006@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0032@ INDI
|
||||
1 NAME Darcy /Horne/
|
||||
2 GIVN Darcy
|
||||
@@ -579,7 +619,7 @@
|
||||
1 FAMS @F0010@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0033@ INDI
|
||||
1 NAME Lloyd /Smith/
|
||||
2 GIVN Lloyd
|
||||
@@ -590,10 +630,11 @@
|
||||
2 DATE 13 MAR 1935
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 FAMC @F0009@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0008@
|
||||
1 CHAN
|
||||
2 DATE 4 SEP 2016
|
||||
3 TIME 15:17:13
|
||||
3 TIME 20:17:13
|
||||
0 @I0034@ INDI
|
||||
1 NAME Alice Paula /Perkins/
|
||||
2 GIVN Alice Paula
|
||||
@@ -606,7 +647,7 @@
|
||||
1 FAMS @F0012@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0035@ INDI
|
||||
1 NAME Lars Peter /Smith/
|
||||
2 GIVN Lars Peter
|
||||
@@ -620,9 +661,10 @@
|
||||
2 FAMC @F0010@
|
||||
3 ADOP BOTH
|
||||
1 FAMC @F0010@
|
||||
2 PEDI adopted
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0036@ INDI
|
||||
1 NAME Elna /Jefferson/
|
||||
2 GIVN Elna
|
||||
@@ -642,7 +684,7 @@
|
||||
1 FAMS @F0000@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0037@ INDI
|
||||
1 NAME Edwin Michael /Smith/
|
||||
2 GIVN Edwin Michael
|
||||
@@ -664,10 +706,11 @@
|
||||
2 TYPE B.S.E.E.
|
||||
2 DATE 1984
|
||||
1 FAMC @F0012@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0013@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0038@ INDI
|
||||
1 NAME Kerstina /Hansdotter/
|
||||
2 GIVN Kerstina
|
||||
@@ -684,7 +727,7 @@
|
||||
1 FAMS @F0002@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0039@ INDI
|
||||
1 NAME Martin /Smith/
|
||||
2 GIVN Martin
|
||||
@@ -698,10 +741,11 @@
|
||||
2 TYPE Death of Martin Smith
|
||||
2 PLAC Sweden
|
||||
1 FAMC @F0001@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0000@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0040@ INDI
|
||||
1 NAME Marjorie Alice /Smith/
|
||||
2 GIVN Marjorie Alice
|
||||
@@ -712,9 +756,10 @@
|
||||
2 DATE 5 FEB 1960
|
||||
2 PLAC San Jose, Santa Clara Co., CA
|
||||
1 FAMC @F0012@
|
||||
2 PEDI birth
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0041@ INDI
|
||||
1 NAME Janis Elaine /Green/
|
||||
2 GIVN Janis Elaine
|
||||
@@ -726,7 +771,7 @@
|
||||
1 FAMS @F0008@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @I0042@ INDI
|
||||
1 NAME 雪 /Ke 柯/
|
||||
2 GIVN 雪
|
||||
@@ -740,10 +785,16 @@
|
||||
2 FAMC @F0005@
|
||||
3 ADOP BOTH
|
||||
1 FAMC @F0005@
|
||||
2 PEDI adopted
|
||||
1 OBJE
|
||||
2 FORM jpeg
|
||||
2 TITL Michael O'Toole 2015-11
|
||||
2 FILE c:\grampsaio64-4.9.9\share\gramps\tests\O0.jpg
|
||||
2 NOTE @N0019@
|
||||
1 NOTE @N0007@
|
||||
1 CHAN
|
||||
2 DATE 18 JUN 2016
|
||||
3 TIME 12:04:25
|
||||
3 TIME 17:04:25
|
||||
0 @I0043@ INDI
|
||||
1 NAME ピーター /リチミシキスイミ/
|
||||
2 GIVN ピーター
|
||||
@@ -751,11 +802,12 @@
|
||||
1 SEX M
|
||||
1 CHAN
|
||||
2 DATE 18 JUN 2016
|
||||
3 TIME 11:42:08
|
||||
3 TIME 16:42:08
|
||||
0 @I0044@ INDI
|
||||
1 NAME The /Tester/
|
||||
2 GIVN The
|
||||
2 SURN Tester
|
||||
2 NICK Testy
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE 29 DEC 1954
|
||||
@@ -771,14 +823,38 @@
|
||||
2 EMAIL thetester@gmail.com
|
||||
2 FAX 440-123-4567
|
||||
2 WWW http://thetester.com
|
||||
1 EVEN A very bad day
|
||||
2 TYPE LossOfMojo
|
||||
2 DATE 7 JUL 1973
|
||||
1 EVEN
|
||||
2 TYPE GainOfMojo
|
||||
2 DATE 10 JUL 1973
|
||||
1 BAPL
|
||||
2 DATE 2 JAN 1955
|
||||
2 STAT INFANT
|
||||
1 FAMC @F0008@
|
||||
2 PEDI birth
|
||||
1 FAMS @F0016@
|
||||
1 SOUR @S0005@
|
||||
1 RESI
|
||||
2 DATE 27 OCT 2017
|
||||
2 ADDR
|
||||
3 CONT test village
|
||||
3 CONT Akron
|
||||
3 CONT OH
|
||||
3 CONT 44177
|
||||
3 CONT Cuyahoga
|
||||
3 ADR2 test village
|
||||
3 CITY Akron
|
||||
3 STAE OH
|
||||
3 POST 44177
|
||||
3 CTRY Cuyahoga
|
||||
1 CHAN
|
||||
2 DATE 4 SEP 2016
|
||||
3 TIME 15:16:39
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:40:40
|
||||
0 @I0045@ INDI
|
||||
1 NAME Mrs /Tester/
|
||||
2 TYPE married
|
||||
2 GIVN Mrs
|
||||
2 SURN Tester
|
||||
1 SEX F
|
||||
@@ -804,28 +880,174 @@
|
||||
1 PHON 440-871-3401
|
||||
1 PHON 800-871-3401
|
||||
1 EMAIL mrstester@gmail.com
|
||||
1 PHON 440-321-4568
|
||||
1 FAX 440-321-4568
|
||||
1 WWW http://mrstester.com
|
||||
1 NOTE @N0010@
|
||||
1 CHAN
|
||||
2 DATE 4 SEP 2016
|
||||
3 TIME 15:16:39
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 14:22:58
|
||||
0 @I0046@ INDI
|
||||
1 NAME Tom /Tester/
|
||||
1 NAME Tom /Von Tester y tested/
|
||||
2 GIVN Tom
|
||||
2 SURN Tester
|
||||
2 SPFX Von,
|
||||
2 SURN Tester y, tested
|
||||
2 NICK TesterNickname
|
||||
1 SEX M
|
||||
1 RESI
|
||||
2 DATE 1964
|
||||
2 DATE FROM 1 JAN 1964 TO 3 MAR 1970
|
||||
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
|
||||
3 MAP
|
||||
4 LATI N39.7392
|
||||
4 LONG W104.9903
|
||||
2 ADDR
|
||||
3 CITY Denver, Denver Co., CO
|
||||
3 STAE Colorado
|
||||
3 CTRY USA
|
||||
2 PHON 440-871-3402
|
||||
2 EMAIL tomtester@gmail.com
|
||||
2 FAX 440-321-4569
|
||||
2 WWW http://tomtester.com
|
||||
1 RESI
|
||||
2 DATE I think 1970 to 1971
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 SLGC
|
||||
2 DATE EST ABT 1999
|
||||
2 FAMC @F0016@
|
||||
2 TEMP DENVE
|
||||
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
|
||||
3 MAP
|
||||
4 LATI N39.7392
|
||||
4 LONG W104.9903
|
||||
2 ADDR
|
||||
3 CITY Denver, Denver Co., CO
|
||||
3 STAE Colorado
|
||||
3 CTRY USA
|
||||
1 FAMC @F0016@
|
||||
2 PEDI birth
|
||||
1 SOUR @S0005@
|
||||
2 DATA
|
||||
3 TEXT A citation Note Source text
|
||||
1 OBJE
|
||||
2 FORM URL
|
||||
1 CHAN
|
||||
2 DATE 4 SEP 2016
|
||||
3 TIME 15:17:49
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:27:59
|
||||
0 @I0047@ INDI
|
||||
1 NAME Fake /von Person/ I
|
||||
2 GIVN Fake
|
||||
2 SPFX von
|
||||
2 SURN Person
|
||||
2 NSFX I
|
||||
2 NPFX Fake person
|
||||
2 NICK Fake
|
||||
1 BIRT
|
||||
2 DATE 1954
|
||||
3 TIME 12:45 am
|
||||
2 PLAC Fremont, Alameda Co., CA
|
||||
2 AGNC A hosptial
|
||||
2 HUSB
|
||||
3 AGE 47
|
||||
2 WIFE
|
||||
3 AGE 16
|
||||
1 DEAT Y
|
||||
1 OCCU
|
||||
2 DATE 1972
|
||||
1 BURI
|
||||
2 TYPE Buried in a Cemetary
|
||||
2 DATE 1 JAN 2017
|
||||
1 RETI Y
|
||||
1 ADOP Y
|
||||
2 FAMC @F0016@
|
||||
3 ADOP HUSB
|
||||
1 IDNO ID99999
|
||||
1 RFN RFN8888
|
||||
1 RESN
|
||||
1 FACT 99
|
||||
2 TYPE Age
|
||||
1 FACT a hospital
|
||||
2 TYPE Agency
|
||||
1 DSCR A fake description
|
||||
1 BAPL
|
||||
2 DATE 7 JUN 1960
|
||||
2 TEMP DENVE
|
||||
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
|
||||
3 MAP
|
||||
4 LATI N39.7392
|
||||
4 LONG W104.9903
|
||||
2 ADDR
|
||||
3 CITY Denver, Denver Co., CO
|
||||
3 STAE Colorado
|
||||
3 CTRY USA
|
||||
2 STAT QUALIFIED
|
||||
1 FAMC @F0016@
|
||||
2 _FREL Adopted
|
||||
2 _MREL Step
|
||||
1 RESI
|
||||
2 DATE 1954
|
||||
2 ADDR 8888 Cliff Dr
|
||||
3 CONT Bay Village
|
||||
3 CONT Ohio
|
||||
3 CONT 44140
|
||||
3 CONT Cuyahoga
|
||||
3 ADR1 8888 Cliff Dr
|
||||
3 CITY Bay Village
|
||||
3 STAE Ohio
|
||||
3 POST 44140
|
||||
3 CTRY Cuyahoga
|
||||
2 PHON 440-871-3400
|
||||
1 OBJE
|
||||
2 FORM URL
|
||||
2 TITL A test FTP URL
|
||||
2 FILE ftp://whoknows.org
|
||||
1 CHAN
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:27:59
|
||||
0 @I0048@ INDI
|
||||
1 NAME Mary /Tester/
|
||||
2 GIVN Mary
|
||||
2 SURN Tester
|
||||
1 SEX F
|
||||
1 ADOP Y
|
||||
2 FAMC @F0016@
|
||||
3 ADOP WIFE
|
||||
1 FAMC @F0016@
|
||||
2 _FREL birth
|
||||
2 _MREL Adopted
|
||||
1 CHAN
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:27:59
|
||||
0 @I0049@ INDI
|
||||
1 NAME Martha /Tester/
|
||||
2 TYPE Unknown
|
||||
2 GIVN Martha
|
||||
2 SURN Tester
|
||||
1 SEX F
|
||||
1 FAMC @F0016@
|
||||
2 PEDI foster
|
||||
1 CHAN
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:27:59
|
||||
0 @I0050@ INDI
|
||||
1 NAME John /Tester/
|
||||
2 TYPE aka
|
||||
2 GIVN John
|
||||
2 SURN Tester
|
||||
1 SEX M
|
||||
1 FAMC @F0016@
|
||||
2 PEDI stepchild
|
||||
1 CHAN
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:27:59
|
||||
0 @I0051@ INDI
|
||||
1 NAME Mark /Tester/
|
||||
2 GIVN Mark
|
||||
2 SURN Tester
|
||||
1 SEX M
|
||||
1 FAMC @F0016@
|
||||
2 PEDI Unknown
|
||||
1 CHAN
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:27:59
|
||||
0 @F0000@ FAM
|
||||
1 HUSB @I0039@
|
||||
1 WIFE @I0036@
|
||||
@@ -839,7 +1061,7 @@
|
||||
1 CHIL @I0022@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0001@ FAM
|
||||
1 HUSB @I0027@
|
||||
1 WIFE @I0025@
|
||||
@@ -850,7 +1072,7 @@
|
||||
1 CHIL @I0039@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0002@ FAM
|
||||
1 HUSB @I0022@
|
||||
1 WIFE @I0038@
|
||||
@@ -862,7 +1084,7 @@
|
||||
1 CHIL @I0024@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0003@ FAM
|
||||
1 HUSB @I0024@
|
||||
1 WIFE @I0000@
|
||||
@@ -879,7 +1101,7 @@
|
||||
1 CHIL @I0010@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0004@ FAM
|
||||
1 HUSB @I0006@
|
||||
1 WIFE @I0026@
|
||||
@@ -888,7 +1110,7 @@
|
||||
2 DATE ABT 1910
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0005@ FAM
|
||||
1 HUSB @I0012@
|
||||
1 WIFE @I0023@
|
||||
@@ -899,7 +1121,7 @@
|
||||
1 CHIL @I0042@
|
||||
1 CHAN
|
||||
2 DATE 12 JUN 2016
|
||||
3 TIME 09:27:35
|
||||
3 TIME 14:27:35
|
||||
0 @F0006@ FAM
|
||||
1 HUSB @I0008@
|
||||
1 WIFE @I0031@
|
||||
@@ -911,7 +1133,7 @@
|
||||
1 CHIL @I0014@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0007@ FAM
|
||||
1 HUSB @I0015@
|
||||
1 WIFE @I0013@
|
||||
@@ -920,7 +1142,7 @@
|
||||
2 DATE ABT 1920
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0008@ FAM
|
||||
1 HUSB @I0033@
|
||||
1 WIFE @I0041@
|
||||
@@ -934,14 +1156,14 @@
|
||||
1 CHIL @I0044@
|
||||
1 CHAN
|
||||
2 DATE 4 SEP 2016
|
||||
3 TIME 15:14:33
|
||||
3 TIME 20:14:33
|
||||
0 @F0009@ FAM
|
||||
1 HUSB @I0010@
|
||||
1 WIFE @I0017@
|
||||
1 CHIL @I0033@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0010@ FAM
|
||||
1 HUSB @I0019@
|
||||
1 WIFE @I0032@
|
||||
@@ -952,7 +1174,7 @@
|
||||
1 CHIL @I0035@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0011@ FAM
|
||||
1 HUSB @I0003@
|
||||
1 WIFE @I0028@
|
||||
@@ -962,7 +1184,7 @@
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0012@ FAM
|
||||
1 HUSB @I0018@
|
||||
1 WIFE @I0034@
|
||||
@@ -975,7 +1197,7 @@
|
||||
1 CHIL @I0037@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0013@ FAM
|
||||
1 HUSB @I0037@
|
||||
1 WIFE @I0030@
|
||||
@@ -991,20 +1213,49 @@
|
||||
1 CHIL @I0002@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0014@ FAM
|
||||
1 HUSB @I0010@
|
||||
1 WIFE @I0016@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @F0016@ FAM
|
||||
1 HUSB @I0044@
|
||||
1 WIFE @I0045@
|
||||
1 SLGS
|
||||
2 DATE 22 FEB 2000
|
||||
2 TEMP DENVE
|
||||
2 PLAC Community Presbyterian Church, Danville, CA
|
||||
2 ADDR
|
||||
3 ADR2 Community Presbyterian Church, Danville, CA
|
||||
2 STAT CLEARED
|
||||
1 MARR
|
||||
2 HUSB
|
||||
3 AGE 45
|
||||
2 WIFE
|
||||
3 AGE 15
|
||||
1 ENGA
|
||||
2 TYPE They were engaged
|
||||
1 EVEN Married by a clown in the buff
|
||||
2 TYPE Alternate Marriage
|
||||
1 EVEN
|
||||
2 TYPE Alternate Marriage
|
||||
1 NCHI 4
|
||||
1 RFN RFN3333
|
||||
1 FACT 7532951
|
||||
2 TYPE License Number
|
||||
1 FACT
|
||||
2 TYPE Unknown
|
||||
1 CHIL @I0046@
|
||||
1 CHIL @I0047@
|
||||
1 CHIL @I0048@
|
||||
1 CHIL @I0049@
|
||||
1 CHIL @I0050@
|
||||
1 CHIL @I0051@
|
||||
1 CHAN
|
||||
2 DATE 4 SEP 2016
|
||||
3 TIME 15:16:51
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:27:59
|
||||
0 @S0000@ SOUR
|
||||
1 TITL Marriage Certificae
|
||||
1 REPO @R0002@
|
||||
@@ -1013,17 +1264,17 @@
|
||||
1 NOTE @N0004@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @S0001@ SOUR
|
||||
1 TITL Birth Certificate
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @S0002@ SOUR
|
||||
1 TITL Birth Records
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @S0003@ SOUR
|
||||
1 TITL Birth, Death and Marriage Records
|
||||
1 REPO @R0002@
|
||||
@@ -1032,25 +1283,33 @@
|
||||
1 NOTE @N0005@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
3 TIME 07:35:26
|
||||
0 @S0004@ SOUR
|
||||
1 TITL findagrave.com
|
||||
1 CHAN
|
||||
2 DATE 4 JUN 2016
|
||||
3 TIME 16:28:36
|
||||
3 TIME 21:28:36
|
||||
0 @S0005@ SOUR
|
||||
1 TITL Import from imp_FTM_LINK.ged
|
||||
1 REPO @R0000@
|
||||
1 REPO @R0001@
|
||||
1 CHAN
|
||||
2 DATE 29 AUG 2016
|
||||
3 TIME 14:51:48
|
||||
3 TIME 19:51:48
|
||||
0 @S0006@ SOUR
|
||||
1 TITL Ohio Births, 1958-2002
|
||||
1 REPO @R0004@
|
||||
1 CHAN
|
||||
2 DATE 29 AUG 2016
|
||||
3 TIME 14:51:48
|
||||
3 TIME 19:51:48
|
||||
0 @S0007@ SOUR
|
||||
1 AUTH The tester
|
||||
1 PUBL Published when the test was written
|
||||
1 ABBR TST
|
||||
1 REPO @R0006@
|
||||
1 CHAN
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 16:20:39
|
||||
0 @R0000@ REPO
|
||||
1 NAME Business that produced the product: Ancestry.com
|
||||
1 ADDR 360 W 4800 N, Provo, UT 84604
|
||||
@@ -1108,6 +1367,8 @@
|
||||
1 WWW http://www.tester_repo.com
|
||||
1 NOTE @N0012@
|
||||
1 NOTE @N0013@
|
||||
0 @R0005@ REPO
|
||||
0 @R0006@ REPO
|
||||
0 @N0000@ NOTE Witness name: John Doe
|
||||
1 CONT Witness comment: This is a simple test.
|
||||
0 @N0001@ NOTE Witness name: No Name
|
||||
@@ -1153,4 +1414,13 @@
|
||||
1 CONT
|
||||
1 CONT Only one phone number supported Lin
|
||||
1 CONC e 87: 1 PHON 800-765-4321
|
||||
0 @N0014@ NOTE ******************************************************************8
|
||||
1 CONC 90123456789
|
||||
1 CONT ******************************************************************89 123
|
||||
1 CONC 456789
|
||||
0 @N0015@ NOTE This should show up under the ASSO tag in Gedcom
|
||||
0 @N0016@ NOTE ??? What is RESN???
|
||||
0 @N0017@ NOTE A citation Note Source text
|
||||
0 @N0018@ NOTE Another Citation Note
|
||||
0 @N0019@ NOTE A bad photo for sure
|
||||
0 TRLR
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
</object>
|
||||
<object handle="_0000000900000009" change="1472500307" id="M5">
|
||||
<file src="test.jpg" mime="image/jpeg" description="Multimedia link to linked form FTM style file"/>
|
||||
<datestr val="6/4/2016 9:33:57 AM"/>
|
||||
<noteref hlink="_0000001d0000001d"/>
|
||||
<noteref hlink="_0000001e0000001e"/>
|
||||
<noteref hlink="_0000001f0000001f"/>
|
||||
|
||||
@@ -10,14 +10,20 @@
|
||||
3 FAX (801) 705-7001
|
||||
3 EMAIL help@ancestry.com
|
||||
3 WWW http://www.ancestry.com
|
||||
2 DATA FTM Source data
|
||||
3 COPR Copyright 2999
|
||||
2 DATE 1 JAN 1111
|
||||
1 DEST GED55
|
||||
1 DATE 01 MAR 2016
|
||||
1 CHAR UTF-8
|
||||
1 CHAR UTF-8
|
||||
2 VERS 1.1
|
||||
1 FILE D:\Family Tree Maker\imp_FTM_LINK.ged
|
||||
1 SUBM @SUBM@
|
||||
2 NAME The Tester
|
||||
1 GEDC
|
||||
2 VERS 5.5
|
||||
2 FORM LINEAGE-LINKED
|
||||
2 FORM Lineage-Linked
|
||||
0 @SUBM@ SUBM
|
||||
1 NAME The Subm /Tester/
|
||||
1 ADDR 123 Main St., Winslow, PA, 12345
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="2016-08-29" version="5.0.0-alpha1"/>
|
||||
<created date="2016-10-23" version="5.0.0-alpha1"/>
|
||||
<researcher>
|
||||
<resname>The Subm /Tester/</resname>
|
||||
<resaddr>123 Main St.</resaddr>
|
||||
@@ -14,28 +14,31 @@
|
||||
<resemail>mrstester@gmail.com</resemail>
|
||||
</researcher>
|
||||
</header>
|
||||
<tags>
|
||||
<tag handle="_0000000400000004" change="1" name="Imported" color="#000000000000" priority="0"/>
|
||||
</tags>
|
||||
<events>
|
||||
<event handle="_0000000700000007" change="1472500308" id="E0000">
|
||||
<event handle="_0000000800000008" change="1" id="E0000">
|
||||
<type>Birth</type>
|
||||
<dateval val="1954-12-29"/>
|
||||
<place hlink="_0000000800000008"/>
|
||||
<place hlink="_0000000900000009"/>
|
||||
<attribute type="Phone" value="440-871-3400"/>
|
||||
<attribute type="Phone" value="800-871-3400"/>
|
||||
<attribute type="EMAIL" value="thetester@gmail.com"/>
|
||||
<attribute type="FAX" value="440-123-4567"/>
|
||||
<attribute type="WWW" value="http://thetester.com"/>
|
||||
</event>
|
||||
<event handle="_0000000c0000000c" change="1472500308" id="E0001">
|
||||
<event handle="_0000000d0000000d" change="1" id="E0001">
|
||||
<type>Residence</type>
|
||||
<dateval val="1954-12-30"/>
|
||||
<place hlink="_0000000e0000000e"/>
|
||||
<place hlink="_0000000f0000000f"/>
|
||||
<attribute type="Phone" value="440-871-3401"/>
|
||||
<attribute type="EMAIL" value="mrstester@gmail.com"/>
|
||||
<attribute type="FAX" value="440-321-4568"/>
|
||||
<attribute type="WWW" value="http://mrstester.com"/>
|
||||
<noteref hlink="_0000000d0000000d"/>
|
||||
<noteref hlink="_0000000e0000000e"/>
|
||||
</event>
|
||||
<event handle="_0000001100000011" change="1472500308" id="E0002">
|
||||
<event handle="_0000001200000012" change="1" id="E0002">
|
||||
<type>Residence</type>
|
||||
<dateval val="1964"/>
|
||||
<attribute type="Phone" value="440-871-3402"/>
|
||||
@@ -45,22 +48,23 @@
|
||||
</event>
|
||||
</events>
|
||||
<people>
|
||||
<person handle="_0000000600000006" change="1472500308" id="I0000">
|
||||
<person handle="_0000000700000007" change="1" id="I0000">
|
||||
<gender>U</gender>
|
||||
<name type="Birth Name">
|
||||
<first>The</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<eventref hlink="_0000000700000007" role="Primary"/>
|
||||
<citationref hlink="_0000000900000009"/>
|
||||
<eventref hlink="_0000000800000008" role="Primary"/>
|
||||
<citationref hlink="_0000000a0000000a"/>
|
||||
<tagref hlink="_0000000400000004"/>
|
||||
</person>
|
||||
<person handle="_0000000a0000000a" change="1472500308" id="I0001">
|
||||
<person handle="_0000000b0000000b" change="1" id="I0001">
|
||||
<gender>U</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Mrs</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<eventref hlink="_0000000c0000000c" role="Primary"/>
|
||||
<eventref hlink="_0000000d0000000d" role="Primary"/>
|
||||
<address>
|
||||
<street>123 Main St.</street>
|
||||
<city>Winslow</city>
|
||||
@@ -72,85 +76,91 @@
|
||||
<url href="mrstester@gmail.com" type="E-mail"/>
|
||||
<url href="440-321-4568" type="FAX"/>
|
||||
<url href="http://mrstester.com" type="Web Home"/>
|
||||
<noteref hlink="_0000000b0000000b"/>
|
||||
<citationref hlink="_0000000f0000000f"/>
|
||||
<noteref hlink="_0000000c0000000c"/>
|
||||
<citationref hlink="_0000001000000010"/>
|
||||
<tagref hlink="_0000000400000004"/>
|
||||
</person>
|
||||
<person handle="_0000001000000010" change="1472500308" id="I0002">
|
||||
<person handle="_0000001100000011" change="1" id="I0002">
|
||||
<gender>U</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Tom</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<eventref hlink="_0000001100000011" role="Primary"/>
|
||||
<citationref hlink="_0000001200000012"/>
|
||||
<eventref hlink="_0000001200000012" role="Primary"/>
|
||||
<citationref hlink="_0000001300000013"/>
|
||||
<tagref hlink="_0000000400000004"/>
|
||||
</person>
|
||||
</people>
|
||||
<citations>
|
||||
<citation handle="_0000000900000009" change="1472500308" id="C0000">
|
||||
<citation handle="_0000000a0000000a" change="1" id="C0000">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000300000003"/>
|
||||
</citation>
|
||||
<citation handle="_0000000f0000000f" change="1472500308" id="C0001">
|
||||
<citation handle="_0000001000000010" change="1" id="C0001">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000300000003"/>
|
||||
</citation>
|
||||
<citation handle="_0000001200000012" change="1472500308" id="C0002">
|
||||
<citation handle="_0000001300000013" change="1" id="C0002">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000300000003"/>
|
||||
</citation>
|
||||
</citations>
|
||||
<sources>
|
||||
<source handle="_0000000300000003" change="1472500308" id="S0000">
|
||||
<source handle="_0000000300000003" change="1" id="S0000">
|
||||
<stitle>Import from imp_FTM_LINK.ged</stitle>
|
||||
<sauthor>The Tester</sauthor>
|
||||
<srcattribute type="Approved system identification" value="FTM"/>
|
||||
<srcattribute type="Version number of software product" value="Family Tree Maker (22.0.0.1410)"/>
|
||||
<srcattribute type="Name of software product" value="Family Tree Maker for Windows"/>
|
||||
<srcattribute type="Name of source data" value="FTM Source data"/>
|
||||
<srcattribute type="Copyright of source data" value="Copyright 2999"/>
|
||||
<srcattribute type="Generated By" value="Family Tree Maker for Windows Family Tree Maker (22.0.0.1410)"/>
|
||||
<srcattribute type="Creation date of GEDCOM" value="2016-03-01"/>
|
||||
<srcattribute type="Character set and version" value="UTF-8 1.1"/>
|
||||
<srcattribute type="GEDCOM version" value="5.5"/>
|
||||
<srcattribute type="GEDCOM form" value="LINEAGE-LINKED"/>
|
||||
<srcattribute type="GEDCOM form" value="Lineage-Linked"/>
|
||||
<reporef hlink="_0000000100000001" medium="Unknown"/>
|
||||
<reporef hlink="_0000000400000004" medium="Unknown"/>
|
||||
<reporef hlink="_0000000500000005" medium="Unknown"/>
|
||||
</source>
|
||||
<source handle="_0000001300000013" change="1472500308" id="S0006">
|
||||
<source handle="_0000001400000014" change="1" id="S0006">
|
||||
<stitle>Ohio Births, 1958-2002</stitle>
|
||||
<reporef hlink="_0000001400000014" medium="Book"/>
|
||||
<reporef hlink="_0000001500000015" medium="Book"/>
|
||||
</source>
|
||||
</sources>
|
||||
<places>
|
||||
<placeobj handle="_0000000800000008" change="1472500308" id="P0000" type="Street">
|
||||
<placeobj handle="_0000000900000009" change="1" id="P0000" type="Street">
|
||||
<ptitle>123 High St, Cleveland, Cuyahoga, Ohio, USA, 44140</ptitle>
|
||||
<code>44140</code>
|
||||
<pname value="123 High St"/>
|
||||
<placeref hlink="_0000001a0000001a"/>
|
||||
<placeref hlink="_0000001b0000001b"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000000e0000000e" change="1472500308" id="P0001" type="Address">
|
||||
<placeobj handle="_0000000f0000000f" change="1" id="P0001" type="Address">
|
||||
<ptitle>123 Main St., Winslow, PA, 12345</ptitle>
|
||||
<pname value="123 Main St., Winslow, PA, 12345"/>
|
||||
<location street="123 Main St." city="Winslow" state="PA" postal="12345"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001700000017" change="1472500308" id="P0002" type="Country">
|
||||
<placeobj handle="_0000001800000018" change="1" id="P0002" type="Country">
|
||||
<ptitle>USA</ptitle>
|
||||
<pname value="USA"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001800000018" change="1472500308" id="P0003" type="State">
|
||||
<placeobj handle="_0000001900000019" change="1" id="P0003" type="State">
|
||||
<ptitle>Ohio, USA</ptitle>
|
||||
<pname value="Ohio"/>
|
||||
<placeref hlink="_0000001700000017"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001900000019" change="1472500308" id="P0004" type="County">
|
||||
<ptitle>Cuyahoga, Ohio, USA</ptitle>
|
||||
<pname value="Cuyahoga"/>
|
||||
<placeref hlink="_0000001800000018"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001a0000001a" change="1472500308" id="P0005" type="City">
|
||||
<placeobj handle="_0000001a0000001a" change="1" id="P0004" type="County">
|
||||
<ptitle>Cuyahoga, Ohio, USA</ptitle>
|
||||
<pname value="Cuyahoga"/>
|
||||
<placeref hlink="_0000001900000019"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001b0000001b" change="1" id="P0005" type="City">
|
||||
<ptitle>Cleveland, Cuyahoga, Ohio, USA</ptitle>
|
||||
<pname value="Cleveland"/>
|
||||
<placeref hlink="_0000001900000019"/>
|
||||
<placeref hlink="_0000001a0000001a"/>
|
||||
</placeobj>
|
||||
</places>
|
||||
<repositories>
|
||||
<repository handle="_0000000100000001" change="1472500308" id="R0000">
|
||||
<repository handle="_0000000100000001" change="1" id="R0000">
|
||||
<rname>Business that produced the product: Ancestry.com</rname>
|
||||
<type>GEDCOM data</type>
|
||||
<address>
|
||||
@@ -161,7 +171,7 @@
|
||||
<url href="help@ancestry.com" type="E-mail"/>
|
||||
<url href="http://www.ancestry.com" type="Web Home"/>
|
||||
</repository>
|
||||
<repository handle="_0000000400000004" change="1472500308" id="R0001">
|
||||
<repository handle="_0000000500000005" change="1" id="R0001">
|
||||
<rname>SUBM (Submitter): (@SUBM@) The Subm /Tester/</rname>
|
||||
<type>GEDCOM data</type>
|
||||
<address>
|
||||
@@ -174,9 +184,9 @@
|
||||
<url href="mrstester@gmail.com" type="E-mail"/>
|
||||
<url href="440-321-4568" type="FAX"/>
|
||||
<url href="http://mrstester.com" type="Web Home"/>
|
||||
<noteref hlink="_0000000500000005"/>
|
||||
<noteref hlink="_0000000600000006"/>
|
||||
</repository>
|
||||
<repository handle="_0000001400000014" change="1472500308" id="R0002">
|
||||
<repository handle="_0000001500000015" change="1" id="R0002">
|
||||
<rname>Testers Repository</rname>
|
||||
<type>Library</type>
|
||||
<address>
|
||||
@@ -186,40 +196,45 @@
|
||||
<url href="tester_repo@osf.com" type="E-mail"/>
|
||||
<url href="987-654-3210" type="FAX"/>
|
||||
<url href="http://www.tester_repo.com" type="Web Home"/>
|
||||
<noteref hlink="_0000001500000015"/>
|
||||
<noteref hlink="_0000001600000016"/>
|
||||
<noteref hlink="_0000001700000017"/>
|
||||
</repository>
|
||||
</repositories>
|
||||
<notes>
|
||||
<note handle="_0000000200000002" change="1472500308" id="N0000" type="GEDCOM import">
|
||||
<note handle="_0000000200000002" change="1" id="N0000" type="GEDCOM import">
|
||||
<text>Records not imported into HEAD (header):
|
||||
|
||||
Only one phone number supported Line 9: 3 PHON (800) 705-7000</text>
|
||||
Only one phone number supported Line 9: 3 PHON (800) 705-7000
|
||||
Line ignored as not understood Line 15: 2 DATE 1111-01-01
|
||||
GEDCOM FORM should be in uppercase Line 26: 2 FORM Lineage-Linked</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="144"/>
|
||||
<range start="0" end="344"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000000500000005" change="1472500308" id="N0001" type="GEDCOM import">
|
||||
<note handle="_0000000600000006" change="1" id="N0001" type="GEDCOM import">
|
||||
<text>Records not imported into SUBM (Submitter): (@SUBM@) The Subm /Tester/:
|
||||
|
||||
Only one phone number supported Line 29: 1 PHON 800-871-3401</text>
|
||||
Only one phone number supported Line 35: 1 PHON 800-871-3401</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="173"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000000b0000000b" change="1472500308" id="N0002" type="Person Note">
|
||||
<note handle="_0000000c0000000c" change="1" id="N0002" type="Person Note">
|
||||
<text>Address with PHON,FAX,EMAIL,WWW. attached directly to person is not legal Gedcom, but allowed here.</text>
|
||||
<tagref hlink="_0000000400000004"/>
|
||||
</note>
|
||||
<note handle="_0000000d0000000d" change="1472500308" id="N0003" type="Event Note">
|
||||
<note handle="_0000000e0000000e" change="1" id="N0003" type="Event Note">
|
||||
<text>Address as event is legal, with PHON,FAX,EMAIL,WWW</text>
|
||||
<tagref hlink="_0000000400000004"/>
|
||||
</note>
|
||||
<note handle="_0000001500000015" change="1472500308" id="N0004" type="Repository Note">
|
||||
<note handle="_0000001600000016" change="1" id="N0004" type="Repository Note">
|
||||
<text>The repository record</text>
|
||||
<tagref hlink="_0000000400000004"/>
|
||||
</note>
|
||||
<note handle="_0000001600000016" change="1472500308" id="N0005" type="GEDCOM import">
|
||||
<note handle="_0000001700000017" change="1" id="N0005" type="GEDCOM import">
|
||||
<text>Records not imported into REPO (repository) Gramps ID R0002:
|
||||
|
||||
Only one phone number supported Line 87: 1 PHON 800-765-4321</text>
|
||||
Only one phone number supported Line 93: 1 PHON 800-765-4321</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="162"/>
|
||||
</style>
|
||||
|
||||
+156
-127
@@ -3,182 +3,190 @@
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="2016-08-29" version="5.0.0-alpha1"/>
|
||||
<created date="2016-10-23" version="5.0.0-alpha1"/>
|
||||
<researcher>
|
||||
<resname>John A. Tester</resname>
|
||||
</researcher>
|
||||
</header>
|
||||
<tags>
|
||||
<tag handle="_0000000500000005" change="1" name="Imported" color="#000000000000" priority="0"/>
|
||||
</tags>
|
||||
<events>
|
||||
<event handle="_0000000e0000000e" change="1472505121" id="E0000">
|
||||
<event handle="_0000000f0000000f" change="1" id="E0000">
|
||||
<type>TEST</type>
|
||||
<description>person</description>
|
||||
</event>
|
||||
<event handle="_0000000f0000000f" change="1472505121" id="E0001">
|
||||
<event handle="_0000001000000010" change="1" id="E0001">
|
||||
<type>Birth</type>
|
||||
<dateval val="1900-06-15"/>
|
||||
<place hlink="_0000001300000013"/>
|
||||
<noteref hlink="_0000001000000010"/>
|
||||
<place hlink="_0000001400000014"/>
|
||||
<noteref hlink="_0000001100000011"/>
|
||||
</event>
|
||||
<event handle="_0000001400000014" change="1472505121" id="E0002">
|
||||
<event handle="_0000001500000015" change="1" id="E0002">
|
||||
<type>Death</type>
|
||||
<noteref hlink="_0000001500000015"/>
|
||||
<noteref hlink="_0000001600000016"/>
|
||||
</event>
|
||||
<event handle="_0000001d0000001d" change="1472505121" id="E0003">
|
||||
<event handle="_0000001e0000001e" change="1" id="E0003">
|
||||
<type>Who knows OBJE REFN TYPE</type>
|
||||
<description>REFN</description>
|
||||
</event>
|
||||
<event handle="_0000002600000026" change="1472505121" id="E0004">
|
||||
<event handle="_0000002700000027" change="1" id="E0004">
|
||||
<type>Birth</type>
|
||||
<dateval val="1901-06-15"/>
|
||||
</event>
|
||||
<event handle="_0000002700000027" change="1472505121" id="E0005">
|
||||
<event handle="_0000002800000028" change="1" id="E0005">
|
||||
<type>Death</type>
|
||||
<dateval val="1975-07-05"/>
|
||||
</event>
|
||||
<event handle="_0000002d0000002d" change="1472505121" id="E0006">
|
||||
<event handle="_0000002e0000002e" change="1" id="E0006">
|
||||
<type>Birth</type>
|
||||
<dateval val="1922-06-15"/>
|
||||
</event>
|
||||
<event handle="_0000002e0000002e" change="1472505121" id="E0007">
|
||||
<event handle="_0000002f0000002f" change="1" id="E0007">
|
||||
<type>Death</type>
|
||||
<dateval val="1994-07-05"/>
|
||||
</event>
|
||||
<event handle="_0000003a0000003a" change="1472505122" id="E0008">
|
||||
<event handle="_0000003b0000003b" change="1" id="E0008">
|
||||
<type>TEST</type>
|
||||
<description>family</description>
|
||||
</event>
|
||||
</events>
|
||||
<people>
|
||||
<person handle="_0000000d0000000d" change="979250406" id="I0001">
|
||||
<person handle="_0000000e0000000e" change="979250406" id="I0001">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Tom</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<eventref hlink="_0000000e0000000e" role="Primary"/>
|
||||
<eventref hlink="_0000000f0000000f" role="Primary"/>
|
||||
<eventref hlink="_0000001400000014" role="Primary"/>
|
||||
<eventref hlink="_0000001d0000001d" role="Primary"/>
|
||||
<objref hlink="_0000001e0000001e"/>
|
||||
<eventref hlink="_0000001000000010" role="Primary"/>
|
||||
<eventref hlink="_0000001500000015" role="Primary"/>
|
||||
<eventref hlink="_0000001e0000001e" role="Primary"/>
|
||||
<objref hlink="_0000001f0000001f"/>
|
||||
<attribute type="RIN" value="123456 Person"/>
|
||||
<attribute type="REFN" value="98765 for PERSON"/>
|
||||
<url href="http://homepages.rootsweb.com/~pmcbride/gedcom/55gctoc.htm" type="Web Home" description="GEDCOM 5.5 documentation web site"/>
|
||||
<parentin hlink="_0000001600000016"/>
|
||||
<noteref hlink="_0000001700000017"/>
|
||||
<parentin hlink="_0000001700000017"/>
|
||||
<noteref hlink="_0000001800000018"/>
|
||||
<noteref hlink="_0000001900000019"/>
|
||||
<noteref hlink="_0000001a0000001a"/>
|
||||
<noteref hlink="_0000002000000020"/>
|
||||
<citationref hlink="_0000001f0000001f"/>
|
||||
<noteref hlink="_0000001b0000001b"/>
|
||||
<noteref hlink="_0000002100000021"/>
|
||||
<citationref hlink="_0000002000000020"/>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</person>
|
||||
<person handle="_0000002500000025" change="1472505121" id="I0002">
|
||||
<person handle="_0000002600000026" change="1" id="I0002">
|
||||
<gender>F</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Mrs</first>
|
||||
<surname>Tester</surname>
|
||||
</name>
|
||||
<eventref hlink="_0000002600000026" role="Primary"/>
|
||||
<eventref hlink="_0000002700000027" role="Primary"/>
|
||||
<parentin hlink="_0000001600000016"/>
|
||||
<noteref hlink="_0000002800000028"/>
|
||||
<noteref hlink="_0000002a0000002a"/>
|
||||
<citationref hlink="_0000002900000029"/>
|
||||
<eventref hlink="_0000002800000028" role="Primary"/>
|
||||
<parentin hlink="_0000001700000017"/>
|
||||
<noteref hlink="_0000002900000029"/>
|
||||
<noteref hlink="_0000002b0000002b"/>
|
||||
<citationref hlink="_0000002a0000002a"/>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</person>
|
||||
<person handle="_0000002b0000002b" change="1472505121" id="I0003">
|
||||
<person handle="_0000002c0000002c" change="1" id="I0003">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Ed</first>
|
||||
<surname>Tester</surname>
|
||||
<nick>Eddie</nick>
|
||||
<noteref hlink="_0000002c0000002c"/>
|
||||
<noteref hlink="_0000002d0000002d"/>
|
||||
</name>
|
||||
<eventref hlink="_0000002d0000002d" role="Primary"/>
|
||||
<eventref hlink="_0000002e0000002e" role="Primary"/>
|
||||
<eventref hlink="_0000002f0000002f" role="Primary"/>
|
||||
<lds_ord type="baptism">
|
||||
<dateval val="-005-05-05"/>
|
||||
<temple val="SLAKE"/>
|
||||
<place hlink="_0000002f0000002f"/>
|
||||
<noteref hlink="_0000003000000030"/>
|
||||
<noteref hlink="_0000003300000033"/>
|
||||
<citationref hlink="_0000003200000032"/>
|
||||
<place hlink="_0000003000000030"/>
|
||||
<noteref hlink="_0000003100000031"/>
|
||||
<noteref hlink="_0000003400000034"/>
|
||||
<citationref hlink="_0000003300000033"/>
|
||||
</lds_ord>
|
||||
<childof hlink="_0000001600000016"/>
|
||||
<personref hlink="_0000003400000034" rel="">
|
||||
<noteref hlink="_0000003500000035"/>
|
||||
<childof hlink="_0000001700000017"/>
|
||||
<personref hlink="_0000003500000035" rel="">
|
||||
<noteref hlink="_0000003600000036"/>
|
||||
</personref>
|
||||
<noteref hlink="_0000003700000037"/>
|
||||
<citationref hlink="_0000003600000036"/>
|
||||
<noteref hlink="_0000003800000038"/>
|
||||
<citationref hlink="_0000003700000037"/>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</person>
|
||||
<person handle="_0000003400000034" change="1472505121" id="I0004">
|
||||
<person handle="_0000003500000035" change="1" id="I0004">
|
||||
<gender>U</gender>
|
||||
<name type="Birth Name">
|
||||
<first>George</first>
|
||||
<surname>Testee</surname>
|
||||
<noteref hlink="_0000003800000038"/>
|
||||
<noteref hlink="_0000003900000039"/>
|
||||
</name>
|
||||
<citationref hlink="_0000003900000039"/>
|
||||
<citationref hlink="_0000003a0000003a"/>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</person>
|
||||
</people>
|
||||
<families>
|
||||
<family handle="_0000001600000016" change="1472505121" id="F0001">
|
||||
<family handle="_0000001700000017" change="1" id="F0001">
|
||||
<rel type="Unknown"/>
|
||||
<father hlink="_0000000d0000000d"/>
|
||||
<mother hlink="_0000002500000025"/>
|
||||
<eventref hlink="_0000003a0000003a" role="Family"/>
|
||||
<childref hlink="_0000002b0000002b"/>
|
||||
<noteref hlink="_0000003d0000003d"/>
|
||||
<father hlink="_0000000e0000000e"/>
|
||||
<mother hlink="_0000002600000026"/>
|
||||
<eventref hlink="_0000003b0000003b" role="Family"/>
|
||||
<childref hlink="_0000002c0000002c"/>
|
||||
<noteref hlink="_0000003e0000003e"/>
|
||||
<noteref hlink="_0000004300000043"/>
|
||||
<citationref hlink="_0000003c0000003c"/>
|
||||
<citationref hlink="_0000004200000042"/>
|
||||
<noteref hlink="_0000003f0000003f"/>
|
||||
<noteref hlink="_0000004400000044"/>
|
||||
<citationref hlink="_0000003d0000003d"/>
|
||||
<citationref hlink="_0000004300000043"/>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</family>
|
||||
</families>
|
||||
<citations>
|
||||
<citation handle="_0000001f0000001f" change="1472505121" id="C0000">
|
||||
<citation handle="_0000002000000020" change="1" id="C0000">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000400000004"/>
|
||||
</citation>
|
||||
<citation handle="_0000002300000023" change="1472505121" id="C0001">
|
||||
<citation handle="_0000002400000024" change="1" id="C0001">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000400000004"/>
|
||||
</citation>
|
||||
<citation handle="_0000002900000029" change="1472505121" id="C0002">
|
||||
<citation handle="_0000002a0000002a" change="1" id="C0002">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000400000004"/>
|
||||
</citation>
|
||||
<citation handle="_0000003200000032" change="1472505121" id="C0003">
|
||||
<citation handle="_0000003300000033" change="1" id="C0003">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000003100000031"/>
|
||||
<sourceref hlink="_0000003200000032"/>
|
||||
</citation>
|
||||
<citation handle="_0000003600000036" change="1472505121" id="C0004">
|
||||
<citation handle="_0000003700000037" change="1" id="C0004">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000400000004"/>
|
||||
</citation>
|
||||
<citation handle="_0000003900000039" change="1472505121" id="C0005">
|
||||
<citation handle="_0000003a0000003a" change="1" id="C0005">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000000400000004"/>
|
||||
</citation>
|
||||
<citation handle="_0000003c0000003c" change="1472505122" id="C0006">
|
||||
<citation handle="_0000003d0000003d" change="1" id="C0006">
|
||||
<confidence>2</confidence>
|
||||
<sourceref hlink="_0000003b0000003b"/>
|
||||
<sourceref hlink="_0000003c0000003c"/>
|
||||
</citation>
|
||||
<citation handle="_0000004200000042" change="1472505122" id="C0007">
|
||||
<citation handle="_0000004300000043" change="1" id="C0007">
|
||||
<dateval val="1900-12-31"/>
|
||||
<page>42</page>
|
||||
<confidence>0</confidence>
|
||||
<noteref hlink="_0000003f0000003f"/>
|
||||
<noteref hlink="_0000004000000040"/>
|
||||
<noteref hlink="_0000004100000041"/>
|
||||
<sourceref hlink="_0000003b0000003b"/>
|
||||
<noteref hlink="_0000004200000042"/>
|
||||
<sourceref hlink="_0000003c0000003c"/>
|
||||
</citation>
|
||||
</citations>
|
||||
<sources>
|
||||
<source handle="_0000000400000004" change="1472505121" id="S0000">
|
||||
<source handle="_0000000400000004" change="1" id="S0000">
|
||||
<stitle>Import from imp_notetest.ged</stitle>
|
||||
<spubinfo>Tom Tester 2016</spubinfo>
|
||||
<noteref hlink="_0000000200000002"/>
|
||||
<noteref hlink="_0000000500000005"/>
|
||||
<noteref hlink="_0000000600000006"/>
|
||||
<noteref hlink="_0000000700000007"/>
|
||||
<srcattribute type="Approved system identification" value="GEDitCOM"/>
|
||||
<srcattribute type="Name of software product" value="GEDitCOM"/>
|
||||
<srcattribute type="Version number of software product" value="2.9.4"/>
|
||||
@@ -192,71 +200,72 @@
|
||||
<srcattribute type="Submission: Submitter" value="@SUBMITTER@"/>
|
||||
<srcattribute type="Submission: Family file" value="NameOfFamilyFile"/>
|
||||
<reporef hlink="_0000000100000001" medium="Unknown"/>
|
||||
<reporef hlink="_0000000b0000000b" medium="Unknown"/>
|
||||
<reporef hlink="_0000000c0000000c" medium="Unknown"/>
|
||||
</source>
|
||||
<source handle="_0000003100000031" change="1472505121" id="SOURCE1">
|
||||
<source handle="_0000003200000032" change="1" id="SOURCE1">
|
||||
<stitle>@SOURCE1@</stitle>
|
||||
</source>
|
||||
<source handle="_0000003b0000003b" change="1472505122" id="S0001">
|
||||
<source handle="_0000003c0000003c" change="1" id="S0001">
|
||||
<stitle>Note Test file Source: Tester</stitle>
|
||||
<noteref hlink="_0000004600000046"/>
|
||||
<noteref hlink="_0000004700000047"/>
|
||||
<reporef hlink="_0000004400000044" medium="Book">
|
||||
<noteref hlink="_0000004500000045"/>
|
||||
<noteref hlink="_0000004800000048"/>
|
||||
<reporef hlink="_0000004500000045" medium="Book">
|
||||
<noteref hlink="_0000004600000046"/>
|
||||
</reporef>
|
||||
</source>
|
||||
</sources>
|
||||
<places>
|
||||
<placeobj handle="_0000001300000013" change="1472505121" id="P0000" type="Address">
|
||||
<placeobj handle="_0000001400000014" change="1" id="P0000" type="Address">
|
||||
<ptitle>123 main, Norwalk, Ohio, USA</ptitle>
|
||||
<pname value="123 main, Norwalk, Ohio, USA"/>
|
||||
<location street="123 main, Norwalk, Ohio, USA"/>
|
||||
<noteref hlink="_0000001100000011"/>
|
||||
<noteref hlink="_0000001200000012"/>
|
||||
<noteref hlink="_0000001300000013"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000002f0000002f" change="1472505121" id="P0001" type="Unknown">
|
||||
<placeobj handle="_0000003000000030" change="1" id="P0001" type="Unknown">
|
||||
<ptitle>Salt Lake City</ptitle>
|
||||
<pname value="Salt Lake City"/>
|
||||
</placeobj>
|
||||
</places>
|
||||
<objects>
|
||||
<object handle="_0000001e0000001e" change="979250406" id="M1">
|
||||
<object handle="_0000001f0000001f" change="979250406" id="M1">
|
||||
<file src="photo.jpg" mime="image/jpeg" description="Tom Tester's photo"/>
|
||||
<attribute type="Media-Type" value="Film"/>
|
||||
<attribute type="RIN" value="123456"/>
|
||||
<attribute type="REFN" value="98765">
|
||||
<noteref hlink="_0000002200000022"/>
|
||||
<noteref hlink="_0000002300000023"/>
|
||||
</attribute>
|
||||
<noteref hlink="_0000002400000024"/>
|
||||
<citationref hlink="_0000002300000023"/>
|
||||
<noteref hlink="_0000002500000025"/>
|
||||
<citationref hlink="_0000002400000024"/>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</object>
|
||||
</objects>
|
||||
<repositories>
|
||||
<repository handle="_0000000100000001" change="1472505121" id="R0000">
|
||||
<repository handle="_0000000100000001" change="1" id="R0000">
|
||||
<rname>Business that produced the product: RSAC Software</rname>
|
||||
<type>GEDCOM data</type>
|
||||
</repository>
|
||||
<repository handle="_0000000b0000000b" change="1472505121" id="R0001">
|
||||
<repository handle="_0000000c0000000c" change="1" id="R0001">
|
||||
<rname>SUBM (Submitter): (@SUBMITTER@) John A. Tester</rname>
|
||||
<type>GEDCOM data</type>
|
||||
<address>
|
||||
</address>
|
||||
<noteref hlink="_0000000900000009"/>
|
||||
<noteref hlink="_0000000a0000000a"/>
|
||||
<noteref hlink="_0000000c0000000c"/>
|
||||
<noteref hlink="_0000000b0000000b"/>
|
||||
<noteref hlink="_0000000d0000000d"/>
|
||||
</repository>
|
||||
<repository handle="_0000004400000044" change="1472505122" id="R0002">
|
||||
<repository handle="_0000004500000045" change="1" id="R0002">
|
||||
<rname>The Testers repository</rname>
|
||||
<type>Library</type>
|
||||
<noteref hlink="_0000004800000048"/>
|
||||
<noteref hlink="_0000004900000049"/>
|
||||
<noteref hlink="_0000004a0000004a"/>
|
||||
</repository>
|
||||
</repositories>
|
||||
<notes>
|
||||
<note handle="_0000000200000002" change="1472505121" id="N0000" type="Source Note">
|
||||
<note handle="_0000000200000002" change="1" id="N0000" type="Source Note">
|
||||
<text>Header note</text>
|
||||
</note>
|
||||
<note handle="_0000000300000003" change="1472505121" id="N0001" type="GEDCOM import">
|
||||
<note handle="_0000000300000003" change="1" id="N0001" type="GEDCOM import">
|
||||
<text>Records not imported into HEAD (header):
|
||||
|
||||
Line ignored as not understood Line 18: 2 TEST Header Note
|
||||
@@ -266,13 +275,14 @@ Skipped subordinate line Line 20:
|
||||
<range start="0" end="327"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000000500000005" change="1472505121" id="N0002" type="Source Note">
|
||||
<note handle="_0000000600000006" change="1" id="N0002" type="Source Note">
|
||||
<text>Submission Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000000600000006" change="979250406" id="N0003" type="Source Note">
|
||||
<note handle="_0000000700000007" change="979250406" id="N0003" type="Source Note">
|
||||
<text>Submission xref note</text>
|
||||
</note>
|
||||
<note handle="_0000000700000007" change="1472505121" id="N0004" type="GEDCOM import">
|
||||
<note handle="_0000000800000008" change="1" id="N0004" type="GEDCOM import">
|
||||
<text>Records not imported into Top Level:
|
||||
|
||||
Line ignored as not understood Line 26: 2 TEST Submission Note
|
||||
@@ -283,7 +293,7 @@ Line ignored as not understood Line 29:
|
||||
<range start="0" end="425"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000000800000008" change="1472505121" id="N0005" type="GEDCOM import">
|
||||
<note handle="_0000000900000009" change="1" id="N0005" type="GEDCOM import">
|
||||
<text>Records not imported into NOTE Gramps ID N0003:
|
||||
|
||||
Tag recognized but not supported Line 32: 1 RIN Submission Note RIN
|
||||
@@ -295,13 +305,14 @@ Line ignored as not understood Line 39:
|
||||
<range start="0" end="586"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000000900000009" change="1472505121" id="N0006" type="Repository Note">
|
||||
<note handle="_0000000a0000000a" change="1" id="N0006" type="Repository Note">
|
||||
<text>Submitter Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000000a0000000a" change="1472505121" id="N0007" type="Repository Note">
|
||||
<note handle="_0000000b0000000b" change="1" id="N0007" type="Repository Note">
|
||||
<text>Submitter xref note</text>
|
||||
</note>
|
||||
<note handle="_0000000c0000000c" change="1472505121" id="N0008" type="GEDCOM import">
|
||||
<note handle="_0000000d0000000d" change="1" id="N0008" type="GEDCOM import">
|
||||
<text>Records not imported into SUBM (Submitter): (@SUBMITTER@) John A. Tester:
|
||||
|
||||
Line ignored as not understood Line 43: 2 TEST Submitter Note
|
||||
@@ -312,37 +323,44 @@ Line ignored as not understood Line 46:
|
||||
<range start="0" end="460"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000001000000010" change="1472505121" id="N0009" type="Event Note">
|
||||
<note handle="_0000001100000011" change="1" id="N0009" type="Event Note">
|
||||
<text>Birth Event note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000001100000011" change="1472505121" id="N0010" type="Place Note">
|
||||
<note handle="_0000001200000012" change="1" id="N0010" type="Place Note">
|
||||
<text>Location Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000001200000012" change="1472505121" id="N0011" type="Place Note">
|
||||
<note handle="_0000001300000013" change="1" id="N0011" type="Place Note">
|
||||
<text>Location Note 2</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000001500000015" change="1472505121" id="N0012" type="Event Note">
|
||||
<note handle="_0000001600000016" change="1" id="N0012" type="Event Note">
|
||||
<text>Death Event xref note</text>
|
||||
</note>
|
||||
<note handle="_0000001700000017" change="1472505121" id="N0013" type="Person Note">
|
||||
<note handle="_0000001800000018" change="1" id="N0013" type="Person Note">
|
||||
<text>FAMS Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000001800000018" change="1472505121" id="N0014" type="Person Note">
|
||||
<note handle="_0000001900000019" change="1" id="N0014" type="Person Note">
|
||||
<text>FAMS Note 2</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000001900000019" change="1472505121" id="N0015" type="Person Note">
|
||||
<note handle="_0000001a0000001a" change="1" id="N0015" type="Person Note">
|
||||
<text>Tom Tester xref note</text>
|
||||
</note>
|
||||
<note handle="_0000001a0000001a" change="1472505121" id="N0016" type="Person Note">
|
||||
<note handle="_0000001b0000001b" change="1" id="N0016" type="Person Note">
|
||||
<text>Tom Tester Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000001b0000001b" change="1472505121" id="N0017" type="Media Note">
|
||||
<note handle="_0000001c0000001c" change="1" id="N0017" type="Media Note">
|
||||
<text>Media Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000001c0000001c" change="979250406" id="N0018" type="Media Note">
|
||||
<note handle="_0000001d0000001d" change="979250406" id="N0018" type="Media Note">
|
||||
<text>Media xref note</text>
|
||||
</note>
|
||||
<note handle="_0000002000000020" change="1472505121" id="N0019" type="GEDCOM import">
|
||||
<note handle="_0000002100000021" change="1" id="N0019" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0001:
|
||||
|
||||
Empty note ignored Line 54: 2 NOTE
|
||||
@@ -369,7 +387,7 @@ Skipped subordinate line Line 91:
|
||||
<range start="0" end="2009"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002100000021" change="1472505121" id="N0020" type="GEDCOM import">
|
||||
<note handle="_0000002200000022" change="1" id="N0020" type="GEDCOM import">
|
||||
<text>Records not imported into NOTE Gramps ID N0018:
|
||||
|
||||
Tag recognized but not supported Line 103: 1 RIN 123456
|
||||
@@ -383,10 +401,10 @@ Skipped subordinate line Line 112:
|
||||
<range start="0" end="741"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002200000022" change="1472505121" id="N0021" type="REFN-TYPE">
|
||||
<note handle="_0000002300000023" change="1" id="N0021" type="REFN-TYPE">
|
||||
<text>Who knows REFN TYPE</text>
|
||||
</note>
|
||||
<note handle="_0000002400000024" change="1472505121" id="N0022" type="GEDCOM import">
|
||||
<note handle="_0000002500000025" change="1" id="N0022" type="GEDCOM import">
|
||||
<text>Records not imported into OBJE (multi-media object) Gramps ID M1:
|
||||
|
||||
Could not import photo.jpg Line 114: 1 FILE photo.jpg</text>
|
||||
@@ -394,10 +412,11 @@ Could not import photo.jpg Line 114:
|
||||
<range start="0" end="164"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002800000028" change="979250406" id="N0023" type="Person Note">
|
||||
<note handle="_0000002900000029" change="979250406" id="N0023" type="Person Note">
|
||||
<text>Family Spouse reference Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000002a0000002a" change="1472505121" id="N0024" type="GEDCOM import">
|
||||
<note handle="_0000002b0000002b" change="1" id="N0024" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0002:
|
||||
|
||||
Empty note ignored Line 132: 2 NOTE
|
||||
@@ -406,19 +425,22 @@ Skipped subordinate line Line 133:
|
||||
<range start="0" end="248"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002c0000002c" change="979250406" id="N0025" type="General">
|
||||
<note handle="_0000002d0000002d" change="979250406" id="N0025" type="General">
|
||||
<text>Name note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003000000030" change="1472505121" id="N0026" type="LDS Note">
|
||||
<note handle="_0000003100000031" change="1" id="N0026" type="LDS Note">
|
||||
<text>Place note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003300000033" change="1472505122" id="N0027" type="LDS Note">
|
||||
<note handle="_0000003400000034" change="1" id="N0027" type="LDS Note">
|
||||
<text>LDS xref note</text>
|
||||
</note>
|
||||
<note handle="_0000003500000035" change="979250406" id="N0028" type="Association Note">
|
||||
<note handle="_0000003600000036" change="979250406" id="N0028" type="Association Note">
|
||||
<text>Association link note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003700000037" change="1472505121" id="N0029" type="GEDCOM import">
|
||||
<note handle="_0000003800000038" change="1" id="N0029" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0003:
|
||||
|
||||
Empty note ignored Line 141: 2 NOTE
|
||||
@@ -430,25 +452,29 @@ Skipped subordinate line Line 168:
|
||||
<range start="0" end="538"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000003800000038" change="979250406" id="N0030" type="General">
|
||||
<note handle="_0000003900000039" change="979250406" id="N0030" type="General">
|
||||
<text>Just for association</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003d0000003d" change="1472505122" id="N0031" type="Family Note">
|
||||
<note handle="_0000003e0000003e" change="1" id="N0031" type="Family Note">
|
||||
<text>Family xref note</text>
|
||||
</note>
|
||||
<note handle="_0000003e0000003e" change="979250406" id="N0032" type="Family Note">
|
||||
<note handle="_0000003f0000003f" change="979250406" id="N0032" type="Family Note">
|
||||
<text>Family note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003f0000003f" change="1472505122" id="N0033" type="Citation">
|
||||
<note handle="_0000004000000040" change="1" id="N0033" type="Citation">
|
||||
<text>Citation Data Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004000000040" change="1472505122" id="N0034" type="Source text">
|
||||
<note handle="_0000004100000041" change="1" id="N0034" type="Source text">
|
||||
<text>A sample text from a source of this family</text>
|
||||
</note>
|
||||
<note handle="_0000004100000041" change="979250406" id="N0035" type="Citation">
|
||||
<note handle="_0000004200000042" change="979250406" id="N0035" type="Citation">
|
||||
<text>A note this citation is on the FAMILY record.</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004300000043" change="1472505122" id="N0036" type="GEDCOM import">
|
||||
<note handle="_0000004400000044" change="1" id="N0036" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0001:
|
||||
|
||||
Line ignored as not understood Line 183: 2 TEST Family Note
|
||||
@@ -461,13 +487,15 @@ Line ignored as not understood Line 196:
|
||||
<range start="0" end="645"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000004500000045" change="979250406" id="N0037" type="Repository Reference Note">
|
||||
<note handle="_0000004600000046" change="979250406" id="N0037" type="Repository Reference Note">
|
||||
<text>A short note about the repository link.</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004600000046" change="979250406" id="N0038" type="Source Note">
|
||||
<note handle="_0000004700000047" change="979250406" id="N0038" type="Source Note">
|
||||
<text>note embedded in the SOURCE Record</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004700000047" change="1472505122" id="N0039" type="GEDCOM import">
|
||||
<note handle="_0000004800000048" change="1" id="N0039" type="GEDCOM import">
|
||||
<text>Records not imported into SOUR (source) Gramps ID S0001:
|
||||
|
||||
Line ignored as not understood Line 206: 1 TEST source
|
||||
@@ -479,10 +507,11 @@ Skipped subordinate line Line 215:
|
||||
<range start="0" end="524"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000004800000048" change="1472505122" id="N0040" type="Repository Note">
|
||||
<note handle="_0000004900000049" change="1" id="N0040" type="Repository Note">
|
||||
<text>Repository Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004900000049" change="1472505122" id="N0041" type="GEDCOM import">
|
||||
<note handle="_0000004a0000004a" change="1" id="N0041" type="GEDCOM import">
|
||||
<text>Records not imported into REPO (repository) Gramps ID R0002:
|
||||
|
||||
Line ignored as not understood Line 223: 1 TEST Repo
|
||||
|
||||
+197
-31
@@ -1,43 +1,82 @@
|
||||
0 HEAD
|
||||
1 SOUR Gramps
|
||||
1 SOUR LEGACY
|
||||
2 VERS 3.3.0
|
||||
2 NAME Gramps
|
||||
2 NAME LEGACY
|
||||
1 DATE 27 DEC 2010
|
||||
2 TIME 15:35:24
|
||||
1 SUBM @SUBM@
|
||||
1 FILE gramps33/example/gedcom/sample.ged
|
||||
1 SUBN @SUBN@
|
||||
1 FILE sample.ged
|
||||
1 COPR Copyright (c) 2010 Alex Roitman,,,.
|
||||
1 GEDC
|
||||
2 VERS 5.5
|
||||
2 FORM LINEAGE-LINKED
|
||||
2 FORM NOT LINEAGE-LINKED
|
||||
1 CHAR UTF-8
|
||||
2 VERS 1.1
|
||||
1 LANG French
|
||||
0 @SUBM@ SUBM
|
||||
1 NAME Alex Roitman,,,
|
||||
1 ADDR Not Provided
|
||||
2 CONT Not Provided
|
||||
2 ADR1 Not Provided
|
||||
2 NOTE No address provided (note not supported)
|
||||
0 @SUBN@ SUBN
|
||||
1 TEMP Mormon Temple
|
||||
1 ANCE 4
|
||||
1 DESC 4
|
||||
1 ORDI Yes
|
||||
0 @F3@ FAM
|
||||
1 HUSB @I24@
|
||||
1 WIFE @I0@
|
||||
1 MARR
|
||||
2 TYPE Marriage of Gustaf Smith, Sr. and Anna Hansdotter
|
||||
2 DATE 27 NOV 1885
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
1 CHIL @I26@
|
||||
1 CHIL @I23@
|
||||
1 CHIL @I21@
|
||||
1 CHIL @I8@
|
||||
1 CHIL @I15@
|
||||
1 CHIL @I20@
|
||||
1 CHIL @I10@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35
|
||||
2 SOUR Not really allowed here
|
||||
1 RIN 987456321
|
||||
1 OBJE
|
||||
2 TITL No filename for this one
|
||||
0 @I0@ INDI
|
||||
1 NAME Anna /Hansdotter/
|
||||
2 GIVN Anna
|
||||
2 SURN Hansdotter
|
||||
2 SPFX Vrow
|
||||
2 SURN Smith
|
||||
2 _AKA Anna Smith
|
||||
2 _AKA Hanna
|
||||
2 NOTE Hans daughter? N0000
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 TYPE Birth of Anna Hansdotter
|
||||
2 DATE 2 OCT 1864
|
||||
2 DATE EST 2 OCT 1864
|
||||
2 PLAC Löderup, Malmöhus Län, Sweden
|
||||
1 DEAT
|
||||
2 TYPE Death of Anna Hansdotter
|
||||
2 DATE 29 SEP 1945
|
||||
2 PLAC Sparks, Washoe Co., NV
|
||||
2 NOTE Her eulogy was great! N0001
|
||||
1 FAMS @F3@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
2 DATE 21 DEC 1900
|
||||
3 TIME 01:35:26
|
||||
1 NOTE Inline note should get ID N0002
|
||||
1 _PHOTO @M1@
|
||||
0 @I1@ INDI
|
||||
1 NAME Keith Lloyd /Smith/
|
||||
2 GIVN Keith Lloyd
|
||||
2 SURN Smith
|
||||
2 NOTE @N7@
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 TYPE Birth of Keith Lloyd Smith
|
||||
@@ -47,6 +86,7 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 NOTE Keith Lloyd Smith inline N0003
|
||||
0 @I10@ INDI
|
||||
1 NAME Hans Peter /Smith/
|
||||
2 GIVN Hans Peter
|
||||
@@ -66,6 +106,7 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 NOTE Hans Peter Smith inline N0004
|
||||
0 @I11@ INDI
|
||||
1 NAME Hanna /Smith/
|
||||
2 GIVN Hanna
|
||||
@@ -79,6 +120,7 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 NOTE Hanna Smith inline N0005
|
||||
0 @I12@ INDI
|
||||
1 NAME Herman Julius /Nielsen/
|
||||
2 GIVN Herman Julius
|
||||
@@ -95,6 +137,7 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 NOTE Herman Julius Nielsen N0006
|
||||
0 @I13@ INDI
|
||||
1 NAME Evelyn /Michaels/
|
||||
2 GIVN Evelyn
|
||||
@@ -107,10 +150,13 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 NOTE Evelyn Michaels N0007
|
||||
0 @I14@ INDI
|
||||
1 NAME Marjorie Lee /Smith/
|
||||
2 GIVN Marjorie Lee
|
||||
2 SURN Smith
|
||||
1 NAME Margie
|
||||
2 TYPE Nickname
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 TYPE Birth of Marjorie Lee Smith
|
||||
@@ -151,6 +197,16 @@
|
||||
2 TYPE Death of Jennifer Anderson
|
||||
2 DATE 29 MAY 1985
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 RESI
|
||||
2 DATE 1980
|
||||
2 ADDR 459 Main St., The Village, San Francisco, CA, USA
|
||||
3 ADR1 456 Main St
|
||||
3 ADR1 456 Main St again
|
||||
3 ADR2 The Village
|
||||
3 CITY San Francisco
|
||||
3 CTRY USA
|
||||
3 PHON 555-666-7777
|
||||
3 STAE CA
|
||||
1 FAMS @F14@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
@@ -185,6 +241,11 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 SSN 987-555-4444
|
||||
2 TYPE first generaton
|
||||
2 SOUR @S999@
|
||||
3 PAGE SSN docs pg 999
|
||||
2 NOTE Person Attribute Note on SSN
|
||||
0 @I19@ INDI
|
||||
1 NAME Eric Lloyd /Smith/
|
||||
2 GIVN Eric Lloyd
|
||||
@@ -246,18 +307,26 @@
|
||||
2 TYPE Birth of Hjalmar Smith
|
||||
2 DATE 31 JAN 1893
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
1 BIRT Y
|
||||
1 DEAT
|
||||
2 TYPE Death of Hjalmar Smith
|
||||
2 DATE 25 SEP 1894
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
1 DEAT Y
|
||||
1 FAMC @F3@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 ALIA @I22@
|
||||
1 ALIA James /Smith/
|
||||
1 NAME Jimmy Smith
|
||||
1 TITL Sir Jimmy Smith
|
||||
2 DATE 5 OCT 1874
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
0 @I22@ INDI
|
||||
1 NAME Martin /Smith/
|
||||
2 GIVN Martin
|
||||
2 SURN Smith
|
||||
2 GIVN Martin
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 TYPE Birth of Martin Smith
|
||||
@@ -275,17 +344,29 @@
|
||||
1 FAMS @F2@
|
||||
1 NOTE @N0002@
|
||||
1 CHAN
|
||||
1 RESN locked
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
0 @I23@ INDI
|
||||
1 NAME Astrid Shermanna /Augusta/
|
||||
2 GIVN Astrid Shermanna
|
||||
2 SURN Augusta
|
||||
1 NAME Star /Augusta/
|
||||
2 GIVN Star
|
||||
2 SURN Augusta
|
||||
2 TYPE AKA
|
||||
2 DATE FROM 1889 TO 1898
|
||||
1 NAME Astrid Shermanna Augusta /Smith/
|
||||
2 GIVN Astrid Shermanna Augusta
|
||||
2 SURN Smith
|
||||
2 TYPE MARRIED
|
||||
2 NPFX Dr.
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 TYPE Birth of Astrid Shermanna Augusta Smith
|
||||
2 DATE 31 JAN 1889
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
2 FAMC @F3@
|
||||
1 DEAT
|
||||
2 TYPE Death of Astrid Shermanna Augusta Smith
|
||||
2 DATE 21 DEC 1963
|
||||
@@ -318,14 +399,21 @@
|
||||
2 DATE 7 DEC 1862
|
||||
2 PLAC Gladsax, Kristianstad Län, Sweden
|
||||
1 FAMC @F2@
|
||||
2 NOTE A FAMC note
|
||||
2 PEDI birth
|
||||
2 SOUR @S2@
|
||||
1 FAMS @F3@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 ASSO @I23@
|
||||
2 RELA Friend
|
||||
2 SOUR @S2@
|
||||
0 @I25@ INDI
|
||||
1 NAME Marta /Ericsdotter/
|
||||
2 GIVN Marta
|
||||
2 SURN Ericsdotter
|
||||
2 _MARN Smith
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 TYPE Birth of Marta Ericsdotter
|
||||
@@ -335,6 +423,20 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 FACT Housekeeper
|
||||
2 TYPE Skills
|
||||
1 CONL
|
||||
2 TEMP STOCK code
|
||||
2 DATE 1790
|
||||
1 ENDL
|
||||
2 TEMP Stockholm
|
||||
2 DATE 1795
|
||||
1 SLGC
|
||||
2 TEMP Stockholm, Sweden
|
||||
2 DATE 1796
|
||||
2 PLAC Sweden
|
||||
3 FORM Country
|
||||
2 FAMC @F1@
|
||||
0 @I26@ INDI
|
||||
1 NAME Kirsti Marie /Smith/
|
||||
2 GIVN Kirsti Marie
|
||||
@@ -360,7 +462,7 @@
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 TYPE Birth of Ingeman Smith
|
||||
2 DATE ABT 1770
|
||||
2 DATE ABT @#DGREGORIAN@ 1770
|
||||
2 PLAC Sweden
|
||||
1 FAMS @F1@
|
||||
1 CHAN
|
||||
@@ -403,11 +505,13 @@
|
||||
1 NAME Magnes /Smith/
|
||||
2 GIVN Magnes
|
||||
2 SURN Smith
|
||||
1 SEX M
|
||||
1 SSN 987-654-3210
|
||||
1 SEX X
|
||||
1 BIRT
|
||||
2 TYPE Birth of Magnes Smith
|
||||
2 DATE 6 OCT 1858
|
||||
2 PLAC Simrishamn, Kristianstad Län, Sweden
|
||||
2 RIN 789654123
|
||||
1 DEAT
|
||||
2 TYPE Death of Magnes Smith
|
||||
2 DATE 20 FEB 1910
|
||||
@@ -426,6 +530,8 @@
|
||||
2 TYPE Birth of Janice Ann Adams
|
||||
2 DATE 26 AUG 1965
|
||||
2 PLAC Fremont, Alameda Co., CA
|
||||
2 CAUS fooling around
|
||||
3 SOUR @S0@
|
||||
1 OCCU Retail Manager
|
||||
1 _DEG
|
||||
2 TYPE Business Management
|
||||
@@ -495,6 +601,8 @@
|
||||
1 NAME Lars Peter /Smith/
|
||||
2 GIVN Lars Peter
|
||||
2 SURN Smith
|
||||
2 _ADPN Jones
|
||||
2 _ADPN Pete Jones
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 TYPE Birth of Lars Peter Smith
|
||||
@@ -532,6 +640,8 @@
|
||||
2 GIVN Edwin Michael
|
||||
2 SURN Smith
|
||||
2 SOUR @S1@
|
||||
3 DATA
|
||||
4 TEXT Record for Edwin Michael Smith
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 TYPE Birth of Edwin Michael Smith
|
||||
@@ -648,7 +758,7 @@
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 TYPE Birth of Edwin Willard
|
||||
2 DATE ABT 1886
|
||||
2 DATE BET @#DHEBREW@ AAV 1886 AND @#DHEBREW@ ELUL 1897
|
||||
1 FAMS @F4@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
@@ -706,12 +816,19 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 RESI At the boarding school
|
||||
2 DATE FROM @#DGREGORIAN@ 1873 TO 1878
|
||||
2 PLAC Oronoko, Berrien, Michigan, USA
|
||||
1 RESI At the hebrew boarding school
|
||||
2 DATE FROM 1873 TO @#DHEBREW@ 1878
|
||||
2 PLAC Shemps
|
||||
3 FORM home
|
||||
0 @F0@ FAM
|
||||
1 HUSB @I39@
|
||||
1 WIFE @I36@
|
||||
1 MARR
|
||||
2 TYPE Marriage of Martin Smith and Elna Jefferson
|
||||
2 DATE ABT 1816
|
||||
2 DATE BET @#DGREGORIAN@ 1816 AND 1817
|
||||
2 PLAC Gladsax, Kristianstad Län, Sweden
|
||||
1 CHIL @I11@
|
||||
1 CHIL @I7@
|
||||
@@ -725,8 +842,12 @@
|
||||
1 WIFE @I25@
|
||||
1 MARR
|
||||
2 TYPE Marriage of Ingeman Smith and Marta Ericsdotter
|
||||
2 DATE ABT 1790
|
||||
2 DATE BET 1789 AND @#DHEBREW@ 1790
|
||||
2 PLAC Sweden
|
||||
2 HUSB
|
||||
3 AGE 17
|
||||
2 WIFE
|
||||
3 AGE 18
|
||||
1 CHIL @I39@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
@@ -739,9 +860,11 @@
|
||||
2 DATE 12 JUL 1986
|
||||
2 PLAC Woodland, Yolo Co., CA
|
||||
1 CHIL @I35@
|
||||
2 _STAT
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 _STAT
|
||||
0 @F11@ FAM
|
||||
1 HUSB @I3@
|
||||
1 WIFE @I28@
|
||||
@@ -749,9 +872,20 @@
|
||||
2 TYPE Marriage of Magnes Smith and Anna Streiffert
|
||||
2 DATE 24 AUG 1884
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
3 MAP
|
||||
4 LATI N55.1010
|
||||
4 LONG E14.7083
|
||||
3 OBJE
|
||||
4 FILE Magnes&Anna_smiths_marr_cert.jpg
|
||||
3 SOUR @S0@
|
||||
2 OBJE
|
||||
3 FILE Magnes&Anna_smiths_marr_cert.jpg
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 EVEN Celebration
|
||||
2 TYPE MARB
|
||||
2 DATE 24 AUG 1883
|
||||
0 @F12@ FAM
|
||||
1 HUSB @I18@
|
||||
1 WIFE @I34@
|
||||
@@ -765,6 +899,11 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 SLGS
|
||||
2 PLAC Sparks, Washoe Co., NV
|
||||
1 NCHI 2
|
||||
1 OBJE
|
||||
2 FILE John&Alice_smiths_marr_cert.jpg
|
||||
0 @F13@ FAM
|
||||
1 HUSB @I37@
|
||||
1 WIFE @I30@
|
||||
@@ -772,10 +911,18 @@
|
||||
2 TYPE Marriage of Edwin Michael Smith and Janice Ann Adams
|
||||
2 DATE 27 MAY 1995
|
||||
2 PLAC San Ramon, Conta Costa Co., CA
|
||||
2 _WITN @I18@
|
||||
3 TYPE WITNESS_OF_MARRIAGE
|
||||
1 ENGA
|
||||
2 TYPE Engagement of Edwin Michael Smith and Janice Ann Adams
|
||||
2 DATE 5 OCT 1994
|
||||
2 TIME 2:00pm
|
||||
2 AGNC Lovely ring presentation
|
||||
2 _WITN George Smorge
|
||||
2 _PRIV
|
||||
2 NOTE Description: Engagement of Edwin Michael Smith and Janice Ann Adams
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
2 _UID 123456
|
||||
1 CHIL @I5@
|
||||
1 CHIL @I2@
|
||||
1 CHAN
|
||||
@@ -787,35 +934,20 @@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 EVEN Common law marriage
|
||||
2 TYPE Civil
|
||||
0 @F2@ FAM
|
||||
1 HUSB @I22@
|
||||
1 WIFE @I38@
|
||||
1 MARR
|
||||
2 TYPE Marriage of Martin Smith and Kerstina Hansdotter
|
||||
2 DATE ABT 1856
|
||||
2 DATE FROM @#DGREGORIAN@ 1856 TO @#DGREGORIAN@ 1857
|
||||
1 CHIL @I3@
|
||||
1 CHIL @I9@
|
||||
1 CHIL @I24@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
0 @F3@ FAM
|
||||
1 HUSB @I24@
|
||||
1 WIFE @I0@
|
||||
1 MARR
|
||||
2 TYPE Marriage of Gustaf Smith, Sr. and Anna Hansdotter
|
||||
2 DATE 27 NOV 1885
|
||||
2 PLAC Rønne, Bornholm, Denmark
|
||||
1 CHIL @I26@
|
||||
1 CHIL @I23@
|
||||
1 CHIL @I21@
|
||||
1 CHIL @I8@
|
||||
1 CHIL @I15@
|
||||
1 CHIL @I20@
|
||||
1 CHIL @I10@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
0 @F4@ FAM
|
||||
1 HUSB @I6@
|
||||
1 WIFE @I26@
|
||||
@@ -850,7 +982,7 @@
|
||||
0 @F7@ FAM
|
||||
1 HUSB @I15@
|
||||
1 WIFE @I13@
|
||||
1 MARR
|
||||
1 MARR Civil Union
|
||||
2 TYPE Marriage of Gus Smith and Evelyn Michaels
|
||||
2 DATE ABT 1920
|
||||
1 CHAN
|
||||
@@ -866,12 +998,15 @@
|
||||
1 CHIL @I19@
|
||||
1 CHIL @I1@
|
||||
1 CHIL @I29@
|
||||
2 ADOP
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 ADDR 123 Main st, Grantville, Virginia, USA
|
||||
0 @F9@ FAM
|
||||
1 HUSB @I10@
|
||||
1 WIFE @I17@
|
||||
1 MARR Unmarried
|
||||
1 CHIL @I33@
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
@@ -887,11 +1022,16 @@
|
||||
3 TIME 01:35:26
|
||||
0 @S1@ SOUR
|
||||
1 TITL Birth Certificate
|
||||
1 REPO Invalid REPO Name
|
||||
2 NOTE Invalid REPO (Name instead of xref)
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
1 TEXT Source text of Birth cert
|
||||
0 @S2@ SOUR
|
||||
1 TITL Birth Records
|
||||
1 REPO
|
||||
2 NOTE Invalid REPO (no name)
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
@@ -901,9 +1041,15 @@
|
||||
2 CALN CA-123-LL-456_Num/ber
|
||||
3 MEDI Film
|
||||
1 NOTE @N0005@
|
||||
1 ABBR goodstuff
|
||||
1 DATA
|
||||
2 AGNC NYC Public Library
|
||||
1 CHAN
|
||||
2 DATE 21 DEC 2007
|
||||
3 TIME 01:35:26
|
||||
0 @S4@ SOUR
|
||||
1 PERI Our Family Tree
|
||||
1 RIN 987456321
|
||||
0 @R0002@ REPO
|
||||
1 NAME New York Public Library
|
||||
1 ADDR 5th Ave at 42 street
|
||||
@@ -912,13 +1058,27 @@
|
||||
2 STAE New York
|
||||
2 POST 11111
|
||||
2 CTRY USA
|
||||
1 CHAN
|
||||
2 DATE 01 JAN 2000
|
||||
3 TIME 00:00:00
|
||||
0 @R0003@ REPO
|
||||
1 NAME Aunt Martha's Attic
|
||||
1 ADDR 123 Main St
|
||||
1 ADDR 123 Main St, Someville, ST, USA
|
||||
2 ADR1 123 Main St
|
||||
2 ADR2 LittleVillage
|
||||
2 CITY Someville
|
||||
2 STAE ST
|
||||
2 CTRY USA
|
||||
2 DATE 25 DEC 1971
|
||||
2 SOUR @S0@
|
||||
3 DATE 26 DEC 1971
|
||||
3 REFN blah blah
|
||||
4 TYPE who knows
|
||||
3 EVEN housecleaning
|
||||
4 ROLE sorter
|
||||
3 OBJE
|
||||
4 FILE Attic_photo.jpg
|
||||
2 NOTE A note on this address
|
||||
1 WWW http://library.gramps-project.org
|
||||
1 NOTE @N0006@
|
||||
0 @N0000@ NOTE Witness name: John Doe
|
||||
@@ -943,4 +1103,10 @@
|
||||
0 @N0004@ NOTE But Aunt Martha still keeps the original!
|
||||
0 @N0005@ NOTE The repository reference from the source is important
|
||||
0 @N0006@ NOTE Some note on the repo
|
||||
0 XXX an unknown token at level 0
|
||||
0 SUBM @SUBM@
|
||||
0 @S4@ SOUR A weird source (one line) format
|
||||
1 @X1@ XXX and unknown token xref definition
|
||||
0 TRLR
|
||||
|
||||
The end
|
||||
|
||||
+1148
-725
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
||||
Mismatch on file: imp_vcard.vcf
|
||||
Person: I0019 handle=0000001800000018
|
||||
Diff on: Person, primary_name, surname list #2, primary
|
||||
<class 'bool'>: True
|
||||
<class 'bool'>: False
|
||||
Vendored
+2
@@ -1,3 +1,5 @@
|
||||
Old Changelog:
|
||||
|
||||
gramps (4.0.3) precise; urgency=low
|
||||
|
||||
* - 4.0.4-git.f08e40 Experimental stream gramps.git
|
||||
|
||||
Vendored
+1
@@ -31,6 +31,7 @@ Depends:
|
||||
${python3:Depends}
|
||||
Recommends:
|
||||
graphviz,
|
||||
gir1.2-goocanvas-2.0,
|
||||
libosmgpsmap-1.0-0,
|
||||
gir1.2-osmgpsmap-1.0,
|
||||
python3-pyicu
|
||||
|
||||
Vendored
+2
-3
@@ -18,12 +18,11 @@ override_dh_auto_build:
|
||||
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
|
||||
# Remove duplicate license/copyright information
|
||||
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/COPYING
|
||||
# Remove install file as it is not needed by package users
|
||||
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/INSTALL
|
||||
# Remove duplicate license information
|
||||
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/LICENSE
|
||||
# Link license/copyright information to debians
|
||||
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
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = 'Gramps'
|
||||
copyright = '2016, The Gramps Project'
|
||||
copyright = '2017, The Gramps Project'
|
||||
author = 'Donald N. Allingham'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
|
||||
+67
-42
@@ -11,33 +11,6 @@ GrampsDbBase
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
GrampsDbRead
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.read
|
||||
:members:
|
||||
:show-inheritance:
|
||||
|
||||
GrampsDbWrite
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.write
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
GrampsCursor
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.cursor
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
BSDDBtxn
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.bsddbtxn
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
GrampsDbTxn
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.txn
|
||||
@@ -45,13 +18,6 @@ GrampsDbTxn
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
GrampsDbUndo
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.undoredo
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
DbConst
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.dbconst
|
||||
@@ -64,15 +30,74 @@ GrampsDbException
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
Upgrade utilities
|
||||
GrampsDbUndo
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.upgrade
|
||||
:members:
|
||||
:undoc-members:
|
||||
|
||||
Backup
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.backup
|
||||
.. automodule:: gramps.gen.db.undoredo
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
Generic
|
||||
====================================
|
||||
.. automodule:: gramps.gen.db.generic
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
DummyDb
|
||||
====================================
|
||||
.. automodule:: gramps.plugins.db.dummydb
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
#####################################
|
||||
The :mod:`gramps.gen.db` bsddb Module
|
||||
#####################################
|
||||
|
||||
.. automodule:: gramps.plugins.db.bsddb
|
||||
|
||||
GrampsDbRead
|
||||
====================================
|
||||
.. automodule:: gramps.plugins.db.bsddb.read
|
||||
:members:
|
||||
:show-inheritance:
|
||||
|
||||
GrampsDbWrite
|
||||
====================================
|
||||
.. automodule:: gramps.plugins.db.bsddb.write
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
GrampsCursor
|
||||
====================================
|
||||
.. automodule:: gramps.plugins.db.bsddb.cursor
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
BSDDBtxn
|
||||
====================================
|
||||
.. automodule:: gramps.plugins.db.bsddb.bsddbtxn
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
#####################################
|
||||
The :mod:`gramps.gen.db` dbapi Module
|
||||
#####################################
|
||||
|
||||
.. automodule:: gramps.plugins.db.dbapi
|
||||
|
||||
DBAPI
|
||||
====================================
|
||||
.. automodule:: gramps.plugins.db.dbapi.dbapi
|
||||
:members:
|
||||
:show-inheritance:
|
||||
|
||||
Sqlite
|
||||
====================================
|
||||
.. automodule:: gramps.plugins.db.dbapi.sqlite
|
||||
:members:
|
||||
:show-inheritance:
|
||||
|
||||
@@ -10,3 +10,10 @@ Name
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
Place
|
||||
====================================
|
||||
.. automodule:: gramps.gen.display.place
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
+12
-12
@@ -53,14 +53,14 @@ CitationBase
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
IndirectCitationBase
|
||||
====================================
|
||||
.. autoclass:: IndirectCitationBase
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
DateBase
|
||||
====================================
|
||||
.. automodule:: gramps.gen.lib.datebase
|
||||
@@ -68,7 +68,7 @@ DateBase
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
LdsOrdBase
|
||||
====================================
|
||||
.. automodule:: gramps.gen.lib.ldsordbase
|
||||
@@ -76,7 +76,7 @@ LdsOrdBase
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
LocationBase
|
||||
====================================
|
||||
.. automodule:: gramps.gen.lib.locationbase
|
||||
@@ -84,7 +84,7 @@ LocationBase
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
MediaBase
|
||||
====================================
|
||||
.. automodule:: gramps.gen.lib.mediabase
|
||||
@@ -116,7 +116,7 @@ PrivacyBase
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
RefBase
|
||||
====================================
|
||||
.. automodule:: gramps.gen.lib.refbase
|
||||
@@ -132,7 +132,7 @@ SurnameBase
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
TagBase
|
||||
====================================
|
||||
.. automodule:: gramps.gen.lib.tagbase
|
||||
@@ -216,7 +216,7 @@ Citation
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
Media Object
|
||||
Media
|
||||
====================================
|
||||
.. automodule:: gramps.gen.lib.media
|
||||
.. autoclass:: Media
|
||||
@@ -366,7 +366,7 @@ RepoRef
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
*****************************
|
||||
Table objects
|
||||
*****************************
|
||||
@@ -487,7 +487,7 @@ EventType
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
EventRoleType
|
||||
==============
|
||||
.. automodule:: gramps.gen.lib.eventroletype
|
||||
@@ -543,7 +543,7 @@ RepositoryType
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
SourceMediaType
|
||||
================
|
||||
.. automodule:: gramps.gen.lib.srcmediatype
|
||||
@@ -557,7 +557,7 @@ StyledTextTagType
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
UrlType
|
||||
========
|
||||
.. automodule:: gramps.gen.lib.urltype
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
#! /usr/bin/env python
|
||||
#! /usr/bin/env python3
|
||||
#
|
||||
# update_po - a gramps tool to update translations
|
||||
#
|
||||
@@ -102,8 +102,9 @@ def build():
|
||||
# testing stage
|
||||
|
||||
os.system('''%(program)s -b html . _build/html''' % {'program': sphinxCmd})
|
||||
os.system('''%(program)s -b changes . _build/changes''' % {'program': sphinxCmd})
|
||||
os.system('''%(program)s -b linkcheck . _build/linkcheck''' % {'program': sphinxCmd})
|
||||
#os.system('''%(program)s -b changes . _build/changes''' % {'program': sphinxCmd})
|
||||
#os.system('''%(program)s -b linkcheck . _build/linkcheck''' % {'program': sphinxCmd})
|
||||
#os.system('''%(program)s -b devhelp . _build/devhelp''' % {'program': sphinxCmd})
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -46,7 +46,7 @@ import re
|
||||
from gramps.gen.recentfiles import recent_files
|
||||
from gramps.gen.utils.file import rm_tempdir, get_empty_tempdir
|
||||
from .clidbman import CLIDbManager, NAME_FILE, find_locker_name
|
||||
|
||||
from gramps.gen.db.utils import make_database
|
||||
from gramps.gen.plug import BasePluginManager
|
||||
from gramps.gen.plug.report import CATEGORY_BOOK, CATEGORY_CODE, BookList
|
||||
from .plug import cl_report, cl_book
|
||||
@@ -501,7 +501,7 @@ class ArgHandler:
|
||||
else:
|
||||
self.imp_db_path = get_empty_tempdir("import_dbdir")
|
||||
dbid = config.get('database.backend')
|
||||
newdb = self.dbstate.make_database(dbid)
|
||||
newdb = make_database(dbid)
|
||||
newdb.write_version(self.imp_db_path)
|
||||
|
||||
try:
|
||||
|
||||
@@ -77,7 +77,6 @@ Application options
|
||||
-y, --yes Don't ask to confirm dangerous actions (non-GUI mode only)
|
||||
-q, --quiet Suppress progress indication output (non-GUI mode only)
|
||||
-v, --version Show versions
|
||||
-b, --databases Show available database backends
|
||||
""")
|
||||
|
||||
_USAGE = _("""
|
||||
@@ -154,7 +153,6 @@ class ArgParser:
|
||||
-y, --yes Don't ask to confirm dangerous actions
|
||||
-q, --quiet Suppress progress indication output
|
||||
-v, --version Show versions
|
||||
-b, --databases Show available database backends
|
||||
-h, --help Display the help
|
||||
--usage Display usage information
|
||||
|
||||
@@ -325,23 +323,6 @@ class ArgParser:
|
||||
repr(config.data[sect][setting])))
|
||||
print()
|
||||
sys.exit(0)
|
||||
elif option in ['-b', '--databases']:
|
||||
default = config.data["database"]["backend"]
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
pmgr.reg_plugins(PLUGINS_DIR, self, None)
|
||||
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
|
||||
for plugin in pmgr.get_reg_databases():
|
||||
pdata = pmgr.get_plugin(plugin.id)
|
||||
mod = pmgr.load_plugin(pdata)
|
||||
if mod:
|
||||
database = getattr(mod, pdata.databaseclass)
|
||||
summary = database.get_class_summary()
|
||||
print("Database backend ID:",
|
||||
pdata.id,
|
||||
"(default)" if pdata.id == default else "")
|
||||
for key in sorted(summary.keys()):
|
||||
print(" ", _("%s:") % key, summary[key])
|
||||
sys.exit(0)
|
||||
elif option in ['-c', '--config']:
|
||||
cfg_name = value
|
||||
set_value = False
|
||||
|
||||
+12
-7
@@ -49,6 +49,7 @@ from gramps.gen.plug import BasePluginManager
|
||||
from gramps.gen.config import config
|
||||
from gramps.gen.constfunc import win
|
||||
from gramps.gen.db.dbconst import DBLOGNAME
|
||||
from gramps.gen.db.utils import make_database
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
@@ -160,7 +161,7 @@ class CLIDbManager:
|
||||
dbid = file.read().strip()
|
||||
if not self.is_locked(dirpath):
|
||||
try:
|
||||
database = self.dbstate.make_database(dbid)
|
||||
database = make_database(dbid)
|
||||
database.load(dirpath, None, update=False)
|
||||
retval = database.get_summary()
|
||||
database.close(update=False)
|
||||
@@ -189,13 +190,13 @@ class CLIDbManager:
|
||||
dbname == name)
|
||||
for dbname in database_names])):
|
||||
summary = self.get_dbdir_summary(dirpath, name)
|
||||
print(_("Family Tree \"%s\":") % summary[_("Family Tree")])
|
||||
print(_('Family Tree "%s":') % summary[_("Family Tree")])
|
||||
for item in sorted(summary):
|
||||
if item != "Family Tree":
|
||||
# translators: needed for French, ignore otherwise
|
||||
print(_(" %(item)s: %(summary)s") % {
|
||||
'item' : item,
|
||||
'summary' : summary[item]})
|
||||
print(' ' + _("%(str1)s: %(str2)s"
|
||||
) % {'str1' : item,
|
||||
'str2' : summary[item]})
|
||||
|
||||
def family_tree_summary(self, database_names=None):
|
||||
"""
|
||||
@@ -307,7 +308,7 @@ class CLIDbManager:
|
||||
# write the version number into metadata
|
||||
if dbid is None:
|
||||
dbid = "bsddb"
|
||||
newdb = self.dbstate.make_database(dbid)
|
||||
newdb = make_database(dbid)
|
||||
newdb.write_version(new_path)
|
||||
|
||||
(tval, last) = time_val(new_path)
|
||||
@@ -357,7 +358,11 @@ class CLIDbManager:
|
||||
temp_fp.write(data)
|
||||
url_fp.close()
|
||||
from gramps.gen.db.dbconst import BDBVERSFN
|
||||
# name not set
|
||||
(name, ext) = os.path.splitext(os.path.basename(filename))
|
||||
versionpath = os.path.join(name, BDBVERSFN)
|
||||
# dbase not set
|
||||
dbase = make_database("bsddb")
|
||||
_LOG.debug("Write bsddb version %s", str(dbase.version()))
|
||||
with open(versionpath, "w") as version_file:
|
||||
version_file.write(str(dbase.version()))
|
||||
@@ -376,7 +381,7 @@ class CLIDbManager:
|
||||
|
||||
## Use bsddb, for now, because we assumed that above.
|
||||
dbid = "bsddb" ## config.get('database.backend')
|
||||
dbase = self.dbstate.make_database(dbid)
|
||||
dbase = make_database(dbid)
|
||||
dbase.load(new_path, user.callback)
|
||||
|
||||
import_function = plugin.get_import_function()
|
||||
|
||||
@@ -48,6 +48,7 @@ from gramps.gen.display.name import displayer as name_displayer
|
||||
from gramps.gen.config import config
|
||||
from gramps.gen.const import PLUGINS_DIR, USER_PLUGINS
|
||||
from gramps.gen.db.dbconst import DBBACKEND
|
||||
from gramps.gen.db.utils import make_database
|
||||
from gramps.gen.errors import DbError
|
||||
from gramps.gen.dbstate import DbState
|
||||
from gramps.gen.db.exceptions import (DbUpgradeRequiredError,
|
||||
@@ -163,7 +164,7 @@ class CLIDbLoader:
|
||||
else:
|
||||
dbid = "bsddb"
|
||||
|
||||
db = self.dbstate.make_database(dbid)
|
||||
db = make_database(dbid)
|
||||
|
||||
self.dbstate.change_database(db)
|
||||
self.dbstate.db.disable_signals()
|
||||
@@ -315,7 +316,7 @@ class CLIManager:
|
||||
# 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()):
|
||||
and self.dbstate.db.get_total() == 0):
|
||||
self.dbstate.db.set_researcher(owner)
|
||||
|
||||
name_displayer.set_name_format(self.dbstate.db.name_formats)
|
||||
@@ -330,12 +331,14 @@ class CLIManager:
|
||||
recent_files(filename, name)
|
||||
self.file_loaded = True
|
||||
|
||||
def do_reg_plugins(self, dbstate, uistate):
|
||||
def do_reg_plugins(self, dbstate, uistate, rescan=False):
|
||||
"""
|
||||
Register the plugins at initialization time.
|
||||
"""
|
||||
self._pmgr.reg_plugins(PLUGINS_DIR, dbstate, uistate)
|
||||
self._pmgr.reg_plugins(PLUGINS_DIR, dbstate, uistate, rescan=rescan)
|
||||
self._pmgr.reg_plugins(USER_PLUGINS, dbstate, uistate, load_on_reg=True)
|
||||
if rescan: # supports updated plugin installs
|
||||
self._pmgr.reload_plugins()
|
||||
|
||||
def startcli(errors, argparser):
|
||||
"""
|
||||
|
||||
@@ -120,13 +120,13 @@ def _convert_str_to_match_type(str_val, type_val):
|
||||
|
||||
# Search through characters between the brackets
|
||||
for char in str_val[1:-1]:
|
||||
if (char == "'" or char == '"') and quote_type == None:
|
||||
if (char == "'" or char == '"') and quote_type is None:
|
||||
# This character starts a string
|
||||
quote_type = char
|
||||
elif char == quote_type:
|
||||
# This character ends a string
|
||||
quote_type = None
|
||||
elif quote_type == None and char == ",":
|
||||
elif quote_type is None and char == ",":
|
||||
# This character ends an entry
|
||||
ret_val.append(entry.strip())
|
||||
entry = ""
|
||||
@@ -398,8 +398,10 @@ class CommandLineReport:
|
||||
father = self.database.get_person_from_handle(fhandle)
|
||||
if father:
|
||||
fname = name_displayer.display(father)
|
||||
text = "%s:\t%s, %s" % (family.get_gramps_id(),
|
||||
fname, mname)
|
||||
# translators: needed for French, Hebrew and Arabic
|
||||
text = _("%(id)s:\t%(father)s, %(mother)s"
|
||||
) % {'id': family.get_gramps_id(),
|
||||
'father': fname, 'mother': mname}
|
||||
id_list.append(text)
|
||||
self.options_help[name].append(id_list)
|
||||
elif isinstance(option, NoteOption):
|
||||
|
||||
@@ -77,14 +77,13 @@ 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("%s %s" % (pyexec, gcmd),
|
||||
gcmd = [sys.executable, "Gramps.py", "-i", ifile, "-e", ofile]
|
||||
process = subprocess.Popen(gcmd,
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE, shell=True)
|
||||
stderr=subprocess.PIPE)
|
||||
result_str, err_str = process.communicate()
|
||||
self.assertEqual(process.returncode, 0,
|
||||
"executed CLI command %r" % gcmd)
|
||||
@@ -110,14 +109,13 @@ class Test(unittest.TestCase):
|
||||
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("%s %s" % (pyexec, gcmd),
|
||||
gcmd = [sys.executable, "Gramps.py", "-i", ifile, "-e", ofile]
|
||||
process = subprocess.Popen(gcmd,
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE, shell=True)
|
||||
stderr=subprocess.PIPE)
|
||||
result_str, err_str = process.communicate()
|
||||
self.assertEqual(process.returncode, 0,
|
||||
"executed CLI command %r" % gcmd)
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
import unittest
|
||||
from .. import user
|
||||
from ...gen.test.user_test import TestUser
|
||||
import sys
|
||||
|
||||
try:
|
||||
@@ -38,6 +37,12 @@ except:
|
||||
MOCKING = False
|
||||
print ("Mocking disabled", sys.exc_info()[0:2])
|
||||
|
||||
class TestUser:
|
||||
TITLE = "Testing prompt"
|
||||
MSG = "Choices are hard. Nevertheless, please choose!"
|
||||
ACCEPT = "To be"
|
||||
REJECT = "Not to be"
|
||||
|
||||
class TestUser_prompt(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.real_user = user.User()
|
||||
|
||||
+9
-8
@@ -44,12 +44,13 @@ _SPINNER = ['|', '/', '-', '\\']
|
||||
# User class
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class User(user.User):
|
||||
class User(user.UserBase):
|
||||
"""
|
||||
This class provides a means to interact with the user via CLI.
|
||||
It implements the interface in :class:`.gen.user.User`
|
||||
It implements the interface in :class:`.gen.user.UserBase`
|
||||
"""
|
||||
def __init__(self, callback=None, error=None, auto_accept=False, quiet=False,
|
||||
def __init__(self, callback=None, error=None,
|
||||
auto_accept=False, quiet=False,
|
||||
uistate=None, dbstate=None):
|
||||
"""
|
||||
Init.
|
||||
@@ -57,7 +58,7 @@ class User(user.User):
|
||||
:param error: If given, notify_error delegates to this callback
|
||||
:type error: function(title, error)
|
||||
"""
|
||||
user.User.__init__(self, callback, error, uistate, dbstate)
|
||||
user.UserBase.__init__(self, callback, error, uistate, dbstate)
|
||||
self.steps = 0;
|
||||
self.current_step = 0;
|
||||
self._input = input
|
||||
@@ -145,14 +146,14 @@ class User(user.User):
|
||||
m = message,
|
||||
y = accept_text,
|
||||
n = reject_text)
|
||||
print (text, file = self._fileout) # TODO python3 add flush=True
|
||||
print (text, file = self._fileout) # TODO: python 3.3 add flush=True
|
||||
try:
|
||||
reply = self._input()
|
||||
except EOFError:
|
||||
reply = ""
|
||||
### Trun response into True/False:
|
||||
### Turn response into True/False:
|
||||
if reply == "":
|
||||
return default
|
||||
return default == accept_label
|
||||
elif reply == accept_label:
|
||||
return True
|
||||
else:
|
||||
@@ -168,7 +169,7 @@ class User(user.User):
|
||||
:type warning: str
|
||||
:returns: none
|
||||
"""
|
||||
self._fileout.write("%s %s" % (title, warning))
|
||||
self._fileout.write("%s\n%s\n" % (title, warning))
|
||||
|
||||
def notify_error(self, title, error=""):
|
||||
"""
|
||||
|
||||
+16
-77
@@ -23,7 +23,7 @@
|
||||
#
|
||||
|
||||
"""
|
||||
This package implements access to GRAMPS configuration.
|
||||
This package implements access to Gramps configuration.
|
||||
"""
|
||||
|
||||
#---------------------------------------------------------------
|
||||
@@ -133,11 +133,11 @@ register('behavior.addmedia-relative-path', False)
|
||||
register('behavior.autoload', False)
|
||||
register('behavior.avg-generation-gap', 20)
|
||||
register('behavior.betawarn', False)
|
||||
register('behavior.check-for-updates', 0)
|
||||
register('behavior.check-for-update-types', ["new"])
|
||||
register('behavior.last-check-for-updates', "1970/01/01")
|
||||
register('behavior.previously-seen-updates', [])
|
||||
register('behavior.do-not-show-previously-seen-updates', True)
|
||||
register('behavior.check-for-addon-updates', 0)
|
||||
register('behavior.check-for-addon-update-types', ["new"])
|
||||
register('behavior.last-check-for-addon-updates', "1970/01/01")
|
||||
register('behavior.previously-seen-addon-updates', [])
|
||||
register('behavior.do-not-show-previously-seen-addon-updates', True)
|
||||
register('behavior.date-about-range', 50)
|
||||
register('behavior.date-after-range', 50)
|
||||
register('behavior.date-before-range', 50)
|
||||
@@ -159,7 +159,9 @@ register('behavior.addons-url', "https://raw.githubusercontent.com/gramps-projec
|
||||
|
||||
register('database.backend', 'bsddb')
|
||||
register('database.compress-backup', True)
|
||||
register('database.autobackup', True) ## make backup when exiting, if there are changes
|
||||
register('database.backup-path', USER_HOME)
|
||||
register('database.backup-on-exit', True)
|
||||
register('database.autobackup', 0)
|
||||
register('database.path', os.path.join(HOME_DIR, 'grampsdb'))
|
||||
|
||||
register('export.proxy-order',
|
||||
@@ -181,66 +183,25 @@ register('geography.show_cross', False)
|
||||
register('geography.path', "")
|
||||
register('geography.use-keypad', True)
|
||||
|
||||
register('interface.address-height', 450)
|
||||
register('interface.address-width', 650)
|
||||
register('interface.attribute-height', 350)
|
||||
register('interface.attribute-width', 600)
|
||||
register('interface.child-ref-height', 450)
|
||||
register('interface.child-ref-width', 600)
|
||||
register('interface.citation-height', 450)
|
||||
register('interface.citation-sel-height', 450)
|
||||
register('interface.citation-sel-width', 600)
|
||||
register('interface.citation-width', 600)
|
||||
register('interface.clipboard-height', 300)
|
||||
register('interface.clipboard-width', 300)
|
||||
# note that other calls to "register" are done in realtime (when
|
||||
# needed), for instance to four 'interface.clipboard' variables --
|
||||
# so do a recursive grep for "setup_configs" to see all the (base) names
|
||||
register('interface.dont-ask', False)
|
||||
register('interface.view-categories',
|
||||
["Dashboard", "People", "Relationships", "Families",
|
||||
"Ancestry", "Events", "Places", "Geography", "Sources",
|
||||
"Citations", "Repositories", "Media", "Notes"])
|
||||
register('interface.edit-filter-width', 500)
|
||||
register('interface.edit-filter-height', 420)
|
||||
register('interface.edit-rule-width', 600)
|
||||
register('interface.edit-rule-height', 450)
|
||||
register('interface.event-height', 450)
|
||||
register('interface.event-ref-height', 450)
|
||||
register('interface.event-ref-width', 600)
|
||||
register('interface.event-sel-height', 450)
|
||||
register('interface.event-sel-width', 600)
|
||||
register('interface.event-width', 600)
|
||||
register('interface.family-height', 500)
|
||||
register('interface.family-sel-height', 450)
|
||||
register('interface.family-sel-width', 600)
|
||||
register('interface.family-width', 700)
|
||||
register('interface.filter', False)
|
||||
register('interface.filter-editor-width', 400)
|
||||
register('interface.filter-editor-height', 350)
|
||||
register('interface.fullscreen', False)
|
||||
register('interface.grampletbar-close', False)
|
||||
register('interface.ignore-gexiv2', False)
|
||||
register('interface.ignore-pil', False)
|
||||
register('interface.ignore-osmgpsmap', False)
|
||||
register('interface.lds-height', 450)
|
||||
register('interface.lds-width', 600)
|
||||
register('interface.location-height', 250)
|
||||
register('interface.location-width', 600)
|
||||
register('interface.main-window-height', 500)
|
||||
register('interface.main-window-horiz-position', 15)
|
||||
register('interface.main-window-vert-position', 10)
|
||||
register('interface.main-window-width', 775)
|
||||
register('interface.mapservice', 'OpenStreetMap')
|
||||
register('interface.media-height', 450)
|
||||
register('interface.media-ref-height', 450)
|
||||
register('interface.media-ref-width', 600)
|
||||
register('interface.media-sel-height', 450)
|
||||
register('interface.media-sel-width', 600)
|
||||
register('interface.media-width', 650)
|
||||
register('interface.name-height', 350)
|
||||
register('interface.name-width', 600)
|
||||
register('interface.note-height', 500)
|
||||
register('interface.note-sel-height', 450)
|
||||
register('interface.note-sel-width', 600)
|
||||
register('interface.note-width', 700)
|
||||
register('interface.open-with-default-viewer', False)
|
||||
register('interface.pedview-layout', 0)
|
||||
register('interface.pedview-show-images', True)
|
||||
@@ -248,38 +209,12 @@ register('interface.pedview-show-marriage', False)
|
||||
register('interface.pedview-tree-size', 5)
|
||||
register('interface.pedview-tree-direction', 2)
|
||||
register('interface.pedview-show-unknown-people', False)
|
||||
register('interface.person-height', 550)
|
||||
register('interface.person-ref-height', 350)
|
||||
register('interface.person-ref-width', 600)
|
||||
register('interface.person-sel-height', 450)
|
||||
register('interface.person-sel-width', 600)
|
||||
register('interface.person-width', 750)
|
||||
register('interface.place-height', 450)
|
||||
register('interface.place-name-height', 100)
|
||||
register('interface.place-name-width', 450)
|
||||
register('interface.place-ref-height', 450)
|
||||
register('interface.place-ref-width', 600)
|
||||
register('interface.place-sel-height', 450)
|
||||
register('interface.place-sel-width', 600)
|
||||
register('interface.place-width', 650)
|
||||
register('interface.repo-height', 450)
|
||||
register('interface.repo-ref-height', 450)
|
||||
register('interface.repo-ref-width', 600)
|
||||
register('interface.repo-sel-height', 450)
|
||||
register('interface.repo-sel-width', 600)
|
||||
register('interface.repo-width', 650)
|
||||
register('interface.sidebar-text', True)
|
||||
register('interface.size-checked', False)
|
||||
register('interface.source-height', 450)
|
||||
register('interface.source-ref-height', 450)
|
||||
register('interface.source-ref-width', 600)
|
||||
register('interface.source-sel-height', 450)
|
||||
register('interface.source-sel-width', 600)
|
||||
register('interface.source-width', 600)
|
||||
register('interface.statusbar', 1)
|
||||
register('interface.toolbar-on', True)
|
||||
register('interface.url-height', 150)
|
||||
register('interface.url-width', 600)
|
||||
register('interface.view', True)
|
||||
register('interface.surname-box-height', 150)
|
||||
register('interface.treemodel-cache-size', 1000)
|
||||
@@ -295,6 +230,7 @@ register('paths.quick-backup-directory', USER_HOME)
|
||||
register('paths.quick-backup-filename',
|
||||
"%(filename)s_%(year)d-%(month)02d-%(day)02d.%(extension)s")
|
||||
|
||||
register('preferences.quick-backup-include-mode', False)
|
||||
register('preferences.date-format', 0)
|
||||
register('preferences.calendar-format-report', 0)
|
||||
register('preferences.cprefix', 'C%04d')
|
||||
@@ -364,6 +300,9 @@ register('researcher.researcher-state', '')
|
||||
register('plugin.hiddenplugins', [])
|
||||
register('plugin.addonplugins', [])
|
||||
|
||||
if __debug__: # enable a simple CLI test to see if the datestrings exist
|
||||
register('test.january', _("localized lexeme inflections||January"))
|
||||
|
||||
#---------------------------------------------------------------
|
||||
#
|
||||
# Upgrade Conversions go here.
|
||||
|
||||
+8
-10
@@ -41,9 +41,9 @@ import uuid
|
||||
#-------------------------------------------------------------------------
|
||||
from .git_revision import get_git_revision
|
||||
from .constfunc import get_env_var
|
||||
from gramps.version import VERSION, VERSION_TUPLE, major_version
|
||||
from gramps.gen.utils.resourcepath import ResourcePath
|
||||
from gramps.gen.utils.grampslocale import GrampsLocale
|
||||
from ..version import VERSION, VERSION_TUPLE, major_version
|
||||
from .utils.resourcepath import ResourcePath
|
||||
from .utils.grampslocale import GrampsLocale
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -134,11 +134,10 @@ USER_DIRLIST = (USER_HOME, HOME_DIR, VERSION_DIR, ENV_DIR, TEMP_DIR, THUMB_DIR,
|
||||
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
|
||||
|
||||
sys.path.insert(0, ROOT_DIR)
|
||||
git_revision = get_git_revision(ROOT_DIR)
|
||||
git_revision = get_git_revision(ROOT_DIR).replace('\n', '')
|
||||
if sys.platform == 'win32' and git_revision == "":
|
||||
git_revision = get_git_revision(os.path.split(ROOT_DIR)[1])
|
||||
VERSION += git_revision
|
||||
#VERSION += "-1"
|
||||
#VERSION += git_revision
|
||||
|
||||
#
|
||||
# Glade files
|
||||
@@ -217,7 +216,7 @@ GTK_GETTEXT_DOMAIN = 'gtk30'
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
COPYRIGHT_MSG = "© 2001-2006 Donald N. Allingham\n" \
|
||||
"© 2007-2016 The Gramps Developers"
|
||||
"© 2007-2017 The Gramps Developers"
|
||||
COMMENTS = _("Gramps\n (Genealogical Research and Analysis "
|
||||
"Management Programming System)\n"
|
||||
"is a personal genealogy program.")
|
||||
@@ -253,6 +252,7 @@ NO_GIVEN = "(%s)" % _("given-name|none")
|
||||
ARABIC_COMMA = "،"
|
||||
ARABIC_SEMICOLON = "؛"
|
||||
DOCGEN_OPTIONS = 'Docgen Options'
|
||||
COLON = _(':') # translators: needed for French, ignore otherwise
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -265,7 +265,6 @@ LONGOPTS = [
|
||||
"class=",
|
||||
"config=",
|
||||
"debug=",
|
||||
"databases",
|
||||
"display=",
|
||||
"disable-sound",
|
||||
"disable-crash-dialog",
|
||||
@@ -300,12 +299,11 @@ LONGOPTS = [
|
||||
"remove=",
|
||||
"usage",
|
||||
"version",
|
||||
"qml",
|
||||
"yes",
|
||||
"quiet",
|
||||
]
|
||||
|
||||
SHORTOPTS = "O:C:i:e:f:a:p:d:c:r:blLthuv?syq"
|
||||
SHORTOPTS = "O:C:i:e:f:a:p:d:c:r:lLthuv?syq"
|
||||
|
||||
GRAMPS_UUID = uuid.UUID('516cd010-5a41-470f-99f8-eb22f1098ad6')
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2007 Donald N. Allingham
|
||||
# Copyright (C) 2017 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
|
||||
@@ -29,11 +30,16 @@ Class handling language-specific selection for date parser and displayer.
|
||||
#-------------------------------------------------------------------------
|
||||
import logging
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
# import prerequisites for localized handlers
|
||||
from ._datehandler import (LANG, LANG_SHORT, LANG_TO_PARSER, LANG_TO_DISPLAY,
|
||||
register_datehandler)
|
||||
locale_tformat, main_locale)
|
||||
from . import _datestrings
|
||||
|
||||
# Import all the localized handlers
|
||||
@@ -69,12 +75,13 @@ from . import _date_zh_TW
|
||||
# Initialize global parser
|
||||
try:
|
||||
if LANG in LANG_TO_PARSER:
|
||||
parser = LANG_TO_PARSER[LANG]()
|
||||
parser = LANG_TO_PARSER[LANG](plocale=glocale)
|
||||
else:
|
||||
parser = LANG_TO_PARSER[LANG_SHORT]()
|
||||
parser = LANG_TO_PARSER[LANG_SHORT](plocale=glocale)
|
||||
except:
|
||||
logging.warning(_("Date parser for '%s' not available, using default") % LANG)
|
||||
parser = LANG_TO_PARSER["C"]()
|
||||
logging.warning(
|
||||
_("Date parser for '%s' not available, using default") % LANG)
|
||||
parser = LANG_TO_PARSER["C"](plocale=glocale)
|
||||
|
||||
# Initialize global displayer
|
||||
try:
|
||||
@@ -85,26 +92,32 @@ except:
|
||||
|
||||
try:
|
||||
if LANG in LANG_TO_DISPLAY:
|
||||
displayer = LANG_TO_DISPLAY[LANG](val)
|
||||
displayer = LANG_TO_DISPLAY[LANG](val, blocale=glocale)
|
||||
else:
|
||||
displayer = LANG_TO_DISPLAY[LANG_SHORT](val)
|
||||
displayer = LANG_TO_DISPLAY[LANG_SHORT](val, blocale=glocale)
|
||||
except:
|
||||
logging.warning(_("Date displayer for '%s' not available, using default") % LANG)
|
||||
displayer = LANG_TO_DISPLAY["C"](val)
|
||||
logging.warning(
|
||||
_("Date displayer for '%s' not available, using default") % LANG)
|
||||
displayer = LANG_TO_DISPLAY["C"](val, blocale=glocale)
|
||||
|
||||
|
||||
# Import utility functions
|
||||
from ._dateutils import *
|
||||
from ._grampslocale import (codeset, tformat)
|
||||
|
||||
# set GRAMPS_RESOURCES then: python3 -m gramps.gen.datehandler.__init__
|
||||
if __name__ == "__main__":
|
||||
from ._datedisplay import DateDisplay
|
||||
m = 0
|
||||
for l,d in LANG_TO_DISPLAY.items():
|
||||
if len(l) != 2:
|
||||
date_handlers = sorted(LANG_TO_DISPLAY.items())
|
||||
for l,d in date_handlers:
|
||||
if len(l) != 2 and l not in ('zh_TW'): # Chinese has two date_handlers
|
||||
continue
|
||||
if l.upper() == l and (l.lower(),d) in date_handlers:
|
||||
continue # don't need to see the upper-case variant also
|
||||
m = max(m, len(d.formats))
|
||||
print("{}: {} {} own dg: {}".format(
|
||||
print("{}: {} {} own-f:{} own-dc:{} own-dg:{}".format(
|
||||
l, len(d.formats), d.formats,
|
||||
d.formats != DateDisplay.formats,
|
||||
d._display_calendar != DateDisplay._display_calendar,
|
||||
d._display_gregorian != DateDisplay._display_gregorian))
|
||||
print("MAX: ", m)
|
||||
|
||||
@@ -39,6 +39,7 @@ from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
from ..const import ARABIC_COMMA
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -202,10 +203,32 @@ class DateDisplayAR(DateDisplay):
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%s%s%s%s" % (qual_str, self._mod_str[mod], text, scal)
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
"""
|
||||
numerical -- for Arabic dates
|
||||
"""
|
||||
value = DateDisplay.dd_dformat01(self, date_val)
|
||||
return value.replace(',', ARABIC_COMMA)
|
||||
|
||||
def dd_dformat02(self, date_val, inflect, long_months):
|
||||
"""
|
||||
month_name day, year -- for Arabic dates
|
||||
"""
|
||||
value = DateDisplay.dd_dformat02(self, date_val, inflect, long_months)
|
||||
return value.replace(',', ARABIC_COMMA)
|
||||
|
||||
def dd_dformat03(self, date_val, inflect, short_months):
|
||||
"""
|
||||
month_abbreviation day, year -- for Arabic dates
|
||||
"""
|
||||
value = DateDisplay.dd_dformat03(self, date_val, inflect, short_months)
|
||||
return value.replace(',', ARABIC_COMMA)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('ar_AR', 'ar', 'Arabic', 'arabic'),
|
||||
register_datehandler(
|
||||
('ar_EG', 'ar_AR', 'ar', 'Arabic', 'arabic', ('%d %b, %Y',)),
|
||||
DateParserAR, DateDisplayAR)
|
||||
|
||||
@@ -305,10 +305,31 @@ class DateDisplayBG(DateDisplay):
|
||||
scal = self.format_extras(cal, newyear)
|
||||
return "%s%s%s%s" % (qual_str, self._mod_str[mod], text, scal)
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
"""
|
||||
numerical -- for Bulgarian dates
|
||||
"""
|
||||
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.dhformat.replace('%m', str(date_val[1]))
|
||||
# some locales have %b for the month, e.g. ar_EG, is_IS, nb_NO
|
||||
value = value.replace('%b', str(date_val[1]))
|
||||
if date_val[0] == 0: # ignore the zero day and its delimiter
|
||||
i_day = value.find('%e') # Bulgarian uses %e and not %d
|
||||
value = value.replace(value[i_day:i_day+3], '')
|
||||
value = value.replace('%e', str(date_val[0]))
|
||||
value = value.replace('%Y', str(abs(date_val[2])))
|
||||
return value.replace('-', '/')
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('bg_BG', 'bg', 'bulgarian', 'Bulgarian'),
|
||||
register_datehandler(
|
||||
('bg_BG', 'bg', 'bulgarian', 'Bulgarian', ('%e.%m.%Y',)),
|
||||
DateParserBG, DateDisplayBG)
|
||||
|
||||
@@ -193,4 +193,7 @@ class DateDisplayCA(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('ca_ES', 'ca', 'català', 'Catalan', 'ca_FR', 'ca_AD', 'ca_IT'), DateParserCA, DateDisplayCA)
|
||||
register_datehandler(
|
||||
('ca_ES', 'ca', 'català', 'Catalan',
|
||||
'ca_FR', 'ca_AD', 'ca_IT', ('%d/%m/%Y',)),
|
||||
DateParserCA, DateDisplayCA)
|
||||
|
||||
@@ -171,8 +171,10 @@ class DateParserCZ(DateParser):
|
||||
'vyp.' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
# bug 9739 _grampslocale.py gets '%-d.%-m.%Y' and makes it be '%/d.%/m.%Y'
|
||||
fmt = DateParser.fmt.replace('/', '') # so counteract that
|
||||
def dhformat_changed(self):
|
||||
""" Allow overriding so a subclass can modify it """
|
||||
# bug 9739 grampslocale.py gets '%-d.%-m.%Y' -- makes it be '%/d.%/m.%Y'
|
||||
self.dhformat = self.dhformat.replace('/', '') # so counteract that
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
@@ -215,21 +217,24 @@ class DateDisplayCZ(DateDisplay):
|
||||
bce = ["před naším letopočtem", "před Kristem",
|
||||
"př. n. l.", "př. Kr."] + DateParser.bce
|
||||
|
||||
formats = (
|
||||
"ISO (rrrr-mm-dd)",
|
||||
"numerický",
|
||||
"měsíc den, Rok",
|
||||
"měs den, Rok",
|
||||
"den. měsíc rok",
|
||||
"den. měs rok"
|
||||
)
|
||||
# this must agree with DateDisplayEn's "formats" definition
|
||||
# (since no locale-specific _display_gregorian exists, here)
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
# bug 9537 _grampslocale.py gets '%-d.%-m.%Y' and makes it be '%/d.%/m.%Y'
|
||||
_tformat = DateDisplay._tformat.replace('/', '') # so counteract that
|
||||
def formats_changed(self):
|
||||
""" Allow overriding so a subclass can modify """
|
||||
|
||||
# bug 9537 grampslocale.py gets '%-d.%-m.%Y' -- makes it be '%/d.%/m.%Y'
|
||||
self.dhformat = self.dhformat.replace('/', '') # so counteract that
|
||||
|
||||
self.formats = (
|
||||
"ISO (rrrr-mm-dd)",
|
||||
"numerický",
|
||||
"měsíc den, Rok",
|
||||
"měs den, Rok",
|
||||
"den. měsíc rok",
|
||||
"den. měs rok"
|
||||
)
|
||||
# this must agree with DateDisplayEn's "formats" definition
|
||||
# (since no locale-specific _display_gregorian exists, here)
|
||||
|
||||
def orig_display(self, date): # unused: only here for historical reference
|
||||
"""
|
||||
@@ -278,4 +283,6 @@ class DateDisplayCZ(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(("cs", "CS", "cs_CZ", "Czech"), DateParserCZ, DateDisplayCZ)
|
||||
register_datehandler(
|
||||
("cs_CZ", "cs", "CS", "Czech", ('%-d.%-m.%Y',)),
|
||||
DateParserCZ, DateDisplayCZ)
|
||||
|
||||
@@ -176,4 +176,6 @@ class DateDisplayDa(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('da_DK', 'da', 'dansk', 'Danish'), DateParserDa, DateDisplayDa)
|
||||
register_datehandler(
|
||||
('da_DK', 'da', 'dansk', 'Danish', ('%d-%m-%Y',)),
|
||||
DateParserDa, DateDisplayDa)
|
||||
|
||||
@@ -237,7 +237,7 @@ class DateDisplayDE(DateDisplay):
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
value = str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = self.dhformat.replace('%m', str(date_val[1]))
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%Y', str(date_val[2]))
|
||||
elif self.format == 2:
|
||||
@@ -321,6 +321,7 @@ class DateDisplayDE(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('de_DE', 'german', 'German', 'de_AT', 'de_CH',
|
||||
'de_LI', 'de_LU', 'de_BE', 'de'),
|
||||
DateParserDE, DateDisplayDE)
|
||||
register_datehandler(
|
||||
('de_DE', 'german', 'German', 'de_AT', 'de_CH',
|
||||
'de_LI', 'de_LU', 'de_BE', 'de', ('%d.%m.%Y',)),
|
||||
DateParserDE, DateDisplayDE)
|
||||
|
||||
@@ -242,5 +242,6 @@ class DateDisplayEL(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('el_GR', 'el_CY', 'el', 'Greek', 'greek'),
|
||||
register_datehandler(
|
||||
('el_GR', 'el_CY', 'el', 'Greek', 'greek', ('%d/%m/%Y',)),
|
||||
DateParserEL, DateDisplayEL)
|
||||
|
||||
@@ -177,4 +177,6 @@ class DateDisplayES(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('es_ES', 'es', 'spanish', 'Spanish'), DateParserES, DateDisplayES)
|
||||
register_datehandler(
|
||||
('es_ES', 'es', 'spanish', 'Spanish', ('%d/%m/%Y',)),
|
||||
DateParserES, DateDisplayES)
|
||||
|
||||
@@ -178,5 +178,6 @@ class DateDisplayFI(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('fi_FI', 'fi', 'finnish', 'Finnish'),
|
||||
DateParserFI, DateDisplayFI)
|
||||
register_datehandler(
|
||||
('fi_FI', 'fi', 'finnish', 'Finnish', ('%d.%m.%Y',)),
|
||||
DateParserFI, DateDisplayFI)
|
||||
|
||||
@@ -42,7 +42,6 @@ from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
from . import _grampslocale
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -232,22 +231,24 @@ class DateDisplayFR(DateDisplay):
|
||||
|
||||
_bce_str = "%s avant le calendrier"
|
||||
|
||||
# Replace the previous "Numérique" by a string which
|
||||
# do have an explicit meaning: "System default (format)"
|
||||
_locale_tformat = _grampslocale.tformat
|
||||
_locale_tformat = _locale_tformat.replace('%d', "J")
|
||||
_locale_tformat = _locale_tformat.replace('%m', "M")
|
||||
_locale_tformat = _locale_tformat.replace('%Y', "A")
|
||||
def formats_changed(self):
|
||||
""" Allow overriding so a subclass can modify """
|
||||
|
||||
formats = ("AAAA-MM-JJ (ISO)", # 0
|
||||
"Défaut système (" + _locale_tformat + ")", # 1
|
||||
# Replace the previous "Numérique" by a string which
|
||||
# do have an explicit meaning: "System default (format)"
|
||||
example = self.dhformat
|
||||
example = example.replace('%d', "J")
|
||||
example = example.replace('%m', "M")
|
||||
example = example.replace('%Y', "A")
|
||||
|
||||
self.formats = ("AAAA-MM-JJ (ISO)", # 0
|
||||
"Défaut système (" + example + ")", # 1
|
||||
"Jour Mois Année", # 2
|
||||
"Jour MOI Année", # 3
|
||||
"Jour. Mois Année", # 4
|
||||
"Jour. MOI Année", # 5
|
||||
"Mois Jour, Année", # 6
|
||||
"MOI Jour, Année",) # 7
|
||||
|
||||
# this definition must agree with its "_display_gregorian" method
|
||||
|
||||
def _display_gregorian(self, date_val, **kwargs):
|
||||
@@ -263,7 +264,7 @@ class DateDisplayFR(DateDisplay):
|
||||
return self.display_iso(date_val)
|
||||
elif self.format == 1:
|
||||
|
||||
# ISO
|
||||
# numerical
|
||||
|
||||
if date_val[2] < 0 or date_val[3]:
|
||||
return self.display_iso(date_val)
|
||||
@@ -271,7 +272,7 @@ class DateDisplayFR(DateDisplay):
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
value = str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = self.dhformat.replace('%m', str(date_val[1]))
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
|
||||
# base_display :
|
||||
@@ -380,5 +381,7 @@ class DateDisplayFR(DateDisplay):
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('fr_FR', 'fr', 'french', 'French', 'fr_CA',
|
||||
'fr_BE', 'fr_CH'), DateParserFR, DateDisplayFR)
|
||||
register_datehandler(
|
||||
('fr_FR', 'fr', 'french', 'French', 'fr_CA',
|
||||
'fr_BE', 'fr_CH', ('%d/%m/%Y',)),
|
||||
DateParserFR, DateDisplayFR)
|
||||
|
||||
@@ -110,5 +110,6 @@ class DateDisplayHR(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('hr', 'HR', 'croatian', 'Croatian', 'hrvatski', 'hr_HR'),
|
||||
DateParserHR, DateDisplayHR)
|
||||
register_datehandler(
|
||||
('hr_HR', 'hr', 'HR', 'croatian', 'Croatian', 'hrvatski', ('%d.%m.%Y',)),
|
||||
DateParserHR, DateDisplayHR)
|
||||
|
||||
@@ -33,7 +33,7 @@ import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..lib.date import Date
|
||||
@@ -364,5 +364,6 @@ class DateDisplayHU(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('hu_HU', 'hu', 'hungarian', 'Hungarian', 'magyar'),
|
||||
DateParserHU, DateDisplayHU)
|
||||
register_datehandler(
|
||||
('hu_HU', 'hu', 'hungarian', 'Hungarian', 'magyar', ('%Y-%m-%d',)),
|
||||
DateParserHU, DateDisplayHU)
|
||||
|
||||
@@ -30,10 +30,11 @@ Icelandic-specific classes for parsing and displaying dates.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import re
|
||||
import datetime
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..lib.date import Date
|
||||
@@ -88,8 +89,19 @@ class DateParserIs(DateParser):
|
||||
'reiknað' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
def dhformat_changed(self):
|
||||
self._dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*%(\S).*")
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
|
||||
# match 'day. month year' format
|
||||
self._text2 = re.compile('(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
# match 'short-day day.month year' format
|
||||
short_day_str = '(' + '|'.join(self._ds.short_days[1:]) + ')'
|
||||
self._numeric = re.compile("%s\s*((\d+)[\.]\s*)?((\d+)\s*)?(\d+)\s*$"
|
||||
% short_day_str, re.IGNORECASE)
|
||||
self._span = re.compile("(frá)?\s*(?P<start>.+)\s*(til|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(milli)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)",
|
||||
@@ -172,9 +184,39 @@ class DateDisplayIs(DateDisplay):
|
||||
return "%s%s%s%s" % (qual_str, self._mod_str[mod],
|
||||
text, scal)
|
||||
|
||||
def _get_weekday(self, date_val):
|
||||
if date_val[0] == 0 or date_val[1] == 0: # no day or no month or both
|
||||
return ''
|
||||
w_day = datetime.date(date_val[2], date_val[1], date_val[0]) # y, m, d
|
||||
return self.short_days[((w_day.weekday() + 1) % 7) + 1]
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
"""
|
||||
numerical -- for Icelandic dates
|
||||
"""
|
||||
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.dhformat.replace('%m', str(date_val[1]))
|
||||
# some locales have %b for the month, e.g. ar_EG, is_IS, nb_NO
|
||||
value = value.replace('%b', str(date_val[1]))
|
||||
# some locales have %a for the abbreviated day, e.g. is_IS
|
||||
value = value.replace('%a', self._get_weekday(date_val))
|
||||
if date_val[0] == 0: # ignore the zero day and its delimiter
|
||||
i_day = value.find('%e') # Icelandic uses %e and not %d
|
||||
value = value.replace(value[i_day:i_day+3], '')
|
||||
value = value.replace('%e', str(date_val[0]))
|
||||
value = value.replace('%Y', str(abs(date_val[2])))
|
||||
return value.replace('-', '/')
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('is_IS', 'is', 'íslenskt', 'Icelandic'), DateParserIs, DateDisplayIs)
|
||||
register_datehandler(
|
||||
('is_IS', 'is', 'íslenskt', 'Icelandic', ('%a %e.%b %Y',)),
|
||||
DateParserIs, DateDisplayIs)
|
||||
|
||||
@@ -189,5 +189,6 @@ class DateDisplayIT(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('it_IT', 'it', 'italian', 'Italian', 'it_CH'),
|
||||
register_datehandler(
|
||||
('it_IT', 'it', 'italian', 'Italian', 'it_CH', ('%d/%m/%Y',)),
|
||||
DateParserIT, DateDisplayIT)
|
||||
|
||||
@@ -42,7 +42,6 @@ from ..lib.date import Date
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay
|
||||
from ._datehandler import register_datehandler
|
||||
from . import _grampslocale
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -185,15 +184,18 @@ 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")
|
||||
def formats_changed(self):
|
||||
""" Allow overriding so a subclass can modify """
|
||||
|
||||
# This definition must agree with its "_display_gregorian" method
|
||||
formats = ("YYYY-MM-DD (ISO)", # 0
|
||||
"システムデフォールト (" + _locale_tformat + ")", # 1
|
||||
# Specify what is actually the "System Default".
|
||||
example = self.dhformat
|
||||
example = example.replace('%d', "31")
|
||||
example = example.replace('%m', "12")
|
||||
example = example.replace('%Y', "1999")
|
||||
|
||||
# This definition must agree with its "_display_gregorian" method
|
||||
self. formats = ("YYYY-MM-DD (ISO)", # 0
|
||||
"システムデフォールト (" + example + ")", # 1
|
||||
"1999年12月31日", # 2
|
||||
"1999年十二月31日", # 3
|
||||
)
|
||||
@@ -216,7 +218,7 @@ class DateDisplayJA(DateDisplay):
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
value = str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = self.dhformat.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], '')
|
||||
@@ -265,5 +267,6 @@ class DateDisplayJA(DateDisplay):
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('ja_JP', 'ja', 'japanese', 'Japanese'),
|
||||
DateParserJA, DateDisplayJA)
|
||||
register_datehandler(
|
||||
('ja_JP', 'ja', 'japanese', 'Japanese', ('%Y年%m月%d日',)),
|
||||
DateParserJA, DateDisplayJA)
|
||||
|
||||
@@ -182,7 +182,8 @@ class DateDisplayLT(DateDisplay):
|
||||
_qual_str = ("", "apytikriai ", "apskaičiuota ")
|
||||
|
||||
formats = (
|
||||
"mmmm-MM-DD (ISO)", "mmmm m. mėnesio diena d.", "Mėn diena, metai")
|
||||
"mmmm-MM-DD (ISO)", "mmmm.MM.DD",
|
||||
"mmmm m. mėnesio diena d.", "Mėn diena, metai")
|
||||
# this definition must agree with its "_display_gregorian" method
|
||||
|
||||
def _display_gregorian(self, date_val):
|
||||
@@ -195,6 +196,9 @@ class DateDisplayLT(DateDisplay):
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
elif self.format == 1:
|
||||
# numerical
|
||||
return self.dd_dformat01(date_val)
|
||||
elif self.format == 2:
|
||||
# mmmm m. mėnesio diena d. (year m. month_name day d.)
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
@@ -205,7 +209,7 @@ class DateDisplayLT(DateDisplay):
|
||||
value = "%s m. %s %d d." % (year,
|
||||
self.long_months[date_val[1]],
|
||||
date_val[0])
|
||||
elif self.format == 2:
|
||||
elif self.format == 3:
|
||||
# month_abbreviation day, year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
@@ -259,4 +263,6 @@ class DateDisplayLT(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('lt_LT', 'lt', 'lithuanian', 'Lithuanian'), DateParserLT, DateDisplayLT)
|
||||
register_datehandler(
|
||||
('lt_LT', 'lt', 'lithuanian', 'Lithuanian', ('%Y.%m.%d',)),
|
||||
DateParserLT, DateDisplayLT)
|
||||
|
||||
@@ -89,6 +89,8 @@ class DateParserNb(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
# match day. month year
|
||||
self._numeric = re.compile("((\d+)[\.])?\s*((\d+))?\s*(\d+)$")
|
||||
self._span = re.compile("(fra)?\s*(?P<start>.+)\s*(til|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(mellom)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)",
|
||||
@@ -176,4 +178,6 @@ class DateDisplayNb(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('nb_NO', 'nb', 'nn_NO', 'nn', 'norsk', 'Norwegian'), DateParserNb, DateDisplayNb)
|
||||
register_datehandler(
|
||||
('nb_NO', 'nb', 'nn_NO', 'nn', 'norsk', 'Norwegian', ('%d. %b %Y',)),
|
||||
DateParserNb, DateDisplayNb)
|
||||
|
||||
@@ -180,7 +180,7 @@ class DateDisplayNL(DateDisplay):
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
value = str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = self.dhformat.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('-', '/')
|
||||
@@ -268,5 +268,6 @@ class DateDisplayNL(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('nl_NL', 'dutch', 'Dutch', 'nl_BE', 'nl'),
|
||||
DateParserNL, DateDisplayNL)
|
||||
register_datehandler(
|
||||
('nl_NL', 'dutch', 'Dutch', 'nl_BE', 'nl', ('%d-%m-%Y',)),
|
||||
DateParserNL, DateDisplayNL)
|
||||
|
||||
@@ -195,7 +195,7 @@ class DateDisplayPL(DateDisplay):
|
||||
|
||||
formats = (
|
||||
"RRRR-MM-DD (ISO)", "Numeryczny", "Miesiąc Dzień, Rok",
|
||||
"Dzień.Miesiąc.Rok", "Dzień Miesiąc Rok", "Dzień MieRzym Rok"
|
||||
"Miesiąc.Dzień.Rok", "Dzień Miesiąc Rok", "Dzień MieRzym Rok"
|
||||
)
|
||||
# this definition must agree with its "_display_gregorian" method
|
||||
|
||||
@@ -224,15 +224,15 @@ class DateDisplayPL(DateDisplay):
|
||||
if self.format == 0:
|
||||
return self.display_iso(date_val)
|
||||
elif self.format == 1:
|
||||
# month_number.day.year
|
||||
# day.month_number.year
|
||||
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[0]))
|
||||
value = value.replace('%d', str(date_val[1]))
|
||||
value = self.dhformat.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%m', str(date_val[1]))
|
||||
value = value.replace('%Y', str(date_val[2]))
|
||||
elif self.format == 2:
|
||||
# month_name day, year
|
||||
@@ -245,14 +245,14 @@ class DateDisplayPL(DateDisplay):
|
||||
value = "%s %d, %s" % (self.long_months[date_val[1]],
|
||||
date_val[0], year)
|
||||
elif self.format == 3:
|
||||
# day. month_number. year
|
||||
# month_number. day. year
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
value = year
|
||||
else:
|
||||
value = "%d.%s" % (date_val[1], year)
|
||||
else:
|
||||
value = "%d.%d.%s" % (date_val[0], date_val[1], year)
|
||||
value = "%d.%d.%s" % (date_val[1], date_val[0], year)
|
||||
elif self.format == 4:
|
||||
# day month_name year
|
||||
if date_val[0] == 0:
|
||||
@@ -317,5 +317,6 @@ class DateDisplayPL(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('pl_PL','polish','Polish_Poland','pl'),
|
||||
DateParserPL, DateDisplayPL)
|
||||
register_datehandler(
|
||||
('pl_PL', 'polish', 'Polish_Poland', 'pl', ('%d.%m.%Y',)),
|
||||
DateParserPL, DateDisplayPL)
|
||||
|
||||
@@ -180,4 +180,7 @@ class DateDisplayPT(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('pt', 'pt_PT', 'pt_PT.UTF-8', 'pt_BR', 'pt_BR.UTF-8', 'pt', 'portuguese', 'Portuguese'), DateParserPT, DateDisplayPT)
|
||||
register_datehandler(
|
||||
('pt_PT', 'pt_PT.UTF-8', 'pt_BR', 'pt_BR.UTF-8',
|
||||
'pt' 'portuguese', 'Portuguese', ('%d-%m-%Y',)),
|
||||
DateParserPT, DateDisplayPT)
|
||||
|
||||
@@ -162,4 +162,6 @@ class DateDisplayRU(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('ru_RU', 'ru', 'russian', 'Russian'), DateParserRU, DateDisplayRU)
|
||||
register_datehandler(
|
||||
('ru_RU', 'ru', 'russian', 'Russian', ('%d.%m.%Y',)),
|
||||
DateParserRU, DateDisplayRU)
|
||||
|
||||
@@ -165,4 +165,6 @@ class DateDisplaySK(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('sk_SK', 'sk', 'SK', 'Slovak'), DateParserSK, DateDisplaySK)
|
||||
register_datehandler(
|
||||
('sk_SK', 'sk', 'SK', 'Slovak', ('%d.%m.%Y',)),
|
||||
DateParserSK, DateDisplaySK)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"""
|
||||
Slovenian-specific classes for parsing and displaying dates - new framework.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
@@ -66,6 +66,7 @@ class DateParserSL(DateParser):
|
||||
'ca.' : Date.MOD_ABOUT,
|
||||
'približno' : Date.MOD_ABOUT,
|
||||
'pribl.' : Date.MOD_ABOUT,
|
||||
'~' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
@@ -120,6 +121,7 @@ class DateDisplaySL(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(("sl", "SL", "sl_SI", "slovenščina", "slovenian", "Slovenian",
|
||||
"sl_SI.UTF8", "sl_SI.UTF-8", "sl_SI.utf-8", "sl_SI.utf8"),
|
||||
DateParserSL, DateDisplaySL)
|
||||
register_datehandler(
|
||||
("sl_SI", "sl", "SL",
|
||||
"slovenščina", "slovenian", "Slovenian", ('%d. %m. %Y',)),
|
||||
DateParserSL, DateDisplaySL)
|
||||
|
||||
@@ -256,7 +256,7 @@ class DateDisplaySR_Base(DateDisplay):
|
||||
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 = self.dhformat.replace('%m', str(date_val[1]))
|
||||
value = value.replace('%d', str(date_val[0]))
|
||||
value = value.replace('%Y', str(abs(date_val[2])))
|
||||
#some locale magic already provides the right separator
|
||||
@@ -423,9 +423,11 @@ class DateDisplaySR_Cyrillic(DateDisplaySR_Base):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('srpski', 'Srpski',
|
||||
'sr_Latn', 'sr_Latn_RS', 'sr_RS@latin'),
|
||||
DateParserSR, DateDisplaySR_Latin)
|
||||
register_datehandler(('sr', 'српски', 'Српски', 'serbian',
|
||||
'sr_RS', 'sr_Cyrl', 'sr_Cyrl_RS'),
|
||||
DateParserSR, DateDisplaySR_Cyrillic)
|
||||
register_datehandler(
|
||||
('sr_RS.utf8@latin', 'srpski', 'Srpski',
|
||||
'sr_Latn', 'sr_Latn_RS', 'sr_RS@latin', ('%d.%m.%Y.',)),
|
||||
DateParserSR, DateDisplaySR_Latin)
|
||||
register_datehandler(
|
||||
('sr_RS', 'sr', 'sr_Cyrl', 'sr_Cyrl_RS',
|
||||
'српски', 'Српски', 'serbian', ('%d.%m.%Y.',)),
|
||||
DateParserSR, DateDisplaySR_Cyrillic)
|
||||
|
||||
@@ -181,4 +181,6 @@ class DateDisplaySv(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('sv_SE', 'sv_SE.UTF-8', 'sv', 'Swedish'), DateParserSv, DateDisplaySv)
|
||||
register_datehandler(
|
||||
('sv_SE', 'sv_SE.UTF-8', 'sv', 'Swedish', ('%Y-%m-%d',)),
|
||||
DateParserSv, DateDisplaySv)
|
||||
|
||||
@@ -138,5 +138,6 @@ class DateDisplayUK(DateDisplay):
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(('uk_UA', 'uk', 'ukrainian', 'Ukrainian'),
|
||||
DateParserUK, DateDisplayUK)
|
||||
register_datehandler(
|
||||
('uk_UA', 'uk', 'ukrainian', 'Ukrainian', ('%d.%m.%Y',)),
|
||||
DateParserUK, DateDisplayUK)
|
||||
|
||||
@@ -178,5 +178,6 @@ class DateDisplayZH_CN(DateDisplay):
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('zh_CN', 'zh_SG', 'zh', 'chinese', 'Chinese'),
|
||||
DateParserZH_CN, DateDisplayZH_CN)
|
||||
register_datehandler(
|
||||
('zh_CN', 'zh_SG', 'zh', 'chinese', 'Chinese', ('%Y年%m月%d日',)),
|
||||
DateParserZH_CN, DateDisplayZH_CN)
|
||||
|
||||
@@ -178,5 +178,6 @@ class DateDisplayZH_TW(DateDisplay):
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
register_datehandler(('zh_TW', 'zh_HK'),
|
||||
DateParserZH_TW, DateDisplayZH_TW)
|
||||
register_datehandler(
|
||||
('zh_TW', 'zh_HK', ('西元%Y年%m月%d日',)),
|
||||
DateParserZH_TW, DateDisplayZH_TW)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2013 Vassilii Khachaturov
|
||||
# Copyright (C) 2014-2015 Paul Franklin
|
||||
# Copyright (C) 2014-2017 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
|
||||
@@ -26,6 +26,13 @@ U.S English date display class. Should serve as the base class for all
|
||||
localized tasks.
|
||||
"""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import datetime
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# set up logging
|
||||
@@ -40,10 +47,14 @@ log = logging.getLogger(".DateDisplay")
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..lib.date import Date
|
||||
from . import _grampslocale
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
from ..utils.grampslocale import GrampsLocale
|
||||
from ._datestrings import DateStrings
|
||||
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# DateDisplay
|
||||
@@ -53,33 +64,29 @@ class DateDisplay:
|
||||
"""
|
||||
Base date display class.
|
||||
"""
|
||||
_locale = GrampsLocale(lang='en_US', languages='en')
|
||||
|
||||
_tformat = _grampslocale.tformat
|
||||
|
||||
_ = _grampslocale.glocale.translation.sgettext
|
||||
formats = (
|
||||
# format 0 - must always be ISO
|
||||
_("YYYY-MM-DD (ISO)"),
|
||||
_T_("YYYY-MM-DD (ISO)"),
|
||||
|
||||
# format # 1 - must always be locale-preferred numerical format
|
||||
# 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 as "Numerical", "System preferred", or similar.
|
||||
_("date format|Numerical"),
|
||||
_T_("date format|Numerical"),
|
||||
|
||||
# Full month name, day, year
|
||||
_("Month Day, Year"),
|
||||
_T_("Month Day, Year"),
|
||||
|
||||
# Abbreviated month name, day, year
|
||||
_("MON DAY, YEAR"),
|
||||
_T_("MON DAY, YEAR"),
|
||||
|
||||
# Day, full month name, year
|
||||
_("Day Month Year"),
|
||||
_T_("Day Month Year"),
|
||||
|
||||
# Day, abbreviated month name, year
|
||||
_("DAY MON YEAR")
|
||||
_T_("DAY MON YEAR")
|
||||
)
|
||||
"""
|
||||
.. note:: Will be overridden if a locale-specific date displayer exists.
|
||||
@@ -90,14 +97,27 @@ class DateDisplay:
|
||||
This ``formats`` must agree with
|
||||
:meth:`~_display_calendar`/:meth:`~_display_gregorian`.
|
||||
"""
|
||||
del _
|
||||
|
||||
newyear = ("", "Mar1", "Mar25", "Sep1")
|
||||
|
||||
_bce_str = "%s B.C.E."
|
||||
# this will be overridden if a locale-specific date displayer exists
|
||||
|
||||
def __init__(self, format=None):
|
||||
def __init__(self, format=None, blocale=None):
|
||||
"""
|
||||
:param blocale: allow translation of dates and date formats
|
||||
:type blocale: a :class:`.GrampsLocale` instance
|
||||
"""
|
||||
from ._datehandler import locale_tformat # circular import if above
|
||||
if blocale:
|
||||
self._locale = blocale
|
||||
elif not hasattr(self, '_locale'):
|
||||
self._locale = glocale
|
||||
if self._locale.calendar in locale_tformat:
|
||||
self.dhformat = locale_tformat[self._locale.calendar] # date format
|
||||
else:
|
||||
self.dhformat = locale_tformat['en_GB'] # something is required
|
||||
self.formats_changed() # allow overriding so a subclass can modify
|
||||
self._ds = DateStrings(self._locale)
|
||||
calendar = list(self._ds.calendar)
|
||||
calendar[Date.CAL_GREGORIAN] = "" # that string only used in parsing,
|
||||
@@ -120,6 +140,7 @@ class DateDisplay:
|
||||
self._mod_str = self._ds.modifiers
|
||||
self._qual_str = self._ds.qualifiers
|
||||
self.long_days = self._ds.long_days
|
||||
self.short_days = self._ds.short_days # Icelandic needs this
|
||||
|
||||
if format is None:
|
||||
self.format = 0
|
||||
@@ -299,6 +320,10 @@ class DateDisplay:
|
||||
: _("calculated|{short_month} {year}"),
|
||||
}
|
||||
|
||||
def formats_changed(self):
|
||||
""" Allow overriding so a subclass can modify """
|
||||
pass
|
||||
|
||||
def set_format(self, format):
|
||||
self.format = format
|
||||
|
||||
@@ -330,6 +355,9 @@ class DateDisplay:
|
||||
Disregard any format settings and use display_iso for each date.
|
||||
|
||||
(Will be overridden if a locale-specific date displayer exists.)
|
||||
|
||||
(The usage is "displayer.display(...)" (or a variant, e.g. _dd.display)
|
||||
so any subclass must have a "display" method, somehow, or use this.)
|
||||
"""
|
||||
mod = date.get_modifier()
|
||||
cal = date.get_calendar()
|
||||
@@ -538,6 +566,22 @@ class DateDisplay:
|
||||
return self.FORMATS_short_month_year[inflect].format(
|
||||
short_month = short_months[month], year = '').rstrip()
|
||||
|
||||
def _get_short_weekday(self, date_val):
|
||||
if (date_val[0] == 0 or date_val[1] == 0 # no day or no month or both
|
||||
or date_val[1] == 13 # Hebrew has 13 months
|
||||
or date_val[2] < 0): # B.C.E. date
|
||||
return ''
|
||||
w_day = datetime.date(date_val[2], date_val[1], date_val[0]) # y, m, d
|
||||
return self.short_days[((w_day.weekday() + 1) % 7) + 1]
|
||||
|
||||
def _get_long_weekday(self, date_val):
|
||||
if (date_val[0] == 0 or date_val[1] == 0 # no day or no month or both
|
||||
or date_val[1] == 13 # Hebrew has 13 months
|
||||
or date_val[2] < 0): # B.C.E. date
|
||||
return ''
|
||||
w_day = datetime.date(date_val[2], date_val[1], date_val[0]) # y, m, d
|
||||
return self.long_days[((w_day.weekday() + 1) % 7) + 1]
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
"""
|
||||
numerical
|
||||
@@ -551,7 +595,17 @@ class DateDisplay:
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
return str(date_val[2])
|
||||
else:
|
||||
value = self._tformat.replace('%m', str(date_val[1]))
|
||||
value = self.dhformat.replace('%m', str(date_val[1]))
|
||||
# some locales have %b for the month, e.g. ar_EG, is_IS, nb_NO
|
||||
# so it would be "Jan" but as it's "numeric" I'll make it "1"
|
||||
value = value.replace('%b', str(date_val[1]))
|
||||
# some locales have %B for the month, e.g. ta_IN
|
||||
# so it would be "January" but as it's "numeric" I'll make it 1
|
||||
value = value.replace('%B', str(date_val[1]))
|
||||
# some locales have %a for the abbreviated day, e.g. is_IS
|
||||
value = value.replace('%a', self._get_short_weekday(date_val))
|
||||
# some locales have %A for the long/full day, e.g. ta_IN
|
||||
value = value.replace('%A', self._get_long_weekday(date_val))
|
||||
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], '')
|
||||
@@ -715,17 +769,10 @@ class DateDisplayEn(DateDisplay):
|
||||
"""
|
||||
English language date display class.
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self, format=None):
|
||||
"""
|
||||
Create a DateDisplay class that converts a Date object to a string
|
||||
of the desired format. The format value must correspond to the format
|
||||
list value (DateDisplay.format[]).
|
||||
"""
|
||||
|
||||
DateDisplay.__init__(self, format)
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
_locale = DateDisplay._locale # normally set in register_datehandler
|
||||
class DateDisplayGB(DateDisplay):
|
||||
"""
|
||||
British-English language date display class (its format is different).
|
||||
"""
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2017 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
|
||||
@@ -43,10 +44,10 @@ log = logging.getLogger(".gen.datehandler")
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ._dateparser import DateParser
|
||||
from ._datedisplay import DateDisplay, DateDisplayEn
|
||||
from ._datedisplay import DateDisplay, DateDisplayEn, DateDisplayGB
|
||||
from ..constfunc import win
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
from gramps.gen.utils.grampslocale import GrampsLocale
|
||||
from ..utils.grampslocale import GrampsLocale
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -74,19 +75,37 @@ LANG_SHORT = str(LANG_SHORT)
|
||||
|
||||
LANG_TO_PARSER = {
|
||||
'C' : DateParser,
|
||||
'en' : DateParser,
|
||||
'English_United States' : DateParser,
|
||||
}
|
||||
|
||||
LANG_TO_DISPLAY = {
|
||||
'C' : DateDisplayEn,
|
||||
'en' : DateDisplayEn,
|
||||
'en_GB' : DateDisplayEn,
|
||||
'English_United States' : DateDisplayEn,
|
||||
'ko_KR' : DateDisplay,
|
||||
'nb_NO' : DateDisplay,
|
||||
}
|
||||
|
||||
main_locale = { } # this will be augmented by calls to register_datehandler
|
||||
|
||||
locale_tformat = {} # locale "tformat" (date format) strings
|
||||
|
||||
for no_handler in (
|
||||
('C', ('%d/%m/%Y',)),
|
||||
('eo_EO', 'eo', 'Esperanto', ('%d/%m/%Y',)), # 'eo_EO' is a placeholder
|
||||
('he_IL', 'he', 'Hebrew', ('%d/%m/%Y',)),
|
||||
('sq_AL', 'sq', 'Albanian', ('%Y/%b/%d',)),
|
||||
('ta_IN', 'ta', 'Tamil', ('%A %d %B %Y',)),
|
||||
('tr_TR', 'tr', 'Turkish', ('%d/%m/%Y',)),
|
||||
('vi_VN', 'vi', 'Vietnamese', ('%d/%m/%Y',)),
|
||||
):
|
||||
format_string = ''
|
||||
for possible_format in no_handler:
|
||||
if isinstance(possible_format, tuple):
|
||||
format_string = possible_format[0] # pre-seeded date format string
|
||||
# maintain legacy gramps transformations
|
||||
format_string = format_string.replace('%y','%Y').replace('-', '/')
|
||||
for lang_str in no_handler:
|
||||
if isinstance(lang_str, tuple): continue
|
||||
main_locale[lang_str] = no_handler[0]
|
||||
locale_tformat[lang_str] = format_string # locale's date format string
|
||||
|
||||
def register_datehandler(locales,parse_class,display_class):
|
||||
"""
|
||||
Registers the passed date parser class and date displayer
|
||||
@@ -104,8 +123,25 @@ def register_datehandler(locales,parse_class,display_class):
|
||||
:param display_class: Class to be associated with displaying
|
||||
:type display_class: :class:`.DateDisplay`
|
||||
"""
|
||||
format_string = ''
|
||||
for possible_format in locales: # allow possibly embedding a date format
|
||||
if isinstance(possible_format, tuple):
|
||||
format_string = possible_format[0] # pre-seeded date format string
|
||||
# maintain legacy gramps transformations
|
||||
format_string = format_string.replace('%y','%Y').replace('-', '/')
|
||||
for lang_str in locales:
|
||||
if isinstance(lang_str, tuple): continue
|
||||
LANG_TO_PARSER[lang_str] = parse_class
|
||||
LANG_TO_DISPLAY[lang_str] = display_class
|
||||
main_locale[lang_str] = locales[0]
|
||||
locale_tformat[lang_str] = format_string # locale's date format string
|
||||
|
||||
parse_class._locale = display_class._locale = GrampsLocale(lang=locales[0])
|
||||
|
||||
register_datehandler(
|
||||
('en_GB', 'English_United Kingdom', ("%d/%m/%y",)),
|
||||
DateParser, DateDisplayGB)
|
||||
|
||||
register_datehandler(
|
||||
('en_US', 'en', 'English_United States', ("%m/%d/%y",)),
|
||||
DateParser, DateDisplayEn)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2017 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
|
||||
@@ -46,7 +47,7 @@ log = logging.getLogger(".DateParser")
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..lib.date import Date, DateError, Today
|
||||
from . import _grampslocale
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
from ..utils.grampslocale import GrampsLocale
|
||||
from ._datestrings import DateStrings
|
||||
|
||||
@@ -192,10 +193,7 @@ class DateParser:
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
_locale = GrampsLocale(lang='en', languages='en')
|
||||
|
||||
fmt = _grampslocale.tformat
|
||||
_fmt_parse = re.compile(".*%(\S).*%(\S).*%(\S).*")
|
||||
_dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*")
|
||||
|
||||
# RFC-2822 only uses capitalized English abbreviated names, no locales.
|
||||
_rfc_days = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')
|
||||
@@ -315,7 +313,7 @@ class DateParser:
|
||||
return
|
||||
else:
|
||||
DateParser._langs.add(lang)
|
||||
ds = DateStrings(self._locale)
|
||||
ds = self._ds = DateStrings(self._locale)
|
||||
log.debug("Begin building parser prefix tables for {}".format(lang))
|
||||
_build_prefix_table(DateParser.month_to_int,
|
||||
_generate_variants(
|
||||
@@ -332,7 +330,21 @@ class DateParser:
|
||||
_build_prefix_table(DateParser.calendar_to_int,
|
||||
_generate_variants(zip(ds.calendar)))
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, plocale=None):
|
||||
"""
|
||||
:param plocale: allow correct date format to be loaded and parsed
|
||||
:type plocale: a :class:`.GrampsLocale` instance
|
||||
"""
|
||||
from ._datehandler import locale_tformat # circular import if above
|
||||
if plocale:
|
||||
self._locale = plocale
|
||||
elif not hasattr(self, '_locale'):
|
||||
self._locale = glocale
|
||||
if self._locale.calendar in locale_tformat:
|
||||
self.dhformat = locale_tformat[self._locale.calendar] # date format
|
||||
else:
|
||||
self.dhformat = locale_tformat['en_GB'] # something is required
|
||||
self.dhformat_changed() # Allow overriding so a subclass can modify it
|
||||
self.init_strings()
|
||||
self.parser = {
|
||||
Date.CAL_GREGORIAN : self._parse_gregorian,
|
||||
@@ -344,16 +356,24 @@ class DateParser:
|
||||
Date.CAL_SWEDISH : self._parse_swedish,
|
||||
}
|
||||
|
||||
match = self._fmt_parse.match(self.fmt.lower())
|
||||
match = self._dhformat_parse.match(self.dhformat.lower())
|
||||
if match:
|
||||
self.dmy = (match.groups() == ('d', 'm', 'y') or \
|
||||
match.groups() == ('d', 'b', 'y'))
|
||||
self._ddmy = match.groups() == ('a', 'e', 'b', 'y') # Icelandic
|
||||
self.dmy = (match.groups() == ('d', 'm', 'y') or
|
||||
match.groups() == ('e', 'm', 'y') or # Bulgarian
|
||||
match.groups() == ('d', 'b', 'y') or
|
||||
match.groups() == ('a', 'e', '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
|
||||
self._ddmy = False
|
||||
|
||||
def dhformat_changed(self):
|
||||
""" Allow overriding so a subclass can modify it """
|
||||
pass
|
||||
|
||||
def re_longest_first(self, keys):
|
||||
"""
|
||||
@@ -371,7 +391,7 @@ class DateParser:
|
||||
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
|
||||
invariant expresions don't need to be repeatedly coded. All differences
|
||||
can be coded after DateParser.init_strings(self) call, that way they
|
||||
override stuff from this method.
|
||||
|
||||
@@ -591,18 +611,18 @@ class DateParser:
|
||||
value = subparser(text)
|
||||
if value != Date.EMPTY:
|
||||
return value
|
||||
|
||||
match = self._iso.match(text)
|
||||
if match:
|
||||
groups = match.groups()
|
||||
y = self._get_int(groups[0])
|
||||
m = self._get_int(groups[3])
|
||||
d = self._get_int(groups[4])
|
||||
if check and not check((d, m, y)):
|
||||
return Date.EMPTY
|
||||
if groups[2]: # slash year digit
|
||||
if groups[2] and julian_valid((d, m, y + 1)): # slash year digit
|
||||
return (d, m, y + 1, True)
|
||||
else:
|
||||
if check is None or check((d, m, y)):
|
||||
return (d, m, y, False)
|
||||
return Date.EMPTY
|
||||
|
||||
# Database datetime format, used in ex. MSSQL
|
||||
# YYYYMMDD HH:MM:SS or YYYYMMDD or YYYYMMDDHHMMSS
|
||||
@@ -633,6 +653,8 @@ class DateParser:
|
||||
groups = match.groups()
|
||||
if groups == (None, None, None, None, None):
|
||||
return Date.EMPTY
|
||||
if self._ddmy: # Icelandic
|
||||
groups = groups[1:] # ignore the day of the week at the start
|
||||
if self.ymd:
|
||||
# '1789' and ymd: incomplete date
|
||||
if groups[1] is None:
|
||||
|
||||
@@ -248,18 +248,29 @@ class DateStrings:
|
||||
_("Saturday"),
|
||||
)
|
||||
|
||||
self.short_days = ("", # Icelandic needs them
|
||||
_("Sun"),
|
||||
_("Mon"),
|
||||
_("Tue"),
|
||||
_("Wed"),
|
||||
_("Thu"),
|
||||
_("Fri"),
|
||||
_("Sat"))
|
||||
|
||||
# set GRAMPS_RESOURCES then: python3 -m gramps.gen.datehandler._datestrings
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
from ..utils.grampslocale import GrampsLocale
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
from ._grampslocale import (_deprecated_long_months as old_long,
|
||||
_deprecated_short_months as old_short,
|
||||
_deprecated_short_days as old_short_days, # Icelandic needs them
|
||||
_deprecated_long_days as old_days)
|
||||
from ._datedisplay import DateDisplay
|
||||
import gettext
|
||||
lang = glocale.lang
|
||||
lang_short = lang[:2]
|
||||
available_langs = glocale.get_available_translations()
|
||||
available_langs = glocale.languages # get the cached list
|
||||
if glocale.check_available_translations(lang) is None:
|
||||
print ("Translation for current language {lang} not available.\n"
|
||||
"Available translations: {list}.\n"
|
||||
@@ -272,10 +283,10 @@ if __name__ == '__main__':
|
||||
print ("# Generating snippets for {}*.po\n"
|
||||
"# Available languages: {}".format(
|
||||
lang_short, available_langs))
|
||||
glocale = GrampsLocale(languages=(lang))
|
||||
glocale = GrampsLocale(languages=(lang)) # in __main__
|
||||
dd = glocale.date_displayer
|
||||
ds = dd._ds
|
||||
glocale_EN = GrampsLocale(languages=('en'))
|
||||
glocale_EN = GrampsLocale(languages=('en')) # in __main__
|
||||
ds_EN = DateStrings(glocale_EN)
|
||||
|
||||
filename = __file__
|
||||
@@ -308,6 +319,7 @@ if __name__ == '__main__':
|
||||
localized_months = old_long
|
||||
print_po_snippet((ds_EN.long_months, localized_months, old_long),
|
||||
"localized lexeme inflections||")
|
||||
|
||||
try:
|
||||
localized_months = dd.__class__.short_months
|
||||
except AttributeError:
|
||||
@@ -315,6 +327,10 @@ if __name__ == '__main__':
|
||||
print_po_snippet((ds_EN.short_months, localized_months, old_short),
|
||||
"localized lexeme inflections - short month form||")
|
||||
|
||||
print_po_snippet((ds_EN.long_days, old_days, old_days), "")
|
||||
|
||||
print_po_snippet((ds_EN.short_days, old_short_days, old_short_days), "")
|
||||
|
||||
try:
|
||||
loc = dd.__class__.hebrew
|
||||
print_po_snippet((ds_EN.hebrew, loc, loc),
|
||||
@@ -356,5 +372,3 @@ if __name__ == '__main__':
|
||||
"date quality|")
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
print_po_snippet((ds_EN.long_days, old_days, old_days), "")
|
||||
|
||||
@@ -34,6 +34,7 @@ import time
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
from ..lib.date import Date
|
||||
from . import LANG_TO_DISPLAY, LANG, parser, displayer
|
||||
|
||||
@@ -42,14 +43,22 @@ from . import LANG_TO_DISPLAY, LANG, parser, displayer
|
||||
# Convenience functions
|
||||
#
|
||||
#--------------------------------------------------------------
|
||||
def get_date_formats():
|
||||
def get_date_formats(flocale=glocale):
|
||||
"""
|
||||
Return the list of supported formats for date parsers and displayers.
|
||||
The UI language formats will be used unless another locale is fed in.
|
||||
|
||||
:param flocale: allow deferred translation of date formats
|
||||
:type flocale: a :class:`.GrampsLocale` instance
|
||||
"""
|
||||
# trans_text is a defined keyword (see po/update_po.py, po/genpot.sh)
|
||||
trans_text = flocale.translation.sgettext
|
||||
try:
|
||||
return LANG_TO_DISPLAY[LANG].formats
|
||||
return tuple(trans_text(fmt)
|
||||
for fmt in LANG_TO_DISPLAY[flocale.lang](0).formats)
|
||||
except:
|
||||
return LANG_TO_DISPLAY["C"].formats
|
||||
return tuple(trans_text(fmt)
|
||||
for fmt in LANG_TO_DISPLAY['C'](0).formats)
|
||||
|
||||
def set_format(value):
|
||||
try:
|
||||
|
||||
@@ -20,8 +20,19 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import locale
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..const import GRAMPS_LOCALE as glocale # TODO unneeded? (see codeset)
|
||||
|
||||
"""
|
||||
Some OS environments do not support the locale.nl_langinfo() method
|
||||
@@ -33,7 +44,7 @@ strftime.
|
||||
Since these routines return values encoded into selected character
|
||||
set, we have to convert to unicode.
|
||||
"""
|
||||
codeset = glocale.encoding
|
||||
codeset = glocale.encoding # TODO I don't think "codeset" is used anymore
|
||||
|
||||
try:
|
||||
|
||||
@@ -89,20 +100,15 @@ try:
|
||||
|
||||
_deprecated_short_days = (
|
||||
"",
|
||||
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
|
||||
locale.nl_langinfo(locale.ABDAY_1), # Sun
|
||||
locale.nl_langinfo(locale.ABDAY_2), # Mon
|
||||
locale.nl_langinfo(locale.ABDAY_3), # Tue
|
||||
locale.nl_langinfo(locale.ABDAY_4), # Wed
|
||||
locale.nl_langinfo(locale.ABDAY_5), # Thu
|
||||
locale.nl_langinfo(locale.ABDAY_6), # Fri
|
||||
locale.nl_langinfo(locale.ABDAY_7), # Sat
|
||||
)
|
||||
|
||||
tformat = locale.nl_langinfo(locale.D_FMT).replace('%y','%Y')
|
||||
# Gramps treats dates with '-' as ISO format, so replace separator on
|
||||
# locale dates that use '-' to prevent confict
|
||||
tformat = tformat.replace('-', '/')
|
||||
|
||||
except:
|
||||
import time
|
||||
|
||||
@@ -160,37 +166,11 @@ except:
|
||||
|
||||
_deprecated_short_days = (
|
||||
"",
|
||||
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
|
||||
time.strftime('%a',(1,1,1,1,1,1,6,1,1)), # Sun
|
||||
time.strftime('%a',(1,1,1,1,1,1,0,1,1)), # Mon
|
||||
time.strftime('%a',(1,1,1,1,1,1,1,1,1)), # Tue
|
||||
time.strftime('%a',(1,1,1,1,1,1,2,1,1)), # Wed
|
||||
time.strftime('%a',(1,1,1,1,1,1,3,1,1)), # Thu
|
||||
time.strftime('%a',(1,1,1,1,1,1,4,1,1)), # Fri
|
||||
time.strftime('%a',(1,1,1,1,1,1,5,1,1)), # Sat
|
||||
)
|
||||
|
||||
# depending on the locale, the value returned for 20th Feb 2009 could be
|
||||
# of the format '20/2/2009', '20/02/2009', '20.2.2009', '20.02.2009',
|
||||
# '20-2-2009', '20-02-2009', '2009/02/20', '2009.02.20', '2009-02-20',
|
||||
# '09-02-20' hence to reduce the possible values to test, make sure month
|
||||
# is double digit also day should be double digit, preferably greater than
|
||||
# 12 for human readablity
|
||||
|
||||
timestr = time.strftime('%x',(2005,10,25,1,1,1,1,1,1))
|
||||
|
||||
# Gramps treats dates with '-' as ISO format, so replace separator on
|
||||
# locale dates that use '-' to prevent confict
|
||||
timestr = timestr.replace('-', '/')
|
||||
time2fmt_map = {
|
||||
'25/10/2005' : '%d/%m/%Y',
|
||||
'10/25/2005' : '%m/%d/%Y',
|
||||
'2005/10/25' : '%Y/%m/%d',
|
||||
'25.10.2005' : '%d.%m.%Y',
|
||||
'10.25.2005' : '%m.%d.%Y',
|
||||
'2005.10.25' : '%Y.%m.%d',
|
||||
}
|
||||
|
||||
try:
|
||||
tformat = time2fmt_map[timestr]
|
||||
except KeyError as e:
|
||||
tformat = '%d/%m/%Y' #default value
|
||||
|
||||
@@ -30,8 +30,8 @@ from ...lib.date import Date
|
||||
|
||||
class DateDisplayTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
from .._datedisplay import DateDisplay
|
||||
self.display = DateDisplay()
|
||||
from .._datedisplay import DateDisplayEn
|
||||
self.display = DateDisplayEn()
|
||||
self.display_RU = GrampsLocale(lang='ru').date_displayer
|
||||
|
||||
def assert_map_key_val(self, m, k, v):
|
||||
|
||||
@@ -63,7 +63,7 @@ class DateHandlerTest(unittest.TestCase):
|
||||
self.assertTrue(test_date.is_equal(new_date),
|
||||
"{} -> {}\n{} -> {}".format(
|
||||
test_date, new_date,
|
||||
test_date.to_struct(), new_date.to_struct()))
|
||||
test_date.__dict__, new_date.__dict__))
|
||||
|
||||
def test_simple(self):
|
||||
|
||||
|
||||
@@ -69,38 +69,5 @@ from .dbconst import *
|
||||
from .txn import *
|
||||
from .exceptions import *
|
||||
from .undoredo import *
|
||||
|
||||
def find_surname_name(key, data):
|
||||
"""
|
||||
Creating a surname from raw name, to use for sort and index
|
||||
returns a byte string
|
||||
"""
|
||||
return __index_surname(data[5])
|
||||
|
||||
def __index_surname(surn_list):
|
||||
"""
|
||||
All non pa/matronymic surnames are used in indexing.
|
||||
pa/matronymic not as they change for every generation!
|
||||
returns a byte string
|
||||
"""
|
||||
from gramps.gen.lib import NameOriginType
|
||||
if surn_list:
|
||||
surn = " ".join([x[0] for x in surn_list if not (x[3][0] in [
|
||||
NameOriginType.PATRONYMIC, NameOriginType.MATRONYMIC]) ])
|
||||
else:
|
||||
surn = ""
|
||||
return surn
|
||||
|
||||
def open_database(database, force_unlock=False):
|
||||
"""
|
||||
Shortcut for external uses of databases.
|
||||
"""
|
||||
from ..dbstate import DbState
|
||||
return DbState().open_database(database, force_unlock)
|
||||
|
||||
def make_database(dbid):
|
||||
"""
|
||||
Shortcut for external uses of databases.
|
||||
"""
|
||||
from ..dbstate import DbState
|
||||
return DbState().make_database(dbid)
|
||||
from .utils import *
|
||||
from .generic import *
|
||||
|
||||
+826
-1065
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,54 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2000-2007 Donald N. Allingham
|
||||
# Copyright (C) 2010 Nick Hall
|
||||
# Copyright (C) 2011 Tim G L Lyons
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# class DbBookmarks
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class DbBookmarks:
|
||||
def __init__(self, default=[]):
|
||||
self.bookmarks = list(default) # want a copy (not an alias)
|
||||
|
||||
def set(self, new_list):
|
||||
self.bookmarks = list(new_list)
|
||||
|
||||
def get(self):
|
||||
return self.bookmarks
|
||||
|
||||
def append(self, item):
|
||||
self.bookmarks.append(item)
|
||||
|
||||
def append_list(self, blist):
|
||||
self.bookmarks += blist
|
||||
|
||||
def remove(self, item):
|
||||
self.bookmarks.remove(item)
|
||||
|
||||
def pop(self, item):
|
||||
return self.bookmarks.pop(item)
|
||||
|
||||
def insert(self, pos, item):
|
||||
self.bookmarks.insert(pos, item)
|
||||
|
||||
def close(self):
|
||||
del self.bookmarks
|
||||
@@ -56,6 +56,7 @@ DBCACHE = 0x4000000 # Size of the shared memory buffer pool
|
||||
DBLOCKS = 100000 # Maximum number of locks supported
|
||||
DBOBJECTS = 100000 # Maximum number of simultaneously locked objects
|
||||
DBUNDO = 1000 # Maximum size of undo buffer
|
||||
ARRAYSIZE = 1000 # The arraysize for a SQL cursor
|
||||
|
||||
PERSON_KEY = 0
|
||||
FAMILY_KEY = 1
|
||||
|
||||
@@ -63,10 +63,11 @@ from functools import wraps
|
||||
# Gramps libraries
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.db.base import DbReadBase
|
||||
from gramps.gen.db.dbconst import DBLOGNAME
|
||||
from gramps.gen.errors import HandleError
|
||||
from gramps.gen.utils.callback import Callback
|
||||
from .base import DbReadBase
|
||||
from .dbconst import DBLOGNAME
|
||||
from ..errors import HandleError
|
||||
from ..utils.callback import Callback
|
||||
from ..lib import Researcher
|
||||
|
||||
LOG = logging.getLogger(DBLOGNAME)
|
||||
|
||||
@@ -210,16 +211,6 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
|
||||
__signals__ = {}
|
||||
|
||||
@classmethod
|
||||
def get_class_summary(cls):
|
||||
"""
|
||||
Return a diction of information about this database.
|
||||
"""
|
||||
summary = {
|
||||
"Database type": cls.__name__,
|
||||
}
|
||||
return summary
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
Create a new DummyDb instance.
|
||||
@@ -228,6 +219,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
Callback.__init__(self)
|
||||
self.db_is_open = False
|
||||
self.readonly = True
|
||||
self.name_formats = []
|
||||
self.bookmarks = Bookmarks()
|
||||
self.family_bookmarks = Bookmarks()
|
||||
self.event_bookmarks = Bookmarks()
|
||||
@@ -237,6 +229,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
self.repo_bookmarks = Bookmarks()
|
||||
self.media_bookmarks = Bookmarks()
|
||||
self.note_bookmarks = Bookmarks()
|
||||
self.owner = Researcher()
|
||||
|
||||
def get_feature(self, feature):
|
||||
"""
|
||||
@@ -536,7 +529,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_family_handles(self, sort_handles=False):
|
||||
"""
|
||||
@@ -680,7 +673,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_note_handles(self):
|
||||
"""
|
||||
@@ -792,7 +785,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_person_attribute_types(self):
|
||||
"""
|
||||
@@ -839,7 +832,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_person_handles(self, sort_handles=False):
|
||||
"""
|
||||
@@ -897,7 +890,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_place_handles(self, sort_handles=False):
|
||||
"""
|
||||
@@ -917,7 +910,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_family_data(self, handle):
|
||||
"""
|
||||
@@ -926,7 +919,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_note_data(self, handle):
|
||||
"""
|
||||
@@ -935,7 +928,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_media_data(self, handle):
|
||||
"""
|
||||
@@ -944,7 +937,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_person_data(self, handle):
|
||||
"""
|
||||
@@ -953,7 +946,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_place_data(self, handle):
|
||||
"""
|
||||
@@ -962,7 +955,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_repository_data(self, handle):
|
||||
"""
|
||||
@@ -971,7 +964,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_source_data(self, handle):
|
||||
"""
|
||||
@@ -980,7 +973,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_citation_data(self, handle):
|
||||
"""
|
||||
@@ -989,7 +982,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_raw_tag_data(self, handle):
|
||||
"""
|
||||
@@ -998,7 +991,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_repo_bookmarks(self):
|
||||
"""
|
||||
@@ -1036,7 +1029,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_repository_handles(self):
|
||||
"""
|
||||
@@ -1063,7 +1056,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
"""
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
return None
|
||||
return self.owner
|
||||
|
||||
def get_save_path(self):
|
||||
"""
|
||||
@@ -1107,7 +1100,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_source_handles(self, sort_handles=False):
|
||||
"""
|
||||
@@ -1165,7 +1158,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_citation_handles(self, sort_handles=False):
|
||||
"""
|
||||
@@ -1203,7 +1196,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
LOG.warning("handle %s does not exist in the dummy database", handle)
|
||||
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
|
||||
raise HandleError('Handle %s not found' % handle)
|
||||
|
||||
def get_tag_from_name(self, val):
|
||||
"""
|
||||
@@ -1341,7 +1334,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
"""
|
||||
return self.db_is_open
|
||||
|
||||
def iter_citations(self, order_by=None):
|
||||
def iter_citations(self):
|
||||
"""
|
||||
Return an iterator over objects for Citations in the database
|
||||
"""
|
||||
@@ -1357,7 +1350,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_events(self, order_by=None):
|
||||
def iter_events(self):
|
||||
"""
|
||||
Return an iterator over objects for Events in the database
|
||||
"""
|
||||
@@ -1365,7 +1358,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_families(self, order_by=None):
|
||||
def iter_families(self):
|
||||
"""
|
||||
Return an iterator over objects for Families in the database
|
||||
"""
|
||||
@@ -1389,7 +1382,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_media(self, order_by=None):
|
||||
def iter_media(self):
|
||||
"""
|
||||
Return an iterator over objects for Medias in the database
|
||||
"""
|
||||
@@ -1405,7 +1398,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_notes(self, order_by=None):
|
||||
def iter_notes(self):
|
||||
"""
|
||||
Return an iterator over objects for Notes in the database
|
||||
"""
|
||||
@@ -1413,7 +1406,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_people(self, order_by=None):
|
||||
def iter_people(self):
|
||||
"""
|
||||
Return an iterator over objects for Persons in the database
|
||||
"""
|
||||
@@ -1437,7 +1430,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_places(self, order_by=None):
|
||||
def iter_places(self):
|
||||
"""
|
||||
Return an iterator over objects for Places in the database
|
||||
"""
|
||||
@@ -1445,7 +1438,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_repositories(self, order_by=None):
|
||||
def iter_repositories(self):
|
||||
"""
|
||||
Return an iterator over objects for Repositories in the database
|
||||
"""
|
||||
@@ -1469,7 +1462,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_sources(self, order_by=None):
|
||||
def iter_sources(self):
|
||||
"""
|
||||
Return an iterator over objects for Sources in the database
|
||||
"""
|
||||
@@ -1485,7 +1478,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
LOG.warning("database is closed")
|
||||
return []
|
||||
|
||||
def iter_tags(self, order_by=None):
|
||||
def iter_tags(self):
|
||||
"""
|
||||
Return an iterator over objects for Tags in the database
|
||||
"""
|
||||
@@ -1621,7 +1614,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
|
||||
|
||||
def set_mediapath(self, path):
|
||||
"""
|
||||
Set the default media path for database, path should be utf-8.
|
||||
Set the default media path for database.
|
||||
"""
|
||||
if not self.db_is_open:
|
||||
LOG.warning("database is closed")
|
||||
@@ -25,8 +25,8 @@
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.const import URL_WIKISTRING, URL_MANUAL_PAGE
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
from ..const import URL_WIKISTRING, URL_MANUAL_PAGE
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
+1397
-1179
File diff suppressed because it is too large
Load Diff
@@ -1,110 +0,0 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2016 Gramps Development Team
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
from gramps.gen.db.where import eval_where
|
||||
from gramps.gen.lib import Person
|
||||
import unittest
|
||||
|
||||
##########
|
||||
# Tests:
|
||||
|
||||
def make_closure(surname):
|
||||
"""
|
||||
Test closure.
|
||||
"""
|
||||
from gramps.gen.lib import Person
|
||||
return (lambda person:
|
||||
(person.primary_name.surname_list[0].surname == surname and
|
||||
person.gender == Person.MALE))
|
||||
|
||||
class Thing:
|
||||
def __init__(self):
|
||||
self.list = ["I0", "I1", "I2"]
|
||||
|
||||
def where(self):
|
||||
return lambda person: person.gramps_id == self.list[1]
|
||||
|
||||
def apply(self, db, person):
|
||||
return person.gender == Person.MALE
|
||||
|
||||
class ClosureTest(unittest.TestCase):
|
||||
def check(self, test):
|
||||
result = eval_where(test[0])
|
||||
self.assertTrue(result == test[1], "%s is not %s" % (result, test[1]))
|
||||
|
||||
def test_01(self):
|
||||
self.check(
|
||||
(lambda family: (family.private and
|
||||
family.mother_handle.gramps_id != "I0001"),
|
||||
['AND', [['private', '==', True],
|
||||
['mother_handle.gramps_id', '!=', 'I0001']]]))
|
||||
|
||||
def test_02(self):
|
||||
self.check(
|
||||
(lambda person: LIKE(person.gramps_id, "I0001"),
|
||||
['gramps_id', 'LIKE', 'I0001']))
|
||||
|
||||
def test_03(self):
|
||||
self.check(
|
||||
(lambda note: note.gramps_id == "N0001",
|
||||
['gramps_id', '==', 'N0001']))
|
||||
|
||||
def test_04(self):
|
||||
self.check(
|
||||
(lambda person: person.event_ref_list.ref.gramps_id == "E0001",
|
||||
['event_ref_list.ref.gramps_id', '==', 'E0001']))
|
||||
|
||||
def test_05(self):
|
||||
self.check(
|
||||
(lambda person: LIKE(person.gramps_id, "I0001") or person.private,
|
||||
["OR", [['gramps_id', 'LIKE', 'I0001'],
|
||||
["private", "==", True]]]))
|
||||
|
||||
def test_06(self):
|
||||
self.check(
|
||||
(lambda person: person.event_ref_list <= 0,
|
||||
["event_ref_list", "<=", 0]))
|
||||
|
||||
def test_07(self):
|
||||
self.check(
|
||||
(lambda person: person.primary_name.surname_list[0].surname == "Smith",
|
||||
["primary_name.surname_list.0.surname", "==", "Smith"]))
|
||||
|
||||
def test_08(self):
|
||||
self.check(
|
||||
(make_closure("Smith"),
|
||||
["AND", [["primary_name.surname_list.0.surname", "==", "Smith"],
|
||||
["gender", "==", 1]]]))
|
||||
|
||||
def test_09(self):
|
||||
self.check(
|
||||
[Thing().where(), ["gramps_id", "==", "I1"]])
|
||||
|
||||
def test_10(self):
|
||||
self.check(
|
||||
(lambda person: LIKE(person.gramps_id, "I000%"),
|
||||
["gramps_id", "LIKE", "I000%"]))
|
||||
|
||||
def test_11(self):
|
||||
self.check(
|
||||
[Thing().apply, ["gender", "==", 1]])
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
+22
-47
@@ -1,3 +1,22 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2015 Douglas S. Blank <doug.blank@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.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Standard python modules
|
||||
@@ -5,7 +24,6 @@
|
||||
#-------------------------------------------------------------------------
|
||||
from abc import ABCMeta, abstractmethod
|
||||
import time
|
||||
import pickle
|
||||
from collections import deque
|
||||
|
||||
class DbUndo(metaclass=ABCMeta):
|
||||
@@ -14,33 +32,16 @@ class DbUndo(metaclass=ABCMeta):
|
||||
for use with a real backend.
|
||||
"""
|
||||
|
||||
__slots__ = ('undodb', 'db', 'mapbase', 'undo_history_timestamp',
|
||||
'txn', 'undoq', 'redoq')
|
||||
__slots__ = ('undodb', 'db', 'undo_history_timestamp', 'undoq', 'redoq')
|
||||
|
||||
def __init__(self, grampsdb):
|
||||
def __init__(self, db):
|
||||
"""
|
||||
Class constructor. Set up main instance variables
|
||||
"""
|
||||
self.db = grampsdb
|
||||
self.db = db
|
||||
self.undoq = deque()
|
||||
self.redoq = deque()
|
||||
self.undo_history_timestamp = time.time()
|
||||
self.txn = None
|
||||
# N.B. the databases have to be in the same order as the numbers in
|
||||
# xxx_KEY in gen/db/dbconst.py
|
||||
self.mapbase = (
|
||||
self.db.person_map,
|
||||
self.db.family_map,
|
||||
self.db.source_map,
|
||||
self.db.event_map,
|
||||
self.db.media_map,
|
||||
self.db.place_map,
|
||||
self.db.repository_map,
|
||||
None,
|
||||
self.db.note_map,
|
||||
self.db.tag_map,
|
||||
self.db.citation_map,
|
||||
)
|
||||
|
||||
def clear(self):
|
||||
"""
|
||||
@@ -49,7 +50,6 @@ class DbUndo(metaclass=ABCMeta):
|
||||
self.undoq.clear()
|
||||
self.redoq.clear()
|
||||
self.undo_history_timestamp = time.time()
|
||||
self.txn = None
|
||||
|
||||
def __enter__(self, value):
|
||||
"""
|
||||
@@ -142,30 +142,5 @@ class DbUndo(metaclass=ABCMeta):
|
||||
return False
|
||||
return self._redo(update_history)
|
||||
|
||||
def undo_reference(self, data, handle, db_map):
|
||||
"""
|
||||
Helper method to undo a reference map entry
|
||||
"""
|
||||
if data is None:
|
||||
db_map.delete(handle)
|
||||
else:
|
||||
db_map[handle] = data
|
||||
|
||||
def undo_data(self, data, handle, db_map, emit, signal_root):
|
||||
"""
|
||||
Helper method to undo/redo the changes made
|
||||
"""
|
||||
if data is None:
|
||||
emit(signal_root + '-delete', ([handle],))
|
||||
db_map.delete(handle)
|
||||
else:
|
||||
ex_data = db_map[handle]
|
||||
if ex_data:
|
||||
signal = signal_root + '-update'
|
||||
else:
|
||||
signal = signal_root + '-add'
|
||||
db_map[handle] = data
|
||||
emit(signal, ([handle],))
|
||||
|
||||
undo_count = property(lambda self:len(self.undoq))
|
||||
redo_count = property(lambda self:len(self.redoq))
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2000-2006 Donald N. Allingham
|
||||
# Copyright (C) 2011 Tim G L Lyons
|
||||
# Copyright (C) 2012 Doug Blank <doug.blank@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.
|
||||
#
|
||||
|
||||
"""
|
||||
Database utilites
|
||||
"""
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
import os
|
||||
import logging
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from ..plug import BasePluginManager
|
||||
from ..const import PLUGINS_DIR, USER_PLUGINS
|
||||
from ..config import config
|
||||
from .dbconst import DBLOGNAME
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# set up logging
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
_LOG = logging.getLogger(DBLOGNAME)
|
||||
|
||||
def make_database(plugin_id):
|
||||
"""
|
||||
Make a database, given a plugin id.
|
||||
"""
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
pdata = pmgr.get_plugin(plugin_id)
|
||||
|
||||
if not pdata:
|
||||
# This might happen if using gramps from outside, and
|
||||
# we haven't loaded plugins yet
|
||||
pmgr.reg_plugins(PLUGINS_DIR, None, None)
|
||||
pmgr.reg_plugins(USER_PLUGINS, None, None, load_on_reg=True)
|
||||
pdata = pmgr.get_plugin(plugin_id)
|
||||
|
||||
if pdata:
|
||||
mod = pmgr.load_plugin(pdata)
|
||||
if mod:
|
||||
database = getattr(mod, pdata.databaseclass)
|
||||
db = database()
|
||||
import inspect
|
||||
caller_frame = inspect.stack()[1]
|
||||
_LOG.debug("Database class instance created Class:%s instance:%s. "
|
||||
"Called from File %s, line %s, in %s"
|
||||
% ((db.__class__.__name__, hex(id(db)))
|
||||
+ (os.path.split(caller_frame[1])[1],)
|
||||
+ tuple(caller_frame[i] for i in range(2, 4))))
|
||||
return db
|
||||
else:
|
||||
raise Exception("can't load database backend: '%s'" % plugin_id)
|
||||
else:
|
||||
raise Exception("no such database backend: '%s'" % plugin_id)
|
||||
|
||||
def open_database(dbname, force_unlock=False, callback=None):
|
||||
"""
|
||||
Open a database by name and return the database.
|
||||
"""
|
||||
data = lookup_family_tree(dbname)
|
||||
database = None
|
||||
if data:
|
||||
dbpath, locked, locked_by, backend = data
|
||||
if (not locked) or (locked and force_unlock):
|
||||
database = make_database(backend)
|
||||
database.load(dbpath, callback=callback)
|
||||
return database
|
||||
|
||||
def lookup_family_tree(dbname):
|
||||
"""
|
||||
Find a Family Tree given its name, and return properties.
|
||||
"""
|
||||
dbdir = os.path.expanduser(config.get('database.path'))
|
||||
for dpath in os.listdir(dbdir):
|
||||
dirpath = os.path.join(dbdir, dpath)
|
||||
path_name = os.path.join(dirpath, "name.txt")
|
||||
if os.path.isfile(path_name):
|
||||
with open(path_name, 'r', encoding='utf8') as file:
|
||||
name = file.readline().strip()
|
||||
if dbname == name:
|
||||
locked = False
|
||||
locked_by = None
|
||||
backend = None
|
||||
fname = os.path.join(dirpath, "database.txt")
|
||||
if os.path.isfile(fname):
|
||||
with open(fname, 'r', encoding='utf8') as ifile:
|
||||
backend = ifile.read().strip()
|
||||
else:
|
||||
backend = "bsddb"
|
||||
try:
|
||||
fname = os.path.join(dirpath, "lock")
|
||||
with open(fname, 'r', encoding='utf8') as ifile:
|
||||
locked_by = ifile.read().strip()
|
||||
locked = True
|
||||
except (OSError, IOError):
|
||||
pass
|
||||
return (dirpath, locked, locked_by, backend)
|
||||
return None
|
||||
|
||||
def import_as_dict(filename, user, skp_imp_adds=True):
|
||||
"""
|
||||
Import the filename into a InMemoryDB and return it.
|
||||
"""
|
||||
db = make_database("inmemorydb")
|
||||
db.load(None)
|
||||
db.set_feature("skip-import-additions", skp_imp_adds)
|
||||
status = import_from_filename(db, filename, user)
|
||||
return db if status else None
|
||||
|
||||
def import_from_filename(db, filename, user):
|
||||
"""
|
||||
Import a file into a database.
|
||||
"""
|
||||
(name, ext) = os.path.splitext(os.path.basename(filename))
|
||||
extension = ext[1:].lower()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
import_list = pmgr.get_reg_importers()
|
||||
for pdata in import_list:
|
||||
if extension == pdata.extension:
|
||||
mod = pmgr.load_plugin(pdata)
|
||||
if not mod:
|
||||
for item in pmgr.get_fail_list():
|
||||
name, error_tuple, pdata = item
|
||||
etype, exception, traceback = error_tuple
|
||||
return False
|
||||
import_function = getattr(mod, pdata.import_function)
|
||||
results = import_function(db, filename, user)
|
||||
if results is None:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
return False
|
||||
|
||||
def find_surname_name(key, data):
|
||||
"""
|
||||
Creating a surname from raw name, to use for sort and index
|
||||
returns a byte string
|
||||
"""
|
||||
return __index_surname(data[5])
|
||||
|
||||
def __index_surname(surn_list):
|
||||
"""
|
||||
All non pa/matronymic surnames are used in indexing.
|
||||
pa/matronymic not as they change for every generation!
|
||||
returns a byte string
|
||||
"""
|
||||
from ..lib import NameOriginType
|
||||
if surn_list:
|
||||
surn = " ".join([x[0] for x in surn_list if not (x[3][0] in [
|
||||
NameOriginType.PATRONYMIC, NameOriginType.MATRONYMIC])])
|
||||
else:
|
||||
surn = ""
|
||||
return surn
|
||||
@@ -1,222 +0,0 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2016 Gramps Development Team
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
from meta.asttools import Visitor
|
||||
from meta.decompiler import _ast, decompile_func
|
||||
|
||||
import copy
|
||||
|
||||
class ParseFilter(Visitor):
|
||||
"""
|
||||
This class is used to turn Python lambda expressions into AST
|
||||
which is used as a SELECT statements in databases via the .where()
|
||||
method. This is used by both BSDDB and SQL-based databases.
|
||||
|
||||
Not all Python is allowed as a where-clause, and some functions
|
||||
used here are not real Python functions.
|
||||
|
||||
Examples:
|
||||
|
||||
db.Person.where(
|
||||
lambda person: person.gramps_id == "I0001"
|
||||
).select()
|
||||
|
||||
Some uses look (and evaluate) like regular Python.
|
||||
|
||||
db.Person.where(
|
||||
lambda person: LIKE(person.gramps_id, "I000%")
|
||||
).select()
|
||||
|
||||
LIKE is not a real Python function, but the syntax is used to
|
||||
indicate a fuzzy match.
|
||||
|
||||
db.Family.where(
|
||||
lambda family: LIKE(family.mother_handle.gramps_id, "I003%")
|
||||
).select()
|
||||
|
||||
LIKE uses % as a wildcard matching character, like ".*" in re.
|
||||
|
||||
db.Family.where(
|
||||
lambda family: family.mother_handle.event_ref_list.ref.gramps_id == 'E0156'
|
||||
).select()
|
||||
|
||||
Here, property chaining is shown without having to check to see if
|
||||
values actually exist. The checking for valid/existing properties
|
||||
is done by the select system.
|
||||
|
||||
db.Family.where(
|
||||
lambda family: family.mother_handle.event_ref_list[0] != None
|
||||
).select()
|
||||
|
||||
Indexing and use of None is allowed.
|
||||
|
||||
db.Person.where(
|
||||
lambda person: person.private == True
|
||||
).select()
|
||||
|
||||
One current limitiation is that it cannot detect a boolean value,
|
||||
so we must use the "== True" to make sure the proper code is
|
||||
generated.
|
||||
|
||||
The following method names are dictated by meta's Visitor. Additional
|
||||
methods can be added if an error is received such as:
|
||||
|
||||
AttributeError: visitXXX does not exist
|
||||
|
||||
The method must be added, return the proper value for that
|
||||
syntax. May require recursive calls to process_ITEM().
|
||||
|
||||
Please see meta for more information:
|
||||
http://srossross.github.io/Meta/html/index.html
|
||||
"""
|
||||
|
||||
def visitName(self, node):
|
||||
return node.id
|
||||
|
||||
def visitNum(self, node):
|
||||
return node.n
|
||||
|
||||
def visitlong(self, node):
|
||||
return node
|
||||
|
||||
def process_expression(self, expr):
|
||||
if isinstance(expr, str):
|
||||
# boolean
|
||||
return [self.process_field(expr), "==", True]
|
||||
elif len(expr) == 3:
|
||||
# (field, op, value)
|
||||
return [self.process_field(expr[0]),
|
||||
expr[1],
|
||||
self.process_value(expr[2])]
|
||||
else:
|
||||
# list of exprs
|
||||
return [self.process_expression(exp) for
|
||||
exp in expr]
|
||||
|
||||
def process_value(self, value):
|
||||
try:
|
||||
return eval(value, self.env)
|
||||
except:
|
||||
return value
|
||||
|
||||
def process_field(self, field):
|
||||
field = field.replace("[", ".").replace("]", "")
|
||||
if field.startswith(self.parameter + "."):
|
||||
return field[len(self.parameter) + 1:]
|
||||
else:
|
||||
return field
|
||||
|
||||
def visitCall(self, node):
|
||||
"""
|
||||
Handle LIKE()
|
||||
"""
|
||||
return [self.process_field(self.visit(node.args[0])),
|
||||
self.visit(node.func),
|
||||
self.process_value(self.visit(node.args[1]))]
|
||||
|
||||
def visitStr(self, node):
|
||||
return node.s
|
||||
|
||||
def visitlist(self, list):
|
||||
return [self.visit(node) for node in list]
|
||||
|
||||
def visitCompare(self, node):
|
||||
return [self.process_field(self.visit(node.left)),
|
||||
" ".join(self.visit(node.ops)),
|
||||
self.process_value(self.visit(node.comparators[0]))]
|
||||
|
||||
def visitAttribute(self, node):
|
||||
return "%s.%s" % (self.visit(node.value), node.attr)
|
||||
|
||||
def get_boolean_op(self, node):
|
||||
if isinstance(node, _ast.And):
|
||||
return "AND"
|
||||
elif isinstance(node, _ast.Or):
|
||||
return "OR"
|
||||
else:
|
||||
raise Exception("invalid boolean")
|
||||
|
||||
def visitNotEq(self, node):
|
||||
return "!="
|
||||
|
||||
def visitLtE(self, node):
|
||||
return "<="
|
||||
|
||||
def visitGtE(self, node):
|
||||
return ">="
|
||||
|
||||
def visitEq(self, node):
|
||||
return "=="
|
||||
|
||||
def visitBoolOp(self, node):
|
||||
"""
|
||||
BoolOp: boolean operator
|
||||
"""
|
||||
op = self.get_boolean_op(node.op)
|
||||
values = list(node.values)
|
||||
return [op, self.process_expression(
|
||||
[self.visit(value) for value in values])]
|
||||
|
||||
def visitLambda(self, node):
|
||||
self.parameter = self.visit(node.args)[0]
|
||||
return self.visit(node.body)
|
||||
|
||||
def visitFunctionDef(self, node):
|
||||
self.parameter = self.visit(node.args)[2] # ['self', 'db', 'person']
|
||||
return self.visit(node.body)[0]
|
||||
|
||||
def visitReturn(self, node):
|
||||
return self.visit(node.value)
|
||||
|
||||
def visitarguments(self, node):
|
||||
return [self.visit(arg) for arg in node.args]
|
||||
|
||||
def visitarg(self, node):
|
||||
return node.arg
|
||||
|
||||
def visitSubscript(self, node):
|
||||
return "%s[%s]" % (self.visit(node.value),
|
||||
self.visit(node.slice))
|
||||
|
||||
def visitIndex(self, node):
|
||||
return self.visit(node.value)
|
||||
|
||||
def make_env(closure):
|
||||
"""
|
||||
Create an environment from the closure.
|
||||
"""
|
||||
env = copy.copy(closure.__globals__)
|
||||
if closure.__closure__:
|
||||
for i in range(len(closure.__closure__)):
|
||||
env[closure.__code__.co_freevars[i]] = closure.__closure__[i].cell_contents
|
||||
return env
|
||||
|
||||
def eval_where(closure):
|
||||
"""
|
||||
Given a closure, parse and evaluate it.
|
||||
Return a WHERE expression.
|
||||
|
||||
See ParseFilter.__doc__ for more information and examples.
|
||||
"""
|
||||
parser = ParseFilter()
|
||||
parser.env = make_env(closure)
|
||||
ast_top = decompile_func(closure)
|
||||
result = parser.visit(ast_top)
|
||||
return result
|
||||
+4
-143
@@ -42,7 +42,8 @@ from .db import DbReadBase
|
||||
from .proxy.proxybase import ProxyDbBase
|
||||
from .utils.callback import Callback
|
||||
from .config import config
|
||||
from gramps.gen.db.dbconst import DBLOGNAME
|
||||
from .db.dbconst import DBLOGNAME
|
||||
from .db.dummydb import DummyDb
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -68,7 +69,7 @@ class DbState(Callback):
|
||||
place holder until a real DB is assigned.
|
||||
"""
|
||||
Callback.__init__(self)
|
||||
self.db = self.make_database("dummydb")
|
||||
self.db = DummyDb()
|
||||
self.open = False # Deprecated - use DbState.is_open()
|
||||
self.stack = []
|
||||
|
||||
@@ -134,7 +135,7 @@ class DbState(Callback):
|
||||
self.emit('no-database', ())
|
||||
if self.is_open():
|
||||
self.db.close()
|
||||
self.db = self.make_database("dummydb")
|
||||
self.db = DummyDb()
|
||||
self.open = False
|
||||
self.emit('database-changed', (self.db, ))
|
||||
|
||||
@@ -178,143 +179,3 @@ class DbState(Callback):
|
||||
"""
|
||||
self.db = self.stack.pop()
|
||||
self.emit('database-changed', (self.db, ))
|
||||
|
||||
def make_database(self, plugin_id):
|
||||
"""
|
||||
Make a database, given a plugin id.
|
||||
"""
|
||||
from .plug import BasePluginManager
|
||||
from .const import PLUGINS_DIR, USER_PLUGINS
|
||||
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
pdata = pmgr.get_plugin(plugin_id)
|
||||
|
||||
if not pdata:
|
||||
# This might happen if using gramps from outside, and
|
||||
# we haven't loaded plugins yet
|
||||
pmgr.reg_plugins(PLUGINS_DIR, self, None)
|
||||
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
|
||||
pdata = pmgr.get_plugin(plugin_id)
|
||||
|
||||
if pdata:
|
||||
if pdata.reset_system:
|
||||
if self.modules_is_set():
|
||||
self.reset_modules()
|
||||
else:
|
||||
self.save_modules()
|
||||
mod = pmgr.load_plugin(pdata)
|
||||
if mod:
|
||||
database = getattr(mod, pdata.databaseclass)
|
||||
db = database()
|
||||
import inspect
|
||||
caller_frame = inspect.stack()[1]
|
||||
_LOG.debug("Database class instance created Class:%s instance:%s. "
|
||||
"Called from File %s, line %s, in %s"
|
||||
% ((db.__class__.__name__, hex(id(db)))
|
||||
+ (os.path.split(caller_frame[1])[1],)
|
||||
+ tuple(caller_frame[i] for i in range(2, 4))))
|
||||
return db
|
||||
else:
|
||||
raise Exception("can't load database backend: '%s'" % plugin_id)
|
||||
else:
|
||||
raise Exception("no such database backend: '%s'" % plugin_id)
|
||||
|
||||
def open_database(self, dbname, force_unlock=False, callback=None):
|
||||
"""
|
||||
Open a database by name and return the database.
|
||||
"""
|
||||
data = self.lookup_family_tree(dbname)
|
||||
database = None
|
||||
if data:
|
||||
dbpath, locked, locked_by, backend = data
|
||||
if (not locked) or (locked and force_unlock):
|
||||
database = self.make_database(backend)
|
||||
database.load(dbpath, callback=callback)
|
||||
return database
|
||||
|
||||
def lookup_family_tree(self, dbname):
|
||||
"""
|
||||
Find a Family Tree given its name, and return properties.
|
||||
"""
|
||||
dbdir = os.path.expanduser(config.get('database.path'))
|
||||
for dpath in os.listdir(dbdir):
|
||||
dirpath = os.path.join(dbdir, dpath)
|
||||
path_name = os.path.join(dirpath, "name.txt")
|
||||
if os.path.isfile(path_name):
|
||||
with open(path_name, 'r', encoding='utf8') as file:
|
||||
name = file.readline().strip()
|
||||
if dbname == name:
|
||||
locked = False
|
||||
locked_by = None
|
||||
backend = None
|
||||
fname = os.path.join(dirpath, "database.txt")
|
||||
if os.path.isfile(fname):
|
||||
with open(fname, 'r', encoding='utf8') as ifile:
|
||||
backend = ifile.read().strip()
|
||||
else:
|
||||
backend = "bsddb"
|
||||
try:
|
||||
fname = os.path.join(dirpath, "lock")
|
||||
with open(fname, 'r', encoding='utf8') as ifile:
|
||||
locked_by = ifile.read().strip()
|
||||
locked = True
|
||||
except (OSError, IOError):
|
||||
pass
|
||||
return (dirpath, locked, locked_by, backend)
|
||||
return None
|
||||
|
||||
def import_from_filename(self, db, filename, user=None):
|
||||
"""
|
||||
Import the filename into the db.
|
||||
"""
|
||||
from .plug import BasePluginManager
|
||||
from .const import PLUGINS_DIR, USER_PLUGINS
|
||||
from gramps.cli.user import User
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
if user is None:
|
||||
user = User()
|
||||
(name, ext) = os.path.splitext(os.path.basename(filename))
|
||||
extension = ext[1:].lower()
|
||||
import_list = pmgr.get_reg_importers()
|
||||
if import_list == []:
|
||||
# This might happen if using gramps from outside, and
|
||||
# we haven't loaded plugins yet
|
||||
pmgr.reg_plugins(PLUGINS_DIR, self, None)
|
||||
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
|
||||
import_list = pmgr.get_reg_importers()
|
||||
for pdata in import_list:
|
||||
if extension == pdata.extension:
|
||||
mod = pmgr.load_plugin(pdata)
|
||||
if not mod:
|
||||
for item in pmgr.get_fail_list():
|
||||
name, error_tuple, pdata = item
|
||||
etype, exception, traceback = error_tuple
|
||||
print("ERROR:", name, exception)
|
||||
return False
|
||||
import_function = getattr(mod, pdata.import_function)
|
||||
results = import_function(db, filename, user)
|
||||
return True
|
||||
return False
|
||||
|
||||
## Work-around for databases that need sys refresh (django):
|
||||
def modules_is_set(self):
|
||||
LOG.info("modules_is_set?")
|
||||
if hasattr(self, "_modules"):
|
||||
return self._modules != None
|
||||
else:
|
||||
self._modules = None
|
||||
return False
|
||||
|
||||
def reset_modules(self):
|
||||
LOG.info("reset_modules!")
|
||||
# First, clear out old modules:
|
||||
for key in list(sys.modules.keys()):
|
||||
del sys.modules[key]
|
||||
# Next, restore previous:
|
||||
for key in self._modules:
|
||||
sys.modules[key] = self._modules[key]
|
||||
|
||||
def save_modules(self):
|
||||
LOG.info("save_modules!")
|
||||
self._modules = sys.modules.copy()
|
||||
|
||||
|
||||
@@ -433,6 +433,9 @@ class NameDisplay:
|
||||
self.set_default_format(self.get_default_format())
|
||||
|
||||
def add_name_format(self, name, fmt_str):
|
||||
for num in self.name_formats:
|
||||
if fmt_str in self.name_formats.get(num):
|
||||
return num
|
||||
num = -1
|
||||
while num in self.name_formats:
|
||||
num -= 1
|
||||
@@ -889,6 +892,24 @@ class NameDisplay:
|
||||
name = person.get_primary_name()
|
||||
return self.display_name(name)
|
||||
|
||||
def display_format(self, person, num):
|
||||
"""
|
||||
Return a text string representing the L{gen.lib.Person} instance's
|
||||
L{Name} using num format.
|
||||
|
||||
@param person: L{gen.lib.Person} instance that contains the
|
||||
L{Name} that is to be displayed. The primary name is used for
|
||||
the display.
|
||||
@type person: L{gen.lib.Person}
|
||||
@param num: num of the format to be used, as return by
|
||||
name_displayer.add_name_format('name','format')
|
||||
@type num: int
|
||||
@returns: Returns the L{gen.lib.Person} instance's name
|
||||
@rtype: str
|
||||
"""
|
||||
name = person.get_primary_name()
|
||||
return self.name_formats[num][_F_FN](name)
|
||||
|
||||
def display_formal(self, person):
|
||||
"""
|
||||
Return a text string representing the :class:`~.person.Person`
|
||||
|
||||
@@ -65,13 +65,18 @@ class PlaceDisplay:
|
||||
else:
|
||||
places = places[index:]
|
||||
|
||||
names = [item[0] for item in places]
|
||||
|
||||
if config.get('preferences.place-number'):
|
||||
if len(places) > 1 and int(places[0][1]) == PlaceType.NUMBER:
|
||||
names = names[1:]
|
||||
names[0] = places[0][0] + ' ' + names[0]
|
||||
types = [item[1] for item in places]
|
||||
try:
|
||||
idx = types.index(PlaceType.NUMBER)
|
||||
except ValueError:
|
||||
idx = None
|
||||
if idx is not None and len(places) > idx+1:
|
||||
combined = (places[idx][0] + ' ' + places[idx+1][0],
|
||||
places[idx+1][1])
|
||||
places = places[:idx] + [combined] + places[idx+2:]
|
||||
|
||||
names = [item[0] for item in places]
|
||||
if config.get('preferences.place-reverse'):
|
||||
names.reverse()
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user