feat: add syntax for each escape seqs

This commit is contained in:
ToruNiina
2025-02-07 00:49:26 +09:00
parent 122b8a2e74
commit 0e734cb3b6
2 changed files with 22 additions and 5 deletions

View File

@@ -226,6 +226,10 @@ sequence offset_datetime(const spec& s);
// =========================================================================== // ===========================================================================
// String // String
sequence escaped_x2(const spec& s);
sequence escaped_u4(const spec& s);
sequence escaped_U8(const spec& s);
sequence escaped(const spec& s); sequence escaped(const spec& s);
either basic_char(const spec& s); either basic_char(const spec& s);

View File

@@ -398,6 +398,19 @@ TOML11_INLINE sequence offset_datetime(const spec& s)
// =========================================================================== // ===========================================================================
// String // String
TOML11_INLINE sequence escaped_x2(const spec& s)
{
return sequence(character('x'), repeat_exact(2, hexdig(s)));
}
TOML11_INLINE sequence escaped_u4(const spec& s)
{
return sequence(character('u'), repeat_exact(4, hexdig(s)));
}
TOML11_INLINE sequence escaped_U8(const spec& s)
{
return sequence(character('U'), repeat_exact(8, hexdig(s)));
}
TOML11_INLINE sequence escaped(const spec& s) TOML11_INLINE sequence escaped(const spec& s)
{ {
const auto escape_char = [&s] { const auto escape_char = [&s] {
@@ -416,17 +429,17 @@ TOML11_INLINE sequence escaped(const spec& s)
{ {
return either( return either(
escape_char(), escape_char(),
sequence(character('u'), repeat_exact(4, hexdig(s))), escaped_u4(s),
sequence(character('U'), repeat_exact(8, hexdig(s))), escaped_U8(s),
sequence(character('x'), repeat_exact(2, hexdig(s))) escaped_x2(s)
); );
} }
else else
{ {
return either( return either(
escape_char(), escape_char(),
sequence(character('u'), repeat_exact(4, hexdig(s))), escaped_u4(s),
sequence(character('U'), repeat_exact(8, hexdig(s))) escaped_U8(s)
); );
} }
}; };