自动脚本工具 下载

下载工具后,解压,直接双击 "execute.bat" 文件后(前提已配置好 jdk 1.7 的环境),会生成文件夹 "output",该文件夹下会有生成的对应语言的脚本。

你也可以先尝试修改文件 “config_example.xml” 的配置项,再运行 "execute.bat",看 "output" 文件夹下的文件有什么变化,对于程序员来说应该是很简单的东西了。

新版本支持同步输出 as3(对象+宏), java(对象+宏), c#(对象+宏), mysql(对象), js(宏), lua(宏) 的脚本了。

工具主要目的就是输出不同目标语言下相同的数据对象类定义,和宏类定义。配置详细

[type] 支持的 type 类型
|---boolean : 布尔
|---integer8 : 8 位整型
|---integer16 : 16 位整型
|---integer32 : 32 位整型
|---integer64 : 64 位整型
|---decimal32 : 32 位小数
|---decimal64 : 64 位小数
|---string : 字符串
|---array : 数组,默认泛型类型为 object
|---dictionary : 字典,默认泛型类型为 object
|---date : 日期
|---object : 基类型 [value] 对应 type 类型支持的默认值
|---boolean : true/false 真/假
|---string : 非 null 时,输出会自动添加引号
|---date, array, dictionary : new 构造对象
|---object : null 空值 [Macros][group]
|---宏的分组,当不指定宏类型时,则被系统归为分组中,自动指定类型为 integer32,指定一个系统值
|---值结构为 0x7FFFFFFF,从左到右,第0位始终为0,第1-11位表示所在的组,第12-31表示宏值。如 宏 0x00100001 表示该宏在分组 1 (第 1-11 位 : 0x001) 中,值为 1 (第 12-31 位 : 0x00001)
|---分组不能嵌套 [AutoScript] 以包为单位定义对象和宏
|---package : 默认包路径 - 非必需
|---packageAs3 : as3 包路径,如果未指定,则使用 package - 非必需
|---packageJava : java 包路径,如果未指定,则使用 package - 非必需
|---packageNet : c# 包路径,如果未指定,则使用 package - 非必需
|---packageDB : mysql 数据库名,如果未指定,则使用 package 的最内层包名,如果也未指定,则系统默认为 dbScript - 非必需
|---packageJS : js 包路径,如果未指定,则使用 package - 非必需
|---packageLua : lua 包路径,如果未指定,则使用 package - 非必需
|---[Object] 对象数据
|---name : 对象数据类名(即文件名), - 必需
|---extend : 基类 - 非必需
|---note : 对象数据注释 - 非必需
|---nameTable : 该对象数据对应的 mysql 表名,如果未指定,则使用 name - 非必需
|---autoIncrement : mysql 中主键自增起始值 - 非必需
|---[ImportAs3][ImportJava][ImportNet] 对象数据需要引用的其它对象
|---value : 引用的对象完整包路径+类名,如 java.util.Date - 必需
|---[Property] 对象数据属性
|---name : 属性名,c# 输出时会首字母大写 - 必需
|---type : 属性默认类型,指定类型见 [type],如果指定为不支持的类型,则原样输出 - 非必需
|---value : 属性默认值,特殊值见 [value],其它值则会原样输出 - 非必需
|---note : 属性注释 - 非必需
|---typeAs3 : as3 属性类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需
|---valueAs3 : as3 属性围住值,如果未指定,则使用 value - 非必需
|---typeJava : java 属性类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需
|---valueJava : java 属性默认值,如果未指定,则使用 value - 非必需
|---typeNet : c# 属性类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需
|---valueNet : c# 属性默认值,如果未指定,则使用 value - 非必需
|---typeDB : mysql 字段类型(原样输出类型和指定的值),如果未指定,则使用 type - 非必需
|---valueDB : mysql 字段默认值,如果未指定,则使用 value - 非必需
|---restrictDB : mysql 字段约束,如 NOT NULL - 非必需
|---[Macros] 一组宏的定义,该定义下的直系 [Macro] 占用第 1 个分组
|---name : 宏类名(即文件名) - 必需
|---groupStart : 指定分组的起始序号,最小值为 0
|---groupEnd : 指定分组的结束序号,如果小于 groupStart,则默认为 0x7FF
|---note : 宏类注释 - 非必需
|---[Macro] 宏
|---name : 宏名 - 必需
|---type : 宏类型,指定类型见 [type],如果指定为不支持的类型,则原样输出 - 非必需
|---value : 宏默认值,特殊值见 [value],其它值则会原样输出 - 非必需
|---note : 宏注释
|---[Group] 宏分组,同 [Macro] 定义一样会生成一个宏,如果不指定类型,则系统指定的值结构为:分组位为当前分组,值部分为0
|---name : 分组(宏)名
|---type : 分组(宏)类型,指定类型见 [type],如果指定为不支持的类型,则原样输出 - 非必需
|---value : 分组(宏)默认值,特殊值见 [value],其它值则会原样输出 - 非必需
|---note : 分组(宏)注释
|---[Macro] 分组中的宏

