本帖最后由 独行者 于 2020-8-3 09:34 编辑 1 g1 `/ J7 i: s4 Y, a
K6 Y# p2 \6 T储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。
3 {3 [# t4 h! ?% [# K
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。 1 \/ [2 s1 S" x! b
例子: - Antarctica5 G5 @, I5 f, d1 B# `, b
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
: E) Q* i8 `% L" k9 a9 L" f9 U - </>
复制代码
( Z1 l$ s. \% _& M. r" {4 C! A1 W3 |) A) A' h: s% ] l/ I
词典 HMTL格式/ ~! s8 B3 {+ m
和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。 $ e e4 M p5 y& {- n% x* a
引入 css 和 js 文件; D3 V3 }) R8 O1 }3 b4 R
; {1 W; O, |5 x+ B" b- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码
0 T6 G1 B& R4 J# G* L+ s引入音频5 m# ?, p2 }, }: j) Z S
; Y# ?0 D) V) r; }" A# Q4 Y- <a href="sound://sound_file.mp3">keyword</a>
复制代码
! R; \" i1 }8 D+ B引入图片
" m* o) r7 d E3 I( Y格式一: - <img src="file://abc.gif">
复制代码
% l$ S4 w# x, m7 q格式二: file:// 可以省略 % N" N# t0 i+ z' ?1 l' `
跳转( U7 B, l9 ]$ V0 I+ g4 k `) g ]
两种形式: 资源5 K. ?% U1 c- q, J( F" m5 j
HTML 中引入资源文件时根目录为 mdx 所在目录。 6 `* A; X2 [/ L5 _; \3 m
存放
- f" W2 H: Z* T! ~7 G优先级裸露的资源文件 > mdd 中的资源文件。 " ?) G8 j" y% p5 r9 Q0 j' q
/ I, ?( g. O1 R: Y0 y% A& I% W4 U( G
词典软件
: }) K' F/ S% |' r8 C
+ u5 Y4 I2 W$ iMDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。
& f7 z6 g9 A: l* D) d9 B# L7 y GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
, m V% z ^ ~" z7 h
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。
9 r6 }, I- o3 b: m) R S' E) g
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。
1 k+ R% s2 f1 B2 ?: q) p
- a$ p T( N/ `6 f$ l 如原始 CSS - @charset "utf-8";
6 Q- C: m; S. t -
2 X/ m! R* c- M( | - body {3 E$ w- R( c* R; V0 C* J
- margin: 2em;
" G6 D. Q$ W7 P6 ]- S0 e - }" `7 \3 ^) F9 k# c! H
- . }/ P2 n6 G% q4 Y' f" V
- a:hover {) D3 _# [& M- {
- color: #4372b6;8 a8 G) U+ E z$ `, w0 h
- text-decoration: underline
7 K0 @; I9 w6 D, l; c - }
复制代码 + O4 R y- X+ a9 ?+ q3 @
GoldenDict 会解析为 - @charset "utf-8"; ( I- ~& h. L* B
- & r* { v, _9 x% X0 j. f
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
* f$ f1 F1 T1 [5 Y - margin: 2em;
+ {/ o. X% @# O7 m! l - }
; Z" Z' v# [7 d/ K - % R4 s! r# ~' Y$ ]9 T0 G( Y6 `
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {
7 _4 S5 H) I1 v. X7 `2 o5 L - color: #4372b6;# y9 V3 W9 N- d2 }1 K; r0 F
- text-decoration: underline
' e- b D% P5 x, [5 i) y - }
复制代码 , T [. b$ \5 X: z* p! O& h
而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8";
. I+ a/ f. U9 V' G - 5 \. a( Z4 T. U. d/ j' k% {
- body{
\+ N* ^$ ?+ G - margin: 2em;, c5 N2 k) }6 \/ X
- } , }2 M# F2 b' _, ?- M4 }
. @# S( P1 ~5 u- t, r- G- #ID224342347child a:hover {6 X) j& o0 Y6 \3 ~3 M8 a5 d$ [
- color: #4372b6;
6 Z- D# j9 j! V - text-decoration: underline: V3 J& `: D2 B2 {2 {
- }
复制代码
9 }- }2 n7 n& B" R这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。
5 D4 S' X6 B) {% z' J 制作工具
, P1 f) s: D7 R0 o6 `; b! k 制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。 , F. |" B. v/ q6 @1 O& W. A
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options: 9 r0 e0 j+ G. n: _' U
Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。 ; h V$ a3 n" T. ]; g
2 Y7 d: @; \ Q5 V+ I
制作技巧
/ b6 E7 o5 N& B/ K' a
! e$ q1 `0 s4 x1 A+ _$ Q6 v% J* }6 G( g: x: d' @8 t
4 W( R3 z# x1 K% ^; O [ |