Dutch and Belgian alphabetized listings move the tussenvoegsel after the given name — Beethoven, Ludwig van is the sorted spelling of Ludwig van Beethoven. The particle is parsed as a middle name rather than joining the family name:
Beethoven, Ludwig van given='Ludwig' middle='van' family='Beethoven'
Jong, Piet de given='Piet' middle='de' family='Jong'
Berg, Jan van der given='Jan' middle='van der' family='Berg'
Expected family='van Beethoven' / 'de Jong' / 'van der Berg', with given unchanged.
The same names without the comma are already correct, so this is specific to the comma form:
Ludwig van Beethoven given='Ludwig' middle='' family='van Beethoven'
Scope
- Every
name_order — all three produce identical output, so this is not an order question.
- Both halves of the particle vocabulary —
de (never-given) and van (may-be-given) strand the same way.
- Multi-word tussenvoegsels too —
van der strands as a two-word middle.
- Long-standing, not a 2.x regression — the v1 facade gives the same answer, so this needs a release-log classification and a
tools/differential run rather than a repair.
- Unpinned — no test covers the comma form with a trailing particle; the
van Gogh tests in tests/test_particles.py are all non-comma.
The derived views show the same gap
Ludwig van Beethoven family_particles='van' family_base='Beethoven'
Beethoven, Ludwig van family_particles='' family_base='Beethoven'
Fixing the parse also fixes the split views, which is part of what #130 asked for.
Mechanism
The particle tokens need Role.FAMILY plus the fold tag, so the string view renders them ahead of the family base. That reorder already exists — _text_for's FOLDED_TAG branch, whose comment reads "spans cannot reorder, so the view does":
input tokens ['Adams', 'John', 'Quincy'], FAMILY_FIRST + middle_as_family
Quincy role=FAMILY tags=['vocab:folded-middle'] (token index 2)
family -> 'Quincy Adams'
No new capability is needed, only a second producer of that tag.
Out of scope: vd
Berg, Jan vd is the same shape but is not covered here. vd is both the Dutch abbreviation of van der and the British Volunteer Officers' Decoration, and suffix routing currently wins (suffix='vd'). It arrived with the UK honours list in 962f235 alongside RD/VRD/TD/ED, so it is a genuine two-reading word rather than a bad entry.
SUFFIX_ACRONYMS_AMBIGUOUS does not arbitrate it — that gate only fires when the name has no other family candidate. Shipped behavior for a word already in the set:
Jack Ma family='Ma' gate fires
John Smith Ma family='Smith' suffix='Ma' gate does not
vd needs its own decision and should not hold this one up.
Related
Dutch and Belgian alphabetized listings move the tussenvoegsel after the given name —
Beethoven, Ludwig vanis the sorted spelling ofLudwig van Beethoven. The particle is parsed as a middle name rather than joining the family name:Expected
family='van Beethoven'/'de Jong'/'van der Berg', withgivenunchanged.The same names without the comma are already correct, so this is specific to the comma form:
Scope
name_order— all three produce identical output, so this is not an order question.de(never-given) andvan(may-be-given) strand the same way.van derstrands as a two-word middle.tools/differentialrun rather than a repair.van Goghtests intests/test_particles.pyare all non-comma.The derived views show the same gap
Fixing the parse also fixes the split views, which is part of what #130 asked for.
Mechanism
The particle tokens need
Role.FAMILYplus the fold tag, so the string view renders them ahead of the family base. That reorder already exists —_text_for'sFOLDED_TAGbranch, whose comment reads "spans cannot reorder, so the view does":No new capability is needed, only a second producer of that tag.
Out of scope:
vdBerg, Jan vdis the same shape but is not covered here.vdis both the Dutch abbreviation ofvan derand the British Volunteer Officers' Decoration, and suffix routing currently wins (suffix='vd'). It arrived with the UK honours list in962f235alongside RD/VRD/TD/ED, so it is a genuine two-reading word rather than a bad entry.SUFFIX_ACRONYMS_AMBIGUOUSdoes not arbitrate it — that gate only fires when the name has no other family candidate. Shipped behavior for a word already in the set:vdneeds its own decision and should not hold this one up.Related
Mesnil Garcia destrands the particle under FAMILY_FIRST but folds it under FAMILY_FIRST_GIVEN_LAST #365 — the no-comma trailing particle (Mesnil Garcia de), where the right answer is a judgement call. The comma settles it here, so this case is independent.family_particles/family_basenow provide that, and this bug makes them wrong for the sorted spelling.