最近工作有点忙
感谢楼主, 精神支持你!!
劳逸结合!!
MDX 转换为 mac 词典的功能已经在 wikit v0.2.0 实现, 初此之外还支持直接从 MDX 源文件(文本文件)转换为 mac 词典, 经我测试在 mac bigsur 上可用, 其他功能比如内部跳转暂时还不支持, 这个后续有精力再完善. 需要注意的是, 转换为 mac 词典的功能只支持在 mac 上使用, 因为用到了 mac 平台的词典开发套件.
问下怎么指定词典名称和描述信息?
我用这个命令创建的: wikit dict 1.txt --output test.mdx --create
名称默认是 A generic MDX dictionary
描述默认是 Just for fun
这些目前可以修改吗?
试了下 MDX 换 mac 词典
wikit dict --create RHWDAE.mdx --output RHWDAE.dictionary
,测试的这个MDX:
报了一个错:
parser error : Opening and ending tag mismatch: link line 6 and d:entry </d:entry>
可以修改的, 可以通过 --meta
参数指定配置文件, 具体参考项目首页文档说明.
因为 mac 词典开发套件使用的是 XHTML, 也就是更严格的 HTML 标准, 这里的问题是 link 标签, 在 html 中 link 标签是可以不封闭的, 也就是说下面的写法是正确的
<link rel="stylesheet" href="rhwdae.css">
但是 XHTML 要求任何标签都必须是封闭的, 因此要写成
<link rel="stylesheet" href="rhwdae.css" />
这里本质的问题是如何将 html 标准化为 xhtml, 目前还没有标准的第三库来处理这个问题(或许后续我自己写一个), 只能遇到一个解决一个了.
版本 wikit v0.2.1 已解决 link 标签问题, 自测命令
wikit dict --create --css rhwdae.css --output RHWDAE.dictionary RHWDAE.mdx
生成的词典在 mac 词典应用中效果如下
另外我还测试了麦克米伦高阶英汉双解词典,效果如下
刚试了下,可以生成了。不过好像 .dictionary 没有自动拷贝到相应目录下面。
手动拷贝过去以后,可以了。
不过貌似有个bug,几秒后 Dictionary.app 会崩溃… 不知道为啥
我的系统是 macOS 11.5.2
可以了。不过又遇到个问题,就是生成的mdx文件不可以通过 mdict-utils 解压mdx到txt了。
又试了下,用wikit解压没问题。
Try Brutal Force on Encrypted Key Blocks
— Elapsed time: 0.000798 seconds —
Traceback (most recent call last):
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 101, in init
self._key_list = self._read_keys()
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 350, in _read_keys
key_block_info_list = self._decode_key_block_info(key_block_info)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 134, in _decode_key_block_info
assert(key_block_info_compressed[:4] == b’\x02\x00\x00\x00’)
AssertionErrorDuring handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/Users/xxxx/Library/Python/3.9/bin/mdict”, line 8, in
sys.exit(run())
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/main.py”, line 102, in run
reader.unpack(args.exdir, args.mdict, split=split, convert_chtml=args.convert_chtml)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/reader.py”, line 157, in unpack
mdx = MDX(source, encoding, substyle, passcode)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 505, in init
MDict.init(self, fname, encoding, passcode)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 104, in init
self._key_list = self._read_keys_brutal()
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 382, in _read_keys_brutal
assert key_block_info[:4] == b’\x02\x00\x00\x00’
AssertionError
wikit dict --create TLD.mdx --output TLD.dictionary 执行到最后提示:
mac dictionary development kit is not installed, install now?
我已经安装了 development kit , 放在实用工具目录下了
或者说要如何才能让wikit检测到词典套件呢?

wikit dict --create TLD.mdx --output TLD.dictionary 执行到最后提示:
mac dictionary development kit is not installed, install now?
我已经安装了 development kit , 放在实用工具目录下了
或者说要如何才能让wikit检测到词典套件呢?
这个问题其实我也想过, 不过考虑到了如下几点, 目前不允许用户将 ddk(dictionary development kit) 安装到其他目录:
- ddk 需要用户在苹果官网注册帐号才能下载, 对于非开发者(占大多数)而言这个过程是比较烦人的
- 苹果自家的工具经常性的发生名称改动或者存入不同的安装包里面, 比如 ddk 在最开始位于 Auxiliary Tools for Xcode, 现在又位于 Additional Tools for Xcode 包中, 很难保证苹果不在下一个版本任性的将其放到另外一个包中.
- 以 Xcode 12.5 的 Additional Tools for Xcode 为例, 其大小为 24M, 实际上 ddk 部分只有 1M 多.
- 如果后续逆向出了 mac 的词典格式, wikit 自己管理的 ddk 可以直接去掉, 用户使用上是无感的.
因此, 我单独提取了 ddk, 放在这里, 启动程序时会提示自动下载安装,
如果你不想让它下载安装, wikit 会提示你应该把该工具安装到哪里, 你手动下载安装到指定位置然后重新使用 wikit 制作词典即可.