配置模板

 <AutoScript package="" packageAs3="" packageJava="" packageNet="" packageDB="" packageJS="" packageLua="">

     <Object name="" extend="" note="" nameTable="" autoIncrement="">
<ImportAs3 value=""/>
<ImportJava value=""/>
<ImportNet value=""/>
<Property name="" type="" value="" note="" typeAs3="" valueAs3="" typeJava="" valueJava="" typeNet="" valueNet="" typeDB="" valueDB="" restrictDB=""/>
</Object> <Macros name="" groupStart="" groupEnd="" note="">
<Macro name="" type="" value="" note=""/>
<Group name="" type="" value="" note="">
<Macro name="" type="" value="" note=""/>
</Group>
</Macros> </AutoScript>

批文件模板

 @echo off

 java -classpath ./libs/*; AutoScript ^
-config ./config_example.xml ^
-pathAs3 ./output/as3/ ^
-pathJava ./output/java/ ^
-pathNet ./output/net/ ^
-net2one netLib ^
-pathDB ./output/mysql/ ^
-pathJS ./output/js/ ^
-pathLua ./output/lua/ pause @echo on
exit ::输出配置文件中的对象数据和宏
::-config 后可以指定多个配置文件,如 -config config_a.xml config_b.xml
::-pathAs3 输出 as3 文件路径(如果需要输出 as3 脚本)
::-pathJava 输出 java 文件路径(如果需要输出 java 脚本)
::-pathNet 输出 c# 文件路径(如果需要输出 c# 脚本)
::-net2one 如果指定的话,将会把每一个配置文件(如 config_a.xml)里的所有对象(节点 Object)输出到一个 .cs 文件中 。后接 .cs 文件名(数量与 -config 指定的文件数量一一对应),如 -config ./configA.xml ./configB.xml -net2one a b,将会输出 a.cs 和 b.cs 文件
::-pathDB 输出 mysql 脚本文件路径(如果需要输出 mysql 脚本)
::-pathJS 输出 js 文件路径(如果需要输出 js 脚本)
::-pathLua 输出 lua 文件路径(如果需要输出 lua 脚本)

比如:客户端与服务端需要统一请求和返回命令、错误码之类的,就可以只需要维护宏定义配置文件。直接输出客户端和服务端的宏定义类。

 <Macros name="ReqRsp" groupStart="1" groupEnd="100" note="请求返回命令">
<Macro name="WELCOME" type="string" value="欢迎使用"/>
<Macro name="ERROR_PASSWORD" type="integer32" value="1" note="密码错误"/> <Group name="Register" note="注册">
<Macro name="register_req" note="注册账号请求"/>
<Macro name="register_rsp" note="注册请求返回"/>
</Group>
</Macros>
<Macros name="Errors" groupStart="101" groupEnd="200" note="错误码">
<Macro name="WELCOME" type="string" value="欢迎使用"/>
<Macro name="ERROR_PASSWORD" type="integer32" value="1" note="密码错误"/> <Group name="Register" note="注册">
<Macro name="username_existed" note="登录名已存在"/>
<Macro name="email_necessary" note="需要填写电子邮箱"/>
</Group>
</Macros>

配置宏示例

 package com.test
{ /** 请求返回命令 */
public class ReqRsp
{ static public const WELCOME:String = "欢迎使用";
/** 密码错误 */
static public const ERROR_PASSWORD:int = 1; /** 注册 */
static public const REGISTER:int = 2097152;
/** 注册账号请求 */
static public const REGISTER_REQ:int = 2097153;
/** 注册请求返回 */
static public const REGISTER_RSP:int = 2097154; }
}

输出 as3 ReqRsp

 package com.test
{ /** 错误码 */
public class Errors
{ static public const WELCOME:String = "欢迎使用";
/** 密码错误 */
static public const ERROR_PASSWORD:int = 1; /** 注册 */
static public const REGISTER:int = 106954752;
/** 登录名已存在 */
static public const USERNAME_EXISTED:int = 106954753;
/** 需要填写电子邮箱 */
static public const EMAIL_NECESSARY:int = 106954754; }
}

输出 as3 Errors

 package com.test;

 /** 请求返回命令 */
public class ReqRsp { static public final String WELCOME = "欢迎使用";
/** 密码错误 */
static public final int ERROR_PASSWORD = 1; /** 注册 */
static public final int REGISTER = 2097152;
/** 注册账号请求 */
static public final int REGISTER_REQ = 2097153;
/** 注册请求返回 */
static public final int REGISTER_RSP = 2097154; }

