diff --git a/src/Parlot/Fluent/WhiteSpaceLiteral.cs b/src/Parlot/Fluent/WhiteSpaceLiteral.cs index 75e85ab..873ae34 100644 --- a/src/Parlot/Fluent/WhiteSpaceLiteral.cs +++ b/src/Parlot/Fluent/WhiteSpaceLiteral.cs @@ -1,16 +1,35 @@ using Parlot.Compilation; +using Parlot.Rewriting; using System.Linq.Expressions; namespace Parlot.Fluent; -public sealed class WhiteSpaceLiteral : Parser, ICompilable +public sealed class WhiteSpaceLiteral : Parser, ICompilable, ISeekable { private readonly bool _includeNewLines; + private static char[] _whiteSpaceChars => + [ + '\u0009', '\u000C', '\u0020', '\u00A0', '\u1680', '\u180E', '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', '\u2007', '\u2008', '\u2009', '\u200A', '\u202F', '\u205F', '\u3000', '\uFEFF' + ]; + + private static char[] _whiteSpaceOrNewLineChars => + [ + '\u0009', '\u000A', '\u000B', '\u000C', '\u000D', '\u0020', '\u00A0', '\u1680', '\u180E', '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', '\u2007', '\u2008', '\u2009', '\u200A', '\u202F', '\u205F', '\u3000', '\uFEFF' + ]; + + public bool CanSeek { get; } = true; + + public char[] ExpectedChars {get; private set;} + + public bool SkipWhitespace { get; } + public WhiteSpaceLiteral(bool includeNewLines) { _includeNewLines = includeNewLines; + ExpectedChars = includeNewLines ? _whiteSpaceOrNewLineChars : _whiteSpaceChars; + Name = "WhiteSpaceLiteral"; }