Try Brutal Force on Encrypted Key Blocks
— Elapsed time: 0.000798 seconds —
Traceback (most recent call last):
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 101, in init
self._key_list = self._read_keys()
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 350, in _read_keys
key_block_info_list = self._decode_key_block_info(key_block_info)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 134, in _decode_key_block_info
assert(key_block_info_compressed[:4] == b’\x02\x00\x00\x00’)
AssertionErrorDuring handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/Users/xxxx/Library/Python/3.9/bin/mdict”, line 8, in
sys.exit(run())
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/ main .py”, line 102, in run
reader.unpack(args.exdir, args.mdict, split=split, convert_chtml=args.convert_chtml)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/reader.py”, line 157, in unpack
mdx = MDX(source, encoding, substyle, passcode)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 505, in init
MDict. init (self, fname, encoding, passcode)
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 104, in init
self._key_list = self._read_keys_brutal()
File “/Users/xxxx/Library/Python/3.9/lib/python/site-packages/mdict_utils/base/readmdict.py”, line 382, in _read_keys_brutal
assert key_block_info[:4] == b’\x02\x00\x00\x00’
AssertionError
这个问题看着像是 mdict-utils 检测压缩方式不为 2(zlib压缩), 现在 wikit 生成的 mdx 默认是不压缩的(为 0), 它这里断言失败了. 不过目前没有更多精力去兼容其他工具了.
想问问作者,对于复杂的mdx词典转换怎么处理, 比如在用 PYGLOSSARY 转换成功后,处理词典xml文件的问题 :链接跳转,发音、图片等, 还有转换语音文件 ,有些词典的发音文件是spx格式,需要转换成wav格式或者mp3 ,完成后再进行编译词典。 wikit 这一部分是怎么处理的呢?

链接跳转,发音、图片等, 还有转换语音文件 ,有些词典的发音文件是spx格式,需要转换成wav格式或者mp3 ,完成后再进行编译词典。
这些属于完善功能的部分, 目前暂无这方面的计划.
目前制作mac 词典的话 可以添加有发音的词典吗?

mdict-utils 检测压缩方式不为 2(zlib压缩)
这就是没有统一 specifications 的弊端。
虽然可以说mdx2.0是个基本上已经开源的格式,看上去实现不难。但大大小小的坑是真的多,导致不同程序之间的各类兼容性问题。
在转换词典有个报错 ,词典是简明Bing
Error: [src/main.rs].[204]: Failed to create mac dictionary
Caused by:
0: [src/mac.rs].[180]: cannot run command '/Users/vivian/Library/Application Support/wikit/macddk/bin/build_dict.sh' 'concisebing' '/Users/vivian/Downloads/dict/wikit/concise_bing.xml' '/Users/vivian/Downloads/dict/wikit/concise_bing.css' '/Users/vivian/Downloads/dict/wikit/concise_bing.plist'
1: [src/util.rs].[95]: /Users/vivian/Downloads/dict/wikit/concise_bing.xml:6: parser error : attributes construct error
<link href="concise_bing.css" rel="stylesheet" type="text/css"
^
/Users/vivian/Downloads/dict/wikit/concise_bing.xml:6: parser error : Couldn't find end of Start Tag link
<link href="concise_bing.css" rel="stylesheet" type="text/css"
^
/Users/vivian/Downloads/dict/wikit/concise_bing.xml : failed to parse
Error.
作者前面有说。

因为 mac 词典开发套件使用的是 XHTML, 也就是更严格的 HTML 标准, 这里的问题是 link 标签, 在 html 中 link 标签是可以不封闭的, 也就是说下面的写法是正确的
<link rel="stylesheet" href="rhwdae.css">
但是 XHTML 要求任何标签都必须是封闭的, 因此要写成
<link rel="stylesheet" href="rhwdae.css" />
这个我已经改好标签了, 就是不知道如何进行下一步