Exemple #1
0
        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);
            }
        }
Exemple #4
0
        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;
                }
            }
        }