private void SavePluginStrings(System.Text.Encoding enc, LocalizedStringFormat format, LocalizedStringDict strings, BinaryWriter writer)
{
if (enc == null)
{
enc = Encoding.Instance;
}
var list = new List<Pair<uint, uint>>();
using (var stream = new MemoryStream())
using (var memWriter = new BinaryWriter(stream))
{
foreach (var kvp in strings)
{
list.Add(new Pair<uint, uint>(kvp.Key, (uint)stream.Position));
byte[] data = enc.GetBytes(kvp.Value);
switch (format)
{
case LocalizedStringFormat.Base:
memWriter.Write(data, 0, data.Length);
memWriter.Write((byte)0);
break;
case LocalizedStringFormat.DL:
case LocalizedStringFormat.IL:
memWriter.Write(data.Length + 1);
memWriter.Write(data, 0, data.Length);
memWriter.Write((byte)0);
break;
}
}
writer.Write(strings.Count);
writer.Write((int)stream.Length);
foreach (var item in list)
{
writer.Write(item.Key);
writer.Write(item.Value);
}
stream.Position = 0;
var buffer = new byte[65536];
var left = (int)stream.Length;
while (left > 0)
{
int read = Math.Min(left, buffer.Length);
int nread = stream.Read(buffer, 0, read);
if (nread == 0)
{
break;
}
writer.Write(buffer, 0, nread);
left -= nread;
}
}
}