|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
YAML配置格式变量 更多...
#include "NeForce/core/container/unordered_map.hpp"#include "NeForce/core/container/vector.hpp"#include "NeForce/core/interface/istringify.hpp"#include "NeForce/core/memory/shared_ptr.hpp"#include "NeForce/core/time/datetime.hpp"YAML配置格式变量
此文件提供了YAML(YAML Ain't Markup Language)配置格式的抽象基类和具体实现类。 YAML是一种人类可读的数据序列化语言,常用于配置文件、数据交换和持久化存储。
支持YAML 1.2规范中的核心数据类型:
本实现严格遵循以下 YAML 及相关标准规范:
YAML 数据序列化规范:
JSON 兼容性标准(YAML 1.2 是 JSON 的超集):
时间戳格式标准(YAML 1.2 §10.4.2 引用):
Unicode 编码标准:
浮点数标准:
根据 YAML 1.2.2 规范,支持以下八种核心值类型:
| 类型 | YAML 1.2.2 引用 | 本实现类 | 说明 |
|---|---|---|---|
| Null | §10.2 | yaml_null | null、Null、NULL、~ |
| Boolean | §10.3 | yaml_boolean | true/false、True/False、yes/no等 |
| Integer | §10.4.1 | yaml_integer | 64位有符号整数(支持十进制、十六进制、八进制) |
| Float | §10.4.1 | yaml_float | IEEE 754 双精度浮点数(支持 .inf、-.inf、.nan) |
| String | §10.5 | yaml_string | Unicode 字符串(UTF-8/UTF-16/UTF-32) |
| Timestamp | §10.4.2 | yaml_timestamp | ISO 8601 / RFC 3339 时间戳 |
| Sequence | §10.1.1 | yaml_sequence | 有序值列表(数组) |
| Mapping | §10.1.2 | yaml_mapping | 键值对集合(字典/对象) |
根据 YAML 1.2.2 §7.3,支持五种字符串标量样式:
| 样式 | 语法示例 | 转义序列 | 换行处理 | 说明 |
|---|---|---|---|---|
| Plain | string | 不支持 | 折叠空格 | 无引号纯文本 |
| SingleQuoted | 'string' | 有限支持 | 保留 | 单引号字符串 |
| DoubleQuoted | "string" | 完全支持 | 保留 | 双引号字符串(含转义) |
| Literal | | | 不支持 | 保留 | 块字面量(保留换行) |
| Folded | > | 不支持 | 折叠 | 块折叠(换行转空格) |
根据 YAML 1.2.2 §7.4,序列和映射支持两种集合样式:
| 类型 | 块样式(Block) | 流样式(Flow) |
|---|---|---|
| 序列 | - item1 - item2 | [item1, item2] |
| 映射 | key1: value1\nkey2: value2 | {key1: value1, key2: value2} |
根据 YAML 1.2.2 §10.3.2,支持以下布尔值同义词:
| 语义值 | 规范形式 | 同义词 |
|---|---|---|
| true | true | True、TRUE、y、Y、yes、Yes、YES、on、On、ON |
| false | false | False、FALSE、n、N、no、No、NO、off、Off、OFF |
根据 YAML 1.2.2 §10.2.2,支持以下空值同义词:
| 规范形式 | 同义词 |
|---|---|
| null | Null、NULL、~(空字符串在某些上下文中) |
| 特性 | 规范参数 |
|---|---|
| 编码 | UTF-8(YAML 1.2 §5.1) |
| 整数范围 | -2^63 到 2^63-1(YAML 1.2 §10.4.1) |
| 浮点数精度 | IEEE 754-2019 双精度(YAML 1.2 §10.4.1) |
| 字符串转义序列 | YAML 1.2 §5.7 定义 |
| 键名唯一性 | YAML 1.2 §3.2.1(映射中键名应唯一) |
| 缩进要求 | 空格字符(YAML 1.2 §6.1),禁止制表符 |
| 注释支持 | # 行注释(YAML 1.2 §6.8) |
| 锚点与别名 | &anchor 和 *alias(YAML 1.2 §3.2.2) |
| 标签系统 | !tag 和 !!type(YAML 1.2 §3.2.3) |
根据 YAML 1.2.2 §5.7,双引号字符串支持以下转义序列:
| 转义序列 | 字符 | Unicode 码点 |
|---|---|---|
| \" | 引号 | U+0022 |
| \\ | 反斜杠 | U+005C |
| \/ | 斜杠 | U+002F |
| \b | 退格 | U+0008 |
| \f | 换页 | U+000C |
| \n | 换行 | U+000A |
| \r | 回车 | U+000D |
| \t | 制表符 | U+0009 |
| \uXXXX | Unicode 字符 | U+XXXX |
| \UXXXXXXXX | Unicode 字符(全范围) | U+XXXXXXXX |
YAML 1.2 是 JSON 的严格超集,所有有效的 JSON 文档也是有效的 YAML 文档。 这意味着 JSON 可以作为 YAML 的子集进行解析。
| 特性 | JSON | YAML 1.2 |
|---|---|---|
| 注释 | 不支持 | # 行注释 |
| 字符串引号 | 仅双引号 | 五种样式 |
| 尾部逗号 | 不允许 | 允许(可选) |
| 键名引号 | 必须引号 | 可选(裸键) |
| 锚点与别名 | 不支持 | &anchor 和 *alias |
| 标签 | 不支持 | !tag 和 !!type |
在文件 yaml_value.hpp 中定义.