输出 java ReqRsp

 package com.test;

 /** 错误码 */
public class Errors { static public final String WELCOME = "欢迎使用";
/** 密码错误 */
static public final int ERROR_PASSWORD = 1; /** 注册 */
static public final int REGISTER = 106954752;
/** 登录名已存在 */
static public final int USERNAME_EXISTED = 106954753;
/** 需要填写电子邮箱 */
static public final int EMAIL_NECESSARY = 106954754; }

输出 java Errors

 namespace com.test
{
/// <summary>
/// 请求返回命令
/// </summary>
public class ReqRsp
{ public const System.String WELCOME = "欢迎使用";
/// <summary>
/// 密码错误
/// </summary>
public const System.Int32 ERROR_PASSWORD = ; /// <summary>
/// 注册
/// </summary>
public const System.Int32 REGISTER = ;
/// <summary>
/// 注册账号请求
/// </summary>
public const System.Int32 REGISTER_REQ = ;
/// <summary>
/// 注册请求返回
/// </summary>
public const System.Int32 REGISTER_RSP = ; }
}

输出 c# ReqRsp

 namespace com.test
{
/// <summary>
/// 错误码
/// </summary>
public class Errors
{ public const System.String WELCOME = "欢迎使用";
/// <summary>
/// 密码错误
/// </summary>
public const System.Int32 ERROR_PASSWORD = ; /// <summary>
/// 注册
/// </summary>
public const System.Int32 REGISTER = ;
/// <summary>
/// 登录名已存在
/// </summary>
public const System.Int32 USERNAME_EXISTED = ;
/// <summary>
/// 需要填写电子邮箱
/// </summary>
public const System.Int32 EMAIL_NECESSARY = ; }
}

