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
sequence escaped_x2(const spec& s);
sequence escaped_u4(const spec& s);
sequence escaped_U8(const spec& s);
sequence escaped(const spec& s);
either basic_char(const spec& s);

View File

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