public void New_Newline_Succeeds() { var result = ScanToken.Newline("\r\n", Start); using (new AssertionScope()) { result.Type.Should().Be(ScanTokenType.Newline); result.Text.Should().Be("\r\n"); result.Start.Should().BeEquivalentTo(Start); result.End.Should().BeEquivalentTo(new ScanPosition(Start.Absolute + 2, Start.Row + 1, 0)); result.ToString().Should().Be("n(\\r\\n)"); } }
private IEnumerable <ScanToken> ReadWhitespace() { var position = CurrentPosition; var whitespace = string.Empty; var newline = string.Empty; do { switch (_candidate) { case '\r': if (newline.Length > 0) { whitespace += '\r'; } else { newline = "\r"; } break; case '\n': if (whitespace.Length > 0) { yield return(ScanToken.Space(whitespace, position)); } yield return(ScanToken.Newline(newline + "\n", position + (uint)whitespace.Length)); _column = -1; _row++; Next(); yield break; default: whitespace += newline + _candidate; newline = string.Empty; break; } } while (Next() && IsWhitespaceCharacter(_candidate)); yield return(ScanToken.Space(whitespace + newline, position)); }
private static ScanToken Newline(string text, uint absolutePosition, uint row, uint column) => ScanToken.Newline(text, new ScanPosition(absolutePosition, row, column));