/// <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); }
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); } }