From dde351ea40368b0a06e60421bc5e3d1cbf8ec3ee Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Wed, 16 Mar 2022 22:39:52 +0900 Subject: [PATCH] feat: add escape sequence of ESC as an unreleased feature --- tests/test_parse_string.cpp | 13 +++++++++++++ toml/lexer.hpp | 3 +++ toml/parser.hpp | 3 +++ 3 files changed, 19 insertions(+) diff --git a/tests/test_parse_string.cpp b/tests/test_parse_string.cpp index df4b787..5367c00 100644 --- a/tests/test_parse_string.cpp +++ b/tests/test_parse_string.cpp @@ -217,6 +217,19 @@ BOOST_AUTO_TEST_CASE(test_ml_literal_string_value) value("'This,' she said, 'is just a pointless statement.'", string_t::literal)); } +BOOST_AUTO_TEST_CASE(test_simple_excape_sequences) +{ + TOML11_TEST_PARSE_EQUAL(parse_string, + R"("\"\\\b\f\n\r\t")", + string("\"\\\b\f\n\r\t", string_t::basic)); +#ifdef TOML11_USE_UNRELEASED_TOML_FEATURES + TOML11_TEST_PARSE_EQUAL(parse_string, + R"("\e")", + string("\x1b", string_t::basic)); +#endif +} + + BOOST_AUTO_TEST_CASE(test_unicode_escape_sequence) { #if defined(_MSC_VER) || defined(__INTEL_COMPILER) diff --git a/toml/lexer.hpp b/toml/lexer.hpp index ea5050b..5d019a3 100644 --- a/toml/lexer.hpp +++ b/toml/lexer.hpp @@ -133,6 +133,9 @@ using lex_escape_seq_char = either, character<'\\'>, character<'b'>, character<'f'>, character<'n'>, character<'r'>, character<'t'>, +#ifdef TOML11_USE_UNRELEASED_TOML_FEATURES + character<'e'>, // ESC (0x1B) +#endif lex_escape_unicode_short, lex_escape_unicode_long >; diff --git a/toml/parser.hpp b/toml/parser.hpp index bfa5531..e51708e 100644 --- a/toml/parser.hpp +++ b/toml/parser.hpp @@ -327,6 +327,9 @@ inline result parse_escape_sequence(location& loc) case 'n' :{loc.advance(); return ok(std::string("\n"));} case 'f' :{loc.advance(); return ok(std::string("\f"));} case 'r' :{loc.advance(); return ok(std::string("\r"));} +#ifdef TOML11_USE_UNRELEASED_TOML_FEATURES + case 'e' :{loc.advance(); return ok(std::string("\x1b"));} // ESC +#endif case 'u' : { if(const auto token = lex_escape_unicode_short::invoke(loc))