IRC parsing, tokenization, and state handling in C#

all stateful tests pass!

+16 -7
+16 -7
IrcTokens/StatefulDecoder.cs
··· 13 13 14 14 public Encoding Encoding 15 15 { 16 - get => _encoding ?? Encoding.UTF8; 17 - set => _encoding = value; 16 + get => _encoding ?? Encoding.GetEncoding(Encoding.UTF8.CodePage, EncoderFallback.ExceptionFallback, 17 + DecoderFallback.ExceptionFallback); 18 + set 19 + { 20 + if (value != null) 21 + _encoding = Encoding.GetEncoding(value.CodePage, EncoderFallback.ExceptionFallback, 22 + DecoderFallback.ReplacementFallback); 23 + } 18 24 } 19 25 20 26 public Encoding Fallback 21 27 { 22 - get => _fallback ?? Encoding.GetEncoding("iso-8859-1"); 23 - set => _fallback = value; 28 + get => _fallback ?? Encoding.GetEncoding(Encoding.GetEncoding("iso-8859-1").CodePage, 29 + EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback); 30 + set 31 + { 32 + if (value != null) 33 + _encoding = Encoding.GetEncoding(value.CodePage, EncoderFallback.ReplacementFallback, 34 + DecoderFallback.ReplacementFallback); 35 + } 24 36 } 25 37 26 38 public string Pending => Encoding.GetString(_buffer); ··· 78 90 i--; 79 91 } 80 92 } 81 - 82 - //_buffer = listLines.Last().ToArray(); 83 - //listLines.RemoveAt(listLines.Count - 1); 84 93 85 94 var decodeLines = new List<string>(); 86 95 foreach (var line in listLines.Select(l => l.ToArray()))