Fix GEDCOM importer to properly handle multiple surnames per 5.5.1 (#862)

Fixes #11228
This commit is contained in:
Paul Culley 2019-08-07 13:48:49 -05:00 committed by GitHub
parent 96fcef2a84
commit 27c38018fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 21 deletions

View File

@ -2,8 +2,8 @@
1 SOUR Gramps
2 VERS 5.0.2
2 NAME Gramps
1 DATE 5 MAR 2019
2 TIME 09:11:15
1 DATE 31 JUL 2019
2 TIME 10:58:33
1 SUBM @SUBM@
1 FILE C:\Users\prc\AppData\Roaming\gramps\temp\exp_sample_ged.ged
1 COPR Copyright (c) 2019 Alex Roitman,,,.
@ -885,7 +885,7 @@
0 @I0046@ INDI
1 NAME Tom /Von Tester y tested/
2 GIVN Tom
2 SPFX Von,
2 SPFX Von
2 SURN Tester y, tested
2 NICK TesterNickname
1 SEX M
@ -1420,7 +1420,7 @@
0 @N0018@ NOTE Another Citation Note
0 @N0019@ NOTE A bad photo for sure
0 @O0000@ OBJE
1 FILE c:\msys64\mingw64\share\gramps\tests\O0.jpg
1 FILE c:\users\prc\workspace\grampsm\main\data\tests\O0.jpg
2 FORM jpg
2 TITL Michael O'Toole 2015-11
1 NOTE @N0019@

View File

@ -50,9 +50,9 @@
0 @I0@ INDI
1 NAME Anna /Hansdotter/
2 GIVN Anna
2 SURN Hansdotter, Smith
2 SPFX Vrow, huh
2 SURN Hansdotter
2 SPFX Vrow
2 SURN Smith
2 _AKA Anna Smith
2 _AKA Hanna
2 NOTE Hans daughter? N0000

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="2019-03-05" version="5.0.2"/>
<created date="2019-07-31" version="5.0.2"/>
<researcher>
<resname>Alex Roitman,,,</resname>
<resaddr>Not Provided</resaddr>
@ -617,7 +617,8 @@
<gender>F</gender>
<name type="Birth Name">
<first>Anna</first>
<surname prefix="Vrow">Smith</surname>
<surname prefix="Vrow">Hansdotter</surname>
<surname prim="0">Smith</surname>
<noteref hlink="_0000001100000011"/>
</name>
<name alt="1" type="Also Known As">
@ -1704,7 +1705,7 @@ Unknown tag Line 1109:
<range start="0" end="163"/>
</style>
</note>
<note handle="_000000f9000000f9" change="1551800790" id="N0036" type="General">
<note handle="_000000f9000000f9" change="1564588949" id="N0036" type="General">
<text>Objects referenced by this note were missing in a file imported on 12/25/1999 12:00:00 AM.</text>
</note>
</notes>

View File

@ -1290,15 +1290,17 @@ class GedcomWriter(UpdateCallback):
firstname = name.get_first_name().strip()
surns = []
surprefs = []
surprefix = ''
for surn in name.get_surname_list():
surns.append(surn.get_surname().replace('/', '?'))
if surn.get_connector():
#we store connector with the surname
surns[-1] = surns[-1] + ' ' + surn.get_connector()
surprefs.append(surn.get_prefix().replace('/', '?'))
surname = ', '.join(surns)
surprefix = ', '.join(surprefs)
if name.get_surname_list():
# GEDCOM only supports a single surname prefix
surn = name.get_surname_list()[0]
surprefix = surn.get_prefix().replace('/', '?')
suffix = name.get_suffix()
title = name.get_title()
nick = name.get_nick_name()

View File

@ -4318,11 +4318,12 @@ class GedcomParser(UpdateCallback):
@param state: The current state
@type state: CurrentState
"""
spfx = line.data.strip().split(", ")[0]
if state.name.get_surname_list():
state.name.get_surname_list()[0].set_prefix(line.data.strip())
state.name.get_surname_list()[0].set_prefix(spfx)
else:
surn = Surname()
surn.set_prefix(line.data.strip())
surn.set_prefix(spfx)
surn.set_primary()
state.name.set_surname_list([surn])
self.__skip_subordinate_levels(state.level + 1, state)
@ -4334,13 +4335,17 @@ class GedcomParser(UpdateCallback):
@param state: The current state
@type state: CurrentState
"""
if state.name.get_surname_list():
state.name.get_surname_list()[0].set_surname(line.data.strip())
names = line.data.strip().split(", ")
overwrite = bool(state.name.get_surname_list())
for name in names:
if overwrite:
state.name.get_surname_list()[0].set_surname(name)
overwrite = False
else:
surn = Surname()
surn.set_surname(line.data.strip())
surn.set_primary()
state.name.set_surname_list([surn])
surn.set_surname(name)
surn.set_primary(primary=not state.name.get_surname_list())
state.name.get_surname_list().append(surn)
self.__skip_subordinate_levels(state.level + 1, state)
def __name_marnm(self, line, state):