Last active
May 4, 2023 15:41
-
-
Save MarkPflug/d524ddd50db171b302dcacb204ff86e2 to your computer and use it in GitHub Desktop.
MacOSTextReader
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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