private void ApplyChanges() { foreach (var change in this.remStrings) { LocalizedStringDict dict = this.GetStringDict(change.Plugin, change.Format); if (dict != null) { dict.Remove(change.ID); change.Plugin.StringsDirty = true; } } foreach (var change in this.addStrings) { LocalizedStringDict dict = this.GetStringDict(change.Plugin, change.Format); if (dict != null) { dict[change.ID] = change.Value; change.Plugin.StringsDirty = true; } } foreach (var change in this.updateStrings) { LocalizedStringDict dict = this.GetStringDict(change.Plugin, change.Format); if (dict != null) { dict[change.ID] = change.Value; change.Plugin.StringsDirty = true; } } this.UpdateStatusBar(); }
public void ReloadStrings() { if (string.IsNullOrEmpty(this.StringsFolder) || string.IsNullOrEmpty(this.FileName) || !Directory.Exists(this.StringsFolder)) { return; } string locName = Properties.Settings.Default.LocalizationName; if (Directory.GetFiles(this.StringsFolder, this.FileName + "_" + locName + "*").Count() == 0) { if (locName == "English") { return; } locName = "English"; } string prefix = Path.Combine(this.StringsFolder, this.FileName); prefix += "_" + Properties.Settings.Default.LocalizationName; System.Text.Encoding enc = Encoding.Instance; FontLangInfo fontInfo; if (Encoding.TryGetFontInfo(locName, out fontInfo)) { if (fontInfo.CodePage != 1252) { enc = System.Text.Encoding.GetEncoding(fontInfo.CodePage); } } this.Strings = this.LoadPluginStrings(enc, LocalizedStringFormat.Base, prefix + ".STRINGS"); this.ILStrings = this.LoadPluginStrings(enc, LocalizedStringFormat.IL, prefix + ".ILSTRINGS"); this.DLStrings = this.LoadPluginStrings(enc, LocalizedStringFormat.DL, prefix + ".DLSTRINGS"); if (Properties.Settings.Default.MonitorStringsFolderForChanges) { if (this.fsw == null) { this.fsw = new FileSystemWatcher(this.StringsFolder, this.FileName + "*"); this.fsw.EnableRaisingEvents = true; this.fsw.Changed += delegate { this.ReloadStrings(); }; } } else { if (this.fsw != null) { this.fsw.Dispose(); } this.fsw = null; } }
private void SavePluginStrings(System.Text.Encoding enc, LocalizedStringFormat format, LocalizedStringDict strings, BinaryWriter writer) { if (enc == null) { enc = Encoding.CP1252; } var list = new List <Pair <uint, uint> >(); using (var stream = new MemoryStream()) using (var memWriter = new BinaryWriter(stream)) { foreach (KeyValuePair <uint, string> 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; } } }
private LocalizedStringDict LoadPluginStrings(System.Text.Encoding encoding, LocalizedStringFormat format, BinaryReader reader) { if (encoding == null) encoding = Encoding.CP1252; var dict = new LocalizedStringDict(); int length = reader.ReadInt32(); int size = reader.ReadInt32(); // size of data section var list = new List<Pair<uint, uint>>(); for (uint i = 0; i < length; ++i) { uint id = reader.ReadUInt32(); uint off = reader.ReadUInt32(); list.Add(new Pair<uint, uint>(id, off)); } long offset = reader.BaseStream.Position; var data = new byte[size]; using (var stream = new MemoryStream(data, 0, size, true, false)) { var buffer = new byte[65536]; int left = size; while (left > 0) { int read = Math.Min(left, buffer.Length); int nread = reader.BaseStream.Read(buffer, 0, read); if (nread == 0) break; stream.Write(buffer, 0, nread); left -= nread; } } foreach (var kvp in list) { var start = (int) kvp.Value; int len = 0; switch (format) { case LocalizedStringFormat.Base: while (data[start + len] != 0) ++len; break; case LocalizedStringFormat.DL: case LocalizedStringFormat.IL: len = BitConverter.ToInt32(data, start) - 1; start = start + sizeof (int); if (start + len > data.Length) len = data.Length - start; if (len < 0) len = 0; break; } string str = encoding.GetString(data, start, len); dict.Add(kvp.Key, str); } return dict; }
private void SavePluginStrings(System.Text.Encoding enc, LocalizedStringFormat format, LocalizedStringDict strings, string path) { try { using (var writer = new BinaryWriter(File.Create(path))) SavePluginStrings(enc, format, strings, writer); } catch { } }
internal static int CleanUnusedStrings(Plugin plugin) { if (plugin == null) { return(-1); } var masters = plugin.Masters; if (masters == null || masters.Length == 0) { return(-1); } LocalizedStringDict oldStrings = plugin.Strings; plugin.Strings = new LocalizedStringDict(); foreach (var record in plugin.Enumerate().OfType <Record>()) { record.MatchRecordStructureToRecord(); foreach (var sr in record.SubRecords) { var elements = record.EnumerateElements(sr, rawData: true).ToList(); foreach (var elem in elements) { if (elem.Structure != null && elem.Structure.type == ElementValueType.LString) { var data = elem.Data; if (data.Count == 4) { string value; uint id = TypeConverter.h2i(data); if (id == 0) { continue; } if (oldStrings.TryGetValue(id, out value)) { oldStrings.Remove(id); plugin.Strings[id] = value; } } } } } } return(oldStrings.Count); }
private LocalizedStringDict GetStringDict(Plugin plugin, LocalizedStringFormat format) { LocalizedStringDict strings = null; switch (format) { case LocalizedStringFormat.Base: strings = plugin.Strings; break; case LocalizedStringFormat.DL: strings = plugin.DLStrings; break; case LocalizedStringFormat.IL: strings = plugin.ILStrings; break; } return(strings); }
private void ResetEntry() { Plugin plugin; if (!this.TryGetCurrentPlugin(out plugin)) { this.txtID.Text = string.Empty; this.txtString.Text = string.Empty; } else { LocalizedStringFormat format; if (!this.TryGetCurrentFormat(out format)) { this.txtID.Text = string.Empty; this.txtString.Text = string.Empty; } else { LocalizedStringDict strings = this.GetStringDict(plugin, format); if (strings != null) { if (strings.Count == 0) { this.txtID.Text = 1.ToString("X8"); this.txtString.Text = string.Empty; } else { uint max = strings.Max(a => a.Key); this.txtID.Text = (max + 1).ToString("X8"); this.txtString.Text = string.Empty; } } } } }
private void SavePluginStrings(System.Text.Encoding enc, LocalizedStringFormat format, LocalizedStringDict strings, BinaryWriter writer) { if (enc == null) enc = Encoding.CP1252; var list = new List<Pair<uint, uint>>(); using (var stream = new MemoryStream()) using (var memWriter = new BinaryWriter(stream)) { foreach (KeyValuePair<uint, string> 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; } } }
public void ReloadStrings() { if (string.IsNullOrEmpty(StringsFolder) || string.IsNullOrEmpty(FileName) || !Directory.Exists(StringsFolder)) return; string locName = Properties.Settings.Default.LocalizationName; if (Directory.GetFiles(StringsFolder, FileName + "_" + locName + "*").Count() == 0) { if (locName == "English") return; locName = "English"; } string prefix = Path.Combine(StringsFolder, FileName); prefix += "_" + Properties.Settings.Default.LocalizationName; System.Text.Encoding enc = Encoding.CP1252; FontLangInfo fontInfo; if (Encoding.TryGetFontInfo(locName, out fontInfo)) { if (fontInfo.CodePage != 1252) enc = System.Text.Encoding.GetEncoding(fontInfo.CodePage); } Strings = LoadPluginStrings(enc, LocalizedStringFormat.Base, prefix + ".STRINGS"); ILStrings = LoadPluginStrings(enc, LocalizedStringFormat.IL, prefix + ".ILSTRINGS"); DLStrings = LoadPluginStrings(enc, LocalizedStringFormat.DL, prefix + ".DLSTRINGS"); if (Properties.Settings.Default.MonitorStringsFolderForChanges) { if (fsw == null) { fsw = new FileSystemWatcher(StringsFolder, FileName + "*"); fsw.EnableRaisingEvents = true; fsw.Changed += delegate { ReloadStrings(); }; } } else { if (fsw != null) fsw.Dispose(); fsw = null; } }
public void ReloadStrings() { if (string.IsNullOrEmpty(this.StringsFolder) || string.IsNullOrEmpty(this.FileName) || !Directory.Exists(this.StringsFolder)) { return; } string locName = TESVSnip.Domain.Properties.Settings.Default.LocalizationName; if (!Directory.GetFiles(this.StringsFolder, this.FileName + "_" + locName + "*").Any()) { if (locName == "English") { return; } locName = "English"; } string prefix = Path.Combine(this.StringsFolder, this.FileName); prefix += "_" + TESVSnip.Domain.Properties.Settings.Default.LocalizationName; System.Text.Encoding enc = Encoding.Instance; FontLangInfo fontInfo; if (Encoding.TryGetFontInfo(locName, out fontInfo)) { if (fontInfo.CodePage != 1252) { enc = System.Text.Encoding.GetEncoding(fontInfo.CodePage); } } this.Strings = this.LoadPluginStrings(enc, LocalizedStringFormat.Base, prefix + ".STRINGS"); this.ILStrings = this.LoadPluginStrings(enc, LocalizedStringFormat.IL, prefix + ".ILSTRINGS"); this.DLStrings = this.LoadPluginStrings(enc, LocalizedStringFormat.DL, prefix + ".DLSTRINGS"); if (Properties.Settings.Default.MonitorStringsFolderForChanges) { if (this.fsw == null) { this.fsw = new FileSystemWatcher(this.StringsFolder, this.FileName + "*"); this.fsw.EnableRaisingEvents = true; this.fsw.Changed += delegate { this.ReloadStrings(); }; } } else { if (this.fsw != null) { this.fsw.Dispose(); } this.fsw = null; } }
/// <summary> /// GenerateSkyrimStringsDictionary /// </summary> /// <param name="language"></param> /// <param name="dict"></param> /// <param name="stringType"></param> /// <param name="action"></param> public void GenerateSkyrimStringsDictionary(string language, LocalizedStringDict dict, string stringType, string action) { DataRow row = tblStrings.NewRow(); string key; string primaryKey; DataRowView[] drv; if (action == "CREATE") { tblStrings.Rows.Clear(); if (tblStringsDV != null) tblStringsDV.Table = null; } if (tblStringsDV == null) tblStringsDV = new DataView(); if (tblStringsDV.Table == null) { tblStringsDV.Table = tblStrings; tblStringsDV.Sort = "PK"; //PK= String ID + StringType (strings / dlstring / ilstrings) } foreach (System.Collections.Generic.KeyValuePair<uint, string> kvp in dict) { try { key = kvp.Key.ToString("X8").ToUpperInvariant(); primaryKey = key + "|" + stringType.ToUpperInvariant(); /// Create new row if (language == cboxSourceLanguage.Text) { //if (key == "00000001") // key = "00000001"; drv = tblStringsDV.FindRows(new object[] { primaryKey }); if (drv.Length < 1) { row = tblStrings.NewRow(); row["PK"] = primaryKey; row["StringID"] = kvp.Key; row["StringIDHexa"] = key; //if (kvp.Value.Length > 200) // row["SourceTextValue"] = kvp.Value.Substring(0, 200); //else row["SourceTextValue"] = kvp.Value; row["TargetTextValue"] = "?"; row["StringType"] = stringType; tblStrings.Rows.Add(row); } else { drv[0]["TargetTextValue"] = kvp.Value; } } /// Add/Create new row if (language == cboxTargetLanguage.Text) { //if (key == "00000001") // key = "00000001"; drv = tblStringsDV.FindRows(new object[] { primaryKey }); if (drv.Length < 1) { row = tblStrings.NewRow(); row["PK"] = primaryKey; row["StringID"] = kvp.Key; row["StringIDHexa"] = kvp.Key.ToString("X8").ToUpperInvariant(); row["SourceTextValue"] = "?"; //if (kvp.Value.Length > 200) // row["TargetTextValue"] = kvp.Value.Substring(0, 200); //else row["TargetTextValue"] = kvp.Value; row["StringType"] = stringType; tblStrings.Rows.Add(row); } else { drv[0]["TargetTextValue"] = kvp.Value; } } } catch (Exception crap) { edtMemo.Text += crap.Message + Environment.NewLine; return; } } if (action == "WRITE") { string appPathPlugin = GetStringsDictionnaryPath(); if (File.Exists(appPathPlugin)) File.Delete(appPathPlugin); tblStrings.WriteXml(appPathPlugin, XmlWriteMode.WriteSchema); LastLoadedSkyrimStringsDictionnary = GetStringsDictionnaryPath(); } }