本帖最后由 独行者 于 2020-8-3 09:34 编辑
; x9 F8 X; ~1 g% W; D I. X8 t+ S
" ~3 B0 I* i9 K- a5 n" ^储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。 / v0 H% ?+ q4 q. U7 P2 X/ k$ {! @$ s
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。
/ ^+ V K# V& E9 y2 ]
例子: - Antarctica
0 B% v" `; N% ^8 e - <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>' b9 y- H% S, m" c: B
- </>
复制代码
% G; s) E! T8 G. r2 d; c
9 s. ?3 l C- M: Z8 ?, ^1 E H' C词典 HMTL格式
1 \+ p9 ]; e: Y. e和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。
5 x7 V5 {9 R, L* o9 E6 I1 k# i引入 css 和 js 文件9 {( D; J+ Y& V3 V
9 L( i/ N/ b9 d. J. F- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码
7 [- C! t+ ~7 B+ @' }: q/ i引入音频1 D' {- C" x+ q7 h1 T
. I" R2 O: |# e0 i! v- `+ f- <a href="sound://sound_file.mp3">keyword</a>
复制代码
) a& ^: z) W! R8 s% P3 z4 R2 b引入图片) r0 s' e v0 ^$ h. I6 R: p% ?( s
格式一: - <img src="file://abc.gif">
复制代码 4 h, Z! I- V j4 m0 C
格式二: file:// 可以省略 2 {6 z5 l9 k3 ^; d8 h
跳转
E$ p* o& U5 T4 C: t两种形式: 资源- p: }- }2 q* Q9 ~
HTML 中引入资源文件时根目录为 mdx 所在目录。
+ A5 P: ^- N1 w% j* p* J! W 存放9 w7 j$ N9 \! P# u" C! B
优先级裸露的资源文件 > mdd 中的资源文件。 $ X* s* w- h) \2 z6 M; l
- t2 L8 `5 ]& L9 [词典软件
9 w6 j) N' n8 T. C: B1 w Z+ X5 Q! z2 E6 m @& m! M1 |5 b
MDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。 9 w2 W* g6 Z6 @" Y W( L
GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。 ! m, O- M0 h$ D8 @
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。 0 u9 ]8 }' E6 T- { ]3 l
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。. `/ K' u2 |% y8 \- Q l
& B+ p& d" ^! B6 J" F- P 如原始 CSS - @charset "utf-8";; ~' w& q1 J- e' O0 R
- 1 |! s/ V5 }2 D; K0 L; O, W7 s
- body {
% J8 r1 k! X5 A3 e( }+ H1 g - margin: 2em;
+ F% d% H y2 F4 [* f2 f* N1 T - }3 e8 q5 t5 [ T6 U& z( V( b
-
( w) W& K4 `; M - a:hover {2 U$ W' S2 ^2 y0 V
- color: #4372b6;2 D# K$ Q" J: i; i
- text-decoration: underline
! g6 o* h/ u# k0 X - }
复制代码 6 G4 Y3 I. y( @7 R3 Z" p- j+ P, k
GoldenDict 会解析为 - @charset "utf-8";
- \0 ?% J1 M9 N' p
_! i; o' c! F4 O! j5 ^( R- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {' B7 L, F& x: n" ~5 W" `
- margin: 2em;5 L& h' B( S% n5 x
- }
" l& V9 j {4 U' F! L - : T1 }5 s) r5 }6 s1 i6 r, U1 g
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {/ }2 W4 @3 a8 `/ ]) A
- color: #4372b6;
; L5 I: K' p3 F& s - text-decoration: underline
& g* K! T% Q5 ]. Q7 B! S5 x+ G - }
复制代码 ( j- {, ]) _) l
而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8"; " P9 b$ T. v! K e2 v$ O, |, Q9 Y
- 9 ^5 x/ b( ^4 L+ k( g, `
- body{
" l; U h) ]% w# C - margin: 2em;
6 B, ]% n7 \8 }& a - } ' R/ u! w6 X6 S# n3 w7 }
- ; h- I- z2 y. F; W t" w: F# c! ?
- #ID224342347child a:hover {, ~" |$ [1 |' Y& Z/ K
- color: #4372b6;
; h4 w& J$ K1 z - text-decoration: underline8 k8 |/ ?0 Y: Z& x0 r7 q# A, W
- }
复制代码 $ I x ~+ ]/ d4 y9 m0 V1 T1 `0 `
这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。 0 u# ~( P0 `# Q" y; ^
制作工具
# X$ Y1 }- u, w1 R! A2 \+ H 制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。
3 E! t- g2 t k5 ?1 B% L
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options:
! X9 n u0 f: u7 fOriginal:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。
) `: f. w* p8 [* [% \$ m , U' j& s- c: i1 b8 A
制作技巧
O, k. C5 {2 \# n* w' f0 R3 O& x) F4 ?! B: `# ]. k" [& }6 f
) d3 g2 U# ] a. a/ C
& d, [/ s0 j+ S+ x3 Z, A
|