NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
yaml_parser.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_FILE_YAML_YAML_PARSER_HPP__
2#define NEFORCE_CORE_FILE_YAML_YAML_PARSER_HPP__
3
10
14NEFORCE_BEGIN_NAMESPACE__
15
20
25
116class NEFORCE_API yaml_parser {
117private:
125 struct indent_context {
126 size_t level;
127 yaml_mapping* mapping;
128 yaml_sequence* sequence;
129 string key;
130 bool is_sequence;
131 };
132
133 string yaml_;
134 size_t len_;
135 size_t pos_ = 0;
136 size_t line_ = 1;
137 size_t column_ = 1;
138
139 vector<indent_context> indent_stack_;
141 size_t current_indent_ = 0;
142 bool in_flow_context_ = false;
143
145
150 NEFORCE_NODISCARD char current() const noexcept;
151
157 NEFORCE_NODISCARD char peek(size_t offset = 1) const noexcept;
158
163 NEFORCE_NODISCARD bool eof() const noexcept;
164
168 void advance() noexcept;
169
175 bool match(char ch) noexcept;
176
183 bool expect(char ch);
184
188 void skip_whitespace_inline() noexcept;
189
193 void skip_comment() noexcept;
194
198 void skip_to_next_line() noexcept;
199
205 void skip_blank_lines() noexcept;
206
210 void skip_whitespace_and_comments();
211
217 NEFORCE_NODISCARD bool is_whitespace(char ch) const noexcept;
218
224 NEFORCE_NODISCARD bool is_newline(char ch) const noexcept;
225
232 NEFORCE_NODISCARD size_t peek_indent() const noexcept;
233
238 size_t skip_indent();
239
248 void handle_indent_change(size_t new_indent);
249
256 void parse_directive();
257
262 string parse_anchor();
263
269 void register_anchor(const string& anchor, const shared_ptr<yaml_value>& value);
270
276 shared_ptr<yaml_value> parse_alias();
277
283 void skip_tag() noexcept;
284
289 string parse_tag();
290
295 NEFORCE_NODISCARD bool has_anchor() const noexcept;
296
301 NEFORCE_NODISCARD bool has_alias() const noexcept;
302
309 shared_ptr<yaml_string> parse_plain_string();
310
317 shared_ptr<yaml_string> parse_single_quoted_string();
318
325 shared_ptr<yaml_string> parse_double_quoted_string();
326
333 shared_ptr<yaml_string> parse_literal_string();
334
341 shared_ptr<yaml_string> parse_folded_string();
342
350 string parse_multiline_string(bool is_literal);
351
364 shared_ptr<yaml_value> parse_scalar();
365
370 shared_ptr<yaml_value> parse_number();
371
376 shared_ptr<yaml_boolean> parse_boolean();
377
382 shared_ptr<yaml_null> parse_null();
383
390 NEFORCE_NODISCARD shared_ptr<yaml_timestamp> parse_timestamp(string_view str) const;
391
396 shared_ptr<yaml_sequence> parse_flow_sequence();
397
402 shared_ptr<yaml_mapping> parse_flow_mapping();
403
410 shared_ptr<yaml_sequence> parse_block_sequence();
411
420 shared_ptr<yaml_mapping> parse_block_mapping(bool parent_skipped_indent);
421
426 string parse_key();
427
432 string parse_plain_key();
433
438 string parse_quoted_key();
439
447 shared_ptr<yaml_value> parse_value();
448
455 shared_ptr<yaml_value> parse_block_value();
456
463 shared_ptr<yaml_value> parse_inline_value();
464
471 shared_ptr<yaml_value> parse_single_document();
472
476 void parse_document_start();
477
481 void parse_document_end();
482
487 NEFORCE_NODISCARD bool is_document_start() const noexcept;
488
493 NEFORCE_NODISCARD bool is_document_end() const noexcept;
494
502 NEFORCE_NODISCARD bool is_plain_safe(char ch) const noexcept;
503
509 NEFORCE_NODISCARD bool is_key_char(char ch) const noexcept;
510
518 NEFORCE_NODISCARD bool is_indicator(char ch) const noexcept;
519
527 NEFORCE_NODISCARD bool is_flow_indicator(char ch) const noexcept;
528
535 codepoint parse_unicode_escape(size_t digits);
536
544 NEFORCE_NODISCARD string unescape_string(const string& str) const;
545
553 NEFORCE_NORETURN void throw_parse_error(const string& message) const;
554
555public:
564 explicit yaml_parser(string yaml_str) :
565 yaml_(move(yaml_str)),
566 len_(yaml_.size()) {}
567
579
588
600
608};
609 // YamlConfig
611 // ConfigFormat
613
614NEFORCE_END_NAMESPACE__
615#endif // NEFORCE_CORE_FILE_YAML_YAML_PARSER_HPP__
Unicode码点包装类
可选值类
共享智能指针类模板
无序映射容器
动态大小数组容器
YAML映射值类型(字典/对象)
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文档(不抛出异常)
YAML序列值类型(数组)
Unicode码点处理类
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()))
获取容器的大小
可选值类型
YAML配置格式变量