Skip to content

Ménil Christophe de under FAMILY_FIRST drops the tussenvoegsel, and de Mesnil Juan reads Juan as part of the surname #467

Description

@derek73

A particle joins forward. Two things license joining backward, and nothing else does: a family comma, or a declared family-first order. Both are the writer or the caller saying the family came first. The parser must never infer it from a particle's position.

Four consequences, each measured over the 1094-name differential corpus × 3 name_order values × middle_as_family off and on.

(a) A trailing particle that lands in MIDDLE belongs to the family

Only FAMILY_FIRST puts a trailing piece in the middle slot. FAMILY_FIRST_GIVEN_LAST puts it in GIVEN, where the caller's own declaration says it is the given name.

Ménil Christophe de     FF    family 'Ménil'     middle 'de'   →  family 'de Ménil'  given 'Christophe'
Beethoven Ludwig van    FF    family 'Beethoven' middle 'van'  →  family 'van Beethoven'  given 'Ludwig'
Nguyen Thi Van          FFGL  given 'Van'  middle 'Thi'        →  unchanged

The declared order does the work that a vocabulary carve-out was doing in #466 — no never-given restriction is needed. That matters: the restriction excluded 37 ambiguous particles, among them von, di, da, del, le, and van itself, which is the flagship word of the Dutch listing the rule is named for.

Removing a trailing MIDDLE leaves every other piece's role unchanged under that order, so there is no re-layout of the leftover — which is what produced both regressions #466's review found (van Berg Jan de losing its given name, Berg Jan Jr. de promoting a post-nominal).

(b) The leading fold takes the particle's unit, not the rest of the name

Gate it on whether anything is left over. If the particle's group is the whole name, surname-only is the only reading; if something remains, that something is a name component and the fold has no business taking it.

de Mesnil Juan            family 'de Mesnil Juan'  →  family 'de Mesnil'   given 'Juan'
de la Cruz Juan Carlos    family (whole)           →  family 'de la Cruz'  given 'Juan'  middle 'Carlos'
ibn Awf abdul Rahman      family (whole)           →  family 'ibn Awf'     given 'abdul Rahman'
de la Vega y Santos Juan  family (whole)           →  family 'de la Vega y Santos'  given 'Juan'

Measured: 10 parses, 5 names, default order only. Every surname-only name is untouched — de la Vega, Mc Donald, dos Santos, De Groot, Ste Marie, de los Santos, Sir de Mesnil — and the conjunction join and bound-given pair stay whole. The family-first branch has narrowed this way since #395; the default order simply never got the same treatment.

(c) FFGL's given-position fold goes

Ménil Christophe de under FAMILY_FIRST_GIVEN_LAST currently swallows the whole name into the family. It should read family 'Ménil', middle 'Christophe', given 'de' — the caller's declared order, applied literally, even though that makes a particle the given name.

NON_GIVEN_NAME_PARTICLES supplies a default reading, not a prohibition. Measured: all 33 never-given particles read as the given name where position forces it ("de", "de Jr."). Any rule that rests on "a never-given particle can never be a name" rests on a false premise.

(d) The invariant this rests on

For a name of the form Family Given [Particle], the family-comma writing under the default order and the comma-less writing under FAMILY_FIRST parse identically.

Ménil, Christophe du   default   family 'du Ménil'   given 'Christophe'
Ménil Christophe de    FF        family 'de Ménil'   given 'Christophe'

Measured over 216 constructed names: 0 of 216 agree today. Scope it to this shape — deleting commas generally is not equivalent, since 181 of 247 corpus comma-names differ for title and suffix reasons (Doe, Dr. John, Abdul Salam, MD).

Not in scope

1.4.0 parity. v1 has no name_order, so nothing under a family-first order has a v1 answer to be compared against. Any v1 measurement here is FYI.

Supersedes #365. #466 implemented a different reading of the same defect and was closed unmerged; its review record is on the branch fix/365-trailing-particle-attaches.

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions