diff --git a/Sources/SynKit/Libraries/Lexer.Generator/RegExParser.cs b/Sources/SynKit/Libraries/Lexer.Generator/RegExParser.cs index 48569409..f1796b6e 100644 --- a/Sources/SynKit/Libraries/Lexer.Generator/RegExParser.cs +++ b/Sources/SynKit/Libraries/Lexer.Generator/RegExParser.cs @@ -201,6 +201,8 @@ public static string Escape(string str) => 'n' => '\n', 'r' => '\r', 't' => '\t', + 'v' => '\v', + 'f' => '\f', '0' => '\0', '\\' => '\\', _ => null, diff --git a/Sources/SynKit/Tests/Lexer.Tests/RegexesTests.cs b/Sources/SynKit/Tests/Lexer.Tests/RegexesTests.cs index 755835ca..01798fcd 100644 --- a/Sources/SynKit/Tests/Lexer.Tests/RegexesTests.cs +++ b/Sources/SynKit/Tests/Lexer.Tests/RegexesTests.cs @@ -142,6 +142,18 @@ internal partial class Issue145Lexer { } + public enum SpecialEscapeSequences + { + [End] End, + [Error] Error, + [Regex("[\\f\\v]")] Feed, + } + + [Lexer(typeof(SpecialEscapeSequences))] + internal partial class SpecialEscapeSequencesLexer + { + } + [Theory] [InlineData("foo", typeof(Identifier), true, typeof(IdentifierLexer))] @@ -229,6 +241,8 @@ internal partial class Issue145Lexer [InlineData(@"'hello \' bye'", typeof(Issue140Token), true, typeof(Issue140Lexer))] [InlineData(@"]", typeof(EscapingInsideSingleLiteralRangeToken), true, typeof(Issue145Lexer))] + [InlineData("\v", typeof(SpecialEscapeSequences), true, typeof(SpecialEscapeSequencesLexer))] + [InlineData("\f", typeof(SpecialEscapeSequences), true, typeof(SpecialEscapeSequencesLexer))] public void SingleTokenAcceptance(string input, Type enumType, bool shouldAccept, Type lexerType) { dynamic lexer = Activator.CreateInstance(lexerType, input)!;