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))