using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; namespace Barotrauma { class TextPack { public readonly string Language; private Dictionary> texts; private string filePath; public TextPack(string filePath) { this.filePath = filePath; texts = new Dictionary>(); XDocument doc = XMLExtensions.TryLoadXml(filePath); if (doc == null || doc.Root == null) return; Language = doc.Root.GetAttributeString("language", "Unknown"); foreach (XElement subElement in doc.Root.Elements()) { string infoName = subElement.Name.ToString().ToLowerInvariant(); if (!texts.TryGetValue(infoName, out List infoList)) { infoList = new List(); texts.Add(infoName, infoList); } string text = subElement.ElementInnerText(); text = text.Replace("&", "&"); text = text.Replace("<", "<"); text = text.Replace(">", ">"); infoList.Add(text); } } public string Get(string textTag) { if (!texts.TryGetValue(textTag.ToLowerInvariant(), out List textList) || !textList.Any()) { return null; } string text = textList[Rand.Int(textList.Count)].Replace(@"\n", "\n"); return text; } public List GetAll(string textTag) { if (!texts.TryGetValue(textTag.ToLowerInvariant(), out List textList) || !textList.Any()) { return null; } return textList; } #if DEBUG public void CheckForDuplicates(int index) { Dictionary textCounts = new Dictionary(); XDocument doc = XMLExtensions.TryLoadXml(filePath); if (doc == null || doc.Root == null) return; foreach (XElement subElement in doc.Root.Elements()) { string infoName = subElement.Name.ToString().ToLowerInvariant(); if (!textCounts.ContainsKey(infoName)) { textCounts.Add(infoName, 1); } else { textCounts[infoName] += 1; } } StringBuilder sb = new StringBuilder(); sb.Append("Language: " + Language); sb.AppendLine(); sb.Append("Duplicate entries:"); sb.AppendLine(); sb.AppendLine(); for (int i = 0; i < textCounts.Keys.Count; i++) { if (textCounts[texts.Keys.ElementAt(i)] > 1) { sb.Append(texts.Keys.ElementAt(i) + " Count: " + textCounts[texts.Keys.ElementAt(i)]); sb.AppendLine(); } } System.IO.StreamWriter file = new System.IO.StreamWriter(@"duplicate_" + Language.ToLower() + "_" + index + ".txt"); file.WriteLine(sb.ToString()); file.Close(); } public void WriteToCSV(int index) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < texts.Count; i++) { string key = texts.Keys.ElementAt(i); texts.TryGetValue(key, out List infoList); for (int j = 0; j < infoList.Count; j++) { sb.Append(key); // ID sb.Append('*'); sb.Append(infoList[j]); // Original sb.Append('*'); // Translated sb.Append('*'); // Comments sb.AppendLine(); } } System.IO.StreamWriter file = new System.IO.StreamWriter(@"csv_" + Language.ToLower() + "_" + index + ".csv"); file.WriteLine(sb.ToString()); file.Close(); } #endif } }