示例#1
0
        /// <summary>
        /// Формирует Single Translated запись
        /// </summary>
        /// <param name="line"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private DataEntry getSingleTranslatedEntry(string line, int id)
        {
            var textLine = line.GetMatch(EscapeSeqHelper.SingleTranslatedTextTemplate);

            var template = line.GetTemplateFromLine(textLine);
            var temp     = new DefaultEntry(EntryType.SingleTranslated, id, template);

            temp.AddTextLine(new TextLine(temp, "ST1", Language.NotSpecified, "FROM_NATIVE", DateTime.Now, textLine));
            return(temp);
        }
示例#2
0
文件: Script.cs 项目: fxMem/FBU
        /// <summary>
        /// Обновить загруженный скрипт с помощью патч-файла
        /// </summary>
        /// <param name="patch"></param>
        public void Merge(XElement patch)
        {
            var _masterFIleRequiredVersion = patch.Attribute(XmlDataValues.ScriptVersionAttr).Value;
            var version = new ScriptVersion(_masterFIleRequiredVersion);

            // Патчфайл применяется только к определенной версии матер-файла
            if (_version.CompareTo(version) != 0)
            {
                throw new ArgumentOutOfRangeException(@"Cannot apply this patch file to current master file, 
                    destination master file version incorrect");
            }

            foreach (var entry in patch.Elements(XmlDataValues.EntryTitle))
            {
                var       patchedEntryType = entry.GetEntryType();
                DataEntry patchedEntry     = null;
                switch (patchedEntryType)
                {
                case EntryType.Hidden:
                {
                    throw new ArgumentOutOfRangeException("Patch file cannot contain hidden entries");
                }

                case EntryType.Default:
                {
                    patchedEntry = new DefaultEntry(entry, EntryType.Default);
                    break;
                }

                case EntryType.SingleTranslated:
                {
                    patchedEntry = new DefaultEntry(entry, EntryType.SingleTranslated);
                    break;
                }
                }

                var sourceEntry = this.GetEntry(patchedEntry.Id);
                if (sourceEntry == null)
                {
                    throw new IndexOutOfRangeException(string.Format("Can't find in master-file entry with {0} id", patchedEntry.Id));
                }

                foreach (var line in patchedEntry.EnumerateLines())
                {
                    // Возможно, тут будет падать. Внимательно!
                    line.Approved = false;
                    sourceEntry.AddTextLine(line);
                }
            }
        }
示例#3
0
        /// <summary>
        /// Считывает из входного потока Default-запись
        /// </summary>
        /// <param name="japLine"></param>
        /// <param name="reader"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private DataEntry getDefaultEntry(string japLine, StreamReader reader, int id)
        {
            // 1-я строка - на японском (оригинал)

            // Получам строку с переменными - заполнителями
            var lineWithoutVars = japLine.GetTemplateFromVars(_variables, Language.Jap);

            /// Получаем строчку текста
            var japTextLine = lineWithoutVars.GetLine();

            // Получаем "шаблон"
            var template = lineWithoutVars.GetTemplateFromLine(japTextLine);

            var temp = new DefaultEntry(EntryType.Default, id, template);

            temp.AddTextLine(new TextLine(temp, "JAP1", Language.Jap, "FROM_NATIVE", DateTime.Now, japTextLine));

            // Английским переводом считается 1-я закоментированная строчка после японской.
            // Остальные закоментированные строчки игнорируются
            bool englishTranslateFound = false;
            bool russianTranslateFound = false;

            while (true)
            {
                var nextLine = reader.ReadLine();
                if (string.IsNullOrEmpty(nextLine))
                {
                    if (!russianTranslateFound)
                    {
                        throw new ArgumentException("Line MUST contain russian translate!");
                    }

                    // Больше в этой группе строчек нет
                    return(temp);
                }

                if (nextLine.IsMatchesToRegex(EscapeSeqHelper.CommentLineTemplate))
                {
                    if (englishTranslateFound)
                    {
                        continue;
                    }

                    // Строка с английским переводом
                    englishTranslateFound = true;
                    var engTextLine = nextLine.GetTextLine(Language.Eng);
                    temp.AddTextLine(new TextLine(temp, "ENG1", Language.Eng, "FROM_NATIVE", DateTime.Now, engTextLine));
                }
                else
                {
                    // Найдена незакоментированная строка

                    if (!englishTranslateFound)
                    {
                        // Английского перевода до сих пор не было найдено
                        // throw new InvalidDataException("Can't find english translation");
                    }

                    // Это русский перевод
                    var rusTextLine = nextLine.GetTextLine(Language.Rus);
                    temp.AddTextLine(new TextLine(temp, "RUS1", Language.Rus, "FROM_NATIVE", DateTime.Now, rusTextLine));
                    russianTranslateFound = true;
                    break;
                }
            }
            return(temp);
        }
示例#4
0
文件: Chapter.cs 项目: fxMem/FBU
        public Chapter(XElement xml)
        {
            if (!string.Equals(xml.Name.ToString(), XmlDataValues.ChapterTitle, StringComparison.Ordinal))
            {
                throw new ArgumentOutOfRangeException("Can't create chapter form non-chapter xml");
            }

            _filename = xml.Attribute(XmlDataValues.RootNameAttr).Value;

            bool firstEntry = true;

            _data = new List <DataEntry>();
            foreach (var entry in xml.Elements(XmlDataValues.EntryTitle))
            {
                if (firstEntry)
                {
                    // Запись должна всегда иметь id
                    var startId = entry.Attribute(XmlDataValues.IdAttr).Value;

                    _startChapterId = int.Parse(startId);
                    firstEntry      = false;
                }

                // Определяем тип записи и создаем соотв. объект
                EntryType type;
                var       typeAttr = entry.Attribute(XmlDataValues.EntryTypeAttr);
                if (typeAttr != null)
                {
                    type = (EntryType)Enum.Parse(typeof(EntryType), typeAttr.Value);
                }
                else
                {
                    type = EntryType.Default;
                }

                DataEntry temp;
                switch (type)
                {
                case EntryType.Hidden:
                {
                    temp = new HiddenEntry(entry);
                    break;
                }

                case EntryType.SingleTranslated:
                {
                    temp = new DefaultEntry(entry, EntryType.SingleTranslated);
                    break;
                }

                case EntryType.Default:
                {
                    temp = new DefaultEntry(entry, EntryType.Default);
                    break;
                }

                default:
                {
                    throw new ArgumentOutOfRangeException("Can't create entry of unknown type!");
                }
                }
                _data.Add(temp);
            }
        }