输出 c# Errors

 var com_test_ReqRsp = {

     "WELCOME" : "欢迎使用",
"ERROR_PASSWORD" : 1, // 密码错误 "REGISTER" : 2097152, // 注册
"REGISTER_REQ" : 2097153, // 注册账号请求
"REGISTER_RSP" : 2097154, // 注册请求返回 };

输出 js ReqRsp

 var com_test_Errors = {

     "WELCOME" : "欢迎使用",
"ERROR_PASSWORD" : 1, // 密码错误 "REGISTER" : 106954752, // 注册
"USERNAME_EXISTED" : 106954753, // 登录名已存在
"EMAIL_NECESSARY" : 106954754, // 需要填写电子邮箱 };

输出 js Errors

 com_test_ReqRsp = {

     ["WELCOME"] = "欢迎使用",
["ERROR_PASSWORD"] = , -- 密码错误 ["REGISTER"] = , -- 注册
["REGISTER_REQ"] = , -- 注册账号请求
["REGISTER_RSP"] = , -- 注册请求返回 };

输出 lua ReqRsp

 com_test_ReqRsp = {

     ["WELCOME"] = "欢迎使用",
["ERROR_PASSWORD"] = , -- 密码错误 ["REGISTER"] = , -- 注册
["REGISTER_REQ"] = , -- 注册账号请求
["REGISTER_RSP"] = , -- 注册请求返回 };

输出 lua Errors

比如数据传输,像 as3 与 java 通信的 amf3 协议,可以传输对象。配置如下

 <Object name="VOUser" note="用户对象" nameTable="t_user">
<Property name="id" type="integer32" note="标识" restrictDB="PRIMARY KEY"/>
<Property name="isBoy" type="boolean" value="true"/>
<Property name="dateTime" type="date" value="new"/>
</Object>

配置对象类示例

 package com.test
{
/** 用户对象 */
public class VOUser
{ //============================================================================
//PROPERTY
//============================================================================
private var _id:int;
private var _isBoy:Boolean = true;
private var _dateTime:Date = new Date();
//============================================================================
//CONSTRUCTOR
//============================================================================
public function VOUser() {}
//============================================================================
//GETTER_SETTER
//============================================================================
/** 标识 */
public function get id():int { return _id; }
/** @private */
public function set id(value:int):void { this._id = value; } public function get isBoy():Boolean { return _isBoy; }
public function set isBoy(value:Boolean):void { this._isBoy = value; } public function get dateTime():Date { return _dateTime; }
public function set dateTime(value:Date):void { this._dateTime = value; } }
}

输出 as3 VOUser

 package com.test;

 /** 用户对象 */
public class VOUser { //============================================================================
//PROPERTY
//============================================================================
private int id;
private boolean isBoy = true;
private java.util.Date dateTime = new java.util.Date();
//============================================================================
//CONSTRUCTOR
//============================================================================
public VOUser() {}
//============================================================================
//GETTER_SETTER
//============================================================================
/** 标识 */
public int getId() { return id; }
/** 标识 */
public void setId(int value) { this.id = value; } public boolean getIsBoy() { return isBoy; }
public void setIsBoy(boolean value) { this.isBoy = value; } public java.util.Date getDateTime() { return dateTime; }
public void setDateTime(java.util.Date value) { this.dateTime = value; } }

输出 java VOUser

 namespace com.test
{
/// <summary>
/// 用户对象
/// </summary>
public class VOUser
{
//============================================================================
//PROPERTY
//============================================================================
private System.Int32 _id;
private System.Boolean _isBoy = true;
private System.DateTime _dateTime = System.DateTime.Now;
//============================================================================
//CONSTRUCTOR
//============================================================================
public VOUser() {}
//============================================================================
//GETTER_SETTER
//============================================================================
/// <summary>
/// 标识
/// </summary>
public System.Int32 Id
{
get { return _id; }
set { this._id = value; }
} public System.Boolean IsBoy
{
get { return _isBoy; }
set { this._isBoy = value; }
} public System.DateTime DateTime
{
get { return _dateTime; }
set { this._dateTime = value; }
} }
}

输出 c# VOUser

 DROP DATABASE IF EXISTS db_test;
CREATE DATABASE db_test DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI; USE db_test; #----------------------------------------------------------------------------
#用户对象
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user(
id INT PRIMARY KEY COMMENT "标识"
, isBoy TINYINT DEFAULT 1
, dateTime DATETIME DEFAULT NULL
)DEFAULT CHARSET = UTF8 COLLATE UTF8_GENERAL_CI;
DESC t_user;

输出 mysql 脚本

自动脚本工具新版 v2.0的更多相关文章

  1. dingo/API 最新版 V2.0 之安装讲解

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  2. 第一节: dingo/API 最新版 V2.0 之安装讲解(连载)

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  3. 跨平台日志清理工具 Log-Cutter v2.0.1 正式发布

    Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...

  4. 跨平台日志清理工具 Log-Cutter v2.0.1 RC-1 发布

    Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...

  5. 注册表对比工具(Regshot) V2.0.1 中文绿色版

    软件名称: 注册表对比工具(Regshot)软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / WinXP软件大小: 263KB图片预览: 软件简介:Regshot 是一 ...

  6. 第四节:dingo/API 最新版 V2.0 之 Responses (连载)

    因为某些某些原因,不能按时更新,唉.我会尽力,加快速度.(这句话不是翻译的哈) 原文地址--> https://github.com/dingo/api/wiki/Responses A fun ...

  7. 第三节:dingo/API 最新版 V2.0 之 Creating API Endpoints (连载)

    对于这篇文章的标题,其实,直译就是创建api端点.但是,真的很难懂,我还是写为API路由吧.每篇,文章,我都会全部去进行实践操作,力求写一个好点的教程. 本文英文地址——>https://git ...

  8. Windows 虚拟桌面工具 Desktops v2.0

    https://technet.microsoft.com/en-us/sysinternals/cc817881.aspx

  9. 百度地图V2.0实践项目开发工具类bmap.util.js V1.4

    /** * 百度地图使用工具类-v2.0(大眾版) * * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @em ...

随机推荐

  1. bnuoj 4357 传送阵

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4357 [题意]:在1000个数中选择3个之和是m的倍数,可能有多种选择方案,请输出标号排序最小的一组 ...

  2. 100 doors

    Question There are 100 doors in a row that are all initially closed. You make 100 passes by the door ...

  3. JAVA多线程synchronized详解

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 当两个并发线程访问同一个对象object中的这个synchronized(this)同 ...

  4. OSUnMapTbl[]的原理

    问题描述:     ucos任务队列中优先级获取 问题解决: uCOS-II是一个多任务的操作系统,每个任务都是一个应用程序,它有自己的寄存器和堆栈空间,即任务控制块TCB(task control ...

  5. PAT-乙级-1012. 数字分类 (20)

    1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...

  6. spoj 1436

    用并查集看一下是否会围成一个环  若围成环直接输出NO   当然 当 m >= n  时必然会围成环直接输出NO #include <algorithm> #include < ...

  7. grep正则表达式后面的单引号和双引号的区别

    单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换:双引号""是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容! 一般常量用单引号' ...

  8. Power Station POJ 4045

    题意:给你一棵树,让你求一点,使该点到其余各点的距离之和最小.如果这样的点有多个,则按升序依次输出. 树型dp #include <cstdio> #include <cstring ...

  9. “段寄存器”的故事[转](彻底搞清内存段/elf段/实模式保护模式以及段寄存器)

    http://blog.csdn.net/michael2012zhao/article/details/5554023 一. 段寄存器的产生 段寄存器的产生源于Intel 8086 CPU体系结构中 ...

  10. Playing with cubes II

    Description: Hey Codewarrior! You already implemented a Cube class, but now we need your help again! ...