Compare commits
225 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e7247af252 | |||
| ed02e39d5d | |||
| e72695ca90 | |||
| d5db6e2b65 | |||
| 1294d53bc1 | |||
| bdaa0d8c59 | |||
| d2deae8ff7 | |||
| a4cbdb34df | |||
| fe87150c14 | |||
| f6b81c9da8 | |||
| e59aa58c63 | |||
| 3e2e8a837f | |||
| c0ff650748 | |||
| 44104671b9 | |||
| afa8e73486 | |||
| 27c38018fa | |||
| 96fcef2a84 | |||
| 7e7dd68b58 | |||
| ab5a810990 | |||
| f7d58f4c28 | |||
| 949296a801 | |||
| 15e033c02c | |||
| 80749afd09 | |||
| 72d8d2d3cf | |||
| 1b7b20756f | |||
| eff15c1ce3 | |||
| b3715efea9 | |||
| cfe8c42d28 | |||
| 7dc532c743 | |||
| 2951a0acf0 | |||
| 6d53c3a91c | |||
| 7ca19214d6 | |||
| 87955ed2e9 | |||
| 9d3f17e377 | |||
| 903069fd34 | |||
| 1a0390f623 | |||
| e9412a2479 | |||
| c615b4dc32 | |||
| 450217a636 | |||
| 9a398cbcfd | |||
| aff888a0b5 | |||
| 71ad5ffb04 | |||
| 100d6d0672 | |||
| d96b6d19b8 | |||
| bf4b3962bc | |||
| 51f44c2fd7 | |||
| 00c74d139a | |||
| 54c3b29793 | |||
| d1ee70a0d2 | |||
| c4f89c4034 | |||
| 8615021d37 | |||
| c3c006c465 | |||
| b389842af1 | |||
| aba0303260 | |||
| 3bba6f57e4 | |||
| f84c2ecf11 | |||
| 7a82b78ff9 | |||
| 39a0d8c648 | |||
| 62f8049d6a | |||
| d65ad470d6 | |||
| be98b673df | |||
| f088d940a6 | |||
| 92328d4332 | |||
| b4e4dbbcf2 | |||
| 4c6c052729 | |||
| 257b091cac | |||
| abcf304ea7 | |||
| dba752c328 | |||
| 0dd2b9d0fd | |||
| 520c81a355 | |||
| 807eab7cd9 | |||
| 2bc5f63406 | |||
| 344dd69a9d | |||
| 757854e566 | |||
| 45d3c43680 | |||
| 732f9fae16 | |||
| c7f2b19784 | |||
| 30628cf6c7 | |||
| 36e43562e7 | |||
| 80b99925bd | |||
| d78aa8cd8d | |||
| 4087ae800c | |||
| fcfecef459 | |||
| 7131eec356 | |||
| 3ada5081b5 | |||
| e4450cb34b | |||
| 97aedaae99 | |||
| 285fbf2c97 | |||
| 6e7e233155 | |||
| 436ca0df98 | |||
| b17c230f56 | |||
| 3cb57426b1 | |||
| 255caf1ab7 | |||
| 7b8666e454 | |||
| 9e9d4e6369 | |||
| 508df3048d | |||
| cb8bf0d00a | |||
| 44180b45e2 | |||
| 03b151b472 | |||
| ec075e360b | |||
| e4cbca4b73 | |||
| 4eda6d1afa | |||
| 496d4e1703 | |||
| 8d5f2bd050 | |||
| 96e4707c89 | |||
| 8fc03f85a1 | |||
| b4b7911405 | |||
| 88373c0eb6 | |||
| e8679a1eed | |||
| b77378d2a1 | |||
| f921bba612 | |||
| 58ffea1537 | |||
| 1ae319ef2a | |||
| 0340337107 | |||
| bb1d59a29d | |||
| d01afb3000 | |||
| a99c02d9a7 | |||
| dd43cde20e | |||
| e356573605 | |||
| 6f7699480d | |||
| 3798175b50 | |||
| 6672230f23 | |||
| 8c35277267 | |||
| 38bfb760a3 | |||
| df48f37a46 | |||
| a02d7d0176 | |||
| 999a3937d1 | |||
| a7e683d909 | |||
| 8e09235351 | |||
| b934b0d424 | |||
| 9cc6e3a05e | |||
| d6dd1dc221 | |||
| 21206af12b | |||
| 6506e85ea9 | |||
| 1d3202710a | |||
| 7078ca18ee | |||
| b1fc676a55 | |||
| 5ef7739c60 | |||
| b4e5bd9eb2 | |||
| e0e19492cd | |||
| 817f4b7205 | |||
| 4c7b24ba30 | |||
| c7d552c238 | |||
| b32e9d812e | |||
| 8da22fcbbf | |||
| 582d61e67e | |||
| c110d9bc23 | |||
| f4966ca793 | |||
| 2d0a5ed03c | |||
| 79074587f3 | |||
| c660ed1728 | |||
| e926934a49 | |||
| b175b5cb60 | |||
| 8fe9069cbb | |||
| 63610d0651 | |||
| 754ac7966c | |||
| 51810ca973 | |||
| b43b0fa77f | |||
| f20dce51e8 | |||
| 254e196b2b | |||
| edc214221e | |||
| adfc1b8aee | |||
| 49f56bcc46 | |||
| 01efa725ce | |||
| 22b7f28edc | |||
| 780d83518d | |||
| 7247073a03 | |||
| e5fedef66a | |||
| 8be3a475d1 | |||
| c167cfa921 | |||
| 9eec554d4a | |||
| c81b3596ec | |||
| 6c2179dc2e | |||
| de1a4fec22 | |||
| f0ebaa3bc1 | |||
| f2bc982c3d | |||
| 3046b0586c | |||
| 375773d657 | |||
| 01060f0b0d | |||
| 36779c1229 | |||
| 5b7f5164db | |||
| 1e9a3841cd | |||
| e6ddedf6c6 | |||
| 325c3f22cc | |||
| 54be8d62f3 | |||
| a40eca36d9 | |||
| 4b17ca4724 | |||
| 69aaec11a5 | |||
| 896b77a165 | |||
| 1b60193f77 | |||
| e667431dd5 | |||
| cc7e4fda85 | |||
| 2490e2d07d | |||
| e5c5a210b4 | |||
| 04a40c7a50 | |||
| 44c8e3c0f0 | |||
| 6f7242a773 | |||
| 358c3fc967 | |||
| f1ca280441 | |||
| 482cecaa7e | |||
| b6c57ab3c3 | |||
| f3b5f75e37 | |||
| 7d9f4dcc80 | |||
| 224748eb96 | |||
| 2aec83f057 | |||
| fd399323a6 | |||
| bb6b3edee2 | |||
| 3f7ea4418c | |||
| efcc115aa7 | |||
| 893c715a61 | |||
| 6bab78df21 | |||
| 29019eed98 | |||
| d8c006e0f7 | |||
| b8438dddeb | |||
| 4ba28c637e | |||
| ae84040bc7 | |||
| 2a0b3afa4b | |||
| 414aac4c7e | |||
| 037e26a5a3 | |||
| 158d3a993b | |||
| 2ef35174d1 | |||
| 3249938b88 | |||
| 9b18083e48 | |||
| 04bdeb8321 | |||
| 67061d58e2 |
@@ -64,6 +64,8 @@ Martin Hawlisch martin.hawlisch@gmx.de
|
||||
|
||||
Nick Hall nick__hall@hotmail.com
|
||||
|
||||
Paul Culley paulr2787@gmail.com
|
||||
|
||||
Peter Landgren peter.talken@telia.com
|
||||
|
||||
Raphael Ackermann raphael.ackermann@gmail.com
|
||||
|
||||
@@ -1,243 +1,527 @@
|
||||
2018-07-24 Nick Hall <nick-h@gramps-project.org>
|
||||
2019-08-08 prculley <paulr2787@gmail.com>
|
||||
|
||||
* setup.py: Update development status for new release
|
||||
* AUTHORS, ChangeLog, FAQ, NEWS, po/ChangeLog, po/gramps.pot:
|
||||
Prepare for Release 5.0.2
|
||||
|
||||
2018-07-24 Nick Hall <nick-h@gramps-project.org>
|
||||
2019-08-08 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/gramps.pot: Update translation template for new release
|
||||
* gramps/gen/plug/_gramplet.py: Fix some Gramplets not updating
|
||||
during tree changes after db change. (#865) Fixes #11234
|
||||
|
||||
2018-07-22 niememat <niememat@gmail.com>
|
||||
2019-08-08 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
* gramps/plugins/gramplet/events.py: Fix Events Grampslet for bad
|
||||
sort order on dates/ages (#867) Fixes #7616
|
||||
|
||||
2018-07-01 John Ralls <jralls@ceridwen.us>
|
||||
2019-08-08 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/clipboard.py,
|
||||
gramps/gui/editors/displaytabs/buttontab.py,
|
||||
gramps/gui/editors/displaytabs/surnametab.py,
|
||||
gramps/gui/filters/_searchbar.py,
|
||||
gramps/gui/filters/sidebar/_sidebarfilter.py, gramps/gui/utils.py,
|
||||
gramps/gui/views/navigationview.py,
|
||||
gramps/gui/widgets/grampletpane.py,
|
||||
gramps/gui/widgets/interactivesearchbox.py,
|
||||
gramps/gui/widgets/multitreeview.py,
|
||||
gramps/gui/widgets/styledtexteditor.py: Correct binary test logic
|
||||
for primary mask. state & get_primary_mask(another) tested (state & (primary |
|
||||
other)), which will be true if state matches *either* primary *or*
|
||||
other, but what is wanted in a not-negated test is state matching
|
||||
all bits of (primary | other). match_primary_mask does that. On the other hand there are also cases of "not state & (primary |
|
||||
other)". no_match_primary_mask handles that, returning true if
|
||||
state matches none of the bits in (primary | other). Fixes #10646.
|
||||
* gramps/gui/editors/displaytabs/backreflist.py,
|
||||
gramps/gui/editors/displaytabs/backrefmodel.py: Fix References Tab
|
||||
to update on Deletes of items when editor is open (#864) Fixes #11231
|
||||
|
||||
2018-06-21 prculley <paulr2787@gmail.com>
|
||||
2019-08-08 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/glade/baseselector.glade,
|
||||
gramps/gui/selectors/baseselector.py: Fix BaseSelector to avoid long
|
||||
delay before display on large trees Fixes #10634
|
||||
* data/tests/imp_notetest_dfs.gramps,
|
||||
gramps/plugins/lib/libgedcom.py: Fix GEDCOM import for better
|
||||
support of TMG (#861) Fixes #11224
|
||||
|
||||
2018-05-06 SNoiraud <serge.noiraud@laposte.net>
|
||||
2019-08-07 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/plug/export/_exportoptions.py: Export options > Gui
|
||||
alignment issue Fixes #10576
|
||||
* gramps/gui/editors/__init__.py: Fix Edit Link 'New' button to work
|
||||
(#863) Fixes #11225
|
||||
|
||||
2018-07-22 niememat <niememat@gmail.com>
|
||||
2019-08-07 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/fi.po: New fix translation in Finnish
|
||||
* data/tests/exp_sample_ged.ged, data/tests/imp_sample.ged,
|
||||
data/tests/imp_sample.gramps,
|
||||
gramps/plugins/export/exportgedcom.py,
|
||||
gramps/plugins/lib/libgedcom.py: Fix GEDCOM importer to properly
|
||||
handle multiple surnames per 5.5.1 (#862) Fixes #11228
|
||||
|
||||
2018-07-22 Espen Berg <espenbe@gmail.com>
|
||||
2019-08-01 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* po/nb.po: Revised Norwegian bokmål
|
||||
* gramps/plugins/webreport/common.py,
|
||||
gramps/plugins/webreport/place.py: Narrative web: Sort problem with
|
||||
places. (#854) * Narrative web: Sort problem with places. Fixes #10868. Places list is not sorted depending on the selected language. If you start gramps in english or another language then try to
|
||||
generated a narrative web report in another language, the navigation
|
||||
alphabet is incorrect. This is true for the place list and the
|
||||
person list. The problem was related to pyICU. * Narrative web: some pylint improvement.
|
||||
|
||||
2018-07-22 Espen Berg <espenbe@gmail.com>
|
||||
2019-08-01 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/nb.po: Revised Norwegian bokmål
|
||||
* gramps/gui/navigator.py, gramps/gui/viewmanager.py: Fix Navigator
|
||||
sidebar so can change view type with proper resize (#853) Fixes #6422, #11164
|
||||
|
||||
2018-07-22 niememat <niememat@gmail.com>
|
||||
2019-07-31 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
* gramps/gui/views/treemodels/flatbasemodel.py: fix crash when using
|
||||
sidebar filter and merging in another view (#858) Fixes #11089, #11064, #11134
|
||||
|
||||
2018-07-21 Nick Hall <nick-h@gramps-project.org>
|
||||
2019-07-31 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/glade/editplace.glade,
|
||||
gramps/gui/glade/editplaceref.glade: Fix dialog button order on
|
||||
non-Mac systems Resolves #10585.
|
||||
* gramps/plugins/drawreport/ancestortree.py,
|
||||
gramps/plugins/lib/librecurse.py: Fix AncestorTree so add siblings
|
||||
to center person works (#852) Fixes #11215
|
||||
|
||||
2018-07-21 De Tran <trande@gmail.com>
|
||||
2019-07-31 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/vi.po: Fix and update Vietnamese translation Resolves #10681.
|
||||
* gramps/gen/config.py, gramps/gen/plug/docgen/graphdoc.py,
|
||||
gramps/grampsapp.py, gramps/gui/configure.py: Fix graphs on Windows
|
||||
for font selection not working (#849) Fixes #11212
|
||||
|
||||
2018-07-21 Sveinn í Felli <sv1@fellsnet.is>
|
||||
2019-07-31 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/is.po: Update Icelandic translation
|
||||
* gramps/plugins/db/dbapi/dbapi.py: Fix dbapi reindex_reference_maps
|
||||
tool to properly close transaction (#847) Fixes #11195
|
||||
|
||||
2018-05-10 jose1711 <jose1711@gmail.com>
|
||||
2019-07-10 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/sk.po: Fix and update Slovak translation
|
||||
* gramps/gui/widgets/selectionwidget.py: Fix zoom via mouse wheel in
|
||||
media event editor selectionwidget (#835) also fixes zooming with scroll bars always present Fixes #11198
|
||||
|
||||
2018-05-11 jose1711 <jose1711@gmail.com>
|
||||
2019-03-20 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* gramps/plugins/rel/rel_cs.py: Fix typo in translation
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2018-07-20 niememat <niememat@gmail.com>
|
||||
2019-06-14 Mattkmmr <49940207+Mattkmmr@users.noreply.github.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
* gramps/plugins/gramplet/metadataviewer.py: Fix metadataviewer.py
|
||||
(#823) Fix so that metadata is actually detected and displayed (signal was
|
||||
not getting detected).
|
||||
|
||||
2018-07-20 niememat <niememat@gmail.com>
|
||||
2019-06-12 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
* po/fi.po: Update finnish translation
|
||||
|
||||
2018-07-18 niememat <niememat@gmail.com>
|
||||
2019-06-11 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
* mac/gramps.modules: Fix graphviz and exiv2 download URLs.
|
||||
|
||||
2018-07-15 Luigi Toscano <luigi.toscano@tiscali.it>
|
||||
2019-06-11 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* po/it.po: Update Italian translation
|
||||
* mac/gramps.modules: Update dependency versions and download paths.
|
||||
|
||||
2018-07-13 Nick Hall <nick-h@gramps-project.org>
|
||||
2019-06-10 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* po/en_GB.po: Update English (British) translation
|
||||
* gramps/gen/utils/place.py, gramps/gen/utils/test/place_test.py,
|
||||
gramps/plugins/view/geoplaces.py: Avoid comma in a lat/lon entry
|
||||
field. (#812) * Avoid comma in a lat/lon entry field. * Be more precise on the tooltip text. * conv_lat_lon should not accept comma in lat/lon * Tests failed with comma in lat/lon * geoplaces fails to center if bad lat/lon
|
||||
|
||||
2018-07-13 De Tran <trande@gmail.com>
|
||||
2019-06-10 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* po/vi.po: Update Vietnamese translation
|
||||
* gramps/gui/editors/displaytabs/surnametab.py,
|
||||
gramps/gui/widgets/monitoredwidgets.py: Avoid invalid characters in
|
||||
the entry field (#811) In this patch: 1 - If you copy/paste strings from another application, you can add CR, LF, TAB and other special characters. I remove
|
||||
them. 2 - suppress all leading and trailing spaces for these
|
||||
entry field.
|
||||
|
||||
2018-07-13 Kaj Mikkelsen <kmi@vgdata.dk>
|
||||
2019-06-10 milotype <43657314+milotype@users.noreply.github.com>
|
||||
|
||||
* po/da.po: Update Danish translation
|
||||
* po/hr.po: Update Croatian translation (#824)
|
||||
|
||||
2018-07-13 Lajos Nemeséri <nemeseril@gmail.com>
|
||||
2019-06-09 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/hu.po: Update Hungarian translation
|
||||
* gramps/gui/displaystate.py, gramps/gui/views/listview.py: Fix
|
||||
crash for multiple deletes in one transaction (#814) Fixes #11117
|
||||
|
||||
2018-07-07 Fedik <getthesite@gmail.com>
|
||||
2019-06-10 Ed Bennett <pyedward@swansea.ac.uk>
|
||||
|
||||
* po/uk.po: Update Ukrainian translation for Gramps
|
||||
* gramps/gen/relationship.py, po/ar.po, po/bg.po, po/br.po,
|
||||
po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_GB.po,
|
||||
po/eo.po, po/es.po, po/fi.po, po/fr.po, po/ga.po, po/he.po,
|
||||
po/hr.po, po/hu.po, po/is.po, po/it.po, po/ja.po, po/lt.po,
|
||||
po/mk.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt_BR.po,
|
||||
po/pt_PT.po, po/ro.po, po/ru.po, po/sk.po, po/sl.po, po/sq.po,
|
||||
po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po, po/tr.po, po/uk.po,
|
||||
po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po: Adjust translation
|
||||
strings for unmarried partners to give correct text in English
|
||||
(#818) Fixes #11109
|
||||
|
||||
2018-07-05 RossGammon <upstream@the-gammons.net>
|
||||
2019-05-07 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* debian/changelog, debian/copyright,
|
||||
debian/patches/hardcoded_path_person_rules_test.patch,
|
||||
debian/patches/series: Update Debian directory after Gramps
|
||||
5.0.0-rc1 release. (#634)
|
||||
* mac/gramps.modules: Disable vala for gexiv2, it breaks
|
||||
introspection.
|
||||
|
||||
2018-07-02 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
2019-01-05 caigner <github@sys-admin.at>
|
||||
|
||||
* po/de.po: Fix not matching translation csv import/export
|
||||
* gramps/gui/views/navigationview.py, po/ar.po, po/bg.po, po/br.po,
|
||||
po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_GB.po,
|
||||
po/eo.po, po/es.po, po/fi.po, po/fr.po, po/ga.po, po/gramps.pot,
|
||||
po/he.po, po/hr.po, po/hu.po, po/is.po, po/it.po, po/ja.po,
|
||||
po/lt.po, po/mk.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po,
|
||||
po/pt_BR.po, po/pt_PT.po, po/ro.po, po/ru.po, po/sk.po, po/sl.po,
|
||||
po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po, po/tr.po,
|
||||
po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po: changed
|
||||
'Edit ->Set Home Person' to 'Edit -> Set Home Person'
|
||||
|
||||
2018-07-02 Zdeněk Hataš <zdenek.hatas@gmail.com>
|
||||
2019-04-14 système <romjerome@users.noreply.github.com>
|
||||
|
||||
* po/fr.po: typo on french translation
|
||||
|
||||
2019-04-13 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/lib/libgedcom.py: Fix failure after Gedcom import
|
||||
if missing objects were found (#807) Fixes #11082
|
||||
|
||||
2019-03-26 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/gen/utils/maclocale.py: [maclocale] Fix none type has no
|
||||
len(). Fixes #11075
|
||||
|
||||
2019-03-17 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* data/tests/imp_sample.gramps, gramps/plugins/lib/libgedcom.py: Fix
|
||||
Gedcom import so it doesn't create completely empty Birth events
|
||||
(#799) Fixes #10145 Note: a completely empty birth event is removed by Check and Repair;
|
||||
this is wrong in that sometimes we know a person is born, but not
|
||||
date/place. In Gedcom this is indicated by "1 BIRT Y" lines. So this PR adds a description to the birth event. This is not an
|
||||
issue for other event types, the C&R tool sees the non-default type
|
||||
and leaves it alone, but birth is the default type.
|
||||
|
||||
2019-03-17 milotype <43657314+milotype@users.noreply.github.com>
|
||||
|
||||
* po/hr.po: Update Croatian translation (#803) update with current maint50 pot file
|
||||
|
||||
2019-03-16 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/view/relview.py: Fix Relationship view so ages are
|
||||
according to Preferences (#798) Fixes #11040
|
||||
|
||||
2019-03-16 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/displaytabs/personeventembedlist.py: Fix Person
|
||||
Editor Events to properly update during external changes (#797) like Event delete or update. Fixes #11051 Looks like someone simply forgot to register the handles with the
|
||||
callman... I checked other similar cases and did not see any other issues.
|
||||
|
||||
2019-03-16 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* data/tests/exp_sample_ged.ged,
|
||||
data/tests/imp_FTM_16dec2015a-mod1.gramps,
|
||||
data/tests/imp_MediaTest.gramps, data/tests/imp_sample.gramps,
|
||||
gramps/plugins/export/exportgedcom.py,
|
||||
gramps/plugins/lib/libgedcom.py: Gedcom fixes for mime and finding
|
||||
media (#795) * Fix Gedcom import/export for more comprehensive mime types Fixes #11041 * Fix Gedcom import to better find media files Issue #11041 * Fix Gedcom test files for media mime and error location message
|
||||
|
||||
2019-03-17 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/lib/maps/geography.py: Unhandled exception in
|
||||
Geography editor (#793) Fixes #11048 better pylint score remove unused code
|
||||
|
||||
2019-03-16 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/filters/rules/person/_relationshippathbetween.py: Fix
|
||||
relationshippathbetween filter rule when parent is missing (#792) Fixes #11049 Another HandleError issue, this one hidden by the raw except. Filter
|
||||
rule just did not work if a family in the path had a missing parent.
|
||||
|
||||
2019-03-16 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/plug/docgen/graphdoc.py: Fix Graphs that use graphdoc
|
||||
pdf via Ghostscript with multi-page (#791) for poor font rendering of some characters (thanks to Ken Sharp) Fixes #11047
|
||||
|
||||
2019-03-16 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* example/gramps/data.gramps, example/gramps/example.gramps: Fix
|
||||
example gramps files so media is found (#785) Fixes #11015 On Windows the location of the example files is "c:\program
|
||||
files\grampsaio64-5.0.1\share\doc\gramps\example\gramps". On my Ubuntu install from the .deb file these files are in
|
||||
"/usr/share/doc/gramps/example/gramps" Since the default GRAMPS_RESOURCES value for each system is the
|
||||
'share', to find the media files we need to append
|
||||
"/doc/gramps/example/gramps" to have the example files work
|
||||
properly.
|
||||
|
||||
2019-03-16 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/tool/finddupes.py: fix finddupes tool when run from
|
||||
Match Threshold screen again (#790) after merge. Avoids HandleError because potentials dict is not
|
||||
cleared. Fixes #11044
|
||||
|
||||
2019-01-17 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2019-02-27 Bernard Banko <beernarrd@gmail.com>
|
||||
|
||||
* po/sl.po: Slovenian translation correction
|
||||
|
||||
2019-02-16 système <romjerome@users.noreply.github.com>
|
||||
|
||||
* po/fr.po: update french translation
|
||||
|
||||
2019-02-14 système <romjerome@users.noreply.github.com>
|
||||
|
||||
* po/fr.po: update (partial) french translation
|
||||
|
||||
2019-02-14 système <romjerome@users.noreply.github.com>
|
||||
|
||||
* po/fr.po: merge with last template
|
||||
|
||||
2019-02-14 système <romjerome@users.noreply.github.com>
|
||||
|
||||
* po/fr.po: bug 10841: Typos in the French translation
|
||||
|
||||
2019-02-14 système <romjerome@users.noreply.github.com>
|
||||
|
||||
* po/fr.po: fix a typo
|
||||
|
||||
2019-02-13 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* data/tests/imp_MediaTest.gramps, gramps/plugins/lib/libgedcom.py:
|
||||
Fix Gedcom import for multiple notes on OBJE (MULTIMEDIA_LINK)
|
||||
(#782) Fixes #10277
|
||||
|
||||
2019-02-13 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/db/dbapi/dbapi.py,
|
||||
gramps/plugins/importer/importxml.py: Deal with SQLite db corrupted
|
||||
by None name mapping (#784) Fixes #11011
|
||||
|
||||
2019-02-13 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/importer/importxml.py: Fix XML import to add tags
|
||||
to Events, Sources, Places, Repos, Cits (#780) Fixes #11004
|
||||
|
||||
2019-02-13 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/displaytabs/eventembedlist.py,
|
||||
gramps/gui/editors/displaytabs/personrefembedlist.py,
|
||||
gramps/gui/editors/displaytabs/placerefembedlist.py,
|
||||
gramps/gui/editors/editcitation.py,
|
||||
gramps/gui/editors/editevent.py,
|
||||
gramps/gui/editors/editeventref.py,
|
||||
gramps/gui/editors/editfamily.py, gramps/gui/editors/editperson.py:
|
||||
Fix for delete of a ref'd primary obj while editing an added obj.
|
||||
(#779) Also fixed to update the ref'd obj on changes from outside the
|
||||
editor. Fixes #10999, #11000, #11001, #11002
|
||||
|
||||
2019-02-13 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/filters/_genericfilter.py,
|
||||
gramps/gui/views/treemodels/treebasemodel.py: Fix Place Tree view
|
||||
when using enclosed by sidebar filter (#764) the filter was incorrectly using a standard place cursor instead of
|
||||
the tree cursor. Fixes #10948
|
||||
|
||||
2019-02-10 Bernard Banko <beernarrd@gmail.com>
|
||||
|
||||
* po/sl.po: Slovenian language update
|
||||
|
||||
2019-02-10 Luigi Toscano <luigi.toscano@tiscali.it>
|
||||
|
||||
* po/it.po: Italian translation updates - restore few strings from the welcome Gramplet that got lost after the split of a messages in smaller messages; - fix few errors.
|
||||
|
||||
2019-02-10 Luigi Toscano <luigi.toscano@tiscali.it>
|
||||
|
||||
* po/it.po: Refresh the Italian po file
|
||||
|
||||
2019-02-02 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/editfamily.py: Fix EditFamily for adding a
|
||||
child to single parent family with (#777) Surname guessing set to combination. Fixes #10997
|
||||
|
||||
2019-01-22 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/drawreport/descendtree.py: Fix Descendent Tree
|
||||
report for crash when person has multiple (#773) families and one of them doesn't have a spouse. Fixes #10983, #10971, #10661
|
||||
|
||||
2019-01-22 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* po/de.po: Update German translation
|
||||
|
||||
2019-01-21 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/db/dbapi/dbapi.py: Fix Name editor crash after
|
||||
clearing a group_as name on dbapi dbs (#771) Fixes #10981
|
||||
|
||||
2019-01-22 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/gen/merge/mergefamilyquery.py,
|
||||
gramps/gui/merge/mergecitation.py, gramps/gui/merge/mergeevent.py,
|
||||
gramps/gui/merge/mergefamily.py, gramps/gui/merge/mergemedia.py,
|
||||
gramps/gui/merge/mergenote.py, gramps/gui/merge/mergeperson.py,
|
||||
gramps/gui/merge/mergeplace.py,
|
||||
gramps/gui/merge/mergerepository.py,
|
||||
gramps/gui/merge/mergesource.py,
|
||||
gramps/plugins/test/db_undo_and_signals_test.py: We should stay on
|
||||
the selected item in list views: (#770) Fixes #10966 When we try to merge two objects, we should stay on the selected row
|
||||
in list views. This problem occurs for persons, families, events,
|
||||
places, sources, citations, repositories, media and notes. Another problem: In case we select the first family and select the
|
||||
gramps_id of the second family, the new gramps_id is ignored:
|
||||
problem in MergeFamilyQuery
|
||||
|
||||
2019-01-21 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/graph/gvrelgraph.py: Fix Relationship Graph; extra
|
||||
people when using filters & subgraphs (#769) subgraph option wasn't checking parents against filtered results Fixes #10947
|
||||
|
||||
2019-01-22 Christian Aigner <github@sys-admin.at>
|
||||
|
||||
* po/de.po: [German] Change Text on Settings -> Colour (#767) * Unified the labels. The overall appearance looks now a bit cleaner. * Fixed a grammatical bug (das -> dass)
|
||||
|
||||
2019-01-21 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/display/place.py: fix Place Format Editor file
|
||||
save/load for difficult names (#766) Fixes #10949
|
||||
|
||||
2019-01-22 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/graph/gvfamilylines.py: Not all place types appears
|
||||
on family lines Graph (#763)
|
||||
|
||||
2019-01-22 Christian Aigner <github@sys-admin.at>
|
||||
|
||||
* po/de.po: Corrections in 'Tip of Day'; changed 'Schlussnotizen' to
|
||||
'Quellennachweis' (#753)
|
||||
|
||||
2019-01-12 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2019-01-12 Sam Manzi <manzi.sam@gmail.com>
|
||||
|
||||
* gramps/plugins/tool/sortevents.py: Remember location of Sort
|
||||
Events Tool (#750) Issue #9795
|
||||
|
||||
2019-01-11 Zdeněk Hataš <zdenek.hatas@gmail.com>
|
||||
|
||||
* po/cs.po: Update Czech translation
|
||||
|
||||
2018-07-02 Pier Luigi Cinquantini <plcinquantini@gmail.com>
|
||||
2019-01-05 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* po/eo.po: Update Esperanto translation
|
||||
* gramps/gui/editors/editmedia.py: Fix Media editor when using
|
||||
double click the preview of added media (#752) Fixes #10923
|
||||
|
||||
2018-07-01 niememat <niememat@gmail.com>
|
||||
2019-01-05 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
* po/de.po: update German translation
|
||||
|
||||
2018-06-30 Paulo Henrique Paiva de Moraes <paulohpmoraes@gmail.com>
|
||||
2019-01-05 niememat <niememat@gmail.com>
|
||||
|
||||
* po/pt_BR.po: Update Brazilian Portuguese translation
|
||||
* po/fi.po: Fix and updated translation in Finnish
|
||||
|
||||
2018-06-30 vantu5z <vantu5z@mail.ru>
|
||||
2019-01-04 P Ekholm <par.ekholm@pekholm.se>
|
||||
|
||||
* po/ru.po: update Russian translation substantially just merge with
|
||||
latest template
|
||||
* po/sv.po: Update Swedish translation
|
||||
|
||||
2018-06-29 Nick Hall <nick-h@gramps-project.org>
|
||||
2019-01-02 prculley <paulr2787@gmail.com>
|
||||
|
||||
* po/ar.po, po/bg.po, po/br.po, po/ca.po, po/cs.po, po/da.po,
|
||||
po/de.po, po/el.po, po/en_GB.po, po/eo.po, po/es.po, po/fi.po,
|
||||
po/fr.po, po/ga.po, po/he.po, po/hr.po, po/hu.po, po/is.po,
|
||||
po/it.po, po/ja.po, po/lt.po, po/mk.po, po/nb.po, po/nl.po,
|
||||
po/nn.po, po/pl.po, po/pt_BR.po, po/pt_PT.po, po/ro.po, po/sk.po,
|
||||
po/sl.po, po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po,
|
||||
po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po:
|
||||
Merge translation files with the latest template
|
||||
* po/gramps.pot: Update gramps.pot
|
||||
|
||||
2018-06-21 Paul Culley <paulr2787@gmail.com>
|
||||
2019-01-01 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/filters/sidebar/_sidebarfilter.py: Fix Custom filter
|
||||
update when created via sidebar (#630) Fixes #10620 Adding a filter via the sidebar editor originally only updated the
|
||||
current view, other associated views did not see the new filter.
|
||||
First noticed in People views. This causes the 'filters-changed' to
|
||||
be emitted which updates all associated view.
|
||||
* po/gramps.pot: Revert "update gramps.pot", the update_po.py
|
||||
doesn't work with glade files on Windows This reverts commit fcfecef459b37cbba0c61ae18f19f93363124980.
|
||||
|
||||
2018-06-21 Paul Culley <paulr2787@gmail.com>
|
||||
2019-01-01 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/widgets/grampletpane.py: Fix Gramplet configure
|
||||
(View/Configure) for large options (#629) When a Gramplet uses a BooleanListOption with a lot of entries,
|
||||
along with other options, all the options take on the size of the
|
||||
large BooleanListOption, which doesn't work well at all.
|
||||
* po/gramps.pot: update gramps.pot
|
||||
|
||||
2018-06-22 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
2019-01-01 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/drawreport/statisticschart.py: Statistics Charts
|
||||
crashes with IndexError (#627) Fixes #010626 In statistics charts, get_month is only localized and the calendar
|
||||
is unused. If we have an Extra (Sansculottides) month in the french
|
||||
republican calendar (index 13), we have this IndexError because the
|
||||
gregorian calendar is always used and contains only 12 values.
|
||||
* po/update_po.py: Fix update_po.py to run on Windows
|
||||
|
||||
2018-06-10 John Ralls <jralls@ceridwen.us>
|
||||
2018-12-31 caigner <github@sys-admin.at>
|
||||
|
||||
* mac/gramps.accel: [Mac] Change accel for Undo History. So that it doesn't conflict with a system binding for hiding the
|
||||
window. Fixes #10619.
|
||||
* po/de.po: German translation corrections
|
||||
|
||||
2018-06-09 Paul Culley <paulr2787@gmail.com>
|
||||
2018-12-30 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* gramps/gui/plug/_guioptions.py: Fix Family Lines/Family Colors
|
||||
picker for bad transient parent (#625) Fixes #10623
|
||||
* po/de.po: update German translation
|
||||
|
||||
2018-06-09 Paul Culley <paulr2787@gmail.com>
|
||||
2018-12-29 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/gen/db/utils.py: Fix import_as_dict to utilize user
|
||||
gramps_id prefixes (#626) Issue #10622 Found when comparing dbs with large prefixes 'I%05d'; using database
|
||||
differences or import_merge addons.
|
||||
* gramps/gui/editors/editplace.py,
|
||||
gramps/gui/editors/editplaceref.py: Avoid leading and trailing
|
||||
spaces when copy/paste (#747) coordinates from a map provider. Fixes #10937
|
||||
|
||||
2018-06-09 Paul Culley <paulr2787@gmail.com>
|
||||
2018-12-28 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/plugins/db/bsddb/write.py: Fix error when opening bsddb db
|
||||
in read-only mode (#624) Fixes #10615 BSDDB had errors when trying to open in read-only mode.
|
||||
* gramps/gui/widgets/fanchart.py,
|
||||
gramps/plugins/docgen/cairodoc.py,
|
||||
gramps/plugins/lib/maps/messagelayer.py,
|
||||
gramps/plugins/view/pedigreeview.py: Set correct font resolution for
|
||||
Mac when drawing text directly to cairo. (#745) Fixes #0010924
|
||||
|
||||
2018-06-09 Paul Culley <paulr2787@gmail.com>
|
||||
2018-12-28 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* gramps/gen/db/generic.py: Fix dbapi dbs for closeing read-only db
|
||||
crash (#623) Fixes #10613 The sqlite (and other dbapi dbs) tried to save their metadata on a
|
||||
close operation, which doesn't work for read-only dbs.
|
||||
* po/sv.po: Add some untranslated strings in po/sv.po
|
||||
|
||||
2018-06-09 Paul Culley <paulr2787@gmail.com>
|
||||
2018-12-28 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* gramps/gui/viewmanager.py: Fix menus when operating with read-only
|
||||
db (#622) Fixes #10614 An earlier attempt to deal with closed dbs messed up the read-only
|
||||
ActionGroup settings. This corrects that situation.
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2018-06-02 Sam Manzi <manzi.sam@gmail.com>
|
||||
2018-12-26 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/proxy/living.py: Fix Name formats to show all parts
|
||||
(#608) Fixes #10420 Allows reports to use the name format specified by the user.
|
||||
* po/da.po: remove crlf line endings on da.po
|
||||
|
||||
2018-06-01 Paul Culley <paulr2787@gmail.com>
|
||||
2018-12-24 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/gui/dbloader.py, gramps/gui/plug/_guioptions.py,
|
||||
gramps/gui/viewmanager.py: Fix dialogs for crash when canceling via
|
||||
'x' (#620) * Fix import dialog for crash when canceling via 'x' Fixes #10607 * Fix 'Make Backup' dialog for crash on 'x' close Issue #10607 * Fix Family Lines/Family Colors/add dialog crash on close with 'x' Issue #10607
|
||||
* mac/gramps_launcher.py: Remove extraneous setting of
|
||||
GTK_IM_MODULE_FILE. Fixes #10929
|
||||
|
||||
2018-05-28 niememat <niememat@gmail.com>
|
||||
2018-12-22 Zdeněk Hataš <zdenek.hatas@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
* po/cs.po: Update Czech translation
|
||||
|
||||
2018-05-20 John Ralls <jralls@ceridwen.us>
|
||||
2018-12-21 RossGammon <upstream@the-gammons.net>
|
||||
|
||||
* mac/Info.plist, mac/gramps.modules: Release 5.0.0-rc1 on Mac.
|
||||
* debian/changelog, debian/copyright: Update debian files after
|
||||
5.0.1 release (#744)
|
||||
|
||||
2018-05-20 John Ralls <jralls@ceridwen.us>
|
||||
2018-12-20 prculley <paulr2787@gmail.com>
|
||||
|
||||
* mac/gramps.modules: Remove obsolete omeat-python-modules
|
||||
dependencies.
|
||||
* gramps/gen/const.py, gramps/version.py: Bump to 5.0.2
|
||||
|
||||
2018-05-20 prculley <paulr2787@gmail.com>
|
||||
2018-11-15 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* Bump to v5.0.0-rc2
|
||||
* po/sv.po: Update po/sv.po - all strings complete
|
||||
|
||||
2018-11-14 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-14 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-13 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-12 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-11 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-10 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-09 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-08 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-08 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-08 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-08 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-07 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update po/sv.po
|
||||
|
||||
2018-11-07 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* Update po/sv.po
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ Gramps is a [http://en.wikipedia.org/wiki/Gtk GTK] application. Gramps needs to
|
||||
|
||||
The Linux Genealogy CD can function as a live CD that you boot directly from. You can then run Linux and Gramps off the CD, even if your computer is entirely Windows.
|
||||
|
||||
An experimental Windows installer is available, however we do not have the manpower to offer support for Windows. A windows mailing list is available however and we do do our best to solve windows related problems.
|
||||
An Windows installer is available for 32 and 64 bit versions of windows from Windows versions 7 through 10. As with all other support, we do do our best to solve windows related problems.
|
||||
|
||||
|
||||
8. Does it work with the Mac?
|
||||
@@ -145,7 +145,7 @@ This present version of Gramps (2.2.x) does not appear to have been ported by th
|
||||
|
||||
9. What are the Minimum Specs to run Gramps?
|
||||
|
||||
We would recommend at least an 800x600 video display. For Gramps 2.0, the memory requirements have been reduced, and Gramps can run quite efficiently on a 256MB system, holding considerably more people. A system with 512MB should be able to hold around 200,000 people. Disk space requirements for databases are however considerably larger, with a typical database being several megabytes in size. For 120.000 people you must consider already 530Mb for the database. Pictures are stored on disk separately, so a large harddisk is necessary.
|
||||
We would recommend at least an 800x600 video display. For Gramps 5.x, Gramps can run quite efficiently on a 3GB memory system. A system with that much RAM should be able to hold more than 200,000 people. Disk space requirements for databases are however considerably larger, with a typical database being several megabytes in size. For 120.000 people you must consider already 530Mb for the database. Pictures are stored on disk separately, so a large harddisk is necessary.
|
||||
|
||||
|
||||
==Preferences==
|
||||
@@ -181,7 +181,7 @@ The nice thing about standards is that there never is a shortage of them. Gramps
|
||||
|
||||
15. How do I import data from another genealogy program into Gramps?
|
||||
|
||||
The best way is to create a new gramps database file (.grdb), and select the import option in the file menu. Here you select the GEDCOM you generated with the other program, and import it.
|
||||
The best way is to create a new gramps database file, and select the import option in the file menu. Here you select the GEDCOM you generated with the other program, and import it.
|
||||
|
||||
|
||||
16. Can I install Gramps on a Linux Web Server and use it via a web browser? This would enable my relations worldwide to access and update it.
|
||||
@@ -315,7 +315,7 @@ gramps-devel@lists.sf.net :-)
|
||||
The next best thing would be to submit a good bug report. This can be done in
|
||||
one of the two ways: (1) send your report to gramps-bugs@lists.sf.net
|
||||
or (2) file your report with the bug tracker system at
|
||||
http://bugs.gramps-project.org (this function is also
|
||||
https://gramps-project.org/bugs/ (this function is also
|
||||
available by selecting "Help->Report a bug" from gramps main menu).
|
||||
|
||||
A good bug report would include:
|
||||
|
||||
@@ -1,3 +1,194 @@
|
||||
2018-08-08
|
||||
Version 5.0.2
|
||||
Update translations: cs, da, de, fi, fr, hr, it, ru, sl, sv
|
||||
* Fix some Gramplets not updating during tree changes after db change.
|
||||
* Fix Events Grampslet for bad sort order on dates/ages
|
||||
* Fix References Tab to update on Deletes of items when editor is open
|
||||
* Fix GEDCOM import for better support of TMG
|
||||
* Fix Edit Link 'New' button to work
|
||||
* Fix GEDCOM importer to properly handle multiple surnames per 5.5.1
|
||||
* Narrative web: Sort problem with places.
|
||||
* Fix Navigator sidebar so can change view type with proper resize
|
||||
* Fix crash when using sidebar filter and merging in another view
|
||||
* Fix AncestorTree so add siblings to center person works
|
||||
* Fix graphs on Windows for font selection not working
|
||||
* Fix dbapi reindex_reference_maps tool to properly close transaction
|
||||
* Fix zoom via mouse wheel in media event editor selectionwidget, also fixes
|
||||
zooming with scroll bars always present
|
||||
* Fix metadata viewer so that metadata is actually detected and displayed
|
||||
* Avoid comma in a lat/lon entry field.
|
||||
* Avoid invalid characters and leading or trailing spaces in the entry field
|
||||
* Fix crash for multiple deletes in one transaction
|
||||
* Adjust translation strings for unmarried partners to give correct text in English
|
||||
* Fix failure after Gedcom import if missing objects were found
|
||||
* Mac: Fix none type has no len() error.
|
||||
Set correct font resolution when drawing text directly to cairo.
|
||||
* Fix Gedcom import so it doesn't create completely empty Birth events
|
||||
* Fix Relationship view so ages are according to Preferences
|
||||
* Fix Person Editor Events to properly update during external changes like
|
||||
Event delete or update.
|
||||
* Gedcom import/export fixes for mime and finding media
|
||||
* Fix Unhandled exception in Geography editor
|
||||
* Fix relationship path between filter rule when parent is missing
|
||||
* Fix Graphs that use graphdoc pdf via Ghostscript with multi-page for poor
|
||||
font rendering of some characters
|
||||
* Fix finddupes tool when run from Match Threshold screen again after merge.
|
||||
* Fix Gedcom import for multiple notes on OBJE (MULTIMEDIA_LINK)
|
||||
* Deal with SQLite db corrupted by None name mapping
|
||||
* Fix XML import to add tags to Events, Sources, Places, Repos, Cits when
|
||||
requested.
|
||||
* Fix for delete of a referenced primary obj while editing an added obj.
|
||||
Also fixed to update the referenced obj on changes from outside the editor.
|
||||
* Fix Place Tree view when using enclosed by sidebar filter
|
||||
* Fix EditFamily for adding a child to single parent family with Surname
|
||||
guessing set to combination.
|
||||
* Fix Descendent Tree report for crash when person has multiple families
|
||||
and one of them doesn't have a spouse.
|
||||
* Fix Name editor crash after clearing a group_as name on dbapi dbs
|
||||
* When we merge two objects:
|
||||
We should stay on the selected row in list views.
|
||||
In case we select the first family and select the gramps_id of the second
|
||||
family, the new gramps_id is ignored
|
||||
* Fix Relationship Graph; extra people when using filters & subgraphs
|
||||
* Fix Place Format Editor file save/load for difficult names
|
||||
* Fix Not all place types appears on family lines Graph
|
||||
* Remember location of Sort Events Tool
|
||||
* Fix Media editor when using double click the preview of added media
|
||||
* Avoid leading and trailing spaces when copy/paste coordinates from a
|
||||
map provider.
|
||||
|
||||
2018-12-20
|
||||
Version 5.0.1
|
||||
* Media Manager: add help button and remove '...'
|
||||
* Edit/Preferences: add Help button
|
||||
* Style Editor, Document Styles dialog: add help buttons
|
||||
* Fix Select Person dialog Help button URL
|
||||
* Fix Select Repository dialog Help button URL
|
||||
* Relationship Calculator: Add help button
|
||||
* Reorder Relationships dialog; add Help button
|
||||
* Generate Book Dialog; Fix Help URL
|
||||
* Manage Book dialog; add help button
|
||||
* Fix Detached Gramplets Help button URL when 'help_url' not in .gpr
|
||||
* Fix help URLs when they contain illegal characters and to match
|
||||
wiki section targetID algorithm Issue
|
||||
* Update translations: hu, hr, de, ru, fi, pt_PT, fr, sv, sl
|
||||
* Fix contents of enclosed_by secondary dbapi column
|
||||
(fixes scrambled places in tree view)
|
||||
* Google maps URL problem
|
||||
* Fix ODT reports with links when run in non-English languages
|
||||
* Allow addon Reports to specify a help button URL for options dialog
|
||||
* Fix Rebuild Secondary Indexes tool for dbapi backends.
|
||||
For dbapi backends, this tool will update the secondary columns that
|
||||
are used for indexing.
|
||||
* Fix dbapi set_name_group_mapping to properly close transaction
|
||||
* Fix Russian date handler crash when Russian language isn't installed
|
||||
* Fix Quickview for missing table data on some Gtk Versions
|
||||
* Fix startup messages when command line contains a bad filename
|
||||
* Restrict Place view Name col to the primary name while allowing searchbar
|
||||
to find alt and primary names
|
||||
* Fix Person Sidebarfilter when using 'Event' and Reg expressions
|
||||
* Fix Find Duplicate People; exception when deleting someone shown outside
|
||||
of the tool
|
||||
* Gedcom export, upgrade OBJE handling to Gedcom 5.5.1 style
|
||||
* Fix CSV import to set marriage event role to family
|
||||
* Update gramps bugtracker URL in all po files
|
||||
* Narrative Web:
|
||||
- thumbnails bad alignment.
|
||||
- thumbnails problems in some cases.
|
||||
- use latest version from openlayers.
|
||||
- fixes Space between place, description and the event note
|
||||
when there are many sources.
|
||||
- Change the css order between print and screen. The chosen theme can erase
|
||||
prior values.
|
||||
- Add a width for the source column in all themes.
|
||||
- Events difficult to read (screen and mobile)
|
||||
* Fix typo in CitationListModel for sort change
|
||||
* Fix Adding "ToDo" note crash when no active object
|
||||
* Fix Citation List view Source Last Changed Column to sort properly
|
||||
* Fix for re-entrant main window close when user hits 'x' again
|
||||
* Fix exception when closing early editor in tree of editors
|
||||
* Fix 'Generate Book' dialog for crash on 'x' close
|
||||
* Fix ToDo Gramplet for multiple attempts to edit a note
|
||||
* Fix Dashboard for multiple copies of a Gramplet
|
||||
* Fix Dashboard to recall minimized or undocked Gramplets
|
||||
* Fix Statusbar update to avoid intermittent exception on closed db
|
||||
* Fix FilterParser for much older 3.x custom_filters.xml files
|
||||
* Fix IsDuplicatedAncestorOf filter rule to avoid crash on tree loop
|
||||
* Fix StyledTextEditor EditLink for root text changed to zero length
|
||||
in the background Fixes
|
||||
* Fix AgeOnDate and some reports using SimpleAccess for missing surname
|
||||
* Fix crash when a filter with loop in definition is defined
|
||||
* Fix HandleErrors related to LDS
|
||||
* Fix ReferencedBySelection proxy for 'None' LDS Parents
|
||||
* Fix HandleError in Citations Gramplet for lds place missing
|
||||
* Change PlaceView drag from whole row to just icon during drag
|
||||
* Add drag Icon to drags from DisplayTabs Gramplet lists
|
||||
* Fix dialogs for 'Help' button closes the dialog, and non-functional 'Help'
|
||||
* Fix Family Tree manager for 'Help' button closes dialog
|
||||
* Fix selectors for 'Help' button closes dialog
|
||||
* Fix 'Generate Book' dialog for 'Help' button closes dialog
|
||||
* Fix TestcaseGenerator for 'Help' button closes dialog
|
||||
* Fix Selectors to enable the 'Help' buttons to actually work
|
||||
* Avoid HandleError when dragging an Added Family from EditFamily
|
||||
* Avoid HandleError when dragging an Added Person from EditPerson
|
||||
* Fix Clipboard rows cannot be sorted via drag/drop
|
||||
* Better default directory choices for import/export file dialogs
|
||||
* Records Report: call name not underlined in HTML
|
||||
* Fix InteractiveSearch for find before model is populated
|
||||
* Fix Gedcom export for incorrect escaping with @#DFRENCH R@
|
||||
* Fix reports for shared event attribute and note errors
|
||||
* Fix Fan and Descendant Fan charts in Quadrant and Half Circle modes
|
||||
The Descendant Fan chart had several bugs:
|
||||
1) a bug that affected the centering of the chart for these modes
|
||||
2) the chart was drawn in the wrong quadrant
|
||||
3) the centering of the chart for printing was incorrect
|
||||
(the legend was off the page some of the time).
|
||||
4) the sizing of the chart for printing was incorrect
|
||||
(for very small charts of one generation, the legend would overwrite the
|
||||
chart).
|
||||
The Fan Chart for the quadrant view:
|
||||
1) the centering of the chart for printing was incorrect
|
||||
(the legend was off the page some of the time).
|
||||
* Fixed issues in the Dutch relationship calculator
|
||||
- extended the ordinal and removed lists till 50, like the English lists.
|
||||
- Fixed bug in which uncles/aunts, nephews/nieces (niblings), siblings and
|
||||
cousins with an unknown gender show up as female.
|
||||
- Fixed some misspellings
|
||||
* Setting the year as an ordinal number in Croatian; two more reports now show
|
||||
a year as an ordinal number in Croatian
|
||||
* fix name-note is not being cleared in Complete Individual report
|
||||
* Fix View Column sizing so last column size setting is maintained
|
||||
* Fix view so column widths are preserved when using filters
|
||||
* fix the place-format option in Detailed Descendant and Detailed Ancestor text
|
||||
reports
|
||||
* Fix bsddb for person sort with empty Surname list
|
||||
* Webcal: link problems in some cases Year 2016 is highlighted by default
|
||||
instead of current year.
|
||||
* Webcal: Missing links when muliyear unselected
|
||||
* Geoclose: exception when a family has no father
|
||||
* Family Descendant Tree; fix HandleError
|
||||
* fix unhandled exception parsing "future dates" in some locales
|
||||
* fix Julian/Gregorian calendar issue when entering only year as date when
|
||||
running gramps in Norwegian
|
||||
* Fix and restore Statistics Gramplet to 4.2.x status
|
||||
* Fix Check and Repair to deal with bad references empty handle string
|
||||
* Speed up Check and Repair, backlinks check stage.
|
||||
* Fix strings containing deprecated (Python 3.6+) illegal escape sequences
|
||||
* Whatsnext: check if db is open, fixes error if not.
|
||||
* Fix usage of posixpath; should be os.path for os independence
|
||||
* Fix generate_checksum routine to avoid MemoryError crash
|
||||
* Fix corrupted Bookmarks that can happen after Gramps crash
|
||||
* Fix Merge Family when same parent is missing from both families
|
||||
* Fix <ctrl>c in view to get selected item to clipboard
|
||||
* Fix Quickview Gramplet so updates work when changing active
|
||||
* Fix place reference editor for bad cut/paste on set_latlongitude
|
||||
* Fix Find Database Loop Tool (bad import of _collections)
|
||||
* mac/gramps.modules: Switch included moduleset to gitlab.gnome.org.
|
||||
* mac/gramps.bundle: File copy doesn't work if the glob can match directories.
|
||||
* mac/gramps.bundle: Install the docs/gramps directory in the bundle.
|
||||
* debian/changelog: Update the Debian changelog after the 5.0.0 release
|
||||
* mac/Info.plist, mac/gramps.modules: Release Gramps-5.0.0 on Mac.
|
||||
|
||||
2018-07-24
|
||||
Version 5.0.0
|
||||
* Correct binary test logic for primary mask.
|
||||
|
||||
@@ -109,6 +109,7 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
text-decoration: underline;
|
||||
@@ -330,6 +331,10 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -446,8 +451,7 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -489,7 +489,7 @@ table.eventlist tbody tr td.ColumnNotes {
|
||||
width: 20%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 17%;
|
||||
width: 5%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnPerson {
|
||||
width: 35%;
|
||||
@@ -1093,7 +1093,6 @@ div.Residence table.infolist tr td {
|
||||
margin: 0;
|
||||
float: left;
|
||||
width: 130px;
|
||||
height: 150px;
|
||||
text-align: center;
|
||||
}
|
||||
#indivgallery div.thumbnail a {
|
||||
@@ -1102,6 +1101,7 @@ div.Residence table.infolist tr td {
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#indivgallery div.thumbnail a img {
|
||||
padding: 0;
|
||||
|
||||
@@ -109,6 +109,7 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #9DBF9D;
|
||||
@@ -373,6 +374,10 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -496,8 +501,7 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -110,6 +110,7 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #E0E0E9
|
||||
@@ -366,6 +367,10 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -489,8 +494,7 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -110,6 +110,7 @@ p#description {
|
||||
a {
|
||||
color: #36220B;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #FFE09F
|
||||
@@ -366,6 +367,10 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -489,8 +494,7 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -110,6 +110,7 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #EAEEF4
|
||||
@@ -366,6 +367,10 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -489,8 +494,7 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -32,7 +32,6 @@ body {
|
||||
background-color: #00029D;
|
||||
color: #00029D;
|
||||
width: 100%;
|
||||
padding: 0px 14px;
|
||||
}
|
||||
|
||||
/* Navigation Menus
|
||||
|
||||
@@ -119,6 +119,7 @@ h4 {
|
||||
a {
|
||||
color: #7D5925;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #FFFFE7;
|
||||
@@ -312,6 +313,10 @@ table#SortByCount thead th.ColumnQuantity a:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
-----------------------------------------------------------------*/
|
||||
#GalleryNav {
|
||||
@@ -432,8 +437,7 @@ div#families table.fixed_subtables table.eventlist th:last-child {
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.5em;
|
||||
@@ -529,7 +533,6 @@ div#map_canvas {
|
||||
table.calendar {
|
||||
table-layout: fixed;
|
||||
empty-cells: show;
|
||||
width: 950px;
|
||||
margin: 0px auto;
|
||||
background: url(../images/Web_Mainz_Mid.png) #FFF2C6 repeat;
|
||||
}
|
||||
|
||||
@@ -576,6 +576,10 @@ table.relationships tbody tr td.ColumnPartner a:hover {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#Gallery { }
|
||||
@@ -732,7 +736,7 @@ table.download {
|
||||
width:100%;
|
||||
}
|
||||
table.download img {
|
||||
float:center;
|
||||
float:none;
|
||||
}
|
||||
table.download thead tr th {
|
||||
text-align:center;
|
||||
@@ -929,7 +933,6 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
|
||||
margin:0;
|
||||
float:left;
|
||||
width:130px;
|
||||
height:150px;
|
||||
text-align:center;
|
||||
}
|
||||
#indivgallery .thumbnail a {
|
||||
@@ -937,6 +940,7 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
|
||||
margin:0;
|
||||
padding:0;
|
||||
background:none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#indivgallery .thumbnail a img {
|
||||
margin:0;
|
||||
@@ -1093,7 +1097,7 @@ div#pedigree {
|
||||
margin-right: 10px;
|
||||
}
|
||||
#footer p#copyright img {
|
||||
margin-right: 10px[
|
||||
margin-right: 10px;
|
||||
}
|
||||
#user_footer {
|
||||
width: 70%;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
0 HEAD
|
||||
1 SOUR Gramps
|
||||
2 VERS 5.0.0-alpha2
|
||||
2 VERS 5.0.2
|
||||
2 NAME Gramps
|
||||
1 DATE 1 SEP 2017
|
||||
2 TIME 12:10:38
|
||||
1 DATE 31 JUL 2019
|
||||
2 TIME 10:58:33
|
||||
1 SUBM @SUBM@
|
||||
1 FILE C:\Users\prc\AppData\Roaming\gramps\temp\exp_sample_ged.ged
|
||||
1 COPR Copyright (c) 2017 Alex Roitman,,,.
|
||||
1 COPR Copyright (c) 2019 Alex Roitman,,,.
|
||||
1 GEDC
|
||||
2 VERS 5.5.1
|
||||
2 FORM LINEAGE-LINKED
|
||||
@@ -786,11 +786,7 @@
|
||||
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-5.0.0\share\gramps\tests\O0.jpg
|
||||
2 NOTE @N0019@
|
||||
1 OBJE @O0000@
|
||||
1 NOTE @N0007@
|
||||
1 CHAN
|
||||
2 DATE 18 JUN 2016
|
||||
@@ -889,7 +885,7 @@
|
||||
0 @I0046@ INDI
|
||||
1 NAME Tom /Von Tester y tested/
|
||||
2 GIVN Tom
|
||||
2 SPFX Von,
|
||||
2 SPFX Von
|
||||
2 SURN Tester y, tested
|
||||
2 NICK TesterNickname
|
||||
1 SEX M
|
||||
@@ -1423,4 +1419,12 @@
|
||||
0 @N0017@ NOTE A citation Note Source text
|
||||
0 @N0018@ NOTE Another Citation Note
|
||||
0 @N0019@ NOTE A bad photo for sure
|
||||
0 @O0000@ OBJE
|
||||
1 FILE c:\users\prc\workspace\grampsm\main\data\tests\O0.jpg
|
||||
2 FORM jpg
|
||||
2 TITL Michael O'Toole 2015-11
|
||||
1 NOTE @N0019@
|
||||
1 CHAN
|
||||
2 DATE 29 OCT 2016
|
||||
3 TIME 15:23:37
|
||||
0 TRLR
|
||||
|
||||
@@ -3,41 +3,41 @@
|
||||
"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="2019-03-13" version="5.0.2"/>
|
||||
<researcher>
|
||||
</researcher>
|
||||
</header>
|
||||
<events>
|
||||
<event handle="_0000000500000005" change="1472500305" id="E0000">
|
||||
<event handle="_0000000500000005" change="1" id="E0000">
|
||||
<type>Birth</type>
|
||||
<dateval val="1816"/>
|
||||
<place hlink="_0000000700000007"/>
|
||||
<citationref hlink="_0000000600000006"/>
|
||||
</event>
|
||||
<event handle="_0000000800000008" change="1472500305" id="E0001">
|
||||
<event handle="_0000000800000008" change="1" id="E0001">
|
||||
<type>Residence</type>
|
||||
<dateval val="1850"/>
|
||||
<place hlink="_0000000a0000000a"/>
|
||||
<citationref hlink="_0000000900000009"/>
|
||||
</event>
|
||||
<event handle="_0000000b0000000b" change="1472500305" id="E0002">
|
||||
<event handle="_0000000b0000000b" change="1" id="E0002">
|
||||
<type>Death</type>
|
||||
<datestr val="1850/1860"/>
|
||||
<place hlink="_0000000c0000000c"/>
|
||||
</event>
|
||||
<event handle="_0000000f0000000f" change="1472500305" id="E0003">
|
||||
<event handle="_0000000f0000000f" change="1" id="E0003">
|
||||
<type>Marriage</type>
|
||||
<dateval val="1841" type="about"/>
|
||||
<place hlink="_0000001000000010"/>
|
||||
</event>
|
||||
<event handle="_0000001100000011" change="1472500305" id="E0004">
|
||||
<event handle="_0000001100000011" change="1" id="E0004">
|
||||
<type>Marriage</type>
|
||||
<dateval val="1847-08"/>
|
||||
<place hlink="_0000001200000012"/>
|
||||
</event>
|
||||
</events>
|
||||
<people>
|
||||
<person handle="_0000000100000001" change="1472500305" id="I0278">
|
||||
<person handle="_0000000100000001" change="1" id="I0278">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Andrew</first>
|
||||
@@ -54,13 +54,13 @@
|
||||
</person>
|
||||
</people>
|
||||
<families>
|
||||
<family handle="_0000000d0000000d" change="1472500305" id="F0073">
|
||||
<family handle="_0000000d0000000d" change="1" id="F0073">
|
||||
<rel type="Married"/>
|
||||
<father hlink="_0000000100000001"/>
|
||||
<eventref hlink="_0000000f0000000f" role="Family"/>
|
||||
<childref hlink="_0000000100000001"/>
|
||||
</family>
|
||||
<family handle="_0000000e0000000e" change="1472500305" id="F0074">
|
||||
<family handle="_0000000e0000000e" change="1" id="F0074">
|
||||
<rel type="Married"/>
|
||||
<father hlink="_0000000100000001"/>
|
||||
<eventref hlink="_0000001100000011" role="Family"/>
|
||||
@@ -68,19 +68,19 @@
|
||||
</family>
|
||||
</families>
|
||||
<citations>
|
||||
<citation handle="_0000000400000004" change="1472500305" id="C0000">
|
||||
<citation handle="_0000000400000004" change="1" id="C0000">
|
||||
<page>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248</page>
|
||||
<confidence>2</confidence>
|
||||
<objref hlink="_0000000300000003"/>
|
||||
<sourceref hlink="_0000000200000002"/>
|
||||
</citation>
|
||||
<citation handle="_0000000600000006" change="1472500305" id="C0001">
|
||||
<citation handle="_0000000600000006" change="1" id="C0001">
|
||||
<page>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248</page>
|
||||
<confidence>2</confidence>
|
||||
<objref hlink="_0000000300000003"/>
|
||||
<sourceref hlink="_0000000200000002"/>
|
||||
</citation>
|
||||
<citation handle="_0000000900000009" change="1472500305" id="C0002">
|
||||
<citation handle="_0000000900000009" change="1" id="C0002">
|
||||
<page>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248</page>
|
||||
<confidence>2</confidence>
|
||||
<objref hlink="_0000000300000003"/>
|
||||
@@ -88,7 +88,7 @@
|
||||
</citation>
|
||||
</citations>
|
||||
<sources>
|
||||
<source handle="_0000000200000002" change="1472500305" id="S0029">
|
||||
<source handle="_0000000200000002" change="1" id="S0029">
|
||||
<stitle>1850 United States Federal Census</stitle>
|
||||
<sauthor>Ancestry.com</sauthor>
|
||||
<spubinfo>Name: Ancestry.com Operations, Inc.; Location: Provo, UT, USA; Date: 2009;</spubinfo>
|
||||
@@ -96,42 +96,43 @@
|
||||
</source>
|
||||
</sources>
|
||||
<places>
|
||||
<placeobj handle="_0000000700000007" change="1472500305" id="P0000" type="Unknown">
|
||||
<placeobj handle="_0000000700000007" change="1" id="P0000" type="Unknown">
|
||||
<ptitle>Tennessee, USA</ptitle>
|
||||
<pname value="Tennessee, USA"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000000a0000000a" change="1472500305" id="P0001" type="Unknown">
|
||||
<placeobj handle="_0000000a0000000a" change="1" id="P0001" type="Unknown">
|
||||
<ptitle>District 14, Cape Girardeau, Missouri, USA</ptitle>
|
||||
<pname value="District 14, Cape Girardeau, Missouri, USA"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000000c0000000c" change="1472500305" id="P0002" type="Unknown">
|
||||
<placeobj handle="_0000000c0000000c" change="1" id="P0002" type="Unknown">
|
||||
<ptitle>Bollinger Co. MO</ptitle>
|
||||
<pname value="Bollinger Co. MO"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001000000010" change="1472500305" id="P0003" type="Unknown">
|
||||
<placeobj handle="_0000001000000010" change="1" id="P0003" type="Unknown">
|
||||
<ptitle>Union Co.?, IL</ptitle>
|
||||
<pname value="Union Co.?, IL"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001200000012" change="1472500305" id="P0004" type="Unknown">
|
||||
<placeobj handle="_0000001200000012" change="1" id="P0004" type="Unknown">
|
||||
<ptitle>Wayne, Missouri, United States</ptitle>
|
||||
<pname value="Wayne, Missouri, United States"/>
|
||||
</placeobj>
|
||||
</places>
|
||||
<objects>
|
||||
<object handle="_0000000300000003" change="1472500305" id="M159">
|
||||
<object handle="_0000000300000003" change="1" id="M159">
|
||||
<file src="1850 United States Federal Census(11)-1.jpg" mime="image/jpeg" description="1850 United States Federal Census"/>
|
||||
<noteref hlink="_0000001400000014"/>
|
||||
<noteref hlink="_0000001500000015"/>
|
||||
</object>
|
||||
<object handle="_0000001600000016" change="1472500305" id="M158">
|
||||
<file src="D:/Users/PRC/Downloads/1850 United States Federal Census(11)-1.jpg" mime="image/jpeg" description="D:\Users\PRC\Downloads\1850 United States Federal Census(11)-1.jpg"/>
|
||||
<object handle="_0000001600000016" change="1" id="M158">
|
||||
<file src="/Users/PRC/Downloads/1850 United States Federal Census(11)-1.jpg" mime="image/jpeg" description="/Users/PRC/Downloads/1850 United States Federal Census(11)-1.jpg"/>
|
||||
<noteref hlink="_0000001700000017"/>
|
||||
</object>
|
||||
<object handle="_0000001700000017" change="1472500305" id="M157">
|
||||
<object handle="_0000001800000018" change="1" id="M157">
|
||||
<file src="http://1.gravatar.com/avatar/77e02a3c8c665155ad1acaac8c2742e0?s=120&d=mm&r=pg" mime="unknown" description="http://1.gravatar.com/avatar/77e02a3c8c665155ad1acaac8c2742e0?s=120&d=mm&r=pg"/>
|
||||
</object>
|
||||
</objects>
|
||||
<repositories>
|
||||
<repository handle="_0000001300000013" change="1472500305" id="R0001">
|
||||
<repository handle="_0000001300000013" change="1" id="R0001">
|
||||
<rname>Ancestry.com</rname>
|
||||
<type>Library</type>
|
||||
<address>
|
||||
@@ -140,16 +141,26 @@
|
||||
</repository>
|
||||
</repositories>
|
||||
<notes>
|
||||
<note handle="_0000001400000014" change="1472500305" id="N0000" type="Media Note">
|
||||
<text>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248</text>
|
||||
<note handle="_0000001400000014" change="1" id="N0000" type="Media Note">
|
||||
<text>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248 </text>
|
||||
</note>
|
||||
<note handle="_0000001500000015" change="1472500305" id="N0001" type="GEDCOM import">
|
||||
<note handle="_0000001500000015" change="1" id="N0001" type="GEDCOM import">
|
||||
<text>Records not imported into OBJE (multi-media object) Gramps ID M159:
|
||||
|
||||
Could not import 1850 United States Federal Census(11)-1.jpg Line 70: 1 FILE 1850 United States Federal Census(11)-1.jpg</text>
|
||||
Could not import 1850 United States Federal Census(11)-1.jpg Line 70: 1 FILE 1850 United States Federal Census(11)-1.jpg
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="200"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000001700000017" change="1" id="N0002" type="GEDCOM import">
|
||||
<text>Records not imported into OBJE (multi-media object) Gramps ID M158:
|
||||
|
||||
Could not import D:\Users\PRC\Downloads\1850 United States Federa Line 75: 1 FILE D:\Users\PRC\Downloads\1850 United States Federal Census(11)-1.jpg
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="223"/>
|
||||
</style>
|
||||
</note>
|
||||
</notes>
|
||||
</database>
|
||||
|
||||
@@ -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="2017-05-30" version="5.0.0-alpha1"/>
|
||||
<created date="2019-03-05" version="5.0.2"/>
|
||||
<researcher>
|
||||
</researcher>
|
||||
</header>
|
||||
@@ -66,9 +66,10 @@
|
||||
<object handle="_0000000300000003" change="1" id="O0000">
|
||||
<file src="test_emb_55.jpg" mime="image/jpeg" description="Multimedia link embedded form v5.5"/>
|
||||
<noteref hlink="_0000000200000002"/>
|
||||
<noteref hlink="_0000000b0000000b"/>
|
||||
</object>
|
||||
<object handle="_0000000400000004" change="548708291" id="M1">
|
||||
<file src="" mime="" description="Multimedia link to linked form v5.5 blob"/>
|
||||
<file src="" mime="image/jpeg" description="Multimedia link to linked form v5.5 blob"/>
|
||||
<attribute type="REFN" value="Ref12345M1">
|
||||
<noteref hlink="_0000001200000012"/>
|
||||
</attribute>
|
||||
@@ -117,7 +118,7 @@
|
||||
<citationref hlink="_0000002700000027"/>
|
||||
</object>
|
||||
<object handle="_0000000c0000000c" change="1" id="O0002">
|
||||
<file src="http://www.geni.com/photo/view?photo_id=6000000001341319061" mime="unknown" description="Multimedia link embedded form v5.5 URL"/>
|
||||
<file src="http://www.geni.com/photo/view?photo_id=6000000001341319061" mime="text/html" description="Multimedia link embedded form v5.5 URL"/>
|
||||
<noteref hlink="_0000000b0000000b"/>
|
||||
</object>
|
||||
<object handle="_0000000d0000000d" change="1" id="M7">
|
||||
@@ -129,7 +130,7 @@
|
||||
<noteref hlink="_0000002900000029"/>
|
||||
</object>
|
||||
<object handle="_0000001500000015" change="1" id="M2">
|
||||
<file src="" mime="" description="2nd blob Multimedia link to linked form v5.5 blob"/>
|
||||
<file src="" mime="image/jpeg" description="2nd blob Multimedia link to linked form v5.5 blob"/>
|
||||
<noteref hlink="_0000001600000016"/>
|
||||
</object>
|
||||
</objects>
|
||||
|
||||
@@ -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-10-23" version="5.0.0-alpha1"/>
|
||||
<created date="2019-07-30" version="5.0.2"/>
|
||||
<researcher>
|
||||
<resname>John A. Tester</resname>
|
||||
</researcher>
|
||||
@@ -26,27 +26,23 @@
|
||||
<type>Death</type>
|
||||
<noteref hlink="_0000001600000016"/>
|
||||
</event>
|
||||
<event handle="_0000001e0000001e" change="1" id="E0003">
|
||||
<type>Who knows OBJE REFN TYPE</type>
|
||||
<description>REFN</description>
|
||||
</event>
|
||||
<event handle="_0000002700000027" change="1" id="E0004">
|
||||
<event handle="_0000002700000027" change="1" id="E0003">
|
||||
<type>Birth</type>
|
||||
<dateval val="1901-06-15"/>
|
||||
</event>
|
||||
<event handle="_0000002800000028" change="1" id="E0005">
|
||||
<event handle="_0000002800000028" change="1" id="E0004">
|
||||
<type>Death</type>
|
||||
<dateval val="1975-07-05"/>
|
||||
</event>
|
||||
<event handle="_0000002e0000002e" change="1" id="E0006">
|
||||
<event handle="_0000002e0000002e" change="1" id="E0005">
|
||||
<type>Birth</type>
|
||||
<dateval val="1922-06-15"/>
|
||||
</event>
|
||||
<event handle="_0000002f0000002f" change="1" id="E0007">
|
||||
<event handle="_0000002f0000002f" change="1" id="E0006">
|
||||
<type>Death</type>
|
||||
<dateval val="1994-07-05"/>
|
||||
</event>
|
||||
<event handle="_0000003b0000003b" change="1" id="E0008">
|
||||
<event handle="_0000003b0000003b" change="1" id="E0007">
|
||||
<type>TEST</type>
|
||||
<description>family</description>
|
||||
</event>
|
||||
@@ -61,10 +57,11 @@
|
||||
<eventref hlink="_0000000f0000000f" role="Primary"/>
|
||||
<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"/>
|
||||
<attribute type="REFN" value="98765 for PERSON">
|
||||
<noteref hlink="_0000001e0000001e"/>
|
||||
</attribute>
|
||||
<url href="http://homepages.rootsweb.com/~pmcbride/gedcom/55gctoc.htm" type="Web Home" description="GEDCOM 5.5 documentation web site"/>
|
||||
<parentin hlink="_0000001700000017"/>
|
||||
<noteref hlink="_0000001800000018"/>
|
||||
@@ -270,7 +267,8 @@
|
||||
|
||||
Line ignored as not understood Line 18: 2 TEST Header Note
|
||||
Empty note ignored Line 19: 1 NOTE
|
||||
Skipped subordinate line Line 20: 2 TEST Empty Note</text>
|
||||
Skipped subordinate line Line 20: 2 TEST Empty Note
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="327"/>
|
||||
</style>
|
||||
@@ -288,7 +286,8 @@ Skipped subordinate line Line 20:
|
||||
Line ignored as not understood Line 26: 2 TEST Submission Note
|
||||
Empty note ignored Line 27: 1 NOTE
|
||||
Skipped subordinate line Line 28: 2 TEST Empty Note
|
||||
Line ignored as not understood Line 29: 1 TEST submission</text>
|
||||
Line ignored as not understood Line 29: 1 TEST submission
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="425"/>
|
||||
</style>
|
||||
@@ -300,7 +299,8 @@ Tag recognized but not supported Line 32:
|
||||
Tag recognized but not supported Line 33: 1 REFN Submission Note REFN
|
||||
Skipped subordinate line Line 34: 2 TYPE Submission Note REFN TYPE
|
||||
Tag recognized but not supported Line 35: 1 SOUR Submission note source
|
||||
Line ignored as not understood Line 39: 1 TEST on XREF Note</text>
|
||||
Line ignored as not understood Line 39: 1 TEST on XREF Note
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="586"/>
|
||||
</style>
|
||||
@@ -318,7 +318,8 @@ Line ignored as not understood Line 39:
|
||||
Line ignored as not understood Line 43: 2 TEST Submitter Note
|
||||
Empty note ignored Line 44: 1 NOTE
|
||||
Skipped subordinate line Line 45: 2 TEST Empty Note
|
||||
Line ignored as not understood Line 46: 1 TEST Submitter</text>
|
||||
Line ignored as not understood Line 46: 1 TEST Submitter
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="460"/>
|
||||
</style>
|
||||
@@ -360,7 +361,10 @@ Line ignored as not understood Line 46:
|
||||
<note handle="_0000001d0000001d" change="979250406" id="N0018" type="Media Note">
|
||||
<text>Media xref note</text>
|
||||
</note>
|
||||
<note handle="_0000002100000021" change="1" id="N0019" type="GEDCOM import">
|
||||
<note handle="_0000001e0000001e" change="1" id="N0019" type="REFN-TYPE">
|
||||
<text>Who knows OBJE REFN TYPE</text>
|
||||
</note>
|
||||
<note handle="_0000002100000021" change="1" id="N0020" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0001:
|
||||
|
||||
Empty note ignored Line 54: 2 NOTE
|
||||
@@ -382,12 +386,14 @@ Empty note ignored Line 85:
|
||||
Skipped subordinate line Line 86: 3 TEST Empty Note
|
||||
Line ignored as not understood Line 88: 3 TEST 123456 Note
|
||||
Empty note ignored Line 90: 2 NOTE
|
||||
Skipped subordinate line Line 91: 3 TEST Empty Note</text>
|
||||
Skipped subordinate line Line 91: 3 TEST Empty Note
|
||||
Line ignored as not understood Line 94: 2 TEST REFN
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="2009"/>
|
||||
<range start="0" end="2101"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002200000022" change="1" id="N0020" type="GEDCOM import">
|
||||
<note handle="_0000002200000022" change="1" id="N0021" type="GEDCOM import">
|
||||
<text>Records not imported into NOTE Gramps ID N0018:
|
||||
|
||||
Tag recognized but not supported Line 103: 1 RIN 123456
|
||||
@@ -396,85 +402,89 @@ Skipped subordinate line Line 105:
|
||||
Tag recognized but not supported Line 109: 2 NOTE Note on a change on a note!!!
|
||||
Skipped subordinate line Line 110: 3 CHAN
|
||||
Skipped subordinate line Line 111: 4 DATE 2001-01-11
|
||||
Skipped subordinate line Line 112: 5 TIME 16:00:06</text>
|
||||
Skipped subordinate line Line 112: 5 TIME 16:00:06
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="741"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002300000023" change="1" id="N0021" type="REFN-TYPE">
|
||||
<note handle="_0000002300000023" change="1" id="N0022" type="REFN-TYPE">
|
||||
<text>Who knows REFN TYPE</text>
|
||||
</note>
|
||||
<note handle="_0000002500000025" change="1" id="N0022" type="GEDCOM import">
|
||||
<note handle="_0000002500000025" change="1" id="N0023" 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>
|
||||
Could not import photo.jpg Line 114: 1 FILE photo.jpg
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="164"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002900000029" change="979250406" id="N0023" type="Person Note">
|
||||
<note handle="_0000002900000029" change="979250406" id="N0024" type="Person Note">
|
||||
<text>Family Spouse reference Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000002b0000002b" change="1" id="N0024" type="GEDCOM import">
|
||||
<note handle="_0000002b0000002b" change="1" id="N0025" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0002:
|
||||
|
||||
Empty note ignored Line 132: 2 NOTE
|
||||
Skipped subordinate line Line 133: 3 TEST Empty Note</text>
|
||||
Skipped subordinate line Line 133: 3 TEST Empty Note
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="248"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000002d0000002d" change="979250406" id="N0025" type="General">
|
||||
<note handle="_0000002d0000002d" change="979250406" id="N0026" type="General">
|
||||
<text>Name note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003100000031" change="1" id="N0026" type="LDS Note">
|
||||
<note handle="_0000003100000031" change="1" id="N0027" type="LDS Note">
|
||||
<text>Place note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003400000034" change="1" id="N0027" type="LDS Note">
|
||||
<note handle="_0000003400000034" change="1" id="N0028" type="LDS Note">
|
||||
<text>LDS xref note</text>
|
||||
</note>
|
||||
<note handle="_0000003600000036" change="979250406" id="N0028" type="Association Note">
|
||||
<note handle="_0000003600000036" change="979250406" id="N0029" type="Association Note">
|
||||
<text>Association link note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003800000038" change="1" id="N0029" type="GEDCOM import">
|
||||
<note handle="_0000003800000038" change="1" id="N0030" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0003:
|
||||
|
||||
Empty note ignored Line 141: 2 NOTE
|
||||
Skipped subordinate line Line 142: 3 TEST Empty Note
|
||||
Line ignored as not understood Line 163: 3 TEST Accociation note
|
||||
Empty note ignored Line 167: 2 NOTE
|
||||
Skipped subordinate line Line 168: 3 TEST Empty Note</text>
|
||||
Skipped subordinate line Line 168: 3 TEST Empty Note
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="538"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000003900000039" change="979250406" id="N0030" type="General">
|
||||
<note handle="_0000003900000039" change="979250406" id="N0031" type="General">
|
||||
<text>Just for association</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000003e0000003e" change="1" id="N0031" type="Family Note">
|
||||
<note handle="_0000003e0000003e" change="1" id="N0032" type="Family Note">
|
||||
<text>Family xref note</text>
|
||||
</note>
|
||||
<note handle="_0000003f0000003f" change="979250406" id="N0032" type="Family Note">
|
||||
<note handle="_0000003f0000003f" change="979250406" id="N0033" type="Family Note">
|
||||
<text>Family note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004000000040" change="1" id="N0033" type="Citation">
|
||||
<note handle="_0000004000000040" change="1" id="N0034" type="Citation">
|
||||
<text>Citation Data Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004100000041" change="1" id="N0034" type="Source text">
|
||||
<note handle="_0000004100000041" change="1" id="N0035" type="Source text">
|
||||
<text>A sample text from a source of this family</text>
|
||||
</note>
|
||||
<note handle="_0000004200000042" change="979250406" id="N0035" type="Citation">
|
||||
<note handle="_0000004200000042" change="979250406" id="N0036" type="Citation">
|
||||
<text>A note this citation is on the FAMILY record.</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004400000044" change="1" id="N0036" type="GEDCOM import">
|
||||
<note handle="_0000004400000044" change="1" id="N0037" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0001:
|
||||
|
||||
Line ignored as not understood Line 183: 2 TEST Family Note
|
||||
@@ -482,41 +492,44 @@ Empty note ignored Line 187:
|
||||
Skipped subordinate line Line 188: 2 TEST Empty Note
|
||||
Line ignored as not understood Line 190: 2 TEST citation
|
||||
Line ignored as not understood Line 194: 3 TEST Citation Data
|
||||
Line ignored as not understood Line 196: 4 TEST Citation Data Note</text>
|
||||
Line ignored as not understood Line 196: 4 TEST Citation Data Note
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="645"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000004600000046" change="979250406" id="N0037" type="Repository Reference Note">
|
||||
<note handle="_0000004600000046" change="979250406" id="N0038" type="Repository Reference Note">
|
||||
<text>A short note about the repository link.</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004700000047" change="979250406" id="N0038" type="Source Note">
|
||||
<note handle="_0000004700000047" change="979250406" id="N0039" type="Source Note">
|
||||
<text>note embedded in the SOURCE Record</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004800000048" change="1" id="N0039" type="GEDCOM import">
|
||||
<note handle="_0000004800000048" change="1" id="N0040" type="GEDCOM import">
|
||||
<text>Records not imported into SOUR (source) Gramps ID S0001:
|
||||
|
||||
Line ignored as not understood Line 206: 1 TEST source
|
||||
Empty note ignored Line 208: 2 NOTE
|
||||
Skipped subordinate line Line 209: 3 TEST Empty Note
|
||||
Empty note ignored Line 214: 1 NOTE
|
||||
Skipped subordinate line Line 215: 2 TEST Empty Note</text>
|
||||
Skipped subordinate line Line 215: 2 TEST Empty Note
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="524"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000004900000049" change="1" id="N0040" type="Repository Note">
|
||||
<note handle="_0000004900000049" change="1" id="N0041" type="Repository Note">
|
||||
<text>Repository Note</text>
|
||||
<tagref hlink="_0000000500000005"/>
|
||||
</note>
|
||||
<note handle="_0000004a0000004a" change="1" id="N0041" type="GEDCOM import">
|
||||
<note handle="_0000004a0000004a" change="1" id="N0042" type="GEDCOM import">
|
||||
<text>Records not imported into REPO (repository) Gramps ID R0002:
|
||||
|
||||
Line ignored as not understood Line 223: 1 TEST Repo
|
||||
Empty note ignored Line 224: 1 NOTE
|
||||
Skipped subordinate line Line 225: 2 TEST Empty Note</text>
|
||||
Skipped subordinate line Line 225: 2 TEST Empty Note
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="340"/>
|
||||
</style>
|
||||
|
||||
@@ -50,9 +50,9 @@
|
||||
0 @I0@ INDI
|
||||
1 NAME Anna /Hansdotter/
|
||||
2 GIVN Anna
|
||||
2 SURN Hansdotter, Smith
|
||||
2 SPFX Vrow, huh
|
||||
2 SURN Hansdotter
|
||||
2 SPFX Vrow
|
||||
2 SURN Smith
|
||||
2 _AKA Anna Smith
|
||||
2 _AKA Hanna
|
||||
2 NOTE Hans daughter? N0000
|
||||
|
||||
@@ -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-10-24" version="5.0.0-alpha1"/>
|
||||
<created date="2019-07-31" version="5.0.2"/>
|
||||
<researcher>
|
||||
<resname>Alex Roitman,,,</resname>
|
||||
<resaddr>Not Provided</resaddr>
|
||||
@@ -163,6 +163,7 @@
|
||||
</event>
|
||||
<event handle="_0000005500000055" change="1" id="E0026">
|
||||
<type>Birth</type>
|
||||
<description>No Date Information</description>
|
||||
</event>
|
||||
<event handle="_0000005600000056" change="1" id="E0027">
|
||||
<type>Death</type>
|
||||
@@ -616,7 +617,8 @@
|
||||
<gender>F</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Anna</first>
|
||||
<surname prefix="Vrow">Smith</surname>
|
||||
<surname prefix="Vrow">Hansdotter</surname>
|
||||
<surname prim="0">Smith</surname>
|
||||
<noteref hlink="_0000001100000011"/>
|
||||
</name>
|
||||
<name alt="1" type="Also Known As">
|
||||
@@ -1456,13 +1458,13 @@
|
||||
<noteref hlink="_000000f9000000f9"/>
|
||||
</object>
|
||||
<object handle="_000000d1000000d1" change="1" id="O0001">
|
||||
<file src="Magnes&Anna_smiths_marr_cert.jpg" mime="unknown" description="Magnes&Anna_smiths_marr_cert.jpg"/>
|
||||
<file src="Magnes&Anna_smiths_marr_cert.jpg" mime="image/jpeg" description="Magnes&Anna_smiths_marr_cert.jpg"/>
|
||||
</object>
|
||||
<object handle="_000000d8000000d8" change="1" id="O0002">
|
||||
<file src="John&Alice_smiths_marr_cert.jpg" mime="unknown" description="John&Alice_smiths_marr_cert.jpg"/>
|
||||
<file src="John&Alice_smiths_marr_cert.jpg" mime="image/jpeg" description="John&Alice_smiths_marr_cert.jpg"/>
|
||||
</object>
|
||||
<object handle="_000000f1000000f1" change="1" id="O0003">
|
||||
<file src="Attic_photo.jpg" mime="unknown" description="Attic_photo.jpg"/>
|
||||
<file src="Attic_photo.jpg" mime="image/jpeg" description="Attic_photo.jpg"/>
|
||||
</object>
|
||||
</objects>
|
||||
<repositories>
|
||||
@@ -1506,7 +1508,8 @@
|
||||
<note handle="_0000000100000001" change="1" id="N0000" type="GEDCOM import">
|
||||
<text>Records not imported into HEAD (header):
|
||||
|
||||
GEDCOM FORM not supported Line 14: 2 FORM NOT LINEAGE-LINKED</text>
|
||||
GEDCOM FORM not supported Line 14: 2 FORM NOT LINEAGE-LINKED
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="148"/>
|
||||
</style>
|
||||
@@ -1514,7 +1517,8 @@ GEDCOM FORM not supported Line 14:
|
||||
<note handle="_0000000200000002" change="1" id="N0001" type="GEDCOM import">
|
||||
<text>Records not imported into SUBM (Submitter): (@SUBM@) Alex Roitman,,,:
|
||||
|
||||
Line ignored as not understood Line 23: 2 NOTE No address provided (note not supported)</text>
|
||||
Line ignored as not understood Line 23: 2 NOTE No address provided (note not supported)
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="199"/>
|
||||
</style>
|
||||
@@ -1523,7 +1527,8 @@ Line ignored as not understood Line 23:
|
||||
<text>Records not imported into FAM (family) Gramps ID F0003:
|
||||
|
||||
Line ignored as not understood Line 46: 2 SOUR Not really allowed here
|
||||
Filename omitted Line 48: 1 OBJE</text>
|
||||
Filename omitted Line 48: 1 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="256"/>
|
||||
</style>
|
||||
@@ -1562,7 +1567,8 @@ Filename omitted Line 48:
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0016:
|
||||
|
||||
Warn: ADDR overwritten Line 204: 3 ADR1 456 Main St again
|
||||
ADDR element ignored '459 Main St.' Line 202: 2 ADDR 459 Main St., The Village, San Francisco, CA, USA</text>
|
||||
ADDR element ignored '459 Main St.' Line 202: 2 ADDR 459 Main St., The Village, San Francisco, CA, USA
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="304"/>
|
||||
</style>
|
||||
@@ -1573,7 +1579,8 @@ ADDR element ignored '459 Main St.' Line 202:
|
||||
<note handle="_0000004700000047" change="1" id="N0014" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0018:
|
||||
|
||||
Tag recognized but not supported Line 245: 2 TYPE first generaton</text>
|
||||
Tag recognized but not supported Line 245: 2 TYPE first generaton
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="165"/>
|
||||
</style>
|
||||
@@ -1604,7 +1611,8 @@ Company. He enlisted in the army at Sparks 7 December 1917 and served as a Corpo
|
||||
<note handle="_000000cf000000cf" change="1" id="N0021" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0010:
|
||||
|
||||
Tag recognized but not supported Line 863: 2 _STAT</text>
|
||||
Tag recognized but not supported Line 863: 2 _STAT
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="146"/>
|
||||
</style>
|
||||
@@ -1613,7 +1621,8 @@ Tag recognized but not supported Line 863:
|
||||
<text>Records not imported into FAM (family) Gramps ID F0011:
|
||||
|
||||
Could not import Magnes&Anna_smiths_marr_cert.jpg Line 878: 3 OBJE
|
||||
Could not import Magnes&Anna_smiths_marr_cert.jpg Line 881: 2 OBJE</text>
|
||||
Could not import Magnes&Anna_smiths_marr_cert.jpg Line 881: 2 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="233"/>
|
||||
</style>
|
||||
@@ -1621,7 +1630,8 @@ Could not import Magnes&Anna_smiths_marr_cert.jpg Line 8
|
||||
<note handle="_000000d9000000d9" change="1" id="N0023" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0012:
|
||||
|
||||
Could not import John&Alice_smiths_marr_cert.jpg Line 905: 1 OBJE</text>
|
||||
Could not import John&Alice_smiths_marr_cert.jpg Line 905: 1 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="145"/>
|
||||
</style>
|
||||
@@ -1629,7 +1639,8 @@ Could not import John&Alice_smiths_marr_cert.jpg Line 9
|
||||
<note handle="_000000e4000000e4" change="1" id="N0024" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0008:
|
||||
|
||||
Tag recognized but not supported Line 1005: 1 ADDR 123 Main st, Grantville, Virginia, USA</text>
|
||||
Tag recognized but not supported Line 1005: 1 ADDR 123 Main st, Grantville, Virginia, USA
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="183"/>
|
||||
</style>
|
||||
@@ -1653,7 +1664,8 @@ Tag recognized but not supported Line 1005:
|
||||
<text>Records not imported into SOUR (source) Gramps ID S0003:
|
||||
|
||||
Tag recognized but not supported Line 1045: 1 DATA
|
||||
Skipped subordinate line Line 1046: 2 AGNC NYC Public Library</text>
|
||||
Skipped subordinate line Line 1046: 2 AGNC NYC Public Library
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="252"/>
|
||||
</style>
|
||||
@@ -1669,7 +1681,8 @@ Skipped subordinate line Line 1046:
|
||||
|
||||
REFN ignored Line 1075: 3 REFN blah blah
|
||||
Skipped subordinate line Line 1076: 4 TYPE who knows
|
||||
Could not import Attic_photo.jpg Line 1079: 3 OBJE</text>
|
||||
Could not import Attic_photo.jpg Line 1079: 3 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="344"/>
|
||||
</style>
|
||||
@@ -1677,7 +1690,8 @@ Could not import Attic_photo.jpg Line 1079:
|
||||
<note handle="_000000f6000000f6" change="1" id="N0034" type="GEDCOM import">
|
||||
<text>Records not imported into Top Level:
|
||||
|
||||
Unknown tag Line 1106: 0 XXX an unknown token at level 0</text>
|
||||
Unknown tag Line 1106: 0 XXX an unknown token at level 0
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="152"/>
|
||||
</style>
|
||||
@@ -1685,12 +1699,13 @@ Unknown tag Line 1106:
|
||||
<note handle="_000000f8000000f8" change="1" id="N0035" type="GEDCOM import">
|
||||
<text>Records not imported into Top Level:
|
||||
|
||||
Unknown tag Line 1109: 1 @X1@ XXX and unknown token xref definition</text>
|
||||
Unknown tag Line 1109: 1 @X1@ XXX and unknown token xref definition
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="163"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_000000f9000000f9" change="1477325896" id="N0036" type="General">
|
||||
<note handle="_000000f9000000f9" change="1564588949" id="N0036" type="General">
|
||||
<text>Objects referenced by this note were missing in a file imported on 12/25/1999 12:00:00 AM.</text>
|
||||
</note>
|
||||
</notes>
|
||||
|
||||
+188
-195
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -57,7 +57,7 @@
|
||||
|
||||
<_tip number="29"><b>Show All Checkbutton</b><br/>When adding an existing person as a spouse, the list of people shown is filtered to display only people who could realistically fit the role (based on dates in the database). In case Gramps is wrong in making this choice, you can override the filter by checking the Show All checkbutton.</_tip>
|
||||
|
||||
<_tip number="31"><b>Improving Gramps</b><br/>Users are encouraged to request enhancements to Gramps. Requesting an enhancement can be done either through the gramps-users or gramps-devel mailing lists, or by going to http://bugs.gramps-project.org and creating a Feature Request. Filing a Feature Request is preferred but it can be good to discuss your ideas on the email lists.</_tip>
|
||||
<_tip number="31"><b>Improving Gramps</b><br/>Users are encouraged to request enhancements to Gramps. Requesting an enhancement can be done either through the gramps-users or gramps-devel mailing lists, or by going to https://gramps-project.org/bugs/ and creating a Feature Request. Filing a Feature Request is preferred but it can be good to discuss your ideas on the email lists.</_tip>
|
||||
|
||||
<_tip number="32"><b>Gramps Mailing Lists</b><br/>Want answers to your questions about Gramps? Check out the gramps-users email list. Many helpful people are on the list, so you're likely to get an answer quickly. If you have questions related to the development of Gramps, try the gramps-devel list. You can see the lists by selecting "Help > Gramps Mailing Lists".</_tip>
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
<_tip number="49"><b>Making a Genealogy Website</b><br/>You can easily export your family tree to a web page. Select the entire database, family lines or selected individuals to a collection of web pages ready for upload to the World Wide Web.</_tip>
|
||||
|
||||
<_tip number="50"><b>Reporting Bugs in Gramps</b><br/>The best way to report a bug in Gramps is to use the Gramps bug tracking system at http://bugs.gramps-project.org</_tip>
|
||||
<_tip number="50"><b>Reporting Bugs in Gramps</b><br/>The best way to report a bug in Gramps is to use the Gramps bug tracking system at https://gramps-project.org/bugs/</_tip>
|
||||
|
||||
<_tip number="51"><b>The Gramps Homepage</b><br/>The Gramps homepage is at http://gramps-project.org/</_tip>
|
||||
|
||||
|
||||
Vendored
+21
@@ -1,3 +1,24 @@
|
||||
gramps (5.0.2-1) unstable; urgency=medium
|
||||
|
||||
* New release
|
||||
* Remove ancient python version field from debian/control
|
||||
* Bump standards version, no changes required
|
||||
|
||||
-- Ross Gammon <rossgammon@debian.org> Sun, 11 Aug 2019 14:11:35 +0200
|
||||
|
||||
gramps (5.0.1-1) unstable; urgency=medium
|
||||
|
||||
* New release
|
||||
* Update copyright file
|
||||
|
||||
-- Ross Gammon <rossgammon@debian.org> Thu, 20 Dec 2018 20:41:23 +0100
|
||||
|
||||
gramps (5.0.0-1) unstable; urgency=medium
|
||||
|
||||
* New Gramps release
|
||||
|
||||
-- Ross Gammon <rossgammon@debian.org> Wed, 25 Jul 2018 21:19:00 +0200
|
||||
|
||||
gramps (5.0.0~rc1-1) unstable; urgency=medium
|
||||
|
||||
* First release candidate for Gramps 5.0
|
||||
|
||||
Vendored
+1
-2
@@ -21,11 +21,10 @@ Build-Depends-Indep:
|
||||
python3-nose-exclude
|
||||
Build-Depends:
|
||||
debhelper (>= 11)
|
||||
Standards-Version: 4.1.3
|
||||
Standards-Version: 4.4.0
|
||||
Vcs-Git: https://github.com/gramps-project/gramps.git
|
||||
Vcs-browser: https://github.com/gramps-project/gramps/tree/maintenance/gramps50
|
||||
Homepage: https://www.gramps-project.org/
|
||||
X-Python3-Version: >= 3.2
|
||||
|
||||
Package: gramps
|
||||
Architecture: all
|
||||
|
||||
Vendored
+2
-1
@@ -64,7 +64,7 @@ Copyright: 2000-2007, Alex Roitman
|
||||
2011, Helge Herz
|
||||
2011, 2013 John Ralls
|
||||
2011, 2016 Matt Keenan
|
||||
2011-2017, Paul Franklin
|
||||
2011-2018, Paul Franklin
|
||||
2012, lcc
|
||||
2012, 2014, Mathieu MD
|
||||
2012, Nicolas Adenis-Lamarre
|
||||
@@ -86,6 +86,7 @@ Copyright: 2000-2007, Alex Roitman
|
||||
2016, Tom Samstag
|
||||
2017, Mindaugas Baranauskas
|
||||
2017, Robert Carnell
|
||||
2018, Robin van der Vliet
|
||||
License: GPL-2+
|
||||
|
||||
Files: debian/*
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<resphone>(555)123-4567</resphone>
|
||||
<resemail>anyone@someplace.com</resemail>
|
||||
</researcher>
|
||||
<mediapath>{GRAMPS_RESOURCES}/example/gramps</mediapath>
|
||||
<mediapath>{GRAMPS_RESOURCES}/doc/gramps/example/gramps</mediapath>
|
||||
</header>
|
||||
<tags>
|
||||
<tag handle="_c7642d9389b54417e8b" change="1370206720" name="tag1" color="#000000000000" priority="0"/>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<researcher>
|
||||
<resname>Alex Roitman,,,</resname>
|
||||
</researcher>
|
||||
<mediapath>{GRAMPS_RESOURCES}/example/gramps</mediapath>
|
||||
<mediapath>{GRAMPS_RESOURCES}/doc/gramps/example/gramps</mediapath>
|
||||
</header>
|
||||
<name-formats>
|
||||
<format number="-1" name="SURNAME, Given (Common)" fmt_str="SURNAME, given (common)" active="1"/>
|
||||
|
||||
@@ -382,7 +382,7 @@ class ArgHandler:
|
||||
self.open = db_path
|
||||
self.__open_action()
|
||||
else:
|
||||
sys.exit(1)
|
||||
sys.exit(_("Error: cannot open '%s'") % self.open_gui)
|
||||
return db_path
|
||||
|
||||
# if not open_gui, parse any command line args. We can only have one
|
||||
|
||||
@@ -221,9 +221,9 @@ register('interface.view', True)
|
||||
register('interface.surname-box-height', 150)
|
||||
register('interface.treemodel-cache-size', 1000)
|
||||
|
||||
register('paths.recent-export-dir', '')
|
||||
register('paths.recent-export-dir', USER_HOME)
|
||||
register('paths.recent-file', '')
|
||||
register('paths.recent-import-dir', '')
|
||||
register('paths.recent-import-dir', USER_HOME)
|
||||
register('paths.report-directory', USER_HOME)
|
||||
register('paths.website-directory', USER_HOME)
|
||||
register('paths.website-cms-uri', '')
|
||||
@@ -236,7 +236,6 @@ register('preferences.quick-backup-include-mode', False)
|
||||
register('preferences.date-format', 0)
|
||||
register('preferences.calendar-format-report', 0)
|
||||
register('preferences.cprefix', 'C%04d')
|
||||
register('preferences.alternate-fonthandler', False)
|
||||
register('preferences.default-source', False)
|
||||
register('preferences.tag-on-import', False)
|
||||
register('preferences.tag-on-import-format', _("Imported %Y/%m/%d %H:%M:%S"))
|
||||
@@ -325,7 +324,7 @@ if not os.path.exists(CONFIGMAN.filename):
|
||||
# check previous version of gramps:
|
||||
fullpath, filename = os.path.split(CONFIGMAN.filename)
|
||||
fullpath, previous = os.path.split(fullpath)
|
||||
match = re.match('gramps(\d*)', previous)
|
||||
match = re.match(r'gramps(\d*)', previous)
|
||||
if match:
|
||||
# cycle back looking for previous versions of gramps
|
||||
for i in range(1, 20): # check back 2 gramps versions
|
||||
|
||||
+1
-1
@@ -138,7 +138,7 @@ sys.path.insert(0, 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 += git_revision
|
||||
|
||||
#
|
||||
# Glade files
|
||||
|
||||
@@ -124,12 +124,12 @@ class DateParserAR(DateParser):
|
||||
_span_2 = ['إلى']
|
||||
_range_1 = ['بين']
|
||||
_range_2 = ['و']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -166,12 +166,12 @@ class DateParserBG(DateParser):
|
||||
_span_2 = ['до']
|
||||
_range_1 = ['между']
|
||||
_range_2 = ['и']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -98,14 +98,14 @@ class DateParserCA(DateParser):
|
||||
DateParser.init_strings(self)
|
||||
_span_1 = ['des de']
|
||||
_span_2 = ['fins a']
|
||||
_range_1 = ['entre', 'ent\.', 'ent']
|
||||
_range_1 = ['entre', r'ent\.', 'ent']
|
||||
_range_2 = ['i']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -89,10 +89,11 @@ class DateParserDa(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._span = re.compile("(fra)?\s*(?P<start>.+)\s*(til|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(mellem)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(fra)?\s*(?P<start>.+)\s*(til|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(mellem)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -248,14 +248,16 @@ class DateParserDE(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._span = re.compile("(von|vom)\s+(?P<start>.+)\s+(bis)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("zwischen\s+(?P<start>.+)\s+und\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str,
|
||||
re.IGNORECASE)
|
||||
self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str,
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(von|vom)\s+(?P<start>.+)\s+(bis)\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"zwischen\s+(?P<start>.+)\s+und\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
self._text2 = re.compile(
|
||||
r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str,
|
||||
re.IGNORECASE)
|
||||
self._jtext2 = re.compile(
|
||||
r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str,
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -116,14 +116,14 @@ class DateParserEL(DateParser):
|
||||
DateParser.init_strings(self)
|
||||
_span_1 = ['από']
|
||||
_span_2 = ['έως']
|
||||
_range_1 = ['μετ', 'μετ\.', 'μεταξύ']
|
||||
_range_1 = ['μετ', r'μετ\.', 'μεταξύ']
|
||||
_range_2 = ['και']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -97,14 +97,14 @@ class DateParserES(DateParser):
|
||||
DateParser.init_strings(self)
|
||||
_span_1 = ['de']
|
||||
_span_2 = ['a']
|
||||
_range_1 = ['entre', 'ent\.', 'ent']
|
||||
_range_1 = ['entre', r'ent\.', 'ent']
|
||||
_range_2 = ['y']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -98,12 +98,12 @@ class DateParserFI(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._text2 = re.compile('(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._span = re.compile("(?P<start>.+)\s+(-)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._text2 = re.compile(r'(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._span = re.compile(r"(?P<start>.+)\s+(-)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
"(vuosien\s*)?(?P<start>.+)\s+ja\s+(?P<stop>.+)\s+välillä",
|
||||
r"(vuosien\s*)?(?P<start>.+)\s+ja\s+(?P<stop>.+)\s+välillä",
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#
|
||||
|
||||
# Croatian version 2008 by Josip
|
||||
# Croatian version 2018 by Milo
|
||||
|
||||
"""
|
||||
Croatian-specific classes for parsing and displaying dates.
|
||||
@@ -51,13 +52,15 @@ from ._datehandler import register_datehandler
|
||||
#-------------------------------------------------------------------------
|
||||
class DateParserHR(DateParser):
|
||||
modifier_to_int = {
|
||||
'prije' : Date.MOD_BEFORE,
|
||||
'prije' : Date.MOD_BEFORE,
|
||||
'pr. ' : Date.MOD_BEFORE,
|
||||
'poslije' : Date.MOD_AFTER,
|
||||
'po. ' : Date.MOD_AFTER,
|
||||
'okolo' : Date.MOD_ABOUT,
|
||||
'ok. ' : Date.MOD_ABOUT,
|
||||
|
||||
'poslije' : Date.MOD_AFTER,
|
||||
'po. ' : Date.MOD_AFTER,
|
||||
'nakon' : Date.MOD_AFTER,
|
||||
'na. ' : Date.MOD_AFTER,
|
||||
'oko' : Date.MOD_ABOUT,
|
||||
'okolo' : Date.MOD_ABOUT,
|
||||
'ok. ' : Date.MOD_ABOUT,
|
||||
}
|
||||
|
||||
quality_to_int = {
|
||||
@@ -75,19 +78,27 @@ class DateParserHR(DateParser):
|
||||
compiles regular expression strings for matching dates
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
#~ DateParser.calendar_to_int.update({
|
||||
#~ 'персидский' : Date.CAL_PERSIAN,
|
||||
#~ 'п' : Date.CAL_PERSIAN,
|
||||
#~ })
|
||||
|
||||
# match 'Day. MONTH year.' format with or without dots
|
||||
self._text2 = re.compile(r'(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*\.?$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
|
||||
# match Day.Month.Year.
|
||||
self._numeric = re.compile(
|
||||
r"((\d+)[/\. ])?\s*((\d+)[/\.])?\s*(\d+)\.?$")
|
||||
|
||||
self._jtext2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
|
||||
_span_1 = ['od']
|
||||
_span_2 = ['do']
|
||||
_range_1 = ['između']
|
||||
_range_2 = ['i']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@@ -105,11 +116,35 @@ class DateDisplayHR(DateDisplay):
|
||||
|
||||
display = DateDisplay.display_formatted
|
||||
|
||||
def format_short_month_year(self, month, year, inflect, short_months):
|
||||
""" Allow a subclass to modify the year, e.g. add a period """
|
||||
if not hasattr(short_months[1], 'f'): # not a Lexeme: no inflection
|
||||
return "{short_month} {year}.".format(
|
||||
short_month = short_months[month], year = year)
|
||||
return self.FORMATS_short_month_year[inflect].format(
|
||||
short_month = short_months[month], year = year)
|
||||
|
||||
def _get_localized_year(self, year):
|
||||
""" Allow a subclass to modify the year, e.g. add a period """
|
||||
return year + '.'
|
||||
|
||||
# FIXME probably there should be a Croatian-specific "formats" (and this
|
||||
# ("American comma") format (and dd_dformat03 too) should be eliminated)
|
||||
def dd_dformat02(self, date_val, inflect, long_months):
|
||||
""" month_name day, year """
|
||||
return DateDisplay.dd_dformat02(
|
||||
self, date_val, inflect, long_months).replace(' .', '')
|
||||
|
||||
def dd_dformat04(self, date_val, inflect, long_months):
|
||||
""" day month_name year """
|
||||
return DateDisplay.dd_dformat04(
|
||||
self, date_val, inflect, long_months).replace(' .', '')
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
register_datehandler(
|
||||
('hr_HR', 'hr', 'HR', 'croatian', 'Croatian', 'hrvatski', ('%d.%m.%Y',)),
|
||||
('hr_HR', 'hr', 'HR', 'croatian', 'Croatian', 'hrvatski', ('%d. %m. %Y.',)),
|
||||
DateParserHR, DateDisplayHR)
|
||||
|
||||
@@ -228,19 +228,19 @@ class DateParserHU(DateParser):
|
||||
DateParser.init_strings(self)
|
||||
|
||||
self._numeric = re.compile(
|
||||
"((\d+)[/\.])?\s*((\d+)[/\.])?\s*(\d+)[/\. ]?$")
|
||||
r"((\d+)[/\.])?\s*((\d+)[/\.])?\s*(\d+)[/\. ]?$")
|
||||
# this next RE has the (possibly-slashed) year at the string's start
|
||||
self._text2 = re.compile('((\d+)(/\d+)?\.)?\s+?%s\.?\s*(\d+\.)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
_span_1 = ['-tó\(ő\)l', '-tól', '-től']
|
||||
self._text2 = re.compile(r'((\d+)(/\d+)?\.)?\s+?%s\.?\s*(\d+\.)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
_span_1 = [r'-tó\(ő\)l', '-tól', '-től']
|
||||
_span_2 = ['-ig']
|
||||
_range_1 = ['és']
|
||||
_range_2 = ['között']
|
||||
self._span = re.compile("(?P<start>.+)(%s)\s+(?P<stop>.+)(%s)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(?P<start>.+)\s+(%s)\s+(?P<stop>.+)\s+(%s)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(?P<start>.+)(%s)\s+(?P<stop>.+)(%s)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(?P<start>.+)\s+(%s)\s+(?P<stop>.+)\s+(%s)"
|
||||
% ('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
|
||||
|
||||
@@ -90,22 +90,23 @@ class DateParserIs(DateParser):
|
||||
}
|
||||
|
||||
def dhformat_changed(self):
|
||||
self._dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*%(\S).*")
|
||||
self._dhformat_parse = re.compile(r".*%(\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._text2 = re.compile(r'(\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*$"
|
||||
self._numeric = re.compile(r"%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>.+)",
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(frá)?\s*(?P<start>.+)\s*(til|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(milli)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -185,7 +186,8 @@ class DateDisplayIs(DateDisplay):
|
||||
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
|
||||
if (date_val[0] == 0 or date_val[1] == 0 # no day or no month or both
|
||||
or date_val[2] > datetime.MAXYEAR): # bug 10815
|
||||
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]
|
||||
|
||||
@@ -96,12 +96,12 @@ class DateParserIT(DateParser):
|
||||
_span_2 = ['al', 'a']
|
||||
_range_1 = ['tra', 'fra']
|
||||
_range_2 = ['e']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -166,13 +166,13 @@ class DateParserJA(DateParser):
|
||||
_span_2 = ['まで', '']
|
||||
_range_1 = ['から', 'と', '~', '〜']
|
||||
_range_2 = ['までの間', 'の間']
|
||||
self._span = re.compile("(?P<start>.+)(%s)(?P<stop>\d+)(%s)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(?P<start>.+)(%s)(?P<stop>.+)(%s)" %
|
||||
self._span = re.compile(r"(?P<start>.+)(%s)(?P<stop>\d+)(%s)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(?P<start>.+)(%s)(?P<stop>.+)(%s)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
self._numeric = re.compile(r"((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -131,18 +131,19 @@ class DateParserLT(DateParser):
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
# this next RE has the (possibly-slashed) year at the string's start
|
||||
self._text2 = re.compile('((\d+)(/\d+)?)?\s+?m\.\s+%s\s*(\d+)?\s*d?\.?$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._text2 = re.compile(
|
||||
r'((\d+)(/\d+)?)?\s+?m\.\s+%s\s*(\d+)?\s*d?\.?$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
_span_1 = ['nuo']
|
||||
_span_2 = ['iki']
|
||||
_range_1 = ['tarp']
|
||||
_range_2 = ['ir']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -58,6 +58,7 @@ class DateParserNb(DateParser):
|
||||
'innen' : Date.MOD_BEFORE,
|
||||
'etter' : Date.MOD_AFTER,
|
||||
'omkring' : Date.MOD_ABOUT,
|
||||
'omtrent' : Date.MOD_ABOUT,
|
||||
'ca' : Date.MOD_ABOUT
|
||||
}
|
||||
|
||||
@@ -89,12 +90,13 @@ 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>.+)",
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile(
|
||||
r"((\d+)[/\.\s]\s*)?((\d+)[/\.\-\s]\s*)?(\d+)\s*$")
|
||||
self._span = re.compile(
|
||||
r"(fra)?\s*(?P<start>.+)\s*(til|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(mellom)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -173,6 +175,10 @@ class DateDisplayNb(DateDisplay):
|
||||
return "%s%s%s%s" % (qual_str, self._mod_str[mod],
|
||||
text, scal)
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
""" numerical -- for Norwegian dates """
|
||||
return DateDisplay.dd_dformat01(self, date_val).lstrip()
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register classes
|
||||
|
||||
@@ -119,16 +119,14 @@ class DateParserNL(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._span = re.compile("(van)\s+(?P<start>.+)\s+(tot)\s+(?P<stop>.+)",
|
||||
self._span = re.compile(
|
||||
r"(van)\s+(?P<start>.+)\s+(tot)\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
self._range = re.compile(r"tussen\s+(?P<start>.+)\s+en\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("tussen\s+(?P<start>.+)\s+en\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._mon_str,
|
||||
re.IGNORECASE)
|
||||
self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._jmon_str,
|
||||
re.IGNORECASE)
|
||||
self._text2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._jtext2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -156,13 +156,16 @@ class DateParserPL(DateParser):
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._span = re.compile("(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
# Also handle a common mistakes
|
||||
self._range = re.compile("((?:po)?mi(?:ę|e)dzy)\s+(?P<start>.+)\s+(a)\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str,
|
||||
re.IGNORECASE)
|
||||
self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str,
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"((?:po)?mi(?:ę|e)dzy)\s+(?P<start>.+)\s+(a)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._text2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._jtext2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -102,13 +102,13 @@ class DateParserPT(DateParser):
|
||||
DateParser.init_strings(self)
|
||||
_span_1 = ['de']
|
||||
_span_2 = ['a']
|
||||
_range_1 = ['entre','ent\.','ent']
|
||||
_range_1 = ['entre', r'ent\.', 'ent']
|
||||
_range_2 = ['e']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@@ -94,13 +94,13 @@ class DateParserRU(DateParser):
|
||||
_span_1 = ['с', 'от']
|
||||
#_span_2 = ['по', 'до'] # <-- clashes with bce parsing :-(
|
||||
_span_2 = ['по']
|
||||
_range_1 = ['между', 'меж\.', 'меж']
|
||||
_range_1 = ['между', r'меж\.', 'меж']
|
||||
_range_2 = ['и']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@@ -132,6 +132,11 @@ class DateDisplayRU(DateDisplay):
|
||||
inflect, long_months)
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
elif not hasattr(long_months[date_val[1]], 'f'): # not a Lexeme
|
||||
return "{day:d} {long_month} {year}".format(
|
||||
day = date_val[0],
|
||||
long_month = long_months[date_val[1]],
|
||||
year = year)
|
||||
else:
|
||||
return "{day:d} {long_month.f[Р]} {year}".format(
|
||||
day = date_val[0],
|
||||
@@ -151,6 +156,11 @@ class DateDisplayRU(DateDisplay):
|
||||
inflect, short_months)
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
elif not hasattr(short_months[date_val[1]], 'f'): # not a Lexeme
|
||||
return "{day:d} {short_month} {year}".format(
|
||||
day = date_val[0],
|
||||
short_month = short_months[date_val[1]],
|
||||
year = year)
|
||||
else:
|
||||
return "{day:d} {short_month.f[Р]} {year}".format(
|
||||
day = date_val[0],
|
||||
|
||||
@@ -86,11 +86,11 @@ class DateParserSK(DateParser):
|
||||
_span_2 = ['do']
|
||||
_range_1 = ['medzi']
|
||||
_range_2 = ['a']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@@ -88,18 +88,18 @@ class DateParserSL(DateParser):
|
||||
|
||||
DateParser.init_strings(self)
|
||||
# match 'Day. MONTH year.' format with or without dots
|
||||
self._text2 = re.compile('(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*\.?$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._text2 = re.compile(r'(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*\.?$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
# match Day.Month.Year.
|
||||
self._numeric = re.compile("((\d+)[/\.-])?\s*((\d+)[/\.-])?\s*(\d+)\.?$")
|
||||
self._numeric = re.compile(
|
||||
r"((\d+)[/\.-])?\s*((\d+)[/\.-])?\s*(\d+)\.?$")
|
||||
|
||||
self._span = re.compile("od\s+(?P<start>.+)\s+do\s+(?P<stop>.+)",
|
||||
self._span = re.compile(r"od\s+(?P<start>.+)\s+do\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
"med\s+(?P<start>.+)\s+in\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'\
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
r"med\s+(?P<start>.+)\s+in\s+(?P<stop>.+)", re.IGNORECASE)
|
||||
self._jtext2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -208,21 +208,22 @@ class DateParserSR(DateParser):
|
||||
"""
|
||||
DateParser.init_strings(self)
|
||||
# match 'Day. MONTH year.' format with or without dots
|
||||
self._text2 = re.compile('(\d+)?\.?\s*?%s\s*((\d+)(/\d+)?)?\.?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._text2 = re.compile(r'(\d+)?\.?\s*?%s\s*((\d+)(/\d+)?)?\.?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
|
||||
# match Day.Month.Year.
|
||||
self._numeric = re.compile("((\d+)[/\. ])?\s*((\d+)[/\.])?\s*(\d+)\.?$")
|
||||
self._numeric = re.compile(
|
||||
r"((\d+)[/\. ])?\s*((\d+)[/\.])?\s*(\d+)\.?$")
|
||||
|
||||
_span_1 = ['od', 'од']
|
||||
_span_2 = ['do', 'до']
|
||||
_range_1 = ['između', 'између']
|
||||
_range_2 = ['i', 'и']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@@ -95,14 +95,16 @@ class DateParserSv(DateParser):
|
||||
def init_strings(self):
|
||||
""" Define, in Swedish, span and range regular expressions"""
|
||||
DateParser.init_strings(self)
|
||||
self._numeric = re.compile("((\d+)/)?\s*((\d+)/)?\s*(\d+)[/ ]?$")
|
||||
self._numeric = re.compile(r"((\d+)/)?\s*((\d+)/)?\s*(\d+)[/ ]?$")
|
||||
# this next RE has the (possibly-slashed) year at the string's start
|
||||
self._text2 = re.compile('((\d+)(/\d+)?)?\s+?%s\s*(\d+)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._span = re.compile("(från)?\s*(?P<start>.+)\s*(till|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(mellan)\s+(?P<start>.+)\s+och\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._text2 = re.compile(r'((\d+)(/\d+)?)?\s+?%s\s*(\d+)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(från)?\s*(?P<start>.+)\s*(till|--|–)\s*(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(mellan)\s+(?P<start>.+)\s+och\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -108,14 +108,14 @@ class DateParserUK(DateParser):
|
||||
|
||||
_span_1 = ['з', 'від']
|
||||
# b.c.e. pattern also have "до" so skip "до н."
|
||||
_span_2 = ['по', 'до(?!\s+н)']
|
||||
_span_2 = ['по', r'до(?!\s+н)']
|
||||
_range_1 = ['між']
|
||||
_range_2 = ['і', 'та']
|
||||
self._span = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
self._span = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
|
||||
% ('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@@ -124,13 +124,13 @@ class DateParserZH_CN(DateParser):
|
||||
_span_2 = ['至']
|
||||
_range_1 = ['介于']
|
||||
_range_2 = ['与']
|
||||
self._span = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
self._span = re.compile(r"(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
self._numeric = re.compile(r"((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -124,13 +124,13 @@ class DateParserZH_TW(DateParser):
|
||||
_span_2 = ['至']
|
||||
_range_1 = ['介於']
|
||||
_range_2 = ['與']
|
||||
self._span = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
self._span = re.compile(r"(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_span_1), '|'.join(_span_2)),
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(r"(%s)(?P<start>.+)(%s)(?P<stop>\d+)" %
|
||||
('|'.join(_range_1), '|'.join(_range_2)),
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
self._numeric = re.compile(r"((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||
# Copyright (C) 2013 Vassilii Khachaturov
|
||||
# Copyright (C) 2014-2017 Paul Franklin
|
||||
# Copyright (C) 2014-2018 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
|
||||
@@ -570,6 +570,7 @@ class DateDisplay:
|
||||
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] > datetime.MAXYEAR # bug 10815
|
||||
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
|
||||
@@ -578,11 +579,16 @@ class DateDisplay:
|
||||
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] > datetime.MAXYEAR # bug 10815
|
||||
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 _get_localized_year(self, year):
|
||||
""" Allow a subclass to modify the year, e.g. add a period """
|
||||
return year
|
||||
|
||||
def dd_dformat01(self, date_val):
|
||||
"""
|
||||
numerical
|
||||
@@ -594,19 +600,23 @@ class DateDisplay:
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
if date_val[0] == date_val[1] == 0:
|
||||
return str(date_val[2])
|
||||
return self._get_localized_year(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
|
||||
# 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 '%b' in value or '%B' in value:
|
||||
# some locales have %b for the month (ar_EG, is_IS, nb_NO)
|
||||
# so it would be "Jan" but as it's "numeric" 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" make it 1
|
||||
value = value.replace('%B', str(date_val[1]))
|
||||
if '%a' in value or '%A' in value:
|
||||
# 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')
|
||||
if len(value) == i_day + 2: # delimiter is left of the day
|
||||
@@ -628,7 +638,7 @@ class DateDisplay:
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
return self._get_localized_year(year)
|
||||
else:
|
||||
return self.format_long_month_year(date_val[1], year,
|
||||
inflect, long_months)
|
||||
@@ -654,7 +664,7 @@ class DateDisplay:
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
return self._get_localized_year(year)
|
||||
else:
|
||||
return self.format_short_month_year(date_val[1], year,
|
||||
inflect, short_months)
|
||||
@@ -680,7 +690,7 @@ class DateDisplay:
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
return self._get_localized_year(year)
|
||||
else:
|
||||
return self.format_long_month_year(date_val[1], year,
|
||||
inflect, long_months)
|
||||
@@ -706,7 +716,7 @@ class DateDisplay:
|
||||
year = self._slash_year(date_val[2], date_val[3])
|
||||
if date_val[0] == 0:
|
||||
if date_val[1] == 0:
|
||||
return year
|
||||
return self._get_localized_year(year)
|
||||
else:
|
||||
return self.format_short_month_year(date_val[1], year,
|
||||
inflect, short_months)
|
||||
|
||||
@@ -193,7 +193,7 @@ class DateParser:
|
||||
converted, the text string is assigned.
|
||||
"""
|
||||
|
||||
_dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*")
|
||||
_dhformat_parse = re.compile(r".*%(\S).*%(\S).*%(\S).*")
|
||||
|
||||
# RFC-2822 only uses capitalized English abbreviated names, no locales.
|
||||
_rfc_days = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')
|
||||
@@ -423,63 +423,69 @@ class DateParser:
|
||||
# bce, calendar type and quality may be either at the end or at
|
||||
# the beginning of the given date string, therefore they will
|
||||
# be parsed from the middle and will be in match.group(2).
|
||||
self._bce_re = re.compile("(.*)\s+%s( ?.*)" % self._bce_str)
|
||||
self._bce_re = re.compile(r"(.*)\s+%s( ?.*)" % self._bce_str)
|
||||
|
||||
self._cal = re.compile("(.*)\s+\(%s\)( ?.*)" % self._cal_str,
|
||||
re.IGNORECASE)
|
||||
self._calny = re.compile("(.*)\s+\(%s,\s*%s\)( ?.*)" % (self._cal_str,
|
||||
self._ny_str),
|
||||
re.IGNORECASE)
|
||||
self._calny_iso = re.compile("(.*)\s+\(%s,\s*(\d{1,2}-\d{1,2})\)( ?.*)" % self._cal_str,
|
||||
re.IGNORECASE)
|
||||
self._cal = re.compile(r"(.*)\s+\(%s\)( ?.*)" % self._cal_str,
|
||||
re.IGNORECASE)
|
||||
self._calny = re.compile(r"(.*)\s+\(%s,\s*%s\)( ?.*)" %
|
||||
(self._cal_str, self._ny_str), re.IGNORECASE)
|
||||
self._calny_iso = re.compile(
|
||||
r"(.*)\s+\(%s,\s*(\d{1,2}-\d{1,2})\)( ?.*)" % self._cal_str,
|
||||
re.IGNORECASE)
|
||||
|
||||
self._ny = re.compile("(.*)\s+\(%s\)( ?.*)" % self._ny_str,
|
||||
re.IGNORECASE)
|
||||
self._ny_iso = re.compile("(.*)\s+\((\d{1,2}-\d{1,2})\)( ?.*)")
|
||||
self._ny = re.compile(r"(.*)\s+\(%s\)( ?.*)" % self._ny_str,
|
||||
re.IGNORECASE)
|
||||
self._ny_iso = re.compile(r"(.*)\s+\((\d{1,2}-\d{1,2})\)( ?.*)")
|
||||
|
||||
self._qual = re.compile("(.* ?)%s\s+(.+)" % self._qual_str,
|
||||
re.IGNORECASE)
|
||||
self._qual = re.compile(r"(.* ?)%s\s+(.+)" % self._qual_str,
|
||||
re.IGNORECASE)
|
||||
|
||||
self._span = re.compile("(from)\s+(?P<start>.+)\s+to\s+(?P<stop>.+)",
|
||||
self._span = re.compile(r"(from)\s+(?P<start>.+)\s+to\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(bet|bet.|between)\s+(?P<start>.+)\s+and\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._modifier = re.compile(r'%s\s+(.*)' % self._mod_str,
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile("(bet|bet.|between)\s+(?P<start>.+)\s+and\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._modifier = re.compile('%s\s+(.*)' % self._mod_str,
|
||||
re.IGNORECASE)
|
||||
self._modifier_after = re.compile('(.*)\s+%s' % self._mod_after_str,
|
||||
self._modifier_after = re.compile(r'(.*)\s+%s' % self._mod_after_str,
|
||||
re.IGNORECASE)
|
||||
self._abt2 = re.compile('<(.*)>', re.IGNORECASE)
|
||||
self._text = re.compile('%s\.?(\s+\d+)?\s*,?\s+((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._abt2 = re.compile('<(.*)>', re.IGNORECASE)
|
||||
self._text = re.compile(r'%s\.?(\s+\d+)?\s*,?\s+((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
# this next RE has the (possibly-slashed) year at the string's end
|
||||
self._text2 = re.compile('(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' % self._mon_str,
|
||||
re.IGNORECASE)
|
||||
self._jtext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._jmon_str,
|
||||
re.IGNORECASE)
|
||||
self._jtext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._jmon_str,
|
||||
re.IGNORECASE)
|
||||
self._ftext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._fmon_str,
|
||||
re.IGNORECASE)
|
||||
self._ftext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._fmon_str,
|
||||
re.IGNORECASE)
|
||||
self._ptext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._pmon_str,
|
||||
re.IGNORECASE)
|
||||
self._ptext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._pmon_str,
|
||||
re.IGNORECASE)
|
||||
self._itext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._imon_str,
|
||||
re.IGNORECASE)
|
||||
self._itext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._imon_str,
|
||||
re.IGNORECASE)
|
||||
self._stext = re.compile('%s\.?\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._smon_str,
|
||||
re.IGNORECASE)
|
||||
self._stext2 = re.compile('(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' % self._smon_str,
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)[/\.]\s*)?((\d+)[/\.]\s*)?(\d+)\s*$")
|
||||
self._iso = re.compile("(\d+)(/(\d+))?-(\d+)-(\d+)\s*$")
|
||||
self._isotimestamp = re.compile("^\s*?(\d{4})([01]\d)([0123]\d)(?:(?:[012]\d[0-5]\d[0-5]\d)|(?:\s+[012]\d:[0-5]\d(?::[0-5]\d)?))?\s*?$")
|
||||
self._rfc = re.compile("(%s,)?\s+(\d|\d\d)\s+%s\s+(\d+)\s+\d\d:\d\d(:\d\d)?\s+(\+|-)\d\d\d\d"
|
||||
% (self._rfc_day_str, self._rfc_mon_str))
|
||||
self._today = re.compile("^\s*%s\s*$" % self._today_str, re.IGNORECASE)
|
||||
self._text2 = re.compile(r'(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._jtext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
self._jtext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._jmon_str, re.IGNORECASE)
|
||||
self._ftext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._fmon_str, re.IGNORECASE)
|
||||
self._ftext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._fmon_str, re.IGNORECASE)
|
||||
self._ptext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._pmon_str, re.IGNORECASE)
|
||||
self._ptext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._pmon_str, re.IGNORECASE)
|
||||
self._itext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._imon_str, re.IGNORECASE)
|
||||
self._itext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._imon_str, re.IGNORECASE)
|
||||
self._stext = re.compile(r'%s\.?\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._smon_str, re.IGNORECASE)
|
||||
self._stext2 = re.compile(r'(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._smon_str, re.IGNORECASE)
|
||||
self._numeric = re.compile(
|
||||
r"((\d+)[/\.]\s*)?((\d+)[/\.]\s*)?(\d+)\s*$")
|
||||
self._iso = re.compile(r"(\d+)(/(\d+))?-(\d+)-(\d+)\s*$")
|
||||
self._isotimestamp = re.compile(
|
||||
r"^\s*?(\d{4})([01]\d)([0123]\d)(?:(?:[012]\d[0-5]\d[0-5]\d)|"
|
||||
r"(?:\s+[012]\d:[0-5]\d(?::[0-5]\d)?))?\s*?$")
|
||||
self._rfc = re.compile(
|
||||
r"(%s,)?\s+(\d|\d\d)\s+%s\s+(\d+)\s+\d\d:\d\d(:\d\d)?\s+"
|
||||
r"(\+|-)\d\d\d\d" % (self._rfc_day_str, self._rfc_mon_str))
|
||||
self._today = re.compile(r"^\s*%s\s*$" % self._today_str,
|
||||
re.IGNORECASE)
|
||||
|
||||
def _get_int(self, val):
|
||||
"""
|
||||
|
||||
@@ -2461,4 +2461,5 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
|
||||
enclosed_by = ""
|
||||
for placeref in place.get_placeref_list():
|
||||
enclosed_by = placeref.ref
|
||||
break
|
||||
return enclosed_by
|
||||
|
||||
@@ -1059,13 +1059,13 @@ class NameDisplay:
|
||||
format_str = format_str[1:]
|
||||
else:
|
||||
patterns = [
|
||||
",\W*\"%(" + ("|".join(codes)) + ")\"", # ,\W*"%s"
|
||||
",\W*\(%(" + ("|".join(codes)) + ")\)", # ,\W*(%s)
|
||||
",\W*%(" + ("|".join(codes)) + ")", # ,\W*%s
|
||||
"\"%(" + ("|".join(codes)) + ")\"", # "%s"
|
||||
"_%(" + ("|".join(codes)) + ")_", # _%s_
|
||||
"\(%(" + ("|".join(codes)) + ")\)", # (%s)
|
||||
"%(" + ("|".join(codes)) + ")", # %s
|
||||
",\\W*\"%(" + ("|".join(codes)) + ")\"", # ,\W*"%s"
|
||||
",\\W*\\(%(" + ("|".join(codes)) + ")\\)", # ,\W*(%s)
|
||||
",\\W*%(" + ("|".join(codes)) + ")", # ,\W*%s
|
||||
"\"%(" + ("|".join(codes)) + ")\"", # "%s"
|
||||
"_%(" + ("|".join(codes)) + ")_", # _%s_
|
||||
"\\(%(" + ("|".join(codes)) + ")\\)", # (%s)
|
||||
"%(" + ("|".join(codes)) + ")", # %s
|
||||
]
|
||||
new_fmt = format_str
|
||||
|
||||
|
||||
+23
-16
@@ -35,7 +35,8 @@ import xml.dom.minidom
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..const import PLACE_FORMATS
|
||||
from ..const import PLACE_FORMATS, GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
from ..config import config
|
||||
from ..utils.location import get_location_list
|
||||
from ..lib import PlaceType
|
||||
@@ -53,11 +54,6 @@ class PlaceFormat:
|
||||
self.street = street
|
||||
self.reverse = reverse
|
||||
|
||||
def to_xml(self):
|
||||
return (' <format name="%s" levels="%s" language="%s" '
|
||||
'street="%s" reverse="%s"/>\n' %
|
||||
(self.name, self.levels, self.language,
|
||||
self.street, self.reverse))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -70,10 +66,13 @@ class PlaceDisplay:
|
||||
self.place_formats = []
|
||||
self.default_format = config.get('preferences.place-format')
|
||||
if os.path.exists(PLACE_FORMATS):
|
||||
self.load_formats()
|
||||
else:
|
||||
pf = PlaceFormat('Full', ':', '', 0, False)
|
||||
self.place_formats.append(pf)
|
||||
try:
|
||||
self.load_formats()
|
||||
return
|
||||
except BaseException:
|
||||
print(_("Error in '%s' file: cannot load.") % PLACE_FORMATS)
|
||||
pf = PlaceFormat(_('Full'), ':', '', 0, False)
|
||||
self.place_formats.append(pf)
|
||||
|
||||
def display_event(self, db, event, fmt=-1):
|
||||
if not event:
|
||||
@@ -163,12 +162,20 @@ class PlaceDisplay:
|
||||
dom.unlink()
|
||||
|
||||
def save_formats(self):
|
||||
with open(PLACE_FORMATS, 'w') as fd:
|
||||
fd.write('<?xml version="1.0" encoding="utf-8"?>\n')
|
||||
fd.write('<place_formats>\n')
|
||||
for fmt in self.place_formats:
|
||||
fd.write(fmt.to_xml())
|
||||
fd.write('</place_formats>\n')
|
||||
doc = xml.dom.minidom.Document()
|
||||
place_formats = doc.createElement('place_formats')
|
||||
doc.appendChild(place_formats)
|
||||
for fmt in self.place_formats:
|
||||
node = doc.createElement('format')
|
||||
place_formats.appendChild(node)
|
||||
node.setAttribute('name', fmt.name)
|
||||
node.setAttribute('levels', fmt.levels)
|
||||
node.setAttribute('language', fmt.language)
|
||||
node.setAttribute('street', str(fmt.street))
|
||||
node.setAttribute('reverse', str(fmt.reverse))
|
||||
with open(PLACE_FORMATS, 'w', encoding='utf-8') as f_d:
|
||||
doc.writexml(f_d, addindent=' ', newl='\n', encoding='utf-8')
|
||||
|
||||
|
||||
def _get_offset(value, index):
|
||||
if index is not None and value.startswith('p'):
|
||||
|
||||
@@ -62,6 +62,9 @@ class FilterParser(handler.ContentHandler):
|
||||
self.namespace = attrs['type']
|
||||
else:
|
||||
self.namespace = "generic"
|
||||
if self.namespace == 'MediaObject':
|
||||
# deals with older custom filters
|
||||
self.namespace = 'Media'
|
||||
elif tag == "filter":
|
||||
self.f = GenericFilterFactory(self.namespace)()
|
||||
self.f.set_name(attrs['name'])
|
||||
|
||||
@@ -124,6 +124,9 @@ class GenericFilter:
|
||||
def get_cursor(self, db):
|
||||
return db.get_person_cursor()
|
||||
|
||||
def get_tree_cursor(self, db):
|
||||
return db.get_person_cursor()
|
||||
|
||||
def make_obj(self):
|
||||
return Person()
|
||||
|
||||
@@ -133,13 +136,15 @@ class GenericFilter:
|
||||
def get_number(self, db):
|
||||
return db.get_number_of_people()
|
||||
|
||||
def check_func(self, db, id_list, task, user=None, tupleind=None):
|
||||
def check_func(self, db, id_list, task, user=None, tupleind=None,
|
||||
tree=False):
|
||||
final_list = []
|
||||
if user:
|
||||
user.begin_progress(_('Filter'), _('Applying ...'),
|
||||
self.get_number(db))
|
||||
if id_list is None:
|
||||
with self.get_cursor(db) as cursor:
|
||||
with (self.get_tree_cursor(db) if tree else
|
||||
self.get_cursor(db)) as cursor:
|
||||
for handle, data in cursor:
|
||||
person = self.make_obj()
|
||||
person.unserialize(data)
|
||||
@@ -162,14 +167,15 @@ class GenericFilter:
|
||||
user.end_progress()
|
||||
return final_list
|
||||
|
||||
def check_and(self, db, id_list, user=None, tupleind=None):
|
||||
def check_and(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
final_list = []
|
||||
flist = self.flist
|
||||
if user:
|
||||
user.begin_progress(_('Filter'), _('Applying ...'),
|
||||
self.get_number(db))
|
||||
if id_list is None:
|
||||
with self.get_cursor(db) as cursor:
|
||||
with (self.get_tree_cursor(db) if tree else
|
||||
self.get_cursor(db)) as cursor:
|
||||
for handle, data in cursor:
|
||||
person = self.make_obj()
|
||||
person.unserialize(data)
|
||||
@@ -194,14 +200,17 @@ class GenericFilter:
|
||||
user.end_progress()
|
||||
return final_list
|
||||
|
||||
def check_or(self, db, id_list, user=None, tupleind=None):
|
||||
return self.check_func(db, id_list, self.or_test, user, tupleind)
|
||||
def check_or(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
return self.check_func(db, id_list, self.or_test, user, tupleind,
|
||||
tree=False)
|
||||
|
||||
def check_one(self, db, id_list, user=None, tupleind=None):
|
||||
return self.check_func(db, id_list, self.one_test, user, tupleind)
|
||||
def check_one(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
return self.check_func(db, id_list, self.one_test, user, tupleind,
|
||||
tree=False)
|
||||
|
||||
def check_xor(self, db, id_list, user=None, tupleind=None):
|
||||
return self.check_func(db, id_list, self.xor_test, user, tupleind)
|
||||
def check_xor(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
return self.check_func(db, id_list, self.xor_test, user, tupleind,
|
||||
tree=False)
|
||||
|
||||
def xor_test(self, db, person):
|
||||
test = False
|
||||
@@ -231,7 +240,7 @@ class GenericFilter:
|
||||
def check(self, db, handle):
|
||||
return self.get_check_func()(db, [handle])
|
||||
|
||||
def apply(self, db, id_list=None, tupleind=None, user=None):
|
||||
def apply(self, db, id_list=None, tupleind=None, user=None, tree=False):
|
||||
"""
|
||||
Apply the filter using db.
|
||||
If id_list given, the handles in id_list are used. If not given
|
||||
@@ -251,7 +260,7 @@ class GenericFilter:
|
||||
m = self.get_check_func()
|
||||
for rule in self.flist:
|
||||
rule.requestprepare(db, user)
|
||||
res = m(db, id_list, user, tupleind)
|
||||
res = m(db, id_list, user, tupleind, tree)
|
||||
for rule in self.flist:
|
||||
rule.requestreset()
|
||||
return res
|
||||
@@ -315,6 +324,9 @@ class GenericCitationFilter(GenericFilter):
|
||||
def get_cursor(self, db):
|
||||
return db.get_citation_cursor()
|
||||
|
||||
def get_tree_cursor(self, db):
|
||||
return db.get_citation_cursor()
|
||||
|
||||
def make_obj(self):
|
||||
return Citation()
|
||||
|
||||
@@ -332,6 +344,9 @@ class GenericPlaceFilter(GenericFilter):
|
||||
def get_cursor(self, db):
|
||||
return db.get_place_cursor()
|
||||
|
||||
def get_tree_cursor(self, db):
|
||||
return db.get_place_tree_cursor()
|
||||
|
||||
def make_obj(self):
|
||||
return Place()
|
||||
|
||||
|
||||
@@ -56,17 +56,17 @@ class ChangedSinceBase(Rule):
|
||||
category = _('General filters')
|
||||
|
||||
def add_time(self, date):
|
||||
if re.search("\d.*\s+\d{1,2}:\d{2}:\d{2}", date):
|
||||
if re.search(r"\d.*\s+\d{1,2}:\d{2}:\d{2}", date):
|
||||
return date
|
||||
elif re.search("\d.*\s+\d{1,2}:\d{2}", date):
|
||||
elif re.search(r"\d.*\s+\d{1,2}:\d{2}", date):
|
||||
return date + ":00"
|
||||
elif re.search("\d.*\s+\d{1,2}", date):
|
||||
elif re.search(r"\d.*\s+\d{1,2}", date):
|
||||
return date + ":00:00"
|
||||
elif re.search("\d{4}-\d{1,2}-\d{1,2}", date):
|
||||
elif re.search(r"\d{4}-\d{1,2}-\d{1,2}", date):
|
||||
return date + " 00:00:00"
|
||||
elif re.search("\d{4}-\d{1,2}", date):
|
||||
elif re.search(r"\d{4}-\d{1,2}", date):
|
||||
return date + "-01 00:00:00"
|
||||
elif re.search("\d{4}", date):
|
||||
elif re.search(r"\d{4}", date):
|
||||
return date + "-01-01 00:00:00"
|
||||
else:
|
||||
return date
|
||||
|
||||
@@ -28,9 +28,11 @@ Base class for filter rules.
|
||||
# Standard Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import re
|
||||
|
||||
from ...errors import FilterError
|
||||
from ...const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
import re
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@@ -88,6 +90,10 @@ class Rule:
|
||||
self.match_substring = self.match_regex
|
||||
self.prepare(db, user)
|
||||
self.nrprepare += 1
|
||||
if self.nrprepare > 20: # more references to a filter than expected
|
||||
raise FilterError(_("The filter definition contains a loop."),
|
||||
_("One rule references another which eventually"
|
||||
" references the first."))
|
||||
|
||||
def prepare(self, db, user):
|
||||
"""prepare so the rule can be executed efficiently"""
|
||||
|
||||
@@ -72,18 +72,15 @@ class IsDuplicatedAncestorOf(Rule):
|
||||
f_id = fam.get_father_handle()
|
||||
m_id = fam.get_mother_handle()
|
||||
if m_id:
|
||||
self.mother_side(db, db.get_person_from_handle(m_id))
|
||||
self.go_deeper(db, db.get_person_from_handle(m_id))
|
||||
if f_id:
|
||||
self.father_side(db, db.get_person_from_handle(f_id))
|
||||
self.go_deeper(db, db.get_person_from_handle(f_id))
|
||||
|
||||
def mother_side(self, db, person):
|
||||
if person and person.handle in self.map:
|
||||
self.map2.add((person.handle))
|
||||
self.map.add((person.handle))
|
||||
self.init_ancestor_list(db, person)
|
||||
|
||||
def father_side(self, db, person):
|
||||
def go_deeper(self, db, person):
|
||||
if person and person.handle in self.map:
|
||||
self.map2.add((person.handle))
|
||||
# the following keeps from scanning same parts of tree multiple
|
||||
# times and avoids crash on tree loops.
|
||||
return
|
||||
self.map.add((person.handle))
|
||||
self.init_ancestor_list(db, person)
|
||||
|
||||
@@ -75,6 +75,8 @@ class RelationshipPathBetween(Rule):
|
||||
self.desc_list(child_ref.ref, map, 0)
|
||||
|
||||
def apply_filter(self, rank, handle, plist, pmap):
|
||||
if not handle:
|
||||
return
|
||||
person = self.db.get_person_from_handle(handle)
|
||||
if person is None:
|
||||
return
|
||||
|
||||
@@ -520,11 +520,11 @@ class Place(CitationBase, NoteBase, MediaBase, UrlBase, PrimaryObject):
|
||||
Return a list of alternate :class:`~.location.Location` objects the
|
||||
present alternate information about the current Place.
|
||||
|
||||
A Place can have more than one :class:`~.location.Location`, since names
|
||||
and jurisdictions can change over time for the same place.
|
||||
A Place can have more than one :class:`~.location.Location`, since
|
||||
names and jurisdictions can change over time for the same place.
|
||||
|
||||
:returns: Returns the alternate :class:`~.location.Location`\ s for the
|
||||
Place
|
||||
:returns: Returns the alternate :class:`~.location.Location` objects
|
||||
for the Place
|
||||
:rtype: list of :class:`~.location.Location` objects
|
||||
"""
|
||||
return self.alt_loc
|
||||
|
||||
@@ -133,7 +133,8 @@ class MergeFamilyQuery:
|
||||
old_handle = self.titanic.get_handle()
|
||||
|
||||
with DbTxn(_('Merge Family'), self.database) as trans:
|
||||
|
||||
# commit family in case Phoenix GrampsID, relationship has changed
|
||||
self.database.commit_family(self.phoenix, trans)
|
||||
if self.phoenix_fh != self.titanic_fh:
|
||||
if self.phoenix_fh:
|
||||
phoenix_father = self.database.get_person_from_handle(
|
||||
@@ -161,13 +162,21 @@ class MergeFamilyQuery:
|
||||
titanic_mother = None
|
||||
self.merge_person(phoenix_mother, titanic_mother,
|
||||
'mother', trans)
|
||||
# Reload families from db in case the merge_person above changed
|
||||
# them
|
||||
self.phoenix = self.database.get_family_from_handle(new_handle)
|
||||
self.titanic = self.database.get_family_from_handle(old_handle)
|
||||
|
||||
phoenix_father = self.database.get_person_from_handle(self.phoenix_fh)
|
||||
phoenix_mother = self.database.get_person_from_handle(self.phoenix_mh)
|
||||
self.phoenix = self.database.get_family_from_handle(new_handle)
|
||||
self.titanic = self.database.get_family_from_handle(old_handle)
|
||||
if self.phoenix_fh:
|
||||
phoenix_father = self.database.get_person_from_handle(
|
||||
self.phoenix_fh)
|
||||
else:
|
||||
phoenix_father = None
|
||||
if self.phoenix_mh:
|
||||
phoenix_mother = self.database.get_person_from_handle(
|
||||
self.phoenix_mh)
|
||||
else:
|
||||
phoenix_mother = None
|
||||
self.phoenix.merge(self.titanic)
|
||||
self.database.commit_family(self.phoenix, trans)
|
||||
for childref in self.titanic.get_child_ref_list():
|
||||
|
||||
@@ -85,7 +85,7 @@ def _get_extension(mime_type):
|
||||
extension = None
|
||||
try:
|
||||
hcr = ConnectRegistry(None, HKEY_CLASSES_ROOT)
|
||||
subkey = OpenKey(hcr, "MIME\DataBase\Content Type")
|
||||
subkey = OpenKey(hcr, r"MIME\DataBase\Content Type")
|
||||
mimekey = OpenKey(subkey, mime_type)
|
||||
extension, value_type = QueryValueEx(mimekey, "Extension")
|
||||
CloseKey(mimekey)
|
||||
|
||||
@@ -33,9 +33,11 @@ LOG = logging.getLogger(".Gramplets")
|
||||
# Gramps modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from ...gui.dbguielement import DbGUIElement
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
|
||||
class Gramplet:
|
||||
"""
|
||||
Base class for non-graphical gramplet code.
|
||||
@@ -397,6 +399,13 @@ class Gramplet:
|
||||
if hasattr(self.gui, 'navtypes') and 'Person' in self.gui.navtypes:
|
||||
self.connect_signal('Person', self._active_changed)
|
||||
self.db_changed()
|
||||
# Some Gramplets use DbGUIElement; and DbGUIElement needs to know if
|
||||
# db is changed. However, at initialization, DbGUIElement is not yet
|
||||
# initialized when _db_changed is called, thus the test for callman
|
||||
if hasattr(self, "callman") and isinstance(self, DbGUIElement):
|
||||
# get DbGUIElement informed if in use
|
||||
self._change_db(db) # DbGUIElement method
|
||||
|
||||
self.update()
|
||||
|
||||
def _no_db(self):
|
||||
|
||||
@@ -206,7 +206,7 @@ class DocBackend:
|
||||
|
||||
if not self.STYLETYPE_MAP or \
|
||||
self.CLASSMAP != tagtype.__class__.__name__ :
|
||||
self.CLASSMAP == tagtype.__class__.__name__
|
||||
self.CLASSMAP = tagtype.__class__.__name__
|
||||
self.STYLETYPE_MAP[tagtype.BOLD] = self.BOLD
|
||||
self.STYLETYPE_MAP[tagtype.ITALIC] = self.ITALIC
|
||||
self.STYLETYPE_MAP[tagtype.UNDERLINE] = self.UNDERLINE
|
||||
@@ -217,7 +217,7 @@ class DocBackend:
|
||||
self.STYLETYPE_MAP[tagtype.SUPERSCRIPT] = self.SUPERSCRIPT
|
||||
self.STYLETYPE_MAP[tagtype.LINK] = self.LINK
|
||||
|
||||
if s_tag.name == 'Link':
|
||||
if s_tag.name == tagtype.LINK:
|
||||
return self.format_link(s_tag.value)
|
||||
typeval = int(s_tag.name)
|
||||
s_tagvalue = s_tag.value
|
||||
|
||||
@@ -63,7 +63,7 @@ LOG = logging.getLogger(".graphdoc")
|
||||
# Private Constants
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
_FONTS = [{'name' : _("Default"), 'value' : ""},
|
||||
_FONTS = [{'name' : _("Default"), 'value' : "serif"},
|
||||
{'name' : _("PostScript / Helvetica"), 'value' : "Helvetica"},
|
||||
{'name' : _("TrueType / FreeSans"), 'value' : "FreeSans"}]
|
||||
|
||||
@@ -977,8 +977,9 @@ class GVPdfGsDoc(GVDocBase):
|
||||
tmp_pdf_piece = "%s_%d_%d.pdf" % (tmp_ps, __x, __y)
|
||||
list_of_pieces.append(tmp_pdf_piece)
|
||||
# Generate Ghostscript code
|
||||
command = '%s -q -dBATCH -dNOPAUSE -dSAFER -g%dx%d '\
|
||||
'-sOutputFile="%s" -r72 -sDEVICE=pdfwrite '\
|
||||
command = '%s -q -dBATCH -dNOPAUSE -dSAFER '\
|
||||
'-dDEVICEWIDTHPOINTS=%d -dDEVICEHEIGHTPOINTS=%d '\
|
||||
'-sOutputFile="%s" -sDEVICE=pdfwrite '\
|
||||
'-c "<</.HWMargins [%d %d %d %d] /PageOffset [%d %d]>> '\
|
||||
'setpagedevice" -f "%s"' % (
|
||||
_GS_CMD, width_pt + 10, height_pt + 10, tmp_pdf_piece,
|
||||
@@ -988,7 +989,7 @@ class GVPdfGsDoc(GVDocBase):
|
||||
os.system(command)
|
||||
# Merge pieces to single multipage PDF ;
|
||||
command = '%s -q -dBATCH -dNOPAUSE '\
|
||||
'-sOUTPUTFILE="%s" -r72 -sDEVICE=pdfwrite %s '\
|
||||
'-sOUTPUTFILE="%s" -sDEVICE=pdfwrite %s '\
|
||||
% (_GS_CMD, self._filename, ' '.join(list_of_pieces))
|
||||
os.system(command)
|
||||
|
||||
|
||||
@@ -340,3 +340,4 @@ def add_place_format_option(menu, category):
|
||||
place_format.add_item(number, fmt.name)
|
||||
place_format.set_help(_("Select the format to display places"))
|
||||
menu.add_option(category, "place_format", place_format)
|
||||
return place_format
|
||||
|
||||
@@ -427,9 +427,10 @@ class ReferencedBySelectionProxyDb(ProxyDbBase):
|
||||
def process_lds_ord(self, lds_ord):
|
||||
""" Find all of the primary objects referred to """
|
||||
fam_handle = lds_ord.get_family_handle()
|
||||
fam = self.db.get_family_from_handle(fam_handle)
|
||||
if fam:
|
||||
self.queue_object("Family", fam_handle)
|
||||
if fam_handle:
|
||||
fam = self.db.get_family_from_handle(fam_handle)
|
||||
if fam:
|
||||
self.queue_object("Family", fam_handle)
|
||||
|
||||
place_handle = lds_ord.get_place_handle()
|
||||
if place_handle:
|
||||
|
||||
@@ -2181,18 +2181,18 @@ class RelationshipCalculator:
|
||||
return trans_text("gender unknown|ex-spouse")
|
||||
elif spouse_type == self.PARTNER_UNMARRIED:
|
||||
if gender == MALE:
|
||||
return trans_text("unmarried|husband")
|
||||
return trans_text("male,unmarried|partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("unmarried|wife")
|
||||
return trans_text("female,unmarried|partner")
|
||||
else:
|
||||
return trans_text("gender unknown,unmarried|spouse")
|
||||
return trans_text("gender unknown,unmarried|partner")
|
||||
elif spouse_type == self.PARTNER_EX_UNMARRIED:
|
||||
if gender == MALE:
|
||||
return trans_text("unmarried|ex-husband")
|
||||
return trans_text("male,unmarried|ex-partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("unmarried|ex-wife")
|
||||
return trans_text("female,unmarried|ex-partner")
|
||||
else:
|
||||
return trans_text("gender unknown,unmarried|ex-spouse")
|
||||
return trans_text("gender unknown,unmarried|ex-partner")
|
||||
elif spouse_type == self.PARTNER_CIVIL_UNION:
|
||||
if gender == MALE:
|
||||
return trans_text("male,civil union|partner")
|
||||
|
||||
@@ -787,7 +787,8 @@ class SimpleAccess:
|
||||
|
||||
with self.dbase.get_person_cursor() as cursor:
|
||||
# data[3] is primary_name; data[3][5][0][0] is surname
|
||||
slist = sorted((data[3][5][0][0], key) for key, data in cursor)
|
||||
slist = sorted((data[3][5][0][0] if data[3][5] else '', key)
|
||||
for key, data in cursor)
|
||||
|
||||
for info in slist:
|
||||
obj = self.dbase.get_person_from_handle(info[1])
|
||||
|
||||
@@ -34,7 +34,7 @@ import unicodedata
|
||||
# constants
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
IGNORE = "HW~!@#$%^&*()_+=-`[]\|;:'/?.,<>\" \t\f\v"
|
||||
IGNORE = "HW~!@#$%^&*()_+=-`[]\\|;:'/?.,<>\" \t\f\v"
|
||||
TABLE = bytes.maketrans(b'ABCDEFGIJKLMNOPQRSTUVXYZ',
|
||||
b'012301202245501262301202')
|
||||
|
||||
|
||||
@@ -256,7 +256,7 @@ def get_participant_from_event(db, event_handle, all_=False):
|
||||
Obtain the first primary or family participant to an event we find in the
|
||||
database. Note that an event can have more than one primary or
|
||||
family participant, only one is returned, adding ellipses if there are
|
||||
more. If the all\_ parameter is true a comma-space separated string with
|
||||
more. If the all_ parameter is true a comma-space separated string with
|
||||
the names of all primary participants is returned and no ellipses is used.
|
||||
"""
|
||||
participant = ""
|
||||
|
||||
@@ -251,11 +251,17 @@ def create_checksum(full_path):
|
||||
Create a md5 hash for the given file.
|
||||
"""
|
||||
full_path = os.path.normpath(full_path)
|
||||
md5 = hashlib.md5()
|
||||
try:
|
||||
with open(full_path, 'rb') as media_file:
|
||||
md5sum = hashlib.md5(media_file.read()).hexdigest()
|
||||
while True:
|
||||
buf = media_file.read(65536)
|
||||
if not buf:
|
||||
break
|
||||
md5.update(buf)
|
||||
md5sum = md5.hexdigest()
|
||||
except IOError:
|
||||
md5sum = ''
|
||||
md5sum = ''
|
||||
except UnicodeEncodeError:
|
||||
md5sum = ''
|
||||
md5sum = ''
|
||||
return md5sum
|
||||
|
||||
@@ -266,7 +266,7 @@ def mac_setup_localization(glocale):
|
||||
LOG.debug("No supported languages found in $LANGUAGE")
|
||||
if not (language and language[0]):
|
||||
translations = _mac_language_list()
|
||||
if len(translations) > 0:
|
||||
if translations and len(translations) > 0:
|
||||
language = translations
|
||||
LOG.debug("Returning Translations %s", ':'.join(translations))
|
||||
|
||||
|
||||
@@ -283,13 +283,6 @@ def __convert_float_val(val, typedeg="lat"):
|
||||
# it is checked that degree >0, 0<= minutes <= 60,
|
||||
# 0<= seconds <= 60, direction is in the directions dic.
|
||||
|
||||
#change , to . so that , input works in non , localization
|
||||
#this is no problem, as a number like 100,000.20 cannot appear in
|
||||
#lat/lon
|
||||
#change XX,YY into XX.YY
|
||||
if val.find(r'.') == -1:
|
||||
val = val.replace(',', '.')
|
||||
|
||||
# format: XX.YYYY
|
||||
v = __convert_using_float_repr(val)
|
||||
if v is not None:
|
||||
|
||||
@@ -183,10 +183,10 @@ class PlaceTest(unittest.TestCase):
|
||||
|
||||
def test_decimal_localization(self):
|
||||
lat, lon = '50.849888888888', '2,885897222222'
|
||||
self._test_formats_success(lat, lon)
|
||||
self._test_formats_fail(lat, lon)
|
||||
|
||||
lat, lon = '89°59\'59.9999"S', '179°59\'59,9999"W'
|
||||
self._test_formats_success(lat, lon)
|
||||
self._test_formats_fail(lat, lon)
|
||||
|
||||
lat, lon = '89°59\'1.599,999"S', '179°59\'59,9999"W'
|
||||
self._test_formats_fail(lat, lon)
|
||||
|
||||
+1
-2
@@ -477,8 +477,7 @@ def main():
|
||||
resource_path, filename = os.path.split(os.path.abspath(__file__))
|
||||
resource_path, dirname = os.path.split(resource_path)
|
||||
os.environ['GRAMPS_RESOURCES'] = resource_path
|
||||
if win() and ('PANGOCAIRO_BACKEND' not in os.environ) and \
|
||||
config.get('preferences.alternate-fonthandler'):
|
||||
if win() and ('PANGOCAIRO_BACKEND' not in os.environ):
|
||||
os.environ['PANGOCAIRO_BACKEND'] = "fontconfig"
|
||||
errors = run()
|
||||
if errors and isinstance(errors, list):
|
||||
|
||||
@@ -1293,9 +1293,9 @@ class ClipboardListView:
|
||||
data = [_ob.__class__.DRAG_TARGET.drag_type, _ob, None,
|
||||
_ob._type, _ob._value, _ob._dbid, _ob._dbname]
|
||||
contains = model_contains(model, data)
|
||||
if (contains and
|
||||
if (contains and not
|
||||
((context.action if hasattr(context, "action") else
|
||||
context.get_actions()) != Gdk.DragAction.MOVE)):
|
||||
context.get_actions()) & Gdk.DragAction.MOVE)):
|
||||
continue
|
||||
drop_info = widget.get_dest_row_at_pos(x, y)
|
||||
if drop_info:
|
||||
@@ -1314,7 +1314,7 @@ class ClipboardListView:
|
||||
# on self, then it moves the first, and copies the rest.
|
||||
|
||||
if ((context.action if hasattr(context, "action") else
|
||||
context.get_actions()) == Gdk.DragAction.MOVE):
|
||||
context.get_actions()) & Gdk.DragAction.MOVE):
|
||||
context.finish(True, True, time)
|
||||
|
||||
# remember time for double drop workaround.
|
||||
|
||||
@@ -143,8 +143,10 @@ class ColumnOrder(Gtk.Box):
|
||||
index = 0
|
||||
for val, size in zip(self.oldorder, self.oldsize):
|
||||
if val in self.oldvis:
|
||||
size = widths[index]
|
||||
index += 1
|
||||
if val != self.oldvis[-1]:
|
||||
# don't use last col width, its wrong
|
||||
size = widths[index]
|
||||
index += 1
|
||||
colord.append((1, val, size))
|
||||
else:
|
||||
colord.append((0, val, size))
|
||||
|
||||
+10
-8
@@ -49,7 +49,7 @@ from gi.repository import Pango
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.config import config
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
from gramps.gen.const import HOME_DIR, URL_WIKISTRING
|
||||
from gramps.gen.const import HOME_DIR, URL_WIKISTRING, URL_MANUAL_PAGE
|
||||
from gramps.gen.datehandler import get_date_formats
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.display.name import NameDisplayError
|
||||
@@ -64,6 +64,7 @@ from .managedwindow import ManagedWindow
|
||||
from .widgets import MarkupLabel, BasicLabel
|
||||
from .dialog import ErrorDialog, QuestionDialog2, OkDialog
|
||||
from .editors.editplaceformat import EditPlaceFormat
|
||||
from .display import display_help
|
||||
from .glade import Glade
|
||||
from gramps.gen.plug.utils import available_updates
|
||||
from .plug import PluginWindows
|
||||
@@ -91,6 +92,9 @@ COL_NAME = 1
|
||||
COL_FMT = 2
|
||||
COL_EXPL = 3
|
||||
|
||||
WIKI_HELP_PAGE = URL_MANUAL_PAGE + "_-_Settings"
|
||||
WIKI_HELP_SEC = _('Preferences')
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@@ -204,6 +208,8 @@ class ConfigureDialog(ManagedWindow):
|
||||
self.panel.append_page(widget, MarkupLabel(labeltitle))
|
||||
|
||||
def done(self, obj, value):
|
||||
if value == Gtk.ResponseType.HELP:
|
||||
return
|
||||
if self.__on_close:
|
||||
self.__on_close()
|
||||
self.close()
|
||||
@@ -523,6 +529,9 @@ class GrampsPreferences(ConfigureDialog):
|
||||
ConfigureDialog.__init__(self, uistate, dbstate, page_funcs,
|
||||
GrampsPreferences, config,
|
||||
on_close=update_constants)
|
||||
help_btn = self.window.add_button(_('_Help'), Gtk.ResponseType.HELP)
|
||||
help_btn.connect(
|
||||
'clicked', lambda x: display_help(WIKI_HELP_PAGE, WIKI_HELP_SEC))
|
||||
self.setup_configs('interface.grampspreferences', 700, 450)
|
||||
|
||||
def add_researcher_panel(self, configdialog):
|
||||
@@ -1350,13 +1359,6 @@ class GrampsPreferences(ConfigureDialog):
|
||||
grid.set_row_spacing(6)
|
||||
|
||||
current_line = 0
|
||||
if win():
|
||||
self.add_checkbox(grid,
|
||||
_('Use alternate Font handler for GUI and Reports '
|
||||
'(requires restart)'),
|
||||
current_line, 'preferences.alternate-fonthandler')
|
||||
|
||||
current_line += 1
|
||||
self.add_checkbox(grid,
|
||||
_('Add default source on GEDCOM import'),
|
||||
current_line, 'preferences.default-source')
|
||||
|
||||
+1
-28
@@ -303,27 +303,6 @@ class DbLoader(CLIDbLoader):
|
||||
self._end_progress()
|
||||
return True
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# default dir selection
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def get_default_dir():
|
||||
# Suggested folder: try last open file, last import, last export,
|
||||
# then home.
|
||||
default_dir = os.path.dirname(config.get('paths.recent-file'))
|
||||
if default_dir:
|
||||
default_dir += os.path.sep
|
||||
if len(default_dir)<=1:
|
||||
default_dir = config.get('paths.recent-import-dir')
|
||||
if len(default_dir)<=1:
|
||||
default_dir = config.get('paths.recent-export-dir')
|
||||
if len(default_dir)<=1:
|
||||
default_dir = '~/'
|
||||
else:
|
||||
default_dir = "~/"
|
||||
return default_dir
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# FileChooser filters: what to show in the file chooser
|
||||
@@ -474,13 +453,7 @@ class GrampsImportFileDialog(ManagedWindow):
|
||||
(box, type_selector) = format_maker()
|
||||
import_dialog.set_extra_widget(box)
|
||||
|
||||
# Suggested folder: try last open file, import, then last export,
|
||||
# then home.
|
||||
default_dir = config.get('paths.recent-import-dir')
|
||||
if len(default_dir)<=1:
|
||||
default_dir = get_default_dir()
|
||||
|
||||
import_dialog.set_current_folder(default_dir)
|
||||
import_dialog.set_current_folder(config.get('paths.recent-import-dir'))
|
||||
while True:
|
||||
# the import_dialog.run() makes it modal, so any change to that
|
||||
# line would require the ManagedWindow.__init__ to be changed also
|
||||
|
||||
+2
-2
@@ -1048,8 +1048,8 @@ def find_revisions(name):
|
||||
"""
|
||||
import re
|
||||
|
||||
rev = re.compile("\s*revision\s+([\d\.]+)")
|
||||
date = re.compile("date:\s+(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)[-+]\d\d;")
|
||||
rev = re.compile(r"\s*revision\s+([\d\.]+)")
|
||||
date = re.compile(r"date:\s+(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)[-+]\d\d;")
|
||||
|
||||
if not os.path.isfile(name) or not _RCS_FOUND:
|
||||
return []
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
import os
|
||||
import webbrowser
|
||||
import sys
|
||||
from urllib.parse import quote
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps modules
|
||||
@@ -65,9 +66,9 @@ def display_help(webpage='', section=''):
|
||||
if not webpage:
|
||||
link = URL_WIKISTRING + URL_MANUAL_PAGE + EXTENSION
|
||||
else:
|
||||
link = URL_WIKISTRING + webpage + EXTENSION
|
||||
link = URL_WIKISTRING + quote(webpage) + EXTENSION
|
||||
if section:
|
||||
link = link + '#' + section
|
||||
link += '#' + quote(section.replace(' ', '_')).replace('%', '.')
|
||||
display_url(link)
|
||||
|
||||
def display_url(link, uistate=None):
|
||||
|
||||
+22
-35
@@ -116,30 +116,6 @@ class History(Callback):
|
||||
if initial_person:
|
||||
self.push(initial_person.get_handle())
|
||||
|
||||
def remove(self, handle, old_id=None):
|
||||
"""
|
||||
Remove a handle from the history list
|
||||
"""
|
||||
if old_id:
|
||||
del_id = old_id
|
||||
else:
|
||||
del_id = handle
|
||||
|
||||
history_count = self.history.count(del_id)
|
||||
for c in range(history_count):
|
||||
self.history.remove(del_id)
|
||||
self.index -= 1
|
||||
|
||||
mhc = self.mru.count(del_id)
|
||||
for c in range(mhc):
|
||||
self.mru.remove(del_id)
|
||||
self.emit('mru-changed', (self.mru, ))
|
||||
if self.history:
|
||||
newact = self.history[self.index]
|
||||
if not isinstance(newact, str):
|
||||
newact = str(newact)
|
||||
self.emit('active-changed', (newact,))
|
||||
|
||||
def push(self, handle):
|
||||
"""
|
||||
Pushes the handle on the history stack
|
||||
@@ -229,8 +205,21 @@ class History(Callback):
|
||||
Called in response to an object-delete signal.
|
||||
Removes a list of handles from the history.
|
||||
"""
|
||||
for handle in handle_list:
|
||||
self.remove(handle)
|
||||
for del_id in handle_list:
|
||||
history_count = self.history.count(del_id)
|
||||
for dummy in range(history_count):
|
||||
self.history.remove(del_id)
|
||||
self.index -= 1
|
||||
|
||||
mhc = self.mru.count(del_id)
|
||||
for dummy in range(mhc):
|
||||
self.mru.remove(del_id)
|
||||
if self.history:
|
||||
newact = self.history[self.index]
|
||||
if not isinstance(newact, str):
|
||||
newact = str(newact)
|
||||
self.emit('active-changed', (newact,))
|
||||
self.emit('mru-changed', (self.mru, ))
|
||||
|
||||
def history_changed(self):
|
||||
"""
|
||||
@@ -621,19 +610,17 @@ class DisplayState(Callback):
|
||||
|
||||
self.status.pop(self.status_id)
|
||||
|
||||
if active_handle:
|
||||
if active_handle and dbstate.is_open():
|
||||
name, obj = navigation_label(dbstate.db, nav_type, active_handle)
|
||||
# Append relationship to default person if funtionality is enabled.
|
||||
if nav_type == 'Person' and config.get('interface.statusbar') > 1:
|
||||
if active_handle != dbstate.db.get_default_handle():
|
||||
msg = self.display_relationship(dbstate, active_handle)
|
||||
if msg:
|
||||
name = '%s (%s)' % (name, msg.strip())
|
||||
else:
|
||||
name = _('No active object')
|
||||
|
||||
# Append relationship to default person if funtionality is enabled.
|
||||
if nav_type == 'Person' and active_handle \
|
||||
and config.get('interface.statusbar') > 1:
|
||||
if active_handle != dbstate.db.get_default_handle():
|
||||
msg = self.display_relationship(dbstate, active_handle)
|
||||
if msg:
|
||||
name = '%s (%s)' % (name, msg.strip())
|
||||
|
||||
if not name:
|
||||
name = self.NAV2MES[nav_type]
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ def EditObject(dbstate, uistate, track, obj_class, prop=None, value=None, callba
|
||||
LOG = logging.getLogger(".Edit")
|
||||
if obj_class in EDITORS.keys():
|
||||
if value is None:
|
||||
obj = CLASSES[obj_class]
|
||||
obj = CLASSES[obj_class]()
|
||||
try:
|
||||
EDITORS[obj_class](dbstate, uistate, track, obj, callback=callback)
|
||||
except Exception as msg:
|
||||
|
||||
@@ -67,6 +67,12 @@ class BackRefList(EmbeddedList):
|
||||
_('_References'), refmodel)
|
||||
self._callback = callback
|
||||
self.connectid = self.model.connect('row-inserted', self.update_label)
|
||||
self.db_connect = []
|
||||
for item in ['person', 'family', 'source', 'citation', 'event',
|
||||
'media', 'place', 'repository', 'note']:
|
||||
self.db_connect.append(self.dbstate.db.connect(
|
||||
'%s-delete' % item, self.model.delete_row))
|
||||
self.tree.set_reorderable(False)
|
||||
self.track_ref_for_deletion("model")
|
||||
|
||||
def update_label(self, *obj):
|
||||
@@ -80,6 +86,8 @@ class BackRefList(EmbeddedList):
|
||||
|
||||
def _cleanup_local_connects(self):
|
||||
self.model.disconnect(self.connectid)
|
||||
for item in self.db_connect:
|
||||
self.dbstate.db.disconnect(item)
|
||||
|
||||
def _cleanup_on_exit(self):
|
||||
# model may be destroyed already in closing managedwindow
|
||||
|
||||
@@ -55,6 +55,7 @@ class BackRefModel(Gtk.ListStore):
|
||||
self.sref_list = sref_list
|
||||
self.count = 0
|
||||
self.loading = False
|
||||
self.hndl_iter = {}
|
||||
self.idle = GLib.idle_add(self.load_model().__next__)
|
||||
|
||||
def destroy(self):
|
||||
@@ -145,7 +146,17 @@ class BackRefModel(Gtk.ListStore):
|
||||
# We need to use localized string in the model.
|
||||
# we also need to keep class names to get the object type,
|
||||
# but we don't need to show that in the view.
|
||||
self.append(row=[_(dtype), gid, name, handle, dtype])
|
||||
|
||||
self.hndl_iter[ref[1]] = self.append(
|
||||
row=[_(dtype), gid, name, handle, dtype])
|
||||
yield True
|
||||
self.loading = False
|
||||
yield False
|
||||
|
||||
def delete_row(self, hndl_list):
|
||||
""" Remove rows of the model based on the handles """
|
||||
for hndl in hndl_list:
|
||||
miter = self.hndl_iter.get(hndl, None)
|
||||
if miter is not None:
|
||||
self.remove(miter)
|
||||
del self.hndl_iter[hndl]
|
||||
|
||||
@@ -211,6 +211,7 @@ class EmbeddedList(ButtonTab):
|
||||
self.tree.drag_source_set_target_list(tglist)
|
||||
|
||||
self.tree.connect('drag_data_get', self.drag_data_get)
|
||||
self.tree.connect_after('drag-begin', self.after_drag_begin)
|
||||
if not self.dbstate.db.readonly:
|
||||
self.tree.connect('drag_data_received', self.drag_data_received)
|
||||
self.tree.connect('drag_motion', self.tree_drag_motion)
|
||||
@@ -282,6 +283,12 @@ class EmbeddedList(ButtonTab):
|
||||
"""
|
||||
pass
|
||||
|
||||
def after_drag_begin(self, widget, drag_context):
|
||||
"""
|
||||
We want to show the icon during drag instead of the long row entry
|
||||
"""
|
||||
Gtk.drag_set_icon_name(drag_context, self.get_icon_name(), 0, 0)
|
||||
|
||||
def handle_extra_type(self, objtype, obj):
|
||||
pass
|
||||
|
||||
|
||||
@@ -131,15 +131,15 @@ class EventEmbedList(DbGUIElement, GroupEmbeddedList):
|
||||
refs = self.get_data()[self._WORKGROUP]
|
||||
ref_list = [eref.ref for eref in refs]
|
||||
indexlist = []
|
||||
last = 0
|
||||
last = -1
|
||||
while True:
|
||||
try:
|
||||
last = ref_list.index(handle)
|
||||
last = ref_list.index(handle, last + 1)
|
||||
indexlist.append(last)
|
||||
except ValueError:
|
||||
break
|
||||
#remove the deleted workgroup events from the object
|
||||
for index in indexlist.reverse():
|
||||
for index in reversed(indexlist):
|
||||
del refs[index]
|
||||
#now rebuild the display tab
|
||||
self.rebuild_callback()
|
||||
|
||||
@@ -92,6 +92,10 @@ class PersonEventEmbedList(EventEmbedList):
|
||||
self._data.append(family.get_event_ref_list())
|
||||
self._groups.append((family_handle, self._FAMNAME,
|
||||
groupname))
|
||||
#we register all events that need to be tracked
|
||||
for group in self._data:
|
||||
self.callman.register_handles(
|
||||
{'event': [eref.ref for eref in group]})
|
||||
self.changed = False
|
||||
|
||||
return self._data
|
||||
|
||||
@@ -38,13 +38,15 @@ from gramps.gen.errors import WindowActiveError
|
||||
from ...ddtargets import DdTargets
|
||||
from .personrefmodel import PersonRefModel
|
||||
from .embeddedlist import EmbeddedList, TEXT_COL, MARKUP_COL, ICON_COL
|
||||
from ...dbguielement import DbGUIElement
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class PersonRefEmbedList(EmbeddedList):
|
||||
class PersonRefEmbedList(DbGUIElement, EmbeddedList):
|
||||
|
||||
_HANDLE_COL = 4
|
||||
_DND_TYPE = DdTargets.PERSONREF
|
||||
@@ -69,15 +71,61 @@ class PersonRefEmbedList(EmbeddedList):
|
||||
|
||||
def __init__(self, dbstate, uistate, track, data):
|
||||
self.data = data
|
||||
DbGUIElement.__init__(self, dbstate.db)
|
||||
EmbeddedList.__init__(self, dbstate, uistate, track,
|
||||
_('_Associations'), PersonRefModel,
|
||||
move_buttons=True)
|
||||
|
||||
def _connect_db_signals(self):
|
||||
"""
|
||||
called on init of DbGUIElement, connect to db as required.
|
||||
"""
|
||||
#note: person-rebuild closes the editors, so no need to connect to it
|
||||
self.callman.register_callbacks(
|
||||
{'person-update': self.person_change, # change to person we track
|
||||
'person-delete': self.person_delete, # delete of person we track
|
||||
})
|
||||
self.callman.connect_all(keys=['person'])
|
||||
|
||||
def person_change(self, *obj):
|
||||
"""
|
||||
Callback method called when a tracked person changes (description
|
||||
changes...)
|
||||
"""
|
||||
self.rebuild()
|
||||
|
||||
def person_delete(self, hndls):
|
||||
"""
|
||||
Callback method called when a tracked person is deleted.
|
||||
There are two possibilities:
|
||||
* a tracked non-workgroup person is deleted, just rebuilding the view
|
||||
will correct this.
|
||||
* a workgroup person is deleted. The person must be removed from the
|
||||
obj so that no inconsistent data is shown.
|
||||
"""
|
||||
for handle in hndls:
|
||||
ref_list = [pref.ref for pref in self.data]
|
||||
indexlist = []
|
||||
last = -1
|
||||
while True:
|
||||
try:
|
||||
last = ref_list.index(handle, last + 1)
|
||||
indexlist.append(last)
|
||||
except ValueError:
|
||||
break
|
||||
#remove the deleted workgroup persons from the object
|
||||
for index in reversed(indexlist):
|
||||
del self.data[index]
|
||||
#now rebuild the display tab
|
||||
self.rebuild()
|
||||
|
||||
def get_ref_editor(self):
|
||||
from .. import EditPersonRef
|
||||
return EditPersonRef
|
||||
|
||||
def get_data(self):
|
||||
self.callman.register_handles(
|
||||
{'person': [pref.ref for pref in self.data]})
|
||||
return self.data
|
||||
|
||||
def column_order(self):
|
||||
|
||||
@@ -40,13 +40,15 @@ from ...ddtargets import DdTargets
|
||||
from .placerefmodel import PlaceRefModel
|
||||
from .embeddedlist import EmbeddedList, TEXT_COL
|
||||
from ...selectors import SelectorFactory
|
||||
from ...dbguielement import DbGUIElement
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class PlaceRefEmbedList(EmbeddedList):
|
||||
class PlaceRefEmbedList(DbGUIElement, EmbeddedList):
|
||||
|
||||
_HANDLE_COL = 4
|
||||
_DND_TYPE = DdTargets.PLACEREF
|
||||
@@ -65,11 +67,57 @@ class PlaceRefEmbedList(EmbeddedList):
|
||||
self.data = data
|
||||
self.handle = handle
|
||||
self.callback = callback
|
||||
DbGUIElement.__init__(self, dbstate.db)
|
||||
EmbeddedList.__init__(self, dbstate, uistate, track,
|
||||
_('Enclosed By'), PlaceRefModel,
|
||||
share_button=True, move_buttons=True)
|
||||
|
||||
def _connect_db_signals(self):
|
||||
"""
|
||||
called on init of DbGUIElement, connect to db as required.
|
||||
"""
|
||||
#note: place-rebuild closes the editors, so no need to connect to it
|
||||
self.callman.register_callbacks(
|
||||
{'place-update': self.place_change, # change to place we track
|
||||
'place-delete': self.place_delete, # delete of place we track
|
||||
})
|
||||
self.callman.connect_all(keys=['place'])
|
||||
|
||||
def place_change(self, *obj):
|
||||
"""
|
||||
Callback method called when a tracked place changes (description
|
||||
changes...)
|
||||
"""
|
||||
self.rebuild()
|
||||
|
||||
def place_delete(self, hndls):
|
||||
"""
|
||||
Callback method called when a tracked place is deleted.
|
||||
There are two possibilities:
|
||||
* a tracked non-workgroup place is deleted, just rebuilding the view
|
||||
will correct this.
|
||||
* a workgroup place is deleted. The place must be removed from the
|
||||
obj so that no inconsistent data is shown.
|
||||
"""
|
||||
for handle in hndls:
|
||||
ref_list = [pref.ref for pref in self.data]
|
||||
indexlist = []
|
||||
last = -1
|
||||
while True:
|
||||
try:
|
||||
last = ref_list.index(handle, last + 1)
|
||||
indexlist.append(last)
|
||||
except ValueError:
|
||||
break
|
||||
#remove the deleted workgroup places from the object
|
||||
for index in reversed(indexlist):
|
||||
del self.data[index]
|
||||
#now rebuild the display tab
|
||||
self.rebuild()
|
||||
|
||||
def get_data(self):
|
||||
self.callman.register_handles(
|
||||
{'place': [pref.ref for pref in self.data]})
|
||||
return self.data
|
||||
|
||||
def column_order(self):
|
||||
|
||||
@@ -50,6 +50,9 @@ from ...ddtargets import DdTargets
|
||||
from gramps.gen.lib import Surname, NameOriginType
|
||||
from ...utils import match_primary_mask, no_match_primary_mask
|
||||
|
||||
# table for skipping illegal control chars
|
||||
INVISIBLE = dict.fromkeys(list(range(32)))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# SurnameTab
|
||||
@@ -281,7 +284,8 @@ class SurnameTab(EmbeddedList):
|
||||
colnr must be the column in the model.
|
||||
"""
|
||||
node = self.model.get_iter(path)
|
||||
self.model.set_value(node, colnr, new_text)
|
||||
text = new_text.translate(INVISIBLE).strip()
|
||||
self.model.set_value(node, colnr, text)
|
||||
self.update()
|
||||
|
||||
def on_orig_edited(self, cellr, path, new_text, colnr):
|
||||
|
||||
@@ -174,6 +174,8 @@ class EditCitation(EditPrimary):
|
||||
|
||||
self._add_db_signal('citation-rebuild', self._do_close)
|
||||
self._add_db_signal('citation-delete', self.check_for_close)
|
||||
self._add_db_signal('source-delete', self.source_delete)
|
||||
self._add_db_signal('source-update', self.source_update)
|
||||
|
||||
def _setup_fields(self):
|
||||
"""
|
||||
@@ -269,6 +271,26 @@ class EditCitation(EditPrimary):
|
||||
author = ''
|
||||
self.glade.get_object("author").set_text(author)
|
||||
|
||||
def source_update(self, hndls):
|
||||
''' Source changed outside of dialog, update text if its ours '''
|
||||
handle = self.obj.get_reference_handle()
|
||||
if handle and handle in hndls:
|
||||
source = self.db.get_source_from_handle(handle)
|
||||
s_lbl = "%s [%s]" % (source.get_title(), source.gramps_id)
|
||||
self.glade.get_object("source").set_text(s_lbl)
|
||||
author = source.get_author()
|
||||
self.glade.get_object("author").set_text(author)
|
||||
|
||||
def source_delete(self, hndls):
|
||||
''' Source deleted outside of dialog, remove it if its ours'''
|
||||
handle = self.obj.get_reference_handle()
|
||||
if handle and handle in hndls:
|
||||
self.obj.set_reference_handle(None)
|
||||
self.glade.get_object("source").set_markup(
|
||||
self.source_field.EMPTY_TEXT)
|
||||
self.glade.get_object("author").set_text('')
|
||||
self.source_field.set_button(False)
|
||||
|
||||
def build_menu_names(self, source):
|
||||
"""
|
||||
Provide the information needed by the base class to define the
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user