1#ifndef NEFORCE_CORE_FILE_YAML_YAML_PARSER_HPP__
2#define NEFORCE_CORE_FILE_YAML_YAML_PARSER_HPP__
14NEFORCE_BEGIN_NAMESPACE__
125 struct indent_context {
141 size_t current_indent_ = 0;
142 bool in_flow_context_ =
false;
150 NEFORCE_NODISCARD
char current()
const noexcept;
157 NEFORCE_NODISCARD
char peek(
size_t offset = 1)
const noexcept;
163 NEFORCE_NODISCARD
bool eof()
const noexcept;
175 bool match(
char ch)
noexcept;
183 bool expect(
char ch);
188 void skip_whitespace_inline()
noexcept;
193 void skip_comment()
noexcept;
198 void skip_to_next_line()
noexcept;
205 void skip_blank_lines()
noexcept;
210 void skip_whitespace_and_comments();
217 NEFORCE_NODISCARD
bool is_whitespace(
char ch)
const noexcept;
224 NEFORCE_NODISCARD
bool is_newline(
char ch)
const noexcept;
232 NEFORCE_NODISCARD
size_t peek_indent()
const noexcept;
238 size_t skip_indent();
248 void handle_indent_change(
size_t new_indent);
256 void parse_directive();
262 string parse_anchor();
283 void skip_tag()
noexcept;
295 NEFORCE_NODISCARD
bool has_anchor()
const noexcept;
301 NEFORCE_NODISCARD
bool has_alias()
const noexcept;
350 string parse_multiline_string(
bool is_literal);
432 string parse_plain_key();
438 string parse_quoted_key();
476 void parse_document_start();
481 void parse_document_end();
487 NEFORCE_NODISCARD
bool is_document_start()
const noexcept;
493 NEFORCE_NODISCARD
bool is_document_end()
const noexcept;
502 NEFORCE_NODISCARD
bool is_plain_safe(
char ch)
const noexcept;
509 NEFORCE_NODISCARD
bool is_key_char(
char ch)
const noexcept;
518 NEFORCE_NODISCARD
bool is_indicator(
char ch)
const noexcept;
527 NEFORCE_NODISCARD
bool is_flow_indicator(
char ch)
const noexcept;
535 codepoint parse_unicode_escape(
size_t digits);
544 NEFORCE_NODISCARD
string unescape_string(
const string& str)
const;
553 NEFORCE_NORETURN
void throw_parse_error(
const string& message)
const;
565 yaml_(
move(yaml_str)),
566 len_(yaml_.
size()) {}
614NEFORCE_END_NAMESPACE__
shared_ptr< yaml_value > parse()
解析YAML文档
yaml_parser(string yaml_str)
构造函数
vector< shared_ptr< yaml_value > > parse_documents()
解析多个YAML文档
optional< shared_ptr< yaml_value > > try_parse()
尝试解析YAML文档(不抛出异常)
optional< vector< shared_ptr< yaml_value > > > try_parse_documents()
尝试解析多个YAML文档(不抛出异常)
constexpr void advance(Iterator &i, Distance n)
将迭代器前进指定距离
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小