Arnie97 发表于 2016-10-2 15:29:28

【整理】不用模拟器,将 TXT 转换为 TNS

本帖最后由 Arnie97 于 2016-10-2 15:42 编辑

TL;DR

[*]把 UTF-8 编码的文本文档与附件中各程序置于同一文件夹中。
[*]打开附件中的 TXT2XML,把要转换的 TXT 拖入窗口。
[*]点击「2TNS」按钮,在同一目录下得到 TNS 文件。

[*]部分中文文档可能无法正确转换,路径中含空格的文档可能无法正确转换。
[*]为了方便大家测试,附件中提供了一段能完美转换的文字。


正文
本来今天打算写一个将 TXT 转换为 TNS 的工具,搜索相关资料后发现已经有人造过这方面的轮子了,我来搬运一下。

根据 Hackspire 上对 TNS 文件格式的介绍,早期的 TNS 就是 Documents.xml、ProblemX.xml 的 ZIP 包,后期也是在 ZIP 文件结构上进行的修改。说句题外话,这和 M$ Office 2007 之后采用的 OOXML 格式有异曲同工之妙。
Documents.xml 中记录着 Nspire 文档中「问题」的数量和各种文档设置信息,而各个 ProblemX.xml(X 为 1~50 的整数)记录着每个「问题」中的具体内容。Hackspire 上给出了两个文件的示例:
[*]https://hackspire.org/index.php/Document.xml
[*]https://hackspire.org/index.php/ProblemX.xml

根据这一点,ndless 的开发者们开发了命令行工具 Luna(https://ndlessly.wordpress.com/2011/09/19/luna-updated-for-third-party-tns-document-generation/),它可以将 ProblemX.xml 或 Lua 脚本转换为 TNS 包。

而为了方便阅读 TXT 文档,Omnimaga 论坛上的 SpiroH 写了 TXT2XML 和 XML2TNS 两个工具(https://www.omnimaga.org/ti-nspire-projects/xml2txt-xml2lua-txt2xml-lua2xml-and-2tns/)。除了顾名思义的 TXT 转 ProblemX.xml 功能外,该工具会自动调用同一目录下的 Luna 完成 ProblemX.xml 转 TNS 的操作,从而方便的实现 TXT → XML → TNS 的一条龙转换。

中文支持方面,Luna 在 wtof1996 的帮助下已经正确支持 Unicode(https://ndlessly.wordpress.com/2012/06/26/yet-another-luna-update-oclua-for-3-2/)。
而 TXT2XML 完全不支持 Unicode,有时候会凭借 UTF-8 与 ASCII 的向下兼容性歪打正着的转换为合法的 TNS 文档,有时候则会生成无法打开的 TNS 文档。此外,这个程序存在文件路径中的空格处理不当、BOM 处理不当、没有提供分页功能等诸多不足,且用到了 Win32 API 解析 XML,无法跨平台使用。为此,我可能会重写该程序,敬请期待。

【PHYSICS】 发表于 2016-10-2 16:07:52

楼主辛苦了,支持。
页: [1]
查看完整版本: 【整理】不用模拟器,将 TXT 转换为 TNS