前言

xresloader 是一组用于把Excel数据结构化并导出为程序可读的数据文件的导表工具集。它包含了一系列跨平台的工具、协议描述和数据读取代码。

主要功能特点:

  • 跨平台(java 11 or upper)
  • Excel => protobuf/msgpack/lua/javascript/json/xml
  • 完整支持协议结构,包括嵌套结构和数组嵌套
  • 同时支持protobuf proto v2 和 proto v3
  • 支持导出proto枚举值到lua/javascript代码和json/xml数据
  • 支持导出proto描述信息值到lua/javascript代码和json/xml数据(支持自定义插件,方便用户根据proto描述自定义反射功能)
  • 支持导出 UnrealEngine 支持的json或csv格式,支持自动生成和导出 UnrealEngine 的 DataTable 加载代码
  • 支持别名表,用于给数据内容使用一个易读的名字
  • 支持验证器,可以在数据里直接填写proto字段名或枚举名,或者验证填入数据的是否有效
  • 支持通过protobuf协议插件控制部分输出
  • 支持自动合表,把多个Excel数据表合并成一个输出文件
  • 支持公式
  • 支持oneof,支持plain模式输入字符串转为数组或复杂结构,支持map
  • 支持空数据压缩(裁剪)或保留定长数组
  • 支持基于正则表达式分词的字段名映射转换规则
  • 支持设置数据版本号
  • Lua输出支持全局导出或导出为 require 模块或导出为 module 模块。
  • Javascript输出支持全局导出或导出为 nodejs 模块或导出为 AMD 模块。
  • 提供CLI批量转换工具(支持python 2.7/python 3 @ Windows、macOS、Linux)
  • 提供GUI批量转换工具(支持Windows、macOS、Linux)
  • CLI/GUI批量转换工具支持include来实现配置复用

xresloader 包含了多个组件,其中最主要的部分分别是。

项目里面引入了Lua,就特别学习了一下。

其实对于理解Javascipt的人来说,Lua也很容易理解,因为他们太多的地方相像了。

初步看来,Lua的设计模式和思想很像Javascript,也是原型模型(Javascript里叫prototype,Lua里是metatable

最近看了点typescript的东西,加上以前看过的一点点Node.js,所以就想把他们系统地整理一下。

Javascript

这玩意搞过Web开发的应该都知道吧,Javascript的语法我就不废话了,挺简单的。这里总结几个Javascript的核心机制部分吧。

现在的web的js开发很方便啊,但是碰到iframe里的东西还是不方便看到变量的内容,所以就写了这么个看json内容的玩意,还可以当控制台输出用。

学校做项目顺便写的,还是有点用的。

/***
 * JQuery扩展插件--提示信息
 *
 * 本函数用于创建提示信息
 *
 * Example
 * <code>
 *      var t = $.noticeMessage(msg, a, b);
 * </code>
 *
 *
 * function noticeMessage([msg, a,b])
 * @Param  {
 *      msg:    信息内容(默认: Notice Message!)
 *      a:      配置选项({expire: 过期时间(默认5秒), time: 过渡时间, from: {起始CSS样式}, to:{最终CSS样式}})
 *      b:      回调函数
 * }
 * @Return {jQuery(msgDiv): 产生的信息DOM组件的jQuery容器}
 *
 *
 * Example:
 * <code>
 *      var t = $.noticeMessage("Hello World!");
 * </code>
 *
 *
 * @Author      OWenT
 * @Version     1.0
 * @Link        http://www.owent.net
 */
jQuery.extend({
    noticeMessage: function (msg, a, b) {
        msg = msg || "Notice Message!";
        var option = { "expire": 5000, "time": 500,
            "from": { "background-color": "LightGreen", "opacity": "0", "position": "fixed", "bottom": "0px", "z-index": "1000",
                "font-size": "24px", "color": "DarkGreen", "padding": "3px", "font-weight": "bold"
            },
            "to": { "opacity": "1", "bottom": "+5px" }
        };
        var callback = function () { };
        if (a && jQuery.isFunction(a))
            callback = a;
        else {
            a = a || {};
            jQuery.extend(option, a);
            callback = b || function () { };
        }

        var msgDiv = document.createElement("div");

        jQuery(msgDiv).css(option.from).html(msg);
        jQuery(document.body).append(msgDiv);
        jQuery(msgDiv).stop().animate(option.to, option.time, callback);
        if (option.expire > 0) {
            setTimeout(function () {
                if (msgDiv) {
                    jQuery(msgDiv).stop().animate({ "opacity": "0", "bottom": "-5px" }, option.time,
                        function () { callback(); jQuery(this).remove(); });
                }
            }, option.expire);
        }
        return jQuery(msgDiv);
    }
});

写在最后补充一下,这个动机基本没什么用了