Skip to content

Commit 9e7e3bf

Browse files
gdudekvmiklos
authored andcommitted
For people whose names have a suffix (like Richard III, or Sam Jr) extract that and keep it as part of the name
1 parent 5e42bfe commit 9e7e3bf

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

ged2dot.py

+14-4
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,19 @@ def __handle_level0(self, line: str) -> None:
420420
self.family = Family()
421421
self.family.set_identifier(line[1:-5])
422422

423+
def __handle_indi_name(self, line: str) -> None:
424+
# Expected style: 'first /last/ suffix', suffix is optional.
425+
tokens = line.split('/')
426+
assert self.individual
427+
self.individual.set_forename(tokens[0].strip())
428+
if len(tokens) > 1:
429+
self.individual.set_surname(tokens[1].strip())
430+
if len(tokens) > 2 and tokens[2]:
431+
# We have suffix, append that to the surname.
432+
surname = self.individual.get_surname()
433+
suffix = tokens[2].strip()
434+
self.individual.set_surname(f"{surname} {suffix}")
435+
423436
def __handle_level1(self, line: str) -> None:
424437
self.__reset_flags()
425438

@@ -431,10 +444,7 @@ def __handle_level1(self, line: str) -> None:
431444
self.individual.set_sex(tokens[1])
432445
elif line_lead_token == "NAME" and self.individual:
433446
line = line[5:]
434-
tokens = line.split('/')
435-
self.individual.set_forename(tokens[0].strip())
436-
if len(tokens) > 1:
437-
self.individual.set_surname(tokens[1].strip())
447+
self.__handle_indi_name(line)
438448
elif line_lead_token == "FAMC" and self.individual:
439449
# At least <https://www.ancestry.com> sometimes writes multiple FAMC, which doesn't
440450
# make sense. Import only the first one.

tests/suffix.ged

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
0 HEAD
2+
0 @P1@ INDI
3+
1 NAME Alice /A/ Suffix
4+
1 SEX F
5+
1 FAMS @F1@
6+
0 @P2@ INDI
7+
1 NAME Bob /B/
8+
1 SEX M
9+
1 FAMS @F1@
10+
0 @F1@ FAM
11+
1 HUSB @P2@
12+
1 WIFE @P1@
13+
0 TRLR

tests/test_ged2dot.py

+13
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,19 @@ def test_big_endian_name(self) -> None:
4949
label = individual.get_label(image_dir="", name_order="big", birth_format="{}-", basepath="")
5050
self.assertIn("A<br/>Alice", label)
5151

52+
def test_name_suffix(self) -> None:
53+
"""Tests the case when the name has a suffix."""
54+
config = {
55+
"input": "tests/suffix.ged",
56+
}
57+
importer = ged2dot.GedcomImport()
58+
graph = importer.tokenize(config)
59+
individual = ged2dot.graph_find(graph, "P1")
60+
assert individual
61+
assert isinstance(individual, ged2dot.Individual)
62+
label = individual.get_label(image_dir="", name_order="little", birth_format="{}-", basepath="")
63+
self.assertIn("Alice<br/>A Suffix", label)
64+
5265
def test_str(self) -> None:
5366
"""Tests __str()__."""
5467
config = {

0 commit comments

Comments
 (0)