public TranslationStringReference CreateNamedString(string _prefix, LangFile file, ITranslationEntry entry, ref Dictionary <string, int> unnamedCount, string clang) { var prefix = _prefix.Length > 0 ? _prefix + "_" : ""; var id = entry.Identifier?.Process(); var idNumbered = id; var type = string.IsNullOrWhiteSpace(entry.EntryType?.Text) ? "UNNAMED" : entry.EntryType.Text; if (string.IsNullOrEmpty(id) || id == "-1" || id == "IDC_STATIC") { var type_id = $"{type}_{id}"; int count; unnamedCount.TryGetValue(type_id, out count); id = $"{type}_{id}_{count++}"; idNumbered = $"{prefix}{id}#0"; unnamedCount[type] = count + 1; } int number = 0; while (NamedStrings.ContainsKey(idNumbered)) { number++; idNumbered = $"{prefix}{id}#{number}"; } return(new TranslationStringReference() { Id = idNumbered, Language = clang, Source = file, Entry = entry }); }
private TranslationStringReference AddNamedString(string prefix, LangFile file, ITranslationEntry entry, ref Dictionary <string, int> unnamedCount, string clang, string nlang, TranslationStringReference parent) { SubLang sl; if (!SubLangs.TryGetValue(clang, out sl)) { sl = new SubLang() { Source = file, Name = clang, Neutral = nlang }; SubLangs.Add(clang, sl); } var stl = sl.AddNamedString(prefix, file, entry, ref unnamedCount, clang); TranslationString ns; if (!NamedStringsByName.TryGetValue(stl.Id, out ns)) { ns = new TranslationString { Name = stl.Id, Parent = parent?.String }; NamedStrings.Add(ns); NamedStringsByName.Add(stl.Id, ns); } ns.Lines.Add(stl); ns.Translations.Add(stl.Language, stl); stl.String = ns; return(stl); }
private void ProcessMenuItem(string prefix, LangFile file, MenuItemDefinition mi, ref Dictionary <string, int> unnamedCount, string clang, string nlang, TranslationStringReference parent) { var ns = ProcessEntry(prefix, file, mi, ref unnamedCount, clang, nlang, parent); var unnamedCount2 = new Dictionary <string, int>(); prefix = $"{prefix}_{mi.Identifier?.Process()}"; foreach (var entry in mi.Entries) { ProcessMenuItem(prefix, file, entry, ref unnamedCount2, clang, nlang, ns); } }
public TranslationStringReference AddNamedString(string prefix, LangFile file, ITranslationEntry entry, ref Dictionary <string, int> unnamedCount, string clang) { var sl = CreateNamedString(prefix, file, entry, ref unnamedCount, clang); NamedStrings.Add(sl.Id, sl); References.Add(sl); if (!file.ContainedLangs.Contains(this)) { file.ContainedLangs.Add(this); } file.NamedLines.Add(entry.Context.Line, sl); return(sl); }
private TranslationStringReference ProcessEntry(string prefix, LangFile file, ITranslationEntry entry, ref Dictionary <string, int> unnamedCount, string clang, string nlang, TranslationStringReference parent) { return(AddNamedString(prefix, file, entry, ref unnamedCount, clang, nlang, parent)); }
private void ParseLang(LangFile file) { var parser = Parser.Parser.FromFile(file.File.FullName); var rc = parser.Parse(); var currentLanguage = "NEUTRAL"; var currentNeutralLanguage = "NEUTRAL"; var topLevelUnnamed = new Dictionary <string, int>(); foreach (var def in rc.Definition.Where(s => !(s is ParseErrorRecovery))) { var s = def as LanguageStatement; if (s != null) { var lang = s.Lang.Text.Substring("LANG_".Length); var sublang = s.SubLang?.Text.Substring("SUBLANG_".Length) ?? currentLanguage; switch (sublang) { case "NEUTRAL": currentLanguage = lang; break; case "DEFAULT": currentLanguage = $"{lang}_DEFAULT"; break; default: currentLanguage = sublang; break; } currentNeutralLanguage = lang; continue; } var md = def as MenuDefinition; if (md != null) { var unnamedCount = new Dictionary <string, int>(); var prefix = md.Identifier.Process(); foreach (var entry in md.Entries) { ProcessMenuItem(prefix, file, entry, ref unnamedCount, currentLanguage, currentNeutralLanguage, null); } continue; } var dd = def as DialogDefinition; if (dd != null) { var parent = AddNamedString("", file, dd, ref topLevelUnnamed, currentLanguage, currentNeutralLanguage, null); var unnamedCount = new Dictionary <string, int>(); var prefix = dd.Identifier.Process(); foreach (var entry in dd.Entries) { ProcessEntry(prefix, file, entry, ref unnamedCount, currentLanguage, currentNeutralLanguage, parent); } continue; } var st = def as StringTable; if (st != null) { var unnamedCount = new Dictionary <string, int>(); var prefix = ""; foreach (var entry in st.Entries) { ProcessEntry(prefix, file, entry, ref unnamedCount, currentLanguage, currentNeutralLanguage, null); } continue; } } }