mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-12-16 03:08:52 +08:00
refactor: remove push_back from scanners
This commit is contained in:
@@ -200,12 +200,6 @@ class sequence final: public scanner_base
|
|||||||
|
|
||||||
scanner_base* clone() const override;
|
scanner_base* clone() const override;
|
||||||
|
|
||||||
template<typename Scanner>
|
|
||||||
void push_back(Scanner&& other_scanner)
|
|
||||||
{
|
|
||||||
this->others_.emplace_back(std::forward<Scanner>(other_scanner));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string name() const override;
|
std::string name() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -252,12 +246,6 @@ class either final: public scanner_base
|
|||||||
|
|
||||||
scanner_base* clone() const override;
|
scanner_base* clone() const override;
|
||||||
|
|
||||||
template<typename Scanner>
|
|
||||||
void push_back(Scanner&& other_scanner)
|
|
||||||
{
|
|
||||||
this->others_.emplace_back(std::forward<Scanner>(other_scanner));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string name() const override;
|
std::string name() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -343,15 +343,13 @@ TOML11_INLINE sequence local_date(const spec& s)
|
|||||||
}
|
}
|
||||||
TOML11_INLINE sequence local_time(const spec& s)
|
TOML11_INLINE sequence local_time(const spec& s)
|
||||||
{
|
{
|
||||||
auto time = sequence(
|
|
||||||
repeat_exact(2, digit(s)),
|
|
||||||
character(':'),
|
|
||||||
repeat_exact(2, digit(s))
|
|
||||||
);
|
|
||||||
|
|
||||||
if(s.v1_1_0_make_seconds_optional)
|
if(s.v1_1_0_make_seconds_optional)
|
||||||
{
|
{
|
||||||
time.push_back(maybe(sequence(
|
return sequence(
|
||||||
|
repeat_exact(2, digit(s)),
|
||||||
|
character(':'),
|
||||||
|
repeat_exact(2, digit(s)),
|
||||||
|
maybe(sequence(
|
||||||
character(':'),
|
character(':'),
|
||||||
repeat_exact(2, digit(s)),
|
repeat_exact(2, digit(s)),
|
||||||
maybe(sequence(character('.'), repeat_at_least(1, digit(s))))
|
maybe(sequence(character('.'), repeat_at_least(1, digit(s))))
|
||||||
@@ -359,14 +357,15 @@ TOML11_INLINE sequence local_time(const spec& s)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
time.push_back(character(':'));
|
return sequence(
|
||||||
time.push_back(repeat_exact(2, digit(s)));
|
repeat_exact(2, digit(s)),
|
||||||
time.push_back(
|
character(':'),
|
||||||
|
repeat_exact(2, digit(s)),
|
||||||
|
character(':'),
|
||||||
|
repeat_exact(2, digit(s)),
|
||||||
maybe(sequence(character('.'), repeat_at_least(1, digit(s))))
|
maybe(sequence(character('.'), repeat_at_least(1, digit(s))))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return time;
|
|
||||||
}
|
}
|
||||||
TOML11_INLINE either time_offset(const spec& s)
|
TOML11_INLINE either time_offset(const spec& s)
|
||||||
{
|
{
|
||||||
@@ -412,23 +411,27 @@ TOML11_INLINE sequence escaped(const spec& s)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
either escape_seq(
|
const auto escape_seq = [&s, &escape_char] {
|
||||||
escape_char(),
|
if(s.v1_1_0_add_escape_sequence_x)
|
||||||
sequence(character('u'), repeat_exact(4, hexdig(s))),
|
{
|
||||||
sequence(character('U'), repeat_exact(8, hexdig(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)))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return either(
|
||||||
|
escape_char(),
|
||||||
|
sequence(character('u'), repeat_exact(4, hexdig(s))),
|
||||||
|
sequence(character('U'), repeat_exact(8, hexdig(s)))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if(s.v1_1_0_add_escape_sequence_x)
|
return sequence(character('\\'), escape_seq());
|
||||||
{
|
|
||||||
escape_seq.push_back(
|
|
||||||
sequence(character('x'), repeat_exact(2, hexdig(s)))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sequence(
|
|
||||||
character('\\'),
|
|
||||||
std::move(escape_seq)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TOML11_INLINE either basic_char(const spec& s)
|
TOML11_INLINE either basic_char(const spec& s)
|
||||||
@@ -664,16 +667,19 @@ TOML11_INLINE region non_ascii_key_char::scan(location& loc) const
|
|||||||
|
|
||||||
TOML11_INLINE repeat_at_least unquoted_key(const spec& s)
|
TOML11_INLINE repeat_at_least unquoted_key(const spec& s)
|
||||||
{
|
{
|
||||||
auto keychar = either(
|
const auto keychar = [&s] {
|
||||||
alpha(s), digit(s), character{0x2D}, character{0x5F}
|
if(s.v1_1_0_allow_non_english_in_bare_keys)
|
||||||
);
|
{
|
||||||
|
return either(alpha(s), digit(s), character{0x2D}, character{0x5F},
|
||||||
|
non_ascii_key_char(s));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return either(alpha(s), digit(s), character{0x2D}, character{0x5F});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if(s.v1_1_0_allow_non_english_in_bare_keys)
|
return repeat_at_least(1, keychar());
|
||||||
{
|
|
||||||
keychar.push_back(non_ascii_key_char(s));
|
|
||||||
}
|
|
||||||
|
|
||||||
return repeat_at_least(1, std::move(keychar));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TOML11_INLINE either quoted_key(const spec& s)
|
TOML11_INLINE either quoted_key(const spec& s)
|
||||||
|
|||||||
Reference in New Issue
Block a user