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:
yyc12345 2021-09-08 21:28:09 +08:00
parent 2b20f280eb
commit 60930da54c
12 changed files with 261 additions and 131 deletions

View File

@ -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作为目标)
- SQlite SDK
- 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自动完成相关操作。

View File

@ -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: 贴上链接

View File

@ -12,24 +12,15 @@
超级Virtools脚本物化器机翻确信
本项目分为4个部分:
本项目分为3个部分:
* `SuperScriptMaterializer`一个C++工程将生成一个Virtools界面插件或独立播放器用于导出初步数据。
* `SuperScriptDecorator`一个Python工程将解析导出的数据并将其组合成易于浏览的格式。
* `SuperScriptViewer`一个Python工程使用Flask提供一个本地Web界面进行脚本以供快速查看通常是用于本地快速查看解析后脚本的数据。
* `SuperScriptEnterprise`一个PHP工程相对于`SuperScriptViewer`更适合部署于服务器上进行数据的展示和浏览。
* `SuperScriptViewer`一个Python工程使用Flask提供一个本地Web界面进行脚本以供快速查看。
<img src='https://g.gravizo.com/svg?
digraph G {
rankdir=LR;
Materializer -> Decorator -> Viewer;
Decorator -> Exterprise;
}
'/>
整个工程所作的事情就是将Virtools文档中的所有脚本导出成一个SQLite数据库文件`Materializer`所做的任务然后经过Python进行排布处理`Decorator`所做的任务最后提供一个本地Web前端查看脚本`Viewer`所做的任务)。整个的查看流程比较复杂,涉及到多个软件的操作。希望您能继续阅读下面比较概要操作说明,以获得良好的使用体验。
四个部分组成的工作流程如上图所示。整个工程所作的事情就是将Virtools文档中的所有脚本导出成一个SQLite数据库文件然后经过Python进行排布处理最后提供一个本地Web前端查看脚本。这同样适用于`Script Hidden`的Virtools脚本也适用于其中含有不可展开的`Behavior Graph`的脚本。
物化器不能完全恢复脚本的原有排布无论原有排布是否存在物化器都将重新自动生成脚本中的各个元素的位置。某些结构的关系可能会改变例如Export parameter亦或者是与Virtools中的呈现不同但是逻辑思路将不会改变。同时物化器不能将已经生成的结构回写成Virtools可接受的格式因此物化器只能提供无视脚本隐藏的分析功能。
物化器同样适用于`Script Hidden`的Virtools脚本也适用于其中含有不可展开的`Behavior Graph`的脚本。物化器不能完全恢复脚本的原有排布无论原有排布是否存在物化器都将重新自动生成脚本中的各个元素的位置。某些结构的关系可能会改变例如Export parameter亦或者是与Virtools中的呈现不同但是逻辑思路将不会改变。同时物化器不能将已经生成的结构回写成Virtools可接受的格式因此物化器只能提供无视脚本隐藏的分析功能。
**注意事项**
@ -43,17 +34,21 @@ SuperScriptMaterializer分为两种类型一种是*插件*模式在Virtool
|已知的Virtools版本|插件模式|独立模式|
|:---|:---|:---|
|Virtools 2.1|× (0)|√ (1)|
|Virtools 2.5|× (2)|√|
|Virtools 2.5|× (2)|√ (4)|
|Virtools 3.0|× (3)|× (3)|
|Virtools 3.5|√ (4)|√ (4)|
|Virtools 4.0|√ (4)|√ (4)|
|Virtools 3.5|√|√|
|Virtools 4.0|√|√ (4)|
|Virtools 5.0|√|√|
0. 没有可用的Virtools Dev 2.1,因此没有插件模式
0. 使用Ballance Mod Loader提供的逆向Virtools SDK进行编译
0. Virtools SDK不支持在界面上添加菜单
0. 缺少Virtools SDK无法编译
0. 正在编写中
0. 有不影响输出的错误
### 运行环境
* 至少一个可以使用的Virtools环境
### 使用
@ -77,29 +72,56 @@ SuperScriptMaterializer分为两种类型一种是*插件*模式在Virtool
## 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`具有一些命令行开关:
- `-i`:指定输入的`export.db`
- `-o`:指定输出的`decorated.db`,如果已经存在将不考虑输入,直接使用输出数据库呈现
- `-e`:指定输入的`env.db`,环境数据库
- `-i`:指定输入的`import.txt`
- `-o`:指定输出的`decorated.db`,如果已经存在将覆盖
- `-c`:指定数据库编码,可用的编码表可以在[这里](https://docs.python.org/3/library/codecs.html#standard-encodings)查看
- `-f`:无参数,用于强制重新生成输出数据库,无论输出数据库是否存在
- `-d`:无参数,启用调试模式,直接抛出异常,而不是捕获后在控制台输出,方便调试
### import.txt
`import.txt`是一个提供输入文件的集和的文本文件。由于`Decorator`还负责将多个上游导出的数据库合并成一个数据库,这些多个由上游导出的数据库需要由`import.txt`来指示。`import.txt`的基本格式就是:
* 每一行代表一组输入
* 每一行共有3个输入从左至右分别为文档的名字会被显示在脚本层次图中`export.db`,和`env.db`
* 每一行3个部分中间由`Tab`分割
* 空行会被忽略
### 提示
以上选项在基本使用中应该不会用到,因此按上述规则直接放置好文件直接运行即可。
以上某些选项在基本使用中应该不会用到,因此按最开始所述的方式直接放置好文件直接运行即可。
如果Python交互界面提示数据库`TEXT`类型解码失败,或者解析的字符出现乱码,那么可能您需要手动使用`-c`开关指定数据库文本解码方式。因为Virtools使用多字节编码依赖于当前操作系统的代码页`SuperScriptDecorator`做了特殊获取以保证大多数计算机可以直接运行但仍然不能排除一些特殊情况。需要注意的是指定的编码不是你计算机当前的代码页而是制作这个Virtools文档的作者的计算机的代码页。
## 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]`等类似内容
* Python交互界面弹出错误
## 常见场景
// todo
## 部署
参见[部署](./Documents/DEPLOY_ZH.md)
@ -121,19 +139,12 @@ SuperScriptMaterializer分为两种类型一种是*插件*模式在Virtool
参见[编译](./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追踪
* 在Viewer中移动Block和BB
## 特别感谢

View 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

View 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.')

View 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>

View File

@ -3,9 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29418.71
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
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
Global
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|x64.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
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Debug|x64.ActiveCfg = Debug|Win32
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Debug|x86.ActiveCfg = Debug|Win32
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Debug|x86.Build.0 = Debug|Win32
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|Any CPU.ActiveCfg = Release|Win32
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|x64.ActiveCfg = Release|Win32
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|x86.ActiveCfg = Release|Win32
{431163D3-86F1-4F6F-921C-062C6A4C70D9}.Release|x86.Build.0 = Release|Win32
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|Any CPU.ActiveCfg = Debug|Win32
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x64.ActiveCfg = Debug|Win32
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.ActiveCfg = Debug|Win32
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.Build.0 = Debug|Win32
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|Any CPU.ActiveCfg = Release|Win32
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x64.ActiveCfg = Release|Win32
{4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x86.ActiveCfg = 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
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,65 +1,10 @@
import CustomConfig
import DecoratorCore
import ServerCore
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 <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: load db and cfg
# todo: start flask
ServerCore.run()

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>6d751bf5-87d6-4123-94b3-34721938cf04</ProjectGuid>
<ProjectGuid>0e4b5021-27ea-4f79-b87d-e123afb3d788</ProjectGuid>
<ProjectHome>.</ProjectHome>
<StartupFile>SuperScriptViewer.py</StartupFile>
<SearchPath>
@ -11,9 +11,6 @@
<OutputPath>.</OutputPath>
<Name>SuperScriptViewer</Name>
<RootNamespace>SuperScriptViewer</RootNamespace>
<LaunchProvider>Standard Python launcher</LaunchProvider>
<CommandLineArguments>-f -d</CommandLineArguments>
<EnableNativeCodeDebugging>False</EnableNativeCodeDebugging>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
@ -24,24 +21,9 @@
<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="ServerCore.py">
<SubType>Code</SubType>
</Compile>
<Compile Include="ServerStruct.py">
<SubType>Code</SubType>
</Compile>
<Compile Include="CustomConfig.py" />
<Compile Include="ServerCore.py" />
<Compile Include="ServerStruct.py" />
<Compile Include="SuperScriptViewer.py" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />