Update doc. Split project part. 1
* Update doc. Still not the final version. * Splite original Viewer into independent Decorator and Viewer project.
This commit is contained in:
parent
2b20f280eb
commit
60930da54c
|
@ -1,20 +1,66 @@
|
||||||
# 编译与调试
|
# 编译
|
||||||
|
|
||||||
本文档将指导您编译或调试`SuperScriptMaterializer`
|
本文档将指导您编译或调试`SuperScriptMaterializer`以及对`SuperScriptViewer`的编译。
|
||||||
|
|
||||||
## 需求
|
## SuperScriptMaterializer
|
||||||
|
|
||||||
- Visual Studio 2010,即VC++ v100的工具集(不能使用Virtools 2015及以上版本进行编译,在编译Virtools 5.0 Standalone版本的时候亲测会出错且无法解决)
|
### 需求
|
||||||
|
|
||||||
|
- Visual Studio 2010,即VC++ v100的工具集(不能使用Virtools 2015及以上版本进行编译,在编译Virtools 5.0 Standalone版本的时候亲测会出错且无法解决,但对于其他版本您可以尝试使用高版本的工具集进行编译)
|
||||||
- Virtools SDK 或 Ballance Mod Loader(如果以Virtools 2.1作为目标)
|
- Virtools SDK 或 Ballance Mod Loader(如果以Virtools 2.1作为目标)
|
||||||
|
- SQlite SDK
|
||||||
- Python 3.x
|
- Python 3.x
|
||||||
|
|
||||||
## 编译之前
|
### 编译之前
|
||||||
|
|
||||||
编译之前,您需要先进入项目根目录下,在此处打开终端,我们首先需要生成编译的参数。自上一个版本以来,我们将编译时需要的一些参数全部转为Visual Studio可识别的宏,定义在独立的`Virtools.props`中,此步操作便是生成这个文件,以确定编译文件的相关参数。
|
编译之前,对于SQLite SDK,您可以从[sqlite.org](http://www.sqlite.org/)下载,然后使用Visual C++的工具集执行`LIB /DEF:sqlite3.def /machine:IX86`以获取可以用于编译的文件。
|
||||||
|
|
||||||
按如下格式运行指令
|
然后您需要先进入项目根目录下,在此处打开终端,我们首先需要生成编译的参数。自上一个版本以来,我们将编译时需要的一些参数全部转为Visual Studio可识别的宏,定义在独立的`Virtools.props`中,此步操作便是生成这个文件,以确定编译文件的相关参数。
|
||||||
|
|
||||||
|
按如下格式运行指令:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
python3 mk_materializer_cfg.py [plugin|standalone] [21|25|35|40|50] [virtools_root_path] [sqlite_header] [sqlite_lib] [sqlite attach ref] [bml path]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
每一项参数的含义:
|
||||||
|
|
||||||
|
* `[plugin|standalone]`:编译为插件还是独立程序
|
||||||
|
* `[21|25|35|40|50]`:Virtools版本
|
||||||
|
* `[virtools_root_path]`:Virtools Dev的根目录,用于Virtools SDK的头文件,链接库的寻找,也决定程序编译后的输出位置
|
||||||
|
* `[sqlite_header]`:SQlite头文件路径
|
||||||
|
* `[sqlite_lib]`:SQlite链接库的路径,用于找到下一项
|
||||||
|
* `[sqlite attach ref]`:SQlite链接库,通常来说是`sqlite3.lib`
|
||||||
|
* `[bml path]`:BML的路径,只有在以Virtools 2.1为目标编译时才有用
|
||||||
|
|
||||||
|
以下是一些指令示例:
|
||||||
|
|
||||||
|
```
|
||||||
|
python3 .\mk_materializer_cfg.py plugin 50 "E:\Virtools\Virtools Dev 5.0" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
python3 .\mk_materializer_cfg.py standalone 50 "E:\Virtools\Virtools Dev 5.0" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
python3 .\mk_materializer_cfg.py plugin 40 "E:\Virtools\Virtools Dev 4.0" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
python3 .\mk_materializer_cfg.py standalone 40 "E:\Virtools\Virtools Dev 4.0" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
python3 .\mk_materializer_cfg.py plugin 35 "E:\Virtools\Virtools Dev 3.5" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
python3 .\mk_materializer_cfg.py standalone 35 "E:\Virtools\Virtools Dev 3.5" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
python3 .\mk_materializer_cfg.py standalone 25 "E:\Virtools\Virtools Dev 2.5" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
python3 .\mk_materializer_cfg.py standalone 21 "E:\Virtools\Virtools Dev 2.1" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 编译
|
||||||
|
|
||||||
|
使用`Visual Studio`打开`SuperScriptMaterializer.sln`,选择`SuperScriptMaterializer`工程。然后选择编译模式(Debug或Release),然后编译即可,基本上只要配置无误,编译会很快完成
|
||||||
|
|
||||||
|
## SuperScriptViewer
|
||||||
|
|
||||||
|
### 需求
|
||||||
|
|
||||||
|
* Node.js
|
||||||
|
* gulp
|
||||||
|
* gulp插件:待补充
|
||||||
|
|
||||||
|
### 编译
|
||||||
|
|
||||||
|
`SuperScriptViewer`本身分为2个部分:由Python配合Flask所写的后端,以及前端。后端无需编译,而前端需要通过**gulp**进行操作,以减少文档本身的大小,进而减小传输开销。
|
||||||
|
|
||||||
|
编译的方法很简单,在`Viewer`目录下执行`gulp xxxx`即可让gulp自动完成相关操作。
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
# 部署
|
||||||
|
|
||||||
|
本文档将指导您部署属于您的`SuperScriptMaterializer`。它可以让您摆脱Virtools的限制,在所有平台上都可以浏览到Virtools的脚本。您需要先了解README中标准的操作方式,然后,我们会根据部署的一些特殊性,对标准步骤进行修改。
|
||||||
|
|
||||||
|
## 导出脚本
|
||||||
|
|
||||||
|
首先我们需要使用`SuperScriptMaterializer`将我们需要查看的脚本导出。众所周知,Virtools各个版本之间的兼容性很差,为一个版本的所作的文档可能在另一个版本中就无法打开,或者是丢失相关的Building Block,因此,首先您需要根据您所需要查看的Virtools文件的对应版本来选取合适版本的插件,这样可以获得更好的导出效果,因为一旦文档中出现一些Building Block丢失之类的错误,那么Virtools会让一些本可读的字段变成完全不可读的Binary格式。这也是我们的`Materializer`提供如此多版本选项的原因,为的是让每一份可能的文档都可以被正确地加载。
|
||||||
|
|
||||||
|
此外,如果您遇到了NMS文件,那么您可能需要使用Virtools创作环境并配合插件模式的`Materializer`来导出,通过新建一个随意物件然后让脚本加载在其上,进而导出。您可能无法在NMS文件上使用独立模式的`Materializer`,因为它没有办法识别NMS文件。
|
||||||
|
|
||||||
|
当然,您如果遇到了很多文件的情况,您可以将需要的文件放在一起,然后编写一个Shell脚本,然后使用独立模式的`Materializer`来进行批量导出(如果可以的话)。这是一个针对Ballance游戏所有文件的脚本导出的Shell脚本和其生成器的示例,可供您参考。
|
||||||
|
|
||||||
|
// todo: 贴上链接
|
||||||
|
|
||||||
|
如果您有来自不同Virtools版本,您需要分别用对应的导出器进行导出,然后将他们整理归类以供下一级的输入。无需担心不同版本的Virtools导出会导致错误,`Decorator`会正确处理它们。
|
||||||
|
|
||||||
|
## 分析脚本
|
||||||
|
|
||||||
|
您需要准备好`SuperScriptDecorator`,和一份`import.txt`。正如标准操作方式中所言,您需要把需要综合的所有的导出数据库及各个文件的名字写入`import.txt`。我的操作是在上一步生成批处理的时候一并生成`import.txt`,因为它们之间联系很紧密。当然,您完全手写`import.txt`也是可以的。在完成之后,与标准操作方式内所述一致,直接运行即可。分析脚本的时间与您输入的脚本的数量和脚本的复杂度相关。
|
||||||
|
|
||||||
|
## 发布脚本
|
||||||
|
|
||||||
|
分析脚本完成后,我们就该将数据输入到`SuperScriptViewer`中了。与普通运行方式不同,我们需要以非调试模式启动Flask部署后端,并同时完成前端部署。您可以参阅[Flask部署文档](https://flask.palletsprojects.com/en/2.0.x/deploying/)来根据您的情况来进行选择。
|
||||||
|
|
||||||
|
我所作的Ballance脚本展示网页使用Gunicorn,部署指令是`gunicorn ServerCore:app`,其中唯一需要注意的是`ServerCore:app`这个程序入口点,在您选择不同于我的部署方式时,这个入口点将不会改变。与此同时我使用Nginx做了反向代理,具体配置可参考这里
|
||||||
|
|
||||||
|
// todo: 贴上链接
|
81
README_ZH.md
81
README_ZH.md
|
@ -12,24 +12,15 @@
|
||||||
|
|
||||||
超级Virtools脚本物化器(机翻(确信))
|
超级Virtools脚本物化器(机翻(确信))
|
||||||
|
|
||||||
本项目分为4个部分:
|
本项目分为3个部分:
|
||||||
|
|
||||||
* `SuperScriptMaterializer`:一个C++工程,将生成一个Virtools界面插件或独立播放器用于导出初步数据。
|
* `SuperScriptMaterializer`:一个C++工程,将生成一个Virtools界面插件或独立播放器用于导出初步数据。
|
||||||
* `SuperScriptDecorator`:一个Python工程,将解析导出的数据,并将其组合成易于浏览的格式。
|
* `SuperScriptDecorator`:一个Python工程,将解析导出的数据,并将其组合成易于浏览的格式。
|
||||||
* `SuperScriptViewer`:一个Python工程,使用Flask提供一个本地Web界面进行脚本以供快速查看,通常是用于本地快速查看解析后脚本的数据。
|
* `SuperScriptViewer`:一个Python工程,使用Flask提供一个本地Web界面进行脚本以供快速查看。
|
||||||
* `SuperScriptEnterprise`:一个PHP工程,相对于`SuperScriptViewer`更适合部署于服务器上进行数据的展示和浏览。
|
|
||||||
|
|
||||||
<img src='https://g.gravizo.com/svg?
|
整个工程所作的事情就是,将Virtools文档中的所有脚本导出成一个SQLite数据库文件(`Materializer`所做的任务),然后经过Python进行排布处理(`Decorator`所做的任务),最后提供一个本地Web前端查看脚本(`Viewer`所做的任务)。整个的查看流程比较复杂,涉及到多个软件的操作。希望您能继续阅读下面比较概要操作说明,以获得良好的使用体验。
|
||||||
digraph G {
|
|
||||||
rankdir=LR;
|
|
||||||
Materializer -> Decorator -> Viewer;
|
|
||||||
Decorator -> Exterprise;
|
|
||||||
}
|
|
||||||
'/>
|
|
||||||
|
|
||||||
四个部分组成的工作流程如上图所示。整个工程所作的事情就是,将Virtools文档中的所有脚本导出成一个SQLite数据库文件,然后经过Python进行排布处理,最后提供一个本地Web前端查看脚本。这同样适用于`Script Hidden`的Virtools脚本,也适用于其中含有不可展开的`Behavior Graph`的脚本。
|
物化器同样适用于`Script Hidden`的Virtools脚本,也适用于其中含有不可展开的`Behavior Graph`的脚本。物化器不能完全恢复脚本的原有排布,无论原有排布是否存在,物化器都将重新自动生成脚本中的各个元素的位置。某些结构的关系可能会改变(例如Export parameter),亦或者是与Virtools中的呈现不同,但是逻辑思路将不会改变。同时物化器不能将已经生成的结构回写成Virtools可接受的格式,因此物化器只能提供无视脚本隐藏的分析功能。
|
||||||
|
|
||||||
物化器不能完全恢复脚本的原有排布,无论原有排布是否存在,物化器都将重新自动生成脚本中的各个元素的位置。某些结构的关系可能会改变(例如Export parameter),亦或者是与Virtools中的呈现不同,但是逻辑思路将不会改变。同时物化器不能将已经生成的结构回写成Virtools可接受的格式,因此物化器只能提供无视脚本隐藏的分析功能。
|
|
||||||
|
|
||||||
**注意事项**
|
**注意事项**
|
||||||
|
|
||||||
|
@ -43,17 +34,21 @@ SuperScriptMaterializer分为两种类型,一种是*插件*模式,在Virtool
|
||||||
|已知的Virtools版本|插件模式|独立模式|
|
|已知的Virtools版本|插件模式|独立模式|
|
||||||
|:---|:---|:---|
|
|:---|:---|:---|
|
||||||
|Virtools 2.1|× (0)|√ (1)|
|
|Virtools 2.1|× (0)|√ (1)|
|
||||||
|Virtools 2.5|× (2)|√|
|
|Virtools 2.5|× (2)|√ (4)|
|
||||||
|Virtools 3.0|× (3)|× (3)|
|
|Virtools 3.0|× (3)|× (3)|
|
||||||
|Virtools 3.5|√ (4)|√ (4)|
|
|Virtools 3.5|√|√|
|
||||||
|Virtools 4.0|√ (4)|√ (4)|
|
|Virtools 4.0|√|√ (4)|
|
||||||
|Virtools 5.0|√|√|
|
|Virtools 5.0|√|√|
|
||||||
|
|
||||||
0. 没有可用的Virtools Dev 2.1,因此没有插件模式
|
0. 没有可用的Virtools Dev 2.1,因此没有插件模式
|
||||||
0. 使用Ballance Mod Loader提供的逆向Virtools SDK进行编译
|
0. 使用Ballance Mod Loader提供的逆向Virtools SDK进行编译
|
||||||
0. Virtools SDK不支持在界面上添加菜单
|
0. Virtools SDK不支持在界面上添加菜单
|
||||||
0. 缺少Virtools SDK,无法编译
|
0. 缺少Virtools SDK,无法编译
|
||||||
0. 正在编写中
|
0. 有不影响输出的错误
|
||||||
|
|
||||||
|
### 运行环境
|
||||||
|
|
||||||
|
* 至少一个可以使用的Virtools环境
|
||||||
|
|
||||||
### 使用
|
### 使用
|
||||||
|
|
||||||
|
@ -77,29 +72,56 @@ SuperScriptMaterializer分为两种类型,一种是*插件*模式,在Virtool
|
||||||
|
|
||||||
## SuperScriptDecorator
|
## SuperScriptDecorator
|
||||||
|
|
||||||
|
上一步导出的数据库文件并不能直接被使用,需要通过`SuperScriptDecorator`辅助生成各个Building Graph的位置以及各种连线,之后才能进入下一步查看。同时,为了支持一次性在一个工程内浏览所有的脚本内容,`Decorator`还负责将多个上游导出的数据库合并成一个数据库,以供`Viewer`进行查看。
|
||||||
|
|
||||||
|
### 运行环境
|
||||||
|
|
||||||
|
* Python 3.x
|
||||||
|
|
||||||
### 使用
|
### 使用
|
||||||
|
|
||||||
将上一步得到的`export.db`和`env.db`与`SuperScriptDecorator.py`放在一起。然后在此目录中运行`python3 ./SuperScriptDecorator.py`,等待Python交互界面提示可以打开本地的网页即可。
|
将上一步得到的`export.db`和`env.db`与`SuperScriptDecorator.py`放在一起。然后新建一个文件名为`import.txt`(使用UTF-8编码),在里面输入如下内容(三个部分之间的空白是`Tab`而不是空格):
|
||||||
|
|
||||||
|
```
|
||||||
|
example.cmo export.db env.db
|
||||||
|
```
|
||||||
|
|
||||||
|
然后在此目录中运行`python3 ./SuperScriptDecorator.py`,等待Python交互界面提示完成操作即可。
|
||||||
|
|
||||||
`SuperScriptDecorator.py`具有一些命令行开关:
|
`SuperScriptDecorator.py`具有一些命令行开关:
|
||||||
|
|
||||||
- `-i`:指定输入的`export.db`
|
- `-i`:指定输入的`import.txt`
|
||||||
- `-o`:指定输出的`decorated.db`,如果已经存在将不考虑输入,直接使用输出数据库呈现
|
- `-o`:指定输出的`decorated.db`,如果已经存在将覆盖
|
||||||
- `-e`:指定输入的`env.db`,环境数据库
|
|
||||||
- `-c`:指定数据库编码,可用的编码表可以在[这里](https://docs.python.org/3/library/codecs.html#standard-encodings)查看
|
- `-c`:指定数据库编码,可用的编码表可以在[这里](https://docs.python.org/3/library/codecs.html#standard-encodings)查看
|
||||||
- `-f`:无参数,用于强制重新生成输出数据库,无论输出数据库是否存在
|
|
||||||
- `-d`:无参数,启用调试模式,直接抛出异常,而不是捕获后在控制台输出,方便调试
|
- `-d`:无参数,启用调试模式,直接抛出异常,而不是捕获后在控制台输出,方便调试
|
||||||
|
|
||||||
|
### import.txt
|
||||||
|
|
||||||
|
`import.txt`是一个提供输入文件的集和的文本文件。由于`Decorator`还负责将多个上游导出的数据库合并成一个数据库,这些多个由上游导出的数据库需要由`import.txt`来指示。`import.txt`的基本格式就是:
|
||||||
|
|
||||||
|
* 每一行代表一组输入
|
||||||
|
* 每一行共有3个输入,从左至右分别为:文档的名字(会被显示在脚本层次图中),`export.db`,和`env.db`
|
||||||
|
* 每一行3个部分中间由`Tab`分割
|
||||||
|
* 空行会被忽略
|
||||||
|
|
||||||
### 提示
|
### 提示
|
||||||
|
|
||||||
以上选项在基本使用中应该不会用到,因此按上述规则直接放置好文件直接运行即可。
|
以上某些选项在基本使用中应该不会用到,因此按最开始所述的方式直接放置好文件直接运行即可。
|
||||||
|
|
||||||
如果Python交互界面提示数据库`TEXT`类型解码失败,或者解析的字符出现乱码,那么可能您需要手动使用`-c`开关指定数据库文本解码方式。因为Virtools使用多字节编码,依赖于当前操作系统的代码页,`SuperScriptDecorator`做了特殊获取以保证大多数计算机可以直接运行,但仍然不能排除一些特殊情况。需要注意的是,指定的编码不是你计算机当前的代码页,而是制作这个Virtools文档的作者的计算机的代码页。
|
如果Python交互界面提示数据库`TEXT`类型解码失败,或者解析的字符出现乱码,那么可能您需要手动使用`-c`开关指定数据库文本解码方式。因为Virtools使用多字节编码,依赖于当前操作系统的代码页,`SuperScriptDecorator`做了特殊获取以保证大多数计算机可以直接运行,但仍然不能排除一些特殊情况。需要注意的是,指定的编码不是你计算机当前的代码页,而是制作这个Virtools文档的作者的计算机的代码页。
|
||||||
|
|
||||||
## SuperScriptViewer
|
## SuperScriptViewer
|
||||||
|
|
||||||
一份指导你如何使用Viewer的文档已内置在Viewer中,可以从Help页面进行查看
|
`SuperScriptViewer`旨在提供一个网页前端查看已经生成好的数据文件。至于`Viewer`的使用,一份指导你如何使用`Viewer`的文档已内置在`Viewer`中,可以从Help页面进行查看。
|
||||||
|
|
||||||
|
### 运行环境
|
||||||
|
|
||||||
|
* 装有Flask的Python 3.x
|
||||||
|
* 常见浏览器(Safari除外)
|
||||||
|
|
||||||
|
### 使用
|
||||||
|
|
||||||
|
如果您只是为了简单查看一下导出的文件,我们建议以调试模式运行`Viewer`,即将上一步得到的`decorated.db`和`SuperScriptViewer.py`放在一起,然后运行`python3 ./SuperScriptDecorator.py`,即可以运行调试模式的`Viewer`。如果您是要将生成的结果部署到服务器,我们更建议您使用生产模式进行部署,详情请参见[部署](./Documents/DEPLOY_ZH.md)。
|
||||||
|
|
||||||
## 问题反馈
|
## 问题反馈
|
||||||
|
|
||||||
|
@ -109,10 +131,6 @@ SuperScriptMaterializer分为两种类型,一种是*插件*模式,在Virtool
|
||||||
* `SuperScriptMaterializer`独立模式输出了`[ERROR]`等类似内容
|
* `SuperScriptMaterializer`独立模式输出了`[ERROR]`等类似内容
|
||||||
* Python交互界面弹出错误
|
* Python交互界面弹出错误
|
||||||
|
|
||||||
## 常见场景
|
|
||||||
|
|
||||||
// todo
|
|
||||||
|
|
||||||
## 部署
|
## 部署
|
||||||
|
|
||||||
参见[部署](./Documents/DEPLOY_ZH.md)
|
参见[部署](./Documents/DEPLOY_ZH.md)
|
||||||
|
@ -121,19 +139,12 @@ SuperScriptMaterializer分为两种类型,一种是*插件*模式,在Virtool
|
||||||
|
|
||||||
参见[编译](./Documents/COMPILE_ZH.md)
|
参见[编译](./Documents/COMPILE_ZH.md)
|
||||||
|
|
||||||
<!--
|
|
||||||
只有Virtools界面插件需要编译,其余均为解释性语言无需编译。
|
|
||||||
|
|
||||||
需要手动配置Virtools插件的编译参数,例如包含路径等,需要指向您自己的Virtools SDK。对于SQLite SDK,您可以从[sqlite.org](http://www.sqlite.org/)下载,然后使用Visual C++的工具集执行`LIB /DEF:sqlite3.def /machine:IX86`以获取可以用于编译的文件。
|
|
||||||
-->
|
|
||||||
|
|
||||||
## 开发计划
|
## 开发计划
|
||||||
|
|
||||||
在之后的版本中,以下功能将逐步加入:
|
在之后的版本中,以下功能将逐步加入:
|
||||||
|
|
||||||
* 当前页面搜索和全局搜索
|
* 当前页面搜索和全局搜索
|
||||||
* Shortcut追踪
|
* Shortcut追踪
|
||||||
* 在Viewer中移动Block和BB
|
|
||||||
|
|
||||||
## 特别感谢
|
## 特别感谢
|
||||||
|
|
||||||
|
|
8
SuperScriptDecorator/CustomConfig.py
Normal file
8
SuperScriptDecorator/CustomConfig.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import locale
|
||||||
|
|
||||||
|
# encoding list
|
||||||
|
# https://docs.python.org/3/library/codecs.html#standard-encodings
|
||||||
|
database_encoding = locale.getpreferredencoding()
|
||||||
|
export_db = "import.txt"
|
||||||
|
decorated_db = "decorate.db"
|
||||||
|
debug_mode = False
|
53
SuperScriptDecorator/SuperScriptDecorator.py
Normal file
53
SuperScriptDecorator/SuperScriptDecorator.py
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
import CustomConfig
|
||||||
|
import DecoratorCore
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import getopt
|
||||||
|
import logging
|
||||||
|
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(sys.argv[1:], "hi:o:e:c:fd")
|
||||||
|
except getopt.GetoptError:
|
||||||
|
print('Wrong arguments!')
|
||||||
|
print('python SuperScriptViewer.py -i <import.txt> -o <decorated.db> -c <codec_name> -d')
|
||||||
|
sys.exit(1)
|
||||||
|
for opt, arg in opts:
|
||||||
|
if opt == '-h':
|
||||||
|
print('python SuperScriptViewer.py -i <import.txt> -o <decorated.db> -c <codec_name> -d')
|
||||||
|
sys.exit(0)
|
||||||
|
elif opt == '-i':
|
||||||
|
CustomConfig.export_db = arg
|
||||||
|
elif opt == '-o':
|
||||||
|
CustomConfig.decorated_db = arg
|
||||||
|
elif opt == '-c':
|
||||||
|
CustomConfig.database_encoding = arg
|
||||||
|
elif opt == '-d':
|
||||||
|
CustomConfig.debug_mode = True
|
||||||
|
|
||||||
|
print('Super Script Decorator')
|
||||||
|
print('Homepage: https://github.com/yyc12345/SuperScriptMaterializer')
|
||||||
|
print('Report bug: https://github.com/yyc12345/SuperScriptMaterializer/issues')
|
||||||
|
print('')
|
||||||
|
|
||||||
|
# process input and output
|
||||||
|
if not os.path.isfile(CustomConfig.export_db):
|
||||||
|
print('No import.txt. Fail to generate. Exit app.')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# real db generator func
|
||||||
|
def dc_wrapper():
|
||||||
|
pass
|
||||||
|
|
||||||
|
# generate db
|
||||||
|
if CustomConfig.debug_mode:
|
||||||
|
DecoratorCore.run()
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
DecoratorCore.run()
|
||||||
|
except Exception, ex:
|
||||||
|
print("!!! An error occurs. Please report follwoing error output and reproduce file to developer. !!!")
|
||||||
|
logging.exception(ex)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print('Decorated database generating done.')
|
||||||
|
|
50
SuperScriptDecorator/SuperScriptDecorator.pyproj
Normal file
50
SuperScriptDecorator/SuperScriptDecorator.pyproj
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>6d751bf5-87d6-4123-94b3-34721938cf04</ProjectGuid>
|
||||||
|
<ProjectHome>.</ProjectHome>
|
||||||
|
<StartupFile>SuperScriptDecorator.py</StartupFile>
|
||||||
|
<SearchPath>
|
||||||
|
</SearchPath>
|
||||||
|
<WorkingDirectory>.</WorkingDirectory>
|
||||||
|
<OutputPath>.</OutputPath>
|
||||||
|
<Name>SuperScriptDecorator</Name>
|
||||||
|
<RootNamespace>SuperScriptDecorator</RootNamespace>
|
||||||
|
<LaunchProvider>Standard Python launcher</LaunchProvider>
|
||||||
|
<CommandLineArguments>-f -d</CommandLineArguments>
|
||||||
|
<EnableNativeCodeDebugging>False</EnableNativeCodeDebugging>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="CustomConfig.py">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="DecoratorConstValue.py">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="DecoratorCore.py">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Progressbar.py">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="SuperScriptDecorator.py" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />
|
||||||
|
<!-- Uncomment the CoreCompile target to enable the Build command in
|
||||||
|
Visual Studio and specify your pre- and post-build commands in
|
||||||
|
the BeforeBuild and AfterBuild targets below. -->
|
||||||
|
<!--<Target Name="CoreCompile" />-->
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
</Project>
|
|
@ -3,9 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.29418.71
|
VisualStudioVersion = 16.0.29418.71
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "SuperScriptViewer", "SuperScriptViewer\SuperScriptViewer.pyproj", "{6D751BF5-87D6-4123-94B3-34721938CF04}"
|
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "SuperScriptDecorator", "SuperScriptDecorator\SuperScriptDecorator.pyproj", "{6D751BF5-87D6-4123-94B3-34721938CF04}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SuperScriptMaterializer", "SuperScriptMaterializer\SuperScriptMaterializer.vcxproj", "{431163D3-86F1-4F6F-921C-062C6A4C70D9}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SuperScriptMaterializer", "SuperScriptMaterializer\SuperScriptMaterializer.vcxproj", "{4D941003-020F-47FD-9FA2-FFC989E306B8}"
|
||||||
|
EndProject
|
||||||
|
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "SuperScriptViewer", "SuperScriptViewer\SuperScriptViewer.pyproj", "{0E4B5021-27EA-4F79-B87D-E123AFB3D788}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
@ -23,14 +25,20 @@ Global
|
||||||
{6D751BF5-87D6-4123-94B3-34721938CF04}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{6D751BF5-87D6-4123-94B3-34721938CF04}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{6D751BF5-87D6-4123-94B3-34721938CF04}.Release|x64.ActiveCfg = Release|Any CPU
|
{6D751BF5-87D6-4123-94B3-34721938CF04}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{6D751BF5-87D6-4123-94B3-34721938CF04}.Release|x86.ActiveCfg = Release|Any CPU
|
{6D751BF5-87D6-4123-94B3-34721938CF04}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Debug|x64.ActiveCfg = Debug|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x64.ActiveCfg = Debug|Win32
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Debug|x86.ActiveCfg = Debug|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Debug|x86.Build.0 = Debug|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.Build.0 = Debug|Win32
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|Any CPU.ActiveCfg = Release|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|x64.ActiveCfg = Release|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x64.ActiveCfg = Release|Win32
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|x86.ActiveCfg = Release|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|x86.Build.0 = Release|Win32
|
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{0E4B5021-27EA-4F79-B87D-E123AFB3D788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0E4B5021-27EA-4F79-B87D-E123AFB3D788}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{0E4B5021-27EA-4F79-B87D-E123AFB3D788}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{0E4B5021-27EA-4F79-B87D-E123AFB3D788}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{0E4B5021-27EA-4F79-B87D-E123AFB3D788}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{0E4B5021-27EA-4F79-B87D-E123AFB3D788}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -1,65 +1,10 @@
|
||||||
import CustomConfig
|
|
||||||
import DecoratorCore
|
|
||||||
import ServerCore
|
import ServerCore
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import getopt
|
import getopt
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
try:
|
# todo: load db and cfg
|
||||||
opts, args = getopt.getopt(sys.argv[1:], "hi:o:e:c:fd")
|
|
||||||
except getopt.GetoptError:
|
|
||||||
print('Wrong arguments!')
|
|
||||||
print('python SuperScriptViewer.py -i <export.db> -o <decorated.db> -e <env.db> -c <codec_name> -f -d')
|
|
||||||
sys.exit(1)
|
|
||||||
for opt, arg in opts:
|
|
||||||
if opt == '-h':
|
|
||||||
print('python SuperScriptViewer.py -i <export.db> -o <decorated.db> -e <env.db> -c <codec_name> -f -d')
|
|
||||||
sys.exit(0)
|
|
||||||
elif opt == '-i':
|
|
||||||
CustomConfig.export_db = arg
|
|
||||||
elif opt == '-o':
|
|
||||||
CustomConfig.decorated_db = arg
|
|
||||||
elif opt == '-e':
|
|
||||||
CustomConfig.env_db = arg
|
|
||||||
elif opt == '-c':
|
|
||||||
CustomConfig.database_encoding = arg
|
|
||||||
elif opt == '-f':
|
|
||||||
CustomConfig.force_regenerate = True
|
|
||||||
elif opt == '-d':
|
|
||||||
CustomConfig.debug_mode = True
|
|
||||||
|
|
||||||
print('Super Script View')
|
|
||||||
print('Homepage: https://github.com/yyc12345/SuperScriptMaterializer')
|
|
||||||
print('Report bug: https://github.com/yyc12345/SuperScriptMaterializer/issues')
|
|
||||||
print('')
|
|
||||||
# process -f
|
|
||||||
if (CustomConfig.force_regenerate):
|
|
||||||
if os.path.isfile(CustomConfig.decorated_db):
|
|
||||||
os.remove(CustomConfig.decorated_db)
|
|
||||||
|
|
||||||
if not os.path.isfile(CustomConfig.env_db):
|
|
||||||
print('No environment database. Fail to generate. Exit app.')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if not os.path.isfile(CustomConfig.decorated_db):
|
|
||||||
print('No decorated database, generating it.')
|
|
||||||
if not os.path.isfile(CustomConfig.export_db):
|
|
||||||
print('No export.db. Fail to generate. Exit app.')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# generate db
|
|
||||||
if CustomConfig.debug_mode:
|
|
||||||
DecoratorCore.run()
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
DecoratorCore.run()
|
|
||||||
except Exception as ex:
|
|
||||||
print("!!! An error occurs. Please report follwoing error output and reproduce file to developer. !!!")
|
|
||||||
logging.exception(ex)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
print('Decorated database generating done.')
|
|
||||||
|
|
||||||
# todo: start flask
|
# todo: start flask
|
||||||
ServerCore.run()
|
ServerCore.run()
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
<ProjectGuid>6d751bf5-87d6-4123-94b3-34721938cf04</ProjectGuid>
|
<ProjectGuid>0e4b5021-27ea-4f79-b87d-e123afb3d788</ProjectGuid>
|
||||||
<ProjectHome>.</ProjectHome>
|
<ProjectHome>.</ProjectHome>
|
||||||
<StartupFile>SuperScriptViewer.py</StartupFile>
|
<StartupFile>SuperScriptViewer.py</StartupFile>
|
||||||
<SearchPath>
|
<SearchPath>
|
||||||
|
@ -11,9 +11,6 @@
|
||||||
<OutputPath>.</OutputPath>
|
<OutputPath>.</OutputPath>
|
||||||
<Name>SuperScriptViewer</Name>
|
<Name>SuperScriptViewer</Name>
|
||||||
<RootNamespace>SuperScriptViewer</RootNamespace>
|
<RootNamespace>SuperScriptViewer</RootNamespace>
|
||||||
<LaunchProvider>Standard Python launcher</LaunchProvider>
|
|
||||||
<CommandLineArguments>-f -d</CommandLineArguments>
|
|
||||||
<EnableNativeCodeDebugging>False</EnableNativeCodeDebugging>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -24,24 +21,9 @@
|
||||||
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
|
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="CustomConfig.py">
|
<Compile Include="CustomConfig.py" />
|
||||||
<SubType>Code</SubType>
|
<Compile Include="ServerCore.py" />
|
||||||
</Compile>
|
<Compile Include="ServerStruct.py" />
|
||||||
<Compile Include="DecoratorConstValue.py">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="DecoratorCore.py">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Progressbar.py">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="ServerCore.py">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="ServerStruct.py">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="SuperScriptViewer.py" />
|
<Compile Include="SuperScriptViewer.py" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />
|
||||||
|
|
Loading…
Reference in New Issue
Block a user