Skip to content

TextWar/myoaml

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

en LICENSE doc

oaml

object aim markup language

本软件受到GPL软件协议保护,请阅读相关许可证,再使用本软件

  • 什么是oaml oaml全称对象集目标扩展语言,拥有简单的配置模式和解析模式,可以不需缩进的限制,目前为0.0.2版本测试版
  • 如何使用它?
root1: root
{
	child: 11
	{
		array: [0,0,0,0]
	}
}
root2: root2
{
	child: 11
	{
		array: [1,2,3,4]
	}
}

oaml的格式约束

oaml不允许多个元素在同一行,允许有同路径元素(但是最大级不支持重名,如果要重名,必须设置最大级,在子节点重名操作),即同一级元素可以重名,每个元素都是键值对,因此,即使有下级元素存在,也可以添加值

括号级

Oaml通过括号分级,因此支持不缩进,oaml的分支特点

: 
{
	子元素键1: 子元素值
	{
		孙元素键1: 孙元素值
		{
			...
		}
		孙元素键2: 孙元素值
	}
	子元素键2: 子元素值
	子元素键3: 子元素值
}

如果一个元素没有下级元素,则可以没有大括号 如果一个元素有下级元素,则必须有大括号包围 另外,大括号必须在单独一行,否则默认读取到字符串

数据类型

字符串,数组 数组的声明:[值1,值2,值3] 字符串声明: 值

使用oaml java解析oaml

  • 导入部署 pom.xml导入maven:
<dependency>
  <groupId>net.noyark</groupId>
  <artifactId>oaml</artifactId>
  <version>0.0.5</version>
</dependency>

连接服务器

<repositories>
 <repository>
    <id>nexus</id>
    <name>Team Neux Repository</name><url> http://www.noyark.net:8081/nexus/content/groups/public/ </url>
</repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
      <id>nexus</id>
      <name>Team Neux Repository</name>
      <url> http://www.noyark.net:8081/nexus/content/groups/public/ </url>
    </pluginRepository>
 </pluginRepositories>
  • 创建oaml
//获取节点容器
Document document = DocumentFactory.getDocument();

Node node = document.getEntry("root");//创建第一级
node.setValue("root");//设置值
Node node2 = node.createNode("second");//创建第二级
node2.setValue("hello,oaml");
Node node3 = node2.createNode("third");//创建第三级

XYamlWriter writer = new XYamlWriter("a2122.oml");//创建写入流
writer.write(document);//写入
writer.close();//关流

运行后,产生a2122.oml,内容如下

#这个必须带上,表明字符集和版本,创建时,会自动写入
#但是解析时,必须确认它在第一行
?encoding: UTF-8 version: 1.0.0?

root: root
{
	second: hello,oaml
	{
		third: 
	}
}
  • 解析oaml
XYamlReader reader = new XYamlReader("a.2122.oml");//创建读取流
Document document2 = reader.read();//读取出Document对象
Node node = document2.getEntry("root");//读出node对象
reader.close();//关闭
  • 简单式解析和放入 简单式解析简化oaml操作,但是不支持重复路径,即同级没有重复名字

1.默认解析

//false为是否转换为classpath流
OamlComfig oaml = new OamlConfig("select.oml",false);
oaml.put("a.b.c",1);//放入三级元素
oaml.put("a.b","1");
oaml.save();//保存文件
oaml.get("a.b.c");//获取元素

效果:

a:{
  b:1{
    c:1
  }
}

2.反射解析 创建一个类,如下所示

package net.noyark.test;

@Config("select.oml")
public class TestConfig{
  @Root("a.b")//和下面的@Note等效
  public int number = 0;
  @Node("a.b")
  public int[] is = {1,2,3};
}

之后只需要

new ReflectSet("net",config).loadAnnotation();//net为最大包名,也可以是net.noyark

字符串数组

oaml支持字符串数组,即setValue方法可以直接

setValue("[1,2,3,4]");

解析器将默认读为数组类型,取出时也是以数组形式取出

关于换行

换行直接在配置文件加入\n即可,解析器会默认以换行读取

对象数据类型

oaml支持对象数据类型,对象数据类型格式 (对象字段名:对象值;字段名:值)

数组可以换行

若想要式一个数据可以换行,可以在左右加中括号,都会默认为数组,且可以随意换行 当让,其他数据类型也可以这样做,通过getValue同样可以获得单值

抛锚机制

005版本后,允许抛锚,即复用值。

抛锚的语法: &a&内容

调用锚的语法: *a 锚后不允许添加其他字符串

语法总结

  • 数据类型 Oaml是基于java的偏弱类型数据转换语言,除以下几种数据类型外,不会细分其他数据类型,为了保证语法简易 Oaml的数据类型有
  1. 键值对
key: value

java方法:getInt getDouble…8大基本类型,getValue,getString 2. 数组

key: [value,value,value]

Java方法:getArray,getList,getValue 4. 对象

key: (key: value;key: value;)

java方法: getObject,getObjectArray,getObjectList 6. 日期

key: 2019-4-16 23:35

java方法:getDate(format)

  • 特殊符号
  1. \n 字符串换行
  2. &n& 设置锚
  3. *n 指向锚
  4. {} 为节点分级
  5. [] 划分数组
  6. $ 变量
  7. () 对象

About

the oaml java parser,author:magiclu550

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages