(RepiPack): only ASCII characters supposed to be low-cased.

This commit is contained in:
morkt 2017-10-29 08:12:46 +04:00
parent 9d2eb27383
commit 0bb857876b

View File

@ -47,13 +47,12 @@ namespace GameRes.Formats.Littlewitch
public byte[] CreateKey () public byte[] CreateKey ()
{ {
var name_bytes = Encodings.cp932.GetBytes (Name.ToLowerInvariant()); var name_bytes = DatOpener.ToLowerAscii (Name);
int name_length = name_bytes.Length; int name_length = name_bytes.Length;
var md5 = new MD5(); var md5 = new MD5();
Array.Reverse (name_bytes); Array.Reverse (name_bytes);
var key = new byte[1024]; var key = new byte[1024];
int key_pos = 0; int key_pos = 0;
md5.Initialize();
for (int i = 0; i < 64; ++i) for (int i = 0; i < 64; ++i)
{ {
int name_pos = i % name_length; int name_pos = i % name_length;
@ -209,7 +208,7 @@ namespace GameRes.Formats.Littlewitch
{ {
var md5 = new MD5(); var md5 = new MD5();
FormatCatalog.Instance.ReadFileList (ListFileName, name => { FormatCatalog.Instance.ReadFileList (ListFileName, name => {
var name_bytes = Encodings.cp932.GetBytes (name.ToLowerInvariant()); var name_bytes = ToLowerAscii (name);
var hash = md5.ComputeHash (name_bytes); var hash = md5.ComputeHash (name_bytes);
dict[hash] = name; dict[hash] = name;
}); });
@ -220,6 +219,20 @@ namespace GameRes.Formats.Littlewitch
} }
return dict; return dict;
} }
internal static byte[] ToLowerAscii (string text)
{
var text_bytes = Encodings.cp932.GetBytes (text);
for (int i = 0; i < text_bytes.Length; ++i)
{
byte c = text_bytes[i];
if (c >= 'A' && c <= 'Z')
text_bytes[i] += 0x20;
else if (c > 0x7F && c < 0xA1 || c > 0xDF)
++i;
}
return text_bytes;
}
} }
internal class Md5Comparer : IEqualityComparer<byte[]> internal class Md5Comparer : IEqualityComparer<byte[]>