public void InnerCanBeFound() { var input = @"<A line 1 line 2 <B header line B1 line B2 > line3 line4 > "; var project = ReaperProjectParser.ParseProjectFromLines( new LineSource(input)); project .ElementsAndDescendants() .OfType <ProjectElement>() .Count(a => a.HeaderType == "B") .Should() .Be(1); }
public void AllSourcesFound() { var project = ReaperProjectParser.ParseProjectFromLines( new LineSource(TestData.TestFile)); var sourceFiles = project .ElementsAndDescendants() .OfType <ProjectSource>() .ToArray(); sourceFiles.Length.Should() .Be(3); }
public void BasicElementIsRead() { var input = @"<element >"; var source = new LineSource(input); var elements = ReaperProjectParser.ParseFromLines(source); elements.Length.Should() .Be(1); var projectElement = elements.First() as ProjectElement; projectElement.Should() .NotBeNull(); projectElement.Header.Should() .Be("element"); }
static void Main(string[] args) { var rppFiles = Directory.EnumerateFiles(args[0], "*.rpp", SearchOption.AllDirectories); foreach (var r in rppFiles) { Console.WriteLine($"Trying to read {r}"); var enclosingFolder = Path.GetFileName(Path.GetDirectoryName(r)); var projName = Path.GetFileName(r); var txt = File.ReadAllText(r); var source = new LineSource(txt); var project = ReaperProjectParser.ParseProjectFromLines(source); var sources = project.ElementsAndDescendants() .OfType <ProjectSource>( ) .Where(src => src.Source == ProjectSource.SourceType.File) .ToArray(); foreach (var projectSource in sources) { Console.WriteLine($" src:{projectSource.File}"); if (projectSource.File.Contains("Neil")) { var fileName = Path.GetFileName(projectSource.File); var newSource = projectSource.WithFile(fileName); project = (ProjectElement)project.Replace(projectSource, newSource); } } var destFolder = Path.Combine(args[1], enclosingFolder); var destFile = Path.Combine(destFolder, projName); Console.WriteLine($"creating {destFolder} for {destFile}"); Directory.CreateDirectory(destFolder); File.WriteAllText(destFile, project.AsString(0)); } }
public void SourceCanBeReplaced() { var input = @"< REAPER_PROJECT 0.1 ""5.60 / x64"" 1516466972 <ITEM <SOURCE MP3 FILE ""C:\Users\Neil\Downloads\wikiloops_jam_127409.mp3"" 1 > > > "; var project = ReaperProjectParser.ParseProjectFromLines( new LineSource(input)); var sourceFiles = project .ElementsAndDescendants() .OfType <ProjectSource>() .ToArray(); sourceFiles.Length.Should() .Be(1); var source = sourceFiles.First(); source.File.Should() .Be( @"C:\Users\Neil\Downloads\wikiloops_jam_127409.mp3"); var newFile = source.WithFile("replacementFile"); var newProject = project.Replace(source, newFile) as ProjectElement; var newSources = newProject.ElementsAndDescendants() .OfType <ProjectSource>() .ToArray(); newSources.Length.Should() .Be(1); newSources.First() .File .Should() .Be("replacementFile"); newSources.First() .Trailing .Should() .Be("1"); }
public void SimpleProjectCanBeRoundTripped() { var input = @"<A line 1 line 2 <B header line B1 line B2 > line3 line4 > "; var source = new LineSource(input); var project = ReaperProjectParser.ParseProjectFromLines(source); var rendered = ReaperProjectParser.Render(project); rendered.Should() .Be(input); }