本帖最后由 独行者 于 2020-8-3 09:34 编辑
2 l7 ]8 ?/ }1 O
8 ?; O! I: ]0 _. {& t' y, Q储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。 8 W$ _, O: S: T; T% T2 h9 J
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。 / a( j$ w7 W' k0 }( @
例子: - Antarctica8 n3 H: q, g9 W
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
2 b8 g. `# q5 i. H3 W, i; n l - </>
复制代码 " B& x6 H& v7 `9 w. b% t
' K3 R) q! D2 u6 _& U. V2 x9 A5 w词典 HMTL格式; t+ ~; Y- B4 b3 u( e( v7 P
和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。 0 B5 r, r6 q/ b/ _7 ?# w
引入 css 和 js 文件9 H h( G& v% O/ g, n
7 n% Z* t' v" u- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码 4 C6 B- ^* _: j5 }
引入音频+ K* ?- |6 S0 K1 |
( X$ P7 Y: B0 r1 i/ e" X. E- <a href="sound://sound_file.mp3">keyword</a>
复制代码 $ {0 n# K% k1 }4 C- d
引入图片
: z1 {% u0 r: T% a格式一: - <img src="file://abc.gif">
复制代码
" z* K/ h# v+ H7 }7 a" R格式二: file:// 可以省略 8 T) |% ]/ @; }) u
跳转
0 n6 F% z9 U0 C- t; x两种形式: 资源& u2 j% h2 b5 U0 A; ~
HTML 中引入资源文件时根目录为 mdx 所在目录。
4 \, P9 b! v3 f8 T" C/ M1 i 存放
, m7 V9 {+ r, m" ?! V6 K' F* L优先级裸露的资源文件 > mdd 中的资源文件。 $ A6 Z1 \- O; q: j5 W9 [' c/ n
) d7 g! W8 f9 Q3 |
词典软件
, q# s- L( P- E
: d5 r+ z4 V v% e% D2 JMDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。
8 T7 ^9 D0 L- C5 z- D GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
e8 H# L+ @' E: t; f3 f, I; R/ N
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。
6 @) ^8 n- v* v8 K9 N; q
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。% R$ E8 Y% w* m. l0 w6 v
- P5 n2 a: }" Q1 z 如原始 CSS - @charset "utf-8";& y/ G( Z' G7 C' D+ U9 @' }- h
-
) R) u4 U( Q. |1 m - body {$ I9 u, |* \7 J* d9 T) H6 t" Q6 t
- margin: 2em;3 u- e7 ]8 ]. A7 R9 L1 d* k
- }9 ]# r5 K/ w8 F# c5 m8 I0 t
- . j9 i3 S! q6 i# s8 _- q: b
- a:hover {) D+ F' {( f7 X, o1 k
- color: #4372b6;
6 [# X, o" r5 t% Q7 y& K9 Z( ?- p1 o - text-decoration: underline5 m8 I9 U" |% F( @3 {* S; {: K( z x s4 X* f
- }
复制代码 8 x& N# g( n9 j5 l
GoldenDict 会解析为 - @charset "utf-8";
7 Z2 [0 k6 W/ V, Z. A
# G; s& Z1 {5 Y" `6 D+ S! k# j- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body { n* h6 e u7 E. e
- margin: 2em;( e, d9 B; Z U' B5 n1 ~4 l5 _+ ?
- }
/ \1 b* I# U" Z - 5 Z) O$ z& g2 \# R) z& P
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover { g F, Y6 {, L4 k
- color: #4372b6;
7 a3 K1 j6 ]3 f% d - text-decoration: underline- X0 Q0 l$ L: U P8 N$ C9 t0 b
- }
复制代码 / m) E9 f5 X& K* d, o( |+ s/ d: ?( A
而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8";
: g, I) h8 `% ?( p4 ` - 4 F9 {* w/ f$ s. F I
- body{9 E- p+ j4 K5 O
- margin: 2em;4 q1 K5 s- t$ ^ Y, N# I U
- } 3 W# N2 A9 s' h ]6 R7 h
- 3 P1 y5 ^6 `& [( [3 `$ f
- #ID224342347child a:hover {
, B9 X8 S7 _# I1 n% ^- F+ t; Q) E - color: #4372b6;
U; C x& ^( |3 [( B! `$ Y c - text-decoration: underline
# k3 j' D$ j8 x6 ]+ L - }
复制代码 0 W% Y _, [7 X0 D
这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。 2 W& ^9 Q$ G7 `
制作工具- , f5 h/ K5 f9 X. E* A0 v( N( `2 d( G
制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。
; V0 L8 J1 D, P/ p* K" |5 |: V
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options:
' w. q1 o' w. w1 ~Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。 & [% Y- [2 R: s) j, i
: w4 N' P. p2 u8 L 制作技巧
8 {& f! P& @4 [$ ]% D+ p0 f
7 n; |% Q# T: U
: F& e- F: s# }! R4 f. V7 q: i% U7 s: e7 d$ O" n: [6 D+ k, w
|