Relocate FFFF trim (and 0000) to same location

This commit is contained in:
Kurt
2019-03-20 22:13:09 -07:00
parent b1ead9e630
commit cce362b98a
5 changed files with 27 additions and 22 deletions

View File

@@ -53,7 +53,7 @@ public sealed class PGF : MysteryGift, IRibbonSetEvent3, IRibbonSetEvent4, ILang
public string Nickname
{
get => StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x1E, 0x16));
get => Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x1E, 0x16));
set => Encoding.Unicode.GetBytes(value.PadRight(0xB, (char)0xFFFF)).CopyTo(Data, 0x1E);
}
@@ -78,7 +78,7 @@ public string Nickname
public int IV_SPD { get => Data[0x48]; set => Data[0x48] = (byte)value; }
// Unused 0x49
public override string OT_Name {
get => StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x4A, 0x10));
get => Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x4A, 0x10));
set => Encoding.Unicode.GetBytes(value.PadRight(0x08, (char)0xFFFF)).CopyTo(Data, 0x4A); }
public int OTGender { get => Data[0x5A]; set => Data[0x5A] = (byte)value; }
@@ -87,7 +87,7 @@ public string Nickname
// Unused 0x5D 0x5E 0x5F
public override string CardTitle
{
get => StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x60, 0x4A));
get => Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x60, 0x4A));
set => Encoding.Unicode.GetBytes((value + '\uFFFF').PadRight(0x4A / 2, '\0')).CopyTo(Data, 0x60);
}

View File

@@ -72,7 +72,7 @@ public static byte[] SetString(string value, int generation, bool jp, bool bigen
/// <returns>Decoded string.</returns>
public static string GetString5(byte[] data, int offset, int count)
{
return SanitizeString(TrimFromFFFF(Encoding.Unicode.GetString(data, offset, count)));
return SanitizeString(Util.TrimFromFFFF(Encoding.Unicode.GetString(data, offset, count)));
}
/// <summary>Gets the bytes for a Generation 5 string.</summary>
@@ -292,17 +292,6 @@ internal static string UnSanitizeString(string str, int generation)
private static readonly char[] FullToHalf = {'\u2640', '\u2642'}; // ♀♂
/// <summary>
/// Trims a string at the first instance of a 0xFFFF terminator.
/// </summary>
/// <param name="input">String to trim.</param>
/// <returns>Trimmed string.</returns>
public static string TrimFromFFFF(string input)
{
int index = input.IndexOf((char)0xFFFF);
return index < 0 ? input : input.Substring(0, index);
}
public static bool HasEastAsianScriptCharacters(IEnumerable<char> str) => str.Any(c => 0x4E00 <= c && c <= 0x9FFF);
}
}

View File

@@ -233,7 +233,7 @@ public override string GetBoxName(int box)
{
if (box >= BoxCount)
return string.Empty;
return StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, PCLayout + (0x28 * box) + 4, 0x28));
return Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, PCLayout + (0x28 * box) + 4, 0x28));
}
public override void SetBoxName(int box, string value)

View File

@@ -8,11 +8,5 @@ public static string CleanFileName(string fileName)
{
return string.Concat(fileName.Split(Path.GetInvalidFileNameChars()));
}
public static string TrimFromZero(string input)
{
int index = input.IndexOf('\0');
return index < 0 ? input : input.Substring(0, index);
}
}
}

View File

@@ -1,4 +1,5 @@
using System.Linq;
using System.Runtime.CompilerServices;
namespace PKHeX.Core
{
@@ -106,5 +107,26 @@ public static uint GetHexValue(string value)
/// </summary>
/// <param name="str">Input string to modify</param>
public static string ToTitleCase(string str) => string.IsNullOrWhiteSpace(str) ? string.Empty : string.Join(" ", str.Split(' ').Select(TitleCase));
/// <summary>
/// Trims a string at the first instance of a 0xFFFF terminator.
/// </summary>
/// <param name="input">String to trim.</param>
/// <returns>Trimmed string.</returns>
public static string TrimFromFFFF(string input) => TrimFromFirst(input, (char)0xFFFF);
/// <summary>
/// Trims a string at the first instance of a 0x0000 terminator.
/// </summary>
/// <param name="input">String to trim.</param>
/// <returns>Trimmed string.</returns>
public static string TrimFromZero(string input) => TrimFromFirst(input, '\0');
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static string TrimFromFirst(string input, char c)
{
int index = input.IndexOf(c);
return index < 0 ? input : input.Substring(0, index);
}
}
}