Skip to content

capitalized() lowercases a word that family_base and initials() treat as an ordinary name (ANH DO -> Anh do) #407

Description

@derek73

capitalized() lowercases the same word that family_base and initials() now treat as an ordinary name word:

r = Parser().parse("ANH DO")
r.family_base                     # 'DO'   -- an ordinary name word
r.initials()                      # 'A. D.'
str(r.capitalized(force=True))    # 'Anh do'   <- still a particle

Compare an ordinary surname: parse("anh smith").capitalized() gives family Smith.

Why

_cap_word (_render.py) keys the lowercasing on lexicon membership plus role:

if ((normalized in lex.particles and role in (Role.MIDDLE, Role.FAMILY)) or ...):
    return word.lower()

It does not consult UNJOINED_TAG, so the same word is an ordinary surname for R2 and R3 and a particle for R4 within one name.

Scope

Introduced by #404 in the sense that #404 is what declares these words ordinary name words; _cap_word itself is untouched. capitalized() already maps over tokens with t.tags in hand, so threading the mark in is mechanical.

Worth deciding rather than assuming: lowercasing a tussenvoegsel is a display convention for a particle doing particle work. A surname that happens to be particle vocabulary — Do, Del Toro, Le — is not that, and Del toro is not how anyone writes it. Either R4 consults the mark, or R4 should state that it deliberately does not.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions