Update LOCFile interface

This commit is contained in:
miku-666
2022-07-15 16:24:57 +02:00
parent 2d319747a9
commit 317df94bbe
4 changed files with 97 additions and 66 deletions
@@ -25,12 +25,12 @@ namespace PckStudio.Classes.IO.LOC
{
int loc_type = ReadInt(stream);
int language_count = ReadInt(stream);
List<string> keys = null;
if (loc_type == 2) keys = ReadKeys(stream);
bool lookUpKey = loc_type == 2;
List<string> keys = lookUpKey ? ReadKeys(stream) : null;
for (int i = 0; i < language_count; i++)
{
string language = ReadString(stream);
_file.languages.Add(language);
_file.Languages.Add(language);
ReadInt(stream); // padding ???
}
for (int i = 0; i < language_count; i++)
@@ -38,21 +38,14 @@ namespace PckStudio.Classes.IO.LOC
ReadInt(stream);
stream.ReadByte();
string language = ReadString(stream);
if (!_file.languages.Contains(language))
if (!_file.Languages.Contains(language))
throw new Exception("language not found");
int count = ReadInt(stream);
for (int j = 0; j < count; j++)
{
string key = loc_type == 2 ? keys[j] : ReadString(stream);
string key = lookUpKey ? keys[j] : ReadString(stream);
string value = ReadString(stream);
if (_file.keys.ContainsKey(key))
{
_file.keys[key].Add(language, value);
continue;
}
var dict = new Dictionary<string, string>();
dict.Add(language, value);
_file.keys.Add(key, dict);
_file.SetLocEntry(key, language, value);
}
}
return _file;
@@ -25,7 +25,7 @@ namespace PckStudio.Classes.IO.LOC
{
if (_locfile == null) throw new ArgumentNullException("Loc File is null");
WriteInt(stream, type);
WriteInt(stream, _locfile.languages.Count);
WriteInt(stream, _locfile.Languages.Count);
if (type == 2) WriteLocKeys(stream);
WriteLanguages(stream);
WriteLanguageEntries(stream, type);
@@ -35,14 +35,14 @@ namespace PckStudio.Classes.IO.LOC
private void WriteLocKeys(Stream stream)
{
stream.WriteByte(0);
WriteInt(stream, _locfile.keys.Count);
foreach (var key in _locfile.keys.Keys)
WriteInt(stream, _locfile.LocKeys.Count);
foreach (var key in _locfile.LocKeys.Keys)
WriteString(stream, key);
}
private void WriteLanguages(Stream stream)
{
foreach (var language in _locfile.languages)
foreach (var language in _locfile.Languages)
{
WriteString(stream, language);
WriteInt(stream, 0);
@@ -51,16 +51,16 @@ namespace PckStudio.Classes.IO.LOC
private void WriteLanguageEntries(Stream stream, int type)
{
foreach (var language in _locfile.languages)
foreach (var language in _locfile.Languages)
{
WriteInt(stream, 0x1337);
stream.WriteByte(0);
WriteString(stream, language);
WriteInt(stream, _locfile.keys.Keys.Count);
foreach(var locKey in _locfile.keys.Keys)
WriteInt(stream, _locfile.LocKeys.Keys.Count);
foreach(var locKey in _locfile.LocKeys.Keys)
{
if (type == 0) WriteString(stream, locKey);
WriteString(stream, _locfile.keys[locKey][language]);
WriteString(stream, _locfile.LocKeys[locKey][language]);
}
}
}