Example #1
0
        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();
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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;
                    }
                }
        }
Example #4
0
        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;
        }
Example #5
0
 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
     {
     }
 }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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;
                        }
                    }
                }
            }
        }
Example #9
0
        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;
                }
            }
        }
Example #10
0
 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
     {
     }
 }
Example #11
0
        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;
        }
Example #12
0
        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;
            }
        }
Example #13
0
        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();
              }
        }