Skip to content

Commit 9d3b9d3

Browse files
committed
Add given and suffix to PersonalName
1 parent b8bc996 commit 9d3b9d3

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

gedcom7/cast.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ def _cast_personal_name(value: str) -> types.PersonalName:
6060
match = _match(value, grammar.personalname, "PersonalName")
6161
return types.PersonalName(
6262
fullname=value.replace("/", ""),
63-
surname=match.group("surname"),
63+
surname=match.group("surname").strip() if match.group("surname") else None,
64+
given=match.group("given").strip() if match.group("given") else None,
65+
suffix=match.group("suffix").strip() if match.group("suffix") else None,
6466
)
6567

6668

gedcom7/grammar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110
minute = '[012345][0-9]'
111111
namechar = '[ -.0-\\U0010ffff]'
112112
namestr = f'({namechar})+'
113-
personalname = f'({namestr}|({namestr})?/(?P<surname>{namestr})?/({namestr})?)'
113+
personalname = f'({namestr}|(?P<given>{namestr})?/(?P<surname>{namestr})?/(?P<suffix>{namestr})?)'
114114
second = '[012345][0-9]'
115115
text = f'({anychar})*'
116116
special = f'{text}'

gedcom7/types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ class PersonalName:
3939
"""Personal name type."""
4040

4141
fullname: str
42+
given: str | None = None
4243
surname: str | None = None
44+
suffix: str | None = None
4345

4446

4547
@dataclass

test/test_cast.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,13 @@ def test_cast_personal_name():
3737
assert cast._cast_personal_name("John /Doe/") == types.PersonalName(
3838
fullname="John Doe",
3939
surname="Doe",
40+
given="John",
4041
)
4142
assert cast._cast_personal_name("John /Doe/ Smith") == types.PersonalName(
4243
fullname="John Doe Smith",
4344
surname="Doe",
45+
given="John",
46+
suffix="Smith",
4447
)
4548
with pytest.raises(ValueError):
4649
cast._cast_personal_name("John /Doe/ Smith /Smith/")
@@ -51,14 +54,17 @@ def test_cast_personal_name():
5154
assert cast._cast_personal_name("José /O'Malley/") == types.PersonalName(
5255
fullname="José O'Malley",
5356
surname="O'Malley",
57+
given="José",
5458
)
5559
assert cast._cast_personal_name("María-José /García-López/") == types.PersonalName(
5660
fullname="María-José García-López",
5761
surname="García-López",
62+
given="María-José",
5863
)
5964
assert cast._cast_personal_name("Søren /Ødegård/") == types.PersonalName(
6065
fullname="Søren Ødegård",
6166
surname="Ødegård",
67+
given="Søren",
6268
)
6369

6470

0 commit comments

Comments
 (0)