Beispiel #1
0
        /// <summary>
        /// Считывает следующую запись из входного потока.
        /// Если достигнут конец потока и записи не обнаружено, возвращается null
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="id">Id для считанной записи</param>
        /// <returns></returns>
        private DataEntry getNextEntry(StreamReader reader, int id)
        {
            DataEntry temp;

            while (!reader.EndOfStream)
            {
                var nextLine = reader.ReadLine();

                if (string.IsNullOrWhiteSpace(nextLine))
                {
                    continue;
                }

                var entryType = nextLine.CheckType();
                switch (entryType)
                {
                case EntryType.Hidden:
                {
                    temp = new HiddenEntry(EntryType.Hidden, id, nextLine);
                    return(temp);
                }

                case EntryType.SingleTranslated:
                {
                    temp = getSingleTranslatedEntry(nextLine, id);
                    return(temp);
                }

                case EntryType.Default:
                {
                    temp = getDefaultEntry(nextLine, reader, id);
                    return(temp);
                }

                case EntryType.Comment:
                {
                    // Пропускаем комментированные строки
                    continue;
                }
                }
            }

            // Конец потока
            return(null);
        }
Beispiel #2
0
        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);
            }
        }