TeamCity.CSharpInteractive/TextReplacer.cs (30 lines of code) (raw):
// ReSharper disable ClassNeverInstantiated.Global
namespace TeamCity.CSharpInteractive;
internal class TextReplacer : ITextReplacer
{
public Stream Replace(Stream source, Func<IEnumerable<string>, IEnumerable<string>> replacer)
{
using var reader = new System.IO.StreamReader(source);
var ms = new MemoryStream();
var writer = new StreamWriter(ms);
foreach (var line in replacer(ReadLines(reader)))
{
writer.WriteLine(line);
}
writer.Flush();
ms.Position = 0;
return ms;
}
private static IEnumerable<string> ReadLines(TextReader reader)
{
string? line;
do
{
line = reader.ReadLine();
if (!string.IsNullOrWhiteSpace(line))
{
yield return line;
}
}
while(line != default);
}
}