@@ -1003,50 +1003,50 @@ def __post_init__(self) -> None:
10031003 "the word -- declining, not deciding" ),
10041004 Case ("zh_honorific_suffix_spaced" , "王小明 先生" ,
10051005 {"family" : "王小明" , "suffix" : "先生" },
1006- classification = "fix(#307)" ,
1006+ classification = "fix(#307) + fix(#271) " ,
10071007 notes = "CJK honorifics FOLLOW the name; a spaced 先生 (Mr.) is "
10081008 "a suffix, and recognizing it must come before the "
10091009 "family-first order hands it a role -- unrecognized it "
10101010 "read as the GIVEN name under the 2.1 defaults" ),
10111011 Case ("ko_honorific_ssi" , "김민준 씨" ,
10121012 {"family" : "김" , "given" : "민준" , "suffix" : "씨" },
1013- classification = "fix(#307)" ,
1013+ classification = "fix(#307) + fix(#271) " ,
10141014 notes = "Korean orthography standardly SPACES 씨, so the "
10151015 "whole-token suffix machinery reaches it; the name "
10161016 "still segments (suffix classification runs after the "
10171017 "script_segment stage, which only ever saw 김민준)" ),
10181018 Case ("ko_degree_baksa" , "김민준 박사" ,
10191019 {"family" : "김" , "given" : "민준" , "suffix" : "박사" },
1020- classification = "fix(#307)" ,
1020+ classification = "fix(#307) + fix(#271) " ,
10211021 notes = "박사 (doctorate) is the ko analogue of a trailing "
10221022 "PhD: fix(suffix-routing)'s two-token shape, one "
10231023 "script over" ),
10241024 Case ("ja_sama_spaced" , "田中 太郎 様" ,
10251025 {"family" : "田中" , "given" : "太郎" , "suffix" : "様" },
1026- classification = "fix(#307)" ,
1026+ classification = "fix(#307) + fix(#271) " ,
10271027 notes = "the spaced 様 of forms and databases, which whole-token "
10281028 "matching reaches on its own; the glued "
10291029 "mail-addressing form is ja_sama_glued below, reached "
10301030 "by #308's peel instead" ),
10311031 Case ("ja_san_spaced" , "田中 さん" ,
10321032 {"family" : "田中" , "suffix" : "さん" },
1033- classification = "fix(#308)" ,
1033+ classification = "fix(#308) + fix(#271) " ,
10341034 notes = "the kana honorifics ship as suffix vocabulary so the "
10351035 "glued peel has somewhere to hand its tail; spaced "
10361036 "recognition falls out of the same entry -- until this "
10371037 "change さん read as the given name under the "
10381038 "family-first default" ),
10391039 Case ("ja_san_glued" , "田中さん" ,
10401040 {"family" : "田中" , "suffix" : "さん" },
1041- classification = "fix(#308)" ,
1041+ classification = "fix(#308) + fix(#271) " ,
10421042 notes = "the everyday glued form, and the one that also "
10431043 "corrupted classification: 田中さん is Han plus "
10441044 "hiragana, so the kana license read the whole string "
10451045 "as a Japanese name. The peel runs before the license "
10461046 "is consulted, so it now sees 田中 alone" ),
10471047 Case ("ja_honorific_glued_before_a_roman_suffix" , "田中さん II" ,
10481048 {"family" : "田中" , "suffix" : "さん, II" },
1049- classification = "fix(#308)" ,
1049+ classification = "fix(#308) + fix(#271) " ,
10501050 notes = "an unrelated trailing suffix does not hide the peel "
10511051 "site: the scan-back steps over II and peels さん off "
10521052 "the token behind it. Half of the pair that pins "
@@ -1141,15 +1141,15 @@ def __post_init__(self) -> None:
11411141 "parity until #320 moved it" ),
11421142 Case ("ja_sama_glued" , "山田太郎様" ,
11431143 {"family" : "山田太郎" , "suffix" : "様" },
1144- classification = "fix(#308)" ,
1144+ classification = "fix(#308) + fix(#271) " ,
11451145 notes = "the mail-addressing form. Undivided without a "
11461146 "segmenter -- no surname list divides a kanji name -- "
11471147 "so the family name is the whole 山田太郎; "
11481148 "tests/v2/test_locales.py pins the divided twin under "
11491149 "locales.JA" ),
11501150 Case ("ko_honorific_nim_glued" , "김민준님" ,
11511151 {"family" : "김" , "given" : "민준" , "suffix" : "님" },
1152- classification = "fix(#308)" ,
1152+ classification = "fix(#308) + fix(#271) " ,
11531153 notes = "the online/formal glued address form, 씨's twin" ),
11541154 Case ("ko_honorific_written_with_a_period" , "김민준, 씨." ,
11551155 {"family" : "김민준" , "suffix" : "씨." },
@@ -1219,7 +1219,7 @@ def __post_init__(self) -> None:
12191219 "naming the same segmentation it also depends on" ),
12201220 Case ("ko_honorific_glued_teacher" , "김선생님" ,
12211221 {"family" : "김" , "suffix" : "선생님" },
1222- classification = "fix(#307)" ,
1222+ classification = "fix(#307) + fix(#271) " ,
12231223 notes = "longest-first, end to end: 선생님 peels whole where "
12241224 "님 alone would have left 김선생 to segment into a "
12251225 "family 김 and a given 선생. Classified to #307 "
@@ -1232,7 +1232,11 @@ def __post_init__(self) -> None:
12321232 classification = "fix(#308)" ,
12331233 notes = "no script precondition on the remainder -- the tail "
12341234 "is the license. Japanese text about a foreigner, and "
1235- "the Latin remainder keeps the positional default" ),
1235+ "the Latin remainder keeps the positional default. "
1236+ "Single-issue on purpose where the block around it is "
1237+ "compound: measured, disabling script_orders and "
1238+ "segment_scripts leaves this row unchanged, because a "
1239+ "Latin remainder never reaches either" ),
12361240 Case ("latin_stem_glued_hangul_honorific" , "Anderson선생님" ,
12371241 {"given" : "Anderson" , "suffix" : "선생님" },
12381242 classification = "fix(#308)" ,
@@ -1241,10 +1245,12 @@ def __post_init__(self) -> None:
12411245 "surname site: 선 is a listed census surname, so the "
12421246 "peeled 선생님 would otherwise be split into 선 + 생님 "
12431247 "-- the stage dissecting the honorific it had just "
1244- "manufactured" ),
1248+ "manufactured. Single-issue for the same reason as its "
1249+ "kana twin: the remainder is Latin, so #271 never "
1250+ "applies" ),
12451251 Case ("ko_honorific_glued_doctor" , "김민준박사님" ,
12461252 {"family" : "김" , "given" : "민준" , "suffix" : "박사님" },
1247- classification = "fix(#308)" ,
1253+ classification = "fix(#308) + fix(#271) " ,
12481254 notes = "박사님 is one honorific, not 박사 plus 님, and ships "
12491255 "as one entry: 선생님, 교수님 and 박사님 are the three "
12501256 "standard -님 professional honorifics and the first two "
@@ -1258,7 +1264,7 @@ def __post_init__(self) -> None:
12581264 "test_one_peel_never_a_stack" ),
12591265 Case ("ko_honorific_glued_doctor_spaced" , "김민준 박사님" ,
12601266 {"family" : "김" , "given" : "민준" , "suffix" : "박사님" },
1261- classification = "fix(#308)" ,
1267+ classification = "fix(#308) + fix(#271) " ,
12621268 notes = "the spaced twin, and the second half of the same gap: "
12631269 "without a 박사님 entry the peel cut this token too -- "
12641270 "it is not a whole-token suffix word, so 박사 + 님 came "
@@ -1274,7 +1280,7 @@ def __post_init__(self) -> None:
12741280 "to family; the row exists for the guard" ),
12751281 Case ("ko_honorific_token_alone_stays_whole" , "선생님" ,
12761282 {"family" : "선생님" },
1277- classification = "fix(#308)" ,
1283+ classification = "fix(#308) + fix(#271) " ,
12781284 notes = "a lone honorific is not a name to be taken apart: it "
12791285 "is not a peel site (every tail is a suffix word) and "
12801286 "not a surname site, though 선 is listed and the "
@@ -1326,23 +1332,23 @@ def __post_init__(self) -> None:
13261332 "order flip that makes the one token a family name" ),
13271333 Case ("ja_dono_spaced" , "田中 殿" ,
13281334 {"family" : "田中" , "suffix" : "殿" },
1329- classification = "fix(#308)" ,
1335+ classification = "fix(#308) + fix(#271) " ,
13301336 notes = "殿 waited on an argument in #307 and gets one here: "
13311337 "spaced it is safe for the reason 양/군 are -- a "
13321338 "殿-surnamed person's name LEADS, and the suffix gate "
13331339 "is trailing-only -- while glued it would cut 鵜殿 and "
13341340 "真殿 in two, so it ships spaced only" ),
13351341 Case ("ko_honorific_nim_spaced" , "김민준 님" ,
13361342 {"family" : "김" , "given" : "민준" , "suffix" : "님" },
1337- classification = "fix(#308)" ,
1343+ classification = "fix(#308) + fix(#271) " ,
13381344 notes = "님 is new in both sets -- #307 shipped only the -님 "
13391345 "compounds 선생님/교수님. Standardly glued in online "
13401346 "address, spaced too, and never the end of a Korean "
13411347 "given name, which is what qualifies it for the "
13421348 "harsher glued vetting as well" ),
13431349 Case ("ko_honorific_glued_via_segmentation" , "김씨" ,
13441350 {"family" : "김" , "suffix" : "씨" },
1345- classification = "fix(#307)" ,
1351+ classification = "fix(#307) + fix(#271) " ,
13461352 notes = "the one glued shape that was already reachable before "
13471353 "#308, which is why this row stays fix(#307) where its "
13481354 "neighbours are fix(#308): stage order alone delivered "
@@ -1362,18 +1368,22 @@ def __post_init__(self) -> None:
13621368 "lenient comma gate, which an earlier note named: "
13631369 "measured, lenient_comma_suffixes=False leaves this "
13641370 "row unchanged. The comma disables segmentation per "
1365- "the comma doctrine, so 김민준 stays whole" ),
1371+ "the comma doctrine, so 김민준 stays whole -- which is "
1372+ "also why this row stays single-issue while the rest of "
1373+ "the block is compound with fix(#271): measured, the "
1374+ "order table and the segmenter both leave it alone, "
1375+ "because the comma already decided the family" ),
13661376 Case ("ko_honorific_glued_given" , "김민준씨" ,
13671377 {"family" : "김" , "given" : "민준" , "suffix" : "씨" },
1368- classification = "fix(#308)" ,
1378+ classification = "fix(#308) + fix(#271) " ,
13691379 notes = "the common full-name glued shape, and the row this "
13701380 "replaces (ko_honorific_glued_given_stays) pinned the "
13711381 "old boundary: 씨 peels off the last token first, and "
13721382 "the remainder 김민준 then segments as usual -- peel "
13731383 "and split compose, in that order" ),
13741384 Case ("ko_honorific_glued_given_trailing_suffix" , "김민준씨 Jr." ,
13751385 {"family" : "김" , "given" : "민준" , "suffix" : "씨, Jr." },
1376- classification = "fix(#308)" ,
1386+ classification = "fix(#308) + fix(#271) " ,
13771387 notes = "the peel site is the last token that is not itself a "
13781388 "post-nominal, so an unrelated trailing suffix cannot "
13791389 "hide it -- this now agrees with the comma-written "
@@ -1382,7 +1392,7 @@ def __post_init__(self) -> None:
13821392 Case ("ko_honorific_glued_given_suffix_comma" , "Dr 김민준씨, Jr." ,
13831393 {"title" : "Dr" , "family" : "김" , "given" : "민준" ,
13841394 "suffix" : "씨, Jr." },
1385- classification = "fix(#308)" ,
1395+ classification = "fix(#308) + fix(#271) " ,
13861396 notes = "the peel scans the NAME's runs, not the token stream: "
13871397 "under a suffix comma that is segments[0] alone, a "
13881398 "strict subset, and the peel site is found within it "
@@ -1394,7 +1404,7 @@ def __post_init__(self) -> None:
13941404 Case ("ko_honorific_glued_given_nickname" , "김민준씨 (Jimmy)" ,
13951405 {"family" : "김" , "given" : "민준" , "suffix" : "씨" ,
13961406 "nickname" : "Jimmy" },
1397- classification = "fix(#308)" ,
1407+ classification = "fix(#308) + fix(#271) " ,
13981408 notes = "the other half of scanning the NAME's runs: extracted "
13991409 "content is still in the token stream at this stage but "
14001410 "in NO segment, so the scan-back never reaches "
@@ -1688,7 +1698,7 @@ def __post_init__(self) -> None:
16881698 Case ("ko_honorific_glued_given_suffix_comma_initial" , "Dr 김민준씨, V." ,
16891699 {"title" : "Dr" , "family" : "김" , "given" : "민준" ,
16901700 "suffix" : "씨, V." },
1691- classification = "fix(#308)" ,
1701+ classification = "fix(#308) + fix(#271) " ,
16921702 notes = "fix(#308) rather than fix(#312) because the fields do "
16931703 "not move in this change -- a SUFFIX comma keeps the "
16941704 "whole name in segments[0], which is what the peel "
@@ -1716,20 +1726,20 @@ def __post_init__(self) -> None:
17161726 Case ("zh_honorific_glued_surname" , "王先生" ,
17171727 {"family" : "王" , "suffix" : "先生" },
17181728 locale = "zh" ,
1719- classification = "fix(#307)" ,
1729+ classification = "fix(#307) + fix(#271) " ,
17201730 notes = "the Han twin of 김씨: the zh pack's segmentation "
17211731 "splits off the surname and the remaining 先生 is the "
17221732 "honorific token" ),
17231733 Case ("zh_honorific_glued_given" , "王小明先生" ,
17241734 {"family" : "王" , "given" : "小明" , "suffix" : "先生" },
17251735 locale = "zh" ,
1726- classification = "fix(#308)" ,
1736+ classification = "fix(#308) + fix(#271) " ,
17271737 notes = "the Han twin, replacing zh_honorific_glued_given_stays: "
17281738 "先生 peels, and the zh pack's surname vocabulary then "
17291739 "divides the remainder 王小明" ),
17301740 Case ("zh_honorific_glued_given_default" , "王小明先生" ,
17311741 {"family" : "王小明" , "suffix" : "先生" },
1732- classification = "fix(#308)" ,
1742+ classification = "fix(#308) + fix(#271) " ,
17331743 notes = "the same input WITHOUT the pack: the peel is default-on "
17341744 "and script-independent, so the honorific still routes "
17351745 "to suffix -- only the surname split needs the opt-in, "
@@ -1757,7 +1767,7 @@ def __post_init__(self) -> None:
17571767 "them" ),
17581768 Case ("ko_honorific_yang_trails" , "김민준 양" ,
17591769 {"family" : "김" , "given" : "민준" , "suffix" : "양" },
1760- classification = "fix(#307)" ,
1770+ classification = "fix(#307) + fix(#271) " ,
17611771 notes = "the other side of ko_surname_yang_leads: the same "
17621772 "token trailing a name is 'Miss', and that is the whole "
17631773 "argument shipping it -- suffixes.py singles 양 out "
@@ -1800,7 +1810,7 @@ def __post_init__(self) -> None:
18001810 "in family -- nothing in #308 moves these fields" ),
18011811 Case ("ko_honorific_stack" , "김민준 박사 씨" ,
18021812 {"family" : "김" , "given" : "민준" , "suffix" : "박사, 씨" },
1803- classification = "fix(#307)" ,
1813+ classification = "fix(#307) + fix(#271) " ,
18041814 notes = "a trailing RUN of honorifics peels whole, like "
18051815 "'Smith PhD MD' -- the multi-suffix loop the peel "
18061816 "shares with Latin suffixes" ),
0 commit comments