12 个版本 (5 个重大更新)
新版本 0.7.0 | 2024年8月19日 |
---|---|
0.6.8 | 2024年7月22日 |
0.6.0 | 2024年5月28日 |
0.5.2 | 2024年4月11日 |
0.1.0 | 2024年3月22日 |
#67 in 配置
每月下载量 175
150KB
3.5K SLoC
BarkML
BarkML 是一种声明式配置格式,灵感来源于 toml、hcl 等其他语言。最初是为了与操作工具和生成工具一起使用而创建的。语言默认使用 utf-8 解析,并且支持自引用宏替换。
语言规范
语句
控制语句
控制语句通常用于指定与文件、部分或块相关的元数据。它们是从以 $ 开头的任何变量开始的赋值语句。
语法
$<name> = (!<label>)? <value>
示例
$control_id = !MyProgram 1.0.0
上面的示例可以用来定义 barkml 使用的是哪种模式。注意,目前 BarkML 中没有直接实现模式检查,它是在使用 BarkML 的工具的编写者定义和检查模式。
部分
BarkML 中的数据最顶层分组是部分。部分看起来与 TOML 中的部分相同。不过与 TOML 不同,BarkML 不允许嵌套部分。部分旨在作为配置文件中的全局分组。
语法
[<name>|"<name>"]
<child-statements...>
示例
[section-a]
foo = "bar"
["section-b"]
foo = "baz"
注意:如果配置文件的用途是发送到网络或出于某种原因流式传输到服务,应避免使用部分,因为如果发送的数据被截断,它仍然可能是一个有效的 BarkML 文件。在这种情况下,应使用下面定义的块来分组语句。
注释
BarkML 支持通过定义以 # 开头后跟一个空格开始的行来定义注释。任何连续的带有 # 的行都将被连接成多行注释。
语法
# <any text without a newline>
# <...>
示例
# This is a comment in BarkML
块
BarkML 支持将一组语句分组和标记为块。这些块可以与 0 或多个任何值类型的标签相关联。如果您希望在宏中检索或引用块或从 walker 类中,作用域 ID 将始终是 id 加上所有标签,用 '.' 连接。
语法
<id> [<label>] {
<child-statements...>
}
赋值
标准的赋值语句将定义单个数据条目。与控制语句一样,值也可以有一个可选的标签,这有助于工具声明值的类型。
语法
[<id> | "<id>"] = (!<label>)? <value>
示例
foo = "bar"
"baz" = 3.14
值
整数
整数指定为数值,除非提供了后缀,否则将按有符号 64 位数字读取。可以使用以下后缀指定具有精度的数字:
后缀 | 精度 |
---|---|
u8 | 无符号 8 字节 |
u16 | 无符号16字节 |
u32 | 无符号32字节 |
u64 | 无符号64字节 |
u128 | 无符号128字节 |
i8 | 有符号8字节 |
i16 | 有符号16字节 |
i32 | 有符号32字节 |
i64 | 有符号64字节 |
i128 | 有符号128字节 |
示例
5
-2
5u32
-2i64
浮点数
默认情况下,浮点数以64字节浮点数读取,除非提供以下后缀之一。浮点数也可以指定指数。
后缀 | 精度 |
---|---|
f32 | 32字节 |
f64 | 64字节 |
示例
3.14
3.14f32
-5.2
5.2e10
5.2e+10
3.1e-10
30.0E+2
语义版本
BarkML支持内联语义版本声明。然而,为了避免与浮点数冲突,任何语义版本都必须指定至少...
示例
1.0.0
0.1.0-beta.1
0.1.0-prerelease-build.5
语义版本要求
BarkML还支持定义版本要求。唯一例外是,目前不支持显式支持通配符 '*'(如果不指定版本的所有部分,它仍然会被推断出来)。您还必须在barkml中始终指定要求运算符。
>1.1
^4
~5.3
字符串值
字符串可以用单引号或双引号定义。两者都被有效地解析为相同。
示例
'my-string'
"my string value"
字节数据
BarkML支持通过base64编码的字节字符串存储随机字节数据。为了避免配置文件之间使用base64的标准产生混淆,BarkML将预期URL安全且无填充的base64数据标准化。这个rust crate将自动将任何Vec<u8>
数据编码和解码为此编码标准。
示例
# binarystring in base64
b'YmluYXJ5c3RyaW5n'
标签
标签值是以!为前缀的标识符。这些主要用于赋值语句或控制语句之前的值,但也可以单独用作符号值。
示例
!MyLabel
布尔值
BarkML支持在配置文件中使用多个标识符来定义布尔值
真值选项
- true
- 真
- TRUE
- yes
- 是
- YES
- on
- 开
- ON
假值选项
- false
- 假
- FALSE
- no
- 否
- NO
- off
- 关
- OFF
空值
BarkML还支持使用多个标识符来定义空值
选项
- null
- 空值
- NULL
- nil
- 空
- NIL
- none
- 无
- NONE
数组
BarkML支持动态数组,这意味着任何数组的子条目类型不必匹配。数组始终用[]
包装,并可以包含由逗号分隔的0个或多个值
示例
[5, 3.14, 'foo']
表
BarkML还支持定义表
示例
{
foo = 5,
"bar" = 3.14
}
宏替换
BarkML支持使用自引用宏。这些宏在解析时将查找并用之前定义的值替换值。这些宏值必须通过配置文件顶部的根路径引用数据。宏替换是完整替换
示例
version = "1.0.0"
[section]
val = 5
[section-b]
parent-version = m!version
other-val = m!section.val
宏字符串
BarkML还允许在字符串声明中使用宏替换。宏字符串可以通过在字符串中使用{}
来定义一个或多个替换
version = "1.0.0"
motd = m'Hello from {version}'
注意:宏字符串只能使用单引号
安全
有关更多信息,请参阅CONTRIBUTING
许可
此库根据MIT-0许可证授权。请参阅LICENSE文件。
依赖项
~4.5MB
~62K SLoC