Compare commits

..

225 Commits

Author SHA1 Message Date
John Ralls e7247af252 Release Gramps-5.0.2 on Mac. 2019-08-24 16:11:26 -07:00
John Ralls ed02e39d5d Revert "Add entitlements file for hardening and notarizing Gramps.app."
This reverts commit e72695ca90.
I'd already added the correct version of the file.
2019-08-17 17:39:06 -07:00
John Ralls e72695ca90 Add entitlements file for hardening and notarizing Gramps.app. 2019-08-17 17:37:18 -07:00
John Ralls d5db6e2b65 An entitlements plist for codesigning Gramps.
Python is an interpreter and therefore needs to create executable
memory. Since it doesn't know how to sign that memory it requires
the allow-unsigned-executable-memory entitlement to run in a hardened
runtime. One must apply this entitlement to both Gramps.app and
Gramps.app/Contents/MacOS/dot when codesigning them.
2019-08-16 12:41:18 -07:00
Zdeněk Hataš 1294d53bc1 Update Czech translation 2019-08-15 13:08:56 +02:00
Ross Gammon bdaa0d8c59 Update Debian files to 5.0.2 release 2019-08-11 15:49:23 +01:00
niememat d2deae8ff7 Fix translation in Finnish 2019-08-10 13:40:42 +03:00
niememat a4cbdb34df Update finnish translation 2019-08-09 13:28:22 +03:00
prculley fe87150c14 Bump to v5.0.3 2019-08-08 12:09:55 -05:00
prculley f6b81c9da8 Prepare for Release 5.0.2 2019-08-08 12:01:46 -05:00
Paul Culley e59aa58c63 Fix some Gramplets not updating during tree changes after db change. (#865)
Fixes #11234
2019-08-08 11:50:47 -05:00
Paul Culley 3e2e8a837f Fix Events Grampslet for bad sort order on dates/ages (#867)
Fixes #7616
2019-08-08 11:49:55 -05:00
Paul Culley c0ff650748 Fix References Tab to update on Deletes of items when editor is open (#864)
Fixes #11231
2019-08-08 10:00:14 -05:00
Paul Culley 44104671b9 Fix GEDCOM import for better support of TMG (#861)
Fixes #11224
2019-08-08 09:59:14 -05:00
Paul Culley afa8e73486 Fix Edit Link 'New' button to work (#863)
Fixes #11225
2019-08-07 13:49:31 -05:00
Paul Culley 27c38018fa Fix GEDCOM importer to properly handle multiple surnames per 5.5.1 (#862)
Fixes #11228
2019-08-07 13:48:49 -05:00
Serge Noiraud 96fcef2a84 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.
2019-08-01 08:31:39 -05:00
Paul Culley 7e7dd68b58 Fix Navigator sidebar so can change view type with proper resize (#853)
Fixes #6422, #11164
2019-08-01 08:27:38 -05:00
Paul Culley ab5a810990 fix crash when using sidebar filter and merging in another view (#858)
Fixes #11089, #11064, #11134
2019-07-31 16:50:22 -05:00
Paul Culley f7d58f4c28 Fix AncestorTree so add siblings to center person works (#852)
Fixes #11215
2019-07-31 16:48:55 -05:00
Paul Culley 949296a801 Fix graphs on Windows for font selection not working (#849)
Fixes #11212
2019-07-31 16:45:15 -05:00
Paul Culley 15e033c02c Fix dbapi reindex_reference_maps tool to properly close transaction (#847)
Fixes #11195
2019-07-31 16:35:05 -05:00
Paul Culley 80749afd09 Fix zoom via mouse wheel in media event editor selectionwidget (#835)
also fixes zooming with scroll bars always present

Fixes #11198
2019-07-11 10:52:36 +10:00
vantu5z 72d8d2d3cf update Russian translation 2019-06-21 11:09:19 +03:00
Mattkmmr 1b7b20756f Fix metadataviewer.py (#823)
Fix so that metadata is actually detected and displayed (signal was not getting detected).
2019-06-14 10:57:15 +10:00
niememat eff15c1ce3 Update finnish translation 2019-06-12 11:55:03 +03:00
John Ralls b3715efea9 Fix graphviz and exiv2 download URLs. 2019-06-11 14:59:54 -07:00
John Ralls cfe8c42d28 Update dependency versions and download paths. 2019-06-11 12:08:32 -07:00
Serge Noiraud 7dc532c743 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
2019-06-10 17:27:03 +10:00
Serge Noiraud 2951a0acf0 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.
2019-06-10 17:12:48 +10:00
milotype 6d53c3a91c Update Croatian translation (#824) 2019-06-10 11:57:46 +10:00
Paul Culley 7ca19214d6 Fix crash for multiple deletes in one transaction (#814)
Fixes #11117
2019-06-10 11:39:54 +10:00
Ed Bennett 87955ed2e9 Adjust translation strings for unmarried partners to give correct text in English (#818)
Fixes #11109
2019-06-10 11:07:22 +10:00
John Ralls 9d3f17e377 Disable vala for gexiv2, it breaks introspection. 2019-05-19 21:01:55 -07:00
caigner 903069fd34 changed 'Edit ->Set Home Person' to 'Edit -> Set Home Person' 2019-05-12 13:38:03 +01:00
système 1a0390f623 typo on french translation 2019-04-14 19:30:04 +02:00
Paul Culley e9412a2479 Fix failure after Gedcom import if missing objects were found (#807)
Fixes #11082
2019-04-14 10:42:05 +10:00
John Ralls c615b4dc32 [maclocale] Fix none type has no len().
Fixes #11075
2019-03-26 08:52:29 -07:00
Paul Culley 450217a636 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 16:51:15 +11:00
milotype 9a398cbcfd Update Croatian translation (#803)
update with current maint50 pot file
2019-03-17 16:10:15 +11:00
Paul Culley aff888a0b5 Fix Relationship view so ages are according to Preferences (#798)
Fixes #11040
2019-03-17 15:18:00 +11:00
Paul Culley 71ad5ffb04 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-17 15:02:29 +11:00
Paul Culley 100d6d0672 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 14:44:42 +11:00
Serge Noiraud d96b6d19b8 Unhandled exception in Geography editor (#793)
Fixes #11048

better pylint score
remove unused code
2019-03-17 14:26:11 +11:00
Paul Culley bf4b3962bc 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-17 14:12:11 +11:00
Paul Culley 51f44c2fd7 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-17 13:55:54 +11:00
Paul Culley 00c74d139a 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-17 13:41:35 +11:00
Paul Culley 54c3b29793 fix finddupes tool when run from Match Threshold screen again (#790)
after merge.  Avoids HandleError because potentials dict is not
cleared.

Fixes #11044
2019-03-17 13:26:06 +11:00
vantu5z d1ee70a0d2 update Russian translation 2019-03-12 14:38:06 -03:00
Bernard Banko c4f89c4034 Slovenian translation correction 2019-02-27 19:00:02 +01:00
système 8615021d37 update french translation 2019-02-16 09:54:45 +01:00
système c3c006c465 update (partial) french translation 2019-02-14 12:21:22 +01:00
système b389842af1 merge with last template 2019-02-14 11:43:03 +01:00
système aba0303260 bug 10841: Typos in the French translation 2019-02-14 11:06:16 +01:00
système 3bba6f57e4 fix a typo 2019-02-14 10:42:29 +01:00
Paul Culley f84c2ecf11 Fix Gedcom import for multiple notes on OBJE (MULTIMEDIA_LINK) (#782)
Fixes #10277
2019-02-14 15:32:16 +11:00
Paul Culley 7a82b78ff9 Deal with SQLite db corrupted by None name mapping (#784)
Fixes #11011
2019-02-14 15:05:01 +11:00
Paul Culley 39a0d8c648 Fix XML import to add tags to Events, Sources, Places, Repos, Cits (#780)
Fixes #11004
2019-02-14 14:45:28 +11:00
Paul Culley 62f8049d6a 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-14 14:31:21 +11:00
Paul Culley d65ad470d6 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-14 14:08:53 +11:00
Bernard Banko be98b673df Slovenian language update 2019-02-10 18:26:31 +01:00
Luigi Toscano f088d940a6 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 16:09:33 +01:00
Luigi Toscano 92328d4332 Refresh the Italian po file 2019-02-10 16:01:18 +01:00
Paul Culley b4e4dbbcf2 Fix EditFamily for adding a child to single parent family with (#777)
Surname guessing set to combination.

Fixes #10997
2019-02-03 09:30:45 +11:00
Paul Culley 4c6c052729 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-23 08:44:40 +11:00
Leonhaeuser 257b091cac Update German translation 2019-01-22 18:39:12 +01:00
Paul Culley abcf304ea7 Fix Name editor crash after clearing a group_as name on dbapi dbs (#771)
Fixes #10981
2019-01-22 14:19:25 +11:00
Serge Noiraud dba752c328 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-22 13:45:04 +11:00
Paul Culley 0dd2b9d0fd Fix Relationship Graph; extra people when using filters & subgraphs (#769)
subgraph option wasn't checking parents against filtered results

Fixes #10947
2019-01-22 13:31:22 +11:00
Christian Aigner 520c81a355 [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-22 13:16:40 +11:00
Paul Culley 807eab7cd9 fix Place Format Editor file save/load for difficult names (#766)
Fixes #10949
2019-01-22 13:00:16 +11:00
Serge Noiraud 2bc5f63406 Not all place types appears on family lines Graph (#763) 2019-01-22 12:45:54 +11:00
Christian Aigner 344dd69a9d Corrections in 'Tip of Day'; changed 'Schlussnotizen' to 'Quellennachweis' (#753) 2019-01-22 12:03:45 +11:00
vantu5z 757854e566 update Russian translation 2019-01-12 19:58:46 +03:00
Sam Manzi 45d3c43680 Remember location of Sort Events Tool (#750)
Issue #9795
2019-01-12 14:04:30 +11:00
Zdeněk Hataš 732f9fae16 Update Czech translation 2019-01-11 18:01:58 +01:00
Paul Culley c7f2b19784 Fix Media editor when using double click the preview of added media (#752)
Fixes #10923
2019-01-06 12:11:12 +11:00
Leonhaeuser 30628cf6c7 update German translation 2019-01-05 11:26:38 +01:00
niememat 36e43562e7 Fix and updated translation in Finnish 2019-01-05 07:39:31 +02:00
P Ekholm 80b99925bd Update Swedish translation 2019-01-04 17:08:55 +01:00
prculley d78aa8cd8d Update gramps.pot 2019-01-02 12:13:11 -06:00
prculley 4087ae800c Revert "update gramps.pot", the update_po.py doesn't work with glade files
on Windows

This reverts commit fcfecef459.
2019-01-01 15:58:05 -06:00
prculley fcfecef459 update gramps.pot 2019-01-01 11:35:47 -06:00
prculley 7131eec356 Fix update_po.py to run on Windows 2019-01-01 11:33:52 -06:00
caigner 3ada5081b5 German translation corrections 2018-12-31 18:38:40 +00:00
Leonhaeuser e4450cb34b update German translation 2018-12-30 12:44:00 +01:00
Serge Noiraud 97aedaae99 Avoid leading and trailing spaces when copy/paste (#747)
coordinates from a map provider.

Fixes #10937
2018-12-29 16:41:24 +11:00
John Ralls 285fbf2c97 Set correct font resolution for Mac when drawing text directly to cairo. (#745)
Fixes #0010924
2018-12-29 16:01:14 +11:00
Pär Ekholm 6e7e233155 Add some untranslated strings in po/sv.po 2018-12-28 21:47:44 +01:00
Pär Ekholm 436ca0df98 Merge remote-tracking branch 'upstream/maintenance/gramps50' into maintenance/gramps50 2018-12-28 21:42:55 +01:00
vantu5z b17c230f56 update Russian translation 2018-12-28 05:37:19 +03:00
prculley 3cb57426b1 remove crlf line endings on da.po 2018-12-26 09:44:03 -06:00
John Ralls 255caf1ab7 Remove extraneous setting of GTK_IM_MODULE_FILE.
Fixes #10929
2018-12-24 10:15:11 -08:00
Zdeněk Hataš 7b8666e454 Update Czech translation 2018-12-22 16:24:28 +01:00
RossGammon 9e9d4e6369 Update debian files after 5.0.1 release (#744) 2018-12-21 10:09:29 +11:00
prculley 508df3048d Bump to 5.0.2 2018-12-20 11:20:59 -06:00
prculley cb8bf0d00a Release Gramps 5.0.1 2018-12-20 11:16:55 -06:00
Paul Culley 44180b45e2 Help issues for bug 9042 (#738)
* Media Manager: add help button and remove '...'

Issue #9042

* Edit/Preferences: add Help button

Issue #9042

* Style Editor, Document Styles dialog: add help buttons

Issue #9042

* Fix Select Person dialog Help button URL

Issue #9042

* Fix Select Repository dialog Help button URL

Issue #9042

* Relationship Calculator: Add help button

Issue #9042

* Reorder Relationships dialog; add Help button

Issue #9042

* Generate Book Dialog; Fix Help URL

Issue #9042

* Manage Book dialog; add help button

Issue #9042

* Fix Detached Gramplets Help button URL when 'help_url' not in .gpr

Issue #9042

* Fix help URLs when they contain illegal characters and to match wiki
section targetID algorithm

Issue #9042
2018-12-20 09:10:58 -06:00
prculley 03b151b472 Updated Hungarian translation 2018-12-20 08:43:24 -06:00
milotype ec075e360b Croatian localisation updates (#741)
* Update/Completion Croatian translation

This is a big update. The croatian translation is now 100% complete.
Translated all missing strings, made lots of corrections, improved
consistency in the wording, tested thoroughly.  Also, it will work
with the updated datehandler file "_date_hr.py", which i'll be
updating simultaneously.

* Croatian Datehandler update

Made changes to fit croatian specific date handling. Also because i've
updated the hr.po file. I've tested it with the present
"_datedisplay.py" of the maintainance/gramps50 branch.

Basically it would be great, if next to the obligatory "display_iso"
format, only two more formats would show up in the croatian drop-down
menus: "dd_dformat01" (numerical) and "dd_dformat04". Other formats
are unneeded.

9. 5. 2018.  => ordinal numbers, all separated by spaces
9. svibnja 2018.  => ordinal numbers and genitiv month's form,
all separated by spaces
2018-12-20 08:35:33 -06:00
Nick Hall e4cbca4b73 Fix contents of enclosed_by secondary dbapi column (#742)
The enclosed_by column should contain the first value in the list
instead of the last.

Resolves #10907.
2018-12-19 18:10:00 -06:00
Leonhaeuser 4eda6d1afa update German translation 2018-12-18 21:04:03 +01:00
SNoiraud 496d4e1703 Google maps URL problem
Fixes #10772
2018-12-18 14:31:47 +00:00
prculley 8d5f2bd050 Fix ODT reports with links when run in non-English languages
Fixes #10911
2018-12-18 14:24:51 +00:00
prculley 96e4707c89 Allow addon Reports to specify a help button URL for options dialog
Fixes #10910
2018-12-18 14:21:30 +00:00
Nick Hall 8fc03f85a1 Fix Rebuild Secondary Indexes tool for dbapi backends
For dbapi backends, this tool will update the secondary columns
that are used for indexing.

Resolves #10757.
2018-12-18 14:18:03 +00:00
prculley b4b7911405 Fix dbapi set_name_group_mapping to properly close transaction
Fixes #10730
2018-12-18 14:14:59 +00:00
prculley 88373c0eb6 Fix Russian date handler crash when Russian .po isn't present
Fixes #10855
2018-12-18 14:10:56 +00:00
Leonhaeuser e8679a1eed update German translation 2018-12-04 18:35:30 +01:00
vantu5z b77378d2a1 update Russian translation 2018-12-04 15:58:07 +03:00
Pär Ekholm f921bba612 Merge remote-tracking branch 'upstream/maintenance/gramps50' into maintenance/gramps50 2018-11-29 10:25:48 +01:00
niememat 58ffea1537 Update finnish translation 2018-11-29 06:51:45 +02:00
Paul Culley 1ae319ef2a Fix Quickview for missing table data on some Gtk Versions (#593)
Issue #10448

Issue #7867
2018-11-29 10:55:12 +11:00
Paul Culley 0340337107 Fix startup messages with bad filename (#720)
Fixes #10885
2018-11-29 10:37:49 +11:00
Paul Culley bb1d59a29d Restrict Place view Name col to the primary name (#673)
while allowing searchbar to find alt and primary names

related to
Issue #9276

while allowing searchbar to find alt and primary names.

Currently, the Place View and Place Selector name column shows a comma separated list of the primary and alt names for a place. With the advent of GeoNames and Gov data, the alt names lists are getting populated with (sometimes long) lists of (sometimes duplicated) names. This doesn't look very good in the view. I've gotten a couple of email complaints about this.

The Name column was originally extended (for Gramps50) to include alt names to allow the use of the top search bar (enabled when sidebar is turned off via 'View/Sidebar'), to perform a search through all the alt names as well as primary name. https://gramps-project.org/bugs/view.php?id=9276

This PR creates a new (hidden) column in the place model containing the full name list, and reverts the 'Name' column to the primary name. It also modifies the PlaceSelector and PlaceView classes to cause the search bar to use the new (hidden) column.
2018-11-29 10:23:11 +11:00
Paul Culley d01afb3000 Fix Person Sidebarfilter when using 'Event' and Reg expressions (#729)
Fixes #10659
2018-11-29 09:56:39 +11:00
Paul Culley a99c02d9a7 Fix Find Duplicate People; exception when deleting someone shown (#728)
outside of the tool
Fixes #10875
2018-11-29 09:42:03 +11:00
Paul Culley dd43cde20e Gedcom export, upgrade OBJE handling to Gedcom 5.5.1 style (#702)
Fixes #10797
2018-11-29 09:28:56 +11:00
Paul Culley e356573605 Fix CSV import to set marriage event role to family (#725)
Fixes #9952
2018-11-29 09:15:01 +11:00
Paul Culley 6f7699480d Update gramps bugtracker URL in all po files (#710)
Fixes #10543
2018-11-29 09:01:56 +11:00
Serge Noiraud 3798175b50 Narrative Web : thumbnails bad alignment. (#691)
* Narrative Web : thumbnails bad alignment.

Fixes #10854

also solves the following problems in the Nebraska style sheet :
 1 - float parameter has no value "center"
 2 - "[" instead of ";" at end of line 1100

* overlapping with long titles
2018-11-29 08:48:27 +11:00
Paul Culley 6672230f23 Fix typo in CitationListModel for sort change (#730) 2018-11-28 19:27:47 +01:00
Serge Noiraud 8c35277267 Fix Adding "ToDo" note crash when no active object (#685)
* Fix Adding "ToDo" note crash when no active object

Fixes #10795

* Better message when no active object.

* resolve conflict: Fixes #10795
2018-11-28 12:58:46 +01:00
Paul Culley 38bfb760a3 Fix Citation List view Source Last Changed Column to sort properly (#723)
Fixes #10893
2018-11-28 19:04:45 +11:00
pmraps df48f37a46 some pt_PT.po translation changes (#703)
* some header changes

* more changes
2018-11-28 18:47:16 +11:00
Paul Culley a02d7d0176 Fix for re-entrant main window close when user hits 'x' again (#724)
Fixes #10897
2018-11-28 18:33:06 +11:00
Paul Culley 999a3937d1 Fix exception when closing early editor in tree of editors (#706)
Fixes #10876
2018-11-28 18:05:14 +11:00
Serge Noiraud a7e683d909 Narrative Web: thumbnails problems in some cases. (#722)
Fixes #10890
2018-11-28 16:28:41 +11:00
Paul Culley 8e09235351 Fix 'Generate Book' dialog for crash on 'x' close (#726)
Fixes #10901
2018-11-28 16:14:42 +11:00
Paul Culley b934b0d424 Fix ToDo Gramplet for multiple attempts to edit a note (#719)
Fixes #10645
2018-11-28 15:34:12 +11:00
Paul Culley 9cc6e3a05e Fix Dashboard for multiple copies of a Gramplet (#718)
* Fix Dashboard for multiple copies of a Gramplet

Fixes #10650

* Fix Dashboard to recall minimized or undocked Gramplets
2018-11-28 15:17:19 +11:00
Paul Culley d6dd1dc221 Fix Statusbar update to avoid intermittent exception on closed db (#716)
Fixes #10882
2018-11-28 14:56:36 +11:00
Paul Culley 21206af12b Fix FilterParser for much older 3.x custom_filters.xml files (#715)
Fixes #8075

Fixes #10669

Fixes #10516
2018-11-28 14:36:41 +11:00
Paul Culley 6506e85ea9 Fix IsDuplicatedAncestorOf filter rule to avoid crash on tree loop (#714)
Fixes #10685
2018-11-28 14:06:43 +11:00
Serge Noiraud 1d3202710a Narrative web : use latest version from openlayers. (#713)
Fixes #10884
2018-11-28 13:43:40 +11:00
Paul Culley 7078ca18ee Fix StyledTextEditor EditLink for root text changed to zero length (#709)
in the background

Fixes #9750
2018-11-28 13:26:47 +11:00
Paul Culley b1fc676a55 Fix AgeOnDate and some reports using SimpleAccess for missing surname (#708)
Fixes #9958

Fixes #9800
2018-11-28 13:13:30 +11:00
Paul Culley 5ef7739c60 Fix crash when a filter with loop in definition is defined (#707)
Fixes #10621
2018-11-28 12:59:27 +11:00
Paul Culley b4e5bd9eb2 Fix HandleErrors related to LDS (#697)
* Fix ReferencedBySelection proxy for 'None' LDS Parents

Fixes #10865

* Fix HandleError in Citations Gramplet for lds place missing
2018-11-28 11:47:49 +11:00
Paul Culley e0e19492cd Change PlaceView drag from whole row to just icon during drag (#695)
Fixes #10863
2018-11-28 11:25:44 +11:00
Paul Culley 817f4b7205 Add drag Icon to drags from DisplayTabs Gramplet lists (#694)
Fixes #10859
2018-11-28 11:08:30 +11:00
Paul Culley 4c7b24ba30 Fix dialogs for 'Help' button closes the dialog, and non-functional 'Help' (#727)
* Fix Family Tree manager for 'Help' button closes dialog

Fixes #10589

* Fix selectors for 'Help' button closes dialog

Fixes #10589

* Fix 'Generate Book' dialog for 'Help' button closes dialog

Fixes #10589

* Fix TestcaseGenerator for 'Help' button closes dialog

Fixes #10589

* Fix Selectors to enable the 'Help' buttons to actually work

Fixes #10589
2018-11-28 08:30:06 +11:00
Pär Ekholm c7d552c238 Merge branch 'maintenance/gramps50' of https://github.com/gramps-project/gramps into maintenance/gramps50 2018-11-24 18:20:06 +01:00
prculley b32e9d812e Avoid HandleError when dragging an Added Family from EditFamily
Fixes #10858
2018-11-24 11:35:01 +00:00
prculley 8da22fcbbf Avoid HandleError when dragging an Added Person from EditPerson
Fixes #10857
2018-11-24 11:34:27 +00:00
prculley 582d61e67e Fix Clipboard rows cannot be sorted via drag/drop
Fixes #10849
2018-11-24 11:23:44 +00:00
prculley c110d9bc23 Better default directory choices for import/export
Use recent-export-dir as default for Export View
instead of the console default directory, which can be where
program resides (on Windows), or other inappropriate place.

Use USER_HOME for default directory on 'Export' (recent-export-dir)
if first run (default settings) rather than default directory, which
can be where program resides (on Windows), or other inappropriate
place.

Use USER_HOME for default directory on 'Import' (recent-import-dir)
if first run (default settings) rather than recent file which is
generally set to the grampsdb path.

Fixes #10802
2018-11-24 11:20:45 +00:00
SNoiraud f4966ca793 Records Report: call name not underlined in HTML
Fixes #10816
2018-11-20 20:38:37 +00:00
Christophe 2d0a5ed03c Fix French translation 2018-11-20 19:28:50 +00:00
prculley 79074587f3 Fix InteractiveSearch for find before model is populated
Fixes #10844
2018-11-20 18:18:12 +00:00
prculley c660ed1728 Fix Gedcom export for incorrect escaping with @#DFRENCH R@
Fixes #10833
2018-11-20 18:17:05 +00:00
prculley e926934a49 Fix reports for shared event attribute and note errors
Fixes #10720
2018-11-20 18:14:08 +00:00
prculley b175b5cb60 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).

Fixes #10817
2018-11-20 17:57:59 +00:00
Robin van der Vliet 8fe9069cbb Fixed issues in the Dutch relationship calculator
Fixed some issues in the Dutch relationship calculator and also
extended the ordinal and removed lists till 50, just like the
English lists.

* Replaced huge lists by reusable lists.

* Fixed bug in which uncles/aunts, nephews/nieces (niblings),
  siblings and cousins with an unknown gender show up as female.

* Fixed some misspellings:
    drieëntwingste > drieëntwinTIgste
    vierentwingste > vierentwinTIgste
    edelovergrootOUD > edelovergroot
    edeloudvergroot > edeloudOvergroot
2018-11-20 17:32:24 +00:00
Pär Ekholm 63610d0651 Merge remote-tracking branch 'upstream/maintenance/gramps50' into maintenance/gramps50 2018-11-20 10:16:19 +01:00
Pär Ekholm 754ac7966c Update Swedish translation 2018-11-19 21:07:15 +00:00
niememat 51810ca973 Fix translation in Finnish 2018-11-18 20:10:56 +02:00
Pär Ekholm b43b0fa77f Update po/sv.po - all strings complete 2018-11-15 18:14:50 +01:00
Pär Ekholm f20dce51e8 Update po/sv.po 2018-11-14 20:14:59 +01:00
Pär Ekholm 254e196b2b Update po/sv.po 2018-11-14 19:41:46 +01:00
Pär Ekholm edc214221e Update po/sv.po 2018-11-13 18:37:02 +01:00
Pär Ekholm adfc1b8aee Update po/sv.po 2018-11-12 17:49:09 +01:00
Pär Ekholm 49f56bcc46 Update po/sv.po 2018-11-11 17:15:45 +01:00
Pär Ekholm 01efa725ce Update po/sv.po 2018-11-10 17:51:55 +01:00
Pär Ekholm 22b7f28edc Merge remote-tracking branch 'upstream/maintenance/gramps50' into maintenance/gramps50 2018-11-10 10:41:51 +01:00
niememat 780d83518d Update finnish translation 2018-11-10 04:43:12 +02:00
Pär Ekholm 7247073a03 Merge remote-tracking branch 'upstream/maintenance/gramps50' into maintenance/gramps50 2018-11-09 19:42:17 +01:00
Pär Ekholm e5fedef66a Update po/sv.po 2018-11-09 19:28:52 +01:00
vantu5z 8be3a475d1 update Russian translation 2018-11-09 17:40:54 +03:00
Pär Ekholm c167cfa921 Update po/sv.po 2018-11-08 19:22:33 +01:00
Pär Ekholm 9eec554d4a Update po/sv.po 2018-11-08 18:30:57 +01:00
Pär Ekholm c81b3596ec Update po/sv.po 2018-11-08 14:31:35 +01:00
Pär Ekholm 6c2179dc2e Update po/sv.po 2018-11-08 12:25:02 +01:00
Pär Ekholm de1a4fec22 Update po/sv.po 2018-11-07 19:08:51 +01:00
Pär Ekholm f0ebaa3bc1 Update po/sv.po 2018-11-07 16:17:55 +01:00
SNoiraud f2bc982c3d NarrativeWeb 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.

Fixes #10810
2018-10-21 18:43:11 +01:00
niememat 3046b0586c Fix translation in Finnish 2018-10-17 11:31:54 +03:00
Paul Franklin 375773d657 Setting the year as an ordinal number in Croatian
With this commit, two more reports now show a year as an
ordinal number in Croatian, and a year I missed before in
webcal.py is now fixed.

This commit also reverts the Croatian ordinal year fix in
the gramps50 statisticschart.py since upon reflection I
feel it would be better done in master, since then our
translators will have until 5.1.0 is released to do the
two new strings the fix requires.

Issue #10822
2018-10-07 23:43:36 -07:00
Paul Franklin 01060f0b0d name-note is not being cleared in Complete Individual report
I ran gramps with a fresh copy of the example.gramps tree,
then ran the Complete Individual report.  The options which
matter are "Entire Database" and "Include Notes" but I also
included the gramps-ID since that speeds up my work.

Then I noticed that hundreds of names at the end of the
output file all had the same note (N0001), whose text said
it referred to a specific person.

So I looked higher and the note inclusion started with I0044,
the default person.  It was real for him but not for the next
person after him, or all the people after her.

I introduced the problem when I fixed 10033, in d6a97cf90e.

Note that this bug is independent of the CIR fix in p.r. 676
and still happens even after that pull request is applied.
2018-10-07 23:36:32 -07:00
prculley 36779c1229 Fix View Column sizing so last column size setting is maintained
Fixes #10800
2018-10-07 18:14:01 +01:00
prculley 5b7f5164db Fix view so column widths are preserved when using filters
Fixes #10725
2018-10-07 18:13:51 +01:00
vantu5z 1e9a3841cd update Russian translation 2018-10-05 14:10:57 +03:00
Paul Franklin e6ddedf6c6 fix typo
in cbac98894b
2018-10-04 17:49:35 -07:00
Paul Franklin 325c3f22cc fix the place-format option in DDR and DAR
The place-format option was added to the Detailed Descendant
and Detailed Ancestor text reports in cbac98894b

But those two reports use the Narrator class to show many of
their places (and dates), and that class was not modified to
use the user's custom place format.

So if a user had created a custom place format and ran
either of those two reports, their places would be shown
inconsistently.  This commit fixes that.

(The non-detailed ancestor text report also uses Narrator to
show its places but that report has not had the place-format
option added to it, so this commit doesn't touch it.)
2018-10-04 09:23:38 -07:00
Paul Franklin 54be8d62f3 Setting the year as an ordinal number in Croatian
With this commit, three more reports now show a year as an
ordinal number in Croatian.

Issue #10822
2018-10-04 09:21:29 -07:00
prculley a40eca36d9 Fix bsddb for person sort with empty Surname list
Fixes #10078, #10577
2018-10-03 19:32:36 +01:00
Paul Franklin 4b17ca4724 Setting the year as an ordinal number in Croatian
When I started investigating 10822, I saw some Croatian dates
didn't seem to be working in 5.0.0, to my surprise.  I believe
I fixed that in the previous commit.

With this commit, the three reports now show a year as an
ordinal number in Croatian, so I consider 10822 fixed.

If there are any additional problems displaying Croatian,
please file additional bug reports ("one bug, one report").

Fixes #10822
2018-10-01 11:01:18 -07:00
Paul Franklin 69aaec11a5 Setting the year as an ordinal number in Croatian
When I started investigating 10822 I saw some Croatian dates
didn't seem to be working in 5.0.0, to my surprise.  There
seems to have been some kind of regression from 4.2.8.

But the Croatian translation for gramps hasn't been updated
in about three years -- except by non-Croatians.  So I don't
know why some "translated" strings which control how dates
are displayed were disabled (marked as "fuzzy") in this:
6c67053e1f

Also, I saw some code in the 4.2.8 Croatian date handler
which was not in the 5.0.0 Croatian date handler -- somehow.

So I believe this commit fixes the Croatian date handler.

Issue #10822
2018-10-01 10:59:51 -07:00
Serge Noiraud 896b77a165 Webcal: link problems in some cases (#661)
* Webcal: link problems in some cases

Year 2016 is highlighted by default instead of current year.

Fixes #10801

* Webcal: Missing links when muliyear unselected
2018-09-30 10:20:09 +02:00
Serge Noiraud 1b60193f77 Geoclose: exception when a family has no father (#662) 2018-09-29 19:20:50 +02:00
Paul Franklin e667431dd5 Report plugin krasch
Load data.gramps, start with the default person (I0037,
Edwin Michael Smith), run Family Descendant Tree, choose
"Start with the parent(s) of the selected first", hit OK:

.../descendtree.py", line 881, in start
    family2 = self.database.get_family_from_handle(family2_h)
...

Or start with I0057 (Anna Louise Smith), run Family Descendant
Tree, choose "Start with the parent(s) ...", hit OK:

.../descendtree.py", line 773, in start
    family2 = self.database.get_family_from_handle(family2_h)
...

Fixes #10811
2018-09-26 17:11:42 -07:00
Paul Franklin cc7e4fda85 [unhandled exception parsing "future dates" in some locales]
There is already a check in the MonitoredDate class for years
which are more than one year in the future, so such a date is
already going to be shown in red.

But some locales use the "datetime" library to parse typed-in
dates and that has a maximum year of datetime.MAXYEAR, 9999
currently, so dates greater than that produce a ValueError.

Besides adding checks for that, I have also made it so that
locales which don't need that library don't use it.

Fixes #10815
2018-09-26 14:04:52 -07:00
Paul Franklin 2490e2d07d Julian/Gregorian calendar issue when entering only year as date
when running gramps in Norwegian

Fixes #10687
2018-09-24 10:13:48 -07:00
Serge Noiraud e5c5a210b4 Events difficult to read (screen and mobile) (#658) 2018-09-23 12:27:55 +02:00
Paul Franklin 04a40c7a50 fix typo
in cf42e5a4b8 and cbac98894b

Fixes #10782
2018-09-17 21:33:44 -07:00
Leonhaeuser 44c8e3c0f0 update German translation 2018-09-08 17:03:48 +02:00
niememat 6f7242a773 New update for Finnish translation 2018-09-06 22:11:47 +03:00
niememat 358c3fc967 Update finnish translation 2018-09-06 21:58:36 +03:00
Paul Culley f1ca280441 Fix and restore Statistics Gramplet to 4.2.x status (#653)
Fixes #10754

A bit of history. bug 2060 was filed a long time ago (2008), and a patch was added to close it in 2016. I believe that the bug had already been patched by then, although I cannot be sure. The patch caused the Gramplet to update anytime the active-changed signal occurred on a person view. I suspect that this caused a fair amount of overhead on very large dbs as the entire person list was rescanned.

In any event, Doug Blank recently removed the original scan code, as well as some useful functionality. And left behind a bug where a value was always zero. The users email list had some complaints about the lost functionality, and I also saw some recent complaints that the gender statistics were incorrect. Turns out that the db's genderstats data was incorrect, probably due to crashes after db updates. The Genderstats don't get saved until db closes normally. In addition, running the Genderstats rebuild tool, did not immediately appear to correct the situation, Gramps had to be restarted to show the updated results.

I added the original statistics code back into the Gramplet, suitably updated for 5.0.x. So the Gramplet no longer depends on dbs genderstats, it scans for it now on its own.

I removed the update on active-changed function, so overhead is only present on actual db updates (which have their own signals). I tested that the add, edit, and delete person changes do properly cause the statistics to update now. So the active-changed signal is not necessary.
2018-09-06 08:59:41 +10:00
Paul Culley 482cecaa7e Fix Check and Repair to deal with bad references empty handle string (#657)
Fixes #10783

Check and Repair tool doesn't fix bad references when the reference handle is an empty string.
Found when rewriting the backlinks scan on same tool. I assumed that the prior checks had already corrected any bad forward references, and did not put in a test for them in my new code. The Travis test failed and when I debugged, I found that the tool had an exception on a handle that consisted of an empty string.

Its interesting to note that when I changed the code, a lot more citation and source references were fixed in the test.
2018-09-05 12:07:03 +10:00
Paul Culley b6c57ab3c3 Speed up Check and Repair, backlinks check stage. (#656)
Fixes #10618

* Speed up Check and Repair, backlinks check stage.

* Fix Check and repair; backlinks scan to deal with bad references
which should have been fixed in earlier checks!
2018-09-05 11:40:57 +10:00
Paul Culley f3b5f75e37 Fix strings containing deprecated illegal escape sequences (#648)
Python 3.6 and above has deprecated illegal string escape sequences. Escape sequences are preceded by a '\' and valid ones are "\n\t\r" etc. Illegal ones are not in the list https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals.

Previous to Python 3.6 these illegal sequences were ignored and the '\' was left in place. Pylint has been noting these for a while now.

This PR corrects these sequences in Gramps. I used

find . -name "*.py" | xargs -t -n 1 python3 -Wd -m py_compile 2>&1 | grep Depre

to locate the failing strings.
2018-09-04 12:03:17 +10:00
Ivan 7d9f4dcc80 [Whatsnext] check if db is open (#651)
Fixes #10732
2018-09-04 11:38:42 +10:00
Paul Culley 224748eb96 Fix usage of posixpath; should be os.path for os independence (#650)
Fixes #10740
2018-09-04 11:20:34 +10:00
Paul Culley 2aec83f057 Fix generate_checksum routine to avoid MemoryError crash (#649)
with very large files and 32-bit OS

Issue #10690
2018-09-04 10:41:27 +10:00
Paul Culley fd399323a6 Fix corrupted Bookmarks that can happen after Gramps crash (#655)
Fixes #10759
2018-09-04 10:16:21 +10:00
Paul Culley bb6b3edee2 Fix Merge Family when same parent is missing from both families (#654)
Fixes #10760
2018-09-04 10:02:39 +10:00
Paul Culley 3f7ea4418c Fix <ctrl>c in view to get selected item to clipboard (#652)
Fixes #10682
2018-09-04 09:43:49 +10:00
Paul Culley efcc115aa7 Fix Quickview Gramplet so updates work when changing active (#642)
Fixes #10713
2018-09-04 09:22:27 +10:00
Paul Culley 893c715a61 Fix place reference editor for bad cut/paste on set_latlongitude (#644)
Fixes #10719
2018-09-04 09:08:50 +10:00
Paul Culley 6bab78df21 Fix Find Database Loop Tool (bad import of _collections) (#643)
Fixes #10722
2018-09-04 08:53:22 +10:00
niememat 29019eed98 Fix translation in Finnish 2018-09-03 22:09:37 +03:00
Bernard Banko d8c006e0f7 Slovenian translation fixed to allow building mo 2018-08-25 22:27:31 +02:00
Bernard Banko b8438dddeb Slovenian translation updated 2018-08-25 22:14:42 +02:00
niememat 4ba28c637e Fix translation in Finnish 2018-08-18 12:29:06 +03:00
niememat ae84040bc7 Fix translation in Finnish 2018-08-11 18:25:28 +03:00
John Ralls 2a0b3afa4b Switch included moduleset to gitlab.gnome.org.
Fixes bug #10733.
2018-08-09 07:24:39 -07:00
Leonhaeuser 414aac4c7e Reviewed German translation Thanks to bmendl 2018-08-08 23:33:21 +02:00
niememat 037e26a5a3 Fix translation in Finnish 2018-08-08 14:43:17 +03:00
John Ralls 158d3a993b File copy doesn't work if the glob can match directories. 2018-08-05 13:18:01 -07:00
John Ralls 2ef35174d1 Install the docs/gramps directory in the bundle.
Fixes bug #10705.
2018-08-05 10:03:26 -07:00
niememat 3249938b88 Fix and updated translation in Finnish 2018-08-05 16:45:06 +03:00
Ross Gammon 9b18083e48 Update the Debian changelog after the 5.0.0 release 2018-07-25 21:56:42 +02:00
John Ralls 04bdeb8321 Release Gramps-5.0.0 on Mac. 2018-07-25 07:53:42 -07:00
Nick Hall 67061d58e2 Bump to 5.0.1 2018-07-24 15:11:18 +01:00
278 changed files with 40459 additions and 59255 deletions
+2
View File
@@ -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
+432 -148
View File
@@ -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
+4 -4
View File
@@ -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:
+191
View File
@@ -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.
+6 -2
View File
@@ -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;
+2 -2
View File
@@ -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;
+6 -2
View File
@@ -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;
+6 -2
View File
@@ -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;
+6 -2
View File
@@ -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;
+6 -2
View File
@@ -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;
-1
View File
@@ -32,7 +32,6 @@ body {
background-color: #00029D;
color: #00029D;
width: 100%;
padding: 0px 14px;
}
/* Navigation Menus
+6 -3
View File
@@ -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;
}
+7 -3
View File
@@ -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%;
+14 -10
View File
@@ -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
+38 -27
View File
@@ -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&amp;d=mm&amp;r=pg" mime="unknown" description="http://1.gravatar.com/avatar/77e02a3c8c665155ad1acaac8c2742e0?s=120&amp;d=mm&amp;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>
+5 -4
View File
@@ -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>
+61 -48
View File
@@ -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>
+2 -2
View File
@@ -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
+34 -19
View File
@@ -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&amp;Anna_smiths_marr_cert.jpg" mime="unknown" description="Magnes&amp;Anna_smiths_marr_cert.jpg"/>
<file src="Magnes&amp;Anna_smiths_marr_cert.jpg" mime="image/jpeg" description="Magnes&amp;Anna_smiths_marr_cert.jpg"/>
</object>
<object handle="_000000d8000000d8" change="1" id="O0002">
<file src="John&amp;Alice_smiths_marr_cert.jpg" mime="unknown" description="John&amp;Alice_smiths_marr_cert.jpg"/>
<file src="John&amp;Alice_smiths_marr_cert.jpg" mime="image/jpeg" description="John&amp;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&amp;Anna_smiths_marr_cert.jpg Line 878: 3 OBJE
Could not import Magnes&amp;Anna_smiths_marr_cert.jpg Line 881: 2 OBJE</text>
Could not import Magnes&amp;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&amp;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&amp;Alice_smiths_marr_cert.jpg Line 905: 1 OBJE</text>
Could not import John&amp;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&amp;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>
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -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 &quot;Help &gt; Gramps Mailing Lists&quot;.</_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>
+21
View File
@@ -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
+1 -2
View File
@@ -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
+2 -1
View File
@@ -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/*
+1 -1
View File
@@ -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"/>
+1 -1
View File
@@ -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"/>
+1 -1
View File
@@ -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
+3 -4
View File
@@ -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
View File
@@ -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
+6 -6
View File
@@ -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)
#-------------------------------------------------------------------------
#
+6 -6
View File
@@ -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)
#-------------------------------------------------------------------------
#
+7 -7
View File
@@ -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)
#-------------------------------------------------------------------------
#
+5 -4
View File
@@ -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)
#-------------------------------------------------------------------------
#
+10 -8
View File
@@ -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)
#-------------------------------------------------------------------------
#
+7 -7
View File
@@ -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)
#-------------------------------------------------------------------------
#
+7 -7
View File
@@ -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)
#-------------------------------------------------------------------------
#
+5 -5
View File
@@ -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)
#-------------------------------------------------------------------------
+51 -16
View File
@@ -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)
+9 -9
View File
@@ -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)
+10 -8
View File
@@ -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]
+5 -5
View File
@@ -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)
#-------------------------------------------------------------------------
#
+5 -5
View File
@@ -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*$")
#-------------------------------------------------------------------------
#
+9 -8
View File
@@ -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)
#-------------------------------------------------------------------------
#
+12 -6
View File
@@ -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
+7 -9
View File
@@ -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)
#-------------------------------------------------------------------------
#
+9 -6
View File
@@ -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)
#-------------------------------------------------------------------------
#
+6 -6
View File
@@ -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)
#-------------------------------------------------------------------------
+16 -6
View File
@@ -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],
+5 -5
View File
@@ -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)
#-------------------------------------------------------------------------
+8 -8
View File
@@ -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)
#-------------------------------------------------------------------------
#
+9 -8
View File
@@ -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)
#-------------------------------------------------------------------------
+9 -7
View File
@@ -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)
#-------------------------------------------------------------------------
#
+6 -6
View File
@@ -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)
#-------------------------------------------------------------------------
+5 -5
View File
@@ -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*$")
#-------------------------------------------------------------------------
#
+5 -5
View File
@@ -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*$")
#-------------------------------------------------------------------------
#
+26 -16
View File
@@ -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)
+57 -51
View File
@@ -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):
"""
+1
View File
@@ -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
+7 -7
View File
@@ -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
View File
@@ -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'):
+3
View File
@@ -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'])
+27 -12
View File
@@ -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
+7 -1
View File
@@ -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
+4 -4
View File
@@ -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
+14 -5
View File
@@ -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():
+1 -1
View File
@@ -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)
+9
View File
@@ -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):
+2 -2
View File
@@ -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
+5 -4
View File
@@ -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)
+1
View File
@@ -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
+4 -3
View File
@@ -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:
+6 -6
View File
@@ -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")
+2 -1
View File
@@ -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])
+1 -1
View File
@@ -34,7 +34,7 @@ import unicodedata
# constants
#
#-------------------------------------------------------------------------
IGNORE = "HW~!@#$%^&*()_+=-`[]\|;:'/?.,<>\" \t\f\v"
IGNORE = "HW~!@#$%^&*()_+=-`[]\\|;:'/?.,<>\" \t\f\v"
TABLE = bytes.maketrans(b'ABCDEFGIJKLMNOPQRSTUVXYZ',
b'012301202245501262301202')
+1 -1
View File
@@ -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 = ""
+9 -3
View File
@@ -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
+1 -1
View File
@@ -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))
-7
View File
@@ -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:
+2 -2
View File
@@ -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
View File
@@ -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):
+3 -3
View File
@@ -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.
+4 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 []
+3 -2
View File
@@ -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
View File
@@ -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]
+1 -1
View File
@@ -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
+12 -1
View File
@@ -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):
+5 -1
View File
@@ -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):
+22
View File
@@ -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