You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Support smart quotes (“Jack”), guillemets («Petit»), and CJK brackets as nickname delimiters #273
The three built-in nickname delimiters (quoted_word, double_quotes, parenthesis) are ASCII-only, so nicknames wrapped in any typographic or non-Latin quote convention leak into the name pieces as garbage middle names (v1.3.0):
The smart-quote case is effectively English input: “…” (U+201C/201D) is what word processors and phone keyboards autocorrect plain quotes to, so real-world copy-paste text hits this constantly — same input-normalization class as #266.
Proposed additions to the built-in delimiter inventory, one ordered open/close pair each (the conventions can't be merged into a single character class — German's closing “ is English's opening quote, so each pair needs its own regex, exactly like the three existing ones):
All of these are safe as defaults: unlike the apostrophe, none can legitimately appear inside a name. Explicitly excluded: curly single quotes ‘…’ — U+2019 is also the preferred typographic apostrophe (O’Connor), so it would need the same whitespace-border rules as the ASCII quoted_word regex and deserves separate, careful treatment if ever.
The nickname_delimiters dict already accepts additional compiled patterns at runtime, so this is purely an expansion of the built-in inventory. Related: #266, #269.
changed the title [-]Nicknames in smart quotes (“Jack”), guillemets («Petit»), or CJK brackets are not extracted[/-][+]Support smart quotes (“Jack”), guillemets («Petit»), and CJK brackets as nickname delimiters[/+]on Jul 7, 2026
Implemented on the 2.0 branch (PR #288, commit 7ee6e3a): all eight proposed pairs ship in DEFAULT_NICKNAME_DELIMITERS and as named sentinels in the v1 CONSTANTS API (smart_double_quotes, guillemets, ...), with curly single quotes excluded as proposed (U+2019 stays the apostrophe in "O'Connor"). The issue's five repro examples are pinned as test rows, « Petit » inner spacing is tolerated, and a delimiter character consumed by another pair's extraction (the shared-character overlap: German's closing “ is English's opening quote) no longer emits a spurious unbalanced-delimiter ambiguity. Closes with the 2.0.0 merge.
Activity
[-]Nicknames in smart quotes (“Jack”), guillemets («Petit»), or CJK brackets are not extracted[/-][+]Support smart quotes (“Jack”), guillemets («Petit»), and CJK brackets as nickname delimiters[/+]feat: typographic nickname delimiters as defaults (closes #273)
derek73 commentedon Jul 18, 2026
Implemented on the 2.0 branch (PR #288, commit 7ee6e3a): all eight proposed pairs ship in
DEFAULT_NICKNAME_DELIMITERSand as named sentinels in the v1CONSTANTSAPI (smart_double_quotes,guillemets, ...), with curly single quotes excluded as proposed (U+2019 stays the apostrophe in "O'Connor"). The issue's five repro examples are pinned as test rows,« Petit »inner spacing is tolerated, and a delimiter character consumed by another pair's extraction (the shared-character overlap: German's closing“is English's opening quote) no longer emits a spuriousunbalanced-delimiterambiguity. Closes with the 2.0.0 merge.fix: extraction scans by position, not pair order (review critical)
test: regression guards from the review
A word-final apostrophe is not an unbalanced delimiter
Add a second differential corpus harvested from the issue tracker
Bound every rule by the corpus it claims, not by its category
Record what a rule claims in all three dimensions classify() uses
Protect the shapes the two entries claim to protect
Say which way an over-wide exclusion fails, and drop "for a year"
Stop feat(#273) pointing at a limit that no longer exists
Fix three claims this branch got wrong while fixing others
docs(rules): topic-review amendments from the July-arc session (prima…
Pin the delimited maiden marker and classify it against 1.4.0 (derek7…
Label the CJK honorific rows for the issues they depend on (derek73#324)
Let a [[never]] entry narrow by fields, not just by name
Fix what the review of derek73#597 found
docs(decisions): Standing blocks for fourteen small decisions files (#…