本帖最后由 独行者 于 2020-8-3 09:34 编辑
* ~2 C/ Y* O5 }" ~' H: b: l3 ^3 @/ b5 k
储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。
+ o& w: M1 Y8 } f' u$ V( D, q
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。
$ {1 @+ v# z& g, `+ S9 H
例子: - Antarctica
" k" a/ k) K8 W% I: l' O - <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
- Z d( `9 F: {, `# K# ]8 i6 \ - </>
复制代码
& O! H! A+ a2 _8 n/ L5 [ r8 I; q5 @- T$ F% D |
词典 HMTL格式. _6 r- r9 P" K/ N/ H% p
和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。 ! S& c2 C+ z# L, l( ~4 v
引入 css 和 js 文件
9 j: r, R0 p0 _0 I4 I$ |8 H! n: E7 v& m- o
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码 ' z$ J! G6 L" A* A) ?
引入音频
* i1 t9 @) a4 T: {. T" z% U b
- <a href="sound://sound_file.mp3">keyword</a>
复制代码
' P* w( A6 Y, x8 K+ x; C/ U引入图片
8 R$ U! q# f3 h Z% e* |格式一: - <img src="file://abc.gif">
复制代码
! H8 j% C# M% R# S$ Q# `格式二: file:// 可以省略
1 Q! m; q; w6 e6 d" e9 `跳转3 y2 c4 f- U/ t* \3 [8 P
两种形式: 资源
: m4 S" X' F; k) l, yHTML 中引入资源文件时根目录为 mdx 所在目录。 . x- ^: t+ t! I4 h
存放
) l' J" I4 z6 q; i; }. X5 f% i. z& q! s7 W优先级裸露的资源文件 > mdd 中的资源文件。 * A& \! p) z6 A
4 ], R( \* C. F7 R7 e; h4 k词典软件
" }% ~$ B2 {0 N0 r5 b4 d0 H$ ?& a0 v: c% O5 N
MDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。 ) s! e1 m8 p. j& Z
GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
" j$ p4 `- o7 f5 @2 d( @
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。
4 b1 K0 T. l' A$ f1 A
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。
6 U8 k: @ E$ t5 ]
7 {! |6 u- ~8 d- i- z9 e* K5 l7 S 如原始 CSS - @charset "utf-8";4 f* b9 V+ R: R
-
! A9 f) a0 z- A" c' ^ i: r: p' J - body {
0 k* v9 l$ o: B% B; q: @ - margin: 2em;
& S' \2 @& w% m4 _% |& m- o - }
2 G6 O9 S, @9 U" a5 ^ -
+ P& G" z( {$ k0 p7 j - a:hover {
% ^( k- n& Z$ X/ }& a - color: #4372b6;
: C# L3 X6 R( w. A1 O% u# t - text-decoration: underline
3 _' D X/ ~- a - }
复制代码
/ p& s8 I0 g" W6 zGoldenDict 会解析为 - @charset "utf-8"; 3 b; j! J* Q+ ]( \4 s
- * P' q0 \& o0 s3 L5 w/ j3 X% z' \
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
$ K4 z- r& d- s1 m8 ` - margin: 2em;5 v: e6 M$ U+ J! C# V
- }
' m4 C/ s" [% O! d8 [+ A
- J" T. {( Q" V6 {% w2 G. R- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {
3 A* [9 T! M5 S2 n9 _1 w - color: #4372b6;
6 w8 l- y: x& l! o# j4 k# `0 |# l - text-decoration: underline; ^4 K8 u$ x, ^& a8 q
- }
复制代码 7 O- @0 S9 u; ^( L' Q. J
而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8";
1 J5 }( M& u! r - # ]4 l8 |3 g& z4 q1 ?
- body{
4 Z( j5 T# x, p) ?( b( r - margin: 2em;
# h8 |% Y0 c, M! j- V0 [ - } & x- S6 p" T; t W+ F0 e
- 5 [* O& ^4 N- C. Q
- #ID224342347child a:hover {
3 R0 x" U! N8 Y8 x - color: #4372b6;
- O" x H4 S- Y8 h+ F0 v - text-decoration: underline9 e7 _$ l% X* @5 i" ^
- }
复制代码
3 d) L" U8 x# ~0 k7 r) Z E这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。 5 h' L" l5 ?; l5 o5 c; J3 {: ]4 m6 H# X- X
制作工具制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。 * p' ]# y* k- a
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options: ~ \ S# U( e: C- v. {6 O
Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。
+ }/ S$ \7 e. b, o 4 b* V' L+ M1 r
制作技巧
$ p+ o3 ? K, |* }& [+ q) y$ @- x3 e" U" R
/ ~+ x$ q3 f/ U* ?7 r0 P+ \7 c6 E
1 D* N* F! ]4 p# ?
|