예제 #1
0
 public VitaStreamReader(Stream stream, Encoding encoding)
 {
     this.encoding         = encoding;
     this.stream           = stream;
     this.globalCode       = "*";
     this.inHeaderSection  = false;
     this.globalAttributes = VitaEntryAttribute.LanguageMask | VitaEntryAttribute.DurationMask;
 }
예제 #2
0
        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;
        }
예제 #3
0
            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));
            }
예제 #4
0
        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));
                }
            }
        }
예제 #5
0
 public void SetAttributes(VitaEntryAttribute attributes)
 {
     this.Attributes |= attributes;
 }