Compare commits

...
Author SHA1 Message Date
bpisoj ecf02a023a remove build version from const.py 2017-06-10 20:52:56 +02:00
John Ralls 25dafee197 Fix GtkosxApplication load failure.
Viewmanager somehow lost its import of gi.
2017-06-08 10:19:17 -07:00
prculley 8c1ccabe31 Update Readme to provide some package dependency names 2017-06-08 08:22:58 -05:00
Paul Franklin 33635db955 update MANIFEST.in with both ChangeLog files 2017-06-06 11:46:09 -07:00
Paul Franklin ee67f4496d update ChangeLog files 2017-06-06 11:43:27 -07:00
Paul Franklin a97c20f4b5 make official 5.0.0-alpha2 release 2017-06-06 08:41:35 -07:00
Paul Franklin 04b8be8710 update NEWS for 5.0.0-alpha2 release 2017-06-06 08:31:33 -07:00
Zdeněk Hataš d68bbf3383 czech translation update 2017-06-05 11:52:03 +02:00
John Ralls 6cbc465e60 Update gramps.modules for Python3.6. 2017-06-04 16:50:08 -07:00
John Ralls 657aca35ac Update versions for gramps v5.0.0-alpha2. 2017-06-04 16:50:08 -07:00
Nick Hall c727d56ed0 Add unit tests for empty dates 2017-06-04 23:15:36 +01:00
prculleyandNick Hall b18676aaf4 Text-only dates are sometimes not exported in XML
Fixes #10062.
2017-06-04 23:14:55 +01:00
JosipandNick Hall bf634ee8e8 EOFError [Ran out of input] in Clipboard (#411)
[EOFError: Ran out of input] for Clipboard when you drag and
drop the bolded lines in selected tabs of Person Edit

Attempt to drag and drop any of the "bolded lines" in the Events or
Names tabs into the clipboard window. The unbolded lines drag and drop
ok.

Fixes #8788.
2017-06-04 19:08:27 +01:00
Matti NiemeläandPaul Franklin e01a8602b6 update Finnish translation 2017-06-04 10:22:21 -07:00
vantu5z ac8f5a059a update Russian translation 2017-06-04 11:11:28 +03:00
Paul Franklin e40f5d9faa correct the "Language" field in some translations 2017-06-03 15:17:46 -07:00
JosipandNick Hall 6a4bd7dceb Crash after dragging multiple items from clipboard to gallery
I copied 7 items from the Media List to the clipboard. I then opened a
Person, and dragged one Media Item to the Gallery. I then clicked and
dragged to highlight the remaining 6 items at once. On dragging them to
the gallery, it crashed.

2989475: ERROR: grampsapp.py: line 145: Unhandled exception
Traceback (most recent call last):
File "C:\Program
Files\GrampsAIO64-4.2.5\gramps\gui\editors\displaytabs\gallerytab.py",
line 475, in drag_data_received
(mytype, selfid, obj, row_from) = pickle.loads(sel_data.get_data())
ValueError: too many values to unpack (expected 4)

Fixes #9984.
2017-06-03 22:17:45 +01:00
JosipandNick Hall 118e6c89e9 Cannot drag & drop textual value via clipboard
Allows dnd of textual values from clipboard and shows icon of
target-type during dragging instead of row image, except for text target
shows actual text as drag icon.

Fixes #7532.
2017-06-03 22:13:52 +01:00
JosipandNick Hall bc17245331 Quick search with Czech characters -> Crash
Crash happen when checking for "event.string" in "treeview_keypress"
function in "gramps/gui/widgets/interactivesearchbox.py"
Note that

https://lazka.github.io/pgi-docs/Gdk-3.0/classes/EventKey.html#Gdk.EventKey
says it is deprecated and should never be used.

Gdk.keyval_to_unicode return the corresponding unicode character, or 0
if there is no corresponding character.

Fixes #9130.
2017-06-03 22:05:34 +01:00
Paul Franklin ea5b54598e new gramps.pot translation template for gramps50 2017-06-03 13:47:03 -07:00
Paul Franklin f276507fb8 remove accelarators/mnemonics from non-top-level menu items
https://github.com/gramps-project/gramps/commit/59cced2bc622201a577d8dfba373b3a7fcf3daf5#commitcomment-22310331
2017-06-03 13:43:45 -07:00
Nick Hall 736f10875f Comment out beta warning rather than change config setting 2017-06-02 23:50:44 +01:00
SNoiraud 7230e8618e 10049: Narrated Web Report options reorganization 2017-06-02 13:27:53 +02:00
John RallsandPaul Franklin b4fed8101a 8366: February 29th invalid date in Julian dual-dated leap year 2017-05-31 12:06:53 -07:00
Nick Hall ed8807f73a Fix get_gramps_ids method to return a list of str 2017-05-31 17:03:20 +01:00
Nick Hall 512fa615bf Fix DummyDb errors after a cancelled database upgrade 2017-05-30 23:27:08 +01:00
Nick Hall 16cd995558 Database upgrade to convert default handle to str 2017-05-30 19:23:48 +01:00
vantu5z 5939e722e4 update Russian translation
(fixes for [add->new] menu translations)
2017-05-30 11:06:42 +03:00
Nick HallandGitHub 352d6fc558 Convert handle type to str in the database API (#405)
The mixed type of handles has been a constant source of bugs.
Converting them all to str in the database API should make
maintenance easier. The key to BSDDB tables must still be bytes
in the database layer.
2017-05-30 00:19:42 +01:00
prculleyandPaul Franklin 83d24ed681 8366: February 29th invalid date in Julian dual-dated leap year 2017-05-29 10:57:47 -07:00
Leonhaeuser d14383cb3a Update German translation 2017-05-29 19:18:56 +02:00
vantu5z f1659d556e update Russian translation 2017-05-29 09:46:32 +03:00
Nick Hall 22e7243660 9229: Use the term "Delete" instead of "Remove"
The term "Delete" should be used when an object is deleted from
the database.  The term "Remove" should be used when an object is
removed from a list, but not actually deleted.
2017-05-28 17:54:46 +01:00
Leonhaeuser 2d1d0342c9 Update German translation 2017-05-25 21:59:41 +02:00
Nick Hall fd1418dc8a Disable development warning message 2017-05-24 00:18:31 +01:00
Paul Franklin b38f68496f restore missing (since January) "import statistics" dialog 2017-05-22 12:42:23 -07:00
Paul Franklin f035196b6c Revert "restore missing (since January) "import statistics" dialog"
This reverts commit c3fb9c0c4e.
2017-05-22 11:21:57 -07:00
Paul Franklin c3fb9c0c4e restore missing (since January) "import statistics" dialog 2017-05-22 06:17:26 -07:00
Zdeněk Hataš ca7f65865e czech translation update 2017-05-22 11:41:30 +02:00
Paul Franklin 9485e061b1 merge translation with current template 2017-05-20 13:47:12 -07:00
Paul Franklin d6a97cf90e 10033: Note isn't included on CIR when it is attached to a name 2017-05-19 06:50:22 -07:00
vantu5z 4791550f6b update Russian translation 2017-05-16 14:22:36 -03:00
Sam ManziandGitHub 59cced2bc6 Feature:New global [Add]>[New] menu with Keybindings (#281)
Usability improvement, allows using the Menu [Add]>[New] or global keyboard shortcut(keybinding) to add [New] entries

Supports:

Adding [New] records for:

* Person

* Family

* Event (default=Custom/Unknown)(Leave blank for unknown / enter letters for custom)

* Place

* Source

* Citation

* Repository

* Media

* Note
2017-05-16 10:43:14 +10:00
Sam ManziandGitHub bef4b309b6 Bug8723: Missing [edit buttons] in relationship view (#391)
Shows edit-Buttons by default only if familytree is not readonly
2017-05-16 10:26:46 +10:00
Paul CulleyandSam Manzi 6a35246e08 bug 6664; fix Detailed Descendent Report, multi paths to descendent (#386)
where the descendent ends up in different generations at the same
time
2017-05-16 10:08:25 +10:00
Paul CulleyandSam Manzi fa46fe189b bug 6130; fix export filtering (#380) 2017-05-16 09:52:23 +10:00
Nick Hall 61526190e6 Remove trailing whitespace 2017-05-15 22:20:22 +01:00
Nick Hall a4550d2cd6 Remove trailing whitespace 2017-05-15 22:03:55 +01:00
Nick Hall 85161726a2 10039: Fix unit tests that use the test case generator
The keys() method of a dictionary returns its keys in an arbitrary
order. These must be sorted to provide deterministic results for
unit tests.
2017-05-15 21:52:49 +01:00
Nick Hall 80779a35fa Revert bugs #8785 and #9700
Expanding tree selectors by default caused performance issues.
The expanded person selector also made it more difficult to
select a specific person in some circumstances.

GEPS 041 has been created to discuss a better selector design.
2017-05-15 17:32:57 +01:00
vantu5z 05f04093af update Russian translation 2017-05-15 10:10:58 -03:00
Paul Franklin ccc3a4a8ef new gramps.pot translation template for master 2017-05-14 12:24:30 -07:00
Paul Franklin 657e76ccb4 add two recently-created files to POTFILES.in 2017-05-14 12:20:30 -07:00
Leonhaeuser d7379bd2f1 Update German translation 2017-05-14 18:18:38 +02:00
Alois PoettkerandMirko Leonhäuser e145a30291 Extend ReorderIDs-II DE translation. (#395) 2017-05-14 17:41:15 +02:00
Serge NoiraudandNick Hall 543661d62e FR10020: Add "within <n> km/miles/degree" filter (#382) 2017-05-13 22:01:55 +01:00
Alois PoettkerandNick Hall 022da0cb82 Extend ReorderIDs-II functionality. (#383) 2017-05-13 16:34:15 +01:00
Serge NoiraudandGitHub 5791788f0e Narrative web features: 5592 + 5408 + 10031 (#389)
* Feature: 5592 show more details + 5408 children dates

* NarrativeWeb: another translation problem.

* Narrativeweb: different locales.

* Feature 10031: maps not displaying all events
2017-05-13 08:07:32 +02:00
Paul Franklin 2a2a0d2766 new gramps.pot translation template for master 2017-05-11 11:10:17 -07:00
Nick Hall 804fa635e6 10039: Fix imports test for non-US locales 2017-05-11 19:34:28 +01:00
vantu5z cf479647ad update Russian translation 2017-05-11 14:41:15 -03:00
Nick Hall 14faa46363 Use with-block when writing to file 2017-05-11 17:25:14 +01:00
Nick Hall 1b18b652bb Remove TestLogger and associated unit test
This is not used anywhere. In current python versions, basicConfig
is called automatically when there is no root handler. It is easy
to add a FileHandler if required.
2017-05-11 17:18:17 +01:00
Nick Hall 0d704f03d8 Ignore log messages during unit test capture 2017-05-11 15:03:42 +01:00
Paul Franklin 07ce8c22d8 add gramps-ID option to DAR and DDR text reports 2017-05-10 20:18:52 -07:00
Nick Hall 8086d9f2ca Revert "Increase logging level during unit tests"
This reverts commit 709f3a33d5.
2017-05-11 01:05:42 +01:00
Nick Hall 709f3a33d5 Increase logging level during unit tests 2017-05-10 23:53:54 +01:00
Nick Hall 108d7b461c Merge pull request #385 from prculley/report_test 2017-05-10 22:53:30 +01:00
prculleyandNick Hall 355110e703 Fix imports_test nosetest description and running 2x under unittest 2017-05-10 22:46:40 +01:00
prculleyandNick Hall dd828cee5b pylint improvements on report_test 2017-05-10 22:46:40 +01:00
prculleyandNick Hall 22c966bd8a Fix reports test to run under Unit-test and other environments
Originally run correctly only under nose; under unit-test failed
to find anything to do.  Also was selecting wrong test file.
2017-05-10 22:45:53 +01:00
Nick Hall 2e2e6c88a4 Suppress extraneous output in unit tests 2017-05-10 18:21:48 +01:00
Nick Hall 60ab0a01bf Rename unit test that has now been implemented 2017-05-09 19:50:53 +01:00
Nick Hall f9cacac1db Comment out some tests that have not yet been implemented
This will prevent nosetest running them.
2017-05-09 19:49:22 +01:00
Nick Hall 1e54cbbec3 Remove test suite functions
These cause nosetest to run duplicate tests.
2017-05-09 19:40:50 +01:00
vantu5z 828c187dc3 update Russian translation 2017-05-09 14:01:39 -03:00
Paul Franklin 8244c7b211 add gramps-ID option to Ancestor and Descendant text reports 2017-05-08 19:00:29 -07:00
Nick Hall c6970e640c Do not run tests in the test directory
The tests in the GrampsLogger directory should be moved into
gramps/gui/logger/test, but mainly duplicate the existing rotate
handler test.
2017-05-08 22:47:38 +01:00
Nick Hall 5ffb4bcfac Add missing __init__.py in test directories 2017-05-08 21:43:33 +01:00
Paul Franklin 8d0fcc5730 convert existing reports to use the new stdoptions gramps-ID option 2017-05-07 18:15:40 -07:00
Paul Franklin 5056b8addf add a new gramps-ID option to stdoptions 2017-05-07 18:10:58 -07:00
Paul Franklin c8001c7483 tweak some None tests 2017-05-07 18:03:40 -07:00
Sam ManziandGitHub 49493290c5 Fix bug 9975 Incorrect SoundEx result (#388) 2017-05-05 16:29:27 +10:00
Sam ManziandGitHub 38db06f931 Fix syntax error postgresql (#387) 2017-05-05 16:10:09 +10:00
Sam ManziandGitHub d284ace4ed Mention translation URLs in Contribute (#381) 2017-05-05 15:50:10 +10:00
Paul CulleyandSam Manzi 2974f82aad bug 9445; fix XML export of notes so lead/trail spaces are preserved (#379) 2017-05-05 15:29:15 +10:00
Serge NoiraudandSam Manzi 98238c7112 10012 : Save defaults for different Narrative Web report websites (#375) 2017-05-05 11:51:09 +10:00
Serge NoiraudandSam Manzi 8f99b4b488 add the date-format option to narrativeweb and webcal. (#374) 2017-05-05 11:30:53 +10:00
John Ralls 41bd626aa2 Update Mac moduleset dependencies. 2017-05-04 16:06:02 -07:00
John Ralls c5ddeeca5e Fix GI version check warning on GtkosxApplication. 2017-05-04 15:33:53 -07:00
Zdeněk Hataš 6b2f7aea64 czech translation update 2017-05-02 13:36:42 +02:00
SNoiraud 2c67db6a58 10029: Bad color assignment in geoplaces 2017-05-01 07:57:46 +02:00
Paul Franklin 6b45d7cedd new gramps.pot translation template for master 2017-04-30 14:29:52 -07:00
Paul Franklin 1ba072e6fc 10000: report tables are always written LTR even for RTL locales 2017-04-30 13:52:42 -07:00
Paul Franklin 2b6cc3cd18 Revert "10000: report tables are always written LTR even for RTL locales"
This reverts commit 55fa920628.
2017-04-30 12:31:42 -07:00
Paul Franklin 55fa920628 10000: report tables are always written LTR even for RTL locales 2017-04-30 11:44:13 -07:00
Paul CulleyandSam Manzi db8b95cf2d bug 9564; fix exception on Event filter editor (#377)
for 'Events occurring on a particular day of the week' filter
2017-04-30 12:27:48 +10:00
Mateusz KoniecznyandSam Manzi 9dec0bc364 add CONTRIBUTING file, enable packacking this file (#376)
CONTRIBUTING file is standard place for documentation how one may send patches
such documentation exists for this project so that file will be redirection to existing resources

At least some people potentially interested in contributing at this moment have a very small
but completely pointless task (locating documentation for developers) to overcome before doing something useful.

Ref: https://gramps-project.org/bugs/view.php?id=10019
2017-04-30 12:07:22 +10:00
Paul Franklin bf1875e830 8128: GtkDialog mapped without a transient parent 2017-04-25 20:41:28 -07:00
vantu5z 2fef1b30d0 update Russian translation 2017-04-24 14:04:54 +03:00
Matti Niemeläandromjerome df6b946268 update finnish translation 2017-04-22 11:49:51 +02:00
romjerome 78a0ac5f50 Update french translation 2017-04-21 11:26:44 +02:00
Nemeséri Lajosandromjerome 37b2f09134 Update Hungarian translation 2017-04-21 10:59:48 +02:00
Paulo Henrique MoraesandNick Hall 1766f9944c Updated translation (#373) 2017-04-18 20:43:20 +01:00
Paul Franklin 2965d77cde 10003: add more Records options (father with most children, etc.) 2017-04-18 06:17:27 -07:00
Paul Franklin e0a8bb4f5e add a subtitle to the book's T.O.C. for the Family Group report 2017-04-16 09:47:57 -07:00
Paul CulleyandSam Manzi fd4795e957 bug 8128; Fix 'print...' dialogs for missing transient parent (#372)
Requires adding uistate to the docgen basedoc and all files that
override the init
2017-04-15 11:22:54 +10:00
Paul Franklin cb932b9221 typo (trailing whitespace) 2017-04-14 17:02:50 -07:00
Paul Franklin 8379e0ce6e add the date-format option to some more reports 2017-04-14 13:54:24 -07:00
Paul Franklin 38239526f6 fix numeric date displayer (for Hebrew month "13" and B.C.E. years) 2017-04-10 09:15:22 -07:00
Zdeněk Hataš 8ee8e89011 czech translation update 2017-04-10 12:55:55 +02:00
Paul Franklin 1f8f8b9434 enable Tamil dates 2017-04-09 22:56:59 -07:00
Paul Franklin 95b2a8765b new gramps.pot translation template for master 2017-04-09 18:14:41 -07:00
Paul Franklin 977db6223f enable date-format option in Complete Individual report 2017-04-09 18:12:23 -07:00
Paul Franklin ef271dc381 enable date-format option in reports 2017-04-09 15:24:09 -07:00
Paul Franklin 3d3b13c8ad 9985: secondary locales do not use their own numeric date format 2017-04-09 15:21:08 -07:00
SNoiraud efd73e9427 8128: GtkDialog mapped without a transient parent in placeselection 2017-04-06 09:59:48 +02:00
Matti Niemeläandromjerome ae72a999f0 update finnish translation 2017-04-05 15:03:12 +02:00
Zdeněk Hataš 5713d173b3 czech translation update 2017-04-04 09:25:21 +02:00
Paul Franklin fab2537dce typo 2017-04-02 09:41:19 -07:00
Sam ManziandGitHub 3fdc986542 Merge pull request #370 from prculley/bug8128
Bug 8128; for color chooser dialogs; fixed transient parent
2017-04-02 10:20:04 +10:00
Sam ManziandGitHub 141cd18651 Merge pull request #369 from prculley/bug9998
bug 9998 partial fix for Note editor Toolbar overflow icons missing
2017-04-02 10:04:22 +10:00
prculley 3b5fcae948 bug 9998 partial fix for Note editor Toolbar overflow icons missing
Bug Affects Windows only.
Adds text labels to icons which will only appear in the overflow
dropdown menu when dialog is too narrow.  Icons still don't show
due to Gtk bug on Windows, but at least user sees the text labels.
2017-03-31 12:23:23 -05:00
prculley 916232a6ef Bug 8128; for color chooser dialogs; fixed transient parent
for styledtexteditor and Family Lines Graph, Family Colors option
2017-03-31 11:53:10 -05:00
erikdrgm 8a3b606b7a updated nl translation 2017-03-29 22:25:38 +02:00
erikdrgm 6d050fbf7c Merge branch 'master' of github.com:gramps-project/gramps 2017-03-29 22:02:38 +02:00
Nick Hall 002f1e0899 Remove redundant command line options 2017-03-27 21:17:31 +01:00
vantu5z 85292a9ef1 update Russian translation 2017-03-25 22:25:12 -03:00
Sam ManziandGitHub d2ec35ec35 Merge pull request #367 from arnaullv/master
Update Catalan translation to latest template
2017-03-25 16:25:33 +11:00
arnaullvandGitHub 0d121b32c5 Update Catalan translation to latest template
Update Catalan translation to latest template and unified translation criterias
2017-03-24 15:43:39 +01:00
Paul Franklin 0a58ce69f9 9995: Bug in the Name Editor / Group As 2017-03-22 17:23:03 -07:00
Paul Franklin c56177169d clarify use of the style editor for graphic style editing 2017-03-22 16:15:42 -07:00
Paul Franklin 9246484876 new gramps.pot translation template for master 2017-03-21 23:48:07 -07:00
Paul Franklin 08746bf024 consolidate some report style descriptions (fewer strings to translate) 2017-03-21 22:34:47 -07:00
Paul Franklin 0919763f15 enable preliminary Tamil translation 2017-03-20 12:13:51 -07:00
Logan MandPaul Franklin d7b409ccec initial, preliminary, partial Tamil translation (thanks, Logan!) 2017-03-20 12:07:40 -07:00
Paul Franklin 73ca25e68e disable FGR option if it's not relevant 2017-03-19 20:52:37 -07:00
Paul Franklin 64690ea554 add a "description" to a report style table and a style table cell 2017-03-19 18:29:01 -07:00
vantu5z be6780fa7d update Russian translation 2017-03-19 10:27:29 -03:00
erikdrgm 2dbfcb27dd Merge branch 'master' of github.com:gramps-project/gramps 2017-03-19 10:16:23 +01:00
Paul Franklin 57efc716ef neaten a report's style XML file, and add the new description 2017-03-18 22:33:40 -07:00
Paul Franklin 7d907c5d63 enable a report graphic style object to have a "description" 2017-03-18 22:30:23 -07:00
Paul Franklin ef3f1718b6 typo (trailing space) 2017-03-17 23:25:57 -07:00
Paul Franklin 3f652cfb45 new gramps.pot translation template for master 2017-03-17 11:38:11 -07:00
Paul Franklin 473dd3257a change string paramaters to named ones, for translation 2017-03-17 11:35:48 -07:00
Paul Franklin 747104b3ab add license to module 2017-03-16 19:46:24 -07:00
Paul Franklin 95762e864f tidy up some translatable string things 2017-03-16 19:44:57 -07:00
Paul Franklin 46c6737d67 make Polish "numerical" date display consistent with its locale format 2017-03-13 23:47:05 -07:00
Paul Franklin ce01a69314 add datestrings (made by running _datestrings.py) to translation 2017-03-13 22:42:22 -07:00
Nick Hall facff359e3 Rename plugin unit test files 2017-03-11 15:33:59 +00:00
Paul Franklin a9df15c9be fix Bulgarian numeric dates 2017-03-10 21:11:17 -08:00
Paul Franklin 83a4b553f4 slight tweak to Arabic date handler 2017-03-10 18:35:59 -08:00
Nick Hall c4f94bf9dc Rename edit reference unit test
Unit test files must be named *_test.py to be found by the
setup.py script.
2017-03-10 22:05:02 +00:00
Nick Hall e59aa0c907 Fix skipped cursor unit tests 2017-03-10 21:20:47 +00:00
Nick Hall 638f590eb3 Prevent warnings when importing xml from stdin 2017-03-09 23:40:51 +00:00
Paul Franklin c5f8d2b5db fix Icelandic numeric-format date display 2017-03-07 10:36:05 -08:00
Nick Hall 3d897f3146 Suppress output in rotate handler test 2017-03-07 18:02:47 +00:00
Paul Franklin 998c2f31b9 put "short" days into the Icelandic translation 2017-03-07 09:59:11 -08:00
Paul Franklin 337be8e6af enable "short" days in _datestrings (_grampslocale already had them) 2017-03-07 09:53:39 -08:00
Paul Franklin 968f378174 fix Norwegian numeric-format date display 2017-03-07 09:41:45 -08:00
erikdrgm 6110fc7612 Merge branch 'master' of github.com:gramps-project/gramps 2017-03-07 09:41:36 +01:00
Nick Hall c1c2c1557c Suppress output in importgeneweb test 2017-03-06 23:27:07 +00:00
Nick Hall 44b7983331 Another fix 2017-03-06 23:05:13 +00:00
Nick Hall 9cc770a70c Fix error in previous commit 2017-03-06 22:17:42 +00:00
Nick Hall 3b9d97d348 Suppress extraneous output in unit tests 2017-03-06 21:55:48 +00:00
vantu5z f57386ab63 update Russian translation 2017-03-06 11:39:39 +03:00
Paul Franklin adccc67a68 remove the last bogus Chinese strings from the Turkish translation 2017-03-06 00:21:21 -08:00
Paul Franklin cd084ca257 the message looks better with another linefeed 2017-03-06 00:18:33 -08:00
romjerome 03c26cb83c Limit creation of extra files 2017-03-04 14:55:11 +01:00
Paul Franklin c8a418f5bf fix some date-related words in Esperanto 2017-03-04 01:24:51 -08:00
Mìcheal A ColquhounandNick Hall 539330309b Use assertRaises to check for the NameError
Also corrected spelling of a word.
2017-03-04 00:57:04 +00:00
Nick Hall 0cba44146a Avoid nested transactions 2017-03-04 00:16:27 +00:00
Nick Hall 93af3a0c63 9744: Tidy up add_* methods 2017-03-03 22:24:51 +00:00
Nick Hall 349bdf85b7 9744: Tidy up get_*_from_handle methods 2017-03-03 22:00:16 +00:00
Nick Hall 0813ba25db Use transactions when writing metadata 2017-03-03 19:54:19 +00:00
Paul Franklin 49c5ec5977 change to Microsoft's current official country name, for Windows users 2017-03-03 10:21:36 -08:00
Paul Franklin c4fc1066bb add datestrings (made by running _datestrings.py) to translation 2017-03-02 21:06:47 -08:00
Paul Franklin 39c3dc437a add datestrings (made by running _datestrings.py) to translation 2017-03-02 21:06:14 -08:00
Paul Franklin 143919db14 add datestrings (made by running _datestrings.py) to translation 2017-03-02 21:05:59 -08:00
Sam ManziandGitHub 49df7446b2 Merge pull request #361 from prculley/addon_reload
Fix Addon manager to recognize newly installed addons immediately
2017-03-03 15:37:17 +11:00
Matti NiemeläandPaul Franklin d08b394e7c update Finnish translation for "master" 2017-03-02 19:17:44 -08:00
prculley b865556ddd Fix Merge test for complex families 2017-03-02 14:37:51 -06:00
prculleyandNick Hall 97bf1cb406 Bug 9973; fix remove unused objects tool to use place name not title
original 'title' field is often blank now...
2017-03-02 18:54:48 +00:00
arnaullvandNick Hall 7c5df1300e Update Catalan translation to latest template 2017-03-02 18:39:40 +00:00
John Ralls d5e8b810b9 Fix copy-paste error in last commit. 2017-03-02 07:11:01 -08:00
John Ralls 1571f8409a Bug 9965: Undo in undoableentry does the wrong undo in MacOS.
This fixes the immediate problem peculiar to MacOS, but the underlying
problem that the code doesn't use keybindings and has a control-specific
undo stack which makes undo ambiguous for the window remains.
2017-02-28 20:55:16 -08:00
prculleyandNick Hall 3901e7dd4c Fix unodoableentry for international characters
Gtk has some parameters in bytes, some in characters; they cannot
be combined.
2017-02-28 23:11:04 +00:00
Nick Hall c352fa6378 Check that the USER_CSS directory exists 2017-02-28 23:07:38 +00:00
Bernard Banko 5ac0d29f00 Add ~ for About modifier 2017-02-28 21:26:43 +01:00
Paul Franklin 111d792c0c shorten option description for better CLI typeout 2017-02-28 12:00:42 -08:00
Paul Franklin 1e0e1c0b39 add filter progress bar to the Relationship Graph report 2017-02-28 11:53:51 -08:00
Paul Franklin eb3c13dbca add filter progress bar to the Records report 2017-02-28 11:52:19 -08:00
prculley 9116148587 Fix addon manager to reload updated plugins so they are recognized 2017-02-28 08:37:14 -06:00
prculley 5b51f3dcc9 Fix Addon manager to recognize newly installed addons immediately 2017-02-28 08:37:14 -06:00
Nick Hall 459d3f931c Skip four failing tests in merge_ref_test
These four tests pass when run individually from the command line,
but fail when run as part of a module.
2017-02-27 23:18:17 +00:00
Nick Hall 55ff3efd5f The wget package is pre-installed in travis 2017-02-27 22:52:36 +00:00
Nick Hall d59f4e86b2 Enable merge_ref_test in travis 2017-02-27 22:02:51 +00:00
Nick Hall 682cbe6e21 Fix family merge bug
References do not need to be updated in people that have been
removed in the merge.
2017-02-27 22:00:08 +00:00
Nick Hall 7d38122be8 Remove unused private table variable 2017-02-25 19:26:46 +00:00
prculley 28850728af Fix ToolComboEntry for Gtk method not supported on older Gtk 2017-02-25 08:41:01 -06:00
Sam ManziandGitHub f603f24bbd Merge pull request #357 from prculley/bug9954
bug 9954; fix Gedcom import for empty FAMC line
2017-02-25 16:06:26 +11:00
Sam ManziandGitHub e1ba3d0523 Merge pull request #343 from prculley/gladeleak
Bug 9913: Fix Glade file loading to avoid loading and leaving extra toplevels
2017-02-25 15:44:27 +11:00
Sam ManziandGitHub dee377762a Merge pull request #354 from prculley/gtkdep
Fix some Gtk deprecations
2017-02-25 15:24:03 +11:00
Sam ManziandGitHub ceeb4382f1 Merge pull request #358 from prculley/bug9920
bug 9920; fix for multiline Titles in Source view
2017-02-25 15:10:19 +11:00
Nick Hall f92ee329a9 Avoid using 'shell=True' when running a subprocess 2017-02-24 22:32:24 +00:00
Paul Franklin ce830fb8bf give CLI warning "title" its own line, as the error already does 2017-02-24 12:28:31 -08:00
Paul Franklin 1ce98afc86 don't type out a (possible) warning message if the option is not on 2017-02-24 11:10:03 -08:00
Paul Franklin fc4b9fe695 fix bug (the option itself is always True, we want the value) 2017-02-24 11:08:18 -08:00
Paul Franklin 8f09adefe9 improve the "__main__" routine which prints all the date formats 2017-02-23 20:20:06 -08:00
Nick Hall 74ffc76af0 Fix bug introduced in previous commit 2017-02-23 22:39:30 +00:00
Nick Hall 7b578356fd 9541: Make get_table_func method protected 2017-02-23 22:20:50 +00:00
Nick Hall 6bf8870295 Tidy up secondary column code 2017-02-23 22:20:50 +00:00
Nick Hall a8e6f7b9a3 Use current environment and executable in process
The GRAMPSHOME environment variable is not unset after the
gen/utils/test/file_test unit test.  This caused the Gramps
process to fail with an environment error.
2017-02-23 18:43:20 +00:00
Nick Hall d71f7d7097 Fix vCard unit tests 2017-02-23 13:58:40 +00:00
Zdeněk Hataš 06476cfc6d czech translation update 2017-02-23 11:30:50 +01:00
Paul Franklin 4541027dc3 enable deferred translation of date format strings 2017-02-22 21:29:13 -08:00
Nick Hall 1c4d27c2a9 Revert "enable deferred translation of date format strings"
This reverts commit 715cce27f4.
2017-02-23 00:38:28 +00:00
Nick Hall 0599539d09 Revert "improve the "main" routine which prints all the date formats"
This reverts commit 0c144c97a9.
2017-02-23 00:09:19 +00:00
Nick Hall b8ba05540e Revert import change in unit test
The relative import worked when the test was run from the
command line, but not in the Travis environment.
2017-02-22 17:50:02 +00:00
Nick Hall b3509ad3f4 Convert some gui imports from absolute to relative 2017-02-22 17:16:04 +00:00
Paul Franklin 0c144c97a9 improve the "main" routine which prints all the date formats 2017-02-22 08:17:53 -08:00
Paul Franklin 715cce27f4 enable deferred translation of date format strings 2017-02-22 08:15:41 -08:00
Nick Hall 8876252771 Remove redundant OS specific code
The text variable is already a str.
2017-02-22 14:57:52 +00:00
Paul Franklin 0f906b363b 7305: Inconvenient size of error dialog 2017-02-21 20:29:05 -08:00
Paul Franklin 8196b65aab add a TODO comment (since I don't understand) 2017-02-21 20:20:10 -08:00
Paul Franklin 4daf7e1214 add a TODO comment (since I don't understand) 2017-02-21 20:15:58 -08:00
Paul Franklin 63d37e84cc make LastNameDialog a better ManagedWindow 2017-02-21 20:05:38 -08:00
Paul Franklin fae1cb710b better names (than the ones I hurredly chose to make pylint happy) 2017-02-21 20:02:38 -08:00
Nick Hall 5d842e046e Remove handle class 2017-02-21 20:55:48 +00:00
prculley a948feb60e bug 9920; fix for multiline Titles in Source view
Source view is set up for single line rows, multi-line Titles
cause problems for Gtk (sometimes many unrelated rows get doubled
in height).
2017-02-21 11:41:40 -06:00
prculley 4226bc9d45 Fix Gedcom import for improper creation of error message note
The improper note could overwrite another note, due to overlapping
GIDs.
2017-02-21 09:13:16 -06:00
prculley 5fe0a4df46 bug 9954; fix Gedcom import for empty FAMC line 2017-02-20 16:13:10 -06:00
Nick Hall d0b50caea1 Change "GRAMPS" to "Gramps" in comments and docstrings 2017-02-20 19:05:48 +00:00
Nick Hall 3e5a956454 Convert some imports from absolute to relative 2017-02-20 18:19:41 +00:00
Nick Hall e46321a7c6 Move labels into schema 2017-02-20 16:27:27 +00:00
vantu5z 6a6d0c3a2e update Russian translation 2017-02-20 09:14:14 +03:00
erikdrgm 782f81fb5e Merge branch 'master' of github.com:gramps-project/gramps 2017-02-19 09:09:54 +01:00
erikdrgm 53eabbaa86 changed n translation 2017-02-19 09:08:25 +01:00
Paul Franklin 55d3a24d2e tweak some report options slightly (less height, re-tabify some) 2017-02-18 19:28:14 -08:00
Paul Franklin f7bda7d51b new gramps.pot translation template for master 2017-02-17 15:56:10 -08:00
Paul Franklin 3af9a8b803 7276: translate some currently-untranslated punctuation marks 2017-02-17 15:53:31 -08:00
OlafandNick Hall 7f813e95e5 Change output order in Relationship Graph plugin
This patch adds a function sort_persons() to RelGraphReport, which will
change the processing order of persons for the output. Starting from persons
with no known parents in the database, the individual family trees are
traversed in a down-and-up fashion, so that closely related people should
appear close to each other in the output. Previously the output order was
purely given by the order of internal IDs.

Rearranging the output order will make the life of GraphViz just so much easier.
It will then manage to produce graphs with much fewer unnecessary intercrossing
arrows between generations and people and ultimately produce a much nicer
output graph.
2017-02-17 22:26:14 +00:00
Nick HallandGitHub 7f07ad2637 Merge pull request #356 from Nick-Hall/json-schema
Convert get_schema methods to use JSON Schema
2017-02-17 22:05:23 +00:00
Nick Hall 88842e875f Add JSON schema unit tests 2017-02-17 21:45:46 +00:00
Nick Hall 62403b5789 Remove schema field functionality 2017-02-17 21:45:46 +00:00
Nick Hall 6f0119288b Convert get_schema methods to use JSON Schema 2017-02-17 21:45:46 +00:00
Nick Hall 2692f86cd6 Add python3-jsonschema to travis 2017-02-17 21:21:51 +00:00
romjerome 64208cf9b9 Merge branch 'master' of https://github.com/gramps-project/gramps 2017-02-17 16:11:07 +01:00
romjerome e588ff504b 9950: Custom Note Types not shown in the filter siderbar 2017-02-17 16:11:00 +01:00
Paul Franklin 7855df6c08 make the translator's job a little easier 2017-02-13 21:29:47 -08:00
Paul Franklin 5ceb7b69d9 fix bug (typo?) where Quick Views had a title of "True" 2017-02-13 19:16:58 -08:00
Paul Franklin 0d7b79ea88 7276: translate some currently-untranslated punctuation marks 2017-02-13 19:14:46 -08:00
SNoiraud 20f7b862cf Narrativeweb : Add possibility to translate "%s:" strings 2017-02-13 10:12:58 +01:00
SNoiraud fe989d9ce3 9883: The family map for narrativeweb must work over https 2017-02-13 09:39:38 +01:00
vantu5z 532928ef69 update Russian translation 2017-02-13 09:19:37 +03:00
Bernard Banko 2e9c9a435a fix bug 9600 2017-02-12 12:01:32 +01:00
Sam ManziandGitHub 4b313694fc Merge pull request #350 from prculley/extractname
Fix 'Extract Information from names' tool
2017-02-12 15:53:31 +11:00
Sam ManziandGitHub ace8cb415f Merge pull request #349 from prculley/filters
Add Progress indicators to filters and reports
2017-02-12 15:39:35 +11:00
Sam ManziandGitHub 61c678417a Merge pull request #255 from SNoiraud/FR9373
9373: Ability to be able to enter comma separated latitude/longitude …
2017-02-12 15:30:55 +11:00
Sam ManziandGitHub 67b967ce3c Merge pull request #351 from prculley/bug9934
bug 9934; fix error when 'Manage Family Tree' is closed via ESC key
2017-02-12 15:13:13 +11:00
Sam ManziandGitHub 2278ceef55 Merge pull request #353 from beernarrd/sl-master
updated slovenian translation
2017-02-12 15:00:32 +11:00
Nick Hall 9ca01a3211 9945: Write PlaceID links in CSV export
When places are included in the export use PlaceID links,
otherwise generate a formatted place for the event.
2017-02-11 18:46:11 +00:00
prculley a50675f7ac Fix Gtk deprecations 2017-02-11 07:54:21 -06:00
erikdrgm 30cd5f885b Merge branch 'master' of github.com:gramps-project/gramps 2017-02-11 11:11:52 +01:00
erikdrgm 5749fadedc updated dutch translation 2017-02-11 11:10:55 +01:00
prculley 064ec90db0 Fix Glade file loading to avoid loading and leaving extra toplevels
Also deals with problems caused by fix; sometimes do need to load
some other toplevel objects.
In some cases, it was easier to remove unused toplevel objects from
glade files.
2017-02-09 16:06:23 -06:00
prculley 0c9953bb1a Fix import gedcom glade file to remove unused toplevel object 2017-02-09 16:06:19 -06:00
prculley 2da74564a3 fix owner editor to properly destroy glade object 2017-02-09 16:06:18 -06:00
Bernard Banko 14d8e36aba updated slovenian translation 2017-02-09 22:49:28 +01:00
Doug ReiderandJohn Ralls f3e11efeaf Fix bookmarks keybinding on Mac to match the documentation. 2017-02-08 21:17:36 -07:00
prculley 0307c10244 Fix reports papermenu to properly destroy glade objects 2017-02-08 16:23:15 -06:00
prculley ef647b0680 Remove unused glade files 2017-02-08 16:23:14 -06:00
prculley f034a2b8c7 Fix dbman so RCS checkin window has correct transient parent 2017-02-08 14:58:16 -06:00
prculley 8f86906e8a Fix POTFILES.in for removed dummydb.gpr.py 2017-02-08 12:06:28 -06:00
prculley 71cc974639 pylint on patchnames 2017-02-07 18:20:42 -06:00
prculley e8c6ad2542 Fix 'Extract Info from names' tool; unclosed window, bad parent
Gtk deprecation warnings, and add window size/position config.
2017-02-07 18:20:40 -06:00
Nick HallandGitHub 4e7eaf016a Merge pull request #336 from prculley/fastplug
Improve Addon management performance
2017-02-07 21:20:32 +00:00
Paul Franklin 022ba94cd7 9004: Error printing graphical report ancestor tree 2017-02-07 09:29:23 -08:00
prculley 40176eeaaf bug 9934; fix error when 'Manage Family Tree' is closed via ESC
or the dialog close 'x' in top left
2017-02-07 11:23:23 -06:00
Jérôme RapinatandPaul Franklin 42ed11e0ff 9004: Error printing graphical report ancestor tree 2017-02-07 08:58:25 -08:00
vantu5z c8b9a5ee5b update Russian translation 2017-02-07 08:55:44 +03:00
Paul Franklin 4284eb95a7 slightly enhance MW's setup_configs 2017-02-05 15:24:48 -08:00
Paul Franklin 081095d333 other uses of self.uistate are protected and this one should be too 2017-02-03 23:15:51 -08:00
prculley 076d75eba4 Add progress indication to long running reports 2017-02-03 18:05:08 -06:00
prculley 705ae9075d Fix TreeBaseModel so that filters have correct transient parent 2017-02-03 18:04:17 -06:00
prculley 79888ec6ea Add progress indication for filters with long 'prepare' times
And fix DeepRelationshipPathBetween for more accurate progress
And fix IsSiblingOfFilterMatch for HandleError
2017-02-03 18:00:18 -06:00
Sam ManziandGitHub ea133b3e9f Merge pull request #346 from prculley/soundex
A new Soundex filter for matching 'name' with people using Soundex
2017-02-04 10:50:33 +11:00
Sam ManziandGitHub b58ac2da8a Merge pull request #348 from prculley/undo
bug 9927; fix UndoableEntry for pygobject bug
2017-02-04 10:36:01 +11:00
Sam ManziandGitHub f28c90bc7a Merge pull request #344 from bertcarnell/bertcarnell/list_child_spouses
Add spouses to the child listing in DAR and DDR
2017-02-04 09:45:49 +11:00
Paul Franklin 28bf8479fd 9795: remember the last location of windows [Dashboard gramplets] 2017-02-02 19:30:02 -08:00
Paul Franklin 1ae88d9aed 9795: remember the last location of windows [style dialogs] 2017-02-02 19:22:55 -08:00
prculley ae960f79d4 bug 9927; fix UndoableEntry for pygobject bug
This is a workaround for
https://bugzilla.gnome.org/show_bug.cgi?id=644927
What is happening, is that our UndoableEntry class is connecting
to the 'insert-text' event, which uses one of the 'in-out'
parameters for the position of the cursor in the buffer. The very
fact of the connect to the event causes the issue, not something
Gramps is doing wrong.
2017-02-02 14:33:48 -06:00
RobandGitHub c07dcbe0ee Updated det_ancestor_rep.sh to eliminate the unused usenick option 2017-02-02 12:54:42 -05:00
prculley 5ca82248d3 Add tests for new Person HasSoundexName, and old HasNameOf rules 2017-02-02 10:16:59 -06:00
prculley ec6343e00c A new Soundex filter for matching 'name' with people using Soundex 2017-02-02 10:16:57 -06:00
Peter Landgrenandromjerome 94716cc20f Update Swedish translation 2017-02-02 10:46:09 +01:00
Nemeséri Lajosandromjerome c3c9b72e88 update Hungarian translation 2017-02-02 10:40:34 +01:00
romjerome e287101688 8855: start to update API doc for DB stuff 2017-02-02 10:34:18 +01:00
romjerome 1a1515d6e3 9907: add a spacing value for children widgets
fit better for some Gtk themes
2017-02-02 10:28:29 +01:00
Zdeněk Hataš d0e9728567 czech translation update 2017-02-01 10:20:46 +01:00
bertcarnell 010fe736ec Added spouses to the child listing in the Detailed Ancestor Report and the Detailed Descendant Report for issues #9926, #8941, and #5698. Also added tests as command line scripts 2017-02-01 00:06:16 -05:00
Sam ManziandGitHub aee05dc200 Merge pull request #341 from prculley/exportopt
Fix CSV export options for new parameters
2017-02-01 11:41:58 +11:00
Sam ManziandGitHub d52a8f0a61 Editorial Indent as per review. 2017-02-01 11:33:11 +11:00
SNoiraud cad3871523 Geography : use progressmeter when filtering. 2017-01-31 10:21:08 +01:00
Sam ManziandGitHub df4e547a18 Merge pull request #340 from sam-m888/9914hourglassgraphOption
9914: Add [Arrowhead direction] option to Hourglass graph
2017-01-30 09:04:51 +11:00
Sam ManziandGitHub 880947c387 Merge pull request #339 from sam-m888/9914familylinesOption
9914: Add [Arrowhead direction] option to Familylines graph
2017-01-30 08:55:33 +11:00
Sam ManziandGitHub fd47f8d146 Merge pull request #342 from sam-m888/pycycleCheck
Remove hidden character from front of shebang line
2017-01-30 08:43:20 +11:00
Sam Manzi 1a113ae0fd Remove hidden character from front of shebang line
Found by [pycycle --verbose --source gramps]

Once corrected pycycle reports:

Project successfully transformed to AST, checking imports for cycles..

No worries, no cycles here!
2017-01-30 08:24:35 +11:00
prculley 267a762262 Fix CSV export options for new parameters 2017-01-28 10:49:49 -06:00
Nick Hall 544e3dbcc4 Use correct parent window for export filter progress 2017-01-27 18:17:50 +00:00
vantu5z 5fead50446 update Russian translation 2017-01-27 14:18:27 -03:00
Nick Hall c3c8a632de 6085: Remove import from the gui module 2017-01-27 16:20:49 +00:00
Nick Hall dfdb11bfc9 6085: Remove import from the cli module 2017-01-27 15:36:48 +00:00
Nick Hall 36d68f089f Fix missing filter parameter 2017-01-27 14:24:06 +00:00
Agnès Charrel-BerthillierandSam Manzi a6276cd38f 9914: Add [Arrowhead direction] option to Hourglass graph 2017-01-27 13:54:35 +11:00
Agnès Charrel-BerthillierandSam Manzi d46a00edea 9914: Add [Arrowhead direction] option to Familylines graph 2017-01-27 13:50:40 +11:00
Nick Hall 68fbebe7d1 Add filter progress to reports
Previously, these reports did not show progress of the main
filter loop.
2017-01-26 22:41:08 +00:00
Nick Hall 2f2b619762 Add filter progress to sort events tool 2017-01-26 22:36:54 +00:00
Nick Hall 1e54054953 Add filter progress to export assistant 2017-01-26 22:12:32 +00:00
Nick Hall 4912cc08e4 6085: Convert filters to use the User class
The filter apply method can now be passed a User instance
instead of a progress callback.

The prepare progress will no longer be displayed without the main
filter progress.
2017-01-26 19:00:03 +00:00
Sam ManziandGitHub 2cb8c2801a Merge pull request #326 from prculley/progen_prog
Progen import fixes and testing
2017-01-26 15:58:29 +11:00
Sam ManziandGitHub f10ce1c368 Merge pull request #333 from sam-m888/9911addcustomcolorstohourglassgraph
9911: Provide an option for custom colors in Hourglass graph
2017-01-26 15:39:23 +11:00
prculley a879144cc7 Add Progen import test files 2017-01-25 17:35:52 -06:00
prculley 86263712a9 Fix Progen import for several issues
- Files not closed
- Note text set to 'list' instead of 'str' types
- Address structure elements set to 'None' instead of ''
- Long text strings losing characters and getting corrupted
2017-01-25 17:35:50 -06:00
prculley d3279c1382 Fix Progen import to use 'Status Bar' progress indicator 2017-01-25 17:35:47 -06:00
prculley 42f2ac04e9 Fix test utility; more console output and make user directories
Console output sows even if an exception occurs
Make user directories if not present
2017-01-25 13:57:53 -06:00
prculley cde65a53a6 Improve Addon management performance 2017-01-25 13:57:52 -06:00
Matti Niemeläandromjerome fdeb604d1f update finnish translation 2017-01-25 14:52:09 +01:00
romjerome 26038164ec 9904: revert ee150c1
TODO: need a solution for recursive iteration and private records
2017-01-25 14:41:54 +01:00
Sam ManziandGitHub 4c010a94e4 Merge pull request #329 from prculley/exportgedcom
Improve progress indications for Gedcom export
2017-01-25 16:07:11 +11:00
romjerome f094346742 update french translation 2017-01-24 17:05:34 +01:00
romjerome ed0be5f17d update translation template 2017-01-24 17:00:44 +01:00
romjerome 963acb56e0 9908: Custom Family Relations not shown in the filter siderbar 2017-01-24 16:58:54 +01:00
romjerome ee150c101a 9904: Errors printing graphical report ancestor tree 2017-01-24 16:55:59 +01:00
Paul CulleyandGitHub 8739412351 Merge branch 'master' into exportgedcom 2017-01-24 07:57:01 -06:00
SNoiraudandNick Hall f03dab0be3 9373 : split the third field in two lines. 2017-01-24 13:37:27 +00:00
SNoiraudandNick Hall 6b38e74ecb 9373: Values not saved and bug in monitoredwidgets 2017-01-24 13:37:27 +00:00
SNoiraudandNick Hall b6bb8ccdcc 9373: Added EditPlaceRef and suppressed a useless tooltip 2017-01-24 13:37:27 +00:00
SNoiraudandNick Hall 593d57dbc0 9373: justifying the three input fields. 2017-01-24 13:37:27 +00:00
SNoiraudandNick Hall eac59d932d 9373: Ability to be able to enter comma separated latitude/longitude pairs 2017-01-24 13:37:27 +00:00
Nick HallandGitHub db81851195 Merge pull request #335 from Nick-Hall/bug9897
9897: Create serialize module
2017-01-22 16:06:04 +00:00
Nick Hall 5068aa1b85 Fix unit test
The bug that caused this to pass previously has now been fixed.
2017-01-22 01:14:14 +00:00
Nick Hall fe1fa8b505 Remove remaining to_struct calls 2017-01-22 00:52:14 +00:00
Nick Hall 41bcfefd67 Remove to_struct and from_struct methods 2017-01-22 00:52:06 +00:00
Nick Hall 4c2464cb49 Create serialize module 2017-01-21 23:09:23 +00:00
Nick Hall c7bbc01b20 Create the schema within a transaction 2017-01-21 20:52:48 +00:00
vantu5z 3b06bf10dd update Russian translation 2017-01-21 09:12:22 -03:00
Sam ManziandGitHub 88e98fcd92 Merge pull request #331 from prculley/bug9886
bug 9886; fix citation tree view quick report right click
2017-01-20 17:33:04 +11:00
Agnès Charrel-BerthillierandSam Manzi 6a51ac55db 9911: Provide an option for custom colors in Hourglass graph 2017-01-20 17:15:29 +11:00
prculley 3ac49dcb2c bug 9886; fix citation tree view quick report right click
Another HandleError issue;  Also, the Quick report that started was
actually the wrong one, due to a typo in the quickview.gpr.py.

I also rediscovered the bug 6352; and its relationship to quickreports.
2017-01-18 09:47:33 -06:00
Paul Franklin f59c7c16bd 9795: remember the last location of windows [media manager] 2017-01-18 06:14:22 -08:00
Paul Franklin 16f56fbbea 9795: remember the last location of windows [bookmarks] 2017-01-18 06:11:40 -08:00
prculley 1b01e9d74e Fix Check&Repair 'Cross table duplicates' Progress parent 2017-01-17 12:14:11 -06:00
prculley ffdef3276c bug 9898: fix Merge Place has wrong label 2017-01-17 11:27:42 -06:00
prculley efcdcd7434 Fix ManagedWindow _present method name (incorrectly named __present) 2017-01-17 10:59:15 -06:00
prculley e7e1976222 Add set_text method to updatecallback to allow progress text changes 2017-01-17 10:33:55 -06:00
prculley 8fa6fad67a Fix Gedcom export to have a more detailed progress indication 2017-01-17 10:31:23 -06:00
prculley a937d151af fix export assistant to show textual progress steps and first step 2017-01-17 08:51:29 -06:00
prculley a860a9d80b Fix export assistant, proper parent for popup progress and dialog 2017-01-17 08:49:21 -06:00
prculley 99b7fc8815 Fix updatecallback to show first progress step 2017-01-17 08:42:22 -06:00
prculleyandNick Hall 04b7888817 change __rebuild_search to use status bar progress 2017-01-16 23:21:05 +00:00
prculleyandNick Hall 2574202a46 add uistate to models 2017-01-16 23:21:05 +00:00
prculleyandNick Hall e24faddabb bug 9876; fix for two progress bars occupy the same space
Moves the popup progress on tree views with filters to the main
window status bar.
2017-01-16 23:21:04 +00:00
prculleyandNick Hall 52846b8e68 bug 9877; fix performace with people tree view and some filters
When using deep relationship filters on the person tree view with a
large tree, the tree redraw can take a long time (hours).  The
DeepRelationshipPathBetween 'prepare' method was getting called for
every person in the preceding filter. And that it also ran through
every person in the db within the prepare method.  Resulting in time
as a square function of number of people.

Change view code so that 'prepare' method is called once, and 'apply'
method is called once with list of handles to scan, rather than both
called once per handle.
2017-01-16 23:14:05 +00:00
Paul Franklin 0c03ec2fc1 tweak UndoHistory to remove redundant show_all() 2017-01-16 09:30:23 -08:00
Paul Franklin 1aeea6a6e8 tweak EditTagList (to be a better ManagedWindow, I know a little more) 2017-01-16 09:28:35 -08:00
Paul Franklin fb8d529e5b tweak TipOfDay to use ManagedWindow "show" instead 2017-01-16 09:24:10 -08:00
Paul Franklin ec9d6e8fa7 tweak DumpGenderStats tool (enable GUI to be closed, neaten CLI output) 2017-01-16 09:22:01 -08:00
prculleyandNick Hall 659329c879 Fixes ManagedWindow for a modal window with another modal elsewhere
During Gramps startup, it is possible to start two modal dialogs;
the 'Family Trees' and the 'Update Addons' (when preferences is set
to check on startup).  Both are modal.
This upgrades the Window manager and ManagedWindow to support this
case.  If this occurs, then the most recent modal window is left
that way, a previous modal window is temporarily downgraded to
non-modal, and the newest window is set 'transient' for the previous
modal window, even if it was not the parent.
This means that there can be only one modal window, and it is always
on top and active.
2017-01-16 15:12:33 +00:00
prculleyandNick Hall 56fa449de8 upgrade Update Addons to ManagedWindow
This change was initiated to correct status bar and popup dialogs
that were coming up in the wrong place under Windows.
Upgrade to Managedwindow allows for size/position config, correct
popup of subordinate dialogs, and better window management in
relation to other dialogs.
The Glade change allows the transient parent function to work.
Note that UpdateAddons remains a modal dialog.
2017-01-16 15:12:33 +00:00
vantu5z 4ad41e9269 update Russian translation 2017-01-16 10:07:55 -03:00
Sam ManziandGitHub af674df82e Merge pull request #327 from sam-m888/WordingOnGrampsViewAddonInstallation
Fix wording for addon restart
2017-01-15 11:27:52 +11:00
Sam Manzi 9aeeae8baf Fix wording for addon restart
to mention [Gramps Views] as the special reason why you need to restart
2017-01-15 11:01:46 +11:00
romjeromeandsystème 5df1612339 9899: typo on string
use generic 'spouse' word
2017-01-14 17:20:26 +01:00
système b79d5c4cfc 9899: fix non-textual value on place name 2017-01-14 14:49:06 +01:00
système c712e5813a 9824 9899: revert changes done for avoiding span and range errors
handling seems incomplete, need a translator-reviewer
2017-01-14 13:47:07 +01:00
système 9ccfd50d93 9824: revert romjerome mistakes (part2) 2017-01-14 13:29:23 +01:00
système 0c4529c0ae 9824: revert romjerome mistakes 2017-01-14 13:25:09 +01:00
système db37a7dbd9 Revert "9899: try to get labels on Family according to status"
This reverts commit dedb5122cb.
2017-01-14 10:23:03 +01:00
système 4f96497e64 Revert "9899: tweak adjustement where one could switch locations for both parents"
This reverts commit 0633930667.
2017-01-14 10:22:37 +01:00
système 8841d13a7e Revert "9899: polish; gen.lib.person arlready called, make test on gender more clear"
This reverts commit fe763b7490.
2017-01-14 10:22:01 +01:00
système b31f6922dd Merge branch 'master' of https://github.com/gramps-project/gramps 2017-01-14 10:21:03 +01:00
romjerome fe763b7490 9899: polish; gen.lib.person arlready called, make test on gender more clear 2017-01-14 10:01:42 +01:00
romjerome 0633930667 9899: tweak adjustement where one could switch locations for both parents
this could be a specific case, so for more security, use hardcoded string
2017-01-14 09:55:59 +01:00
romjerome dedb5122cb 9899: try to get labels on Family according to status 2017-01-14 09:44:17 +01:00
prculley 8f494a683f Remove unused ManagedWindow modal_call method
This was used only once in AddMedia, which has been upgraded to use
the ManagedWindow "modal=" parameter on init instead.
2017-01-12 10:57:57 -06:00
prculley 8f79b0adbb Fix AddMedia to use updated ManagedWindow modal parameter
This was the only Gramps code to use the old ManagedWindow
modal_call method.
2017-01-12 10:54:52 -06:00
Paul Franklin 3ee28584cb tweak sqlite3 info typeout to conform, only output sometimes 2017-01-11 04:22:29 -08:00
Paul Franklin 5633570250 9795: remember the last location of windows [tag dialogs] 2017-01-11 04:13:35 -08:00
Luigi Toscano 3bcea79cc5 Italian translation updates and fixes 2017-01-11 02:11:35 +01:00
prculleyandNick Hall 3b049b5da1 bug 9854; fix Merge Family; Error dialog hidden behind Merge Dialog
While performing a Merge Family that results in an error, the Error
dialog appears as normally initially.

However, if the user switches to another application and back, the
Error dialog can disappear (it is under the Merge dialog in the UI).
The mouse cannot clear this up (although the keyboard 'enter' or
'Esc' keys will be directed to the Error dialog and close everything.
2017-01-10 20:21:38 +00:00
prculleyandNick Hall f46350d595 bug 8128; fix progress meters for transient parent 2017-01-10 15:22:46 +00:00
système 566d057456 Merge branch 'master' of https://github.com/gramps-project/gramps 2017-01-10 08:28:37 +01:00
prculleyandNick Hall 813361179f bug 9875; fix up export dialog to show progress bar
Originally the progress bar and associated text was shown on the
summary page, but it was never seen since it was shown during the
Gtk assistant 'prepare' stage, before the page was shown.
2017-01-09 21:41:54 +00:00
prculleyandNick Hall 1a6db46ffa bug9873; fix Check & Repair for dbapi 2017-01-09 21:35:21 +00:00
prculleyandNick Hall ba7eff6e67 bug 8128; Fix common error/warn dialogs to deal with modal parent
Unmanaged dialogs are often called for errors, warnings, info etc.
On Windows, If called from a modal parent window, they can be a bit
confusing, since the parent window appears to still be active.  This
fix makes the parent window non-modal for the duration of the dialog,
and then returns it to its original state.
2017-01-09 20:59:38 +00:00
prculleyandNick Hall cea4d15d7d bug 9855; fix db undo/redo operation to delay signal emission
Certain multiple commit transactions can leave the db in an inconsistent
state in between commits.  If signals are emitted at each commit, GUI
elements can see the inconsistent state and report errors.  This fix
delays the signal emission until all the commits are complete, presuming
that the db is consistent before and after the complete transaction.
2017-01-09 20:38:32 +00:00
système 0e33ea7a81 Merge branch 'master' of https://github.com/gramps-project/gramps 2017-01-09 20:52:25 +01:00
arnaullvandNick Hall 7e90144db3 Update Catalan translation 2017-01-09 19:28:04 +00:00
Nick Hall b8495e7436 Revert "fix warnings on import order (pylint)"
This reverts commit 86c4301cb9.
2017-01-09 19:02:49 +00:00
Nick Hall 7a7101e71c Rename method missed in previous commit
See 7f24aca813.
2017-01-09 18:41:34 +00:00
romjerome 86c4301cb9 fix warnings on import order (pylint) 2017-01-09 10:14:53 +01:00
systèmeandromjerome 8a8807c670 PR#284 9824: try to fix some remaining errors and warnings raised by pylint 2017-01-09 10:14:53 +01:00
erikdrgm c4c1059c50 updated dutch translation 2017-01-08 20:04:36 +01:00
Luigi Toscano 53542ea3d5 Refresh it.po using the current pot template 2017-01-08 16:25:49 +01:00
système 89699dc847 Merge branch 'master' of https://github.com/gramps-project/gramps 2017-01-07 13:24:53 +01:00
Łukasz Rymarczykandromjerome 5099b421e0 1885 3526: explanation for 'f' and 'm' letters on tests 2017-01-07 10:04:48 +01:00
romjerome f5365202cc 7276: typos 2017-01-07 09:45:24 +01:00
romjerome ec1360076e 7276; fix some punctuation marks for french 2017-01-07 09:41:42 +01:00
Matti Niemeläandromjerome c43c0b72d2 update finnish translation 2017-01-07 09:25:25 +01:00
prculleyandNick Hall b7155b47ed Fix the debug module (profiling code) for current python libraries 2017-01-05 21:31:10 +00:00
Zdeněk Hataš 40fbdae481 czech translation update 2017-01-05 12:57:32 +01:00
romjerome 30a657b69e update french translation 2017-01-05 09:36:09 +01:00
romjerome 43d1f8ce04 update translation strings template 2017-01-05 09:16:50 +01:00
romjerome 2a1234c45c 9243 9824: fix some warnings (pylint)
score from 8.91 to 9.56
2017-01-05 09:15:20 +01:00
système d30c8e21aa Merge branch 'master' of https://github.com/gramps-project/gramps 2017-01-04 15:38:33 +01:00
vantu5z b974750621 update Russian translation 2017-01-04 12:41:14 +03:00
système 7efcd2edf6 Merge branch 'master' of https://github.com/gramps-project/gramps 2017-01-04 08:44:26 +01:00
arnaullvandNick Hall 56280fa418 Update Catalan translations 2017-01-03 21:50:36 +00:00
systèmeandNick Hall e267893470 7004: Only Event and Family Editors are checking if data_has_changed
tidy up and consistency between editors on save()
2017-01-03 21:37:45 +00:00
Nick Hall 49321133e0 9878: Update note text before closing
The object must be updated so that changes can be detected.
2017-01-03 21:25:31 +00:00
Paul Franklin e95fe692ba fix file chooser's deprecation warnings in import dialog 2017-01-03 12:46:31 -08:00
Paul Franklin 1991d194fa 9795: remember the last location of windows [import dialog, part 2] 2017-01-03 12:45:01 -08:00
Paul Franklin d2b200c121 9795: remember the last location of windows [import dialog, part 1] 2017-01-03 12:43:04 -08:00
système 3b16b6be79 9851 2017-01-03 20:16:38 +01:00
Paul Franklin 998c5f4bee 9795: remember the last location of windows [FTM] 2017-01-02 18:55:04 -08:00
Paul Franklin 4f11e97b8d Merge branch 'prculley-bug9872' 2017-01-02 18:34:38 -08:00
Sam ManziandNick Hall 5acf75d696 Feature 9243: Increase relationship.py to show relationships
beyond 20th generation
2017-01-02 19:27:20 +00:00
Paul Franklin 5e10faf779 tweak git_revision (VERSION has no newline, so git_revision shouldn't) 2017-01-02 10:03:17 -08:00
systèmeandNick Hall b774ed8f32 9841: Support tag on EventRef Editor 2017-01-02 15:57:54 +00:00
Zdeněk Hataš f6e854d98d czech translation update 2017-01-02 13:38:59 +01:00
Paul Franklin 5666441e75 Merge branch 'bug9872' of git://github.com/prculley/gramps into prculley-bug9872 2017-01-01 21:49:50 -08:00
Tom Samstag b6f9fbca9a remove gramps.gen.simple.by_date
The function was deprecated in 8b39b80 (2012-11-15) but the deprecated
comment was somehow removed in 3ef1c02 (2013-11-12). The function won't
work anymore due to cmp not existing in python 3.
2017-01-01 11:46:04 -08:00
Paul Franklin e343d55044 fix typo (and test if Travis build still breaks, after PR312) 2017-01-01 09:44:53 -08:00
prculleyandNick Hall b06c101a8a Fix test_exports to ignore changes in Gedcom Copyright year 2017-01-01 17:24:41 +00:00
système 2588e61a96 Happy new year! 2017-01-01 10:40:29 +01:00
Paul Franklin 6d1631dbfe 9862: ancestor tree doesn't use replacements 2016-12-31 17:26:01 -08:00
prculley 7406c6ecf4 bug 9872: fix Windows issue; Book dialogs don't stay on top
They are pushed to background if background window tooltip appears.
Also, The book list display was not popping up above the dialog
(no transient parent).
2016-12-31 14:31:13 -06:00
prculleyandNick Hall 3bca0e8184 Add call to ManagedWindow.close() to dbman
This is an update to "bug 8128; Fix 'Info' popup from Manage Family
Trees' dialog for parent"
2016-12-31 14:29:55 +00:00
Sam ManziandGitHub dde84ed8bc Merge pull request #306 from sam-m888/ChangeConfigKeysForAddons
Change config keys to mention addon
2016-12-30 13:38:26 +11:00
Sam Manzi 043ebaba65 Change config keys to mention addon
Renaming config keys to make their use clearer
2016-12-30 13:23:24 +11:00
Sam ManziandGitHub 08eb715da2 Merge pull request #304 from sam-m888/ChangeWordingAddonRestart
Restart addon message change wording
2016-12-30 08:44:32 +11:00
Sam Manzi af240c9b53 Restart addon message change wording
As not all addons are Views.
2016-12-30 08:21:30 +11:00
prculleyandNick Hall f92903b1f7 bug 9854; Error dialog can become hidden behind merge dialog 2016-12-29 19:35:45 +00:00
prculleyandNick Hall 34d6ddada0 Bug 7928; Make merging people with complex families more friendly
If families are complex, skip the family merge with a warning message
rather than abort the persons merge
2016-12-29 19:35:27 +00:00
prculleyandNick Hall a09d5471cf bug 8128; Fix 'Info' popup from Manage Family Trees' dialog for parent 2016-12-29 19:06:48 +00:00
Sam ManziandGitHub 908201a80d Merge pull request #302 from prculley/bug8128_gw
bug 8128; Fix transient parent for popup 'Gramps Warnings'
2016-12-29 08:14:25 +11:00
prculley 01b7490c8c bug 8128; Fix transient parent for popup 'Gramps Warnings' 2016-12-28 09:06:37 -06:00
Paul FranklinandGitHub 0496756abb Merge pull request #301 from prculley/bug8128_pm
bug 9856; fix popup ProgressMonitor to find a parent for set_transient_for
2016-12-27 11:48:35 -08:00
prculley 1590f8c000 bug 9856; fix popup ProgressMonitor to find a parent for set_transient_for 2016-12-27 10:36:20 -06:00
prculley 1a09304335 bug 9856; fix selected person not updated if changed in people list view 2016-12-26 08:18:32 -06:00
Paul Franklin f762fda80d put the correct FSF address into some (presumably cribbed) modules 2016-12-24 16:25:21 -08:00
Paul Franklin 0b2aab53ee restore the ImportInfo to the new Pro-Gen importer 2016-12-24 16:22:44 -08:00
Paul Franklin ebe56a3f05 save quick backup's folder if backup aborted, if needed 2016-12-24 14:15:52 -08:00
Paul Franklin 0a47474e0e 8868: Make XML backup dialog size persist [part 2] 2016-12-24 14:11:45 -08:00
Paul Franklin 45de935d5e 8868: Make XML backup dialog size persist [part 1] 2016-12-24 14:10:27 -08:00
prculley cf839a195b Fix dialogs for Gtk deprecations 2016-12-24 09:02:57 -06:00
prculley 4498ee32df Fix some Gtk deprecations in Plugin Manager 2016-12-24 09:02:57 -06:00
prculley f25fb1415b Fix the Gobject deprecation (convert to GLib) in interactivesearchbox 2016-12-24 09:02:57 -06:00
prculley dd151a3990 fix some Gtk deprecations in textbufdoc (used by QuickReports etc.) 2016-12-24 09:02:57 -06:00
Alois PoettkerandPaul Franklin 7c471db1c9 6896: Improve Pro-Gen importer 2016-12-23 20:26:54 -08:00
Nick Hall 13b53e35d4 Add window track to merge dialogs 2016-12-23 22:20:41 +00:00
Paul Franklin e931b8a75c typos 2016-12-23 14:12:18 -08:00
Jérôme RapinatandPaul Franklin 85e437d291 7276: translate some currently-untranslated punctuation marks 2016-12-23 12:59:06 -08:00
Paul Franklin f3053b19ca 9795: remember the last location of windows [Reorder] 2016-12-23 12:52:58 -08:00
Josip 3b4ceeb630 8128: GtkDialog mapped without a transient parent
Fix Reorder Relationships dialog
2016-12-23 14:18:39 +01:00
Sam ManziandGitHub 3ce8c4880a Merge pull request #298 from prculley/bug9470
bug 9470; Don't allow selecton of Active or Home person until actually commited
2016-12-23 10:27:45 +11:00
prculleyandNick Hall defcda7981 bug 9235: Shrink size of Break Lock (and other QuestionDialogs) 2016-12-22 19:46:04 +00:00
prculleyandNick Hall 2359633198 bug 8333; fix merge issue with Person Tree View 2016-12-22 18:34:17 +00:00
Paul Franklin 5ad32042c6 move two methods down slightly (to better check a forthcoming change) 2016-12-21 22:24:48 -08:00
Paul Franklin 376f2b0010 enable a simple test for translated datestrings 2016-12-21 15:37:12 -08:00
Paul Franklin 66260871dc give GUI User an optional parent, for when None would otherwise be used 2016-12-21 15:35:45 -08:00
romjerome f75618eb2d 9824: pylint error: map_type not set
was pull request #284
2016-12-21 12:21:43 +01:00
romjerome e5ca4186da 9824: pylint error: no enable_debug, move to LOG.debug
was pull request #284
2016-12-21 12:16:56 +01:00
romjerome 5ecb140094 9824: pylint error: raise Error as GrampsImportError
was pull request #284
2016-12-21 12:14:30 +01:00
romjerome 0309598193 9824: pylint error: missing explicit variable
was pull request #284
2016-12-21 12:11:17 +01:00
romjerome cb38e81a3d 9824: pylint error: missing variable names
was pull request #284
2016-12-21 12:08:15 +01:00
romjerome a1dff4457b 9824: pylint error: explicit os module import
was pull request #284
2016-12-21 12:02:43 +01:00
romjerome 061f5fbb1f 9824: pylint error: LOG variable was not set
was pull request #284
2016-12-21 11:58:22 +01:00
romjerome 1a3f08203c 9824: pylint error: text variable does not exist for debug
was pull request #284
2016-12-21 11:54:27 +01:00
romjerome 6c993242f2 9824: pylint error: fix theme variable for AttributeError
was pull request #284
2016-12-21 11:52:19 +01:00
romjerome a0b2cf1803 9824: pylint error: 'nrchild' variable not set on this section
was pull request #284
2016-12-21 11:50:03 +01:00
romjerome 34aefd9530 9824: pylint error: fix a missing error module
was pull request #284
2016-12-21 11:46:50 +01:00
romjerome 14142ff5e3 9824: pylint errors: explicit import for modules and variables on .gpr.py
was pull request #284
2016-12-21 11:39:23 +01:00
Matti Niemeläandromjerome 1a74ba03b8 update finnish translation 2016-12-21 11:34:03 +01:00
Sam Manzi 91a279e362 9161 Debian package -ignore old changelog 2016-12-21 08:20:35 +11:00
prculleyandNick Hall b71b4e9c7f bug 9844; fix QuickReports for Cairo crash when no objects found 2016-12-20 19:36:49 +00:00
prculleyandNick Hall 55edefd4b8 bug 9842; fix lineage quickreport when started from person with no parent 2016-12-20 19:31:30 +00:00
prculleyandNick Hall ce884b6578 bug 9478; fix quick search exception when nothing in searched list 2016-12-20 19:10:57 +00:00
prculleyandNick Hall 90b8145693 bug 9831: Fix HandleError when using finddupes tool to merge 2016-12-20 17:47:53 +00:00
Paul Franklin dc320aab8c shoehorn in some missing (somehow) datestrings in el.po 2016-12-18 19:57:04 -08:00
Paul Franklin 6a6fe9b48d 7276: translate some currently-untranslated punctuation marks 2016-12-18 14:20:36 -08:00
prculleyandNick Hall 1e8ab3ec69 bug 9286; fix styledtext editing of LINK with URL as Visible element 2016-12-18 17:56:55 +00:00
prculleyandNick Hall a5ed1086d8 bug 9285; fix detection of URLs in Styled text editor 2016-12-18 17:42:04 +00:00
Paul Franklin fb6ed2ab53 narrow GrampsPreferences if possible (e.g. in Greek it is 1138) 2016-12-18 00:13:51 -08:00
Paul Franklin cb27d546e9 9612: Problem adding parents [with Latin names] 2016-12-17 18:30:55 -08:00
Paul Franklin 1742d44d35 center errorview dialog, and shorten it too 2016-12-17 18:27:57 -08:00
prculley 9bf5144e70 bug 9470; Don't allow selecton of Active or Home person until actually commited 2016-12-17 17:03:57 -06:00
prculleyandNick Hall 9c92bb8551 bug 8510 fix for special characters in Family Tree names 2016-12-17 19:30:44 +00:00
Paul Franklin 341d48bd40 9795: remember the last location of windows [partial: some tools] 2016-12-17 10:34:06 -08:00
Zdeněk Hataš 2577367f01 czech translation update 2016-12-17 15:39:44 +01:00
Nick Hall 76cb80f17f Remove --databases command line option 2016-12-16 22:18:33 +00:00
Nick Hall 9a53fae5a0 Remove backup summary and auto-load
Automatic backups are now saved to a user-defined directory.
2016-12-16 22:00:11 +00:00
vantu5z 33169fd05f update Russian translation 2016-12-16 13:42:15 +03:00
Paul Franklin 1af4e89094 new gramps.pot translation template for master 2016-12-15 11:08:41 -08:00
romjerome ab2793476f fix a missing import 2016-12-15 16:00:07 +01:00
romjerome f372f5b813 Tag editor: Tweak improvement on buttons order 2016-12-15 15:52:12 +01:00
SNoiraud 09cad05e05 9340: The configparser is assuming the wrong encoding. 2016-12-15 09:32:02 +01:00
Paul Franklin 083a2a721e 9795: remember the last location of windows [partial: three more] 2016-12-14 22:05:04 -08:00
Leonhaeuser beb3962f52 update German translation and fix missing line feed 2016-12-14 22:08:36 +01:00
erikdrgm f17379cd16 updated Dutch translation 2016-12-14 14:51:38 +01:00
erikdrgm a27e49cf0e updated Dutch translation 2016-12-14 14:45:09 +01:00
SNoiraud 291c29ad04 9563: Sorting in family tab of narrated web report 2016-12-14 10:38:57 +01:00
Leonhaeuser e9acf39cf2 fix for 0009696 and German translation update 2016-12-14 00:46:56 +01:00
Nick Hall 93f59af9d8 Tidy up export assistant multiple inheritance 2016-12-13 23:26:13 +00:00
Sam Manzi f01d469849 9801 Silence remaining PyGIWarning 2016-12-14 07:48:45 +11:00
Paul Franklin 1b6d84353c 9795: remember the last location of windows [export assistant] 2016-12-13 11:40:00 -08:00
SNoiraud 03128a0728 9563: Sorting of relationships in family tab of narrated web report 2016-12-13 14:20:55 +01:00
SNoiraud 23213e590b NarrativeWeb: Reduce the Report options window. 2016-12-13 09:50:36 +01:00
Paul Franklin af7c09d8ae 9795: remember the last location of windows [partial: two more] 2016-12-12 20:02:36 -08:00
Paul Franklin 5929f2066e tweaks to saving config keys (save keys without default, pylint, etc.) 2016-12-12 19:59:45 -08:00
Zdeněk Hataš 48bab7bed1 czech translation update 2016-12-12 14:49:24 +01:00
erikdrgm a9ce126ed4 update Dutch translation121216 2016-12-12 09:55:04 +01:00
Paul Franklin 251c4acde2 9795: remember the last location of windows [partial: verify] 2016-12-11 22:58:54 -08:00
Paul Franklin 3406450451 9795: remember the last location of windows [partial: eight more] 2016-12-10 18:27:11 -08:00
Paul Franklin f3dc114476 new gramps.pot translation template for master 2016-12-10 10:21:46 -08:00
Paul Franklin cdf6e0e3a3 enable custom filters in reports to select the center person 2016-12-10 10:19:28 -08:00
Lajos Nemesériandromjerome 90a513effa update Hungarian translation 2016-12-10 11:00:15 +01:00
Paul Franklin 2087f807f3 make report dialog height less than 600, for smaller displays [RR] 2016-12-09 19:51:43 -08:00
Paul Franklin 9b5ef6d069 make report dialog height less than 600, for smaller displays [PR] 2016-12-09 19:50:13 -08:00
Paul Franklin f2229db819 make report dialog height less than 600, for smaller displays [KR] 2016-12-09 19:49:52 -08:00
Paul Franklin f072dd889e make report dialog height less than 600, for smaller displays [FGR] 2016-12-09 19:49:32 -08:00
Paul Franklin 36380651e4 make report dialog height less than 600, for smaller displays [DAR] 2016-12-09 19:49:03 -08:00
Paul Franklin b848f1cd2a make report dialog height less than 600, for smaller displays [DR] 2016-12-09 19:48:34 -08:00
Paul Franklin 9ccc149161 make report dialog height less than 600, for smaller displays [BAR] 2016-12-09 19:47:55 -08:00
Paul Franklin 2c9bad6108 make report dialog height less than 600, for smaller displays [SC] 2016-12-09 19:47:26 -08:00
Paul Franklin 55fa8f8d86 make report dialog height less than 600, for smaller displays [FC] 2016-12-09 19:46:53 -08:00
Paul Franklin 289d28c22b make report dialog height less than 600, for smaller displays [DT] 2016-12-09 19:43:50 -08:00
Sam Manzi 35b79acacc Feature#1682: Enable copying Soundex result 2016-12-10 14:32:37 +11:00
Nick Hall 5621ade2e4 9799: Use latest valid date rather than today
This is useful for historic places when an event date is not
available.
2016-12-09 19:25:14 +00:00
Nick Hall 772265c3ef 9813: Modify endonym handling in place displayer
If no language code is matched, the default name is now the first
in the list, rather than a name with no language code.
2016-12-09 19:07:04 +00:00
Nick Hall 176fcae6ad 9737: Fix house number concatenation 2016-12-09 18:57:06 +00:00
vantu5z cde4c4ebf5 update Russian translation 2016-12-09 15:02:38 +03:00
Nick Hall 7f24aca813 Simplify _create_secondary_columns method
Now only creates new columns.
Removed update_secondary_values_table method.
2016-12-08 23:09:00 +00:00
Nick Hall c8998cc81c Rename rebuild_secondary_fields to _create_secondary_columns 2016-12-08 23:09:00 +00:00
Paul Franklin ca105fb73a 9795: remember the last location of windows [partial: the editrefs] 2016-12-08 14:28:42 -08:00
Nick Hall 4e812c738b Remove a couple more unused methods 2016-12-08 22:05:05 +00:00
Nick Hall d8796d35fb Remove methods that create secondary indexes
All indexes are created in the _create_schema method.
2016-12-08 21:49:52 +00:00
Nick Hall 83e5bd6be3 Remove another unnecessary version file 2016-12-08 21:27:39 +00:00
Paul Franklin 50bb8ffbbc 9795: remember the last location of windows [partial: the selectors] 2016-12-08 12:44:08 -08:00
Nick Hall 290fd6ec43 Remove unused method 2016-12-08 19:03:39 +00:00
Nick Hall c358d5c3e1 Remove creation of unnecessary version files
The BSDDB version is not relevant for DBAPI databases.  The python
version will always be 3 and the pickle upgrade "YES".
2016-12-08 18:59:42 +00:00
Nick Hall f321d68db1 Remove MySQL backend 2016-12-08 17:32:09 +00:00
Nick Hall 4a30d9e4b7 Make update_backlinks method protected 2016-12-08 15:16:26 +00:00
Nick Hall 013617dafb Rename update_schema to _create_schema 2016-12-08 15:06:06 +00:00
Matti Niemeläandromjerome 67c3d4a77a update finnish translation 2016-12-08 10:38:30 +01:00
Espen Berg bd7cc813aa Corrected some language typos in Norwegian version of relationship calculator 2016-12-07 21:53:17 +01:00
Paul Franklin 6264461a54 reduce default width of preferences dialog (after [5dd88052]) 2016-12-07 12:12:21 -08:00
Paul Franklin 52ccc26753 give statusbar "warnings" dialog a less-ambiguous name 2016-12-07 11:32:07 -08:00
Paul Franklin 16f229c644 9795: remember the last location of windows [partial: merge dialogs] 2016-12-07 11:30:38 -08:00
Nick Hall 4e2ab54fb9 Remove unused restore method 2016-12-07 19:29:53 +00:00
Nick Hall 6098ccd468 Remove low-level bsddb backup code 2016-12-07 19:29:24 +00:00
Nick Hall 5dd88052cf Reduce minimum width of preferences dialog 2016-12-07 19:13:59 +00:00
Nick Hall 593f5a8f2b Add new backup preferences
Allow user to specify a backup directory.
Add option to backup on exit.
Add option to autobackup at regular intervals.
2016-12-07 17:44:02 +00:00
Paul Franklin eceeddb1e4 make "quick backup" dialog slightly wider (workaround for 8868) 2016-12-06 19:36:23 -08:00
Paul Franklin a3925313ad 9795: remember the last location of windows [ViewConfigureDialog] 2016-12-06 18:59:23 -08:00
Paul Franklin 413da833ca 9795: remember the last location of windows [partial: main editors] 2016-12-06 15:22:09 -08:00
Paul Franklin bbb8b5161d 9795: remember the last location of windows [partial: filter dialogs] 2016-12-06 11:59:04 -08:00
Paul Franklin d407c2fb6b trap FilterError when creating and testing a new filter 2016-12-06 11:57:16 -08:00
Nick Hall 2c454268a1 Remove drop_tables and reload methods
These methods are not used and we would not normally want to
drop all tables in a database.
2016-12-06 18:07:42 +00:00
Nick Hall 467f779230 Fix import after removal of is_empty method 2016-12-06 18:06:59 +00:00
Nick Hall 61da801fa1 Remove is_empty database method
The existing get_total method can be used instead.
2016-12-06 17:48:34 +00:00
Nick Hall 3e69fa5cbe Fix get_total method and add unit tests 2016-12-06 17:32:12 +00:00
Nick Hall 35b7495438 9541: Make metadata methods protected 2016-12-06 17:10:07 +00:00
vantu5z 92618fcc6d update Russian translation 2016-12-06 15:04:27 +03:00
erikdrgm 238a1c5c12 Dutch translation61216 2016-12-06 10:11:48 +01:00
Paul Franklin ff6be8b3d6 9795: remember the last location of windows [partial] 2016-12-05 18:50:13 -08:00
SNoiraud 66a3dd6050 7309: GtkDialog mapped without a transient parent 2016-12-06 03:02:43 +01:00
Sam ManziandGitHub 6ab5a22292 Merge pull request #279 from prculley/bug9768
fix for bugs 9768 and 9778, nonetype error when merging events or families
2016-12-06 11:39:38 +11:00
Paul CulleyandSam Manzi e584704e7b Update Merge tests to actually run
So this was a lot of work...

Updated to use lxml, steep learning curve for someone who never examined XML before...

The merge test code needed some updates because it was last used with an older version of the Gramps XML.

Found another bug in the mergefamilyquery code when test started running; another nonetype issue.

Found another bug in the mergepersonquery code when test started running; another nonetype issue.

Couldn't get the subprocess stuff to work right, so changed code to just call Gramps with capture, similar to export_tests. This in turn required that importxml and exportxml be slightly changed to support StringIO redirection of stdin and stdout.

And test_util needed a change to allow stdout to accept an unencoded stream, so I added an option to use BytesIO for this test as well.

Added some code to save input, result, and expected data to files in Gramps temp directory for debugging whenever an error occurred. Easier to use my editor in diff mode than look at the outputs.
2016-12-06 11:17:54 +11:00
Paul CulleyandSam Manzi 983d787322 Change travis.yml to provide lxml dependencies 2016-12-06 11:00:45 +11:00
Nick Hall 9d77418b30 9541: Make backend methods protected 2016-12-05 19:41:12 +00:00
SNoiraud c835c6f87c 7309: Jump to Gramps ID functionality doesn't work for relview 2016-12-05 16:20:10 +01:00
SNoiraud 55661056e2 7309: Jump to Gramps ID functionality added to pedigree 2016-12-05 16:01:27 +01:00
SNoiraud 6188812b41 7309 : Remove trailing space. 2016-12-05 14:30:47 +01:00
SNoiraud 8c7b0f8585 7309: Jump to Gramps ID functionality added to *fanchart* 2016-12-05 14:22:56 +01:00
Zdeněk Hataš 3646f2a86c czech translation update 2016-12-05 13:23:01 +01:00
SNoiraud bc32d2fd76 7309: Jump to Gramps ID functionality doesn't work 2016-12-05 11:03:33 +01:00
romjerome 13c5d75bc1 update french translation 2016-12-05 09:51:55 +01:00
romjerome 1fda1e2a92 typo on french translation 2016-12-05 09:49:19 +01:00
romjerome bfb99f17ad 9276: update translation strings template 2016-12-05 09:48:21 +01:00
romjerome 8aeebcdfd2 9276: ability to search alternate place names when selecting place 2016-12-05 09:47:04 +01:00
vantu5z 2fc4bae826 update Russian translation 2016-12-05 08:08:49 +03:00
Paul Franklin 9a40306bd1 9795: remember the last location of windows [partial: EditTagList] 2016-12-04 17:11:31 -08:00
Paul Franklin 13064ef627 refine 6495240859 2016-12-04 16:25:53 -08:00
Paul Franklin 6495240859 set up a window's initial configuration easier (size, etc.; see 9795) 2016-12-04 13:27:25 -08:00
Josip e75a45748f fix missing imports
part of bug 9820
NameError: name 'DbException' is not defined
2016-12-04 18:30:36 +01:00
Espen Berg 8159e95389 Some Norwegian bokmål translation for master copy. Still some work remaining... 2016-12-04 10:30:59 +01:00
Sam ManziandGitHub 98ed617a5d Merge pull request #278 from prculley/bug9811
bug 9811; Fix for Relative media path incorrectly calculated for Windows
2016-12-04 16:52:01 +11:00
Paul Franklin 74aba1f6b4 5357: Clipboard window doesn't remember its previous position 2016-12-03 16:36:31 -08:00
Espen Berg cba583a486 Somewhat revised Norwegian language file. Still some work remaining 2016-12-04 00:41:05 +01:00
Paul Franklin 26e5f7aa9c 9789: Book Report only works with the default values (master "4ffc5e3") 2016-12-03 14:21:41 -08:00
Nick Hall 5f928d5379 Add missing base methods 2016-12-03 22:17:18 +00:00
Nick Hall db3d7a3d0d Fix import 2016-12-03 21:44:55 +00:00
Nick Hall 9a6c074888 Tidy up code 2016-12-03 18:00:12 +00:00
romjerome 9ae653986f Update french translation 2016-12-03 11:36:00 +01:00
romjerome 3842b0e760 update translation strings template 2016-12-03 11:20:07 +01:00
romjerome 73267600bd -update -m 2016-12-03 11:16:13 +01:00
romjerome eb8c17cfa5 9812: 'Check and Repair' tool ignores some objects with tag support 2016-12-03 10:59:33 +01:00
erikdrgm ff1f2fe33b Dutch translation 2016-12-02 20:42:30 +01:00
prculley 72bcfc5cd6 bugs 9768 and 9778, nonetype error when merging events or families 2016-12-01 11:24:24 -06:00
prculley e94696ecf0 bug 9811; Relative media path incorrectly calculated for Windows 2016-12-01 10:40:06 -06:00
Nick Hall 27c2b0c81d 9748: Use COLLATE clause rather than locale specific columns 2016-11-30 23:13:12 +00:00
Sam ManziandGitHub b556b29b25 Merge pull request #275 from prculley/expdialog
8250 and 9736: avoid all other operations during export and fixes for export popup windows hidden.
2016-12-01 09:56:09 +11:00
Sam Manzi 0a11cbf8b5 Renable user_test on travis after 2365a72d98 fix 2016-12-01 08:51:01 +11:00
Nick Hall a4a3c55c09 Update comments 2016-11-30 15:57:23 +00:00
Nick Hall 2365a72d98 Fix User class unit tests 2016-11-30 15:51:03 +00:00
vantu5z cf58de59c1 update Russian translation 2016-11-30 13:32:00 +03:00
Nick Hall 1039156019 9508: Fix place tree cursor 2016-11-29 23:26:50 +00:00
Nick Hall 11942d8975 Add database unit tests for sorted handles 2016-11-29 22:30:11 +00:00
Nick Hall 98950a89a3 Create new module for DbBookmarks 2016-11-29 19:34:57 +00:00
Nick Hall 3bf40f9921 Remove trailing semi-colon from SQL statements 2016-11-29 16:41:47 +00:00
Nick Hall 634691516c Arrange database methods into a more logical order 2016-11-29 16:21:21 +00:00
romjerome de177975a0 9815: Fix clear map action on Geography 2016-11-29 10:32:17 +01:00
Paul Franklin e3d732a31e 9789: Book Report only works with the default values (master "4ffc5e3") 2016-11-28 15:24:21 -08:00
Nick Hall 13acd73c9e Remove unused database method 2016-11-28 22:58:41 +00:00
Nick Hall 5826307b63 Remove trailing whitespace 2016-11-28 22:16:49 +00:00
Nick Hall ee4e652cac 9742: Remove table map classes
The Table, Map, MetaCursor and DbGenericTxn classes are no
longer used.
2016-11-28 21:45:27 +00:00
Nick Hall baff7cddb0 9810: Fix undo/redo reference updates
Also rewrite to avoid using table maps.
2016-11-28 21:18:11 +00:00
Paul Franklin e1dca2bfaa 9789: Book Report only works with the default values (master "4ffc5e3") 2016-11-26 15:23:01 -08:00
Bastien JacquetandNick Hall fec5d532d1 Feature: Gep-030 FanChart2Way
...New FanChart consisting of both ascendants and descendants.

It can be checked-out there :
https://sourceforge.net/u/bubblegum00/gramps/ci/geps/gep-030-FanChart2Way/~/tree/

<snip>

I find it quite handy, so please let me know if you have any comments or suggestions.

NB: I heavily cleaned up the FanChart code on my way.

Regards,

Bastien Jacquet

https://sourceforge.net/p/gramps/mailman/message/32908110/
........................................................
Refactor fanchart for further modification

Fix radial text pos_start radian alignment

Simplify father's and mother's details getter

Rename draw_gradient to draw_gradient_legend

refactor prepare_background_box

Add option not to flip names

Add a display_format(self, person, num) function as proposed by Benny Malengier on 2012-12-13
It just returns name_display.name_formats[num][_F_FN](person.get_primary_name())

Add option to show the name on two lines

Allow for variable radius depending on generation

Switch to WORD_CHAR wrapping of name (ie word, and char if 0-length word)

Move rescaling tentative inside wrap_truncate_layout

Fix person_under_cursor bugs

Refactor root angle computation

Refactor code positionning the fan

Refactor personpos_at_angle

move implementation of person_under_cursor outside of FanChartBaseWidget class

Change draw_person to take angles in radians

Use same structure for innerring as for outerring

Uses cursor_to_polar and cursor_on_tranlation_dot

Slightly change person_under_cursor logic to return an "address" in the fan

Uses radian_in_bounds to compare angles modulo 2 PI

Fixup test on cursor over inner ring

Fix Center size for FanchartDesc

Fixup fanchart check up to last generation

Give same signature to draw_person

Refactor the common code of self.draw_person in a single function in Base class

Fix center box comment

Refactoring inside celladdress

Remove manual central box drawing since done with draw_person

Fixup draw_person color for duplicates

Use draw_person for central person too

Make __compute_angle and __rec_fill_data public for use in FanChart2Way

Add 2Way View

Rewrite create_map_rect_to_sector to allow bottom-outside-oriented text-arc

Allow to automatically right upside-up bottom arc-text

Correct icons for Fanchart2Way

Small code refactoring

Refactor code of fanchartdesc to use self.rootangle_rad

Rename change_slice to toggle_cell_state

Fanchart2Way code formating and changes

Small refactoring of fanchartdesc innerring fill data

Remove the name from the local temporary data structure

Remove the name from the local temporary data structure (in Fanchart2Way)

Change background gradient to follow the user-selected gradient colors

rename parentsroot to innerring

Some renaming for clearer code

Show last generation of partners in descendant fanchart

Show last partner in Fanchart2Way

Fanchart2Way : Add option to disable gradient on the background

Fixup flipupsidedownname parameter for gramplet usage of fancharts

Fixup twolinename parameter for gramplet usage of fancharts

Add FanChart2Way in available gramplets

Tentative fix for last view on Fanchart2Way

Show step-sibling in Fancharts context-menu

Fix overestimation of descendant halfdist

(SM) Trailing White spaces removed

(SM) Fix config box Table Grid

(SM) Move Icons gramps-fanchart2way to new location

(SM) Add Copyright for Bastien Jacquet

(SM) Fix BSDDB AttributeError NoneType object has no attr

(SM) Update patch to account for bug 9771; fix missing right-click menu items

(Nick Hall/eno93) Fix set_text method takes the length of the utf-8, not the length of the unicode as the second parameter ((Gramps.py:3697): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text())
2016-11-26 18:00:08 +00:00
romjerome 3d854ba944 9801: recommend 'gir1.2-goocanvas-2.0' on debian package 2016-11-26 13:00:21 +01:00
romjerome 79cb66b0f1 8555: Database repair tool always modify all source objects 2016-11-26 12:56:43 +01:00
Tom HughesandNick Hall da018c1842 Re-enable selection in MultiTreeView on a drag-end event
In 201f4a5e51 we made grab_broken
re-enable selection because GTK 3.18 and later no longer send a
fake button release event.

The sending of grab broken is an implementation detail of DnD
on X based systems however, and at least some GTK backends do
not generate this, wayland being one example.

So we now use drag-end instead which is always sent to the source
when a DnD operation completes.
2016-11-25 16:45:43 +00:00
Sam ManziandGitHub d8077a8169 Merge pull request #274 from SNoiraud/9378
9378: Quick Backup: remember Media (include/exclude) setting
2016-11-25 17:31:09 +11:00
Nick Hall 74b87e04eb Restore import_from_filename function 2016-11-24 19:45:19 +00:00
Nick Hall cb738e88ad Remove unused function 2016-11-24 18:40:28 +00:00
Nick Hall 382987f366 Create module for database utilities 2016-11-24 17:57:18 +00:00
Matti Niemeläandromjerome 5358e8dd93 Update finnish translation 2016-11-24 08:24:15 +01:00
romjerome 18b00846fe typo on french translation 2016-11-24 08:16:37 +01:00
Nick Hall 635db88800 9534: Exclude places outside valid date ranges 2016-11-22 18:25:20 +00:00
Paul Franklin 0f9c3012be enable book selector dialog to remember its size 2016-11-21 13:11:26 -08:00
Paul Franklin 5932addfb5 9789: Book Report only works with the default values (master "4ffc5e3") 2016-11-21 13:09:57 -08:00
Zdeněk Hataš 882c37afc1 czech translation update 2016-11-21 12:17:15 +01:00
JosipandGitHub a3960c8515 Merge pull request #272 from prculley/bug9787
bug 9787; fix right-click menus crash caused by PR268
2016-11-20 22:52:48 +01:00
prculley 3fe7d20799 Fix trailing whitespace again 2016-11-17 10:28:40 -06:00
romjerome 4f30f09fab Update french translation 2016-11-17 10:11:47 +01:00
Lajos Nemesériandromjerome 43106eb47f Update Hungarian translation 2016-11-17 10:06:35 +01:00
romjerome 4653b35cb3 Update template 2016-11-17 10:04:18 +01:00
prculley 894ce3aca5 Fix trailing whitespace and remove old code comment 2016-11-16 10:26:02 -06:00
SNoiraudandprculley f157148414 8250 and 9736: avoid all other operations during export and fixes for export popup windows hidden. 2016-11-16 09:18:27 -06:00
SNoiraud 6675cce1f2 9378: Quick Backup: remember Media (include/exclude) setting 2016-11-16 12:32:01 +01:00
vantu5z 4a49287292 update russian translation 2016-11-16 11:55:32 +03:00
romjeromeandGitHub e0cb56ee93 Merge pull request #273 from prculley/galxlt
Fix translation confusion on 'View' noun/verb
2016-11-16 08:53:07 +01:00
romjeromeandGitHub 0743c19449 Merge pull request #271 from paulohpmoraes/master
Update and corrections to brazilian portuguese translation.
2016-11-16 08:52:32 +01:00
prculley 5ff0b3f977 Fix translation confusion on 'View' noun/verb 2016-11-15 09:38:39 -06:00
SNoiraud 8eedb37772 Geography: Add kmls for the geography places view. 2016-11-15 13:09:12 +01:00
prculley 15ca5e6d4c remove excess space in front of right-click menus in embedded lists 2016-11-14 09:12:11 -06:00
prculley bd142c0744 bug 9787; fix right-click menus crash caused by PR268 2016-11-14 08:46:38 -06:00
Paulo Henrique MoraesandGitHub b99c9f41cc Update and corrections. 2016-11-14 08:54:04 -02:00
Josip 4ffc5e3af4 add plugins/db/dbapi/settings.ini to setup 2016-11-12 15:01:15 +01:00
Josip bb919efec7 Support for Windows Python3 pythonw.exe 2016-11-12 14:05:49 +01:00
Sam ManziandGitHub 905717f4f1 Merge pull request #269 from prculley/nameedit
fix name_displayer.add_name_format so it won't create duplicates
2016-11-12 12:57:27 +11:00
Sam ManziandGitHub f4bc6c3384 Merge pull request #268 from prculley/bug9771
bug 9771; fix missing right-click menu items on gallerytab
2016-11-12 12:18:17 +11:00
Sam ManziandGitHub 67dfc55a0b Merge pull request #266 from prculley/docstr
update db/base.py with better docstring, new methods etc.
2016-11-12 11:43:22 +11:00
prculley def6b3fd07 #---- lines back to normal 2016-11-11 18:19:08 -06:00
prculley d4cb0c3d7c pylint cleanup 2016-11-11 18:19:08 -06:00
prculley 5f794c0570 update db/base.py with better docstring, new methods etc. 2016-11-11 18:19:08 -06:00
Sam ManziandGitHub f38ce3f3f6 Merge pull request #264 from prculley/bug9765
bug 9765; fix citation tree view for HandleError exceptions
2016-11-12 10:13:26 +11:00
prculley 4120c5a1bc fix name_displayer.add_name_format so it won't create duplicates 2016-11-09 13:42:12 -06:00
prculley 00aa25258e bug 9771; Remove icons from various right-click and other menus 2016-11-08 09:43:36 -06:00
Sam ManziandGitHub 676ff5601c Merge pull request #263 from prculley/bug9767
Bug9767 Fix LDS editor for 'Family' related issues
2016-11-05 14:20:07 +11:00
Sam ManziandGitHub 7ceb8ab57a Merge pull request #262 from prculley/bug8887
Bug 8887 Add PEDI and _FREL/_MREL Gedcom Tag Export support
2016-11-05 14:11:58 +11:00
Sam ManziandGitHub f69883a586 Merge pull request #259 from prculley/bug9522
bug 9522; fix fault when viewing family events with event gramplet
2016-11-05 14:03:41 +11:00
Sam ManziandPaul Franklin b82ec171a2 enable a ManagedWindow to remember its position 2016-11-03 19:06:28 -07:00
Paul Franklin 105f9fb227 enable relationship calculator tool to remember its size 2016-11-03 05:31:50 -07:00
Paul Franklin 216f9a93bf enable 'Select a media object' dialog to remember its size 2016-11-03 05:29:52 -07:00
Zdeněk Hataš bb9614282c czech translation update
fixed end characters and typo
2016-11-03 13:10:06 +01:00
Paul Franklin 8cd4a75482 enable merge dialogs to remember their size 2016-11-02 10:15:03 -07:00
prculley 4e80f42425 Remove Icon setup, since this is covered in glade file via another commit 2016-11-02 11:29:13 -05:00
prculley e851211460 bug9787 Fix LDS editor for 'Family' related issues 2016-11-02 11:29:13 -05:00
Nick Hall 22c1bd4e1c Fix unit test 2016-11-02 15:56:32 +00:00
Nick Hall dd0eedc772 9767: Fix icon and tooltip in LDS editor
The icon on the family selection button was removed by mistake in
commit 75009f0.
2016-11-01 18:45:18 +00:00
Nick Hall 5f77d0eed7 Remove redundant imports 2016-11-01 18:24:16 +00:00
Nick Hall 473d3aab48 Remove unused method
Also removes an import from outside the gen module.
2016-11-01 17:57:33 +00:00
Nick Hall 8d7c1945f1 Remove old django code 2016-11-01 17:41:51 +00:00
Sam ManziandGitHub e4551a483c Merge pull request #256 from prculley/codecov
Improve test coverage in the Gedcom importer
2016-10-31 11:45:47 +11:00
prculley 00b2bff6d0 bug 9765; fix citation tree view for HandleError exceptions 2016-10-30 13:50:52 -05:00
prculley 9ed969eea1 Fix Mock localtime to return same val in Linux & Windows 2016-10-29 16:59:42 -05:00
prculley 0fb91b860f Improve test coverage in the Gedcom importer 2016-10-29 16:59:42 -05:00
prculley d21ead1c8d Bug 8887 Add PEDI and _FREL/_MREL Gedcom Tag Export support 2016-10-29 16:50:22 -05:00
Nick Hall 19201eed67 Improve efficiency of get_tag_from_name method 2016-10-29 22:18:07 +01:00
Nick Hall ab4e147021 Add more database unit tests 2016-10-29 22:12:28 +01:00
Nick Hall 5bbce108fd Tidy up some SQL 2016-10-28 23:31:18 +01:00
Nick Hall ad49598b51 9744: Tidy up _get_raw_*_from_id_data methods 2016-10-28 22:47:10 +01:00
Nick Hall 9fc316abdf 9744: Tidy up iterators
Remove order_by parameter.
Add unit tests.
2016-10-28 21:43:00 +01:00
Nick Hall 1905d417be Remove unused method 2016-10-28 17:57:41 +01:00
Nick Hall 89cba484c0 9744: Tidy up commit_* methods 2016-10-28 17:07:27 +01:00
Sam Manzi 9f4cb97512 Fixes for install after removal of old LICENSE 2016-10-28 08:08:40 +11:00
MJBMZandNick Hall d333f2eee7 9082: Show more place types in family lines graph 2016-10-27 17:36:09 +01:00
MJBMZandNick Hall aab0984dfb Fix indent 2016-10-27 17:26:55 +01:00
Nick Hall aaf4bee03d Remove old LICENSE file
This file contained the GFDL relating to the Gramps documentation,
which is no longer distributed with the source code. The GPL2
licence can be found in the COPYING file.
2016-10-27 17:02:52 +01:00
Sam ManziandGitHub 63b15de40a Merge pull request #252 from prculley/bug9755
bug 9755, fix duplicated Gramps IDs on Gedcom import
2016-10-27 19:30:21 +11:00
Sam ManziandGitHub e6088271bd Merge pull request #251 from prculley/dupid
Update Tool 'Check & Repair' and 'TestCaseGenerator' to detect and repair duplicate Gramps IDs
2016-10-27 19:20:58 +11:00
Nick Hall ddce9b0138 Add more database unit tests 2016-10-25 23:01:34 +01:00
Nick Hall 73d87e59e3 Remove build_surname_list and save_surname_list from public API 2016-10-25 22:18:48 +01:00
Nick Hall efa910e5b9 Remove unused database method 2016-10-25 22:09:19 +01:00
Nick Hall f036206961 9742: Rewrite cursors to avoid using table maps 2016-10-25 21:29:59 +01:00
prculley 2bbc8702a7 bug 9522; fix fault when viewing family events with event gramplet 2016-10-25 10:39:51 -05:00
vantu5z 2947e84501 update russian translation 2016-10-24 09:07:41 +03:00
Nick Hall 5fcb3ef815 Add some database unit tests 2016-10-23 19:40:14 +01:00
Paul CulleyandGitHub 5e0198542f Merge pull request #249 from prculley/bug9694
bug 9694, fix Gedcom import with no VERSion (very old Gedcom) crash
2016-10-23 10:14:57 -05:00
Paul CulleyandGitHub 00dd91340b Merge pull request #248 from prculley/bug8993
bug 8993; fix Gedcom import in some alternate languages; improper date parsing
2016-10-23 10:14:03 -05:00
Paul CulleyandGitHub 6923c53871 Merge pull request #247 from prculley/vcard
bug 9458, fix Import Vcard can create multiple surnames with all selected as 'Primary'
2016-10-23 10:12:53 -05:00
romjerome 691b70ccb3 Update french translation 2016-10-23 16:24:21 +02:00
Matti Niemeläandromjerome 831b4f731b Update finnish translation, template generated via './genpot.sh' 2016-10-23 15:58:06 +02:00
romjerome 69456b34e5 9328: enable debug flag on 'xgettext' for python files 2016-10-23 15:52:23 +02:00
romjerome 1fd76160ef Fix format string (order, RTL, LTR)
9759: update template
2016-10-23 15:48:56 +02:00
SNoiraud d5c4a71ee2 8250 and 9736 : remove patchs. need to found another solution. 2016-10-21 23:05:10 +02:00
Nick Hall ce59a8a5c9 9744: Tidy up get_number_of_* methods 2016-10-19 22:18:25 +01:00
SNoiraud 900624193f 9757: [Geography] update map tiles on demand 2016-10-19 18:51:27 +02:00
prculley 8a385af882 bug 9755, fix duplicated Gramps IDs on Gedcom import 2016-10-19 10:09:30 -05:00
Nick Hall 534c5e20fd Remove redundant id maps 2016-10-18 23:06:59 +01:00
Nick Hall be3541756f Modify to avoid using id maps 2016-10-18 22:51:16 +01:00
vantu5z 49a547af5e update russian translation 2016-10-18 09:08:33 +03:00
Nick Hall 662c5c8866 Modify to avoid using table maps 2016-10-17 23:25:33 +01:00
Nick Hall 1494b5d28e Use KEY_TO_NAME_MAP to get table names 2016-10-17 21:54:31 +01:00
Nick Hall c1c616e0f3 9742: Avoid using table maps in commit methods 2016-10-17 21:51:15 +01:00
Nick Hall d1e3280821 Remove redundant table maps 2016-10-17 19:36:23 +01:00
Nick Hall a3718e23ab 9742: Rewrite remove_* methods
Avoid using table maps in _do_remove.
2016-10-17 19:13:22 +01:00
Nick Hall 6092065fe3 9744: Tidy up get_raw_*_data methods 2016-10-17 18:13:47 +01:00
Nick Hall 3149420f80 9744: Tidy up has_*_handle methods 2016-10-17 17:43:21 +01:00
SNoiraud 2f1f1f1b1e 9736: Export options 'Preview' buttons create hidden quickreport. 2016-10-16 22:32:09 +02:00
prculley 6f6284852d bug 8993; fix Gedcom import in some alternate languages; improper date parsing 2016-10-16 14:50:08 -05:00
prculley c373f6ed90 Update Tool 'Check & Repair' and 'TestCaseGenerator' to detect and repair duplicate Gramps IDs 2016-10-16 14:02:05 -05:00
Nick Hall 7b183fc79c 9742: Rewrite get_*_gramps_ids methods
Use get_gramps_ids rather than table maps.
2016-10-16 19:35:50 +01:00
Nick Hall 41f3475681 9742: Rewrite find_next_*_gramps_id methods
Use has_gramps_id rather than table maps.
2016-10-16 18:43:25 +01:00
Nick Hall c9ae621d61 Remove get_transaction_class method 2016-10-15 23:15:21 +01:00
Nick Hall 22c93d8c87 Remove redundant Environment class 2016-10-15 23:07:19 +01:00
Paul CulleyandGitHub fa9d6005a4 Merge pull request #246 from prculley/pylint
Pylint on Check and Repair, Test Case Generator tools
2016-10-15 10:44:15 -05:00
Nick Hall 5c28d739ea 9743: Tidy up has_*_gramps_id methods
Renamed from has_gramps_id_for_* methods.
2016-10-14 23:31:20 +01:00
Nick Hall 46257a4e5c 9742: Rewrite get_*_from_gramps_id methods
Use _get_raw_*_from_id_data methods rather than table maps.
2016-10-14 21:14:52 +01:00
Nick Hall 2babfd2e8b 9742: Tidy up has_*_handle methods
Rename has_handle_for_* methods to has_*_handle methods.
2016-10-14 18:36:07 +01:00
Nick Hall 8548f16ae2 9742: Tidy up get_raw_*_data methods
Remove protected methods.
Avoid the use of table maps.
2016-10-14 18:01:42 +01:00
Nick Hall a158c9cba8 9746: Remove duplicate columns in person table 2016-10-13 23:46:19 +01:00
Nick Hall 736b057706 9745: Remove name columns from the family table
The same information can be obtained using a join to the person
table.
2016-10-13 21:39:01 +01:00
Paul Franklin eea104b8a6 handle some report pathological cases (better) 2016-10-13 12:44:16 -07:00
Nick Hall b29682cafb Tidy up schema
These changes produce a neater schema output in sqlite3.
2016-10-13 20:34:58 +01:00
Nick Hall 4a70e9233e 9747: Remove index on primary key column
Primary key columns are already indexed.
2016-10-13 19:16:24 +01:00
Nick Hall a39eff5766 Remove unused Select API code 2016-10-12 22:24:43 +01:00
Nick Hall f2767c0d12 Remove Select API unit tests 2016-10-12 22:00:15 +01:00
Nick Hall 2993d59c2e 9749: Move experimental Select API code into a branch 2016-10-12 21:46:52 +01:00
prculley fa2b52b9e3 bug 9694, fix Gedcom import with no VERSion (very old Gedcom) crash 2016-10-07 09:57:04 -05:00
prculley 03bed89fab bug 9458, fix Import Vcard can create multiple surnames with all selected as 'Primary' 2016-10-06 15:04:45 -05:00
prculley 589eb06474 Pylint on Check and Repair, Test Case Generator tools 2016-10-05 16:26:20 -05:00
Paulo Henrique MoraesandGitHub 2fb5fbf568 Corrections in translation. 2016-08-31 19:31:51 -03:00
739 changed files with 391551 additions and 148380 deletions
+3
View File
@@ -13,3 +13,6 @@
*.ged -text
*.GED -text
*.csv -text
*.DEF -text
*.IXI -text
*.REM -text
+20 -3
View File
@@ -53,6 +53,17 @@ addons:
- python3-mock
- python3-pyicu
- python3-coverage
- python3-jsonschema
# lxml dependencies. for merge_ref_test to work
# - libxml2-dev
# - libxslt1-dev
- libxml2-utils
- python3-lxml
- python-libxml2
# ubuntu 14.04 requires this in addition to libxml2-dev and
# libxslt1-dev for compiling lxml.
# https://github.com/deanmalmgren/textract/issues/19
- zlib1g-dev
before_install:
@@ -79,17 +90,23 @@ before_script:
- export PYTHONPATH=meta
# set module exclusions. --exclude=TestUser because of older version of mock
# without configure_mock
- export EXCLUDE="--exclude=TestcaseGenerator --exclude=vcard
--exclude=merge_ref_test --exclude=user_test"
- export EXCLUDE="--exclude=TestcaseGenerator"
# --exclude=merge_ref_test"
# set GRAMPS_RESOURCES for locale, data,image and documentation
- export GRAMPS_RESOURCES=.
# Install addons
- mkdir -p ~/.gramps/gramps50/plugins/
- wget https://github.com/gramps-project/addons/raw/master/gramps50/download/CliMerge.addon.tgz
- tar -C ~/.gramps/gramps50/plugins -xzf CliMerge.addon.tgz
- wget https://github.com/gramps-project/addons/raw/master/gramps50/download/ExportRaw.addon.tgz
- tar -C ~/.gramps/gramps50/plugins -xzf ExportRaw.addon.tgz
script:
# Ignore the virtualenv entirely. Use nosetests3, python3 (3.4.0) and coverage
# from /usr/bin. Use libraries from /usr/lib/python3.4,
# /usr/local/lib/python3.4/dist-packages and /usr/lib/python3/dist-packages
- nosetests3 --nologcapture --with-coverage --cover-package=gramps $EXCLUDE
gramps test test/GrampsLogger
gramps
# FIXME: This should have run from the current directory, rather than from
# gramps, because there is some test code in that directory.
+12
View File
@@ -0,0 +1,12 @@
See developer documentation at:
https://gramps-project.org/wiki/index.php?title=Portal:Developers
https://gramps-project.org/wiki/index.php?title=Brief_introduction_to_Git#Making_a_patchfile
https://gramps-project.org/wiki/index.php?title=Brief_introduction_to_Git#Making_a_PR
If you are interested in translating:
* The Gramps program to your language see:
https://gramps-project.org/wiki/index.php?title=Translating_Gramps
https://gramps-project.org/wiki/index.php?title=Portal:Translators
* The Gramps user manual to your language see:
https://gramps-project.org/wiki/index.php?title=Translating_the_Gramps_User_manual
+21297
View File
File diff suppressed because it is too large Load Diff
-397
View File
@@ -1,397 +0,0 @@
GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The "Document", below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as "you". You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject. (Thus, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification. Examples of
transparent image formats include PNG, XCF and JPG. Opaque formats
include proprietary formats that can be read and edited only by
proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled "History" in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the "History" section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section all
the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements"
or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History"
in the various original documents, forming one section Entitled
"History"; likewise combine any sections Entitled "Acknowledgements",
and any sections Entitled "Dedications". You must delete all sections
Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an "aggregate" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.
+3 -1
View File
@@ -1,13 +1,15 @@
include ChangeLog
include po/ChangeLog
include AUTHORS
include COPYING
include FAQ
include Gramps.py
include INSTALL
include LICENSE
include MANIFEST.in
include NEWS
include RELEASE_NOTES
include TODO
include CONTRIBUTING
include TestPlan.txt
recursive-include data *
recursive-include debian *
+1584 -8
View File
File diff suppressed because it is too large Load Diff
+3 -10
View File
@@ -42,7 +42,7 @@ The following packages are **STRONGLY RECOMMENDED** to be installed:
Used to show maps in the geography view.
It may be osmgpsmap, osm-gps-map, or python-osmgpsmap,
but the Python bindings for this must also be present.
but the Python bindings for this must also be present, so gir1.2-osmgpsmap-1.0.
Without this the GeoView will not be active, see
https://gramps-project.org/wiki/index.php?title=Gramps_4.2_Wiki_Manual_-_Categories#Geography_Category
@@ -50,7 +50,7 @@ The following packages are **STRONGLY RECOMMENDED** to be installed:
Enable creation of graphs using Graphviz engine.
Without this, three reports cannot be run.
Obtain it from: http://www.graphviz.org
Obtain it from: http://www.graphviz.org or try graphviz and python3-pygraphviz from your packages.
* **PyICU**
@@ -98,13 +98,6 @@ The following packages are optional:
More font support in the reports
* **Meta**
Required for experimental "where" clause creation. This functionality
is not yet in main-line code so it is not needed by users. If the package
will be used by gramps developers, to support further development, then
it may be included. Install with pypi: https://pypi.python.org/pypi/meta.
Optional packages required by Third-party Addons
------------------------------------------------
@@ -116,7 +109,7 @@ Prerequistes required for the following Addons to work:
* **Family Sheet** - Requires: PIL (Python Imaging Library) or PILLOW.
( https://gramps-project.org/wiki/index.php?title=Family_Sheet )
* **Graph View** - Requires: PyGoocanvas and Goocanvas.
* **Graph View** - Requires: PyGoocanvas and Goocanvas (python-pygoocanvas, gir1.2-goocanvas-2.0).
( https://gramps-project.org/wiki/index.php?title=Graph_View )
* **PedigreeChart** - Can optionally use - numpy if installed
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

+236
View File
@@ -0,0 +1,236 @@
[PRO-GEN]
version=3.0b
type=def
format=2
[general]
dateformat=DD/MM/YYYY
pointerlength=4
tables=2
[Table_1]
name1=Person
name2=Persons
fileext=.PER
indexext=.IXP
n_lines=42
hiddenlines=4,5,6,7,8,10,12,13,14,15,19,25,30,32,33,34,35,36,40
t01=É͵INDIVIDUAL ÆÍÍÍÍÍÍÍÍÍÍÍÍÍ͵pg30-1gbÆÍÍÍÍÍÍÍÍ͵LAST CHANGE ÆÍ»
t02=º ÛGiven name: º
t03=º Surname : Sex: º
t04=º Patronym : º
t05=º Call name : Alias: Code: º
t06=º Title 1 : Title 2: Title 3: º
t07=º Father : º
t08=º Mother : º
t09=º Occupation: º
t10=º Scratch : º
t11=º Info : º
t12=ÇÄ´ÛAddressÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t13=º Date : Street: º
t14=º Zip : Place: Country: º
t15=º Phone : Info: º
t16=ÇÄ´ÛBirthÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t17=º Date : Place: Time: º
t18=º Source: Reference: º
t19=º Text : º
t20=º Info : º
t21=ÇÄ´ÛChristeningÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t22=º Date : Place: Religion: º
t23=º Witn. : º
t24=º Source: Reference: º
t25=º Text : º
t26=º Info : º
t27=ÇÄ´ÛDeathÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t28=º Date : Place: Time: º
t29=º Source: Reference: º
t30=º Text : º
t31=º Info : º
t32=ÇÄ´CÛremationÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t33=º Date : Place: º
t34=º Source: Reference: º
t35=º Text : º
t36=º Info : º
t37=ÇÄ´BÛurialÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t38=º Date : Place: º
t39=º Source: Reference: º
t40=º Text : º
t41=º Info : º
t42=ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
n_fields=58
f01=Person_record ,31, 6, 0, 1,15,"","INDI RFN"
f02=Person_last_change ,32,10,10, 1,68,"","INDI CHAN DATE"
f03=Given_name ,47,64, 4, 2,15,"",""
f04=Surname ,47,40, 4, 3,15,"","INDI NAME"
f05=Sex ,45, 1, 1, 3,67,"MMFFmmff??","INDI SEX"
f06=Patronym ,47,40, 4, 4,15,"","INDI _PATR"
f07=Call_name ,47,18, 4, 5,15,"","INDI NAME NICK/INDI NAME ALIA/INDI CHR NICK"
f08=Alias ,47,19, 4, 5,41,"","INDI NAME _ALIA/INDI NAME COMM"
f09=Person_code ,47,12, 4, 5,67,"","INDI REFN/INDI CODE"
f10=Title1 ,47,16, 4, 6,15,"","INDI TITL"
f11=Title2 ,47,16, 4, 6,41,"","INDI _TITL2"
f12=Title3 ,47,12, 4, 6,67,"","INDI _TITL3"
f13=Father , 2,64, 4, 7,15,"",""
f14=Mother , 3,64, 4, 8,15,"",""
f15=Occupation ,47,64, 4, 9,15,"","INDI OCCU"
f16=Person_scratch ,46,64, 4,10,15,"","INDI _COMM/INDI COMM"
f17=Person_info ,46,64, 4,11,15,"","INDI NOTE"
f18=Address_date ,44,10,10,13,11,"","INDI RESI DATE"
f19=Address_street ,47,49, 4,13,30,"","INDI RESI ADDR"
f20=Address_zip ,47,11, 4,14,11,"","INDI RESI ADDR POST/INDI RESI POST"
f21=Address_place ,47,27, 4,14,30,"","INDI RESI ADDR CITY/INDI RESI PLAC"
f22=Address_country ,47,12, 4,14,67,"","INDI RESI ADDR CTRY/INDI RESI CTRY"
f23=Address_phone ,47,12, 4,15,11,"","INDI RESI PHON/INDI PHON"
f24=Address_info ,46,49, 4,15,30,"","INDI RESI NOTE/INDI ADDR"
f25=Birth_date ,44,10,10,17,11,"","INDI BIRT DATE"
f26=Birth_place ,47,30, 4,17,30,"","INDI BIRT PLAC"
f27=Birth_time ,45, 5, 5,17,67,"09::..","INDI BIRT TIME"
f28=Birth_source ,47,44, 4,18,11,"","INDI BIRT SOUR/INDI BIRT SOUR TITL"
f29=Birth_ref ,45,12,12,18,67,"","INDI BIRT SOUR REFN"
f30=Birth_text ,46,68, 4,19,11,"","INDI BIRT SOUR TEXT"
f31=Birth_info ,46,68, 4,20,11,"","INDI BIRT NOTE"
f32=Christening_date ,44,10,10,22,11,"","INDI CHR DATE"
f33=Christening_place ,47,26, 4,22,30,"","INDI CHR PLAC"
f34=Religion ,47,12, 4,22,67,"","INDI CHR RELI/INDI RELI"
f35=Christening_witness ,47,68, 4,23,11,"","INDI CHR _WITN/INDI CHR WITN"
f36=Christening_source ,47,44, 4,24,11,"","INDI CHR SOUR/INDI CHR SOUR TITL"
f37=Christening_ref ,45,12,12,24,67,"","INDI CHR SOUR REFN"
f38=Christening_text ,46,68, 4,25,11,"","INDI CHR SOUR TEXT"
f39=Christening_info ,46,68, 4,26,11,"","INDI CHR NOTE"
f40=Death_date ,44,10,10,28,11,"","INDI DEAT DATE"
f41=Death_place ,47,30, 4,28,30,"","INDI DEAT PLAC"
f42=Death_time ,45, 5, 5,28,67,"09::..","INDI DEAT TIME"
f43=Death_source ,47,44, 4,29,11,"","INDI DEAT SOUR/INDI DEAT SOUR TITL"
f44=Death_ref ,45,12,12,29,67,"","INDI DEAT SOUR REFN"
f45=Death_text ,46,68, 4,30,11,"","INDI DEAT SOUR TEXT"
f46=Death_info ,46,68, 4,31,11,"","INDI DEAT NOTE"
f47=Cremation_date ,44,10,10,33,11,"","INDI CREM DATE"
f48=Cremation_place ,47,49, 4,33,30,"","INDI CREM PLAC"
f49=Cremation_source ,47,44, 4,34,11,"","INDI CREM SOUR/INDI CREM SOUR TITL"
f50=Cremation_ref ,45,12,12,34,67,"","INDI CREM SOUR REFN"
f51=Cremation_text ,46,68, 4,35,11,"","INDI CREM SOUR TEXT"
f52=Cremation_info ,46,68, 4,36,11,"","INDI CREM NOTE"
f53=Burial_date ,44,10,10,38,11,"","INDI BURI DATE"
f54=Burial_place ,47,49, 4,38,30,"","INDI BURI PLAC"
f55=Burial_source ,47,44, 4,39,11,"","INDI BURI SOUR/INDI BURI SOUR TITL"
f56=Burial_ref ,45,12,12,39,67,"","INDI BURI SOUR REFN"
f57=Burial_text ,46,68, 4,40,11,"","INDI BURI SOUR TEXT"
f58=Burial_info ,46,68, 4,41,11,"","INDI BURI NOTE"
n_replace=4
r01=Surname,Patronym
r02=Birth_date,Christening_date/Birth_place,Christening_place
r03=Death_date,Burial_date/Death_place,Burial_place
r04=Burial_date,Cremation_date/Burial_place,Cremation_place
[Table_2]
name1=Marriage
name2=Marriages
fileext=.REL
indexext=.IXR
n_lines=35
hiddenlines=5,7,8,9,10,11,16,22,28,30,31,32,33,34
t01=É͵MARRIAGE ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵pg30-1gbÆÍÍÍÍÍÍÍÍ͵LAST CHANGE ÆÍ»
t02=º ÛHusband: º
t03=º Wife : º
t04=º Code : º
t05=º Scratch: º
t06=º Info : º
t07=ÇÄ´ÛLiving togetherÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t08=º Date : Place: º
t09=º Source: Reference: º
t10=º Text : º
t11=º Info : º
t12=ÇÄ´Publication of the ÛbannsÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t13=º Date : Place: º
t14=º Witn. : º
t15=º Source: Reference: º
t16=º Text : º
t17=º Info : º
t18=ÇÄ´Civil ÛmarriageÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t19=º Date : Place: º
t20=º Witn. : º
t21=º Source: Reference: º
t22=º Text : º
t23=º Info : º
t24=ÇÄ´ÛChurch marriageÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t25=º Date : Place: Church: º
t26=º Witn. : º
t27=º Source: Reference: º
t28=º Text : º
t29=º Info : º
t30=ÇÄ´ÛDivorceÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
t31=º Date : Place: º
t32=º Source: Reference: º
t33=º Text : º
t34=º Info : º
t35=ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
n_fields=41
f01=Relation_record ,31, 6, 0, 1,13,"","FAM RFN"
f02=Relation_last_change,32,10,10, 1,68,"","FAM CHAN DATE"
f03=Husband ,22,67, 4, 2,12,"","FAM HUSB"
f04=Wife ,23,67, 4, 3,12,"","FAM WIFE"
f05=Relation_code ,47,12, 4, 4,12,"","FAM REFN/FAM CODE"
f06=Relation_scratch ,46,67, 4, 5,12,"","FAM _COMM/FAM COMM"
f07=Relation_info ,46,67, 4, 6,12,"","FAM NOTE"
f08=Living_date ,44,10,10, 8,11,"","FAM _LIV DATE"
f09=Living_place ,47,49, 4, 8,30,"","FAM _LIV PLAC"
f10=Living_source ,47,44, 4, 9,11,"","FAM _LIV SOUR/FAM _LIV SOUR TITL"
f11=Living_ref ,45,12,12, 9,67,"","FAM _LIV SOUR REFN"
f12=Living_text ,46,68, 4,10,11,"","FAM _LIV SOUR TEXT"
f13=Living_info ,46,68, 4,11,11,"","FAM _LIV NOTE"
f14=Banns_date ,44,10,10,13,11,"","FAM MARB DATE/FAM REGS DATE"
f15=Banns_place ,47,49, 4,13,30,"","FAM MARB PLAC/FAM REGS PLAC"
f16=banns_witnesses ,47,68, 4,14,11,"","FAM MARB _WITN/FAM MARB WITN"
f17=Banns_source ,47,44, 4,15,11,"","FAM MARB SOUR/FAM MARB SOUR TITL/FAM REGS SOUR"
f18=Banns_ref ,45,12,12,15,67,"","FAM MARB SOUR REFN/FAM REGS SOUR REFN"
f19=Banns_text ,46,68, 4,16,11,"","FAM MARB SOUR TEXT"
f20=Banns_info ,46,68, 4,17,11,"","FAM MARB NOTE"
f21=Civil_date ,44,10,10,19,11,"","FAM MARR(Civil) DATE/FAM MARR DATE"
f22=Civil_place ,47,49, 4,19,30,"","FAM MARR(Civil) PLAC/FAM MARR PLAC"
f23=Civil_witnesses ,47,68, 4,20,11,"","FAM MARR(Civil) _WITN/FAM MARR _WITN/FAM MARR WITN/FAM WITN"
f24=Civil_source ,47,44, 4,21,11,"","FAM MARR(Civil) SOUR/FAM MARR SOUR/FAM MARR SOUR TITL"
f25=Civil_ref ,45,12,12,21,67,"","FAM MARR(Civil) SOUR REFN/FAM MARR SOUR REFN"
f26=Civil_text ,46,68, 4,22,11,"","FAM MARR(Civil) SOUR TEXT/FAM MARR SOUR TEXT"
f27=Civil_info ,46,68, 4,23,11,"","FAM MARR(Civil) NOTE/FAM MARR NOTE"
f28=Church_date ,44,10,10,25,11,"","FAM MARR(Church) DATE/FAM ORDI DATE"
f29=Church_place ,47,28, 4,25,30,"","FAM MARR(Church) PLAC/FAM ORDI PLAC"
f30=Church ,47,12, 4,25,67,"","FAM MARR(Church) _CHUR/FAM ORDI _CHUR/FAM ORDI RELI"
f31=Church_witnesses ,47,68, 4,26,11,"","FAM MARR(Church) _WITN/FAM ORDI _WITN/FAM ORDI WITN"
f32=Church_source ,47,44, 4,27,11,"","FAM MARR(Church) SOUR/FAM ORDI SOUR/FAM ORDI SOUR TITL"
f33=Church_ref ,45,12,12,27,67,"","FAM MARR(Church) SOUR REFN/FAM ORDI SOUR REFN"
f34=Church_text ,46,68, 4,28,11,"","FAM MARR(Church) SOUR TEXT/FAM ORDI SOUR TEXT"
f35=Church_info ,46,68, 4,29,11,"","FAM MARR(Church) NOTE/FAM ORDI NOTE"
f36=Divorce_date ,44,10,10,31,11,"","FAM DIV DATE/FAM DIVO DATE"
f37=Divorce_place ,47,49, 4,31,30,"","FAM DIV PLAC/FAM DIVO PLAC"
f38=Divorce_source ,47,44, 4,32,11,"","FAM DIV SOUR/FAM DIV SOUR TITL"
f39=Divorce_ref ,45,12,12,32,67,"","FAM DIV SOUR REFN"
f40=Divorce_text ,46,68, 4,33,11,"","FAM DIV SOUR TEXT"
f41=Divorce_info ,46,68, 4,34,11,"","FAM DIV NOTE"
n_replace=3
r01=Banns_date,Living_date/Banns_place,Living_place
r02=Civil_date,Church_date/Civil_place,Church_place
r03=Church_date,Banns_date/Church_place,Banns_place
[Genealogical]
male=M
female=F
function_father=[FATHER]
function_mother=[MOTHER]
function_husband=[HUSBAND]
function_wife=[WIFE]
function_age=[AGE]
function_initials=[INITIALS]
field_father=Father
field_mother=Mother
field_givenname=Given_name
field_surname=Surname
field_sex=Sex
field_birthdate=Birth_date
field_christeningdate=Christening_date
field_deathdate=Death_date
field_burialdate=Burial_date
field_husband=Husband
field_wife=Wife
field_marriagedate=Civil_date
field_churchdate=Church_date
field_divorcedate=Divorce_date
+2
View File
@@ -0,0 +1,2 @@
\0
PG30-1GB.DEF
+22
View File
@@ -0,0 +1,22 @@
[PRO-GEN]
version=3.21
type=ixi
indexformat=2
[Table_1]
current_record=0
current_index=1
indexes=1
sel_1=
sort_1=
mark_1=
marked_1=0
[Table_2]
current_record=0
current_index=1
indexes=1
sel_1=
sort_1=
mark_1=
marked_1=0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+20
View File
@@ -0,0 +1,20 @@
File of remarks for GEDCOM import.
GEDCOM file : D:\Users\PRC\Documents\Gramps\data\tests\exp_sample_ged.ged
PRO-GEN file : C:\PG30\GB\DATA\SAMPLE
Date : 13/01/2017
Rec. Remarks (P=person, R=Marriage)
--------------------------------------------------------------------------------
P1 (@I0000@) Surname (Anna Nana /Hansdotter/) has already been entered.
2 FAMC @F0008@
P25 (@I0024@) Death_date (BEF 23 JUL 1930) too long.
2 FAMC @F0010@
P43 (@I0042@) Surname (Frank /Neilsen/) has already been entered.
2 FAMC @F0005@
P47 (@I0046@) Address_date (FROM 1 JAN 1964 TO 3 MAR 1970) too long.
(@I0046@) Address_date (I think 1970 to 1971) has already been entered.
2 FAMC @F0016@
2 FAMC @F0016@
2 FAMC @F0016@
--------------------------------------------------------------------------------
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
+248 -15
View File
@@ -3,11 +3,14 @@
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
<database xmlns="http://gramps-project.org/xml/1.7.1/">
<header>
<created date="2016-09-04" version="5.0.0-alpha1"/>
<created date="2016-10-29" version="5.0.0-alpha1"/>
<researcher>
<resname>Alex Roitman,,,</resname>
<resaddr>Not Provided</resaddr>
<resphone>666-555-4444</resphone>
<resemail>an_email@gmail.com</resemail>
</researcher>
<mediapath>{DATA_DIR}/tests</mediapath>
</header>
<tags>
<tag handle="_d54b22fbfc721be9331fb706e3" change="1465741788" name="Unicode" color="#000000" priority="0"/>
@@ -566,25 +569,93 @@
<attribute type="WWW" value="http://mrstester.com"/>
<noteref hlink="_d65a448167a6b06a71840a1953b"/>
</event>
<event handle="_d65a448167a70779a5ea555fb99" change="1472500308" id="E0094">
<event handle="_d65a448167a70779a5ea555fb99" change="1477749917" id="E0094">
<type>Residence</type>
<dateval val="1964"/>
<datespan start="1964-01-01" stop="1970-03-03"/>
<place hlink="_0000006a0000006a"/>
<attribute type="Phone" value="440-871-3402"/>
<attribute type="EMAIL" value="tomtester@gmail.com"/>
<attribute type="FAX" value="440-321-4569"/>
<attribute type="WWW" value="http://tomtester.com"/>
</event>
<event handle="_d70437393c02164585e75a1733c" change="1477581914" id="ID_Laborer">
<type>Occupation</type>
<dateval val="1972"/>
</event>
<event handle="_d7043782aa05af41571ec778c76" change="1477584625" id="E0095">
<type>Birth</type>
<dateval val="1954"/>
<place hlink="_0000006500000065"/>
<attribute type="Time" value="12:45 am"/>
<attribute type="Agency" value="A hosptial"/>
<attribute type="Unknown" value="Who knows"/>
</event>
<event handle="_d7044217b59dd082df3d9af68f" change="1477583054" id="E0096">
<type>Death</type>
</event>
<event handle="_d70443bf71c6340e05a9adc10ae" change="1477583227" id="E0097">
<type>Burial</type>
<dateval val="2017-01-01"/>
<description>Buried in a Cemetary</description>
</event>
<event handle="_d70443f345457255bed58a2c65b" change="1477758153" id="E0098">
<type>Marriage</type>
<attribute type="Father Age" value="45"/>
<attribute type="Mother Age" value="15"/>
</event>
<event handle="_d70444b050662d2c4b8ae028b26" change="1477583326" id="E0099">
<type>Engagement</type>
<description>They were engaged</description>
</event>
<event handle="_d70446576f35592a31604008bf6" change="1477583499" id="E0100">
<type>Alternate Marriage</type>
<description>Married by a clown in the buff</description>
</event>
<event handle="_d70446bff1e2c2e3c842d42b8cb" change="1477583668" id="E0101">
<type>Alternate Marriage</type>
<attribute type="Father Age" value="44"/>
<attribute type="Mother Age" value="15"/>
</event>
<event handle="_d7044d1d2c749802e8116b33f47" change="1477584209" id="E0102">
<type>Retirement</type>
</event>
<event handle="_d70a7933f8d7296231917a2cc14" change="1477749894" id="E0104">
<type>Residence</type>
<datestr val="I think 1970 to 1971"/>
<place hlink="_0000000900000009"/>
</event>
<event handle="_d70acccb2bdd725c3180c78f28" change="1477758659" id="E0105">
<type>Death</type>
</event>
<event handle="_d70ad043a9e669bb85bfe71deba" change="1477759023" id="E0106">
<type>LossOfMojo</type>
<dateval val="1973-07-07"/>
<description>A very bad day</description>
</event>
<event handle="_d70ad0ba90b766d0f8966fb0aba" change="1477759072" id="E0107">
<type>GainOfMojo</type>
<dateval val="1973-07-10"/>
</event>
</events>
<people>
<person handle="_0000000100000001" change="1198222526" id="I0000">
<person handle="_0000000100000001" change="1477581282" id="I0000">
<gender>F</gender>
<name type="Birth Name">
<first>Anna</first>
<surname>Hansdotter</surname>
<nick>Annanana</nick>
</name>
<name alt="1" type="Also Known As">
<first>Anna Nana</first>
<surname>Hansdotter</surname>
</name>
<eventref hlink="_0000000200000002" role="Primary"/>
<eventref hlink="_0000000400000004" role="Primary"/>
<parentin hlink="_0000000600000006"/>
<personref hlink="_0000008700000087" rel="Friend">
<noteref hlink="_d7042e81dfd1dadee8ef6e5cac4"/>
</personref>
<noteref hlink="_d70429bc98a43469b08051816c7"/>
</person>
<person handle="_0000000700000007" change="1198222526" id="I0001">
<gender>M</gender>
@@ -1032,20 +1103,36 @@
<surname>リチミシキスイミ</surname>
</name>
</person>
<person handle="_d65a448167a2736b3dfc08c11d8" change="1473020199" id="I0044">
<person handle="_d65a448167a2736b3dfc08c11d8" change="1477759240" id="I0044">
<gender>M</gender>
<name type="Birth Name">
<first>The</first>
<surname>Tester</surname>
</name>
<eventref hlink="_d65a44813a618a10a0abaa1ed6a" role="Primary"/>
<eventref hlink="_d70acccb2bdd725c3180c78f28" role="Unknown"/>
<eventref hlink="_d70ad043a9e669bb85bfe71deba" role="Primary"/>
<eventref hlink="_d70ad0ba90b766d0f8966fb0aba" role="Primary"/>
<lds_ord type="baptism">
<dateval val="1955-01-02"/>
<status val="Infant"/>
</lds_ord>
<address>
<dateval val="2017-10-27"/>
<locality>test village</locality>
<city>Akron</city>
<state>OH</state>
<country>Cuyahoga</country>
<postal>44177</postal>
</address>
<attribute type="Nickname" value="Testy"/>
<childof hlink="_0000000a0000000a"/>
<parentin hlink="_d65a46d6c0034a50640d7a84213"/>
<citationref hlink="_d65a448168445feea89cc1499fb"/>
</person>
<person handle="_d65a4481684319731c24a1e105a" change="1473020199" id="I0045">
<person handle="_d65a4481684319731c24a1e105a" change="1477750978" id="I0045">
<gender>F</gender>
<name type="Birth Name">
<name type="Married Name">
<first>Mrs</first>
<surname>Tester</surname>
</name>
@@ -1065,16 +1152,103 @@
<noteref hlink="_d65a448168e1061fc46719b5efa"/>
<citationref hlink="_d65a448168e27ed358658e331d9"/>
</person>
<person handle="_d65a448168e2615f26e025aa37c" change="1473020269" id="I0046">
<person handle="_d65a448168e2615f26e025aa37c" change="1477758479" id="I0046">
<gender>M</gender>
<name type="Birth Name">
<first>Tom</first>
<surname>Tester</surname>
<surname prefix="Von" connector="y">Tester</surname>
<surname prim="0">tested</surname>
<nick>TesterNickname</nick>
</name>
<eventref hlink="_d65a448167a70779a5ea555fb99" role="Primary"/>
<eventref hlink="_d70a7933f8d7296231917a2cc14" role="Primary"/>
<lds_ord type="sealed_to_parents">
<dateval val="1999" type="about" quality="estimated"/>
<temple val="DENVE"/>
<place hlink="_0000006a0000006a"/>
<sealed_to hlink="_d65a46d6c0034a50640d7a84213"/>
</lds_ord>
<url href="" type="FTP"/>
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
<citationref hlink="_d65a448169813b50e0fdc0eea70"/>
</person>
<person handle="_d70431c6959122e6b45d92a0f79" change="1477758479" id="I0047">
<gender>U</gender>
<name type="Birth Name">
<first>Fake</first>
<call>Person</call>
<surname prefix="von" derivation="Feudal">Person</surname>
<suffix>I</suffix>
<title>Fake person</title>
<nick>Fake</nick>
</name>
<eventref hlink="_d70437393c02164585e75a1733c" role="Primary"/>
<eventref hlink="_d7043782aa05af41571ec778c76" role="Primary">
<attribute type="Father Age" value="47"/>
<attribute type="Mother Age" value="16"/>
<attribute type="Description" value="An eventref description"/>
</eventref>
<eventref hlink="_d7044217b59dd082df3d9af68f" role="Primary"/>
<eventref hlink="_d70443bf71c6340e05a9adc10ae" role="Primary"/>
<eventref hlink="_d7044d1d2c749802e8116b33f47" role="Primary"/>
<lds_ord type="baptism">
<dateval val="1960-06-07"/>
<temple val="DENVE"/>
<place hlink="_0000006a0000006a"/>
<status val="Qualified"/>
</lds_ord>
<address>
<dateval val="1954"/>
<street>8888 Cliff Dr</street>
<city>Bay Village</city>
<state>Ohio</state>
<country>Cuyahoga</country>
<postal>44140</postal>
<phone>440-871-3400</phone>
</address>
<attribute type="Identification Number" value="ID99999"/>
<attribute type="RFN" value="RFN8888"/>
<attribute type="RESN" value="">
<noteref hlink="_d7043cbb41e378229bb7645880a"/>
</attribute>
<attribute type="Age" value="99"/>
<attribute type="Agency" value="a hospital"/>
<attribute type="Description" value="A fake description"/>
<url href="ftp://whoknows.org" type="FTP" description="A test FTP URL"/>
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
</person>
<person handle="_d704394bd865d87c4e17e0ddb52" change="1477758479" id="I0048">
<gender>F</gender>
<name type="Birth Name">
<first>Mary</first>
<surname>Tester</surname>
</name>
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
</person>
<person handle="_d7043a0d88d6c229604fb03acd8" change="1477758479" id="I0049">
<gender>F</gender>
<name type="Unknown">
<first>Martha</first>
<surname>Tester</surname>
</name>
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
</person>
<person handle="_d7043e8a06054d316b49becaa9" change="1477758479" id="I0050">
<gender>M</gender>
<name type="Also Known As">
<first>John</first>
<surname>Tester</surname>
</name>
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
</person>
<person handle="_d70ac994c26790fb000f95f0a31" change="1477758479" id="I0051">
<gender>M</gender>
<name type="Birth Name">
<first>Mark</first>
<surname>Tester</surname>
</name>
<childof hlink="_d65a46d6c0034a50640d7a84213"/>
</person>
</people>
<families>
<family handle="_0000000600000006" change="1198222526" id="F0003">
@@ -1194,11 +1368,30 @@
<mother hlink="_0000005600000056"/>
<eventref hlink="_000000a9000000a9" role="Family"/>
</family>
<family handle="_d65a46d6c0034a50640d7a84213" change="1473020211" id="F0016">
<family handle="_d65a46d6c0034a50640d7a84213" change="1477758479" id="F0016">
<rel type="Married"/>
<father hlink="_d65a448167a2736b3dfc08c11d8"/>
<mother hlink="_d65a4481684319731c24a1e105a"/>
<eventref hlink="_d70443f345457255bed58a2c65b" role="Family"/>
<eventref hlink="_d70444b050662d2c4b8ae028b26" role="Family"/>
<eventref hlink="_d70446576f35592a31604008bf6" role="Family"/>
<eventref hlink="_d70446bff1e2c2e3c842d42b8cb" role="Family"/>
<lds_ord type="sealed_to_spouse">
<dateval val="2000-02-22"/>
<temple val="DENVE"/>
<place hlink="_0000003400000034"/>
<status val="Cleared"/>
</lds_ord>
<childref hlink="_d65a448168e2615f26e025aa37c"/>
<childref hlink="_d70431c6959122e6b45d92a0f79" mrel="Stepchild" frel="Adopted"/>
<childref hlink="_d704394bd865d87c4e17e0ddb52" mrel="Adopted"/>
<childref hlink="_d7043a0d88d6c229604fb03acd8" mrel="Foster" frel="Foster"/>
<childref hlink="_d7043e8a06054d316b49becaa9" mrel="Stepchild" frel="Stepchild"/>
<childref hlink="_d70ac994c26790fb000f95f0a31" mrel="Sponsored" frel="Sponsored"/>
<attribute type="Number of Children" value="4"/>
<attribute type="RFN" value="RFN3333"/>
<attribute type="License Number" value="7532951"/>
<attribute type="Unknown" value=""/>
</family>
</families>
<citations>
@@ -1219,10 +1412,15 @@
<confidence>3</confidence>
<sourceref hlink="_d53252d41b370ebe65ebd50c34f"/>
</citation>
<citation handle="_d53254b0c802fe24bdea26f3180" change="1465075912" id="C0004">
<citation handle="_d53254b0c802fe24bdea26f3180" change="1477757692" id="C0004">
<dateval val="1955-05-05"/>
<page>22 6</page>
<confidence>2</confidence>
<noteref hlink="_d70a86ba52769996c5099561a3d"/>
<noteref hlink="_d70a873db52134a80abb82d9769"/>
<srcattribute type="EVEN" value="Citation Event?"/>
<srcattribute type="EVEN:ROLE" value="The Event type Role"/>
<srcattribute type="Unknown" value="I'ts unknown!"/>
<sourceref hlink="_000000b9000000b9"/>
</citation>
<citation handle="_d65a448168445feea89cc1499fb" change="1472500308" id="C0005">
@@ -1233,8 +1431,9 @@
<confidence>2</confidence>
<sourceref hlink="_d65a448169824195df7cdb2236c"/>
</citation>
<citation handle="_d65a448169813b50e0fdc0eea70" change="1472500308" id="C0007">
<citation handle="_d65a448169813b50e0fdc0eea70" change="1477757813" id="C0007">
<confidence>2</confidence>
<noteref hlink="_d70a86ba52769996c5099561a3d"/>
<sourceref hlink="_d65a448169824195df7cdb2236c"/>
</citation>
</citations>
@@ -1274,6 +1473,13 @@
<stitle>Ohio Births, 1958-2002</stitle>
<reporef hlink="_d65a44816ac165956f5723df07d" medium="Book"/>
</source>
<source handle="_d7044abba5546284583fee1e21c" change="1477758039" id="S0007">
<stitle></stitle>
<sauthor>The tester</sauthor>
<spubinfo>Published when the test was written</spubinfo>
<sabbrev>TST</sabbrev>
<reporef hlink="_d7044c855b91ee04c40e98987e7"/>
</source>
</sources>
<places>
<placeobj handle="_0000000300000003" change="1465741826" id="P0000" type="Unknown">
@@ -1306,7 +1512,7 @@
<ptitle>Hayward, Alameda Co., CA</ptitle>
<pname value="Hayward, Alameda Co., CA"/>
</placeobj>
<placeobj handle="_0000003400000034" change="1463929997" id="P0007" type="Unknown">
<placeobj handle="_0000003400000034" change="1477754702" id="P0007" type="Locality">
<ptitle>Community Presbyterian Church, Danville, CA</ptitle>
<pname value="Community Presbyterian Church, Danville, CA"/>
</placeobj>
@@ -1442,8 +1648,9 @@
</placeobj>
</places>
<objects>
<object handle="_d54c1b52c8636648123580900ca" change="1465767829" id="O0000">
<file src="D:/Users/prc/Downloads/Michael O'Toole 2015-11.jpg" mime="image/jpeg" checksum="ed5423c128d9bc43dbc03a8311f185bd" description="Michael O'Toole 2015-11"/>
<object handle="_d54c1b52c8636648123580900ca" change="1477754617" id="O0000">
<file src="O0.jpg" mime="image/jpeg" checksum="887d22e5822c86bd3961d0d179fbc0a2" description="Michael O'Toole 2015-11"/>
<noteref hlink="_d70aa63baa15f9fee23b45f03b"/>
</object>
</objects>
<repositories>
@@ -1509,6 +1716,13 @@
<noteref hlink="_d65a44816cafa196ba741ab38d"/>
<noteref hlink="_d65a44816ca32ac25b0b586e61c"/>
</repository>
<repository handle="_d7044c064202cdd982648bfce19" change="1477584095" id="R0005">
<type>Library</type>
<url href="555-444-3333" type="Unknown"/>
</repository>
<repository handle="_d7044c855b91ee04c40e98987e7" change="1477758030" id="R0006">
<type>Library</type>
</repository>
</repositories>
<notes>
<note handle="_0000004200000042" change="1463929997" id="N0002" type="General">
@@ -1593,5 +1807,24 @@ Only one phone number supported Line 9:
<range start="0" end="144"/>
</style>
</note>
<note handle="_d70429bc98a43469b08051816c7" change="1477580626" id="N0014" type="Person Note">
<text>******************************************************************890123456789
******************************************************************89 123456789</text>
</note>
<note handle="_d7042e81dfd1dadee8ef6e5cac4" change="1477581000" id="N0015" type="Association Note">
<text>This should show up under the ASSO tag in Gedcom</text>
</note>
<note handle="_d7043cbb41e378229bb7645880a" change="1477582492" id="N0016" type="Attribute Note">
<text>??? What is RESN???</text>
</note>
<note handle="_d70a86ba52769996c5099561a3d" change="1477757590" id="N0017" type="Source text">
<text>A citation Note Source text</text>
</note>
<note handle="_d70a873db52134a80abb82d9769" change="1477751366" id="N0018" type="Citation">
<text>Another Citation Note</text>
</note>
<note handle="_d70aa63baa15f9fee23b45f03b" change="1477754616" id="N0019" type="Media Note">
<text>A bad photo for sure</text>
</note>
</notes>
</database>
+53 -2
View File
@@ -4,6 +4,7 @@ PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
FN:Anna Hansdotter
N:Hansdotter;Anna;;;
SORT-STRING:Hansdotter Anna
NICKNAME:Annanana
X-GENDER:Female
BDAY:1864-10-02
END:VCARD
@@ -439,6 +440,7 @@ N:Tester;The;;;
SORT-STRING:Tester The
X-GENDER:Male
BDAY:1954-12-29
ADR:;;;Akron;OH;44177;Cuyahoga
END:VCARD
BEGIN:VCARD
@@ -459,9 +461,58 @@ END:VCARD
BEGIN:VCARD
VERSION:3.0
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
FN:Tom Tester
N:Tester;Tom;;;
FN:Tom Von Tester y tested
N:Von Tester y,tested;Tom;;;
SORT-STRING:Tester Tom
NICKNAME:TesterNickname
X-GENDER:Male
END:VCARD
BEGIN:VCARD
VERSION:3.0
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
FN:Fake person Fake von Person\, I
N:von Person;Person;Fake;Fake,person;I
SORT-STRING:Person Fake I
NICKNAME:Fake
ADR:;;8888 Cliff Dr;Bay Village;Ohio;44140;Cuyahoga
TEL:440-871-3400
URL:ftp://whoknows.org
END:VCARD
BEGIN:VCARD
VERSION:3.0
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
FN:Mary Tester
N:Tester;Mary;;;
SORT-STRING:Tester Mary
X-GENDER:Female
END:VCARD
BEGIN:VCARD
VERSION:3.0
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
FN:Martha Tester
N:Tester;Martha;;;
SORT-STRING:Tester Martha
X-GENDER:Female
END:VCARD
BEGIN:VCARD
VERSION:3.0
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
FN:John Tester
N:Tester;John;;;
SORT-STRING:Tester John
X-GENDER:Male
END:VCARD
BEGIN:VCARD
VERSION:3.0
PRODID:-//Gramps//NONSGML Gramps 5.0.0-alpha1//EN
FN:Mark Tester
N:Tester;Mark;;;
SORT-STRING:Tester Mark
X-GENDER:Male
END:VCARD
+352 -82
View File
@@ -2,10 +2,10 @@
1 SOUR Gramps
2 VERS 5.0.0-alpha1
2 NAME Gramps
1 DATE 4 SEP 2016
2 TIME 15:21:50
1 DATE 29 OCT 2016
2 TIME 15:10:31
1 SUBM @SUBM@
1 FILE D:\Users\prc\Downloads\exp_sample_ged.ged
1 FILE C:\Users\prc\AppData\Roaming\gramps\temp\exp_sample_ged.ged
1 COPR Copyright (c) 2016 Alex Roitman,,,.
1 GEDC
2 VERS 5.5.1
@@ -16,10 +16,17 @@
1 NAME Alex Roitman,,,
1 ADDR Not Provided
2 ADR1 Not Provided
1 PHON 666-555-4444
1 EMAIL an_email@gmail.com
0 @I0000@ INDI
1 NAME Anna /Hansdotter/
2 GIVN Anna
2 SURN Hansdotter
2 NICK Annanana
1 NAME Anna Nana /Hansdotter/
2 TYPE aka
2 GIVN Anna Nana
2 SURN Hansdotter
1 SEX F
1 BIRT
2 TYPE Birth of Anna Hansdotter
@@ -30,9 +37,13 @@
2 DATE 29 SEP 1945
2 PLAC Sparks, Washoe Co., NV
1 FAMS @F0003@
1 ASSO @I0038@
2 RELA Friend
2 NOTE @N0015@
1 NOTE @N0014@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
2 DATE 27 OCT 2016
3 TIME 15:14:42
0 @I0001@ INDI
1 NAME Keith Lloyd /Smith/
2 GIVN Keith Lloyd
@@ -43,9 +54,10 @@
2 DATE 11 AUG 1966
2 PLAC San Francisco, San Francisco Co., CA
1 FAMC @F0008@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0002@ INDI
1 NAME Amber Marie /Smith/
2 GIVN Amber Marie
@@ -59,10 +71,13 @@
2 TYPE Christening of Amber Marie Smith
2 DATE 26 APR 1998
2 PLAC Community Presbyterian Church, Danville, CA
2 ADDR
3 ADR2 Community Presbyterian Church, Danville, CA
1 FAMC @F0013@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0003@ INDI
1 NAME Magnes /Smith/
2 GIVN Magnes
@@ -77,10 +92,11 @@
2 DATE 20 FEB 1910
2 PLAC Rønne, Bornholm, Denmark
1 FAMC @F0002@
2 PEDI birth
1 FAMS @F0011@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0004@ INDI
1 NAME Ingeman /Smith/
2 GIVN Ingeman
@@ -91,9 +107,10 @@
2 DATE 29 JAN 1826
2 PLAC Gladsax, Kristianstad Län, Sweden
1 FAMC @F0000@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0005@ INDI
1 NAME Mason Michael /Smith/
2 GIVN Mason Michael
@@ -107,10 +124,13 @@
2 TYPE Christening of Mason Michael Smith
2 DATE 10 JUL 1996
2 PLAC Community Presbyterian Church, Danville, CA
2 ADDR
3 ADR2 Community Presbyterian Church, Danville, CA
1 FAMC @F0013@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0006@ INDI
1 NAME Edwin /Willard/
2 GIVN Edwin
@@ -122,7 +142,7 @@
1 FAMS @F0004@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0007@ INDI
1 NAME Ingar /Smith/
2 GIVN Ingar
@@ -133,9 +153,10 @@
2 DATE AFT 1823
2 PLAC Gladsax, Kristianstad Län, Sweden
1 FAMC @F0000@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0008@ INDI
1 NAME Hjalmar /Smith/
2 GIVN Hjalmar
@@ -158,11 +179,12 @@
2 DATE 14 NOV 1912
2 PLAC Copenhagen, Denmark
1 FAMC @F0003@
2 PEDI birth
1 FAMS @F0006@
1 NOTE @N0003@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0009@ INDI
1 NAME Emil /Smith/
2 GIVN Emil
@@ -173,9 +195,10 @@
2 DATE 27 SEP 1860
2 PLAC Simrishamn, Kristianstad Län, Sweden
1 FAMC @F0002@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0010@ INDI
1 NAME Hans Peter /Smith/
2 GIVN Hans Peter
@@ -189,6 +212,10 @@
3 PAGE 22 6
3 DATA
4 DATE 5 MAY 1955
4 TEXT A citation Note Source text
3 NOTE @N0018@
3 EVEN Citation Event?
4 ROLE The Event type Role
1 DEAT
2 TYPE Death of Hans Peter Smith
2 DATE 29 JAN 1977
@@ -202,11 +229,12 @@
3 DATA
4 DATE 22 JUL 1977
1 FAMC @F0003@
2 PEDI birth
1 FAMS @F0009@
1 FAMS @F0014@
1 CHAN
2 DATE 4 JUN 2016
3 TIME 16:32:08
3 TIME 21:32:08
0 @I0011@ INDI
1 NAME Hanna /Smith/
2 GIVN Hanna
@@ -217,9 +245,10 @@
2 DATE 29 JAN 1821
2 PLAC Gladsax, Kristianstad Län, Sweden
1 FAMC @F0000@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0012@ INDI
1 NAME Herman Julius /Nielsen/
2 GIVN Herman Julius
@@ -235,7 +264,7 @@
1 FAMS @F0005@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0013@ INDI
1 NAME Evelyn /Michaels/
2 GIVN Evelyn
@@ -247,7 +276,7 @@
1 FAMS @F0007@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0014@ INDI
1 NAME Marjorie Lee /Smith/
2 GIVN Marjorie Lee
@@ -258,9 +287,10 @@
2 DATE 4 NOV 1934
2 PLAC Reno, Washoe Co., NV
1 FAMC @F0006@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0015@ INDI
1 NAME Gus /Smith/
2 GIVN Gus
@@ -275,10 +305,11 @@
2 DATE 21 OCT 1963
2 PLAC San Francisco, San Francisco Co., CA
1 FAMC @F0003@
2 PEDI birth
1 FAMS @F0007@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0016@ INDI
1 NAME Jennifer /Anderson/
2 GIVN Jennifer
@@ -295,7 +326,7 @@
1 FAMS @F0014@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0017@ INDI
1 NAME Lillie Harriet /Jones/
2 GIVN Lillie Harriet
@@ -311,7 +342,7 @@
1 FAMS @F0009@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0018@ INDI
1 NAME John Hjalmar /Smith/
2 GIVN John Hjalmar
@@ -322,10 +353,11 @@
2 DATE 30 JAN 1932
2 PLAC San Francisco, San Francisco Co., CA
1 FAMC @F0006@
2 PEDI birth
1 FAMS @F0012@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0019@ INDI
1 NAME Eric Lloyd /Smith/
2 GIVN Eric Lloyd
@@ -340,10 +372,11 @@
2 FAMC @F0008@
3 ADOP BOTH
1 FAMC @F0008@
2 PEDI adopted
1 FAMS @F0010@
1 CHAN
2 DATE 4 JUN 2016
3 TIME 16:25:13
3 TIME 21:25:13
0 @I0020@ INDI
1 NAME Carl Emil /Smith/
2 GIVN Carl Emil
@@ -359,9 +392,10 @@
2 PLAC Reno, Washoe Co., NV
2 CAUS Bad breath
1 FAMC @F0003@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0021@ INDI
1 NAME Hjalmar /Smith/
2 GIVN Hjalmar
@@ -376,9 +410,10 @@
2 DATE 25 SEP 1894
2 PLAC Rønne, Bornholm, Denmark
1 FAMC @F0003@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0022@ INDI
1 NAME Martin /Smith/
2 GIVN Martin
@@ -397,11 +432,12 @@
2 DATE 23 NOV 1830
2 PLAC Gladsax, Kristianstad Län, Sweden
1 FAMC @F0000@
2 PEDI birth
1 FAMS @F0002@
1 NOTE @N0002@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0023@ INDI
1 NAME Astrid Shermanna Augusta /Smith/
2 GIVN Astrid Shermanna Augusta
@@ -416,10 +452,11 @@
2 DATE 21 DEC 1963
2 PLAC San Francisco, San Francisco Co., CA
1 FAMC @F0003@
2 PEDI birth
1 FAMS @F0005@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0024@ INDI
1 NAME Gustaf /Smith/ Sr.
2 GIVN Gustaf
@@ -443,10 +480,11 @@
2 DATE 7 DEC 1862
2 PLAC Gladsax, Kristianstad Län, Sweden
1 FAMC @F0002@
2 PEDI birth
1 FAMS @F0003@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0025@ INDI
1 NAME Marta /Ericsdotter/
2 GIVN Marta
@@ -459,7 +497,7 @@
1 FAMS @F0001@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0026@ INDI
1 NAME Kirsti Marie /Smith/
2 GIVN Kirsti Marie
@@ -474,10 +512,11 @@
2 DATE 18 JUL 1966
2 PLAC San Francisco, San Francisco Co., CA
1 FAMC @F0003@
2 PEDI birth
1 FAMS @F0004@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0027@ INDI
1 NAME Ingeman /Smith/
2 GIVN Ingeman
@@ -490,7 +529,7 @@
1 FAMS @F0001@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0028@ INDI
1 NAME Anna /Streiffert/
2 GIVN Anna
@@ -507,7 +546,7 @@
1 FAMS @F0011@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0029@ INDI
1 NAME Craig Peter /Smith/
2 GIVN Craig Peter
@@ -521,9 +560,10 @@
2 TYPE Census of Craig Peter Smith
2 NOTE @N0000@
1 FAMC @F0008@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0030@ INDI
1 NAME Janice Ann /Adams/
2 GIVN Janice Ann
@@ -540,7 +580,7 @@
1 FAMS @F0013@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0031@ INDI
1 NAME Marjorie /Ohman/
2 GIVN Marjorie
@@ -564,7 +604,7 @@
1 FAMS @F0006@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0032@ INDI
1 NAME Darcy /Horne/
2 GIVN Darcy
@@ -579,7 +619,7 @@
1 FAMS @F0010@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0033@ INDI
1 NAME Lloyd /Smith/
2 GIVN Lloyd
@@ -590,10 +630,11 @@
2 DATE 13 MAR 1935
2 PLAC San Francisco, San Francisco Co., CA
1 FAMC @F0009@
2 PEDI birth
1 FAMS @F0008@
1 CHAN
2 DATE 4 SEP 2016
3 TIME 15:17:13
3 TIME 20:17:13
0 @I0034@ INDI
1 NAME Alice Paula /Perkins/
2 GIVN Alice Paula
@@ -606,7 +647,7 @@
1 FAMS @F0012@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0035@ INDI
1 NAME Lars Peter /Smith/
2 GIVN Lars Peter
@@ -620,9 +661,10 @@
2 FAMC @F0010@
3 ADOP BOTH
1 FAMC @F0010@
2 PEDI adopted
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0036@ INDI
1 NAME Elna /Jefferson/
2 GIVN Elna
@@ -642,7 +684,7 @@
1 FAMS @F0000@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0037@ INDI
1 NAME Edwin Michael /Smith/
2 GIVN Edwin Michael
@@ -664,10 +706,11 @@
2 TYPE B.S.E.E.
2 DATE 1984
1 FAMC @F0012@
2 PEDI birth
1 FAMS @F0013@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0038@ INDI
1 NAME Kerstina /Hansdotter/
2 GIVN Kerstina
@@ -684,7 +727,7 @@
1 FAMS @F0002@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0039@ INDI
1 NAME Martin /Smith/
2 GIVN Martin
@@ -698,10 +741,11 @@
2 TYPE Death of Martin Smith
2 PLAC Sweden
1 FAMC @F0001@
2 PEDI birth
1 FAMS @F0000@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0040@ INDI
1 NAME Marjorie Alice /Smith/
2 GIVN Marjorie Alice
@@ -712,9 +756,10 @@
2 DATE 5 FEB 1960
2 PLAC San Jose, Santa Clara Co., CA
1 FAMC @F0012@
2 PEDI birth
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0041@ INDI
1 NAME Janis Elaine /Green/
2 GIVN Janis Elaine
@@ -726,7 +771,7 @@
1 FAMS @F0008@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @I0042@ INDI
1 NAME 雪 /Ke 柯/
2 GIVN 雪
@@ -740,10 +785,16 @@
2 FAMC @F0005@
3 ADOP BOTH
1 FAMC @F0005@
2 PEDI adopted
1 OBJE
2 FORM jpeg
2 TITL Michael O'Toole 2015-11
2 FILE c:\grampsaio64-4.9.9\share\gramps\tests\O0.jpg
2 NOTE @N0019@
1 NOTE @N0007@
1 CHAN
2 DATE 18 JUN 2016
3 TIME 12:04:25
3 TIME 17:04:25
0 @I0043@ INDI
1 NAME ピーター /リチミシキスイミ/
2 GIVN ピーター
@@ -751,11 +802,12 @@
1 SEX M
1 CHAN
2 DATE 18 JUN 2016
3 TIME 11:42:08
3 TIME 16:42:08
0 @I0044@ INDI
1 NAME The /Tester/
2 GIVN The
2 SURN Tester
2 NICK Testy
1 SEX M
1 BIRT
2 DATE 29 DEC 1954
@@ -771,14 +823,38 @@
2 EMAIL thetester@gmail.com
2 FAX 440-123-4567
2 WWW http://thetester.com
1 EVEN A very bad day
2 TYPE LossOfMojo
2 DATE 7 JUL 1973
1 EVEN
2 TYPE GainOfMojo
2 DATE 10 JUL 1973
1 BAPL
2 DATE 2 JAN 1955
2 STAT INFANT
1 FAMC @F0008@
2 PEDI birth
1 FAMS @F0016@
1 SOUR @S0005@
1 RESI
2 DATE 27 OCT 2017
2 ADDR
3 CONT test village
3 CONT Akron
3 CONT OH
3 CONT 44177
3 CONT Cuyahoga
3 ADR2 test village
3 CITY Akron
3 STAE OH
3 POST 44177
3 CTRY Cuyahoga
1 CHAN
2 DATE 4 SEP 2016
3 TIME 15:16:39
2 DATE 29 OCT 2016
3 TIME 16:40:40
0 @I0045@ INDI
1 NAME Mrs /Tester/
2 TYPE married
2 GIVN Mrs
2 SURN Tester
1 SEX F
@@ -804,28 +880,174 @@
1 PHON 440-871-3401
1 PHON 800-871-3401
1 EMAIL mrstester@gmail.com
1 PHON 440-321-4568
1 FAX 440-321-4568
1 WWW http://mrstester.com
1 NOTE @N0010@
1 CHAN
2 DATE 4 SEP 2016
3 TIME 15:16:39
2 DATE 29 OCT 2016
3 TIME 14:22:58
0 @I0046@ INDI
1 NAME Tom /Tester/
1 NAME Tom /Von Tester y tested/
2 GIVN Tom
2 SURN Tester
2 SPFX Von,
2 SURN Tester y, tested
2 NICK TesterNickname
1 SEX M
1 RESI
2 DATE 1964
2 DATE FROM 1 JAN 1964 TO 3 MAR 1970
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
3 MAP
4 LATI N39.7392
4 LONG W104.9903
2 ADDR
3 CITY Denver, Denver Co., CO
3 STAE Colorado
3 CTRY USA
2 PHON 440-871-3402
2 EMAIL tomtester@gmail.com
2 FAX 440-321-4569
2 WWW http://tomtester.com
1 RESI
2 DATE I think 1970 to 1971
2 PLAC San Francisco, San Francisco Co., CA
1 SLGC
2 DATE EST ABT 1999
2 FAMC @F0016@
2 TEMP DENVE
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
3 MAP
4 LATI N39.7392
4 LONG W104.9903
2 ADDR
3 CITY Denver, Denver Co., CO
3 STAE Colorado
3 CTRY USA
1 FAMC @F0016@
2 PEDI birth
1 SOUR @S0005@
2 DATA
3 TEXT A citation Note Source text
1 OBJE
2 FORM URL
1 CHAN
2 DATE 4 SEP 2016
3 TIME 15:17:49
2 DATE 29 OCT 2016
3 TIME 16:27:59
0 @I0047@ INDI
1 NAME Fake /von Person/ I
2 GIVN Fake
2 SPFX von
2 SURN Person
2 NSFX I
2 NPFX Fake person
2 NICK Fake
1 BIRT
2 DATE 1954
3 TIME 12:45 am
2 PLAC Fremont, Alameda Co., CA
2 AGNC A hosptial
2 HUSB
3 AGE 47
2 WIFE
3 AGE 16
1 DEAT Y
1 OCCU
2 DATE 1972
1 BURI
2 TYPE Buried in a Cemetary
2 DATE 1 JAN 2017
1 RETI Y
1 ADOP Y
2 FAMC @F0016@
3 ADOP HUSB
1 IDNO ID99999
1 RFN RFN8888
1 RESN
1 FACT 99
2 TYPE Age
1 FACT a hospital
2 TYPE Agency
1 DSCR A fake description
1 BAPL
2 DATE 7 JUN 1960
2 TEMP DENVE
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
3 MAP
4 LATI N39.7392
4 LONG W104.9903
2 ADDR
3 CITY Denver, Denver Co., CO
3 STAE Colorado
3 CTRY USA
2 STAT QUALIFIED
1 FAMC @F0016@
2 _FREL Adopted
2 _MREL Step
1 RESI
2 DATE 1954
2 ADDR 8888 Cliff Dr
3 CONT Bay Village
3 CONT Ohio
3 CONT 44140
3 CONT Cuyahoga
3 ADR1 8888 Cliff Dr
3 CITY Bay Village
3 STAE Ohio
3 POST 44140
3 CTRY Cuyahoga
2 PHON 440-871-3400
1 OBJE
2 FORM URL
2 TITL A test FTP URL
2 FILE ftp://whoknows.org
1 CHAN
2 DATE 29 OCT 2016
3 TIME 16:27:59
0 @I0048@ INDI
1 NAME Mary /Tester/
2 GIVN Mary
2 SURN Tester
1 SEX F
1 ADOP Y
2 FAMC @F0016@
3 ADOP WIFE
1 FAMC @F0016@
2 _FREL birth
2 _MREL Adopted
1 CHAN
2 DATE 29 OCT 2016
3 TIME 16:27:59
0 @I0049@ INDI
1 NAME Martha /Tester/
2 TYPE Unknown
2 GIVN Martha
2 SURN Tester
1 SEX F
1 FAMC @F0016@
2 PEDI foster
1 CHAN
2 DATE 29 OCT 2016
3 TIME 16:27:59
0 @I0050@ INDI
1 NAME John /Tester/
2 TYPE aka
2 GIVN John
2 SURN Tester
1 SEX M
1 FAMC @F0016@
2 PEDI stepchild
1 CHAN
2 DATE 29 OCT 2016
3 TIME 16:27:59
0 @I0051@ INDI
1 NAME Mark /Tester/
2 GIVN Mark
2 SURN Tester
1 SEX M
1 FAMC @F0016@
2 PEDI Unknown
1 CHAN
2 DATE 29 OCT 2016
3 TIME 16:27:59
0 @F0000@ FAM
1 HUSB @I0039@
1 WIFE @I0036@
@@ -839,7 +1061,7 @@
1 CHIL @I0022@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0001@ FAM
1 HUSB @I0027@
1 WIFE @I0025@
@@ -850,7 +1072,7 @@
1 CHIL @I0039@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0002@ FAM
1 HUSB @I0022@
1 WIFE @I0038@
@@ -862,7 +1084,7 @@
1 CHIL @I0024@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0003@ FAM
1 HUSB @I0024@
1 WIFE @I0000@
@@ -879,7 +1101,7 @@
1 CHIL @I0010@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0004@ FAM
1 HUSB @I0006@
1 WIFE @I0026@
@@ -888,7 +1110,7 @@
2 DATE ABT 1910
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0005@ FAM
1 HUSB @I0012@
1 WIFE @I0023@
@@ -899,7 +1121,7 @@
1 CHIL @I0042@
1 CHAN
2 DATE 12 JUN 2016
3 TIME 09:27:35
3 TIME 14:27:35
0 @F0006@ FAM
1 HUSB @I0008@
1 WIFE @I0031@
@@ -911,7 +1133,7 @@
1 CHIL @I0014@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0007@ FAM
1 HUSB @I0015@
1 WIFE @I0013@
@@ -920,7 +1142,7 @@
2 DATE ABT 1920
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0008@ FAM
1 HUSB @I0033@
1 WIFE @I0041@
@@ -934,14 +1156,14 @@
1 CHIL @I0044@
1 CHAN
2 DATE 4 SEP 2016
3 TIME 15:14:33
3 TIME 20:14:33
0 @F0009@ FAM
1 HUSB @I0010@
1 WIFE @I0017@
1 CHIL @I0033@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0010@ FAM
1 HUSB @I0019@
1 WIFE @I0032@
@@ -952,7 +1174,7 @@
1 CHIL @I0035@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0011@ FAM
1 HUSB @I0003@
1 WIFE @I0028@
@@ -962,7 +1184,7 @@
2 PLAC Rønne, Bornholm, Denmark
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0012@ FAM
1 HUSB @I0018@
1 WIFE @I0034@
@@ -975,7 +1197,7 @@
1 CHIL @I0037@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0013@ FAM
1 HUSB @I0037@
1 WIFE @I0030@
@@ -991,20 +1213,49 @@
1 CHIL @I0002@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0014@ FAM
1 HUSB @I0010@
1 WIFE @I0016@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @F0016@ FAM
1 HUSB @I0044@
1 WIFE @I0045@
1 SLGS
2 DATE 22 FEB 2000
2 TEMP DENVE
2 PLAC Community Presbyterian Church, Danville, CA
2 ADDR
3 ADR2 Community Presbyterian Church, Danville, CA
2 STAT CLEARED
1 MARR
2 HUSB
3 AGE 45
2 WIFE
3 AGE 15
1 ENGA
2 TYPE They were engaged
1 EVEN Married by a clown in the buff
2 TYPE Alternate Marriage
1 EVEN
2 TYPE Alternate Marriage
1 NCHI 4
1 RFN RFN3333
1 FACT 7532951
2 TYPE License Number
1 FACT
2 TYPE Unknown
1 CHIL @I0046@
1 CHIL @I0047@
1 CHIL @I0048@
1 CHIL @I0049@
1 CHIL @I0050@
1 CHIL @I0051@
1 CHAN
2 DATE 4 SEP 2016
3 TIME 15:16:51
2 DATE 29 OCT 2016
3 TIME 16:27:59
0 @S0000@ SOUR
1 TITL Marriage Certificae
1 REPO @R0002@
@@ -1013,17 +1264,17 @@
1 NOTE @N0004@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @S0001@ SOUR
1 TITL Birth Certificate
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @S0002@ SOUR
1 TITL Birth Records
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @S0003@ SOUR
1 TITL Birth, Death and Marriage Records
1 REPO @R0002@
@@ -1032,25 +1283,33 @@
1 NOTE @N0005@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
3 TIME 07:35:26
0 @S0004@ SOUR
1 TITL findagrave.com
1 CHAN
2 DATE 4 JUN 2016
3 TIME 16:28:36
3 TIME 21:28:36
0 @S0005@ SOUR
1 TITL Import from imp_FTM_LINK.ged
1 REPO @R0000@
1 REPO @R0001@
1 CHAN
2 DATE 29 AUG 2016
3 TIME 14:51:48
3 TIME 19:51:48
0 @S0006@ SOUR
1 TITL Ohio Births, 1958-2002
1 REPO @R0004@
1 CHAN
2 DATE 29 AUG 2016
3 TIME 14:51:48
3 TIME 19:51:48
0 @S0007@ SOUR
1 AUTH The tester
1 PUBL Published when the test was written
1 ABBR TST
1 REPO @R0006@
1 CHAN
2 DATE 29 OCT 2016
3 TIME 16:20:39
0 @R0000@ REPO
1 NAME Business that produced the product: Ancestry.com
1 ADDR 360 W 4800 N, Provo, UT 84604
@@ -1108,6 +1367,8 @@
1 WWW http://www.tester_repo.com
1 NOTE @N0012@
1 NOTE @N0013@
0 @R0005@ REPO
0 @R0006@ REPO
0 @N0000@ NOTE Witness name: John Doe
1 CONT Witness comment: This is a simple test.
0 @N0001@ NOTE Witness name: No Name
@@ -1153,4 +1414,13 @@
1 CONT
1 CONT Only one phone number supported Lin
1 CONC e 87: 1 PHON 800-765-4321
0 @N0014@ NOTE ******************************************************************8
1 CONC 90123456789
1 CONT ******************************************************************89 123
1 CONC 456789
0 @N0015@ NOTE This should show up under the ASSO tag in Gedcom
0 @N0016@ NOTE ??? What is RESN???
0 @N0017@ NOTE A citation Note Source text
0 @N0018@ NOTE Another Citation Note
0 @N0019@ NOTE A bad photo for sure
0 TRLR
+1
View File
@@ -89,6 +89,7 @@
</object>
<object handle="_0000000900000009" change="1472500307" id="M5">
<file src="test.jpg" mime="image/jpeg" description="Multimedia link to linked form FTM style file"/>
<datestr val="6/4/2016 9:33:57 AM"/>
<noteref hlink="_0000001d0000001d"/>
<noteref hlink="_0000001e0000001e"/>
<noteref hlink="_0000001f0000001f"/>
+7 -1
View File
@@ -10,14 +10,20 @@
3 FAX (801) 705-7001
3 EMAIL help@ancestry.com
3 WWW http://www.ancestry.com
2 DATA FTM Source data
3 COPR Copyright 2999
2 DATE 1 JAN 1111
1 DEST GED55
1 DATE 01 MAR 2016
1 CHAR UTF-8
1 CHAR UTF-8
2 VERS 1.1
1 FILE D:\Family Tree Maker\imp_FTM_LINK.ged
1 SUBM @SUBM@
2 NAME The Tester
1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED
2 FORM Lineage-Linked
0 @SUBM@ SUBM
1 NAME The Subm /Tester/
1 ADDR 123 Main St., Winslow, PA, 12345
+67 -52
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-08-29" version="5.0.0-alpha1"/>
<created date="2016-10-23" version="5.0.0-alpha1"/>
<researcher>
<resname>The Subm /Tester/</resname>
<resaddr>123 Main St.</resaddr>
@@ -14,28 +14,31 @@
<resemail>mrstester@gmail.com</resemail>
</researcher>
</header>
<tags>
<tag handle="_0000000400000004" change="1" name="Imported" color="#000000000000" priority="0"/>
</tags>
<events>
<event handle="_0000000700000007" change="1472500308" id="E0000">
<event handle="_0000000800000008" change="1" id="E0000">
<type>Birth</type>
<dateval val="1954-12-29"/>
<place hlink="_0000000800000008"/>
<place hlink="_0000000900000009"/>
<attribute type="Phone" value="440-871-3400"/>
<attribute type="Phone" value="800-871-3400"/>
<attribute type="EMAIL" value="thetester@gmail.com"/>
<attribute type="FAX" value="440-123-4567"/>
<attribute type="WWW" value="http://thetester.com"/>
</event>
<event handle="_0000000c0000000c" change="1472500308" id="E0001">
<event handle="_0000000d0000000d" change="1" id="E0001">
<type>Residence</type>
<dateval val="1954-12-30"/>
<place hlink="_0000000e0000000e"/>
<place hlink="_0000000f0000000f"/>
<attribute type="Phone" value="440-871-3401"/>
<attribute type="EMAIL" value="mrstester@gmail.com"/>
<attribute type="FAX" value="440-321-4568"/>
<attribute type="WWW" value="http://mrstester.com"/>
<noteref hlink="_0000000d0000000d"/>
<noteref hlink="_0000000e0000000e"/>
</event>
<event handle="_0000001100000011" change="1472500308" id="E0002">
<event handle="_0000001200000012" change="1" id="E0002">
<type>Residence</type>
<dateval val="1964"/>
<attribute type="Phone" value="440-871-3402"/>
@@ -45,22 +48,23 @@
</event>
</events>
<people>
<person handle="_0000000600000006" change="1472500308" id="I0000">
<person handle="_0000000700000007" change="1" id="I0000">
<gender>U</gender>
<name type="Birth Name">
<first>The</first>
<surname>Tester</surname>
</name>
<eventref hlink="_0000000700000007" role="Primary"/>
<citationref hlink="_0000000900000009"/>
<eventref hlink="_0000000800000008" role="Primary"/>
<citationref hlink="_0000000a0000000a"/>
<tagref hlink="_0000000400000004"/>
</person>
<person handle="_0000000a0000000a" change="1472500308" id="I0001">
<person handle="_0000000b0000000b" change="1" id="I0001">
<gender>U</gender>
<name type="Birth Name">
<first>Mrs</first>
<surname>Tester</surname>
</name>
<eventref hlink="_0000000c0000000c" role="Primary"/>
<eventref hlink="_0000000d0000000d" role="Primary"/>
<address>
<street>123 Main St.</street>
<city>Winslow</city>
@@ -72,85 +76,91 @@
<url href="mrstester@gmail.com" type="E-mail"/>
<url href="440-321-4568" type="FAX"/>
<url href="http://mrstester.com" type="Web Home"/>
<noteref hlink="_0000000b0000000b"/>
<citationref hlink="_0000000f0000000f"/>
<noteref hlink="_0000000c0000000c"/>
<citationref hlink="_0000001000000010"/>
<tagref hlink="_0000000400000004"/>
</person>
<person handle="_0000001000000010" change="1472500308" id="I0002">
<person handle="_0000001100000011" change="1" id="I0002">
<gender>U</gender>
<name type="Birth Name">
<first>Tom</first>
<surname>Tester</surname>
</name>
<eventref hlink="_0000001100000011" role="Primary"/>
<citationref hlink="_0000001200000012"/>
<eventref hlink="_0000001200000012" role="Primary"/>
<citationref hlink="_0000001300000013"/>
<tagref hlink="_0000000400000004"/>
</person>
</people>
<citations>
<citation handle="_0000000900000009" change="1472500308" id="C0000">
<citation handle="_0000000a0000000a" change="1" id="C0000">
<confidence>2</confidence>
<sourceref hlink="_0000000300000003"/>
</citation>
<citation handle="_0000000f0000000f" change="1472500308" id="C0001">
<citation handle="_0000001000000010" change="1" id="C0001">
<confidence>2</confidence>
<sourceref hlink="_0000000300000003"/>
</citation>
<citation handle="_0000001200000012" change="1472500308" id="C0002">
<citation handle="_0000001300000013" change="1" id="C0002">
<confidence>2</confidence>
<sourceref hlink="_0000000300000003"/>
</citation>
</citations>
<sources>
<source handle="_0000000300000003" change="1472500308" id="S0000">
<source handle="_0000000300000003" change="1" id="S0000">
<stitle>Import from imp_FTM_LINK.ged</stitle>
<sauthor>The Tester</sauthor>
<srcattribute type="Approved system identification" value="FTM"/>
<srcattribute type="Version number of software product" value="Family Tree Maker (22.0.0.1410)"/>
<srcattribute type="Name of software product" value="Family Tree Maker for Windows"/>
<srcattribute type="Name of source data" value="FTM Source data"/>
<srcattribute type="Copyright of source data" value="Copyright 2999"/>
<srcattribute type="Generated By" value="Family Tree Maker for Windows Family Tree Maker (22.0.0.1410)"/>
<srcattribute type="Creation date of GEDCOM" value="2016-03-01"/>
<srcattribute type="Character set and version" value="UTF-8 1.1"/>
<srcattribute type="GEDCOM version" value="5.5"/>
<srcattribute type="GEDCOM form" value="LINEAGE-LINKED"/>
<srcattribute type="GEDCOM form" value="Lineage-Linked"/>
<reporef hlink="_0000000100000001" medium="Unknown"/>
<reporef hlink="_0000000400000004" medium="Unknown"/>
<reporef hlink="_0000000500000005" medium="Unknown"/>
</source>
<source handle="_0000001300000013" change="1472500308" id="S0006">
<source handle="_0000001400000014" change="1" id="S0006">
<stitle>Ohio Births, 1958-2002</stitle>
<reporef hlink="_0000001400000014" medium="Book"/>
<reporef hlink="_0000001500000015" medium="Book"/>
</source>
</sources>
<places>
<placeobj handle="_0000000800000008" change="1472500308" id="P0000" type="Street">
<placeobj handle="_0000000900000009" change="1" id="P0000" type="Street">
<ptitle>123 High St, Cleveland, Cuyahoga, Ohio, USA, 44140</ptitle>
<code>44140</code>
<pname value="123 High St"/>
<placeref hlink="_0000001a0000001a"/>
<placeref hlink="_0000001b0000001b"/>
</placeobj>
<placeobj handle="_0000000e0000000e" change="1472500308" id="P0001" type="Address">
<placeobj handle="_0000000f0000000f" change="1" id="P0001" type="Address">
<ptitle>123 Main St., Winslow, PA, 12345</ptitle>
<pname value="123 Main St., Winslow, PA, 12345"/>
<location street="123 Main St." city="Winslow" state="PA" postal="12345"/>
</placeobj>
<placeobj handle="_0000001700000017" change="1472500308" id="P0002" type="Country">
<placeobj handle="_0000001800000018" change="1" id="P0002" type="Country">
<ptitle>USA</ptitle>
<pname value="USA"/>
</placeobj>
<placeobj handle="_0000001800000018" change="1472500308" id="P0003" type="State">
<placeobj handle="_0000001900000019" change="1" id="P0003" type="State">
<ptitle>Ohio, USA</ptitle>
<pname value="Ohio"/>
<placeref hlink="_0000001700000017"/>
</placeobj>
<placeobj handle="_0000001900000019" change="1472500308" id="P0004" type="County">
<ptitle>Cuyahoga, Ohio, USA</ptitle>
<pname value="Cuyahoga"/>
<placeref hlink="_0000001800000018"/>
</placeobj>
<placeobj handle="_0000001a0000001a" change="1472500308" id="P0005" type="City">
<placeobj handle="_0000001a0000001a" change="1" id="P0004" type="County">
<ptitle>Cuyahoga, Ohio, USA</ptitle>
<pname value="Cuyahoga"/>
<placeref hlink="_0000001900000019"/>
</placeobj>
<placeobj handle="_0000001b0000001b" change="1" id="P0005" type="City">
<ptitle>Cleveland, Cuyahoga, Ohio, USA</ptitle>
<pname value="Cleveland"/>
<placeref hlink="_0000001900000019"/>
<placeref hlink="_0000001a0000001a"/>
</placeobj>
</places>
<repositories>
<repository handle="_0000000100000001" change="1472500308" id="R0000">
<repository handle="_0000000100000001" change="1" id="R0000">
<rname>Business that produced the product: Ancestry.com</rname>
<type>GEDCOM data</type>
<address>
@@ -161,7 +171,7 @@
<url href="help@ancestry.com" type="E-mail"/>
<url href="http://www.ancestry.com" type="Web Home"/>
</repository>
<repository handle="_0000000400000004" change="1472500308" id="R0001">
<repository handle="_0000000500000005" change="1" id="R0001">
<rname>SUBM (Submitter): (@SUBM@) The Subm /Tester/</rname>
<type>GEDCOM data</type>
<address>
@@ -174,9 +184,9 @@
<url href="mrstester@gmail.com" type="E-mail"/>
<url href="440-321-4568" type="FAX"/>
<url href="http://mrstester.com" type="Web Home"/>
<noteref hlink="_0000000500000005"/>
<noteref hlink="_0000000600000006"/>
</repository>
<repository handle="_0000001400000014" change="1472500308" id="R0002">
<repository handle="_0000001500000015" change="1" id="R0002">
<rname>Testers Repository</rname>
<type>Library</type>
<address>
@@ -186,40 +196,45 @@
<url href="tester_repo@osf.com" type="E-mail"/>
<url href="987-654-3210" type="FAX"/>
<url href="http://www.tester_repo.com" type="Web Home"/>
<noteref hlink="_0000001500000015"/>
<noteref hlink="_0000001600000016"/>
<noteref hlink="_0000001700000017"/>
</repository>
</repositories>
<notes>
<note handle="_0000000200000002" change="1472500308" id="N0000" type="GEDCOM import">
<note handle="_0000000200000002" change="1" id="N0000" type="GEDCOM import">
<text>Records not imported into HEAD (header):
Only one phone number supported Line 9: 3 PHON (800) 705-7000</text>
Only one phone number supported Line 9: 3 PHON (800) 705-7000
Line ignored as not understood Line 15: 2 DATE 1111-01-01
GEDCOM FORM should be in uppercase Line 26: 2 FORM Lineage-Linked</text>
<style name="fontface" value="Monospace">
<range start="0" end="144"/>
<range start="0" end="344"/>
</style>
</note>
<note handle="_0000000500000005" change="1472500308" id="N0001" type="GEDCOM import">
<note handle="_0000000600000006" change="1" id="N0001" type="GEDCOM import">
<text>Records not imported into SUBM (Submitter): (@SUBM@) The Subm /Tester/:
Only one phone number supported Line 29: 1 PHON 800-871-3401</text>
Only one phone number supported Line 35: 1 PHON 800-871-3401</text>
<style name="fontface" value="Monospace">
<range start="0" end="173"/>
</style>
</note>
<note handle="_0000000b0000000b" change="1472500308" id="N0002" type="Person Note">
<note handle="_0000000c0000000c" change="1" id="N0002" type="Person Note">
<text>Address with PHON,FAX,EMAIL,WWW. attached directly to person is not legal Gedcom, but allowed here.</text>
<tagref hlink="_0000000400000004"/>
</note>
<note handle="_0000000d0000000d" change="1472500308" id="N0003" type="Event Note">
<note handle="_0000000e0000000e" change="1" id="N0003" type="Event Note">
<text>Address as event is legal, with PHON,FAX,EMAIL,WWW</text>
<tagref hlink="_0000000400000004"/>
</note>
<note handle="_0000001500000015" change="1472500308" id="N0004" type="Repository Note">
<note handle="_0000001600000016" change="1" id="N0004" type="Repository Note">
<text>The repository record</text>
<tagref hlink="_0000000400000004"/>
</note>
<note handle="_0000001600000016" change="1472500308" id="N0005" type="GEDCOM import">
<note handle="_0000001700000017" change="1" id="N0005" type="GEDCOM import">
<text>Records not imported into REPO (repository) Gramps ID R0002:
Only one phone number supported Line 87: 1 PHON 800-765-4321</text>
Only one phone number supported Line 93: 1 PHON 800-765-4321</text>
<style name="fontface" value="Monospace">
<range start="0" end="162"/>
</style>
+156 -127
View File
@@ -3,182 +3,190 @@
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
<database xmlns="http://gramps-project.org/xml/1.7.1/">
<header>
<created date="2016-08-29" version="5.0.0-alpha1"/>
<created date="2016-10-23" version="5.0.0-alpha1"/>
<researcher>
<resname>John A. Tester</resname>
</researcher>
</header>
<tags>
<tag handle="_0000000500000005" change="1" name="Imported" color="#000000000000" priority="0"/>
</tags>
<events>
<event handle="_0000000e0000000e" change="1472505121" id="E0000">
<event handle="_0000000f0000000f" change="1" id="E0000">
<type>TEST</type>
<description>person</description>
</event>
<event handle="_0000000f0000000f" change="1472505121" id="E0001">
<event handle="_0000001000000010" change="1" id="E0001">
<type>Birth</type>
<dateval val="1900-06-15"/>
<place hlink="_0000001300000013"/>
<noteref hlink="_0000001000000010"/>
<place hlink="_0000001400000014"/>
<noteref hlink="_0000001100000011"/>
</event>
<event handle="_0000001400000014" change="1472505121" id="E0002">
<event handle="_0000001500000015" change="1" id="E0002">
<type>Death</type>
<noteref hlink="_0000001500000015"/>
<noteref hlink="_0000001600000016"/>
</event>
<event handle="_0000001d0000001d" change="1472505121" id="E0003">
<event handle="_0000001e0000001e" change="1" id="E0003">
<type>Who knows OBJE REFN TYPE</type>
<description>REFN</description>
</event>
<event handle="_0000002600000026" change="1472505121" id="E0004">
<event handle="_0000002700000027" change="1" id="E0004">
<type>Birth</type>
<dateval val="1901-06-15"/>
</event>
<event handle="_0000002700000027" change="1472505121" id="E0005">
<event handle="_0000002800000028" change="1" id="E0005">
<type>Death</type>
<dateval val="1975-07-05"/>
</event>
<event handle="_0000002d0000002d" change="1472505121" id="E0006">
<event handle="_0000002e0000002e" change="1" id="E0006">
<type>Birth</type>
<dateval val="1922-06-15"/>
</event>
<event handle="_0000002e0000002e" change="1472505121" id="E0007">
<event handle="_0000002f0000002f" change="1" id="E0007">
<type>Death</type>
<dateval val="1994-07-05"/>
</event>
<event handle="_0000003a0000003a" change="1472505122" id="E0008">
<event handle="_0000003b0000003b" change="1" id="E0008">
<type>TEST</type>
<description>family</description>
</event>
</events>
<people>
<person handle="_0000000d0000000d" change="979250406" id="I0001">
<person handle="_0000000e0000000e" change="979250406" id="I0001">
<gender>M</gender>
<name type="Birth Name">
<first>Tom</first>
<surname>Tester</surname>
</name>
<eventref hlink="_0000000e0000000e" role="Primary"/>
<eventref hlink="_0000000f0000000f" role="Primary"/>
<eventref hlink="_0000001400000014" role="Primary"/>
<eventref hlink="_0000001d0000001d" role="Primary"/>
<objref hlink="_0000001e0000001e"/>
<eventref hlink="_0000001000000010" role="Primary"/>
<eventref hlink="_0000001500000015" role="Primary"/>
<eventref hlink="_0000001e0000001e" role="Primary"/>
<objref hlink="_0000001f0000001f"/>
<attribute type="RIN" value="123456 Person"/>
<attribute type="REFN" value="98765 for PERSON"/>
<url href="http://homepages.rootsweb.com/~pmcbride/gedcom/55gctoc.htm" type="Web Home" description="GEDCOM 5.5 documentation web site"/>
<parentin hlink="_0000001600000016"/>
<noteref hlink="_0000001700000017"/>
<parentin hlink="_0000001700000017"/>
<noteref hlink="_0000001800000018"/>
<noteref hlink="_0000001900000019"/>
<noteref hlink="_0000001a0000001a"/>
<noteref hlink="_0000002000000020"/>
<citationref hlink="_0000001f0000001f"/>
<noteref hlink="_0000001b0000001b"/>
<noteref hlink="_0000002100000021"/>
<citationref hlink="_0000002000000020"/>
<tagref hlink="_0000000500000005"/>
</person>
<person handle="_0000002500000025" change="1472505121" id="I0002">
<person handle="_0000002600000026" change="1" id="I0002">
<gender>F</gender>
<name type="Birth Name">
<first>Mrs</first>
<surname>Tester</surname>
</name>
<eventref hlink="_0000002600000026" role="Primary"/>
<eventref hlink="_0000002700000027" role="Primary"/>
<parentin hlink="_0000001600000016"/>
<noteref hlink="_0000002800000028"/>
<noteref hlink="_0000002a0000002a"/>
<citationref hlink="_0000002900000029"/>
<eventref hlink="_0000002800000028" role="Primary"/>
<parentin hlink="_0000001700000017"/>
<noteref hlink="_0000002900000029"/>
<noteref hlink="_0000002b0000002b"/>
<citationref hlink="_0000002a0000002a"/>
<tagref hlink="_0000000500000005"/>
</person>
<person handle="_0000002b0000002b" change="1472505121" id="I0003">
<person handle="_0000002c0000002c" change="1" id="I0003">
<gender>M</gender>
<name type="Birth Name">
<first>Ed</first>
<surname>Tester</surname>
<nick>Eddie</nick>
<noteref hlink="_0000002c0000002c"/>
<noteref hlink="_0000002d0000002d"/>
</name>
<eventref hlink="_0000002d0000002d" role="Primary"/>
<eventref hlink="_0000002e0000002e" role="Primary"/>
<eventref hlink="_0000002f0000002f" role="Primary"/>
<lds_ord type="baptism">
<dateval val="-005-05-05"/>
<temple val="SLAKE"/>
<place hlink="_0000002f0000002f"/>
<noteref hlink="_0000003000000030"/>
<noteref hlink="_0000003300000033"/>
<citationref hlink="_0000003200000032"/>
<place hlink="_0000003000000030"/>
<noteref hlink="_0000003100000031"/>
<noteref hlink="_0000003400000034"/>
<citationref hlink="_0000003300000033"/>
</lds_ord>
<childof hlink="_0000001600000016"/>
<personref hlink="_0000003400000034" rel="">
<noteref hlink="_0000003500000035"/>
<childof hlink="_0000001700000017"/>
<personref hlink="_0000003500000035" rel="">
<noteref hlink="_0000003600000036"/>
</personref>
<noteref hlink="_0000003700000037"/>
<citationref hlink="_0000003600000036"/>
<noteref hlink="_0000003800000038"/>
<citationref hlink="_0000003700000037"/>
<tagref hlink="_0000000500000005"/>
</person>
<person handle="_0000003400000034" change="1472505121" id="I0004">
<person handle="_0000003500000035" change="1" id="I0004">
<gender>U</gender>
<name type="Birth Name">
<first>George</first>
<surname>Testee</surname>
<noteref hlink="_0000003800000038"/>
<noteref hlink="_0000003900000039"/>
</name>
<citationref hlink="_0000003900000039"/>
<citationref hlink="_0000003a0000003a"/>
<tagref hlink="_0000000500000005"/>
</person>
</people>
<families>
<family handle="_0000001600000016" change="1472505121" id="F0001">
<family handle="_0000001700000017" change="1" id="F0001">
<rel type="Unknown"/>
<father hlink="_0000000d0000000d"/>
<mother hlink="_0000002500000025"/>
<eventref hlink="_0000003a0000003a" role="Family"/>
<childref hlink="_0000002b0000002b"/>
<noteref hlink="_0000003d0000003d"/>
<father hlink="_0000000e0000000e"/>
<mother hlink="_0000002600000026"/>
<eventref hlink="_0000003b0000003b" role="Family"/>
<childref hlink="_0000002c0000002c"/>
<noteref hlink="_0000003e0000003e"/>
<noteref hlink="_0000004300000043"/>
<citationref hlink="_0000003c0000003c"/>
<citationref hlink="_0000004200000042"/>
<noteref hlink="_0000003f0000003f"/>
<noteref hlink="_0000004400000044"/>
<citationref hlink="_0000003d0000003d"/>
<citationref hlink="_0000004300000043"/>
<tagref hlink="_0000000500000005"/>
</family>
</families>
<citations>
<citation handle="_0000001f0000001f" change="1472505121" id="C0000">
<citation handle="_0000002000000020" change="1" id="C0000">
<confidence>2</confidence>
<sourceref hlink="_0000000400000004"/>
</citation>
<citation handle="_0000002300000023" change="1472505121" id="C0001">
<citation handle="_0000002400000024" change="1" id="C0001">
<confidence>2</confidence>
<sourceref hlink="_0000000400000004"/>
</citation>
<citation handle="_0000002900000029" change="1472505121" id="C0002">
<citation handle="_0000002a0000002a" change="1" id="C0002">
<confidence>2</confidence>
<sourceref hlink="_0000000400000004"/>
</citation>
<citation handle="_0000003200000032" change="1472505121" id="C0003">
<citation handle="_0000003300000033" change="1" id="C0003">
<confidence>2</confidence>
<sourceref hlink="_0000003100000031"/>
<sourceref hlink="_0000003200000032"/>
</citation>
<citation handle="_0000003600000036" change="1472505121" id="C0004">
<citation handle="_0000003700000037" change="1" id="C0004">
<confidence>2</confidence>
<sourceref hlink="_0000000400000004"/>
</citation>
<citation handle="_0000003900000039" change="1472505121" id="C0005">
<citation handle="_0000003a0000003a" change="1" id="C0005">
<confidence>2</confidence>
<sourceref hlink="_0000000400000004"/>
</citation>
<citation handle="_0000003c0000003c" change="1472505122" id="C0006">
<citation handle="_0000003d0000003d" change="1" id="C0006">
<confidence>2</confidence>
<sourceref hlink="_0000003b0000003b"/>
<sourceref hlink="_0000003c0000003c"/>
</citation>
<citation handle="_0000004200000042" change="1472505122" id="C0007">
<citation handle="_0000004300000043" change="1" id="C0007">
<dateval val="1900-12-31"/>
<page>42</page>
<confidence>0</confidence>
<noteref hlink="_0000003f0000003f"/>
<noteref hlink="_0000004000000040"/>
<noteref hlink="_0000004100000041"/>
<sourceref hlink="_0000003b0000003b"/>
<noteref hlink="_0000004200000042"/>
<sourceref hlink="_0000003c0000003c"/>
</citation>
</citations>
<sources>
<source handle="_0000000400000004" change="1472505121" id="S0000">
<source handle="_0000000400000004" change="1" id="S0000">
<stitle>Import from imp_notetest.ged</stitle>
<spubinfo>Tom Tester 2016</spubinfo>
<noteref hlink="_0000000200000002"/>
<noteref hlink="_0000000500000005"/>
<noteref hlink="_0000000600000006"/>
<noteref hlink="_0000000700000007"/>
<srcattribute type="Approved system identification" value="GEDitCOM"/>
<srcattribute type="Name of software product" value="GEDitCOM"/>
<srcattribute type="Version number of software product" value="2.9.4"/>
@@ -192,71 +200,72 @@
<srcattribute type="Submission: Submitter" value="@SUBMITTER@"/>
<srcattribute type="Submission: Family file" value="NameOfFamilyFile"/>
<reporef hlink="_0000000100000001" medium="Unknown"/>
<reporef hlink="_0000000b0000000b" medium="Unknown"/>
<reporef hlink="_0000000c0000000c" medium="Unknown"/>
</source>
<source handle="_0000003100000031" change="1472505121" id="SOURCE1">
<source handle="_0000003200000032" change="1" id="SOURCE1">
<stitle>@SOURCE1@</stitle>
</source>
<source handle="_0000003b0000003b" change="1472505122" id="S0001">
<source handle="_0000003c0000003c" change="1" id="S0001">
<stitle>Note Test file Source: Tester</stitle>
<noteref hlink="_0000004600000046"/>
<noteref hlink="_0000004700000047"/>
<reporef hlink="_0000004400000044" medium="Book">
<noteref hlink="_0000004500000045"/>
<noteref hlink="_0000004800000048"/>
<reporef hlink="_0000004500000045" medium="Book">
<noteref hlink="_0000004600000046"/>
</reporef>
</source>
</sources>
<places>
<placeobj handle="_0000001300000013" change="1472505121" id="P0000" type="Address">
<placeobj handle="_0000001400000014" change="1" id="P0000" type="Address">
<ptitle>123 main, Norwalk, Ohio, USA</ptitle>
<pname value="123 main, Norwalk, Ohio, USA"/>
<location street="123 main, Norwalk, Ohio, USA"/>
<noteref hlink="_0000001100000011"/>
<noteref hlink="_0000001200000012"/>
<noteref hlink="_0000001300000013"/>
</placeobj>
<placeobj handle="_0000002f0000002f" change="1472505121" id="P0001" type="Unknown">
<placeobj handle="_0000003000000030" change="1" id="P0001" type="Unknown">
<ptitle>Salt Lake City</ptitle>
<pname value="Salt Lake City"/>
</placeobj>
</places>
<objects>
<object handle="_0000001e0000001e" change="979250406" id="M1">
<object handle="_0000001f0000001f" change="979250406" id="M1">
<file src="photo.jpg" mime="image/jpeg" description="Tom Tester's photo"/>
<attribute type="Media-Type" value="Film"/>
<attribute type="RIN" value="123456"/>
<attribute type="REFN" value="98765">
<noteref hlink="_0000002200000022"/>
<noteref hlink="_0000002300000023"/>
</attribute>
<noteref hlink="_0000002400000024"/>
<citationref hlink="_0000002300000023"/>
<noteref hlink="_0000002500000025"/>
<citationref hlink="_0000002400000024"/>
<tagref hlink="_0000000500000005"/>
</object>
</objects>
<repositories>
<repository handle="_0000000100000001" change="1472505121" id="R0000">
<repository handle="_0000000100000001" change="1" id="R0000">
<rname>Business that produced the product: RSAC Software</rname>
<type>GEDCOM data</type>
</repository>
<repository handle="_0000000b0000000b" change="1472505121" id="R0001">
<repository handle="_0000000c0000000c" change="1" id="R0001">
<rname>SUBM (Submitter): (@SUBMITTER@) John A. Tester</rname>
<type>GEDCOM data</type>
<address>
</address>
<noteref hlink="_0000000900000009"/>
<noteref hlink="_0000000a0000000a"/>
<noteref hlink="_0000000c0000000c"/>
<noteref hlink="_0000000b0000000b"/>
<noteref hlink="_0000000d0000000d"/>
</repository>
<repository handle="_0000004400000044" change="1472505122" id="R0002">
<repository handle="_0000004500000045" change="1" id="R0002">
<rname>The Testers repository</rname>
<type>Library</type>
<noteref hlink="_0000004800000048"/>
<noteref hlink="_0000004900000049"/>
<noteref hlink="_0000004a0000004a"/>
</repository>
</repositories>
<notes>
<note handle="_0000000200000002" change="1472505121" id="N0000" type="Source Note">
<note handle="_0000000200000002" change="1" id="N0000" type="Source Note">
<text>Header note</text>
</note>
<note handle="_0000000300000003" change="1472505121" id="N0001" type="GEDCOM import">
<note handle="_0000000300000003" change="1" id="N0001" type="GEDCOM import">
<text>Records not imported into HEAD (header):
Line ignored as not understood Line 18: 2 TEST Header Note
@@ -266,13 +275,14 @@ Skipped subordinate line Line 20:
<range start="0" end="327"/>
</style>
</note>
<note handle="_0000000500000005" change="1472505121" id="N0002" type="Source Note">
<note handle="_0000000600000006" change="1" id="N0002" type="Source Note">
<text>Submission Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000000600000006" change="979250406" id="N0003" type="Source Note">
<note handle="_0000000700000007" change="979250406" id="N0003" type="Source Note">
<text>Submission xref note</text>
</note>
<note handle="_0000000700000007" change="1472505121" id="N0004" type="GEDCOM import">
<note handle="_0000000800000008" change="1" id="N0004" type="GEDCOM import">
<text>Records not imported into Top Level:
Line ignored as not understood Line 26: 2 TEST Submission Note
@@ -283,7 +293,7 @@ Line ignored as not understood Line 29:
<range start="0" end="425"/>
</style>
</note>
<note handle="_0000000800000008" change="1472505121" id="N0005" type="GEDCOM import">
<note handle="_0000000900000009" change="1" id="N0005" type="GEDCOM import">
<text>Records not imported into NOTE Gramps ID N0003:
Tag recognized but not supported Line 32: 1 RIN Submission Note RIN
@@ -295,13 +305,14 @@ Line ignored as not understood Line 39:
<range start="0" end="586"/>
</style>
</note>
<note handle="_0000000900000009" change="1472505121" id="N0006" type="Repository Note">
<note handle="_0000000a0000000a" change="1" id="N0006" type="Repository Note">
<text>Submitter Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000000a0000000a" change="1472505121" id="N0007" type="Repository Note">
<note handle="_0000000b0000000b" change="1" id="N0007" type="Repository Note">
<text>Submitter xref note</text>
</note>
<note handle="_0000000c0000000c" change="1472505121" id="N0008" type="GEDCOM import">
<note handle="_0000000d0000000d" change="1" id="N0008" type="GEDCOM import">
<text>Records not imported into SUBM (Submitter): (@SUBMITTER@) John A. Tester:
Line ignored as not understood Line 43: 2 TEST Submitter Note
@@ -312,37 +323,44 @@ Line ignored as not understood Line 46:
<range start="0" end="460"/>
</style>
</note>
<note handle="_0000001000000010" change="1472505121" id="N0009" type="Event Note">
<note handle="_0000001100000011" change="1" id="N0009" type="Event Note">
<text>Birth Event note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000001100000011" change="1472505121" id="N0010" type="Place Note">
<note handle="_0000001200000012" change="1" id="N0010" type="Place Note">
<text>Location Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000001200000012" change="1472505121" id="N0011" type="Place Note">
<note handle="_0000001300000013" change="1" id="N0011" type="Place Note">
<text>Location Note 2</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000001500000015" change="1472505121" id="N0012" type="Event Note">
<note handle="_0000001600000016" change="1" id="N0012" type="Event Note">
<text>Death Event xref note</text>
</note>
<note handle="_0000001700000017" change="1472505121" id="N0013" type="Person Note">
<note handle="_0000001800000018" change="1" id="N0013" type="Person Note">
<text>FAMS Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000001800000018" change="1472505121" id="N0014" type="Person Note">
<note handle="_0000001900000019" change="1" id="N0014" type="Person Note">
<text>FAMS Note 2</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000001900000019" change="1472505121" id="N0015" type="Person Note">
<note handle="_0000001a0000001a" change="1" id="N0015" type="Person Note">
<text>Tom Tester xref note</text>
</note>
<note handle="_0000001a0000001a" change="1472505121" id="N0016" type="Person Note">
<note handle="_0000001b0000001b" change="1" id="N0016" type="Person Note">
<text>Tom Tester Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000001b0000001b" change="1472505121" id="N0017" type="Media Note">
<note handle="_0000001c0000001c" change="1" id="N0017" type="Media Note">
<text>Media Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000001c0000001c" change="979250406" id="N0018" type="Media Note">
<note handle="_0000001d0000001d" change="979250406" id="N0018" type="Media Note">
<text>Media xref note</text>
</note>
<note handle="_0000002000000020" change="1472505121" id="N0019" type="GEDCOM import">
<note handle="_0000002100000021" change="1" id="N0019" type="GEDCOM import">
<text>Records not imported into INDI (individual) Gramps ID I0001:
Empty note ignored Line 54: 2 NOTE
@@ -369,7 +387,7 @@ Skipped subordinate line Line 91:
<range start="0" end="2009"/>
</style>
</note>
<note handle="_0000002100000021" change="1472505121" id="N0020" type="GEDCOM import">
<note handle="_0000002200000022" change="1" id="N0020" type="GEDCOM import">
<text>Records not imported into NOTE Gramps ID N0018:
Tag recognized but not supported Line 103: 1 RIN 123456
@@ -383,10 +401,10 @@ Skipped subordinate line Line 112:
<range start="0" end="741"/>
</style>
</note>
<note handle="_0000002200000022" change="1472505121" id="N0021" type="REFN-TYPE">
<note handle="_0000002300000023" change="1" id="N0021" type="REFN-TYPE">
<text>Who knows REFN TYPE</text>
</note>
<note handle="_0000002400000024" change="1472505121" id="N0022" type="GEDCOM import">
<note handle="_0000002500000025" change="1" id="N0022" type="GEDCOM import">
<text>Records not imported into OBJE (multi-media object) Gramps ID M1:
Could not import photo.jpg Line 114: 1 FILE photo.jpg</text>
@@ -394,10 +412,11 @@ Could not import photo.jpg Line 114:
<range start="0" end="164"/>
</style>
</note>
<note handle="_0000002800000028" change="979250406" id="N0023" type="Person Note">
<note handle="_0000002900000029" change="979250406" id="N0023" type="Person Note">
<text>Family Spouse reference Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000002a0000002a" change="1472505121" id="N0024" type="GEDCOM import">
<note handle="_0000002b0000002b" change="1" id="N0024" type="GEDCOM import">
<text>Records not imported into INDI (individual) Gramps ID I0002:
Empty note ignored Line 132: 2 NOTE
@@ -406,19 +425,22 @@ Skipped subordinate line Line 133:
<range start="0" end="248"/>
</style>
</note>
<note handle="_0000002c0000002c" change="979250406" id="N0025" type="General">
<note handle="_0000002d0000002d" change="979250406" id="N0025" type="General">
<text>Name note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000003000000030" change="1472505121" id="N0026" type="LDS Note">
<note handle="_0000003100000031" change="1" id="N0026" type="LDS Note">
<text>Place note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000003300000033" change="1472505122" id="N0027" type="LDS Note">
<note handle="_0000003400000034" change="1" id="N0027" type="LDS Note">
<text>LDS xref note</text>
</note>
<note handle="_0000003500000035" change="979250406" id="N0028" type="Association Note">
<note handle="_0000003600000036" change="979250406" id="N0028" type="Association Note">
<text>Association link note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000003700000037" change="1472505121" id="N0029" type="GEDCOM import">
<note handle="_0000003800000038" change="1" id="N0029" type="GEDCOM import">
<text>Records not imported into INDI (individual) Gramps ID I0003:
Empty note ignored Line 141: 2 NOTE
@@ -430,25 +452,29 @@ Skipped subordinate line Line 168:
<range start="0" end="538"/>
</style>
</note>
<note handle="_0000003800000038" change="979250406" id="N0030" type="General">
<note handle="_0000003900000039" change="979250406" id="N0030" type="General">
<text>Just for association</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000003d0000003d" change="1472505122" id="N0031" type="Family Note">
<note handle="_0000003e0000003e" change="1" id="N0031" type="Family Note">
<text>Family xref note</text>
</note>
<note handle="_0000003e0000003e" change="979250406" id="N0032" type="Family Note">
<note handle="_0000003f0000003f" change="979250406" id="N0032" type="Family Note">
<text>Family note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000003f0000003f" change="1472505122" id="N0033" type="Citation">
<note handle="_0000004000000040" change="1" id="N0033" type="Citation">
<text>Citation Data Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000004000000040" change="1472505122" id="N0034" type="Source text">
<note handle="_0000004100000041" change="1" id="N0034" type="Source text">
<text>A sample text from a source of this family</text>
</note>
<note handle="_0000004100000041" change="979250406" id="N0035" type="Citation">
<note handle="_0000004200000042" change="979250406" id="N0035" type="Citation">
<text>A note this citation is on the FAMILY record.</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000004300000043" change="1472505122" id="N0036" type="GEDCOM import">
<note handle="_0000004400000044" change="1" id="N0036" type="GEDCOM import">
<text>Records not imported into FAM (family) Gramps ID F0001:
Line ignored as not understood Line 183: 2 TEST Family Note
@@ -461,13 +487,15 @@ Line ignored as not understood Line 196:
<range start="0" end="645"/>
</style>
</note>
<note handle="_0000004500000045" change="979250406" id="N0037" type="Repository Reference Note">
<note handle="_0000004600000046" change="979250406" id="N0037" type="Repository Reference Note">
<text>A short note about the repository link.</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000004600000046" change="979250406" id="N0038" type="Source Note">
<note handle="_0000004700000047" change="979250406" id="N0038" type="Source Note">
<text>note embedded in the SOURCE Record</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000004700000047" change="1472505122" id="N0039" type="GEDCOM import">
<note handle="_0000004800000048" change="1" id="N0039" type="GEDCOM import">
<text>Records not imported into SOUR (source) Gramps ID S0001:
Line ignored as not understood Line 206: 1 TEST source
@@ -479,10 +507,11 @@ Skipped subordinate line Line 215:
<range start="0" end="524"/>
</style>
</note>
<note handle="_0000004800000048" change="1472505122" id="N0040" type="Repository Note">
<note handle="_0000004900000049" change="1" id="N0040" type="Repository Note">
<text>Repository Note</text>
<tagref hlink="_0000000500000005"/>
</note>
<note handle="_0000004900000049" change="1472505122" id="N0041" type="GEDCOM import">
<note handle="_0000004a0000004a" change="1" id="N0041" type="GEDCOM import">
<text>Records not imported into REPO (repository) Gramps ID R0002:
Line ignored as not understood Line 223: 1 TEST Repo
+197 -31
View File
@@ -1,43 +1,82 @@
0 HEAD
1 SOUR Gramps
1 SOUR LEGACY
2 VERS 3.3.0
2 NAME Gramps
2 NAME LEGACY
1 DATE 27 DEC 2010
2 TIME 15:35:24
1 SUBM @SUBM@
1 FILE gramps33/example/gedcom/sample.ged
1 SUBN @SUBN@
1 FILE sample.ged
1 COPR Copyright (c) 2010 Alex Roitman,,,.
1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED
2 FORM NOT LINEAGE-LINKED
1 CHAR UTF-8
2 VERS 1.1
1 LANG French
0 @SUBM@ SUBM
1 NAME Alex Roitman,,,
1 ADDR Not Provided
2 CONT Not Provided
2 ADR1 Not Provided
2 NOTE No address provided (note not supported)
0 @SUBN@ SUBN
1 TEMP Mormon Temple
1 ANCE 4
1 DESC 4
1 ORDI Yes
0 @F3@ FAM
1 HUSB @I24@
1 WIFE @I0@
1 MARR
2 TYPE Marriage of Gustaf Smith, Sr. and Anna Hansdotter
2 DATE 27 NOV 1885
2 PLAC Rønne, Bornholm, Denmark
1 CHIL @I26@
1 CHIL @I23@
1 CHIL @I21@
1 CHIL @I8@
1 CHIL @I15@
1 CHIL @I20@
1 CHIL @I10@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35
2 SOUR Not really allowed here
1 RIN 987456321
1 OBJE
2 TITL No filename for this one
0 @I0@ INDI
1 NAME Anna /Hansdotter/
2 GIVN Anna
2 SURN Hansdotter
2 SPFX Vrow
2 SURN Smith
2 _AKA Anna Smith
2 _AKA Hanna
2 NOTE Hans daughter? N0000
1 SEX F
1 BIRT
2 TYPE Birth of Anna Hansdotter
2 DATE 2 OCT 1864
2 DATE EST 2 OCT 1864
2 PLAC Löderup, Malmöhus Län, Sweden
1 DEAT
2 TYPE Death of Anna Hansdotter
2 DATE 29 SEP 1945
2 PLAC Sparks, Washoe Co., NV
2 NOTE Her eulogy was great! N0001
1 FAMS @F3@
1 CHAN
2 DATE 21 DEC 2007
2 DATE 21 DEC 1900
3 TIME 01:35:26
1 NOTE Inline note should get ID N0002
1 _PHOTO @M1@
0 @I1@ INDI
1 NAME Keith Lloyd /Smith/
2 GIVN Keith Lloyd
2 SURN Smith
2 NOTE @N7@
1 SEX M
1 BIRT
2 TYPE Birth of Keith Lloyd Smith
@@ -47,6 +86,7 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 NOTE Keith Lloyd Smith inline N0003
0 @I10@ INDI
1 NAME Hans Peter /Smith/
2 GIVN Hans Peter
@@ -66,6 +106,7 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 NOTE Hans Peter Smith inline N0004
0 @I11@ INDI
1 NAME Hanna /Smith/
2 GIVN Hanna
@@ -79,6 +120,7 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 NOTE Hanna Smith inline N0005
0 @I12@ INDI
1 NAME Herman Julius /Nielsen/
2 GIVN Herman Julius
@@ -95,6 +137,7 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 NOTE Herman Julius Nielsen N0006
0 @I13@ INDI
1 NAME Evelyn /Michaels/
2 GIVN Evelyn
@@ -107,10 +150,13 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 NOTE Evelyn Michaels N0007
0 @I14@ INDI
1 NAME Marjorie Lee /Smith/
2 GIVN Marjorie Lee
2 SURN Smith
1 NAME Margie
2 TYPE Nickname
1 SEX F
1 BIRT
2 TYPE Birth of Marjorie Lee Smith
@@ -151,6 +197,16 @@
2 TYPE Death of Jennifer Anderson
2 DATE 29 MAY 1985
2 PLAC San Francisco, San Francisco Co., CA
1 RESI
2 DATE 1980
2 ADDR 459 Main St., The Village, San Francisco, CA, USA
3 ADR1 456 Main St
3 ADR1 456 Main St again
3 ADR2 The Village
3 CITY San Francisco
3 CTRY USA
3 PHON 555-666-7777
3 STAE CA
1 FAMS @F14@
1 CHAN
2 DATE 21 DEC 2007
@@ -185,6 +241,11 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 SSN 987-555-4444
2 TYPE first generaton
2 SOUR @S999@
3 PAGE SSN docs pg 999
2 NOTE Person Attribute Note on SSN
0 @I19@ INDI
1 NAME Eric Lloyd /Smith/
2 GIVN Eric Lloyd
@@ -246,18 +307,26 @@
2 TYPE Birth of Hjalmar Smith
2 DATE 31 JAN 1893
2 PLAC Rønne, Bornholm, Denmark
1 BIRT Y
1 DEAT
2 TYPE Death of Hjalmar Smith
2 DATE 25 SEP 1894
2 PLAC Rønne, Bornholm, Denmark
1 DEAT Y
1 FAMC @F3@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 ALIA @I22@
1 ALIA James /Smith/
1 NAME Jimmy Smith
1 TITL Sir Jimmy Smith
2 DATE 5 OCT 1874
2 PLAC Rønne, Bornholm, Denmark
0 @I22@ INDI
1 NAME Martin /Smith/
2 GIVN Martin
2 SURN Smith
2 GIVN Martin
1 SEX M
1 BIRT
2 TYPE Birth of Martin Smith
@@ -275,17 +344,29 @@
1 FAMS @F2@
1 NOTE @N0002@
1 CHAN
1 RESN locked
2 DATE 21 DEC 2007
3 TIME 01:35:26
0 @I23@ INDI
1 NAME Astrid Shermanna /Augusta/
2 GIVN Astrid Shermanna
2 SURN Augusta
1 NAME Star /Augusta/
2 GIVN Star
2 SURN Augusta
2 TYPE AKA
2 DATE FROM 1889 TO 1898
1 NAME Astrid Shermanna Augusta /Smith/
2 GIVN Astrid Shermanna Augusta
2 SURN Smith
2 TYPE MARRIED
2 NPFX Dr.
1 SEX F
1 BIRT
2 TYPE Birth of Astrid Shermanna Augusta Smith
2 DATE 31 JAN 1889
2 PLAC Rønne, Bornholm, Denmark
2 FAMC @F3@
1 DEAT
2 TYPE Death of Astrid Shermanna Augusta Smith
2 DATE 21 DEC 1963
@@ -318,14 +399,21 @@
2 DATE 7 DEC 1862
2 PLAC Gladsax, Kristianstad Län, Sweden
1 FAMC @F2@
2 NOTE A FAMC note
2 PEDI birth
2 SOUR @S2@
1 FAMS @F3@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 ASSO @I23@
2 RELA Friend
2 SOUR @S2@
0 @I25@ INDI
1 NAME Marta /Ericsdotter/
2 GIVN Marta
2 SURN Ericsdotter
2 _MARN Smith
1 SEX F
1 BIRT
2 TYPE Birth of Marta Ericsdotter
@@ -335,6 +423,20 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 FACT Housekeeper
2 TYPE Skills
1 CONL
2 TEMP STOCK code
2 DATE 1790
1 ENDL
2 TEMP Stockholm
2 DATE 1795
1 SLGC
2 TEMP Stockholm, Sweden
2 DATE 1796
2 PLAC Sweden
3 FORM Country
2 FAMC @F1@
0 @I26@ INDI
1 NAME Kirsti Marie /Smith/
2 GIVN Kirsti Marie
@@ -360,7 +462,7 @@
1 SEX M
1 BIRT
2 TYPE Birth of Ingeman Smith
2 DATE ABT 1770
2 DATE ABT @#DGREGORIAN@ 1770
2 PLAC Sweden
1 FAMS @F1@
1 CHAN
@@ -403,11 +505,13 @@
1 NAME Magnes /Smith/
2 GIVN Magnes
2 SURN Smith
1 SEX M
1 SSN 987-654-3210
1 SEX X
1 BIRT
2 TYPE Birth of Magnes Smith
2 DATE 6 OCT 1858
2 PLAC Simrishamn, Kristianstad Län, Sweden
2 RIN 789654123
1 DEAT
2 TYPE Death of Magnes Smith
2 DATE 20 FEB 1910
@@ -426,6 +530,8 @@
2 TYPE Birth of Janice Ann Adams
2 DATE 26 AUG 1965
2 PLAC Fremont, Alameda Co., CA
2 CAUS fooling around
3 SOUR @S0@
1 OCCU Retail Manager
1 _DEG
2 TYPE Business Management
@@ -495,6 +601,8 @@
1 NAME Lars Peter /Smith/
2 GIVN Lars Peter
2 SURN Smith
2 _ADPN Jones
2 _ADPN Pete Jones
1 SEX M
1 BIRT
2 TYPE Birth of Lars Peter Smith
@@ -532,6 +640,8 @@
2 GIVN Edwin Michael
2 SURN Smith
2 SOUR @S1@
3 DATA
4 TEXT Record for Edwin Michael Smith
1 SEX M
1 BIRT
2 TYPE Birth of Edwin Michael Smith
@@ -648,7 +758,7 @@
1 SEX M
1 BIRT
2 TYPE Birth of Edwin Willard
2 DATE ABT 1886
2 DATE BET @#DHEBREW@ AAV 1886 AND @#DHEBREW@ ELUL 1897
1 FAMS @F4@
1 CHAN
2 DATE 21 DEC 2007
@@ -706,12 +816,19 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 RESI At the boarding school
2 DATE FROM @#DGREGORIAN@ 1873 TO 1878
2 PLAC Oronoko, Berrien, Michigan, USA
1 RESI At the hebrew boarding school
2 DATE FROM 1873 TO @#DHEBREW@ 1878
2 PLAC Shemps
3 FORM home
0 @F0@ FAM
1 HUSB @I39@
1 WIFE @I36@
1 MARR
2 TYPE Marriage of Martin Smith and Elna Jefferson
2 DATE ABT 1816
2 DATE BET @#DGREGORIAN@ 1816 AND 1817
2 PLAC Gladsax, Kristianstad Län, Sweden
1 CHIL @I11@
1 CHIL @I7@
@@ -725,8 +842,12 @@
1 WIFE @I25@
1 MARR
2 TYPE Marriage of Ingeman Smith and Marta Ericsdotter
2 DATE ABT 1790
2 DATE BET 1789 AND @#DHEBREW@ 1790
2 PLAC Sweden
2 HUSB
3 AGE 17
2 WIFE
3 AGE 18
1 CHIL @I39@
1 CHAN
2 DATE 21 DEC 2007
@@ -739,9 +860,11 @@
2 DATE 12 JUL 1986
2 PLAC Woodland, Yolo Co., CA
1 CHIL @I35@
2 _STAT
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 _STAT
0 @F11@ FAM
1 HUSB @I3@
1 WIFE @I28@
@@ -749,9 +872,20 @@
2 TYPE Marriage of Magnes Smith and Anna Streiffert
2 DATE 24 AUG 1884
2 PLAC Rønne, Bornholm, Denmark
3 MAP
4 LATI N55.1010
4 LONG E14.7083
3 OBJE
4 FILE Magnes&Anna_smiths_marr_cert.jpg
3 SOUR @S0@
2 OBJE
3 FILE Magnes&Anna_smiths_marr_cert.jpg
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 EVEN Celebration
2 TYPE MARB
2 DATE 24 AUG 1883
0 @F12@ FAM
1 HUSB @I18@
1 WIFE @I34@
@@ -765,6 +899,11 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 SLGS
2 PLAC Sparks, Washoe Co., NV
1 NCHI 2
1 OBJE
2 FILE John&Alice_smiths_marr_cert.jpg
0 @F13@ FAM
1 HUSB @I37@
1 WIFE @I30@
@@ -772,10 +911,18 @@
2 TYPE Marriage of Edwin Michael Smith and Janice Ann Adams
2 DATE 27 MAY 1995
2 PLAC San Ramon, Conta Costa Co., CA
2 _WITN @I18@
3 TYPE WITNESS_OF_MARRIAGE
1 ENGA
2 TYPE Engagement of Edwin Michael Smith and Janice Ann Adams
2 DATE 5 OCT 1994
2 TIME 2:00pm
2 AGNC Lovely ring presentation
2 _WITN George Smorge
2 _PRIV
2 NOTE Description: Engagement of Edwin Michael Smith and Janice Ann Adams
2 PLAC San Francisco, San Francisco Co., CA
2 _UID 123456
1 CHIL @I5@
1 CHIL @I2@
1 CHAN
@@ -787,35 +934,20 @@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 EVEN Common law marriage
2 TYPE Civil
0 @F2@ FAM
1 HUSB @I22@
1 WIFE @I38@
1 MARR
2 TYPE Marriage of Martin Smith and Kerstina Hansdotter
2 DATE ABT 1856
2 DATE FROM @#DGREGORIAN@ 1856 TO @#DGREGORIAN@ 1857
1 CHIL @I3@
1 CHIL @I9@
1 CHIL @I24@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
0 @F3@ FAM
1 HUSB @I24@
1 WIFE @I0@
1 MARR
2 TYPE Marriage of Gustaf Smith, Sr. and Anna Hansdotter
2 DATE 27 NOV 1885
2 PLAC Rønne, Bornholm, Denmark
1 CHIL @I26@
1 CHIL @I23@
1 CHIL @I21@
1 CHIL @I8@
1 CHIL @I15@
1 CHIL @I20@
1 CHIL @I10@
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
0 @F4@ FAM
1 HUSB @I6@
1 WIFE @I26@
@@ -850,7 +982,7 @@
0 @F7@ FAM
1 HUSB @I15@
1 WIFE @I13@
1 MARR
1 MARR Civil Union
2 TYPE Marriage of Gus Smith and Evelyn Michaels
2 DATE ABT 1920
1 CHAN
@@ -866,12 +998,15 @@
1 CHIL @I19@
1 CHIL @I1@
1 CHIL @I29@
2 ADOP
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 ADDR 123 Main st, Grantville, Virginia, USA
0 @F9@ FAM
1 HUSB @I10@
1 WIFE @I17@
1 MARR Unmarried
1 CHIL @I33@
1 CHAN
2 DATE 21 DEC 2007
@@ -887,11 +1022,16 @@
3 TIME 01:35:26
0 @S1@ SOUR
1 TITL Birth Certificate
1 REPO Invalid REPO Name
2 NOTE Invalid REPO (Name instead of xref)
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
1 TEXT Source text of Birth cert
0 @S2@ SOUR
1 TITL Birth Records
1 REPO
2 NOTE Invalid REPO (no name)
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
@@ -901,9 +1041,15 @@
2 CALN CA-123-LL-456_Num/ber
3 MEDI Film
1 NOTE @N0005@
1 ABBR goodstuff
1 DATA
2 AGNC NYC Public Library
1 CHAN
2 DATE 21 DEC 2007
3 TIME 01:35:26
0 @S4@ SOUR
1 PERI Our Family Tree
1 RIN 987456321
0 @R0002@ REPO
1 NAME New York Public Library
1 ADDR 5th Ave at 42 street
@@ -912,13 +1058,27 @@
2 STAE New York
2 POST 11111
2 CTRY USA
1 CHAN
2 DATE 01 JAN 2000
3 TIME 00:00:00
0 @R0003@ REPO
1 NAME Aunt Martha's Attic
1 ADDR 123 Main St
1 ADDR 123 Main St, Someville, ST, USA
2 ADR1 123 Main St
2 ADR2 LittleVillage
2 CITY Someville
2 STAE ST
2 CTRY USA
2 DATE 25 DEC 1971
2 SOUR @S0@
3 DATE 26 DEC 1971
3 REFN blah blah
4 TYPE who knows
3 EVEN housecleaning
4 ROLE sorter
3 OBJE
4 FILE Attic_photo.jpg
2 NOTE A note on this address
1 WWW http://library.gramps-project.org
1 NOTE @N0006@
0 @N0000@ NOTE Witness name: John Doe
@@ -943,4 +1103,10 @@
0 @N0004@ NOTE But Aunt Martha still keeps the original!
0 @N0005@ NOTE The repository reference from the source is important
0 @N0006@ NOTE Some note on the repo
0 XXX an unknown token at level 0
0 SUBM @SUBM@
0 @S4@ SOUR A weird source (one line) format
1 @X1@ XXX and unknown token xref definition
0 TRLR
The end
+1148 -725
View File
File diff suppressed because it is too large Load Diff
-5
View File
@@ -1,5 +0,0 @@
Mismatch on file: imp_vcard.vcf
Person: I0019 handle=0000001800000018
Diff on: Person, primary_name, surname list #2, primary
<class 'bool'>: True
<class 'bool'>: False
+2
View File
@@ -1,3 +1,5 @@
Old Changelog:
gramps (4.0.3) precise; urgency=low
* - 4.0.4-git.f08e40 Experimental stream gramps.git
+1
View File
@@ -31,6 +31,7 @@ Depends:
${python3:Depends}
Recommends:
graphviz,
gir1.2-goocanvas-2.0,
libosmgpsmap-1.0-0,
gir1.2-osmgpsmap-1.0,
python3-pyicu
+2 -3
View File
@@ -18,12 +18,11 @@ override_dh_auto_build:
override_dh_auto_install:
#dh_auto_install
python3 setup.py install --resourcepath=/usr/share --root=debian/python3-gramps --install-layout=deb
# Remove duplicate copyright information
# Remove duplicate license/copyright information
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/COPYING
# Remove install file as it is not needed by package users
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/INSTALL
# Remove duplicate license information
rm $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/LICENSE
# Link license/copyright information to debians
ln -s /usr/share/common-licenses/GPL-2 $(CURDIR)/debian/python3-gramps/usr/share/doc/gramps/COPYING
# Make css style sheets and png icons non-executable
+1 -1
View File
@@ -57,7 +57,7 @@ master_doc = 'index'
# General information about the project.
project = 'Gramps'
copyright = '2016, The Gramps Project'
copyright = '2017, The Gramps Project'
author = 'Donald N. Allingham'
# The version info for the project you're documenting, acts as replacement for
+67 -42
View File
@@ -11,33 +11,6 @@ GrampsDbBase
:undoc-members:
:show-inheritance:
GrampsDbRead
====================================
.. automodule:: gramps.gen.db.read
:members:
:show-inheritance:
GrampsDbWrite
====================================
.. automodule:: gramps.gen.db.write
:members:
:undoc-members:
:show-inheritance:
GrampsCursor
====================================
.. automodule:: gramps.gen.db.cursor
:members:
:undoc-members:
:show-inheritance:
BSDDBtxn
====================================
.. automodule:: gramps.gen.db.bsddbtxn
:members:
:undoc-members:
:show-inheritance:
GrampsDbTxn
====================================
.. automodule:: gramps.gen.db.txn
@@ -45,13 +18,6 @@ GrampsDbTxn
:undoc-members:
:show-inheritance:
GrampsDbUndo
====================================
.. automodule:: gramps.gen.db.undoredo
:members:
:undoc-members:
:show-inheritance:
DbConst
====================================
.. automodule:: gramps.gen.db.dbconst
@@ -64,15 +30,74 @@ GrampsDbException
:undoc-members:
:show-inheritance:
Upgrade utilities
GrampsDbUndo
====================================
.. automodule:: gramps.gen.db.upgrade
:members:
:undoc-members:
Backup
====================================
.. automodule:: gramps.gen.db.backup
.. automodule:: gramps.gen.db.undoredo
:members:
:undoc-members:
:show-inheritance:
Generic
====================================
.. automodule:: gramps.gen.db.generic
:members:
:undoc-members:
:show-inheritance:
DummyDb
====================================
.. automodule:: gramps.plugins.db.dummydb
:members:
:undoc-members:
:show-inheritance:
#####################################
The :mod:`gramps.gen.db` bsddb Module
#####################################
.. automodule:: gramps.plugins.db.bsddb
GrampsDbRead
====================================
.. automodule:: gramps.plugins.db.bsddb.read
:members:
:show-inheritance:
GrampsDbWrite
====================================
.. automodule:: gramps.plugins.db.bsddb.write
:members:
:undoc-members:
:show-inheritance:
GrampsCursor
====================================
.. automodule:: gramps.plugins.db.bsddb.cursor
:members:
:undoc-members:
:show-inheritance:
BSDDBtxn
====================================
.. automodule:: gramps.plugins.db.bsddb.bsddbtxn
:members:
:undoc-members:
:show-inheritance:
#####################################
The :mod:`gramps.gen.db` dbapi Module
#####################################
.. automodule:: gramps.plugins.db.dbapi
DBAPI
====================================
.. automodule:: gramps.plugins.db.dbapi.dbapi
:members:
:show-inheritance:
Sqlite
====================================
.. automodule:: gramps.plugins.db.dbapi.sqlite
:members:
:show-inheritance:
+7
View File
@@ -10,3 +10,10 @@ Name
:members:
:undoc-members:
:show-inheritance:
Place
====================================
.. automodule:: gramps.gen.display.place
:members:
:undoc-members:
:show-inheritance:
+12 -12
View File
@@ -53,14 +53,14 @@ CitationBase
:members:
:undoc-members:
:show-inheritance:
IndirectCitationBase
====================================
.. autoclass:: IndirectCitationBase
:members:
:undoc-members:
:show-inheritance:
DateBase
====================================
.. automodule:: gramps.gen.lib.datebase
@@ -68,7 +68,7 @@ DateBase
:members:
:undoc-members:
:show-inheritance:
LdsOrdBase
====================================
.. automodule:: gramps.gen.lib.ldsordbase
@@ -76,7 +76,7 @@ LdsOrdBase
:members:
:undoc-members:
:show-inheritance:
LocationBase
====================================
.. automodule:: gramps.gen.lib.locationbase
@@ -84,7 +84,7 @@ LocationBase
:members:
:undoc-members:
:show-inheritance:
MediaBase
====================================
.. automodule:: gramps.gen.lib.mediabase
@@ -116,7 +116,7 @@ PrivacyBase
:members:
:undoc-members:
:show-inheritance:
RefBase
====================================
.. automodule:: gramps.gen.lib.refbase
@@ -132,7 +132,7 @@ SurnameBase
:members:
:undoc-members:
:show-inheritance:
TagBase
====================================
.. automodule:: gramps.gen.lib.tagbase
@@ -216,7 +216,7 @@ Citation
:undoc-members:
:show-inheritance:
Media Object
Media
====================================
.. automodule:: gramps.gen.lib.media
.. autoclass:: Media
@@ -366,7 +366,7 @@ RepoRef
:members:
:undoc-members:
:show-inheritance:
*****************************
Table objects
*****************************
@@ -487,7 +487,7 @@ EventType
:members:
:undoc-members:
:show-inheritance:
EventRoleType
==============
.. automodule:: gramps.gen.lib.eventroletype
@@ -543,7 +543,7 @@ RepositoryType
:members:
:undoc-members:
:show-inheritance:
SourceMediaType
================
.. automodule:: gramps.gen.lib.srcmediatype
@@ -557,7 +557,7 @@ StyledTextTagType
:members:
:undoc-members:
:show-inheritance:
UrlType
========
.. automodule:: gramps.gen.lib.urltype
+4 -3
View File
@@ -1,4 +1,4 @@
#! /usr/bin/env python
#! /usr/bin/env python3
#
# update_po - a gramps tool to update translations
#
@@ -102,8 +102,9 @@ def build():
# testing stage
os.system('''%(program)s -b html . _build/html''' % {'program': sphinxCmd})
os.system('''%(program)s -b changes . _build/changes''' % {'program': sphinxCmd})
os.system('''%(program)s -b linkcheck . _build/linkcheck''' % {'program': sphinxCmd})
#os.system('''%(program)s -b changes . _build/changes''' % {'program': sphinxCmd})
#os.system('''%(program)s -b linkcheck . _build/linkcheck''' % {'program': sphinxCmd})
#os.system('''%(program)s -b devhelp . _build/devhelp''' % {'program': sphinxCmd})
if __name__ == "__main__":
main()
+2 -2
View File
@@ -46,7 +46,7 @@ import re
from gramps.gen.recentfiles import recent_files
from gramps.gen.utils.file import rm_tempdir, get_empty_tempdir
from .clidbman import CLIDbManager, NAME_FILE, find_locker_name
from gramps.gen.db.utils import make_database
from gramps.gen.plug import BasePluginManager
from gramps.gen.plug.report import CATEGORY_BOOK, CATEGORY_CODE, BookList
from .plug import cl_report, cl_book
@@ -501,7 +501,7 @@ class ArgHandler:
else:
self.imp_db_path = get_empty_tempdir("import_dbdir")
dbid = config.get('database.backend')
newdb = self.dbstate.make_database(dbid)
newdb = make_database(dbid)
newdb.write_version(self.imp_db_path)
try:
-19
View File
@@ -77,7 +77,6 @@ Application options
-y, --yes Don't ask to confirm dangerous actions (non-GUI mode only)
-q, --quiet Suppress progress indication output (non-GUI mode only)
-v, --version Show versions
-b, --databases Show available database backends
""")
_USAGE = _("""
@@ -154,7 +153,6 @@ class ArgParser:
-y, --yes Don't ask to confirm dangerous actions
-q, --quiet Suppress progress indication output
-v, --version Show versions
-b, --databases Show available database backends
-h, --help Display the help
--usage Display usage information
@@ -325,23 +323,6 @@ class ArgParser:
repr(config.data[sect][setting])))
print()
sys.exit(0)
elif option in ['-b', '--databases']:
default = config.data["database"]["backend"]
pmgr = BasePluginManager.get_instance()
pmgr.reg_plugins(PLUGINS_DIR, self, None)
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
for plugin in pmgr.get_reg_databases():
pdata = pmgr.get_plugin(plugin.id)
mod = pmgr.load_plugin(pdata)
if mod:
database = getattr(mod, pdata.databaseclass)
summary = database.get_class_summary()
print("Database backend ID:",
pdata.id,
"(default)" if pdata.id == default else "")
for key in sorted(summary.keys()):
print(" ", _("%s:") % key, summary[key])
sys.exit(0)
elif option in ['-c', '--config']:
cfg_name = value
set_value = False
+12 -7
View File
@@ -49,6 +49,7 @@ from gramps.gen.plug import BasePluginManager
from gramps.gen.config import config
from gramps.gen.constfunc import win
from gramps.gen.db.dbconst import DBLOGNAME
from gramps.gen.db.utils import make_database
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
@@ -160,7 +161,7 @@ class CLIDbManager:
dbid = file.read().strip()
if not self.is_locked(dirpath):
try:
database = self.dbstate.make_database(dbid)
database = make_database(dbid)
database.load(dirpath, None, update=False)
retval = database.get_summary()
database.close(update=False)
@@ -189,13 +190,13 @@ class CLIDbManager:
dbname == name)
for dbname in database_names])):
summary = self.get_dbdir_summary(dirpath, name)
print(_("Family Tree \"%s\":") % summary[_("Family Tree")])
print(_('Family Tree "%s":') % summary[_("Family Tree")])
for item in sorted(summary):
if item != "Family Tree":
# translators: needed for French, ignore otherwise
print(_(" %(item)s: %(summary)s") % {
'item' : item,
'summary' : summary[item]})
print(' ' + _("%(str1)s: %(str2)s"
) % {'str1' : item,
'str2' : summary[item]})
def family_tree_summary(self, database_names=None):
"""
@@ -307,7 +308,7 @@ class CLIDbManager:
# write the version number into metadata
if dbid is None:
dbid = "bsddb"
newdb = self.dbstate.make_database(dbid)
newdb = make_database(dbid)
newdb.write_version(new_path)
(tval, last) = time_val(new_path)
@@ -357,7 +358,11 @@ class CLIDbManager:
temp_fp.write(data)
url_fp.close()
from gramps.gen.db.dbconst import BDBVERSFN
# name not set
(name, ext) = os.path.splitext(os.path.basename(filename))
versionpath = os.path.join(name, BDBVERSFN)
# dbase not set
dbase = make_database("bsddb")
_LOG.debug("Write bsddb version %s", str(dbase.version()))
with open(versionpath, "w") as version_file:
version_file.write(str(dbase.version()))
@@ -376,7 +381,7 @@ class CLIDbManager:
## Use bsddb, for now, because we assumed that above.
dbid = "bsddb" ## config.get('database.backend')
dbase = self.dbstate.make_database(dbid)
dbase = make_database(dbid)
dbase.load(new_path, user.callback)
import_function = plugin.get_import_function()
+7 -4
View File
@@ -48,6 +48,7 @@ from gramps.gen.display.name import displayer as name_displayer
from gramps.gen.config import config
from gramps.gen.const import PLUGINS_DIR, USER_PLUGINS
from gramps.gen.db.dbconst import DBBACKEND
from gramps.gen.db.utils import make_database
from gramps.gen.errors import DbError
from gramps.gen.dbstate import DbState
from gramps.gen.db.exceptions import (DbUpgradeRequiredError,
@@ -163,7 +164,7 @@ class CLIDbLoader:
else:
dbid = "bsddb"
db = self.dbstate.make_database(dbid)
db = make_database(dbid)
self.dbstate.change_database(db)
self.dbstate.db.disable_signals()
@@ -315,7 +316,7 @@ class CLIManager:
# database is empty, then copy default researcher to DB owner
if (res.is_empty()
and not owner.is_empty()
and self.dbstate.db.is_empty()):
and self.dbstate.db.get_total() == 0):
self.dbstate.db.set_researcher(owner)
name_displayer.set_name_format(self.dbstate.db.name_formats)
@@ -330,12 +331,14 @@ class CLIManager:
recent_files(filename, name)
self.file_loaded = True
def do_reg_plugins(self, dbstate, uistate):
def do_reg_plugins(self, dbstate, uistate, rescan=False):
"""
Register the plugins at initialization time.
"""
self._pmgr.reg_plugins(PLUGINS_DIR, dbstate, uistate)
self._pmgr.reg_plugins(PLUGINS_DIR, dbstate, uistate, rescan=rescan)
self._pmgr.reg_plugins(USER_PLUGINS, dbstate, uistate, load_on_reg=True)
if rescan: # supports updated plugin installs
self._pmgr.reload_plugins()
def startcli(errors, argparser):
"""
+6 -4
View File
@@ -120,13 +120,13 @@ def _convert_str_to_match_type(str_val, type_val):
# Search through characters between the brackets
for char in str_val[1:-1]:
if (char == "'" or char == '"') and quote_type == None:
if (char == "'" or char == '"') and quote_type is None:
# This character starts a string
quote_type = char
elif char == quote_type:
# This character ends a string
quote_type = None
elif quote_type == None and char == ",":
elif quote_type is None and char == ",":
# This character ends an entry
ret_val.append(entry.strip())
entry = ""
@@ -398,8 +398,10 @@ class CommandLineReport:
father = self.database.get_person_from_handle(fhandle)
if father:
fname = name_displayer.display(father)
text = "%s:\t%s, %s" % (family.get_gramps_id(),
fname, mname)
# translators: needed for French, Hebrew and Arabic
text = _("%(id)s:\t%(father)s, %(mother)s"
) % {'id': family.get_gramps_id(),
'father': fname, 'mother': mname}
id_list.append(text)
self.options_help[name].append(id_list)
elif isinstance(option, NoteOption):
+6 -8
View File
@@ -77,14 +77,13 @@ class Test(unittest.TestCase):
# This tests the fix for bug #1331-1334
# read trivial gedcom input, write gedcom output
def test2_exec_CLI(self):
pyexec = sys.executable
ifile = min1r
ofile = out_ged
gcmd = "Gramps.py -i %s -e %s" % (ifile, ofile)
process = subprocess.Popen("%s %s" % (pyexec, gcmd),
gcmd = [sys.executable, "Gramps.py", "-i", ifile, "-e", ofile]
process = subprocess.Popen(gcmd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=True)
stderr=subprocess.PIPE)
result_str, err_str = process.communicate()
self.assertEqual(process.returncode, 0,
"executed CLI command %r" % gcmd)
@@ -110,14 +109,13 @@ class Test(unittest.TestCase):
f.write("garbage")
# ~same as test 2
pyexec = sys.executable
ifile = min1r
ofile = out_ged
gcmd = "Gramps.py -i %s -e %s" % (ifile, ofile)
process = subprocess.Popen("%s %s" % (pyexec, gcmd),
gcmd = [sys.executable, "Gramps.py", "-i", ifile, "-e", ofile]
process = subprocess.Popen(gcmd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=True)
stderr=subprocess.PIPE)
result_str, err_str = process.communicate()
self.assertEqual(process.returncode, 0,
"executed CLI command %r" % gcmd)
+6 -1
View File
@@ -23,7 +23,6 @@
import unittest
from .. import user
from ...gen.test.user_test import TestUser
import sys
try:
@@ -38,6 +37,12 @@ except:
MOCKING = False
print ("Mocking disabled", sys.exc_info()[0:2])
class TestUser:
TITLE = "Testing prompt"
MSG = "Choices are hard. Nevertheless, please choose!"
ACCEPT = "To be"
REJECT = "Not to be"
class TestUser_prompt(unittest.TestCase):
def setUp(self):
self.real_user = user.User()
+9 -8
View File
@@ -44,12 +44,13 @@ _SPINNER = ['|', '/', '-', '\\']
# User class
#
#-------------------------------------------------------------------------
class User(user.User):
class User(user.UserBase):
"""
This class provides a means to interact with the user via CLI.
It implements the interface in :class:`.gen.user.User`
It implements the interface in :class:`.gen.user.UserBase`
"""
def __init__(self, callback=None, error=None, auto_accept=False, quiet=False,
def __init__(self, callback=None, error=None,
auto_accept=False, quiet=False,
uistate=None, dbstate=None):
"""
Init.
@@ -57,7 +58,7 @@ class User(user.User):
:param error: If given, notify_error delegates to this callback
:type error: function(title, error)
"""
user.User.__init__(self, callback, error, uistate, dbstate)
user.UserBase.__init__(self, callback, error, uistate, dbstate)
self.steps = 0;
self.current_step = 0;
self._input = input
@@ -145,14 +146,14 @@ class User(user.User):
m = message,
y = accept_text,
n = reject_text)
print (text, file = self._fileout) # TODO python3 add flush=True
print (text, file = self._fileout) # TODO: python 3.3 add flush=True
try:
reply = self._input()
except EOFError:
reply = ""
### Trun response into True/False:
### Turn response into True/False:
if reply == "":
return default
return default == accept_label
elif reply == accept_label:
return True
else:
@@ -168,7 +169,7 @@ class User(user.User):
:type warning: str
:returns: none
"""
self._fileout.write("%s %s" % (title, warning))
self._fileout.write("%s\n%s\n" % (title, warning))
def notify_error(self, title, error=""):
"""
+16 -77
View File
@@ -23,7 +23,7 @@
#
"""
This package implements access to GRAMPS configuration.
This package implements access to Gramps configuration.
"""
#---------------------------------------------------------------
@@ -133,11 +133,11 @@ register('behavior.addmedia-relative-path', False)
register('behavior.autoload', False)
register('behavior.avg-generation-gap', 20)
register('behavior.betawarn', False)
register('behavior.check-for-updates', 0)
register('behavior.check-for-update-types', ["new"])
register('behavior.last-check-for-updates', "1970/01/01")
register('behavior.previously-seen-updates', [])
register('behavior.do-not-show-previously-seen-updates', True)
register('behavior.check-for-addon-updates', 0)
register('behavior.check-for-addon-update-types', ["new"])
register('behavior.last-check-for-addon-updates', "1970/01/01")
register('behavior.previously-seen-addon-updates', [])
register('behavior.do-not-show-previously-seen-addon-updates', True)
register('behavior.date-about-range', 50)
register('behavior.date-after-range', 50)
register('behavior.date-before-range', 50)
@@ -159,7 +159,9 @@ register('behavior.addons-url', "https://raw.githubusercontent.com/gramps-projec
register('database.backend', 'bsddb')
register('database.compress-backup', True)
register('database.autobackup', True) ## make backup when exiting, if there are changes
register('database.backup-path', USER_HOME)
register('database.backup-on-exit', True)
register('database.autobackup', 0)
register('database.path', os.path.join(HOME_DIR, 'grampsdb'))
register('export.proxy-order',
@@ -181,66 +183,25 @@ register('geography.show_cross', False)
register('geography.path', "")
register('geography.use-keypad', True)
register('interface.address-height', 450)
register('interface.address-width', 650)
register('interface.attribute-height', 350)
register('interface.attribute-width', 600)
register('interface.child-ref-height', 450)
register('interface.child-ref-width', 600)
register('interface.citation-height', 450)
register('interface.citation-sel-height', 450)
register('interface.citation-sel-width', 600)
register('interface.citation-width', 600)
register('interface.clipboard-height', 300)
register('interface.clipboard-width', 300)
# note that other calls to "register" are done in realtime (when
# needed), for instance to four 'interface.clipboard' variables --
# so do a recursive grep for "setup_configs" to see all the (base) names
register('interface.dont-ask', False)
register('interface.view-categories',
["Dashboard", "People", "Relationships", "Families",
"Ancestry", "Events", "Places", "Geography", "Sources",
"Citations", "Repositories", "Media", "Notes"])
register('interface.edit-filter-width', 500)
register('interface.edit-filter-height', 420)
register('interface.edit-rule-width', 600)
register('interface.edit-rule-height', 450)
register('interface.event-height', 450)
register('interface.event-ref-height', 450)
register('interface.event-ref-width', 600)
register('interface.event-sel-height', 450)
register('interface.event-sel-width', 600)
register('interface.event-width', 600)
register('interface.family-height', 500)
register('interface.family-sel-height', 450)
register('interface.family-sel-width', 600)
register('interface.family-width', 700)
register('interface.filter', False)
register('interface.filter-editor-width', 400)
register('interface.filter-editor-height', 350)
register('interface.fullscreen', False)
register('interface.grampletbar-close', False)
register('interface.ignore-gexiv2', False)
register('interface.ignore-pil', False)
register('interface.ignore-osmgpsmap', False)
register('interface.lds-height', 450)
register('interface.lds-width', 600)
register('interface.location-height', 250)
register('interface.location-width', 600)
register('interface.main-window-height', 500)
register('interface.main-window-horiz-position', 15)
register('interface.main-window-vert-position', 10)
register('interface.main-window-width', 775)
register('interface.mapservice', 'OpenStreetMap')
register('interface.media-height', 450)
register('interface.media-ref-height', 450)
register('interface.media-ref-width', 600)
register('interface.media-sel-height', 450)
register('interface.media-sel-width', 600)
register('interface.media-width', 650)
register('interface.name-height', 350)
register('interface.name-width', 600)
register('interface.note-height', 500)
register('interface.note-sel-height', 450)
register('interface.note-sel-width', 600)
register('interface.note-width', 700)
register('interface.open-with-default-viewer', False)
register('interface.pedview-layout', 0)
register('interface.pedview-show-images', True)
@@ -248,38 +209,12 @@ register('interface.pedview-show-marriage', False)
register('interface.pedview-tree-size', 5)
register('interface.pedview-tree-direction', 2)
register('interface.pedview-show-unknown-people', False)
register('interface.person-height', 550)
register('interface.person-ref-height', 350)
register('interface.person-ref-width', 600)
register('interface.person-sel-height', 450)
register('interface.person-sel-width', 600)
register('interface.person-width', 750)
register('interface.place-height', 450)
register('interface.place-name-height', 100)
register('interface.place-name-width', 450)
register('interface.place-ref-height', 450)
register('interface.place-ref-width', 600)
register('interface.place-sel-height', 450)
register('interface.place-sel-width', 600)
register('interface.place-width', 650)
register('interface.repo-height', 450)
register('interface.repo-ref-height', 450)
register('interface.repo-ref-width', 600)
register('interface.repo-sel-height', 450)
register('interface.repo-sel-width', 600)
register('interface.repo-width', 650)
register('interface.sidebar-text', True)
register('interface.size-checked', False)
register('interface.source-height', 450)
register('interface.source-ref-height', 450)
register('interface.source-ref-width', 600)
register('interface.source-sel-height', 450)
register('interface.source-sel-width', 600)
register('interface.source-width', 600)
register('interface.statusbar', 1)
register('interface.toolbar-on', True)
register('interface.url-height', 150)
register('interface.url-width', 600)
register('interface.view', True)
register('interface.surname-box-height', 150)
register('interface.treemodel-cache-size', 1000)
@@ -295,6 +230,7 @@ register('paths.quick-backup-directory', USER_HOME)
register('paths.quick-backup-filename',
"%(filename)s_%(year)d-%(month)02d-%(day)02d.%(extension)s")
register('preferences.quick-backup-include-mode', False)
register('preferences.date-format', 0)
register('preferences.calendar-format-report', 0)
register('preferences.cprefix', 'C%04d')
@@ -364,6 +300,9 @@ register('researcher.researcher-state', '')
register('plugin.hiddenplugins', [])
register('plugin.addonplugins', [])
if __debug__: # enable a simple CLI test to see if the datestrings exist
register('test.january', _("localized lexeme inflections||January"))
#---------------------------------------------------------------
#
# Upgrade Conversions go here.
+8 -10
View File
@@ -41,9 +41,9 @@ import uuid
#-------------------------------------------------------------------------
from .git_revision import get_git_revision
from .constfunc import get_env_var
from gramps.version import VERSION, VERSION_TUPLE, major_version
from gramps.gen.utils.resourcepath import ResourcePath
from gramps.gen.utils.grampslocale import GrampsLocale
from ..version import VERSION, VERSION_TUPLE, major_version
from .utils.resourcepath import ResourcePath
from .utils.grampslocale import GrampsLocale
#-------------------------------------------------------------------------
#
@@ -134,11 +134,10 @@ USER_DIRLIST = (USER_HOME, HOME_DIR, VERSION_DIR, ENV_DIR, TEMP_DIR, THUMB_DIR,
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
sys.path.insert(0, ROOT_DIR)
git_revision = get_git_revision(ROOT_DIR)
git_revision = get_git_revision(ROOT_DIR).replace('\n', '')
if sys.platform == 'win32' and git_revision == "":
git_revision = get_git_revision(os.path.split(ROOT_DIR)[1])
VERSION += git_revision
#VERSION += "-1"
#VERSION += git_revision
#
# Glade files
@@ -217,7 +216,7 @@ GTK_GETTEXT_DOMAIN = 'gtk30'
#
#-------------------------------------------------------------------------
COPYRIGHT_MSG = "© 2001-2006 Donald N. Allingham\n" \
"© 2007-2016 The Gramps Developers"
"© 2007-2017 The Gramps Developers"
COMMENTS = _("Gramps\n (Genealogical Research and Analysis "
"Management Programming System)\n"
"is a personal genealogy program.")
@@ -253,6 +252,7 @@ NO_GIVEN = "(%s)" % _("given-name|none")
ARABIC_COMMA = "،"
ARABIC_SEMICOLON = "؛"
DOCGEN_OPTIONS = 'Docgen Options'
COLON = _(':') # translators: needed for French, ignore otherwise
#-------------------------------------------------------------------------
#
@@ -265,7 +265,6 @@ LONGOPTS = [
"class=",
"config=",
"debug=",
"databases",
"display=",
"disable-sound",
"disable-crash-dialog",
@@ -300,12 +299,11 @@ LONGOPTS = [
"remove=",
"usage",
"version",
"qml",
"yes",
"quiet",
]
SHORTOPTS = "O:C:i:e:f:a:p:d:c:r:blLthuv?syq"
SHORTOPTS = "O:C:i:e:f:a:p:d:c:r:lLthuv?syq"
GRAMPS_UUID = uuid.UUID('516cd010-5a41-470f-99f8-eb22f1098ad6')
+26 -13
View File
@@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2004-2007 Donald N. Allingham
# Copyright (C) 2017 Paul Franklin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -29,11 +30,16 @@ Class handling language-specific selection for date parser and displayer.
#-------------------------------------------------------------------------
import logging
#-------------------------------------------------------------------------
#
# Gramps modules
#
#-------------------------------------------------------------------------
from ..const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
# import prerequisites for localized handlers
from ._datehandler import (LANG, LANG_SHORT, LANG_TO_PARSER, LANG_TO_DISPLAY,
register_datehandler)
locale_tformat, main_locale)
from . import _datestrings
# Import all the localized handlers
@@ -69,12 +75,13 @@ from . import _date_zh_TW
# Initialize global parser
try:
if LANG in LANG_TO_PARSER:
parser = LANG_TO_PARSER[LANG]()
parser = LANG_TO_PARSER[LANG](plocale=glocale)
else:
parser = LANG_TO_PARSER[LANG_SHORT]()
parser = LANG_TO_PARSER[LANG_SHORT](plocale=glocale)
except:
logging.warning(_("Date parser for '%s' not available, using default") % LANG)
parser = LANG_TO_PARSER["C"]()
logging.warning(
_("Date parser for '%s' not available, using default") % LANG)
parser = LANG_TO_PARSER["C"](plocale=glocale)
# Initialize global displayer
try:
@@ -85,26 +92,32 @@ except:
try:
if LANG in LANG_TO_DISPLAY:
displayer = LANG_TO_DISPLAY[LANG](val)
displayer = LANG_TO_DISPLAY[LANG](val, blocale=glocale)
else:
displayer = LANG_TO_DISPLAY[LANG_SHORT](val)
displayer = LANG_TO_DISPLAY[LANG_SHORT](val, blocale=glocale)
except:
logging.warning(_("Date displayer for '%s' not available, using default") % LANG)
displayer = LANG_TO_DISPLAY["C"](val)
logging.warning(
_("Date displayer for '%s' not available, using default") % LANG)
displayer = LANG_TO_DISPLAY["C"](val, blocale=glocale)
# Import utility functions
from ._dateutils import *
from ._grampslocale import (codeset, tformat)
# set GRAMPS_RESOURCES then: python3 -m gramps.gen.datehandler.__init__
if __name__ == "__main__":
from ._datedisplay import DateDisplay
m = 0
for l,d in LANG_TO_DISPLAY.items():
if len(l) != 2:
date_handlers = sorted(LANG_TO_DISPLAY.items())
for l,d in date_handlers:
if len(l) != 2 and l not in ('zh_TW'): # Chinese has two date_handlers
continue
if l.upper() == l and (l.lower(),d) in date_handlers:
continue # don't need to see the upper-case variant also
m = max(m, len(d.formats))
print("{}: {} {} own dg: {}".format(
print("{}: {} {} own-f:{} own-dc:{} own-dg:{}".format(
l, len(d.formats), d.formats,
d.formats != DateDisplay.formats,
d._display_calendar != DateDisplay._display_calendar,
d._display_gregorian != DateDisplay._display_gregorian))
print("MAX: ", m)
+24 -1
View File
@@ -39,6 +39,7 @@ from ..lib.date import Date
from ._dateparser import DateParser
from ._datedisplay import DateDisplay
from ._datehandler import register_datehandler
from ..const import ARABIC_COMMA
#-------------------------------------------------------------------------
#
@@ -202,10 +203,32 @@ class DateDisplayAR(DateDisplay):
scal = self.format_extras(cal, newyear)
return "%s%s%s%s" % (qual_str, self._mod_str[mod], text, scal)
def dd_dformat01(self, date_val):
"""
numerical -- for Arabic dates
"""
value = DateDisplay.dd_dformat01(self, date_val)
return value.replace(',', ARABIC_COMMA)
def dd_dformat02(self, date_val, inflect, long_months):
"""
month_name day, year -- for Arabic dates
"""
value = DateDisplay.dd_dformat02(self, date_val, inflect, long_months)
return value.replace(',', ARABIC_COMMA)
def dd_dformat03(self, date_val, inflect, short_months):
"""
month_abbreviation day, year -- for Arabic dates
"""
value = DateDisplay.dd_dformat03(self, date_val, inflect, short_months)
return value.replace(',', ARABIC_COMMA)
#-------------------------------------------------------------------------
#
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('ar_AR', 'ar', 'Arabic', 'arabic'),
register_datehandler(
('ar_EG', 'ar_AR', 'ar', 'Arabic', 'arabic', ('%d %b, %Y',)),
DateParserAR, DateDisplayAR)
+22 -1
View File
@@ -305,10 +305,31 @@ class DateDisplayBG(DateDisplay):
scal = self.format_extras(cal, newyear)
return "%s%s%s%s" % (qual_str, self._mod_str[mod], text, scal)
def dd_dformat01(self, date_val):
"""
numerical -- for Bulgarian dates
"""
if date_val[3]:
return self.display_iso(date_val)
else:
if date_val[0] == date_val[1] == 0:
return str(date_val[2])
else:
value = self.dhformat.replace('%m', str(date_val[1]))
# some locales have %b for the month, e.g. ar_EG, is_IS, nb_NO
value = value.replace('%b', str(date_val[1]))
if date_val[0] == 0: # ignore the zero day and its delimiter
i_day = value.find('%e') # Bulgarian uses %e and not %d
value = value.replace(value[i_day:i_day+3], '')
value = value.replace('%e', str(date_val[0]))
value = value.replace('%Y', str(abs(date_val[2])))
return value.replace('-', '/')
#-------------------------------------------------------------------------
#
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('bg_BG', 'bg', 'bulgarian', 'Bulgarian'),
register_datehandler(
('bg_BG', 'bg', 'bulgarian', 'Bulgarian', ('%e.%m.%Y',)),
DateParserBG, DateDisplayBG)
+4 -1
View File
@@ -193,4 +193,7 @@ class DateDisplayCA(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('ca_ES', 'ca', 'català', 'Catalan', 'ca_FR', 'ca_AD', 'ca_IT'), DateParserCA, DateDisplayCA)
register_datehandler(
('ca_ES', 'ca', 'català', 'Catalan',
'ca_FR', 'ca_AD', 'ca_IT', ('%d/%m/%Y',)),
DateParserCA, DateDisplayCA)
+23 -16
View File
@@ -171,8 +171,10 @@ class DateParserCZ(DateParser):
'vyp.' : Date.QUAL_CALCULATED,
}
# bug 9739 _grampslocale.py gets '%-d.%-m.%Y' and makes it be '%/d.%/m.%Y'
fmt = DateParser.fmt.replace('/', '') # so counteract that
def dhformat_changed(self):
""" Allow overriding so a subclass can modify it """
# bug 9739 grampslocale.py gets '%-d.%-m.%Y' -- makes it be '%/d.%/m.%Y'
self.dhformat = self.dhformat.replace('/', '') # so counteract that
def init_strings(self):
DateParser.init_strings(self)
@@ -215,21 +217,24 @@ class DateDisplayCZ(DateDisplay):
bce = ["před naším letopočtem", "před Kristem",
"př. n. l.", "př. Kr."] + DateParser.bce
formats = (
"ISO (rrrr-mm-dd)",
"numerický",
"měsíc den, Rok",
"měs den, Rok",
"den. měsíc rok",
"den. měs rok"
)
# this must agree with DateDisplayEn's "formats" definition
# (since no locale-specific _display_gregorian exists, here)
display = DateDisplay.display_formatted
# bug 9537 _grampslocale.py gets '%-d.%-m.%Y' and makes it be '%/d.%/m.%Y'
_tformat = DateDisplay._tformat.replace('/', '') # so counteract that
def formats_changed(self):
""" Allow overriding so a subclass can modify """
# bug 9537 grampslocale.py gets '%-d.%-m.%Y' -- makes it be '%/d.%/m.%Y'
self.dhformat = self.dhformat.replace('/', '') # so counteract that
self.formats = (
"ISO (rrrr-mm-dd)",
"numerický",
"měsíc den, Rok",
"měs den, Rok",
"den. měsíc rok",
"den. měs rok"
)
# this must agree with DateDisplayEn's "formats" definition
# (since no locale-specific _display_gregorian exists, here)
def orig_display(self, date): # unused: only here for historical reference
"""
@@ -278,4 +283,6 @@ class DateDisplayCZ(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(("cs", "CS", "cs_CZ", "Czech"), DateParserCZ, DateDisplayCZ)
register_datehandler(
("cs_CZ", "cs", "CS", "Czech", ('%-d.%-m.%Y',)),
DateParserCZ, DateDisplayCZ)
+3 -1
View File
@@ -176,4 +176,6 @@ class DateDisplayDa(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('da_DK', 'da', 'dansk', 'Danish'), DateParserDa, DateDisplayDa)
register_datehandler(
('da_DK', 'da', 'dansk', 'Danish', ('%d-%m-%Y',)),
DateParserDa, DateDisplayDa)
+5 -4
View File
@@ -237,7 +237,7 @@ class DateDisplayDE(DateDisplay):
if date_val[0] == date_val[1] == 0:
value = str(date_val[2])
else:
value = self._tformat.replace('%m', str(date_val[1]))
value = self.dhformat.replace('%m', str(date_val[1]))
value = value.replace('%d', str(date_val[0]))
value = value.replace('%Y', str(date_val[2]))
elif self.format == 2:
@@ -321,6 +321,7 @@ class DateDisplayDE(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('de_DE', 'german', 'German', 'de_AT', 'de_CH',
'de_LI', 'de_LU', 'de_BE', 'de'),
DateParserDE, DateDisplayDE)
register_datehandler(
('de_DE', 'german', 'German', 'de_AT', 'de_CH',
'de_LI', 'de_LU', 'de_BE', 'de', ('%d.%m.%Y',)),
DateParserDE, DateDisplayDE)
+2 -1
View File
@@ -242,5 +242,6 @@ class DateDisplayEL(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('el_GR', 'el_CY', 'el', 'Greek', 'greek'),
register_datehandler(
('el_GR', 'el_CY', 'el', 'Greek', 'greek', ('%d/%m/%Y',)),
DateParserEL, DateDisplayEL)
+3 -1
View File
@@ -177,4 +177,6 @@ class DateDisplayES(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('es_ES', 'es', 'spanish', 'Spanish'), DateParserES, DateDisplayES)
register_datehandler(
('es_ES', 'es', 'spanish', 'Spanish', ('%d/%m/%Y',)),
DateParserES, DateDisplayES)
+3 -2
View File
@@ -178,5 +178,6 @@ class DateDisplayFI(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('fi_FI', 'fi', 'finnish', 'Finnish'),
DateParserFI, DateDisplayFI)
register_datehandler(
('fi_FI', 'fi', 'finnish', 'Finnish', ('%d.%m.%Y',)),
DateParserFI, DateDisplayFI)
+17 -14
View File
@@ -42,7 +42,6 @@ from ..lib.date import Date
from ._dateparser import DateParser
from ._datedisplay import DateDisplay
from ._datehandler import register_datehandler
from . import _grampslocale
#-------------------------------------------------------------------------
#
@@ -232,22 +231,24 @@ class DateDisplayFR(DateDisplay):
_bce_str = "%s avant le calendrier"
# Replace the previous "Numérique" by a string which
# do have an explicit meaning: "System default (format)"
_locale_tformat = _grampslocale.tformat
_locale_tformat = _locale_tformat.replace('%d', "J")
_locale_tformat = _locale_tformat.replace('%m', "M")
_locale_tformat = _locale_tformat.replace('%Y', "A")
def formats_changed(self):
""" Allow overriding so a subclass can modify """
formats = ("AAAA-MM-JJ (ISO)", # 0
"Défaut système (" + _locale_tformat + ")", # 1
# Replace the previous "Numérique" by a string which
# do have an explicit meaning: "System default (format)"
example = self.dhformat
example = example.replace('%d', "J")
example = example.replace('%m', "M")
example = example.replace('%Y', "A")
self.formats = ("AAAA-MM-JJ (ISO)", # 0
"Défaut système (" + example + ")", # 1
"Jour Mois Année", # 2
"Jour MOI Année", # 3
"Jour. Mois Année", # 4
"Jour. MOI Année", # 5
"Mois Jour, Année", # 6
"MOI Jour, Année",) # 7
# this definition must agree with its "_display_gregorian" method
def _display_gregorian(self, date_val, **kwargs):
@@ -263,7 +264,7 @@ class DateDisplayFR(DateDisplay):
return self.display_iso(date_val)
elif self.format == 1:
# ISO
# numerical
if date_val[2] < 0 or date_val[3]:
return self.display_iso(date_val)
@@ -271,7 +272,7 @@ class DateDisplayFR(DateDisplay):
if date_val[0] == date_val[1] == 0:
value = str(date_val[2])
else:
value = self._tformat.replace('%m', str(date_val[1]))
value = self.dhformat.replace('%m', str(date_val[1]))
value = value.replace('%d', str(date_val[0]))
# base_display :
@@ -380,5 +381,7 @@ class DateDisplayFR(DateDisplay):
#
#-------------------------------------------------------------------------
register_datehandler(('fr_FR', 'fr', 'french', 'French', 'fr_CA',
'fr_BE', 'fr_CH'), DateParserFR, DateDisplayFR)
register_datehandler(
('fr_FR', 'fr', 'french', 'French', 'fr_CA',
'fr_BE', 'fr_CH', ('%d/%m/%Y',)),
DateParserFR, DateDisplayFR)
+3 -2
View File
@@ -110,5 +110,6 @@ class DateDisplayHR(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('hr', 'HR', 'croatian', 'Croatian', 'hrvatski', 'hr_HR'),
DateParserHR, DateDisplayHR)
register_datehandler(
('hr_HR', 'hr', 'HR', 'croatian', 'Croatian', 'hrvatski', ('%d.%m.%Y',)),
DateParserHR, DateDisplayHR)
+4 -3
View File
@@ -33,7 +33,7 @@ import re
#-------------------------------------------------------------------------
#
# GRAMPS modules
# Gramps modules
#
#-------------------------------------------------------------------------
from ..lib.date import Date
@@ -364,5 +364,6 @@ class DateDisplayHU(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('hu_HU', 'hu', 'hungarian', 'Hungarian', 'magyar'),
DateParserHU, DateDisplayHU)
register_datehandler(
('hu_HU', 'hu', 'hungarian', 'Hungarian', 'magyar', ('%Y-%m-%d',)),
DateParserHU, DateDisplayHU)
+44 -2
View File
@@ -30,10 +30,11 @@ Icelandic-specific classes for parsing and displaying dates.
#
#-------------------------------------------------------------------------
import re
import datetime
#-------------------------------------------------------------------------
#
# GRAMPS modules
# Gramps modules
#
#-------------------------------------------------------------------------
from ..lib.date import Date
@@ -88,8 +89,19 @@ class DateParserIs(DateParser):
'reiknað' : Date.QUAL_CALCULATED,
}
def dhformat_changed(self):
self._dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*%(\S).*")
def init_strings(self):
DateParser.init_strings(self)
# match 'day. month year' format
self._text2 = re.compile('(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*$'
% self._mon_str, re.IGNORECASE)
# match 'short-day day.month year' format
short_day_str = '(' + '|'.join(self._ds.short_days[1:]) + ')'
self._numeric = re.compile("%s\s*((\d+)[\.]\s*)?((\d+)\s*)?(\d+)\s*$"
% short_day_str, re.IGNORECASE)
self._span = re.compile("(frá)?\s*(?P<start>.+)\s*(til|--|)\s*(?P<stop>.+)",
re.IGNORECASE)
self._range = re.compile("(milli)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)",
@@ -172,9 +184,39 @@ class DateDisplayIs(DateDisplay):
return "%s%s%s%s" % (qual_str, self._mod_str[mod],
text, scal)
def _get_weekday(self, date_val):
if date_val[0] == 0 or date_val[1] == 0: # no day or no month or both
return ''
w_day = datetime.date(date_val[2], date_val[1], date_val[0]) # y, m, d
return self.short_days[((w_day.weekday() + 1) % 7) + 1]
def dd_dformat01(self, date_val):
"""
numerical -- for Icelandic dates
"""
if date_val[3]:
return self.display_iso(date_val)
else:
if date_val[0] == date_val[1] == 0:
return str(date_val[2])
else:
value = self.dhformat.replace('%m', str(date_val[1]))
# some locales have %b for the month, e.g. ar_EG, is_IS, nb_NO
value = value.replace('%b', str(date_val[1]))
# some locales have %a for the abbreviated day, e.g. is_IS
value = value.replace('%a', self._get_weekday(date_val))
if date_val[0] == 0: # ignore the zero day and its delimiter
i_day = value.find('%e') # Icelandic uses %e and not %d
value = value.replace(value[i_day:i_day+3], '')
value = value.replace('%e', str(date_val[0]))
value = value.replace('%Y', str(abs(date_val[2])))
return value.replace('-', '/')
#-------------------------------------------------------------------------
#
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('is_IS', 'is', 'íslenskt', 'Icelandic'), DateParserIs, DateDisplayIs)
register_datehandler(
('is_IS', 'is', 'íslenskt', 'Icelandic', ('%a %e.%b %Y',)),
DateParserIs, DateDisplayIs)
+2 -1
View File
@@ -189,5 +189,6 @@ class DateDisplayIT(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('it_IT', 'it', 'italian', 'Italian', 'it_CH'),
register_datehandler(
('it_IT', 'it', 'italian', 'Italian', 'it_CH', ('%d/%m/%Y',)),
DateParserIT, DateDisplayIT)
+15 -12
View File
@@ -42,7 +42,6 @@ from ..lib.date import Date
from ._dateparser import DateParser
from ._datedisplay import DateDisplay
from ._datehandler import register_datehandler
from . import _grampslocale
#-------------------------------------------------------------------------
#
@@ -185,15 +184,18 @@ class DateDisplayJA(DateDisplay):
Japanese language date display class.
"""
# Specify what is actually the "System Default".
_locale_tformat = _grampslocale.tformat
_locale_tformat = _locale_tformat.replace('%d', "31")
_locale_tformat = _locale_tformat.replace('%m', "12")
_locale_tformat = _locale_tformat.replace('%Y', "1999")
def formats_changed(self):
""" Allow overriding so a subclass can modify """
# This definition must agree with its "_display_gregorian" method
formats = ("YYYY-MM-DD (ISO)", # 0
"システムデフォールト (" + _locale_tformat + ")", # 1
# Specify what is actually the "System Default".
example = self.dhformat
example = example.replace('%d', "31")
example = example.replace('%m', "12")
example = example.replace('%Y', "1999")
# This definition must agree with its "_display_gregorian" method
self. formats = ("YYYY-MM-DD (ISO)", # 0
"システムデフォールト (" + example + ")", # 1
"1999年12月31日", # 2
"1999年十二月31日", # 3
)
@@ -216,7 +218,7 @@ class DateDisplayJA(DateDisplay):
if date_val[0] == date_val[1] == 0:
value = str(date_val[2])
else:
value = self._tformat.replace('%m', str(date_val[1]))
value = self.dhformat.replace('%m', str(date_val[1]))
if date_val[0] == 0: # ignore the zero day and its delimiter
i_day = value.find('%d')
value = value.replace(value[i_day:i_day+3], '')
@@ -265,5 +267,6 @@ class DateDisplayJA(DateDisplay):
#
#-------------------------------------------------------------------------
register_datehandler(('ja_JP', 'ja', 'japanese', 'Japanese'),
DateParserJA, DateDisplayJA)
register_datehandler(
('ja_JP', 'ja', 'japanese', 'Japanese', ('%Y年%m月%d',)),
DateParserJA, DateDisplayJA)
+9 -3
View File
@@ -182,7 +182,8 @@ class DateDisplayLT(DateDisplay):
_qual_str = ("", "apytikriai ", "apskaičiuota ")
formats = (
"mmmm-MM-DD (ISO)", "mmmm m. mėnesio diena d.", "Mėn diena, metai")
"mmmm-MM-DD (ISO)", "mmmm.MM.DD",
"mmmm m. mėnesio diena d.", "Mėn diena, metai")
# this definition must agree with its "_display_gregorian" method
def _display_gregorian(self, date_val):
@@ -195,6 +196,9 @@ class DateDisplayLT(DateDisplay):
if self.format == 0:
return self.display_iso(date_val)
elif self.format == 1:
# numerical
return self.dd_dformat01(date_val)
elif self.format == 2:
# mmmm m. mėnesio diena d. (year m. month_name day d.)
if date_val[0] == 0:
if date_val[1] == 0:
@@ -205,7 +209,7 @@ class DateDisplayLT(DateDisplay):
value = "%s m. %s %d d." % (year,
self.long_months[date_val[1]],
date_val[0])
elif self.format == 2:
elif self.format == 3:
# month_abbreviation day, year
if date_val[0] == 0:
if date_val[1] == 0:
@@ -259,4 +263,6 @@ class DateDisplayLT(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('lt_LT', 'lt', 'lithuanian', 'Lithuanian'), DateParserLT, DateDisplayLT)
register_datehandler(
('lt_LT', 'lt', 'lithuanian', 'Lithuanian', ('%Y.%m.%d',)),
DateParserLT, DateDisplayLT)
+5 -1
View File
@@ -89,6 +89,8 @@ class DateParserNb(DateParser):
def init_strings(self):
DateParser.init_strings(self)
# match day. month year
self._numeric = re.compile("((\d+)[\.])?\s*((\d+))?\s*(\d+)$")
self._span = re.compile("(fra)?\s*(?P<start>.+)\s*(til|--|)\s*(?P<stop>.+)",
re.IGNORECASE)
self._range = re.compile("(mellom)\s+(?P<start>.+)\s+og\s+(?P<stop>.+)",
@@ -176,4 +178,6 @@ class DateDisplayNb(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('nb_NO', 'nb', 'nn_NO', 'nn', 'norsk', 'Norwegian'), DateParserNb, DateDisplayNb)
register_datehandler(
('nb_NO', 'nb', 'nn_NO', 'nn', 'norsk', 'Norwegian', ('%d. %b %Y',)),
DateParserNb, DateDisplayNb)
+4 -3
View File
@@ -180,7 +180,7 @@ class DateDisplayNL(DateDisplay):
if date_val[0] == date_val[1] == 0:
value = str(date_val[2])
else:
value = self._tformat.replace('%m', str(date_val[1]))
value = self.dhformat.replace('%m', str(date_val[1]))
value = value.replace('%d', str(date_val[0]))
value = value.replace('%Y', str(abs(date_val[2])))
value = value.replace('-', '/')
@@ -268,5 +268,6 @@ class DateDisplayNL(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('nl_NL', 'dutch', 'Dutch', 'nl_BE', 'nl'),
DateParserNL, DateDisplayNL)
register_datehandler(
('nl_NL', 'dutch', 'Dutch', 'nl_BE', 'nl', ('%d-%m-%Y',)),
DateParserNL, DateDisplayNL)
+9 -8
View File
@@ -195,7 +195,7 @@ class DateDisplayPL(DateDisplay):
formats = (
"RRRR-MM-DD (ISO)", "Numeryczny", "Miesiąc Dzień, Rok",
"Dzień.Miesiąc.Rok", "Dzień Miesiąc Rok", "Dzień MieRzym Rok"
"Miesiąc.Dzień.Rok", "Dzień Miesiąc Rok", "Dzień MieRzym Rok"
)
# this definition must agree with its "_display_gregorian" method
@@ -224,15 +224,15 @@ class DateDisplayPL(DateDisplay):
if self.format == 0:
return self.display_iso(date_val)
elif self.format == 1:
# month_number.day.year
# day.month_number.year
if date_val[3]:
return self.display_iso(date_val)
else:
if date_val[0] == date_val[1] == 0:
value = str(date_val[2])
else:
value = self._tformat.replace('%m', str(date_val[0]))
value = value.replace('%d', str(date_val[1]))
value = self.dhformat.replace('%d', str(date_val[0]))
value = value.replace('%m', str(date_val[1]))
value = value.replace('%Y', str(date_val[2]))
elif self.format == 2:
# month_name day, year
@@ -245,14 +245,14 @@ class DateDisplayPL(DateDisplay):
value = "%s %d, %s" % (self.long_months[date_val[1]],
date_val[0], year)
elif self.format == 3:
# day. month_number. year
# month_number. day. year
if date_val[0] == 0:
if date_val[1] == 0:
value = year
else:
value = "%d.%s" % (date_val[1], year)
else:
value = "%d.%d.%s" % (date_val[0], date_val[1], year)
value = "%d.%d.%s" % (date_val[1], date_val[0], year)
elif self.format == 4:
# day month_name year
if date_val[0] == 0:
@@ -317,5 +317,6 @@ class DateDisplayPL(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('pl_PL','polish','Polish_Poland','pl'),
DateParserPL, DateDisplayPL)
register_datehandler(
('pl_PL', 'polish', 'Polish_Poland', 'pl', ('%d.%m.%Y',)),
DateParserPL, DateDisplayPL)
+4 -1
View File
@@ -180,4 +180,7 @@ class DateDisplayPT(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('pt', 'pt_PT', 'pt_PT.UTF-8', 'pt_BR', 'pt_BR.UTF-8', 'pt', 'portuguese', 'Portuguese'), DateParserPT, DateDisplayPT)
register_datehandler(
('pt_PT', 'pt_PT.UTF-8', 'pt_BR', 'pt_BR.UTF-8',
'pt' 'portuguese', 'Portuguese', ('%d-%m-%Y',)),
DateParserPT, DateDisplayPT)
+3 -1
View File
@@ -162,4 +162,6 @@ class DateDisplayRU(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('ru_RU', 'ru', 'russian', 'Russian'), DateParserRU, DateDisplayRU)
register_datehandler(
('ru_RU', 'ru', 'russian', 'Russian', ('%d.%m.%Y',)),
DateParserRU, DateDisplayRU)
+3 -1
View File
@@ -165,4 +165,6 @@ class DateDisplaySK(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('sk_SK', 'sk', 'SK', 'Slovak'), DateParserSK, DateDisplaySK)
register_datehandler(
('sk_SK', 'sk', 'SK', 'Slovak', ('%d.%m.%Y',)),
DateParserSK, DateDisplaySK)
+6 -4
View File
@@ -24,7 +24,7 @@
"""
Slovenian-specific classes for parsing and displaying dates - new framework.
"""
from __future__ import unicode_literals
#-------------------------------------------------------------------------
#
# Python modules
@@ -66,6 +66,7 @@ class DateParserSL(DateParser):
'ca.' : Date.MOD_ABOUT,
'približno' : Date.MOD_ABOUT,
'pribl.' : Date.MOD_ABOUT,
'~' : Date.MOD_ABOUT,
}
quality_to_int = {
@@ -120,6 +121,7 @@ class DateDisplaySL(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(("sl", "SL", "sl_SI", "slovenščina", "slovenian", "Slovenian",
"sl_SI.UTF8", "sl_SI.UTF-8", "sl_SI.utf-8", "sl_SI.utf8"),
DateParserSL, DateDisplaySL)
register_datehandler(
("sl_SI", "sl", "SL",
"slovenščina", "slovenian", "Slovenian", ('%d. %m. %Y',)),
DateParserSL, DateDisplaySL)
+9 -7
View File
@@ -256,7 +256,7 @@ class DateDisplaySR_Base(DateDisplay):
if date_val[0] == 0 and date_val[1] == 0:
value = str(date_val[2])
else:
value = self._tformat.replace('%m', str(date_val[1]))
value = self.dhformat.replace('%m', str(date_val[1]))
value = value.replace('%d', str(date_val[0]))
value = value.replace('%Y', str(abs(date_val[2])))
#some locale magic already provides the right separator
@@ -423,9 +423,11 @@ class DateDisplaySR_Cyrillic(DateDisplaySR_Base):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('srpski', 'Srpski',
'sr_Latn', 'sr_Latn_RS', 'sr_RS@latin'),
DateParserSR, DateDisplaySR_Latin)
register_datehandler(('sr', 'српски', 'Српски', 'serbian',
'sr_RS', 'sr_Cyrl', 'sr_Cyrl_RS'),
DateParserSR, DateDisplaySR_Cyrillic)
register_datehandler(
('sr_RS.utf8@latin', 'srpski', 'Srpski',
'sr_Latn', 'sr_Latn_RS', 'sr_RS@latin', ('%d.%m.%Y.',)),
DateParserSR, DateDisplaySR_Latin)
register_datehandler(
('sr_RS', 'sr', 'sr_Cyrl', 'sr_Cyrl_RS',
'српски', 'Српски', 'serbian', ('%d.%m.%Y.',)),
DateParserSR, DateDisplaySR_Cyrillic)
+3 -1
View File
@@ -181,4 +181,6 @@ class DateDisplaySv(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('sv_SE', 'sv_SE.UTF-8', 'sv', 'Swedish'), DateParserSv, DateDisplaySv)
register_datehandler(
('sv_SE', 'sv_SE.UTF-8', 'sv', 'Swedish', ('%Y-%m-%d',)),
DateParserSv, DateDisplaySv)
+3 -2
View File
@@ -138,5 +138,6 @@ class DateDisplayUK(DateDisplay):
# Register classes
#
#-------------------------------------------------------------------------
register_datehandler(('uk_UA', 'uk', 'ukrainian', 'Ukrainian'),
DateParserUK, DateDisplayUK)
register_datehandler(
('uk_UA', 'uk', 'ukrainian', 'Ukrainian', ('%d.%m.%Y',)),
DateParserUK, DateDisplayUK)
+3 -2
View File
@@ -178,5 +178,6 @@ class DateDisplayZH_CN(DateDisplay):
#
#-------------------------------------------------------------------------
register_datehandler(('zh_CN', 'zh_SG', 'zh', 'chinese', 'Chinese'),
DateParserZH_CN, DateDisplayZH_CN)
register_datehandler(
('zh_CN', 'zh_SG', 'zh', 'chinese', 'Chinese', ('%Y年%m月%d',)),
DateParserZH_CN, DateDisplayZH_CN)
+3 -2
View File
@@ -178,5 +178,6 @@ class DateDisplayZH_TW(DateDisplay):
#
#-------------------------------------------------------------------------
register_datehandler(('zh_TW', 'zh_HK'),
DateParserZH_TW, DateDisplayZH_TW)
register_datehandler(
('zh_TW', 'zh_HK', ('西元%Y年%m月%d',)),
DateParserZH_TW, DateDisplayZH_TW)
+74 -27
View File
@@ -4,7 +4,7 @@
#
# Copyright (C) 2004-2006 Donald N. Allingham
# Copyright (C) 2013 Vassilii Khachaturov
# Copyright (C) 2014-2015 Paul Franklin
# Copyright (C) 2014-2017 Paul Franklin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -26,6 +26,13 @@ U.S English date display class. Should serve as the base class for all
localized tasks.
"""
#-------------------------------------------------------------------------
#
# Python modules
#
#-------------------------------------------------------------------------
import datetime
#-------------------------------------------------------------------------
#
# set up logging
@@ -40,10 +47,14 @@ log = logging.getLogger(".DateDisplay")
#
#-------------------------------------------------------------------------
from ..lib.date import Date
from . import _grampslocale
from ..const import GRAMPS_LOCALE as glocale
from ..utils.grampslocale import GrampsLocale
from ._datestrings import DateStrings
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
return value
#-------------------------------------------------------------------------
#
# DateDisplay
@@ -53,33 +64,29 @@ class DateDisplay:
"""
Base date display class.
"""
_locale = GrampsLocale(lang='en_US', languages='en')
_tformat = _grampslocale.tformat
_ = _grampslocale.glocale.translation.sgettext
formats = (
# format 0 - must always be ISO
_("YYYY-MM-DD (ISO)"),
_T_("YYYY-MM-DD (ISO)"),
# format # 1 - must always be locale-preferred numerical format
# such as YY.MM.DD, MM-DD-YY, or whatever your locale prefers.
# This should be the format that is used under the locale by
# strftime() for '%x'.
# You may translate this as "Numerical", "System preferred", or similar.
_("date format|Numerical"),
_T_("date format|Numerical"),
# Full month name, day, year
_("Month Day, Year"),
_T_("Month Day, Year"),
# Abbreviated month name, day, year
_("MON DAY, YEAR"),
_T_("MON DAY, YEAR"),
# Day, full month name, year
_("Day Month Year"),
_T_("Day Month Year"),
# Day, abbreviated month name, year
_("DAY MON YEAR")
_T_("DAY MON YEAR")
)
"""
.. note:: Will be overridden if a locale-specific date displayer exists.
@@ -90,14 +97,27 @@ class DateDisplay:
This ``formats`` must agree with
:meth:`~_display_calendar`/:meth:`~_display_gregorian`.
"""
del _
newyear = ("", "Mar1", "Mar25", "Sep1")
_bce_str = "%s B.C.E."
# this will be overridden if a locale-specific date displayer exists
def __init__(self, format=None):
def __init__(self, format=None, blocale=None):
"""
:param blocale: allow translation of dates and date formats
:type blocale: a :class:`.GrampsLocale` instance
"""
from ._datehandler import locale_tformat # circular import if above
if blocale:
self._locale = blocale
elif not hasattr(self, '_locale'):
self._locale = glocale
if self._locale.calendar in locale_tformat:
self.dhformat = locale_tformat[self._locale.calendar] # date format
else:
self.dhformat = locale_tformat['en_GB'] # something is required
self.formats_changed() # allow overriding so a subclass can modify
self._ds = DateStrings(self._locale)
calendar = list(self._ds.calendar)
calendar[Date.CAL_GREGORIAN] = "" # that string only used in parsing,
@@ -120,6 +140,7 @@ class DateDisplay:
self._mod_str = self._ds.modifiers
self._qual_str = self._ds.qualifiers
self.long_days = self._ds.long_days
self.short_days = self._ds.short_days # Icelandic needs this
if format is None:
self.format = 0
@@ -299,6 +320,10 @@ class DateDisplay:
: _("calculated|{short_month} {year}"),
}
def formats_changed(self):
""" Allow overriding so a subclass can modify """
pass
def set_format(self, format):
self.format = format
@@ -330,6 +355,9 @@ class DateDisplay:
Disregard any format settings and use display_iso for each date.
(Will be overridden if a locale-specific date displayer exists.)
(The usage is "displayer.display(...)" (or a variant, e.g. _dd.display)
so any subclass must have a "display" method, somehow, or use this.)
"""
mod = date.get_modifier()
cal = date.get_calendar()
@@ -538,6 +566,22 @@ class DateDisplay:
return self.FORMATS_short_month_year[inflect].format(
short_month = short_months[month], year = '').rstrip()
def _get_short_weekday(self, date_val):
if (date_val[0] == 0 or date_val[1] == 0 # no day or no month or both
or date_val[1] == 13 # Hebrew has 13 months
or date_val[2] < 0): # B.C.E. date
return ''
w_day = datetime.date(date_val[2], date_val[1], date_val[0]) # y, m, d
return self.short_days[((w_day.weekday() + 1) % 7) + 1]
def _get_long_weekday(self, date_val):
if (date_val[0] == 0 or date_val[1] == 0 # no day or no month or both
or date_val[1] == 13 # Hebrew has 13 months
or date_val[2] < 0): # B.C.E. date
return ''
w_day = datetime.date(date_val[2], date_val[1], date_val[0]) # y, m, d
return self.long_days[((w_day.weekday() + 1) % 7) + 1]
def dd_dformat01(self, date_val):
"""
numerical
@@ -551,7 +595,17 @@ class DateDisplay:
if date_val[0] == date_val[1] == 0:
return str(date_val[2])
else:
value = self._tformat.replace('%m', str(date_val[1]))
value = self.dhformat.replace('%m', str(date_val[1]))
# some locales have %b for the month, e.g. ar_EG, is_IS, nb_NO
# so it would be "Jan" but as it's "numeric" I'll make it "1"
value = value.replace('%b', str(date_val[1]))
# some locales have %B for the month, e.g. ta_IN
# so it would be "January" but as it's "numeric" I'll make it 1
value = value.replace('%B', str(date_val[1]))
# some locales have %a for the abbreviated day, e.g. is_IS
value = value.replace('%a', self._get_short_weekday(date_val))
# some locales have %A for the long/full day, e.g. ta_IN
value = value.replace('%A', self._get_long_weekday(date_val))
if date_val[0] == 0: # ignore the zero day and its delimiter
i_day = value.find('%d')
value = value.replace(value[i_day:i_day+3], '')
@@ -715,17 +769,10 @@ class DateDisplayEn(DateDisplay):
"""
English language date display class.
"""
def __init__(self, format=None):
"""
Create a DateDisplay class that converts a Date object to a string
of the desired format. The format value must correspond to the format
list value (DateDisplay.format[]).
"""
DateDisplay.__init__(self, format)
display = DateDisplay.display_formatted
_locale = DateDisplay._locale # normally set in register_datehandler
class DateDisplayGB(DateDisplay):
"""
British-English language date display class (its format is different).
"""
display = DateDisplay.display_formatted
+44 -8
View File
@@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2004-2006 Donald N. Allingham
# Copyright (C) 2017 Paul Franklin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -43,10 +44,10 @@ log = logging.getLogger(".gen.datehandler")
#
#-------------------------------------------------------------------------
from ._dateparser import DateParser
from ._datedisplay import DateDisplay, DateDisplayEn
from ._datedisplay import DateDisplay, DateDisplayEn, DateDisplayGB
from ..constfunc import win
from ..const import GRAMPS_LOCALE as glocale
from gramps.gen.utils.grampslocale import GrampsLocale
from ..utils.grampslocale import GrampsLocale
#-------------------------------------------------------------------------
#
@@ -74,19 +75,37 @@ LANG_SHORT = str(LANG_SHORT)
LANG_TO_PARSER = {
'C' : DateParser,
'en' : DateParser,
'English_United States' : DateParser,
}
LANG_TO_DISPLAY = {
'C' : DateDisplayEn,
'en' : DateDisplayEn,
'en_GB' : DateDisplayEn,
'English_United States' : DateDisplayEn,
'ko_KR' : DateDisplay,
'nb_NO' : DateDisplay,
}
main_locale = { } # this will be augmented by calls to register_datehandler
locale_tformat = {} # locale "tformat" (date format) strings
for no_handler in (
('C', ('%d/%m/%Y',)),
('eo_EO', 'eo', 'Esperanto', ('%d/%m/%Y',)), # 'eo_EO' is a placeholder
('he_IL', 'he', 'Hebrew', ('%d/%m/%Y',)),
('sq_AL', 'sq', 'Albanian', ('%Y/%b/%d',)),
('ta_IN', 'ta', 'Tamil', ('%A %d %B %Y',)),
('tr_TR', 'tr', 'Turkish', ('%d/%m/%Y',)),
('vi_VN', 'vi', 'Vietnamese', ('%d/%m/%Y',)),
):
format_string = ''
for possible_format in no_handler:
if isinstance(possible_format, tuple):
format_string = possible_format[0] # pre-seeded date format string
# maintain legacy gramps transformations
format_string = format_string.replace('%y','%Y').replace('-', '/')
for lang_str in no_handler:
if isinstance(lang_str, tuple): continue
main_locale[lang_str] = no_handler[0]
locale_tformat[lang_str] = format_string # locale's date format string
def register_datehandler(locales,parse_class,display_class):
"""
Registers the passed date parser class and date displayer
@@ -104,8 +123,25 @@ def register_datehandler(locales,parse_class,display_class):
:param display_class: Class to be associated with displaying
:type display_class: :class:`.DateDisplay`
"""
format_string = ''
for possible_format in locales: # allow possibly embedding a date format
if isinstance(possible_format, tuple):
format_string = possible_format[0] # pre-seeded date format string
# maintain legacy gramps transformations
format_string = format_string.replace('%y','%Y').replace('-', '/')
for lang_str in locales:
if isinstance(lang_str, tuple): continue
LANG_TO_PARSER[lang_str] = parse_class
LANG_TO_DISPLAY[lang_str] = display_class
main_locale[lang_str] = locales[0]
locale_tformat[lang_str] = format_string # locale's date format string
parse_class._locale = display_class._locale = GrampsLocale(lang=locales[0])
register_datehandler(
('en_GB', 'English_United Kingdom', ("%d/%m/%y",)),
DateParser, DateDisplayGB)
register_datehandler(
('en_US', 'en', 'English_United States', ("%m/%d/%y",)),
DateParser, DateDisplayEn)
+37 -15
View File
@@ -3,6 +3,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2004-2006 Donald N. Allingham
# Copyright (C) 2017 Paul Franklin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -46,7 +47,7 @@ log = logging.getLogger(".DateParser")
#
#-------------------------------------------------------------------------
from ..lib.date import Date, DateError, Today
from . import _grampslocale
from ..const import GRAMPS_LOCALE as glocale
from ..utils.grampslocale import GrampsLocale
from ._datestrings import DateStrings
@@ -192,10 +193,7 @@ class DateParser:
converted, the text string is assigned.
"""
_locale = GrampsLocale(lang='en', languages='en')
fmt = _grampslocale.tformat
_fmt_parse = re.compile(".*%(\S).*%(\S).*%(\S).*")
_dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*")
# RFC-2822 only uses capitalized English abbreviated names, no locales.
_rfc_days = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')
@@ -315,7 +313,7 @@ class DateParser:
return
else:
DateParser._langs.add(lang)
ds = DateStrings(self._locale)
ds = self._ds = DateStrings(self._locale)
log.debug("Begin building parser prefix tables for {}".format(lang))
_build_prefix_table(DateParser.month_to_int,
_generate_variants(
@@ -332,7 +330,21 @@ class DateParser:
_build_prefix_table(DateParser.calendar_to_int,
_generate_variants(zip(ds.calendar)))
def __init__(self):
def __init__(self, plocale=None):
"""
:param plocale: allow correct date format to be loaded and parsed
:type plocale: a :class:`.GrampsLocale` instance
"""
from ._datehandler import locale_tformat # circular import if above
if plocale:
self._locale = plocale
elif not hasattr(self, '_locale'):
self._locale = glocale
if self._locale.calendar in locale_tformat:
self.dhformat = locale_tformat[self._locale.calendar] # date format
else:
self.dhformat = locale_tformat['en_GB'] # something is required
self.dhformat_changed() # Allow overriding so a subclass can modify it
self.init_strings()
self.parser = {
Date.CAL_GREGORIAN : self._parse_gregorian,
@@ -344,16 +356,24 @@ class DateParser:
Date.CAL_SWEDISH : self._parse_swedish,
}
match = self._fmt_parse.match(self.fmt.lower())
match = self._dhformat_parse.match(self.dhformat.lower())
if match:
self.dmy = (match.groups() == ('d', 'm', 'y') or \
match.groups() == ('d', 'b', 'y'))
self._ddmy = match.groups() == ('a', 'e', 'b', 'y') # Icelandic
self.dmy = (match.groups() == ('d', 'm', 'y') or
match.groups() == ('e', 'm', 'y') or # Bulgarian
match.groups() == ('d', 'b', 'y') or
match.groups() == ('a', 'e', 'b', 'y'))
self.ymd = (match.groups() == ('y', 'm', 'd') or \
match.groups() == ('y', 'b', 'd'))
# note ('m','d','y') is valid -- in which case both will be False
else:
self.dmy = True
self.ymd = False
self._ddmy = False
def dhformat_changed(self):
""" Allow overriding so a subclass can modify it """
pass
def re_longest_first(self, keys):
"""
@@ -371,7 +391,7 @@ class DateParser:
Most of the re's in most languages can stay as is. span and range
most likely will need to change. Whatever change is done, this method
may be called first as DateParser.init_strings(self) so that the
invariant expresions don't need to be repeteadly coded. All differences
invariant expresions don't need to be repeatedly coded. All differences
can be coded after DateParser.init_strings(self) call, that way they
override stuff from this method.
@@ -591,18 +611,18 @@ class DateParser:
value = subparser(text)
if value != Date.EMPTY:
return value
match = self._iso.match(text)
if match:
groups = match.groups()
y = self._get_int(groups[0])
m = self._get_int(groups[3])
d = self._get_int(groups[4])
if check and not check((d, m, y)):
return Date.EMPTY
if groups[2]: # slash year digit
if groups[2] and julian_valid((d, m, y + 1)): # slash year digit
return (d, m, y + 1, True)
else:
if check is None or check((d, m, y)):
return (d, m, y, False)
return Date.EMPTY
# Database datetime format, used in ex. MSSQL
# YYYYMMDD HH:MM:SS or YYYYMMDD or YYYYMMDDHHMMSS
@@ -633,6 +653,8 @@ class DateParser:
groups = match.groups()
if groups == (None, None, None, None, None):
return Date.EMPTY
if self._ddmy: # Icelandic
groups = groups[1:] # ignore the day of the week at the start
if self.ymd:
# '1789' and ymd: incomplete date
if groups[1] is None:
+20 -6
View File
@@ -248,18 +248,29 @@ class DateStrings:
_("Saturday"),
)
self.short_days = ("", # Icelandic needs them
_("Sun"),
_("Mon"),
_("Tue"),
_("Wed"),
_("Thu"),
_("Fri"),
_("Sat"))
# set GRAMPS_RESOURCES then: python3 -m gramps.gen.datehandler._datestrings
if __name__ == '__main__':
import sys
from ..utils.grampslocale import GrampsLocale
from gramps.gen.const import GRAMPS_LOCALE as glocale
from ..const import GRAMPS_LOCALE as glocale
from ._grampslocale import (_deprecated_long_months as old_long,
_deprecated_short_months as old_short,
_deprecated_short_days as old_short_days, # Icelandic needs them
_deprecated_long_days as old_days)
from ._datedisplay import DateDisplay
import gettext
lang = glocale.lang
lang_short = lang[:2]
available_langs = glocale.get_available_translations()
available_langs = glocale.languages # get the cached list
if glocale.check_available_translations(lang) is None:
print ("Translation for current language {lang} not available.\n"
"Available translations: {list}.\n"
@@ -272,10 +283,10 @@ if __name__ == '__main__':
print ("# Generating snippets for {}*.po\n"
"# Available languages: {}".format(
lang_short, available_langs))
glocale = GrampsLocale(languages=(lang))
glocale = GrampsLocale(languages=(lang)) # in __main__
dd = glocale.date_displayer
ds = dd._ds
glocale_EN = GrampsLocale(languages=('en'))
glocale_EN = GrampsLocale(languages=('en')) # in __main__
ds_EN = DateStrings(glocale_EN)
filename = __file__
@@ -308,6 +319,7 @@ if __name__ == '__main__':
localized_months = old_long
print_po_snippet((ds_EN.long_months, localized_months, old_long),
"localized lexeme inflections||")
try:
localized_months = dd.__class__.short_months
except AttributeError:
@@ -315,6 +327,10 @@ if __name__ == '__main__':
print_po_snippet((ds_EN.short_months, localized_months, old_short),
"localized lexeme inflections - short month form||")
print_po_snippet((ds_EN.long_days, old_days, old_days), "")
print_po_snippet((ds_EN.short_days, old_short_days, old_short_days), "")
try:
loc = dd.__class__.hebrew
print_po_snippet((ds_EN.hebrew, loc, loc),
@@ -356,5 +372,3 @@ if __name__ == '__main__':
"date quality|")
except AttributeError:
pass
print_po_snippet((ds_EN.long_days, old_days, old_days), "")
+12 -3
View File
@@ -34,6 +34,7 @@ import time
# Gramps modules
#
#-------------------------------------------------------------------------
from ..const import GRAMPS_LOCALE as glocale
from ..lib.date import Date
from . import LANG_TO_DISPLAY, LANG, parser, displayer
@@ -42,14 +43,22 @@ from . import LANG_TO_DISPLAY, LANG, parser, displayer
# Convenience functions
#
#--------------------------------------------------------------
def get_date_formats():
def get_date_formats(flocale=glocale):
"""
Return the list of supported formats for date parsers and displayers.
The UI language formats will be used unless another locale is fed in.
:param flocale: allow deferred translation of date formats
:type flocale: a :class:`.GrampsLocale` instance
"""
# trans_text is a defined keyword (see po/update_po.py, po/genpot.sh)
trans_text = flocale.translation.sgettext
try:
return LANG_TO_DISPLAY[LANG].formats
return tuple(trans_text(fmt)
for fmt in LANG_TO_DISPLAY[flocale.lang](0).formats)
except:
return LANG_TO_DISPLAY["C"].formats
return tuple(trans_text(fmt)
for fmt in LANG_TO_DISPLAY['C'](0).formats)
def set_format(value):
try:
+27 -47
View File
@@ -20,8 +20,19 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#-------------------------------------------------------------------------
#
# Python modules
#
#-------------------------------------------------------------------------
import locale
from gramps.gen.const import GRAMPS_LOCALE as glocale
#-------------------------------------------------------------------------
#
# Gramps modules
#
#-------------------------------------------------------------------------
from ..const import GRAMPS_LOCALE as glocale # TODO unneeded? (see codeset)
"""
Some OS environments do not support the locale.nl_langinfo() method
@@ -33,7 +44,7 @@ strftime.
Since these routines return values encoded into selected character
set, we have to convert to unicode.
"""
codeset = glocale.encoding
codeset = glocale.encoding # TODO I don't think "codeset" is used anymore
try:
@@ -89,20 +100,15 @@ try:
_deprecated_short_days = (
"",
locale.nl_langinfo(locale.ABDAY_1), # Sunday
locale.nl_langinfo(locale.ABDAY_2), # Monday
locale.nl_langinfo(locale.ABDAY_3), # Tuesday
locale.nl_langinfo(locale.ABDAY_4), # Wednesday
locale.nl_langinfo(locale.ABDAY_5), # Thursday
locale.nl_langinfo(locale.ABDAY_6), # Friday
locale.nl_langinfo(locale.ABDAY_7), # Saturday
locale.nl_langinfo(locale.ABDAY_1), # Sun
locale.nl_langinfo(locale.ABDAY_2), # Mon
locale.nl_langinfo(locale.ABDAY_3), # Tue
locale.nl_langinfo(locale.ABDAY_4), # Wed
locale.nl_langinfo(locale.ABDAY_5), # Thu
locale.nl_langinfo(locale.ABDAY_6), # Fri
locale.nl_langinfo(locale.ABDAY_7), # Sat
)
tformat = locale.nl_langinfo(locale.D_FMT).replace('%y','%Y')
# Gramps treats dates with '-' as ISO format, so replace separator on
# locale dates that use '-' to prevent confict
tformat = tformat.replace('-', '/')
except:
import time
@@ -160,37 +166,11 @@ except:
_deprecated_short_days = (
"",
time.strftime('%a',(1,1,1,1,1,1,6,1,1)), # Sunday
time.strftime('%a',(1,1,1,1,1,1,0,1,1)), # Monday
time.strftime('%a',(1,1,1,1,1,1,1,1,1)), # Tuesday
time.strftime('%a',(1,1,1,1,1,1,2,1,1)), # Wednesday
time.strftime('%a',(1,1,1,1,1,1,3,1,1)), # Thursday
time.strftime('%a',(1,1,1,1,1,1,4,1,1)), # Friday
time.strftime('%a',(1,1,1,1,1,1,5,1,1)), # Saturday
time.strftime('%a',(1,1,1,1,1,1,6,1,1)), # Sun
time.strftime('%a',(1,1,1,1,1,1,0,1,1)), # Mon
time.strftime('%a',(1,1,1,1,1,1,1,1,1)), # Tue
time.strftime('%a',(1,1,1,1,1,1,2,1,1)), # Wed
time.strftime('%a',(1,1,1,1,1,1,3,1,1)), # Thu
time.strftime('%a',(1,1,1,1,1,1,4,1,1)), # Fri
time.strftime('%a',(1,1,1,1,1,1,5,1,1)), # Sat
)
# depending on the locale, the value returned for 20th Feb 2009 could be
# of the format '20/2/2009', '20/02/2009', '20.2.2009', '20.02.2009',
# '20-2-2009', '20-02-2009', '2009/02/20', '2009.02.20', '2009-02-20',
# '09-02-20' hence to reduce the possible values to test, make sure month
# is double digit also day should be double digit, preferably greater than
# 12 for human readablity
timestr = time.strftime('%x',(2005,10,25,1,1,1,1,1,1))
# Gramps treats dates with '-' as ISO format, so replace separator on
# locale dates that use '-' to prevent confict
timestr = timestr.replace('-', '/')
time2fmt_map = {
'25/10/2005' : '%d/%m/%Y',
'10/25/2005' : '%m/%d/%Y',
'2005/10/25' : '%Y/%m/%d',
'25.10.2005' : '%d.%m.%Y',
'10.25.2005' : '%m.%d.%Y',
'2005.10.25' : '%Y.%m.%d',
}
try:
tformat = time2fmt_map[timestr]
except KeyError as e:
tformat = '%d/%m/%Y' #default value
@@ -30,8 +30,8 @@ from ...lib.date import Date
class DateDisplayTest(unittest.TestCase):
def setUp(self):
from .._datedisplay import DateDisplay
self.display = DateDisplay()
from .._datedisplay import DateDisplayEn
self.display = DateDisplayEn()
self.display_RU = GrampsLocale(lang='ru').date_displayer
def assert_map_key_val(self, m, k, v):
@@ -63,7 +63,7 @@ class DateHandlerTest(unittest.TestCase):
self.assertTrue(test_date.is_equal(new_date),
"{} -> {}\n{} -> {}".format(
test_date, new_date,
test_date.to_struct(), new_date.to_struct()))
test_date.__dict__, new_date.__dict__))
def test_simple(self):
+2 -35
View File
@@ -69,38 +69,5 @@ from .dbconst import *
from .txn import *
from .exceptions import *
from .undoredo import *
def find_surname_name(key, data):
"""
Creating a surname from raw name, to use for sort and index
returns a byte string
"""
return __index_surname(data[5])
def __index_surname(surn_list):
"""
All non pa/matronymic surnames are used in indexing.
pa/matronymic not as they change for every generation!
returns a byte string
"""
from gramps.gen.lib import NameOriginType
if surn_list:
surn = " ".join([x[0] for x in surn_list if not (x[3][0] in [
NameOriginType.PATRONYMIC, NameOriginType.MATRONYMIC]) ])
else:
surn = ""
return surn
def open_database(database, force_unlock=False):
"""
Shortcut for external uses of databases.
"""
from ..dbstate import DbState
return DbState().open_database(database, force_unlock)
def make_database(dbid):
"""
Shortcut for external uses of databases.
"""
from ..dbstate import DbState
return DbState().make_database(dbid)
from .utils import *
from .generic import *
+826 -1065
View File
File diff suppressed because it is too large Load Diff
+54
View File
@@ -0,0 +1,54 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Nick Hall
# Copyright (C) 2011 Tim G L Lyons
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#-------------------------------------------------------------------------
#
# class DbBookmarks
#
#-------------------------------------------------------------------------
class DbBookmarks:
def __init__(self, default=[]):
self.bookmarks = list(default) # want a copy (not an alias)
def set(self, new_list):
self.bookmarks = list(new_list)
def get(self):
return self.bookmarks
def append(self, item):
self.bookmarks.append(item)
def append_list(self, blist):
self.bookmarks += blist
def remove(self, item):
self.bookmarks.remove(item)
def pop(self, item):
return self.bookmarks.pop(item)
def insert(self, pos, item):
self.bookmarks.insert(pos, item)
def close(self):
del self.bookmarks
+1
View File
@@ -56,6 +56,7 @@ DBCACHE = 0x4000000 # Size of the shared memory buffer pool
DBLOCKS = 100000 # Maximum number of locks supported
DBOBJECTS = 100000 # Maximum number of simultaneously locked objects
DBUNDO = 1000 # Maximum size of undo buffer
ARRAYSIZE = 1000 # The arraysize for a SQL cursor
PERSON_KEY = 0
FAMILY_KEY = 1
@@ -63,10 +63,11 @@ from functools import wraps
# Gramps libraries
#
#-------------------------------------------------------------------------
from gramps.gen.db.base import DbReadBase
from gramps.gen.db.dbconst import DBLOGNAME
from gramps.gen.errors import HandleError
from gramps.gen.utils.callback import Callback
from .base import DbReadBase
from .dbconst import DBLOGNAME
from ..errors import HandleError
from ..utils.callback import Callback
from ..lib import Researcher
LOG = logging.getLogger(DBLOGNAME)
@@ -210,16 +211,6 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
__signals__ = {}
@classmethod
def get_class_summary(cls):
"""
Return a diction of information about this database.
"""
summary = {
"Database type": cls.__name__,
}
return summary
def __init__(self):
"""
Create a new DummyDb instance.
@@ -228,6 +219,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
Callback.__init__(self)
self.db_is_open = False
self.readonly = True
self.name_formats = []
self.bookmarks = Bookmarks()
self.family_bookmarks = Bookmarks()
self.event_bookmarks = Bookmarks()
@@ -237,6 +229,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
self.repo_bookmarks = Bookmarks()
self.media_bookmarks = Bookmarks()
self.note_bookmarks = Bookmarks()
self.owner = Researcher()
def get_feature(self, feature):
"""
@@ -536,7 +529,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_family_handles(self, sort_handles=False):
"""
@@ -680,7 +673,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_note_handles(self):
"""
@@ -792,7 +785,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_person_attribute_types(self):
"""
@@ -839,7 +832,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_person_handles(self, sort_handles=False):
"""
@@ -897,7 +890,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_place_handles(self, sort_handles=False):
"""
@@ -917,7 +910,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_family_data(self, handle):
"""
@@ -926,7 +919,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_note_data(self, handle):
"""
@@ -935,7 +928,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_media_data(self, handle):
"""
@@ -944,7 +937,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_person_data(self, handle):
"""
@@ -953,7 +946,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_place_data(self, handle):
"""
@@ -962,7 +955,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_repository_data(self, handle):
"""
@@ -971,7 +964,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_source_data(self, handle):
"""
@@ -980,7 +973,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_citation_data(self, handle):
"""
@@ -989,7 +982,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_raw_tag_data(self, handle):
"""
@@ -998,7 +991,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_repo_bookmarks(self):
"""
@@ -1036,7 +1029,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_repository_handles(self):
"""
@@ -1063,7 +1056,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
"""
if not self.db_is_open:
LOG.warning("database is closed")
return None
return self.owner
def get_save_path(self):
"""
@@ -1107,7 +1100,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_source_handles(self, sort_handles=False):
"""
@@ -1165,7 +1158,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_citation_handles(self, sort_handles=False):
"""
@@ -1203,7 +1196,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
if not self.db_is_open:
LOG.warning("database is closed")
LOG.warning("handle %s does not exist in the dummy database", handle)
raise HandleError('Handle %s not found' % handle.encode('utf-8'))
raise HandleError('Handle %s not found' % handle)
def get_tag_from_name(self, val):
"""
@@ -1341,7 +1334,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
"""
return self.db_is_open
def iter_citations(self, order_by=None):
def iter_citations(self):
"""
Return an iterator over objects for Citations in the database
"""
@@ -1357,7 +1350,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_events(self, order_by=None):
def iter_events(self):
"""
Return an iterator over objects for Events in the database
"""
@@ -1365,7 +1358,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_families(self, order_by=None):
def iter_families(self):
"""
Return an iterator over objects for Families in the database
"""
@@ -1389,7 +1382,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_media(self, order_by=None):
def iter_media(self):
"""
Return an iterator over objects for Medias in the database
"""
@@ -1405,7 +1398,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_notes(self, order_by=None):
def iter_notes(self):
"""
Return an iterator over objects for Notes in the database
"""
@@ -1413,7 +1406,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_people(self, order_by=None):
def iter_people(self):
"""
Return an iterator over objects for Persons in the database
"""
@@ -1437,7 +1430,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_places(self, order_by=None):
def iter_places(self):
"""
Return an iterator over objects for Places in the database
"""
@@ -1445,7 +1438,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_repositories(self, order_by=None):
def iter_repositories(self):
"""
Return an iterator over objects for Repositories in the database
"""
@@ -1469,7 +1462,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_sources(self, order_by=None):
def iter_sources(self):
"""
Return an iterator over objects for Sources in the database
"""
@@ -1485,7 +1478,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
LOG.warning("database is closed")
return []
def iter_tags(self, order_by=None):
def iter_tags(self):
"""
Return an iterator over objects for Tags in the database
"""
@@ -1621,7 +1614,7 @@ class DummyDb(M_A_M_B("NewBaseClass", (DbReadBase, Callback, object,), {})):
def set_mediapath(self, path):
"""
Set the default media path for database, path should be utf-8.
Set the default media path for database.
"""
if not self.db_is_open:
LOG.warning("database is closed")
+2 -2
View File
@@ -25,8 +25,8 @@
# Gramps modules
#
#-------------------------------------------------------------------------
from gramps.gen.const import URL_WIKISTRING, URL_MANUAL_PAGE
from gramps.gen.const import GRAMPS_LOCALE as glocale
from ..const import URL_WIKISTRING, URL_MANUAL_PAGE
from ..const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
#-------------------------------------------------------------------------
+1397 -1179
View File
File diff suppressed because it is too large Load Diff
-110
View File
@@ -1,110 +0,0 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2016 Gramps Development Team
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
from gramps.gen.db.where import eval_where
from gramps.gen.lib import Person
import unittest
##########
# Tests:
def make_closure(surname):
"""
Test closure.
"""
from gramps.gen.lib import Person
return (lambda person:
(person.primary_name.surname_list[0].surname == surname and
person.gender == Person.MALE))
class Thing:
def __init__(self):
self.list = ["I0", "I1", "I2"]
def where(self):
return lambda person: person.gramps_id == self.list[1]
def apply(self, db, person):
return person.gender == Person.MALE
class ClosureTest(unittest.TestCase):
def check(self, test):
result = eval_where(test[0])
self.assertTrue(result == test[1], "%s is not %s" % (result, test[1]))
def test_01(self):
self.check(
(lambda family: (family.private and
family.mother_handle.gramps_id != "I0001"),
['AND', [['private', '==', True],
['mother_handle.gramps_id', '!=', 'I0001']]]))
def test_02(self):
self.check(
(lambda person: LIKE(person.gramps_id, "I0001"),
['gramps_id', 'LIKE', 'I0001']))
def test_03(self):
self.check(
(lambda note: note.gramps_id == "N0001",
['gramps_id', '==', 'N0001']))
def test_04(self):
self.check(
(lambda person: person.event_ref_list.ref.gramps_id == "E0001",
['event_ref_list.ref.gramps_id', '==', 'E0001']))
def test_05(self):
self.check(
(lambda person: LIKE(person.gramps_id, "I0001") or person.private,
["OR", [['gramps_id', 'LIKE', 'I0001'],
["private", "==", True]]]))
def test_06(self):
self.check(
(lambda person: person.event_ref_list <= 0,
["event_ref_list", "<=", 0]))
def test_07(self):
self.check(
(lambda person: person.primary_name.surname_list[0].surname == "Smith",
["primary_name.surname_list.0.surname", "==", "Smith"]))
def test_08(self):
self.check(
(make_closure("Smith"),
["AND", [["primary_name.surname_list.0.surname", "==", "Smith"],
["gender", "==", 1]]]))
def test_09(self):
self.check(
[Thing().where(), ["gramps_id", "==", "I1"]])
def test_10(self):
self.check(
(lambda person: LIKE(person.gramps_id, "I000%"),
["gramps_id", "LIKE", "I000%"]))
def test_11(self):
self.check(
[Thing().apply, ["gender", "==", 1]])
if __name__ == "__main__":
unittest.main()
+22 -47
View File
@@ -1,3 +1,22 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2015 Douglas S. Blank <doug.blank@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#-------------------------------------------------------------------------
#
# Standard python modules
@@ -5,7 +24,6 @@
#-------------------------------------------------------------------------
from abc import ABCMeta, abstractmethod
import time
import pickle
from collections import deque
class DbUndo(metaclass=ABCMeta):
@@ -14,33 +32,16 @@ class DbUndo(metaclass=ABCMeta):
for use with a real backend.
"""
__slots__ = ('undodb', 'db', 'mapbase', 'undo_history_timestamp',
'txn', 'undoq', 'redoq')
__slots__ = ('undodb', 'db', 'undo_history_timestamp', 'undoq', 'redoq')
def __init__(self, grampsdb):
def __init__(self, db):
"""
Class constructor. Set up main instance variables
"""
self.db = grampsdb
self.db = db
self.undoq = deque()
self.redoq = deque()
self.undo_history_timestamp = time.time()
self.txn = None
# N.B. the databases have to be in the same order as the numbers in
# xxx_KEY in gen/db/dbconst.py
self.mapbase = (
self.db.person_map,
self.db.family_map,
self.db.source_map,
self.db.event_map,
self.db.media_map,
self.db.place_map,
self.db.repository_map,
None,
self.db.note_map,
self.db.tag_map,
self.db.citation_map,
)
def clear(self):
"""
@@ -49,7 +50,6 @@ class DbUndo(metaclass=ABCMeta):
self.undoq.clear()
self.redoq.clear()
self.undo_history_timestamp = time.time()
self.txn = None
def __enter__(self, value):
"""
@@ -142,30 +142,5 @@ class DbUndo(metaclass=ABCMeta):
return False
return self._redo(update_history)
def undo_reference(self, data, handle, db_map):
"""
Helper method to undo a reference map entry
"""
if data is None:
db_map.delete(handle)
else:
db_map[handle] = data
def undo_data(self, data, handle, db_map, emit, signal_root):
"""
Helper method to undo/redo the changes made
"""
if data is None:
emit(signal_root + '-delete', ([handle],))
db_map.delete(handle)
else:
ex_data = db_map[handle]
if ex_data:
signal = signal_root + '-update'
else:
signal = signal_root + '-add'
db_map[handle] = data
emit(signal, ([handle],))
undo_count = property(lambda self:len(self.undoq))
redo_count = property(lambda self:len(self.redoq))
+181
View File
@@ -0,0 +1,181 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2006 Donald N. Allingham
# Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2012 Doug Blank <doug.blank@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
"""
Database utilites
"""
#------------------------------------------------------------------------
#
# Python modules
#
#------------------------------------------------------------------------
import os
import logging
#------------------------------------------------------------------------
#
# Gramps modules
#
#------------------------------------------------------------------------
from ..plug import BasePluginManager
from ..const import PLUGINS_DIR, USER_PLUGINS
from ..config import config
from .dbconst import DBLOGNAME
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
_LOG = logging.getLogger(DBLOGNAME)
def make_database(plugin_id):
"""
Make a database, given a plugin id.
"""
pmgr = BasePluginManager.get_instance()
pdata = pmgr.get_plugin(plugin_id)
if not pdata:
# This might happen if using gramps from outside, and
# we haven't loaded plugins yet
pmgr.reg_plugins(PLUGINS_DIR, None, None)
pmgr.reg_plugins(USER_PLUGINS, None, None, load_on_reg=True)
pdata = pmgr.get_plugin(plugin_id)
if pdata:
mod = pmgr.load_plugin(pdata)
if mod:
database = getattr(mod, pdata.databaseclass)
db = database()
import inspect
caller_frame = inspect.stack()[1]
_LOG.debug("Database class instance created Class:%s instance:%s. "
"Called from File %s, line %s, in %s"
% ((db.__class__.__name__, hex(id(db)))
+ (os.path.split(caller_frame[1])[1],)
+ tuple(caller_frame[i] for i in range(2, 4))))
return db
else:
raise Exception("can't load database backend: '%s'" % plugin_id)
else:
raise Exception("no such database backend: '%s'" % plugin_id)
def open_database(dbname, force_unlock=False, callback=None):
"""
Open a database by name and return the database.
"""
data = lookup_family_tree(dbname)
database = None
if data:
dbpath, locked, locked_by, backend = data
if (not locked) or (locked and force_unlock):
database = make_database(backend)
database.load(dbpath, callback=callback)
return database
def lookup_family_tree(dbname):
"""
Find a Family Tree given its name, and return properties.
"""
dbdir = os.path.expanduser(config.get('database.path'))
for dpath in os.listdir(dbdir):
dirpath = os.path.join(dbdir, dpath)
path_name = os.path.join(dirpath, "name.txt")
if os.path.isfile(path_name):
with open(path_name, 'r', encoding='utf8') as file:
name = file.readline().strip()
if dbname == name:
locked = False
locked_by = None
backend = None
fname = os.path.join(dirpath, "database.txt")
if os.path.isfile(fname):
with open(fname, 'r', encoding='utf8') as ifile:
backend = ifile.read().strip()
else:
backend = "bsddb"
try:
fname = os.path.join(dirpath, "lock")
with open(fname, 'r', encoding='utf8') as ifile:
locked_by = ifile.read().strip()
locked = True
except (OSError, IOError):
pass
return (dirpath, locked, locked_by, backend)
return None
def import_as_dict(filename, user, skp_imp_adds=True):
"""
Import the filename into a InMemoryDB and return it.
"""
db = make_database("inmemorydb")
db.load(None)
db.set_feature("skip-import-additions", skp_imp_adds)
status = import_from_filename(db, filename, user)
return db if status else None
def import_from_filename(db, filename, user):
"""
Import a file into a database.
"""
(name, ext) = os.path.splitext(os.path.basename(filename))
extension = ext[1:].lower()
pmgr = BasePluginManager.get_instance()
import_list = pmgr.get_reg_importers()
for pdata in import_list:
if extension == pdata.extension:
mod = pmgr.load_plugin(pdata)
if not mod:
for item in pmgr.get_fail_list():
name, error_tuple, pdata = item
etype, exception, traceback = error_tuple
return False
import_function = getattr(mod, pdata.import_function)
results = import_function(db, filename, user)
if results is None:
return False
else:
return True
return False
def find_surname_name(key, data):
"""
Creating a surname from raw name, to use for sort and index
returns a byte string
"""
return __index_surname(data[5])
def __index_surname(surn_list):
"""
All non pa/matronymic surnames are used in indexing.
pa/matronymic not as they change for every generation!
returns a byte string
"""
from ..lib import NameOriginType
if surn_list:
surn = " ".join([x[0] for x in surn_list if not (x[3][0] in [
NameOriginType.PATRONYMIC, NameOriginType.MATRONYMIC])])
else:
surn = ""
return surn
-222
View File
@@ -1,222 +0,0 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2016 Gramps Development Team
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
from meta.asttools import Visitor
from meta.decompiler import _ast, decompile_func
import copy
class ParseFilter(Visitor):
"""
This class is used to turn Python lambda expressions into AST
which is used as a SELECT statements in databases via the .where()
method. This is used by both BSDDB and SQL-based databases.
Not all Python is allowed as a where-clause, and some functions
used here are not real Python functions.
Examples:
db.Person.where(
lambda person: person.gramps_id == "I0001"
).select()
Some uses look (and evaluate) like regular Python.
db.Person.where(
lambda person: LIKE(person.gramps_id, "I000%")
).select()
LIKE is not a real Python function, but the syntax is used to
indicate a fuzzy match.
db.Family.where(
lambda family: LIKE(family.mother_handle.gramps_id, "I003%")
).select()
LIKE uses % as a wildcard matching character, like ".*" in re.
db.Family.where(
lambda family: family.mother_handle.event_ref_list.ref.gramps_id == 'E0156'
).select()
Here, property chaining is shown without having to check to see if
values actually exist. The checking for valid/existing properties
is done by the select system.
db.Family.where(
lambda family: family.mother_handle.event_ref_list[0] != None
).select()
Indexing and use of None is allowed.
db.Person.where(
lambda person: person.private == True
).select()
One current limitiation is that it cannot detect a boolean value,
so we must use the "== True" to make sure the proper code is
generated.
The following method names are dictated by meta's Visitor. Additional
methods can be added if an error is received such as:
AttributeError: visitXXX does not exist
The method must be added, return the proper value for that
syntax. May require recursive calls to process_ITEM().
Please see meta for more information:
http://srossross.github.io/Meta/html/index.html
"""
def visitName(self, node):
return node.id
def visitNum(self, node):
return node.n
def visitlong(self, node):
return node
def process_expression(self, expr):
if isinstance(expr, str):
# boolean
return [self.process_field(expr), "==", True]
elif len(expr) == 3:
# (field, op, value)
return [self.process_field(expr[0]),
expr[1],
self.process_value(expr[2])]
else:
# list of exprs
return [self.process_expression(exp) for
exp in expr]
def process_value(self, value):
try:
return eval(value, self.env)
except:
return value
def process_field(self, field):
field = field.replace("[", ".").replace("]", "")
if field.startswith(self.parameter + "."):
return field[len(self.parameter) + 1:]
else:
return field
def visitCall(self, node):
"""
Handle LIKE()
"""
return [self.process_field(self.visit(node.args[0])),
self.visit(node.func),
self.process_value(self.visit(node.args[1]))]
def visitStr(self, node):
return node.s
def visitlist(self, list):
return [self.visit(node) for node in list]
def visitCompare(self, node):
return [self.process_field(self.visit(node.left)),
" ".join(self.visit(node.ops)),
self.process_value(self.visit(node.comparators[0]))]
def visitAttribute(self, node):
return "%s.%s" % (self.visit(node.value), node.attr)
def get_boolean_op(self, node):
if isinstance(node, _ast.And):
return "AND"
elif isinstance(node, _ast.Or):
return "OR"
else:
raise Exception("invalid boolean")
def visitNotEq(self, node):
return "!="
def visitLtE(self, node):
return "<="
def visitGtE(self, node):
return ">="
def visitEq(self, node):
return "=="
def visitBoolOp(self, node):
"""
BoolOp: boolean operator
"""
op = self.get_boolean_op(node.op)
values = list(node.values)
return [op, self.process_expression(
[self.visit(value) for value in values])]
def visitLambda(self, node):
self.parameter = self.visit(node.args)[0]
return self.visit(node.body)
def visitFunctionDef(self, node):
self.parameter = self.visit(node.args)[2] # ['self', 'db', 'person']
return self.visit(node.body)[0]
def visitReturn(self, node):
return self.visit(node.value)
def visitarguments(self, node):
return [self.visit(arg) for arg in node.args]
def visitarg(self, node):
return node.arg
def visitSubscript(self, node):
return "%s[%s]" % (self.visit(node.value),
self.visit(node.slice))
def visitIndex(self, node):
return self.visit(node.value)
def make_env(closure):
"""
Create an environment from the closure.
"""
env = copy.copy(closure.__globals__)
if closure.__closure__:
for i in range(len(closure.__closure__)):
env[closure.__code__.co_freevars[i]] = closure.__closure__[i].cell_contents
return env
def eval_where(closure):
"""
Given a closure, parse and evaluate it.
Return a WHERE expression.
See ParseFilter.__doc__ for more information and examples.
"""
parser = ParseFilter()
parser.env = make_env(closure)
ast_top = decompile_func(closure)
result = parser.visit(ast_top)
return result
+4 -143
View File
@@ -42,7 +42,8 @@ from .db import DbReadBase
from .proxy.proxybase import ProxyDbBase
from .utils.callback import Callback
from .config import config
from gramps.gen.db.dbconst import DBLOGNAME
from .db.dbconst import DBLOGNAME
from .db.dummydb import DummyDb
#-------------------------------------------------------------------------
#
@@ -68,7 +69,7 @@ class DbState(Callback):
place holder until a real DB is assigned.
"""
Callback.__init__(self)
self.db = self.make_database("dummydb")
self.db = DummyDb()
self.open = False # Deprecated - use DbState.is_open()
self.stack = []
@@ -134,7 +135,7 @@ class DbState(Callback):
self.emit('no-database', ())
if self.is_open():
self.db.close()
self.db = self.make_database("dummydb")
self.db = DummyDb()
self.open = False
self.emit('database-changed', (self.db, ))
@@ -178,143 +179,3 @@ class DbState(Callback):
"""
self.db = self.stack.pop()
self.emit('database-changed', (self.db, ))
def make_database(self, plugin_id):
"""
Make a database, given a plugin id.
"""
from .plug import BasePluginManager
from .const import PLUGINS_DIR, USER_PLUGINS
pmgr = BasePluginManager.get_instance()
pdata = pmgr.get_plugin(plugin_id)
if not pdata:
# This might happen if using gramps from outside, and
# we haven't loaded plugins yet
pmgr.reg_plugins(PLUGINS_DIR, self, None)
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
pdata = pmgr.get_plugin(plugin_id)
if pdata:
if pdata.reset_system:
if self.modules_is_set():
self.reset_modules()
else:
self.save_modules()
mod = pmgr.load_plugin(pdata)
if mod:
database = getattr(mod, pdata.databaseclass)
db = database()
import inspect
caller_frame = inspect.stack()[1]
_LOG.debug("Database class instance created Class:%s instance:%s. "
"Called from File %s, line %s, in %s"
% ((db.__class__.__name__, hex(id(db)))
+ (os.path.split(caller_frame[1])[1],)
+ tuple(caller_frame[i] for i in range(2, 4))))
return db
else:
raise Exception("can't load database backend: '%s'" % plugin_id)
else:
raise Exception("no such database backend: '%s'" % plugin_id)
def open_database(self, dbname, force_unlock=False, callback=None):
"""
Open a database by name and return the database.
"""
data = self.lookup_family_tree(dbname)
database = None
if data:
dbpath, locked, locked_by, backend = data
if (not locked) or (locked and force_unlock):
database = self.make_database(backend)
database.load(dbpath, callback=callback)
return database
def lookup_family_tree(self, dbname):
"""
Find a Family Tree given its name, and return properties.
"""
dbdir = os.path.expanduser(config.get('database.path'))
for dpath in os.listdir(dbdir):
dirpath = os.path.join(dbdir, dpath)
path_name = os.path.join(dirpath, "name.txt")
if os.path.isfile(path_name):
with open(path_name, 'r', encoding='utf8') as file:
name = file.readline().strip()
if dbname == name:
locked = False
locked_by = None
backend = None
fname = os.path.join(dirpath, "database.txt")
if os.path.isfile(fname):
with open(fname, 'r', encoding='utf8') as ifile:
backend = ifile.read().strip()
else:
backend = "bsddb"
try:
fname = os.path.join(dirpath, "lock")
with open(fname, 'r', encoding='utf8') as ifile:
locked_by = ifile.read().strip()
locked = True
except (OSError, IOError):
pass
return (dirpath, locked, locked_by, backend)
return None
def import_from_filename(self, db, filename, user=None):
"""
Import the filename into the db.
"""
from .plug import BasePluginManager
from .const import PLUGINS_DIR, USER_PLUGINS
from gramps.cli.user import User
pmgr = BasePluginManager.get_instance()
if user is None:
user = User()
(name, ext) = os.path.splitext(os.path.basename(filename))
extension = ext[1:].lower()
import_list = pmgr.get_reg_importers()
if import_list == []:
# This might happen if using gramps from outside, and
# we haven't loaded plugins yet
pmgr.reg_plugins(PLUGINS_DIR, self, None)
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
import_list = pmgr.get_reg_importers()
for pdata in import_list:
if extension == pdata.extension:
mod = pmgr.load_plugin(pdata)
if not mod:
for item in pmgr.get_fail_list():
name, error_tuple, pdata = item
etype, exception, traceback = error_tuple
print("ERROR:", name, exception)
return False
import_function = getattr(mod, pdata.import_function)
results = import_function(db, filename, user)
return True
return False
## Work-around for databases that need sys refresh (django):
def modules_is_set(self):
LOG.info("modules_is_set?")
if hasattr(self, "_modules"):
return self._modules != None
else:
self._modules = None
return False
def reset_modules(self):
LOG.info("reset_modules!")
# First, clear out old modules:
for key in list(sys.modules.keys()):
del sys.modules[key]
# Next, restore previous:
for key in self._modules:
sys.modules[key] = self._modules[key]
def save_modules(self):
LOG.info("save_modules!")
self._modules = sys.modules.copy()
+21
View File
@@ -433,6 +433,9 @@ class NameDisplay:
self.set_default_format(self.get_default_format())
def add_name_format(self, name, fmt_str):
for num in self.name_formats:
if fmt_str in self.name_formats.get(num):
return num
num = -1
while num in self.name_formats:
num -= 1
@@ -889,6 +892,24 @@ class NameDisplay:
name = person.get_primary_name()
return self.display_name(name)
def display_format(self, person, num):
"""
Return a text string representing the L{gen.lib.Person} instance's
L{Name} using num format.
@param person: L{gen.lib.Person} instance that contains the
L{Name} that is to be displayed. The primary name is used for
the display.
@type person: L{gen.lib.Person}
@param num: num of the format to be used, as return by
name_displayer.add_name_format('name','format')
@type num: int
@returns: Returns the L{gen.lib.Person} instance's name
@rtype: str
"""
name = person.get_primary_name()
return self.name_formats[num][_F_FN](name)
def display_formal(self, person):
"""
Return a text string representing the :class:`~.person.Person`
+10 -5
View File
@@ -65,13 +65,18 @@ class PlaceDisplay:
else:
places = places[index:]
names = [item[0] for item in places]
if config.get('preferences.place-number'):
if len(places) > 1 and int(places[0][1]) == PlaceType.NUMBER:
names = names[1:]
names[0] = places[0][0] + ' ' + names[0]
types = [item[1] for item in places]
try:
idx = types.index(PlaceType.NUMBER)
except ValueError:
idx = None
if idx is not None and len(places) > idx+1:
combined = (places[idx][0] + ' ' + places[idx+1][0],
places[idx+1][1])
places = places[:idx] + [combined] + places[idx+2:]
names = [item[0] for item in places]
if config.get('preferences.place-reverse'):
names.reverse()

Some files were not shown because too many files have changed in this diff Show More