本帖最后由 独行者 于 2020-8-3 09:34 编辑 + ~5 y. o3 D8 }# P* E" r
" L$ p- _# Y2 O
储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。
' p, a/ _5 Q; c6 i
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。 . V* b2 ^4 Y! r0 `$ X3 x
例子: - Antarctica
% [- O. l; F5 X: f0 u" A - <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>- K5 Y9 _. i$ g; g" a; c8 \
- </>
复制代码
. Z! A8 Q# v& V9 |! `4 q3 m8 d" |
/ ^" O( c/ `* J% V( M1 A* H# O; n词典 HMTL格式0 R; j- L0 s+ l2 M& p- Y
和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。
% G6 M0 e# x) z! j5 ^引入 css 和 js 文件8 `$ {$ a4 }- ~/ P% @
9 \, }/ u. X* `! C+ {* y- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码 2 u8 f( c4 q q1 h$ d
引入音频
0 x2 y+ a2 [' R/ W$ }. g8 |. D
- V7 K/ c* B1 L- <a href="sound://sound_file.mp3">keyword</a>
复制代码
8 s: `) i, D0 a/ p5 k1 @引入图片
. H4 l$ M$ f4 J4 d# y( m: v8 D) A格式一: - <img src="file://abc.gif">
复制代码
& G: ]' e. m: P: k0 |4 a格式二: file:// 可以省略 ( i7 J# t9 E) S5 E, j
跳转) @ z- D/ }/ @1 S7 p
两种形式: 资源& F" o: }+ x! t1 c' m/ o* z
HTML 中引入资源文件时根目录为 mdx 所在目录。
: C% f4 ^# c( a0 N/ \ 存放& k/ x4 @+ `/ U! u2 r: e
优先级裸露的资源文件 > mdd 中的资源文件。 ; T) U4 U- H9 B0 ?' e" |" ~) @
; Z" z4 `& B& V9 Y词典软件. P) W& P# N$ y6 Y' S$ _
: }/ e7 E& f$ ]1 v- h8 f* y
MDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。
. ?+ W* u- o) g5 Z- A GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。 6 q) s. k5 \' g4 b l6 W
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。 % r- \% g- p3 u7 N
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。
8 i. Y8 O# `7 p
" p0 P) `% [4 h$ ~ 如原始 CSS - @charset "utf-8";
* A" n' B; M& i# \) t: x0 A9 e -
! o; n6 l3 {6 |5 E. a - body {, X! t4 Z- G' l% a, L0 o/ _9 I
- margin: 2em;9 m* }; x3 a0 {! |3 a
- }
) ~* a5 e! n; b! P4 ]- { -
4 {, E( |& F9 [1 f0 p0 B - a:hover {- ]) n& \4 G, d
- color: #4372b6;
& l4 V6 H9 [2 Z0 o& \ u4 M - text-decoration: underline4 F5 H) p' u0 G1 Y8 n
- }
复制代码 ! ?- I6 s1 o7 ?# p2 ~5 q) N/ y! ]9 F
GoldenDict 会解析为 - @charset "utf-8"; 3 c7 T) a E+ T% k) l4 i
- : H1 P, u0 r9 x! r2 S# A
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {3 R# J4 R* h' h$ E2 I# }
- margin: 2em;
0 ~' {) m( G' C' e6 Z8 t - }
& y+ g: S( G, f0 j8 g
' d( _3 z n; m1 z- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {
3 K" [5 ]0 { ?( z - color: #4372b6;
# J9 x8 e5 W3 T4 Z' u! l: I - text-decoration: underline* m7 |# _/ i& s( D, R
- }
复制代码 : q4 V! L! x2 }" a9 ]( |3 {
而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8";
/ X! K* e( @! z' C- } - , V( V1 |# ^! `. n5 N u. J
- body{5 ]8 J& {2 O! g) m: V! h7 j K: l
- margin: 2em;
% n7 P- L# t; F2 ^+ A6 U - }
3 h! A- E2 p7 Q
: |+ j: b9 z5 a/ p- #ID224342347child a:hover {! B# m6 D/ X- e! ~0 F
- color: #4372b6;' E* u5 \6 Z$ M$ i
- text-decoration: underline- ?1 z1 _# G1 x4 G. u( q
- }
复制代码 : p2 t* j! ` j( k( U6 d
这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。
: t. o9 c( C# E6 O+ ^ 制作工具制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。 2 o! L1 T2 z: g& o3 Z7 y. x' E+ b2 U
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options: 8 o R! ]' N' o2 p1 W
Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。
* a! c- Q( j6 |7 R8 h4 G7 t, s
( v" {$ V* C, c, x( } 制作技巧# y- e. Q; I8 K$ R6 Q ]
0 \# _; P& O m) t3 E( V% i( h& {$ C$ i3 |4 R
1 d! k' Q% o$ Y7 ]! Q- c9 i |