Skip to content

Instantly share code, notes, and snippets.

@MarkPflug
Last active May 4, 2023 15:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarkPflug/d524ddd50db171b302dcacb204ff86e2 to your computer and use it in GitHub Desktop.
Save MarkPflug/d524ddd50db171b302dcacb204ff86e2 to your computer and use it in GitHub Desktop.
MacOSTextReader
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
sealed class MacOSTextReader : TextReader
{
readonly TextReader inner;
public MacOSTextReader(TextReader inner)
{
this.inner = inner;
}
static void SwapLineEnds(Span<char> span)
{
for (int i = 0; i < span.Length; i++)
{
if (span[i] == '\r')
{
span[i] = '\n';
}
}
}
public override async Task<int> ReadAsync(char[] buffer, int index, int count)
{
var l = await inner.ReadAsync(buffer, index, count).ConfigureAwait(false);
SwapLineEnds(buffer.AsSpan(0, l));
return l;
}
public override ValueTask<int> ReadAsync(Memory<char> buffer, CancellationToken cancellationToken = default)
{
var l = inner.ReadAsync(buffer, cancellationToken);
SwapLineEnds(buffer.Span);
return l;
}
public override int Read(char[] buffer, int index, int count)
{
var l = inner.Read(buffer, index, count);
SwapLineEnds(buffer.AsSpan(0, l));
return l;
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
inner.Dispose();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment