FNML全名为Flower's Node Markdown Language
,是由@冬花ice原创的一种标记语言,它做到了最简、同时支持解析和写入
语法格式
FNML,顾名思义是由节点组成的配置文件
不支持行内注释,必须以#
开头(井号后面必须有个空格,前面可以缩进)
注释行会在解析时被自动忽略
下面的2种注释是合法的
# 用户名
username 'flowerinsnow'
profile {
# 用户名
username 'flowerinsnow'
}
下面这2种注释是非法的
username 'flowerinsnow' # 用户名
#用户名
username 'flowerinsnow'
节点有三种,分别是文本节点、对象节点、列表节点
对于数字,FNML并不支持,请使用文本节点
顾名思义,文本节点包含单行文本
格式要求以'
开头,以'
结尾,中间可以有'
,以换行前结束
注:FNML不支持多行文本,请使用\n
转义
下面这3种文本节点是合法的
field1 '20231231'
# 内容会是`'value1'`(包含内侧的单引号)
field2 ''value1''
# 内容会是`value2\n`(不会有任何转义)
field3 'value2\n'
下面这4种文本节点是非法的
# 使用非英文单引号
field1 ‘value1’
# 换行
field2 '
value2
'
# 不使用单引号
field4 18
# 不以单引号结尾
field3 'valu'e3
必须以{
开头,并立即换行,必须以单行}
结尾
合法格式
object1 {
field1 'value1'
object2 {
field2 'value2'
}
}
以下这3种格式是非法的
# `{`不与字段名一行
object1
{
field1 'value1'
}
# `{`不在该行最后
object2 { field2 'value2'
}
# ``}`不在单独一行
object3 {
field3 'value3'}
合法格式
list1 [
'value1'
object2 {
field3 'value3'
}
list4 [
'value5'
]
]
以下这4种格式是非法的
# `[`不与字段名一行
list
[
'value1'
]
# `[`不在该行最后
list2 [ 'value2'
]
# ``}`不在单独一行
list3 [
'value3']
list4 [
# 有字段名
field4 'value4'
]
- 一行只能由一个节点
- 对象和列表的
{``[
都必须使用对应的}``]
闭合
常用的配置文件都无法满足我的需求
让我不满意的配置文件语言
这两个语言太过繁琐,很难编写,更很难让不懂编程的人编写
不太喜欢这个语言的缩进格式
很难或者根本不支持二级嵌套,类似这样
object1 {
object2 {
field3: 'value4'
}
}
在我眼里是非常完美的一种语言,非常可惜用于读取它的Java库都不合我意,不仅是API好用程度,它在写入文件时还会给键排序,无法禁用这个排序
以后我打算在我自己的项目中都用这个格式了
@冬花ice写的Java解析器,当然,我就是冬花ice。
我知道这个配置格式虽然在我眼中是完美的,但是不会有人注意渺小的我提出的这个格式,所以决定自己写解析器