Allow !? for jpn gen2 strings

Closes #4821
not sure this is a perfect solution (traded from gen1=>nicknamed complainers, or iterator prefer-matching gen1 when having !?)
This commit is contained in:
Kurt
2026-06-14 15:02:00 -05:00
parent bbef47e0bd
commit d41aac175f
3 changed files with 16 additions and 3 deletions

View File

@@ -370,7 +370,7 @@ private void VerifyG1NicknameWithinBounds(LegalityAnalysis data, ReadOnlySpan<ch
if (str.Length > 10)
data.AddLine(GetInvalid(NickLengthLong, 10));
}
else if (StringConverter1.GetIsJapanese(str))
else if (data.EncounterOriginal.Generation == 1 ? StringConverter1.GetIsJapanese(str) : StringConverter2.GetIsJapanese(str))
{
if (str.Length > 5)
data.AddLine(GetInvalid(NickLengthLong, 5));

View File

@@ -146,7 +146,7 @@ private void VerifyGBOTWithinBounds(LegalityAnalysis data, ReadOnlySpan<char> st
{
if (str.Length > 5)
data.AddLine(GetInvalid(OTLong, 5));
if (!StringConverter1.GetIsJapanese(str))
if (data.EncounterOriginal.Generation == 1 ? !StringConverter1.GetIsJapanese(str) : !StringConverter2.GetIsJapanese(str))
data.AddLine(GetInvalid(G1CharOT));
}
else if (pk.Korean)

View File

@@ -18,7 +18,20 @@ public static class StringConverter2
public const char TradeOT = StringConverter1.TradeOT;
public const char LineBreak = '⏎'; // Mail
public static bool GetIsJapanese(ReadOnlySpan<char> str) => StringConverter1.GetIsJapanese(str);
/// <summary>
/// Quick check if the input string is entirely Japanese characters.
/// </summary>
/// <remarks><seealso cref="StringConverter1.GetIsJapanese(ReadOnlySpan{char})"/>. This also adds ? and !.</remarks>
public static bool GetIsJapanese(ReadOnlySpan<char> str)
{
foreach (var x in str)
{
if (!IsJapanese(x))
return false;
}
return true;
static bool IsJapanese(char c) => c is (>= '\u3000' and <= '\u30FC') or ('' or '');
}
public static bool GetIsEnglish(ReadOnlySpan<char> str) => !GetIsJapanese(str);
public static bool GetIsJapanese(ReadOnlySpan<byte> raw) => AllCharsInTable(raw, TableJP);