public VitaStreamReader(Stream stream, Encoding encoding) { this.encoding = encoding; this.stream = stream; this.globalCode = "*"; this.inHeaderSection = false; this.globalAttributes = VitaEntryAttribute.LanguageMask | VitaEntryAttribute.DurationMask; }
public VitaEntry(string title, string[] lines, VitaEntryType vitaEntryType, VitaEntryAttribute attributes, String codes) { this.Title = title; this.Lines = lines; this.VitaEntryType = vitaEntryType; Attributes = attributes; var set = codes.Split(' ', StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .ToHashSet(); this.Codes = set.Contains("*") ? new HashSet <String>() { "*" } : set; }
public VitaEntry BuildEntry(VitaEntryAttribute globalAttributes) { if ((this.Attributes & VitaEntryAttribute.LanguageMask) == VitaEntryAttribute.None) { this.Attributes |= globalAttributes & VitaEntryAttribute.LanguageMask; } if ((this.Attributes & VitaEntryAttribute.DurationMask) == VitaEntryAttribute.None) { this.Attributes |= globalAttributes & VitaEntryAttribute.DurationMask; } if (String.IsNullOrEmpty(this.Code)) { this.Code = "*"; } return(new VitaEntry(this.Title, this.Lines.ToArray(), this.VitaEntryType, this.Attributes, this.Code)); }
public IEnumerable <VitaEntry> ReadEntries() { using (var reader = new StreamReader(this.stream, this.encoding)) { String line; while ((line = reader.ReadLine()) != null) { if (line.StartsWith("##")) { if (this.CloseSectionAndValidate()) { yield return(this.builder.BuildEntry(globalAttributes)); } this.BeginSection(line); if (this.includedItems != null) { foreach (var includedItem in includedItems) { yield return(includedItem); } this.includedItems = null; } } else if (builder == null) { if (String.IsNullOrEmpty(line)) { continue; } else if (line.StartsWith("#code:")) { this.globalCode = line.Split(':', 2)[1].Trim(); } else if (line.StartsWith("#attributes:")) { this.globalAttributes = ParseAttributes(line.Split(':', 2)[1].Trim()); if ((this.globalAttributes & VitaEntryAttribute.LanguageMask) == 0) { this.globalAttributes = VitaEntryAttribute.LanguageMask; } if ((this.globalAttributes & VitaEntryAttribute.DurationMask) == 0) { this.globalAttributes = VitaEntryAttribute.DurationMask; } } else { throw new InvalidDataException("file must start with ##<vita entry type>"); } } else if (this.inHeaderSection && line.StartsWith("#")) { this.HandleHeaderAttribute(line); } else { this.inHeaderSection = false; this.builder.Lines.Add(line); } } if (this.CloseSectionAndValidate()) { yield return(this.builder.BuildEntry(globalAttributes)); } } }
public void SetAttributes(VitaEntryAttribute attributes) { this.Attributes |= attributes; }