feat: add escape sequence of ESC

as an unreleased feature
This commit is contained in:
ToruNiina 2022-03-16 22:39:52 +09:00
parent dcfe39a783
commit dde351ea40
3 changed files with 19 additions and 0 deletions

View File

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

View File

@ -133,6 +133,9 @@ using lex_escape_seq_char = either<character<'"'>, 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
>;

View File

@ -327,6 +327,9 @@ inline result<std::string, std::string> 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))