protected IEnumerable <ITranslationDumper> GetScenarioTextMergers() { if (!TextDump.IsReadyForFinalDump()) { yield break; } var needle = CombinePaths("", "abdata", "adv", "scenario", ""); var paths = BaseTextDumpPlugin.GetTranslationPaths().Where(k => k.Contains(needle)).ToList(); paths.Sort(); paths.Reverse(); var personalityCheckChars = "01234567890-".ToCharArray(); var mappings = new Dictionary <string, Dictionary <string, string> >(); var fileMaps = new Dictionary <string, List <string> >(); foreach (var path in paths) { var parts = path.Split(PathSplitter).ToList(); var personalityIndex = parts.IndexOf("scenario") + 1; if (personalityIndex == 0) { continue; } var personality = parts[personalityIndex]; var isPersonalityFile = personality.Length > 1 && personality.StartsWith("c") && personalityCheckChars.Contains(personality[1]); if (!isPersonalityFile) { continue; } var personalityMap = mappings.GetOrInit(personality, () => new Dictionary <string, string>(new TrimmedStringComparer())); var personalityFiles = fileMaps.GetOrInit(personality); personalityFiles.Add(path); foreach (var entry in BaseTextDumpPlugin.GetTranslationsForPath(path) .Where(entry => !entry.Value.IsNullOrEmpty())) { AddLocalizationToResults(personalityMap, entry); } } foreach (var translationDumper in BuildTranslationMergers(fileMaps, mappings)) { yield return(translationDumper); } }
protected IEnumerable <ITranslationDumper> GetCommunicationTextMergers() { if (!TextDump.IsReadyForFinalDump()) { yield break; } var needle = CombinePaths("", "abdata", "communication", ""); var paths = BaseTextDumpPlugin.GetTranslationPaths().Where(k => k.Contains(needle)).ToList(); paths.Sort(); paths.Reverse(); var splitter = new HashSet <char> { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }.ToArray(); var mappings = new Dictionary <string, Dictionary <string, string> >(); var fileMaps = new Dictionary <string, List <string> >(); foreach (var path in paths) { var parent = Path.GetFileName(Path.GetDirectoryName(path)); if (parent is null) { continue; } var personalityMap = mappings.GetOrInit(parent, () => new Dictionary <string, string>(new TrimmedStringComparer())); var personalityFiles = fileMaps.GetOrInit(parent); personalityFiles.Add(path); foreach (var entry in BaseTextDumpPlugin.GetTranslationsForPath(path) .Where(entry => !entry.Value.IsNullOrEmpty())) { AddLocalizationToResults(personalityMap, entry); } } foreach (var translationDumper in BuildTranslationMergers(fileMaps, mappings)) { yield return(translationDumper); } }