示例#1
0
        public ReaperProject ParseProject(string fileName)
        {
            PopulateElements();

            var project = new ReaperProject();
            var lines   = File.ReadAllLines(fileName);

            lines = lines.Select(l => l.TrimStart()).ToArray();

            ReaperElement current = null;

            foreach (var data in lines)
            {
                if (data.StartsWith("<"))  // new element and up a level
                {
                    if (current == null)
                    {
                        current = CreateElement(data, null);
                    }
                    else
                    {
                        var newElement = CreateElement(data, current);
                        current.AddElement(newElement);
                        current = newElement;
                    }
                }
                else if (data.StartsWith(">")) // down a level
                {
                    current.CompleteParse();
                    if (current.ParentElement != null)
                    {
                        current = current.ParentElement;
                    }
                }
                else if (data.StartsWith("WAK"))
                {
                    // this is a nasty hack as the file format gets weird around
                    // the effects chain
                    current.CompleteParse();
                    var currentType = current.ElementName;
                    current = current.ParentElement;
                    var newElement = CreateElement(currentType, current);
                    current.AddElement(newElement);
                    current = newElement;
                }
                else  // current level
                {
                    var newElement = CreateElement(data, current);
                    current.AddProperty(data);
                    current.AddElement(newElement);
                }
            }

            return((ReaperProject)current);
        }
示例#2
0
        // create new element based on type and parse
        public ReaperElement CreateElement(string data, ReaperElement parent)
        {
            var name = GetElementName(data);

            Type          thisType = null;
            ReaperElement newElement;

            _elements.TryGetValue(name, out thisType);
            if (thisType == null)
            {
                newElement = new ReaperElement();
            }
            else
            {
                newElement = (ReaperElement)Activator.CreateInstance(thisType);
            }

            newElement.ParentElement = parent;
            newElement.Parse(data);
            return(newElement);
        }